@tmagic/editor 1.3.3 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/style.css +6 -0
- package/dist/tmagic-editor.js +186 -141
- package/dist/tmagic-editor.js.map +1 -1
- package/dist/tmagic-editor.umd.cjs +189 -144
- package/dist/tmagic-editor.umd.cjs.map +1 -1
- package/package.json +11 -11
- package/src/components/ScrollViewer.vue +6 -4
- package/src/fields/DataSourceFields.vue +15 -10
- package/src/fields/KeyValue.vue +72 -31
- package/src/layouts/workspace/viewer/Stage.vue +5 -1
- package/src/services/editor.ts +3 -1
- package/src/services/ui.ts +7 -2
- package/src/theme/key-value.scss +7 -0
- package/src/type.ts +6 -3
- package/src/utils/data-source/formConfigs/http.ts +1 -0
- package/types/components/ScrollViewer.vue.d.ts +6 -6
- package/types/fields/KeyValue.vue.d.ts +2 -0
- package/types/services/ui.d.ts +2 -2
- package/types/type.d.ts +6 -3
|
@@ -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/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/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/utils/tree.ts","../src/components/TreeNode.vue","../src/components/Tree.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/layouts/sidebar/layer/use-filter.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/layouts/workspace/viewer/NodeListMenuTitle.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/dep.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 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[]) => {\n if (!Array.isArray(middleware)) throw new TypeError('Middleware 必须是一个数组!');\n for (const fn of middleware) {\n if (typeof fn !== 'function') throw new TypeError('Middleware 必须由函数组成!');\n }\n\n /**\n * @param {Object} args\n * @return {Promise}\n * @api public\n */\n return (args: any[], next?: Function) => {\n // last called middleware #\n let index = -1;\n return dispatch(0);\n function dispatch(i: number): Promise<void> {\n if (i <= index) return Promise.reject(new Error('next() 被多次调用'));\n index = i;\n let fn = middleware[i];\n if (i === middleware.length && next) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(...args, dispatch.bind(null, i + 1)));\n } catch (err) {\n return Promise.reject(err);\n }\n }\n };\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { compose } from '@editor/utils/compose';\n\nconst methodName = (prefix: string, name: string) => `${prefix}${name[0].toUpperCase()}${name.substring(1)}`;\n\nconst isError = (error: any): boolean => Object.prototype.toString.call(error) === '[object Error]';\n\nconst doAction = async (\n args: any[],\n scope: any,\n sourceMethod: any,\n beforeMethodName: string,\n afterMethodName: string,\n fn: (args: any[], next?: Function | undefined) => Promise<void>,\n) => {\n try {\n let beforeArgs = args;\n\n for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {\n beforeArgs = (await beforeMethod(...beforeArgs)) || [];\n\n if (isError(beforeArgs)) throw beforeArgs;\n\n if (!Array.isArray(beforeArgs)) {\n beforeArgs = [beforeArgs];\n }\n }\n\n let returnValue: any = await fn(beforeArgs, sourceMethod.bind(scope));\n\n for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {\n returnValue = await afterMethod(returnValue, ...beforeArgs);\n\n if (isError(returnValue)) throw returnValue;\n }\n\n return returnValue;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * 提供两种方式对Class进行扩展\n * 方法1:\n * 给Class中的每个方法都添加before after两个钩子\n * 给Class添加一个usePlugin方法,use方法可以传入一个包含before或者after方法的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n *\n * editorService.usePlugin({\n * beforeAdd(value) { return [value] },\n * afterAdd(result, value) { return result },\n * });\n *\n * editorService.add(); 最终会变成 () => {\n * editorService.beforeAdd();\n * editorService.add();\n * editorService.afterAdd();\n * }\n *\n * 调用时的参数会透传到before方法的参数中, 然后before的return 会作为原方法的参数和after的参数,after第一个参数则是原方法的return值;\n * 如需终止后续方法调用可以return new Error();\n *\n * 方法2:\n * 给Class中的每个方法都添加中间件\n * 给Class添加一个use方法,use方法可以传入一个包含源对象方法名作为key值的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n * editorService.use({\n * add(value, next) { console.log(value); next() },\n * });\n */\nexport default class extends EventEmitter {\n private pluginOptionsList: Record<string, Function[]> = {};\n private middleware: Record<string, Function[]> = {};\n private taskList: (() => Promise<void>)[] = [];\n private doingTask = false;\n\n constructor(methods: string[] = [], serialMethods: string[] = []) {\n super();\n\n methods.forEach((propertyName: string) => {\n const scope = this as any;\n\n const sourceMethod = scope[propertyName];\n\n const beforeMethodName = methodName('before', propertyName);\n const afterMethodName = methodName('after', propertyName);\n\n this.pluginOptionsList[beforeMethodName] = [];\n this.pluginOptionsList[afterMethodName] = [];\n this.middleware[propertyName] = [];\n\n const fn = compose(this.middleware[propertyName]);\n Object.defineProperty(scope, propertyName, {\n value: async (...args: any[]) => {\n if (!serialMethods.includes(propertyName)) {\n return doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);\n }\n\n // 由于async await,所以会出现函数执行到await时让出线程,导致执行顺序出错,例如调用了select(1) -> update -> select(2),这个时候就有可能出现update了2;\n // 这里保证函数调用严格按顺序执行;\n const promise = new Promise<any>((resolve, reject) => {\n this.taskList.push(async () => {\n try {\n const value = await doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);\n resolve(value);\n } catch (e) {\n reject(e);\n }\n });\n });\n\n if (!this.doingTask) {\n this.doTask();\n }\n\n return promise;\n },\n });\n });\n }\n\n public use(options: Record<string, Function>) {\n Object.entries(options).forEach(([methodName, method]: [string, Function]) => {\n if (typeof method === 'function') this.middleware[methodName].push(method);\n });\n }\n\n public usePlugin(options: Record<string, Function>) {\n Object.entries(options).forEach(([methodName, method]: [string, Function]) => {\n if (typeof method === 'function') this.pluginOptionsList[methodName].push(method);\n });\n }\n\n public removeAllPlugins() {\n Object.keys(this.pluginOptionsList).forEach((key) => {\n this.pluginOptionsList[key] = [];\n });\n Object.keys(this.middleware).forEach((key) => {\n this.middleware[key] = [];\n });\n }\n\n private async doTask() {\n this.doingTask = true;\n let task = this.taskList.shift();\n while (task) {\n await task();\n task = this.taskList.shift();\n }\n this.doingTask = false;\n }\n}\n","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 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: CodeBlockContent }): 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}\n\nexport interface LayerPanelSlots extends LayerNodeSlots {\n 'layer-panel-header'(props: {}): any;\n 'layer-node-tool'(props: { data: MNode }): any;\n 'layer-node-content'(props: { data: MNode }): 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}\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}\n\nexport interface ComponentGroupState {\n list: ComponentGroup[];\n}\n\nexport enum ColumnLayout {\n LEFT = 'left',\n CENTER = 'center',\n RIGHT = 'right',\n}\n\nexport interface SetColumnWidth {\n [ColumnLayout.LEFT]?: number;\n [ColumnLayout.CENTER]?: number | 'auto';\n [ColumnLayout.RIGHT]?: number;\n}\n\nexport interface GetColumnWidth {\n [ColumnLayout.LEFT]: number;\n [ColumnLayout.CENTER]: number;\n [ColumnLayout.RIGHT]: number;\n}\n\nexport interface StageRect {\n width: number;\n height: number;\n}\n\nexport interface UiState {\n /** 当前点击画布是否触发选中,true: 不触发,false: 触发,默认为false */\n uiSelectMode: boolean;\n /** 是否显示整个配置源码, true: 显示, false: 不显示,默认为false */\n showSrc: boolean;\n /** 画布显示放大倍数,默认为 1 */\n zoom: number;\n /** 画布容器的宽高 */\n stageContainerRect: StageRect;\n /** 画布顶层div的宽高,可用于改变画布的大小 */\n stageRect: StageRect;\n /** 编辑器列布局每一列的宽度,分为左中右三列 */\n columnWidth: GetColumnWidth;\n /** 是否显示画布参考线,true: 显示,false: 不显示,默认为true */\n showGuides: boolean;\n /** 是否显示标尺,true: 显示,false: 不显示,默认为true */\n showRule: boolean;\n /** 用于控制该属性配置表单内组件的尺寸 */\n propsPanelSize: 'large' | 'default' | 'small';\n /** 是否显示新增页面按钮 */\n showAddPageButton: boolean;\n\n /** 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 const traverseNode = (node: MNode, cb: (node: MNode, parents: MNode[]) => void, parents: MNode[] = []) => {\n cb(node, parents);\n\n if (node.items?.length) {\n parents.push(node);\n node.items.forEach((item: MNode) => {\n traverseNode(item, 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 */\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(['getStorage', 'getNamespace', 'clear', 'getItem', 'removeItem', 'setItem']);\n }\n\n /**\n * 获取数据存储对象,可以通过\n * const storageService = new StorageService();\n * storageService.usePlugin({\n * // 替换存储对象为 sessionStorage\n * async afterGetStorage(): Promise<Storage> {\n * return window.sessionStorage;\n * },\n * });\n */\n public async getStorage(): Promise<Storage> {\n return this.storage;\n }\n\n public async getNamespace(): Promise<string> {\n return this.namespace;\n }\n\n /**\n * 清理,支持storageService.usePlugin\n */\n public async clear(): Promise<void> {\n const storage = await this.getStorage();\n storage.clear();\n }\n /**\n * 获取存储项,支持storageService.usePlugin\n */\n public async getItem(key: string, options: Options = {}): Promise<any> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n const { protocol = options.protocol, item } = this.getValueAndProtocol(\n storage.getItem(`${options.namespace || namespace}:${key}`),\n );\n\n if (item === null) return null;\n\n switch (protocol) {\n case Protocol.OBJECT:\n 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 async key(index: number): Promise<string | null> {\n const storage = await this.getStorage();\n return storage.key(index);\n }\n\n /**\n * 移除存储项,支持storageService.usePlugin\n */\n public async removeItem(key: string, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n storage.removeItem(`${options.namespace || namespace}:${key}`);\n }\n\n /**\n * 设置存储项,支持storageService.usePlugin\n */\n public async setItem(key: string, value: any, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n let item = value;\n const protocol = options.protocol ? `${options.protocol}:` : '';\n if (typeof value === Protocol.STRING || typeof value === Protocol.NUMBER) {\n item = `${protocol}${value}`;\n } else {\n item = `${protocol}${serialize(value)}`;\n }\n storage.setItem(`${options.namespace || namespace}:${key}`, item);\n }\n\n public destroy() {\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n private getValueAndProtocol(value: string | null) {\n let protocol = '';\n\n if (value === null) {\n return {\n item: value,\n protocol,\n };\n }\n\n const item = value.replace(new RegExp(`^(${Object.values(Protocol).join('|')})(:)(.+)`), (_$0, $1, _$2, $3) => {\n protocol = $1;\n return $3;\n });\n\n return {\n protocol,\n item,\n };\n }\n}\n\nexport type StorageService = WebStorage;\nexport default new WebStorage();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive } from 'vue';\nimport { cloneDeep, mergeWith } from 'lodash-es';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { MComponent, MNode } from '@tmagic/schema';\nimport { guid, toLine } from '@tmagic/utils';\n\nimport type { PropsState } from '@editor/type';\nimport { fillConfig } from '@editor/utils/props';\n\nimport BaseService from './BaseService';\n\nclass Props extends BaseService {\n private state = reactive<PropsState>({\n propsConfigMap: {},\n propsValueMap: {},\n });\n\n constructor() {\n super([\n 'setPropsConfig',\n 'getPropsConfig',\n 'setPropsValue',\n 'getPropsValue',\n 'createId',\n 'setNewItemId',\n 'fillConfig',\n 'getDefaultPropsValue',\n ]);\n }\n\n public setPropsConfigs(configs: Record<string, FormConfig>) {\n Object.keys(configs).forEach((type: string) => {\n this.setPropsConfig(toLine(type), configs[type]);\n });\n this.emit('props-configs-change');\n }\n\n public async fillConfig(config: FormConfig) {\n return fillConfig(config);\n }\n\n /**\n * 为指定类型组件设置组件属性表单配置\n * @param type 组件类型\n * @param config 组件属性表单配置\n */\n public async setPropsConfig(type: string, config: FormConfig) {\n this.state.propsConfigMap[type] = await this.fillConfig(Array.isArray(config) ? config : [config]);\n }\n\n /**\n * 获取指点类型的组件属性表单配置\n * @param type 组件类型\n * @returns 组件属性表单配置\n */\n public async getPropsConfig(type: string): Promise<FormConfig> {\n if (type === 'area') {\n return await this.getPropsConfig('button');\n }\n\n return cloneDeep(this.state.propsConfigMap[type] || (await this.fillConfig([])));\n }\n\n public setPropsValues(values: Record<string, 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 * @param {Object} config 组件配置\n */\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n public async setNewItemId(config: MNode) {\n config.id = await this.createId(config.type || 'component');\n\n if (config.items && Array.isArray(config.items)) {\n for (const item of config.items) {\n await this.setNewItemId(item);\n }\n }\n\n return config;\n }\n\n /**\n * 获取默认属性配置\n * @param type 组件类型\n * @returns Object\n */\n public async getDefaultPropsValue(type: string) {\n return ['page', 'container'].includes(type)\n ? {\n type,\n layout: 'absolute',\n style: {},\n name: type,\n items: [],\n }\n : {\n type,\n style: {},\n name: type,\n };\n }\n\n public resetState() {\n this.state.propsConfigMap = {};\n this.state.propsValueMap = {};\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n}\n\nexport type PropsService = Props;\n\nexport default new Props();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive, toRaw } from 'vue';\nimport { cloneDeep, isObject, mergeWith, uniq } from 'lodash-es';\n\nimport type { Id, MApp, MComponent, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport historyService from '@editor/services/history';\nimport storageService, { Protocol } from '@editor/services/storage';\nimport type { AddMNode, EditorNodeInfo, PastePosition, StepValue, StoreState, StoreStateKey } from '@editor/type';\nimport { LayerOffset, Layout } from '@editor/type';\nimport {\n change2Fixed,\n COPY_STORAGE_KEY,\n Fixed2Other,\n fixNodePosition,\n getInitPositionStyle,\n getNodeIndex,\n isFixed,\n 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 'getLayout',\n 'select',\n 'doAdd',\n 'add',\n 'doRemove',\n 'remove',\n 'doUpdate',\n 'update',\n 'sort',\n 'copy',\n 'paste',\n 'doPaste',\n 'doAlignCenter',\n 'alignCenter',\n 'moveLayer',\n 'moveToContainer',\n 'move',\n 'undo',\n 'redo',\n 'highlight',\n 'dragTo',\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 this.pushHistoryState();\n\n this.emit('update', newNodes);\n return Array.isArray(config) ? newNodes : newNodes[0];\n }\n\n /**\n * 将id为id1的组件移动到id为id2的组件位置上,例如:[1,2,3,4] -> sort(1,3) -> [2,1,3,4]\n * @param id1 组件ID\n * @param id2 组件ID\n * @returns void\n */\n public async sort(id1: Id, id2: Id): Promise<void> {\n const root = this.get('root');\n if (!root) throw new Error('root为空');\n\n const node = this.get('node');\n if (!node) throw new Error('当前节点为空');\n\n const parent = cloneDeep(toRaw(this.get('parent')));\n if (!parent) throw new Error('父节点为空');\n\n const index2 = parent.items.findIndex((node: MNode) => `${node.id}` === `${id2}`);\n // 在 id1 的兄弟组件中若无 id2 则直接 return\n if (index2 < 0) return;\n const index1 = parent.items.findIndex((node: MNode) => `${node.id}` === `${id1}`);\n\n parent.items.splice(index2, 0, ...parent.items.splice(index1, 1));\n\n await this.update(parent);\n await this.select(node);\n\n this.get('stage')?.update({\n config: cloneDeep(node),\n parentId: parent.id,\n root: cloneDeep(root),\n });\n\n this.addModifiedNodeId(parent.id);\n this.pushHistoryState();\n }\n\n /**\n * 将组将节点配置转化成string,然后存储到localStorage中\n * @param config 组件节点配置\n * @returns 组件节点配置\n */\n public async copy(config: MNode | MNode[]): Promise<void> {\n await storageService.setItem(COPY_STORAGE_KEY, Array.isArray(config) ? config : [config], {\n protocol: Protocol.OBJECT,\n });\n }\n\n /**\n * 从localStorage中获取节点,然后添加到当前容器中\n * @param position 粘贴的坐标\n * @returns 添加后的组件节点配置\n */\n public async paste(position: PastePosition = {}): Promise<MNode | MNode[] | void> {\n const config: MNode[] = await storageService.getItem(COPY_STORAGE_KEY);\n\n if (!Array.isArray(config)) return;\n\n const node = this.get('node');\n\n let parent: MContainer | null = null;\n // 粘贴的组件为当前选中组件的副本时,则添加到当前选中组件的父组件中\n if (config.length === 1 && config[0].id === node?.id) {\n parent = this.get('parent');\n if (parent?.type === NodeType.ROOT) {\n parent = this.get('page');\n }\n }\n\n const pasteConfigs = await this.doPaste(config, position);\n\n return this.add(pasteConfigs, parent);\n }\n\n public async doPaste(config: MNode[], position: PastePosition = {}): Promise<MNode[]> {\n const pasteConfigs = await beforePaste(position, cloneDeep(config));\n return pasteConfigs;\n }\n\n public async doAlignCenter(config: MNode): Promise<MNode> {\n const parent = this.getParentById(config.id);\n\n if (!parent) throw new Error('找不到父节点');\n\n const node = cloneDeep(toRaw(config));\n const layout = await this.getLayout(parent, node);\n if (layout === Layout.RELATIVE) {\n return config;\n }\n\n if (!node.style) return config;\n\n const stage = this.get('stage');\n const doc = stage?.renderer.contentWindow?.document;\n\n if (doc) {\n const el = doc.getElementById(`${node.id}`);\n const parentEl = 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\n const pasteConfig = await propsService.setNewItemId(configItem);\n\n if (pasteConfig.style) {\n const { left, top } = pasteConfig.style;\n // 判断能转换为数字时,做粘贴偏移量计算\n if (typeof left === 'number' || (!!left && !isNaN(Number(left)))) {\n pasteConfig.style.left = Number(left) + offsetX;\n }\n if (typeof top === 'number' || (!!top && !isNaN(Number(top)))) {\n pasteConfig.style.top = Number(top) + offsetY;\n }\n\n pasteConfig.style = {\n ...pasteConfig.style,\n ...pastePosition,\n };\n }\n const root = editorService.get('root');\n if (isPage(pasteConfig) && root) {\n pasteConfig.name = generatePageNameByApp(root);\n }\n return pasteConfig as MNode;\n }),\n );\n return pasteConfigs;\n};\n\n/**\n * 将元素粘贴到容器内时,将相对于画布坐标转换为相对于容器的坐标\n * @param position PastePosition 粘贴时相对于画布的坐标\n * @param id 元素id\n * @returns PastePosition 转换后的坐标\n */\nexport const getPositionInContainer = (position: PastePosition = {}, id: Id) => {\n let { left = 0, top = 0 } = position;\n const parentEl = editorService.get('stage')?.renderer?.contentWindow?.document.getElementById(`${id}`);\n const parentElRect = parentEl?.getBoundingClientRect();\n left = left - (parentElRect?.left || 0);\n top = top - (parentElRect?.top || 0);\n return {\n left,\n top,\n };\n};\n\nexport const getAddParent = (node: MNode) => {\n const curNode = editorService.get('node');\n\n let parentNode;\n if (isPage(node)) {\n parentNode = editorService.get('root');\n } else if (curNode?.items) {\n parentNode = curNode as MContainer;\n } else if (curNode?.id) {\n parentNode = editorService.getParentById(curNode.id, false);\n }\n return parentNode;\n};\n\nexport const getDefaultConfig = async (addNode: AddMNode, parentNode: MContainer) => {\n const { type, inputEvent, ...config } = addNode;\n const layout = await editorService.getLayout(toRaw(parentNode), addNode as MNode);\n const newNode = { ...toRaw(await propsService.getPropsValue(type, config)) };\n newNode.style = getInitPositionStyle(newNode.style, layout);\n return newNode;\n};\n","<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';\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: 'desc',\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 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) => {\n if (!value || typeof value !== 'object') throw new Error('数据格式错误');\n\n const fields: DataSchema[] = [];\n Object.entries(value).forEach(([key, value]) => {\n const type = getValueType(value);\n\n let childFields: DataSchema[] = [];\n if (Array.isArray(value) && value.length > 0) {\n childFields = getFieldsConfig(value[0]);\n } else if (type === 'object') {\n childFields = getFieldsConfig(value);\n }\n\n fields.push({\n name: key,\n title: key,\n type,\n defaultValue: value,\n fields: childFields,\n });\n });\n\n return fields;\n};\n\nconst addFromJsonFromChange = ({ data }: { data: string }) => {\n console.log(data);\n try {\n const value = JSON.parse(data);\n\n props.model[props.name] = getFieldsConfig(value);\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 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</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\ndefineOptions({\n name: 'MEditorKeyValue',\n});\n\nconst props = withDefaults(\n defineProps<\n FieldProps<{\n type: 'key-value';\n name: string;\n text: string;\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][]>([]);\n\nwatchEffect(() => {\n records.value = Object.entries(props.model[props.name] || {});\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</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","<template>\n <TMagicTree\n ref=\"tree\"\n class=\"magic-editor-layer-tree\"\n node-key=\"id\"\n empty-text=\"暂无代码块\"\n :default-expanded-keys=\"expandedKeys\"\n :expand-on-click-node=\"false\"\n :data=\"codeList\"\n :props=\"{\n children: 'children',\n label: 'name',\n value: 'id',\n }\"\n :highlight-current=\"true\"\n :filter-node-method=\"filterNode\"\n @node-click=\"clickHandler\"\n >\n <template #default=\"{ data }\">\n <div :id=\"data.id\" class=\"list-container\">\n <div class=\"list-item\">\n <CodeIcon v-if=\"data.type === 'code'\" class=\"codeIcon\"></CodeIcon>\n <AppManageIcon v-if=\"data.type === 'node'\" class=\"compIcon\"></AppManageIcon>\n <span class=\"name\" :class=\"{ code: data.type === 'code', hook: data.type === 'key' }\"\n >{{ data.name }} ({{ data.id }})</span\n >\n <!-- 右侧工具栏 -->\n <div class=\"right-tool\" v-if=\"data.type === 'code'\">\n <TMagicTooltip effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editCode(data.id)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip v-if=\"editable\" effect=\"dark\" content=\"删除\" placement=\"bottom\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"deleteCode(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"code-block-panel-tool\" :id=\"data.id\" :data=\"data.codeBlockContent\"></slot>\n </div>\n </div>\n </div>\n </template>\n </TMagicTree>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport { Close, Edit, View } from '@element-plus/icons-vue';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport { tMagicMessage, tMagicMessageBox, TMagicTooltip, TMagicTree } from '@tmagic/design';\nimport type { Id } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport AppManageIcon from '@editor/icons/AppManageIcon.vue';\nimport CodeIcon from '@editor/icons/CodeIcon.vue';\nimport { type CodeBlockListSlots, CodeDeleteErrorType, type CodeDslItem, type Services } 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 { codeBlockService, depService, editorService } = inject<Services>('services') || {};\n\n// 代码块列表\nconst codeList = computed(() =>\n Object.values(depService?.getTargets(DepTargetType.CODE_BLOCK) || {}).map((target) => {\n // 组件节点\n const compNodes = Object.entries(target.deps).map(([id, dep]) => ({\n name: dep.name,\n type: 'node',\n id,\n children: dep.keys.map((key) => ({ name: key, id: key, type: 'key' })),\n }));\n return {\n id: target.id,\n name: target.name,\n type: 'code',\n codeBlockContent: codeBlockService?.getCodeContentById(target.id),\n children: compNodes,\n };\n }),\n);\n// 默认展开组件层级的节点\nconst expandedKeys = computed(() => codeList.value.map((item) => item.id));\nconst editable = computed(() => codeBlockService?.getEditStatus());\n\nconst filterNode = (value: string, data: CodeDslItem): boolean => {\n if (!value) {\n return true;\n }\n return `${data.name}${data.id}`.toLocaleLowerCase().indexOf(value.toLocaleLowerCase()) !== -1;\n};\n\n// 选中组件\nconst selectComp = (compId: Id) => {\n const stage = editorService?.get('stage');\n editorService?.select(compId);\n stage?.select(compId);\n};\n\nconst clickHandler = (data: any, node: any) => {\n if (data.type === 'node') {\n selectComp(data.id);\n } else if (data.type === 'key') {\n selectComp(node.parent.data.id);\n }\n};\n\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?.children.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\nconst tree = ref<InstanceType<typeof TMagicTree>>();\n\ndefineExpose({\n filter(val: string) {\n tree.value?.filter(val);\n },\n});\n</script>\n","<template>\n <TMagicScrollbar class=\"m-editor-code-block-list m-editor-dep-list-panel\">\n <slot name=\"code-block-panel-header\">\n <div class=\"search-wrapper\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <TMagicButton 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 <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 <TMagicTree\n ref=\"tree\"\n class=\"magic-editor-layer-tree\"\n node-key=\"id\"\n empty-text=\"暂无代码块\"\n default-expand-all\n :expand-on-click-node=\"false\"\n :data=\"list\"\n :highlight-current=\"true\"\n @node-click=\"clickHandler\"\n >\n <template #default=\"{ data }\">\n <div :id=\"data.id\" class=\"list-container\">\n <div class=\"list-item\">\n <Icon v-if=\"data.type === 'code'\" class=\"codeIcon\" :icon=\"Coin\"></Icon>\n <Icon v-if=\"data.type === 'node'\" class=\"compIcon\" :icon=\"Aim\"></Icon>\n <span class=\"name\" :class=\"{ code: data.type === 'ds', hook: data.type === 'key' }\">{{\n data.type === 'key' ? data.name : `${data.name}(${data.id})`\n }}</span>\n <!-- 右侧工具栏 -->\n <div class=\"right-tool\" v-if=\"data.type === 'ds'\">\n <TMagicTooltip effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editHandler(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip v-if=\"editable\" effect=\"dark\" content=\"删除\" placement=\"bottom\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"removeHandler(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"data-source-panel-tool\" :data=\"data\"></slot>\n </div>\n </div>\n </div>\n </template>\n </TMagicTree>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport { Aim, Close, Coin, Edit, View } from '@element-plus/icons-vue';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport { tMagicMessageBox, TMagicTooltip, TMagicTree } from '@tmagic/design';\nimport { DepData, Id } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\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) =>\n dep.keys.map((key) => ({ name: key, id: key, type: 'key', isMethod: type === 'method', isCond: type === 'cond' }));\n\nconst getNodeTreeConfig = (id: string, dep: DepData[string], type?: string) => ({\n name: dep.name,\n type: 'node',\n id,\n children: getKeyTreeConfig(dep, type),\n});\n\n/**\n * 生成tree中依赖节点的数据\n * @param children 节点\n * @param deps 依赖\n * @param type 依赖类型\n */\nconst mergeChildren = (children: any[], deps: DepData, type?: string) => {\n Object.entries(deps).forEach(([id, dep]) => {\n // 已经生成过的节点\n const nodeItem = children.find((item) => item.id === id);\n // 节点存在,则追加依赖的key\n if (nodeItem) {\n nodeItem.children = nodeItem.children.concat(getKeyTreeConfig(dep, type));\n } else {\n // 节点不存在,则生成\n children.push(getNodeTreeConfig(id, dep, type));\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 children: any[] = [];\n // 数据源依赖分为三种类型:key/node、method、cond,是分开存储,这里将其合并展示\n mergeChildren(children, dsDeps);\n mergeChildren(children, dsMethodDeps, 'method');\n mergeChildren(children, dsCondDeps, 'cond');\n\n return {\n id: ds.id,\n name: ds.title,\n type: 'ds',\n children,\n };\n }),\n);\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 = (data: any, node: any) => {\n if (data.type === 'node') {\n selectComp(data.id);\n } else if (data.type === 'key') {\n selectComp(node.parent.data.id);\n }\n};\n\nconst tree = ref<InstanceType<typeof TMagicTree>>();\n\ndefineExpose({\n filter(val: string) {\n tree.value?.filter(val);\n },\n});\n</script>\n","<template>\n <TMagicScrollbar class=\"data-source-list-panel m-editor-dep-list-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","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\">{{ `${data.name} (${data.id})` }}</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-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-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 && props.data.items.length > 0);\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-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-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","<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, 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\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\nconst canPaste = ref(false);\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 canPaste.value = true;\n },\n});\n\nexport const usePasteMenu = (menu?: Ref<InstanceType<typeof ContentMenu> | undefined>): MenuButton => ({\n type: 'button',\n text: '粘贴',\n icon: markRaw(DocumentCopy),\n display: () => canPaste.value,\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 { type ComputedRef, ref } from 'vue';\n\nimport { Id, MNode, MPage } from '@tmagic/schema';\n\nimport { LayerNodeStatus } from '@editor/type';\nimport { traverseNode } from '@editor/utils';\nimport { updateStatus } from '@editor/utils/tree';\n\nexport const useFilter = (\n nodeStatusMap: ComputedRef<Map<Id, LayerNodeStatus> | undefined>,\n page: ComputedRef<MPage | null | undefined>,\n) => {\n // tree方法:对树节点进行筛选时执行的方法\n const filterIsMatch = (value: string, data: MNode): boolean => {\n if (!value) {\n return true;\n }\n let name = '';\n if (data.name) {\n name = data.name;\n } else if (data.items) {\n name = 'container';\n }\n return `${data.id}${name}${data.type}`.includes(value);\n };\n\n const filterNode = (text: string) => (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 const filter = (text: string) => {\n if (!page.value?.items?.length) return;\n\n page.value.items.forEach((node) => {\n traverseNode(node, filterNode(text));\n });\n };\n\n return {\n filterText: ref(''),\n filterTextChangeHandler(text: string) {\n filter(text);\n },\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, type ComputedRef, 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 = (\n services: Services | undefined,\n pageId: Id,\n initalLayerNodeStatus?: Map<Id, LayerNodeStatus>,\n) => {\n const map = new Map<Id, LayerNodeStatus>();\n\n map.set(pageId, {\n visible: true,\n expand: true,\n selected: true,\n draggable: false,\n });\n\n services?.editorService.getNodeById(pageId)?.items.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: true,\n },\n );\n }),\n );\n\n return map;\n};\n\nexport const useNodeStatus = (services: Services | undefined, page: ComputedRef<MPage | null | undefined>) => {\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(services, page.id, 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=\"[page]\"\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-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-content=\"{ data: nodeData }\">\n <slot name=\"layer-node-content\" :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';\n\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { LayerPanelSlots, MenuButton, MenuComponent, Services } 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 { useFilter } from './use-filter';\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'));\n\nconst { nodeStatusMap } = useNodeStatus(services, page);\nconst { isCtrlKeyDown } = useKeybinding(services, tree);\n\nconst { filterTextChangeHandler } = useFilter(nodeStatusMap, page);\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 :key=\"config.$key ?? index\"\n :class=\"{ 'is-active': activeTabName === config.text }\"\n @click=\"activeTabName = config.text || `${index}`\"\n draggable=\"true\"\n @dragstart=\"dragstartHandler\"\n @dragend=\"dragendHandler(config.$key, $event)\"\n v-show=\"!floatBoxStates?.get(config.$key)?.status\"\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-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 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;\n height?: number;\n wrapWidth?: number;\n wrapHeight?: number;\n zoom?: number;\n correctionScrollSize?: {\n width: number;\n height: number;\n };\n }>(),\n {\n width: 0,\n height: 0,\n wrapWidth: 0,\n wrapHeight: 0,\n zoom: 1,\n correctionScrollSize: () => ({\n width: 0,\n height: 0,\n }),\n },\n);\n\nconst container = ref<HTMLDivElement>();\nconst el = ref<HTMLDivElement>();\nconst style = computed(\n () => `\n width: ${props.width}px;\n height: ${props.height}px;\n position: absolute;\n margin-top: 30px;\n `,\n);\n\nconst scrollWidth = ref(0);\nconst scrollHeight = ref(0);\n\nlet scrollViewer: ScrollViewer;\n\nonMounted(() => {\n if (!container.value || !el.value) return;\n scrollViewer = new ScrollViewer({\n container: container.value,\n target: el.value,\n zoom: props.zoom,\n correctionScrollSize: props.correctionScrollSize,\n });\n\n scrollViewer.on('scroll', (data: ScrollViewerEvent) => {\n hOffset.value = data.scrollLeft;\n vOffset.value = data.scrollTop;\n scrollWidth.value = data.scrollWidth;\n scrollHeight.value = data.scrollHeight;\n });\n});\n\nonUnmounted(() => {\n scrollViewer.destroy();\n});\n\nwatch(\n () => props.zoom,\n () => {\n scrollViewer.setZoom(props.zoom);\n },\n);\n\nconst vOffset = ref(0);\nconst vScrollHandler = (delta: number) => {\n vOffset.value += delta;\n scrollViewer.scrollTo({\n top: vOffset.value,\n });\n};\nconst hOffset = ref(0);\nconst hScrollHandler = (delta: number) => {\n hOffset.value += delta;\n scrollViewer.scrollTo({\n left: hOffset.value,\n });\n};\n\ndefineExpose({\n container,\n});\n</script>\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive } from 'vue';\n\nimport editorService from '@editor/services/editor';\nimport type { StageRect, UiState } from '@editor/type';\n\nimport BaseService from './BaseService';\n\nconst state = reactive<UiState>({\n uiSelectMode: false,\n showSrc: false,\n zoom: 1,\n stageContainerRect: {\n width: 0,\n height: 0,\n },\n stageRect: {\n width: 375,\n height: 817,\n },\n columnWidth: {\n left: 0,\n right: 0,\n center: 0,\n },\n showGuides: true,\n showRule: true,\n propsPanelSize: 'small',\n showAddPageButton: true,\n floatBox: new Map(),\n hideSlideBar: false,\n});\n\nclass Ui extends BaseService {\n constructor() {\n super(['zoom', 'calcZoom']);\n }\n\n public set<K extends keyof UiState, T extends UiState[K]>(name: K, value: T) {\n const mask = editorService.get('stage')?.mask;\n\n if (name === 'stageRect') {\n this.setStageRect(value as unknown as StageRect);\n return;\n }\n\n if (name === 'showGuides') {\n mask?.showGuides(value as unknown as boolean);\n }\n\n if (name === 'showRule') {\n mask?.showRule(value as unknown as boolean);\n }\n\n state[name] = value;\n }\n\n public get<K extends keyof UiState>(name: K) {\n return state[name];\n }\n\n public async zoom(zoom: number) {\n this.set('zoom', (this.get('zoom') * 100 + zoom * 100) / 100);\n if (this.get('zoom') < 0.1) this.set('zoom', 0.1);\n }\n\n public async calcZoom() {\n const { stageRect, stageContainerRect } = state;\n const { height, width } = stageContainerRect;\n if (!width || !height) return 1;\n\n // 30为标尺的大小\n const stageWidth = stageRect.width + 30;\n const stageHeight = stageRect.height + 30;\n\n if (width > stageWidth && height > stageHeight) {\n return 1;\n }\n // 60/80是为了不要让画布太过去贴住四周(这样好看些)\n return Math.min((width - 60) / stageWidth || 1, (height - 80) / stageHeight || 1);\n }\n\n public 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 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 <div\n style=\"\n text-align: center;\n padding: 5px 0;\n font-size: 14px;\n cursor: move;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \"\n ref=\"target\"\n >\n <TMagicTooltip placement=\"top\" :content=\"pinned ? '取消置于顶层自动隐藏' : '置于顶层不消失'\">\n <MIcon\n style=\"margin-left: 10px; cursor: pointer\"\n :icon=\"pinned ? PinnedIcon : PinIcon\"\n @click=\"pinHandler\"\n ></MIcon>\n </TMagicTooltip>\n\n <span>可选组件</span>\n\n <div style=\"margin-right: 10px\">\n <TMagicButton text size=\"small\" @click=\"closeHandler\">\n <MIcon :icon=\"Close\"></MIcon>\n </TMagicButton>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref } from 'vue';\nimport { Close } from '@element-plus/icons-vue';\nimport type { OnDrag } from 'gesto';\n\nimport { TMagicButton, TMagicTooltip } from '@tmagic/design';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport { useGetSo } from '@editor/hooks/use-getso';\nimport PinIcon from '@editor/icons/PinIcon.vue';\nimport PinnedIcon from '@editor/icons/PinnedIcon.vue';\n\ndefineOptions({\n name: 'MEditorNodeListMenuTitle',\n});\n\nconst props = defineProps<{\n pinned: boolean;\n}>();\n\nconst emit = defineEmits<{\n close: [];\n 'update:pinned': [pinned: boolean];\n change: [e: OnDrag];\n}>();\n\nconst pinHandler = () => {\n emit('update:pinned', !props.pinned);\n};\n\nconst closeHandler = () => {\n emit('close');\n};\n\nconst target = ref<HTMLDivElement>();\nuseGetSo(target, emit);\n</script>\n","<template>\n <ContentMenu\n ref=\"menu\"\n class=\"magic-editor-node-list-menu\"\n style=\"max-width: 280px\"\n :menu-data=\"menuData\"\n :active=\"node?.id\"\n :auto-hide=\"!pinned\"\n @mouseenter=\"mouseenterHandler()\"\n >\n <template #title>\n <NodeListMenuTitle v-model:pinned=\"pinned\" @change=\"dragMenuHandler\" @close=\"closeHandler\"></NodeListMenuTitle>\n </template>\n </ContentMenu>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Component, computed, inject, ref, watch } from 'vue';\nimport type { OnDrag } from 'gesto';\n\nimport type { MNode } from '@tmagic/schema';\nimport { StageDragStatus } from '@tmagic/stage';\nimport { getNodes } from '@tmagic/utils';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport type { ComponentItem, MenuButton, Services } from '@editor/type';\n\nimport NodeListMenuTitle from './NodeListMenuTitle.vue';\n\nconst PINNED_STATUE_CACHE_KEY = 'tmagic-pinned-node-list-pinned-status';\n\nconst props = defineProps<{ isMultiSelect?: boolean }>();\n\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst nodeList = ref<MNode[]>([]);\nconst pinned = ref(Boolean(globalThis.localStorage.getItem(PINNED_STATUE_CACHE_KEY)));\nconst firstShow = ref(true);\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst componentListService = services?.componentListService;\n\nconst stage = computed(() => editorService?.get('stage'));\nconst page = computed(() => editorService?.get('page'));\nconst node = computed(() => editorService?.get('node'));\n\nlet timeout: NodeJS.Timeout | null = null;\n\nconst cancel = () => {\n if (timeout) {\n globalThis.clearTimeout(timeout);\n }\n\n if (pinned.value) {\n return;\n }\n\n nodeList.value = [];\n menu.value?.hide();\n};\n\nconst clearTimeoutLazy = () => {\n globalThis.setTimeout(() => {\n if (timeout) {\n globalThis.clearTimeout(timeout);\n }\n }, 300);\n};\n\nconst unWatch = watch(\n stage,\n (stage) => {\n if (!stage) return;\n\n stage.on('drag-start', () => {\n cancel();\n });\n\n stage.on('mousemove', (event: MouseEvent) => {\n cancel();\n\n if (props.isMultiSelect || stage.getDragStatus() !== StageDragStatus.END) {\n return;\n }\n\n timeout = globalThis.setTimeout(() => {\n const els = stage.renderer.getElementsFromPoint(event) || [];\n\n const nodes = getNodes(\n els.map((el) => el.id),\n page.value?.items,\n );\n\n if (pinned.value && nodes.length === 0) {\n return;\n }\n\n nodeList.value = nodes;\n\n if (nodeList.value.length > 1) {\n menu.value?.show(pinned.value && !firstShow.value ? undefined : event);\n firstShow.value = false;\n }\n }, 1500);\n });\n\n stage.on('mouseleave', () => {\n // mouseleave后,大概率还有最后一个mousemove事件,这里延迟清除\n clearTimeoutLazy();\n });\n\n unWatch();\n },\n {\n immediate: true,\n },\n);\n\nconst componentMap = computed(() => {\n const map: Record<string, ComponentItem> = {};\n componentListService?.getList().forEach((group) => {\n group.items.forEach((item) => {\n map[item.type] = item;\n });\n });\n return map;\n});\n\nconst menuData = computed<MenuButton[]>(() =>\n nodeList.value.map((node: MNode) => {\n let text = node.name;\n let icon: string | Component<{}, {}, any> | undefined;\n if (node.type) {\n const item = componentMap.value[node.type];\n text += ` (${item?.text})`;\n icon = item?.icon;\n }\n\n return {\n type: 'button',\n text,\n id: node.id,\n icon,\n handler: async () => {\n await editorService?.select(node);\n stage.value?.select(node.id);\n },\n };\n }),\n);\n\nconst mouseenterHandler = () => {\n // menu的mouseenter后,大概率还有最后一个mousemove事件,这里延迟清除\n clearTimeoutLazy();\n};\n\nconst dragMenuHandler = ({ deltaY, deltaX }: OnDrag) => {\n if (!menu.value) return;\n\n const { menuPosition } = menu.value;\n\n menu.value?.setPosition({\n clientY: menuPosition.top + deltaY,\n clientX: menuPosition.left + deltaX,\n });\n};\n\nconst closeHandler = () => {\n menu.value?.hide();\n};\n\nwatch(pinned, () => {\n globalThis.localStorage.setItem(PINNED_STATUE_CACHE_KEY, pinned.value.toString());\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 storageService from '@editor/services/storage';\nimport { LayerOffset, Layout, MenuButton, MenuComponent, Services } from '@editor/type';\nimport { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from '@editor/utils/content-menu';\nimport { COPY_STORAGE_KEY } from '@editor/utils/editor';\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 canPaste = ref(false);\nconst canCenter = ref(false);\n\nconst node = computed(() => editorService?.get('node'));\nconst nodes = computed(() => editorService?.get('nodes'));\nconst parent = computed(() => editorService?.get('parent'));\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 = async (e: MouseEvent) => {\n menu.value?.show(e);\n const data = await storageService.getItem(COPY_STORAGE_KEY);\n canPaste.value = data !== 'undefined' && !!data;\n};\n\ndefineExpose({ show });\n</script>\n","<template>\n <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 <Teleport to=\"body\">\n <ViewerMenu ref=\"menu\" :is-multi-select=\"isMultiSelect\" :stage-content-menu=\"stageContentMenu\"></ViewerMenu>\n <NodeListMenu ref=\"nodeList\" :is-multi-select=\"isMultiSelect\"></NodeListMenu>\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 (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(['setCodeDslById', 'setEditStatus', 'setCombineIds', 'setUndeleteableList', 'deleteCodeDslByIds']);\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 */\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) {\n return this.watcher.getTarget(id);\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) {\n this.watcher.removeTarget(id);\n this.emit('remove-target');\n }\n\n public clearTargets() {\n this.watcher.clearTargets();\n }\n\n public collect(nodes: MNode[], deep = false) {\n this.watcher.collect(nodes, deep);\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) {\n return this.watcher.hasTarget(id);\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 { 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 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 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 /** 选中时是否自动滚动到可视区域 */\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\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};\n","import { onUnmounted, reactive, toRaw, watch } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { EventOption } from '@tmagic/core';\nimport type { Target } from '@tmagic/dep';\nimport {\n createCodeBlockTarget,\n createDataSourceCondTarget,\n createDataSourceMethodTarget,\n createDataSourceTarget,\n DepTargetType,\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 updateDataSoucreSchema = () => {\n const root = editorService.get('root');\n\n if (root?.dataSources) {\n getApp()?.dataSourceManager?.updateSchema(root.dataSources);\n }\n };\n\n const upateNodeWhenDataSourceChange = (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 updateDataSoucreSchema();\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 upateNodeWhenDataSourceChange([node]);\n };\n\n const collectedHandler = (nodes: MNode[]) => {\n upateNodeWhenDataSourceChange(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 value.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)) {\n depService.getTarget(id)!.name = codeBlock.name;\n return;\n }\n\n depService.addTarget(createCodeBlockTarget(id, codeBlock));\n };\n\n const codeBlockRemoveHandler = (id: Id) => {\n depService.removeTarget(id);\n };\n\n codeBlockService.on('addOrUpdate', codeBlockAddOrUpdateHandler);\n codeBlockService.on('remove', codeBlockRemoveHandler);\n\n 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\n const targets = depService.getTargets(DepTargetType.DATA_SOURCE);\n\n const nodes = getNodes(Object.keys(targets[config.id].deps), root?.items);\n\n upateNodeWhenDataSourceChange(nodes);\n };\n\n const dataSourceRemoveHandler = (id: string) => {\n depService.removeTarget(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 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-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 }),\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","node","style","value","method","CodeEditor","clientWidth","center","values","key","services","FolderMinusIcon","el","KeyBindingContainerKey","page","nodes","ComponentListPanel","LayerPanel","CodeBlockListPanel","DataSourceListPanel","stage","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/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/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/utils/tree.ts","../src/components/TreeNode.vue","../src/components/Tree.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/layouts/sidebar/layer/use-filter.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/layouts/workspace/viewer/NodeListMenuTitle.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/dep.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[]) => {\n if (!Array.isArray(middleware)) throw new TypeError('Middleware 必须是一个数组!');\n for (const fn of middleware) {\n if (typeof fn !== 'function') throw new TypeError('Middleware 必须由函数组成!');\n }\n\n /**\n * @param {Object} args\n * @return {Promise}\n * @api public\n */\n return (args: any[], next?: Function) => {\n // last called middleware #\n let index = -1;\n return dispatch(0);\n function dispatch(i: number): Promise<void> {\n if (i <= index) return Promise.reject(new Error('next() 被多次调用'));\n index = i;\n let fn = middleware[i];\n if (i === middleware.length && next) fn = next;\n if (!fn) return Promise.resolve();\n try {\n return Promise.resolve(fn(...args, dispatch.bind(null, i + 1)));\n } catch (err) {\n return Promise.reject(err);\n }\n }\n };\n};\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventEmitter } from 'events';\n\nimport { compose } from '@editor/utils/compose';\n\nconst methodName = (prefix: string, name: string) => `${prefix}${name[0].toUpperCase()}${name.substring(1)}`;\n\nconst isError = (error: any): boolean => Object.prototype.toString.call(error) === '[object Error]';\n\nconst doAction = async (\n args: any[],\n scope: any,\n sourceMethod: any,\n beforeMethodName: string,\n afterMethodName: string,\n fn: (args: any[], next?: Function | undefined) => Promise<void>,\n) => {\n try {\n let beforeArgs = args;\n\n for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {\n beforeArgs = (await beforeMethod(...beforeArgs)) || [];\n\n if (isError(beforeArgs)) throw beforeArgs;\n\n if (!Array.isArray(beforeArgs)) {\n beforeArgs = [beforeArgs];\n }\n }\n\n let returnValue: any = await fn(beforeArgs, sourceMethod.bind(scope));\n\n for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {\n returnValue = await afterMethod(returnValue, ...beforeArgs);\n\n if (isError(returnValue)) throw returnValue;\n }\n\n return returnValue;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * 提供两种方式对Class进行扩展\n * 方法1:\n * 给Class中的每个方法都添加before after两个钩子\n * 给Class添加一个usePlugin方法,use方法可以传入一个包含before或者after方法的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n *\n * editorService.usePlugin({\n * beforeAdd(value) { return [value] },\n * afterAdd(result, value) { return result },\n * });\n *\n * editorService.add(); 最终会变成 () => {\n * editorService.beforeAdd();\n * editorService.add();\n * editorService.afterAdd();\n * }\n *\n * 调用时的参数会透传到before方法的参数中, 然后before的return 会作为原方法的参数和after的参数,after第一个参数则是原方法的return值;\n * 如需终止后续方法调用可以return new Error();\n *\n * 方法2:\n * 给Class中的每个方法都添加中间件\n * 给Class添加一个use方法,use方法可以传入一个包含源对象方法名作为key值的对象\n *\n * 例如:\n * Class EditorService extends BaseService {\n * constructor() {\n * super(['add']);\n * }\n * add(value) { return result; }\n * };\n *\n * const editorService = new EditorService();\n * editorService.use({\n * add(value, next) { console.log(value); next() },\n * });\n */\nexport default class extends EventEmitter {\n private pluginOptionsList: Record<string, Function[]> = {};\n private middleware: Record<string, Function[]> = {};\n private taskList: (() => Promise<void>)[] = [];\n private doingTask = false;\n\n constructor(methods: string[] = [], serialMethods: string[] = []) {\n super();\n\n methods.forEach((propertyName: string) => {\n const scope = this as any;\n\n const sourceMethod = scope[propertyName];\n\n const beforeMethodName = methodName('before', propertyName);\n const afterMethodName = methodName('after', propertyName);\n\n this.pluginOptionsList[beforeMethodName] = [];\n this.pluginOptionsList[afterMethodName] = [];\n this.middleware[propertyName] = [];\n\n const fn = compose(this.middleware[propertyName]);\n Object.defineProperty(scope, propertyName, {\n value: async (...args: any[]) => {\n if (!serialMethods.includes(propertyName)) {\n return doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);\n }\n\n // 由于async await,所以会出现函数执行到await时让出线程,导致执行顺序出错,例如调用了select(1) -> update -> select(2),这个时候就有可能出现update了2;\n // 这里保证函数调用严格按顺序执行;\n const promise = new Promise<any>((resolve, reject) => {\n this.taskList.push(async () => {\n try {\n const value = await doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);\n resolve(value);\n } catch (e) {\n reject(e);\n }\n });\n });\n\n if (!this.doingTask) {\n this.doTask();\n }\n\n return promise;\n },\n });\n });\n }\n\n public use(options: Record<string, Function>) {\n Object.entries(options).forEach(([methodName, method]: [string, Function]) => {\n if (typeof method === 'function') this.middleware[methodName].push(method);\n });\n }\n\n public usePlugin(options: Record<string, Function>) {\n Object.entries(options).forEach(([methodName, method]: [string, Function]) => {\n if (typeof method === 'function') this.pluginOptionsList[methodName].push(method);\n });\n }\n\n public removeAllPlugins() {\n Object.keys(this.pluginOptionsList).forEach((key) => {\n this.pluginOptionsList[key] = [];\n });\n Object.keys(this.middleware).forEach((key) => {\n this.middleware[key] = [];\n });\n }\n\n private async doTask() {\n this.doingTask = true;\n let task = this.taskList.shift();\n while (task) {\n await task();\n task = this.taskList.shift();\n }\n this.doingTask = false;\n }\n}\n","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 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: CodeBlockContent }): 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}\n\nexport interface LayerPanelSlots extends LayerNodeSlots {\n 'layer-panel-header'(props: {}): any;\n 'layer-node-tool'(props: { data: MNode }): any;\n 'layer-node-content'(props: { data: MNode }): 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}\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}\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 const traverseNode = (node: MNode, cb: (node: MNode, parents: MNode[]) => void, parents: MNode[] = []) => {\n cb(node, parents);\n\n if (node.items?.length) {\n parents.push(node);\n node.items.forEach((item: MNode) => {\n traverseNode(item, 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 */\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(['getStorage', 'getNamespace', 'clear', 'getItem', 'removeItem', 'setItem']);\n }\n\n /**\n * 获取数据存储对象,可以通过\n * const storageService = new StorageService();\n * storageService.usePlugin({\n * // 替换存储对象为 sessionStorage\n * async afterGetStorage(): Promise<Storage> {\n * return window.sessionStorage;\n * },\n * });\n */\n public async getStorage(): Promise<Storage> {\n return this.storage;\n }\n\n public async getNamespace(): Promise<string> {\n return this.namespace;\n }\n\n /**\n * 清理,支持storageService.usePlugin\n */\n public async clear(): Promise<void> {\n const storage = await this.getStorage();\n storage.clear();\n }\n /**\n * 获取存储项,支持storageService.usePlugin\n */\n public async getItem(key: string, options: Options = {}): Promise<any> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n const { protocol = options.protocol, item } = this.getValueAndProtocol(\n storage.getItem(`${options.namespace || namespace}:${key}`),\n );\n\n if (item === null) return null;\n\n switch (protocol) {\n case Protocol.OBJECT:\n 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 async key(index: number): Promise<string | null> {\n const storage = await this.getStorage();\n return storage.key(index);\n }\n\n /**\n * 移除存储项,支持storageService.usePlugin\n */\n public async removeItem(key: string, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n storage.removeItem(`${options.namespace || namespace}:${key}`);\n }\n\n /**\n * 设置存储项,支持storageService.usePlugin\n */\n public async setItem(key: string, value: any, options: Options = {}): Promise<void> {\n const [storage, namespace] = await Promise.all([this.getStorage(), this.getNamespace()]);\n let item = value;\n const protocol = options.protocol ? `${options.protocol}:` : '';\n if (typeof value === Protocol.STRING || typeof value === Protocol.NUMBER) {\n item = `${protocol}${value}`;\n } else {\n item = `${protocol}${serialize(value)}`;\n }\n storage.setItem(`${options.namespace || namespace}:${key}`, item);\n }\n\n public destroy() {\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n\n private getValueAndProtocol(value: string | null) {\n let protocol = '';\n\n if (value === null) {\n return {\n item: value,\n protocol,\n };\n }\n\n const item = value.replace(new RegExp(`^(${Object.values(Protocol).join('|')})(:)(.+)`), (_$0, $1, _$2, $3) => {\n protocol = $1;\n return $3;\n });\n\n return {\n protocol,\n item,\n };\n }\n}\n\nexport type StorageService = WebStorage;\nexport default new WebStorage();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive } from 'vue';\nimport { cloneDeep, mergeWith } from 'lodash-es';\n\nimport type { FormConfig } from '@tmagic/form';\nimport type { MComponent, MNode } from '@tmagic/schema';\nimport { guid, toLine } from '@tmagic/utils';\n\nimport type { PropsState } from '@editor/type';\nimport { fillConfig } from '@editor/utils/props';\n\nimport BaseService from './BaseService';\n\nclass Props extends BaseService {\n private state = reactive<PropsState>({\n propsConfigMap: {},\n propsValueMap: {},\n });\n\n constructor() {\n super([\n 'setPropsConfig',\n 'getPropsConfig',\n 'setPropsValue',\n 'getPropsValue',\n 'createId',\n 'setNewItemId',\n 'fillConfig',\n 'getDefaultPropsValue',\n ]);\n }\n\n public setPropsConfigs(configs: Record<string, FormConfig>) {\n Object.keys(configs).forEach((type: string) => {\n this.setPropsConfig(toLine(type), configs[type]);\n });\n this.emit('props-configs-change');\n }\n\n public async fillConfig(config: FormConfig) {\n return fillConfig(config);\n }\n\n /**\n * 为指定类型组件设置组件属性表单配置\n * @param type 组件类型\n * @param config 组件属性表单配置\n */\n public async setPropsConfig(type: string, config: FormConfig) {\n this.state.propsConfigMap[type] = await this.fillConfig(Array.isArray(config) ? config : [config]);\n }\n\n /**\n * 获取指点类型的组件属性表单配置\n * @param type 组件类型\n * @returns 组件属性表单配置\n */\n public async getPropsConfig(type: string): Promise<FormConfig> {\n if (type === 'area') {\n return await this.getPropsConfig('button');\n }\n\n return cloneDeep(this.state.propsConfigMap[type] || (await this.fillConfig([])));\n }\n\n public setPropsValues(values: Record<string, 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 * @param {Object} config 组件配置\n */\n /* eslint no-param-reassign: [\"error\", { \"props\": false }] */\n public async setNewItemId(config: MNode) {\n config.id = await this.createId(config.type || 'component');\n\n if (config.items && Array.isArray(config.items)) {\n for (const item of config.items) {\n await this.setNewItemId(item);\n }\n }\n\n return config;\n }\n\n /**\n * 获取默认属性配置\n * @param type 组件类型\n * @returns Object\n */\n public async getDefaultPropsValue(type: string) {\n return ['page', 'container'].includes(type)\n ? {\n type,\n layout: 'absolute',\n style: {},\n name: type,\n items: [],\n }\n : {\n type,\n style: {},\n name: type,\n };\n }\n\n public resetState() {\n this.state.propsConfigMap = {};\n this.state.propsValueMap = {};\n }\n\n public destroy() {\n this.resetState();\n this.removeAllListeners();\n this.removeAllPlugins();\n }\n}\n\nexport type PropsService = Props;\n\nexport default new Props();\n","/*\n * Tencent is pleased to support the open source community by making TMagicEditor available.\n *\n * Copyright (C) 2023 THL A29 Limited, a Tencent company. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { reactive, toRaw } from 'vue';\nimport { cloneDeep, isObject, mergeWith, uniq } from 'lodash-es';\n\nimport type { Id, MApp, MComponent, MContainer, MNode, MPage } from '@tmagic/schema';\nimport { NodeType } from '@tmagic/schema';\nimport StageCore from '@tmagic/stage';\nimport { getNodePath, isNumber, isPage, isPop } from '@tmagic/utils';\n\nimport historyService from '@editor/services/history';\nimport storageService, { Protocol } from '@editor/services/storage';\nimport type { AddMNode, EditorNodeInfo, PastePosition, StepValue, StoreState, StoreStateKey } from '@editor/type';\nimport { LayerOffset, Layout } from '@editor/type';\nimport {\n change2Fixed,\n COPY_STORAGE_KEY,\n Fixed2Other,\n fixNodePosition,\n getInitPositionStyle,\n getNodeIndex,\n isFixed,\n 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 'getLayout',\n 'select',\n 'doAdd',\n 'add',\n 'doRemove',\n 'remove',\n 'doUpdate',\n 'update',\n 'sort',\n 'copy',\n 'paste',\n 'doPaste',\n 'doAlignCenter',\n 'alignCenter',\n 'moveLayer',\n 'moveToContainer',\n 'move',\n 'undo',\n 'redo',\n 'highlight',\n 'dragTo',\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 * 将组将节点配置转化成string,然后存储到localStorage中\n * @param config 组件节点配置\n * @returns 组件节点配置\n */\n public async copy(config: MNode | MNode[]): Promise<void> {\n await storageService.setItem(COPY_STORAGE_KEY, Array.isArray(config) ? config : [config], {\n protocol: Protocol.OBJECT,\n });\n }\n\n /**\n * 从localStorage中获取节点,然后添加到当前容器中\n * @param position 粘贴的坐标\n * @returns 添加后的组件节点配置\n */\n public async paste(position: PastePosition = {}): Promise<MNode | MNode[] | void> {\n const config: MNode[] = await storageService.getItem(COPY_STORAGE_KEY);\n\n if (!Array.isArray(config)) return;\n\n const node = this.get('node');\n\n let parent: MContainer | null = null;\n // 粘贴的组件为当前选中组件的副本时,则添加到当前选中组件的父组件中\n if (config.length === 1 && config[0].id === node?.id) {\n parent = this.get('parent');\n if (parent?.type === NodeType.ROOT) {\n parent = this.get('page');\n }\n }\n\n const pasteConfigs = await this.doPaste(config, position);\n\n return this.add(pasteConfigs, parent);\n }\n\n public async doPaste(config: MNode[], position: PastePosition = {}): Promise<MNode[]> {\n const pasteConfigs = await beforePaste(position, cloneDeep(config));\n return pasteConfigs;\n }\n\n public async doAlignCenter(config: MNode): Promise<MNode> {\n const parent = this.getParentById(config.id);\n\n if (!parent) throw new Error('找不到父节点');\n\n const node = cloneDeep(toRaw(config));\n const layout = await this.getLayout(parent, node);\n if (layout === Layout.RELATIVE) {\n return config;\n }\n\n if (!node.style) return config;\n\n const stage = this.get('stage');\n const doc = stage?.renderer.contentWindow?.document;\n\n if (doc) {\n const el = doc.getElementById(`${node.id}`);\n const parentEl = 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\n const pasteConfig = await propsService.setNewItemId(configItem);\n\n if (pasteConfig.style) {\n const { left, top } = pasteConfig.style;\n // 判断能转换为数字时,做粘贴偏移量计算\n if (typeof left === 'number' || (!!left && !isNaN(Number(left)))) {\n pasteConfig.style.left = Number(left) + offsetX;\n }\n if (typeof top === 'number' || (!!top && !isNaN(Number(top)))) {\n pasteConfig.style.top = Number(top) + offsetY;\n }\n\n pasteConfig.style = {\n ...pasteConfig.style,\n ...pastePosition,\n };\n }\n const root = editorService.get('root');\n if (isPage(pasteConfig) && root) {\n pasteConfig.name = generatePageNameByApp(root);\n }\n return pasteConfig as MNode;\n }),\n );\n return pasteConfigs;\n};\n\n/**\n * 将元素粘贴到容器内时,将相对于画布坐标转换为相对于容器的坐标\n * @param position PastePosition 粘贴时相对于画布的坐标\n * @param id 元素id\n * @returns PastePosition 转换后的坐标\n */\nexport const getPositionInContainer = (position: PastePosition = {}, id: Id) => {\n let { left = 0, top = 0 } = position;\n const parentEl = editorService.get('stage')?.renderer?.contentWindow?.document.getElementById(`${id}`);\n const parentElRect = parentEl?.getBoundingClientRect();\n left = left - (parentElRect?.left || 0);\n top = top - (parentElRect?.top || 0);\n return {\n left,\n top,\n };\n};\n\nexport const getAddParent = (node: MNode) => {\n const curNode = editorService.get('node');\n\n let parentNode;\n if (isPage(node)) {\n parentNode = editorService.get('root');\n } else if (curNode?.items) {\n parentNode = curNode as MContainer;\n } else if (curNode?.id) {\n parentNode = editorService.getParentById(curNode.id, false);\n }\n return parentNode;\n};\n\nexport const getDefaultConfig = async (addNode: AddMNode, parentNode: MContainer) => {\n const { type, inputEvent, ...config } = addNode;\n const layout = await editorService.getLayout(toRaw(parentNode), addNode as MNode);\n const newNode = { ...toRaw(await propsService.getPropsValue(type, config)) };\n newNode.style = getInitPositionStyle(newNode.style, layout);\n return newNode;\n};\n","<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","<template>\n <TMagicTree\n ref=\"tree\"\n class=\"magic-editor-layer-tree\"\n node-key=\"id\"\n empty-text=\"暂无代码块\"\n :default-expanded-keys=\"expandedKeys\"\n :expand-on-click-node=\"false\"\n :data=\"codeList\"\n :props=\"{\n children: 'children',\n label: 'name',\n value: 'id',\n }\"\n :highlight-current=\"true\"\n :filter-node-method=\"filterNode\"\n @node-click=\"clickHandler\"\n >\n <template #default=\"{ data }\">\n <div :id=\"data.id\" class=\"list-container\">\n <div class=\"list-item\">\n <CodeIcon v-if=\"data.type === 'code'\" class=\"codeIcon\"></CodeIcon>\n <AppManageIcon v-if=\"data.type === 'node'\" class=\"compIcon\"></AppManageIcon>\n <span class=\"name\" :class=\"{ code: data.type === 'code', hook: data.type === 'key' }\"\n >{{ data.name }} ({{ data.id }})</span\n >\n <!-- 右侧工具栏 -->\n <div class=\"right-tool\" v-if=\"data.type === 'code'\">\n <TMagicTooltip effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editCode(data.id)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip v-if=\"editable\" effect=\"dark\" content=\"删除\" placement=\"bottom\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"deleteCode(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"code-block-panel-tool\" :id=\"data.id\" :data=\"data.codeBlockContent\"></slot>\n </div>\n </div>\n </div>\n </template>\n </TMagicTree>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport { Close, Edit, View } from '@element-plus/icons-vue';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport { tMagicMessage, tMagicMessageBox, TMagicTooltip, TMagicTree } from '@tmagic/design';\nimport type { Id } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\nimport AppManageIcon from '@editor/icons/AppManageIcon.vue';\nimport CodeIcon from '@editor/icons/CodeIcon.vue';\nimport { type CodeBlockListSlots, CodeDeleteErrorType, type CodeDslItem, type Services } 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 { codeBlockService, depService, editorService } = inject<Services>('services') || {};\n\n// 代码块列表\nconst codeList = computed(() =>\n Object.values(depService?.getTargets(DepTargetType.CODE_BLOCK) || {}).map((target) => {\n // 组件节点\n const compNodes = Object.entries(target.deps).map(([id, dep]) => ({\n name: dep.name,\n type: 'node',\n id,\n children: dep.keys.map((key) => ({ name: key, id: key, type: 'key' })),\n }));\n return {\n id: target.id,\n name: target.name,\n type: 'code',\n codeBlockContent: codeBlockService?.getCodeContentById(target.id),\n children: compNodes,\n };\n }),\n);\n// 默认展开组件层级的节点\nconst expandedKeys = computed(() => codeList.value.map((item) => item.id));\nconst editable = computed(() => codeBlockService?.getEditStatus());\n\nconst filterNode = (value: string, data: CodeDslItem): boolean => {\n if (!value) {\n return true;\n }\n return `${data.name}${data.id}`.toLocaleLowerCase().indexOf(value.toLocaleLowerCase()) !== -1;\n};\n\n// 选中组件\nconst selectComp = (compId: Id) => {\n const stage = editorService?.get('stage');\n editorService?.select(compId);\n stage?.select(compId);\n};\n\nconst clickHandler = (data: any, node: any) => {\n if (data.type === 'node') {\n selectComp(data.id);\n } else if (data.type === 'key') {\n selectComp(node.parent.data.id);\n }\n};\n\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?.children.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\nconst tree = ref<InstanceType<typeof TMagicTree>>();\n\ndefineExpose({\n filter(val: string) {\n tree.value?.filter(val);\n },\n});\n</script>\n","<template>\n <TMagicScrollbar class=\"m-editor-code-block-list m-editor-dep-list-panel\">\n <slot name=\"code-block-panel-header\">\n <div class=\"search-wrapper\">\n <SearchInput @search=\"filterTextChangeHandler\"></SearchInput>\n <TMagicButton 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 <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 <TMagicTree\n ref=\"tree\"\n class=\"magic-editor-layer-tree\"\n node-key=\"id\"\n empty-text=\"暂无代码块\"\n default-expand-all\n :expand-on-click-node=\"false\"\n :data=\"list\"\n :highlight-current=\"true\"\n @node-click=\"clickHandler\"\n >\n <template #default=\"{ data }\">\n <div :id=\"data.id\" class=\"list-container\">\n <div class=\"list-item\">\n <Icon v-if=\"data.type === 'code'\" class=\"codeIcon\" :icon=\"Coin\"></Icon>\n <Icon v-if=\"data.type === 'node'\" class=\"compIcon\" :icon=\"Aim\"></Icon>\n <span class=\"name\" :class=\"{ code: data.type === 'ds', hook: data.type === 'key' }\">{{\n data.type === 'key' ? data.name : `${data.name}(${data.id})`\n }}</span>\n <!-- 右侧工具栏 -->\n <div class=\"right-tool\" v-if=\"data.type === 'ds'\">\n <TMagicTooltip effect=\"dark\" :content=\"editable ? '编辑' : '查看'\" placement=\"bottom\">\n <Icon :icon=\"editable ? Edit : View\" class=\"edit-icon\" @click.stop=\"editHandler(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <TMagicTooltip v-if=\"editable\" effect=\"dark\" content=\"删除\" placement=\"bottom\">\n <Icon :icon=\"Close\" class=\"edit-icon\" @click.stop=\"removeHandler(`${data.id}`)\"></Icon>\n </TMagicTooltip>\n <slot name=\"data-source-panel-tool\" :data=\"data\"></slot>\n </div>\n </div>\n </div>\n </template>\n </TMagicTree>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, inject, ref } from 'vue';\nimport { Aim, Close, Coin, Edit, View } from '@element-plus/icons-vue';\n\nimport { DepTargetType } from '@tmagic/dep';\nimport { tMagicMessageBox, TMagicTooltip, TMagicTree } from '@tmagic/design';\nimport { DepData, Id } from '@tmagic/schema';\n\nimport Icon from '@editor/components/Icon.vue';\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) =>\n dep.keys.map((key) => ({ name: key, id: key, type: 'key', isMethod: type === 'method', isCond: type === 'cond' }));\n\nconst getNodeTreeConfig = (id: string, dep: DepData[string], type?: string) => ({\n name: dep.name,\n type: 'node',\n id,\n children: getKeyTreeConfig(dep, type),\n});\n\n/**\n * 生成tree中依赖节点的数据\n * @param children 节点\n * @param deps 依赖\n * @param type 依赖类型\n */\nconst mergeChildren = (children: any[], deps: DepData, type?: string) => {\n Object.entries(deps).forEach(([id, dep]) => {\n // 已经生成过的节点\n const nodeItem = children.find((item) => item.id === id);\n // 节点存在,则追加依赖的key\n if (nodeItem) {\n nodeItem.children = nodeItem.children.concat(getKeyTreeConfig(dep, type));\n } else {\n // 节点不存在,则生成\n children.push(getNodeTreeConfig(id, dep, type));\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 children: any[] = [];\n // 数据源依赖分为三种类型:key/node、method、cond,是分开存储,这里将其合并展示\n mergeChildren(children, dsDeps);\n mergeChildren(children, dsMethodDeps, 'method');\n mergeChildren(children, dsCondDeps, 'cond');\n\n return {\n id: ds.id,\n name: ds.title,\n type: 'ds',\n children,\n };\n }),\n);\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 = (data: any, node: any) => {\n if (data.type === 'node') {\n selectComp(data.id);\n } else if (data.type === 'key') {\n selectComp(node.parent.data.id);\n }\n};\n\nconst tree = ref<InstanceType<typeof TMagicTree>>();\n\ndefineExpose({\n filter(val: string) {\n tree.value?.filter(val);\n },\n});\n</script>\n","<template>\n <TMagicScrollbar class=\"data-source-list-panel m-editor-dep-list-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","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\">{{ `${data.name} (${data.id})` }}</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-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-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 && props.data.items.length > 0);\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-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-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","<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, 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\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\nconst canPaste = ref(false);\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 canPaste.value = true;\n },\n});\n\nexport const usePasteMenu = (menu?: Ref<InstanceType<typeof ContentMenu> | undefined>): MenuButton => ({\n type: 'button',\n text: '粘贴',\n icon: markRaw(DocumentCopy),\n display: () => canPaste.value,\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 { type ComputedRef, ref } from 'vue';\n\nimport { Id, MNode, MPage } from '@tmagic/schema';\n\nimport { LayerNodeStatus } from '@editor/type';\nimport { traverseNode } from '@editor/utils';\nimport { updateStatus } from '@editor/utils/tree';\n\nexport const useFilter = (\n nodeStatusMap: ComputedRef<Map<Id, LayerNodeStatus> | undefined>,\n page: ComputedRef<MPage | null | undefined>,\n) => {\n // tree方法:对树节点进行筛选时执行的方法\n const filterIsMatch = (value: string, data: MNode): boolean => {\n if (!value) {\n return true;\n }\n let name = '';\n if (data.name) {\n name = data.name;\n } else if (data.items) {\n name = 'container';\n }\n return `${data.id}${name}${data.type}`.includes(value);\n };\n\n const filterNode = (text: string) => (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 const filter = (text: string) => {\n if (!page.value?.items?.length) return;\n\n page.value.items.forEach((node) => {\n traverseNode(node, filterNode(text));\n });\n };\n\n return {\n filterText: ref(''),\n filterTextChangeHandler(text: string) {\n filter(text);\n },\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, type ComputedRef, 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 = (\n services: Services | undefined,\n pageId: Id,\n initalLayerNodeStatus?: Map<Id, LayerNodeStatus>,\n) => {\n const map = new Map<Id, LayerNodeStatus>();\n\n map.set(pageId, {\n visible: true,\n expand: true,\n selected: true,\n draggable: false,\n });\n\n services?.editorService.getNodeById(pageId)?.items.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: true,\n },\n );\n }),\n );\n\n return map;\n};\n\nexport const useNodeStatus = (services: Services | undefined, page: ComputedRef<MPage | null | undefined>) => {\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(services, page.id, 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=\"[page]\"\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-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-content=\"{ data: nodeData }\">\n <slot name=\"layer-node-content\" :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';\n\nimport SearchInput from '@editor/components/SearchInput.vue';\nimport Tree from '@editor/components/Tree.vue';\nimport { LayerPanelSlots, MenuButton, MenuComponent, Services } 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 { useFilter } from './use-filter';\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'));\n\nconst { nodeStatusMap } = useNodeStatus(services, page);\nconst { isCtrlKeyDown } = useKeybinding(services, tree);\n\nconst { filterTextChangeHandler } = useFilter(nodeStatusMap, page);\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 :key=\"config.$key ?? index\"\n :class=\"{ 'is-active': activeTabName === config.text }\"\n @click=\"activeTabName = config.text || `${index}`\"\n draggable=\"true\"\n @dragstart=\"dragstartHandler\"\n @dragend=\"dragendHandler(config.$key, $event)\"\n v-show=\"!floatBoxStates?.get(config.$key)?.status\"\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-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(['zoom', 'calcZoom']);\n }\n\n public set<K extends keyof UiState, T extends UiState[K]>(name: K, value: T) {\n const mask = editorService.get('stage')?.mask;\n\n if (name === 'stageRect') {\n this.setStageRect(value as unknown as StageRect);\n return;\n }\n\n if (name === 'showGuides') {\n mask?.showGuides(value as unknown as boolean);\n }\n\n if (name === 'showRule') {\n mask?.showRule(value as unknown as boolean);\n }\n\n state[name] = value;\n }\n\n public get<K extends keyof UiState>(name: K) {\n return state[name];\n }\n\n public async zoom(zoom: number) {\n this.set('zoom', (this.get('zoom') * 100 + zoom * 100) / 100);\n if (this.get('zoom') < 0.1) this.set('zoom', 0.1);\n }\n\n public async calcZoom() {\n const { stageRect, stageContainerRect } = state;\n const { height, width } = stageContainerRect;\n if (!width || !height) return 1;\n\n 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 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 <div\n style=\"\n text-align: center;\n padding: 5px 0;\n font-size: 14px;\n cursor: move;\n display: flex;\n justify-content: space-between;\n align-items: center;\n \"\n ref=\"target\"\n >\n <TMagicTooltip placement=\"top\" :content=\"pinned ? '取消置于顶层自动隐藏' : '置于顶层不消失'\">\n <MIcon\n style=\"margin-left: 10px; cursor: pointer\"\n :icon=\"pinned ? PinnedIcon : PinIcon\"\n @click=\"pinHandler\"\n ></MIcon>\n </TMagicTooltip>\n\n <span>可选组件</span>\n\n <div style=\"margin-right: 10px\">\n <TMagicButton text size=\"small\" @click=\"closeHandler\">\n <MIcon :icon=\"Close\"></MIcon>\n </TMagicButton>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref } from 'vue';\nimport { Close } from '@element-plus/icons-vue';\nimport type { OnDrag } from 'gesto';\n\nimport { TMagicButton, TMagicTooltip } from '@tmagic/design';\n\nimport MIcon from '@editor/components/Icon.vue';\nimport { useGetSo } from '@editor/hooks/use-getso';\nimport PinIcon from '@editor/icons/PinIcon.vue';\nimport PinnedIcon from '@editor/icons/PinnedIcon.vue';\n\ndefineOptions({\n name: 'MEditorNodeListMenuTitle',\n});\n\nconst props = defineProps<{\n pinned: boolean;\n}>();\n\nconst emit = defineEmits<{\n close: [];\n 'update:pinned': [pinned: boolean];\n change: [e: OnDrag];\n}>();\n\nconst pinHandler = () => {\n emit('update:pinned', !props.pinned);\n};\n\nconst closeHandler = () => {\n emit('close');\n};\n\nconst target = ref<HTMLDivElement>();\nuseGetSo(target, emit);\n</script>\n","<template>\n <ContentMenu\n ref=\"menu\"\n class=\"magic-editor-node-list-menu\"\n style=\"max-width: 280px\"\n :menu-data=\"menuData\"\n :active=\"node?.id\"\n :auto-hide=\"!pinned\"\n @mouseenter=\"mouseenterHandler()\"\n >\n <template #title>\n <NodeListMenuTitle v-model:pinned=\"pinned\" @change=\"dragMenuHandler\" @close=\"closeHandler\"></NodeListMenuTitle>\n </template>\n </ContentMenu>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Component, computed, inject, ref, watch } from 'vue';\nimport type { OnDrag } from 'gesto';\n\nimport type { MNode } from '@tmagic/schema';\nimport { StageDragStatus } from '@tmagic/stage';\nimport { getNodes } from '@tmagic/utils';\n\nimport ContentMenu from '@editor/components/ContentMenu.vue';\nimport type { ComponentItem, MenuButton, Services } from '@editor/type';\n\nimport NodeListMenuTitle from './NodeListMenuTitle.vue';\n\nconst PINNED_STATUE_CACHE_KEY = 'tmagic-pinned-node-list-pinned-status';\n\nconst props = defineProps<{ isMultiSelect?: boolean }>();\n\nconst menu = ref<InstanceType<typeof ContentMenu>>();\nconst nodeList = ref<MNode[]>([]);\nconst pinned = ref(Boolean(globalThis.localStorage.getItem(PINNED_STATUE_CACHE_KEY)));\nconst firstShow = ref(true);\n\nconst services = inject<Services>('services');\nconst editorService = services?.editorService;\nconst componentListService = services?.componentListService;\n\nconst stage = computed(() => editorService?.get('stage'));\nconst page = computed(() => editorService?.get('page'));\nconst node = computed(() => editorService?.get('node'));\n\nlet timeout: NodeJS.Timeout | null = null;\n\nconst cancel = () => {\n if (timeout) {\n globalThis.clearTimeout(timeout);\n }\n\n if (pinned.value) {\n return;\n }\n\n nodeList.value = [];\n menu.value?.hide();\n};\n\nconst clearTimeoutLazy = () => {\n globalThis.setTimeout(() => {\n if (timeout) {\n globalThis.clearTimeout(timeout);\n }\n }, 300);\n};\n\nconst unWatch = watch(\n stage,\n (stage) => {\n if (!stage) return;\n\n stage.on('drag-start', () => {\n cancel();\n });\n\n stage.on('mousemove', (event: MouseEvent) => {\n cancel();\n\n if (props.isMultiSelect || stage.getDragStatus() !== StageDragStatus.END) {\n return;\n }\n\n timeout = globalThis.setTimeout(() => {\n const els = stage.renderer.getElementsFromPoint(event) || [];\n\n const nodes = getNodes(\n els.map((el) => el.id),\n page.value?.items,\n );\n\n if (pinned.value && nodes.length === 0) {\n return;\n }\n\n nodeList.value = nodes;\n\n if (nodeList.value.length > 1) {\n menu.value?.show(pinned.value && !firstShow.value ? undefined : event);\n firstShow.value = false;\n }\n }, 1500);\n });\n\n stage.on('mouseleave', () => {\n // mouseleave后,大概率还有最后一个mousemove事件,这里延迟清除\n clearTimeoutLazy();\n });\n\n unWatch();\n },\n {\n immediate: true,\n },\n);\n\nconst componentMap = computed(() => {\n const map: Record<string, ComponentItem> = {};\n componentListService?.getList().forEach((group) => {\n group.items.forEach((item) => {\n map[item.type] = item;\n });\n });\n return map;\n});\n\nconst menuData = computed<MenuButton[]>(() =>\n nodeList.value.map((node: MNode) => {\n let text = node.name;\n let icon: string | Component<{}, {}, any> | undefined;\n if (node.type) {\n const item = componentMap.value[node.type];\n text += ` (${item?.text})`;\n icon = item?.icon;\n }\n\n return {\n type: 'button',\n text,\n id: node.id,\n icon,\n handler: async () => {\n await editorService?.select(node);\n stage.value?.select(node.id);\n },\n };\n }),\n);\n\nconst mouseenterHandler = () => {\n // menu的mouseenter后,大概率还有最后一个mousemove事件,这里延迟清除\n clearTimeoutLazy();\n};\n\nconst dragMenuHandler = ({ deltaY, deltaX }: OnDrag) => {\n if (!menu.value) return;\n\n const { menuPosition } = menu.value;\n\n menu.value?.setPosition({\n clientY: menuPosition.top + deltaY,\n clientX: menuPosition.left + deltaX,\n });\n};\n\nconst closeHandler = () => {\n menu.value?.hide();\n};\n\nwatch(pinned, () => {\n globalThis.localStorage.setItem(PINNED_STATUE_CACHE_KEY, pinned.value.toString());\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 storageService from '@editor/services/storage';\nimport { LayerOffset, Layout, MenuButton, MenuComponent, Services } from '@editor/type';\nimport { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from '@editor/utils/content-menu';\nimport { COPY_STORAGE_KEY } from '@editor/utils/editor';\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 canPaste = ref(false);\nconst canCenter = ref(false);\n\nconst node = computed(() => editorService?.get('node'));\nconst nodes = computed(() => editorService?.get('nodes'));\nconst parent = computed(() => editorService?.get('parent'));\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 = async (e: MouseEvent) => {\n menu.value?.show(e);\n const data = await storageService.getItem(COPY_STORAGE_KEY);\n canPaste.value = data !== 'undefined' && !!data;\n};\n\ndefineExpose({ show });\n</script>\n","<template>\n <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 <Teleport to=\"body\">\n <ViewerMenu ref=\"menu\" :is-multi-select=\"isMultiSelect\" :stage-content-menu=\"stageContentMenu\"></ViewerMenu>\n <NodeListMenu ref=\"nodeList\" :is-multi-select=\"isMultiSelect\"></NodeListMenu>\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(['setCodeDslById', 'setEditStatus', 'setCombineIds', 'setUndeleteableList', 'deleteCodeDslByIds']);\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 */\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) {\n return this.watcher.getTarget(id);\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) {\n this.watcher.removeTarget(id);\n this.emit('remove-target');\n }\n\n public clearTargets() {\n this.watcher.clearTargets();\n }\n\n public collect(nodes: MNode[], deep = false) {\n this.watcher.collect(nodes, deep);\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) {\n return this.watcher.hasTarget(id);\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 { 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 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 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 /** 选中时是否自动滚动到可视区域 */\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\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};\n","import { onUnmounted, reactive, toRaw, watch } from 'vue';\nimport { cloneDeep } from 'lodash-es';\n\nimport type { EventOption } from '@tmagic/core';\nimport type { Target } from '@tmagic/dep';\nimport {\n createCodeBlockTarget,\n createDataSourceCondTarget,\n createDataSourceMethodTarget,\n createDataSourceTarget,\n DepTargetType,\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 updateDataSoucreSchema = () => {\n const root = editorService.get('root');\n\n if (root?.dataSources) {\n getApp()?.dataSourceManager?.updateSchema(root.dataSources);\n }\n };\n\n const upateNodeWhenDataSourceChange = (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 updateDataSoucreSchema();\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 upateNodeWhenDataSourceChange([node]);\n };\n\n const collectedHandler = (nodes: MNode[]) => {\n upateNodeWhenDataSourceChange(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 value.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)) {\n depService.getTarget(id)!.name = codeBlock.name;\n return;\n }\n\n depService.addTarget(createCodeBlockTarget(id, codeBlock));\n };\n\n const codeBlockRemoveHandler = (id: Id) => {\n depService.removeTarget(id);\n };\n\n codeBlockService.on('addOrUpdate', codeBlockAddOrUpdateHandler);\n codeBlockService.on('remove', codeBlockRemoveHandler);\n\n 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\n const targets = depService.getTargets(DepTargetType.DATA_SOURCE);\n\n const nodes = getNodes(Object.keys(targets[config.id].deps), root?.items);\n\n upateNodeWhenDataSourceChange(nodes);\n };\n\n const dataSourceRemoveHandler = (id: string) => {\n depService.removeTarget(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 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-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 }),\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","node","style","value","method","CodeEditor","clientWidth","center","values","key","services","FolderMinusIcon","el","KeyBindingContainerKey","page","nodes","ComponentListPanel","LayerPanel","CodeBlockListPanel","DataSourceListPanel","stage","CenterIcon","zoom","root","Editor","uiSelect","CodeLink","Code","CodeSelect","CodeSelectCol","EventSelect","DataSourceFields","DataSourceMocks","KeyValue","DataSourceInput","DataSourceSelect","DataSourceMethods","DataSourceMethodSelect","DataSourceFieldSelect"],"mappings":"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"}
|