@tmagic/editor 1.7.7 → 1.7.8-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +235 -164
- package/dist/es/Editor.js +5 -0
- package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +214 -0
- package/dist/es/_virtual/_plugin-vue_export-helper.js +8 -0
- package/dist/es/components/CodeBlockEditor.js +5 -0
- package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +337 -0
- package/dist/es/components/CodeParams.js +5 -0
- package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +63 -0
- package/dist/es/components/ContentMenu.js +5 -0
- package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +160 -0
- package/dist/es/components/FloatingBox.js +5 -0
- package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +161 -0
- package/dist/es/components/Icon.js +5 -0
- package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +39 -0
- package/dist/es/components/Resizer.js +5 -0
- package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +20 -0
- package/dist/es/components/ScrollBar.js +6 -0
- package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +72 -0
- package/dist/es/components/ScrollViewer.js +5 -0
- package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +104 -0
- package/dist/es/components/SearchInput.js +5 -0
- package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +40 -0
- package/dist/es/components/SplitView.js +5 -0
- package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +135 -0
- package/dist/es/components/ToolButton.js +5 -0
- package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +131 -0
- package/dist/es/components/Tree.js +5 -0
- package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/es/components/TreeNode.js +5 -0
- package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +126 -0
- package/dist/es/editorProps.js +34 -0
- package/dist/es/fields/Code.js +5 -0
- package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/es/fields/CodeLink.js +5 -0
- package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +69 -0
- package/dist/es/fields/CodeSelect.js +5 -0
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +116 -0
- package/dist/es/fields/CodeSelectCol.js +5 -0
- package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +145 -0
- package/dist/es/fields/CondOpSelect.js +5 -0
- package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.js +5 -0
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +158 -0
- package/dist/es/fields/DataSourceFieldSelect/Index.js +5 -0
- package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +155 -0
- package/dist/es/fields/DataSourceFields.js +5 -0
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +390 -0
- package/dist/es/fields/DataSourceInput.js +5 -0
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +268 -0
- package/dist/es/fields/DataSourceMethodSelect.js +5 -0
- package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +144 -0
- package/dist/es/fields/DataSourceMethods.js +5 -0
- package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +148 -0
- package/dist/es/fields/DataSourceMocks.js +5 -0
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +259 -0
- package/dist/es/fields/DataSourceSelect.js +5 -0
- package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +101 -0
- package/dist/es/fields/DisplayConds.js +5 -0
- package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +156 -0
- package/dist/es/fields/EventSelect.js +5 -0
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +338 -0
- package/dist/es/fields/KeyValue.js +5 -0
- package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +158 -0
- package/dist/es/fields/PageFragmentSelect.js +5 -0
- package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/es/fields/StyleSetter/Index.js +5 -0
- package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +92 -0
- package/dist/es/fields/StyleSetter/components/BackgroundPosition.js +5 -0
- package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +96 -0
- package/dist/es/fields/StyleSetter/components/Border.js +5 -0
- package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +100 -0
- package/dist/es/fields/StyleSetter/components/Box.js +5 -0
- package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +17 -0
- package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +14 -0
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +17 -0
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +17 -0
- package/dist/es/fields/StyleSetter/icons/display/Block.js +14 -0
- package/dist/es/fields/StyleSetter/icons/display/Flex.js +14 -0
- package/dist/es/fields/StyleSetter/icons/display/Inline.js +14 -0
- package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +14 -0
- package/dist/es/fields/StyleSetter/icons/display/None.js +14 -0
- package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +14 -0
- package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +14 -0
- package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +14 -0
- package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +14 -0
- package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +14 -0
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +14 -0
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +14 -0
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +14 -0
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +14 -0
- package/dist/es/fields/StyleSetter/icons/text-align/Center.js +14 -0
- package/dist/es/fields/StyleSetter/icons/text-align/Left.js +14 -0
- package/dist/es/fields/StyleSetter/icons/text-align/Right.js +14 -0
- package/dist/es/fields/StyleSetter/pro/Background.js +5 -0
- package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +114 -0
- package/dist/es/fields/StyleSetter/pro/Border.js +5 -0
- package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +50 -0
- package/dist/es/fields/StyleSetter/pro/Font.js +5 -0
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +98 -0
- package/dist/es/fields/StyleSetter/pro/Layout.js +5 -0
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +288 -0
- package/dist/es/fields/StyleSetter/pro/Position.js +5 -0
- package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +95 -0
- package/dist/es/fields/UISelect.js +6 -0
- package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +161 -0
- package/dist/es/hooks/use-code-block-edit.js +54 -0
- package/dist/es/hooks/use-data-source-edit.js +29 -0
- package/dist/es/hooks/use-editor-content-height.js +17 -0
- package/dist/es/hooks/use-filter.js +35 -0
- package/dist/es/hooks/use-float-box.js +76 -0
- package/dist/es/hooks/use-getso.js +28 -0
- package/dist/es/hooks/use-next-float-box-position.js +27 -0
- package/dist/es/hooks/use-node-status.js +28 -0
- package/dist/es/hooks/use-services.js +9 -0
- package/dist/es/hooks/use-stage.js +107 -0
- package/dist/es/hooks/use-window-rect.js +19 -0
- package/dist/es/icons/CenterIcon.js +5 -0
- package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +40 -0
- package/dist/es/icons/CodeIcon.js +5 -0
- package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +19 -0
- package/dist/es/icons/FolderMinusIcon.js +5 -0
- package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +27 -0
- package/dist/es/index.js +79 -0
- package/dist/es/initService.js +392 -0
- package/dist/es/layouts/AddPageBox.js +5 -0
- package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +38 -0
- package/dist/es/layouts/CodeEditor.js +5 -0
- package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +270 -0
- package/dist/es/layouts/Framework.js +5 -0
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +134 -0
- package/dist/es/layouts/NavMenu.js +5 -0
- package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +181 -0
- package/dist/es/layouts/page-bar/AddButton.js +5 -0
- package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +57 -0
- package/dist/es/layouts/page-bar/PageBar.js +5 -0
- package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +135 -0
- package/dist/es/layouts/page-bar/PageBarScrollContainer.js +5 -0
- package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +119 -0
- package/dist/es/layouts/page-bar/PageList.js +5 -0
- package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +54 -0
- package/dist/es/layouts/page-bar/Search.js +5 -0
- package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +60 -0
- package/dist/es/layouts/props-panel/FormPanel.js +5 -0
- package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +129 -0
- package/dist/es/layouts/props-panel/PropsPanel.js +5 -0
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +179 -0
- package/dist/es/layouts/props-panel/use-style-panel.js +40 -0
- package/dist/es/layouts/sidebar/ComponentListPanel.js +5 -0
- package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +121 -0
- package/dist/es/layouts/sidebar/Sidebar.js +5 -0
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +314 -0
- package/dist/es/layouts/sidebar/code-block/CodeBlockList.js +5 -0
- package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +161 -0
- package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.js +5 -0
- package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +113 -0
- package/dist/es/layouts/sidebar/code-block/useContentMenu.js +60 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.js +5 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.js +5 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +103 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceList.js +5 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +162 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.js +5 -0
- package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +133 -0
- package/dist/es/layouts/sidebar/data-source/useContentMenu.js +59 -0
- package/dist/es/layouts/sidebar/layer/LayerMenu.js +5 -0
- package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +90 -0
- package/dist/es/layouts/sidebar/layer/LayerNodeTool.js +5 -0
- package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +35 -0
- package/dist/es/layouts/sidebar/layer/LayerPanel.js +5 -0
- package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +99 -0
- package/dist/es/layouts/sidebar/layer/use-click.js +68 -0
- package/dist/es/layouts/sidebar/layer/use-drag.js +118 -0
- package/dist/es/layouts/sidebar/layer/use-keybinding.js +36 -0
- package/dist/es/layouts/sidebar/layer/use-node-status.js +75 -0
- package/dist/es/layouts/workspace/Breadcrumb.js +5 -0
- package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +39 -0
- package/dist/es/layouts/workspace/Workspace.js +5 -0
- package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +43 -0
- package/dist/es/layouts/workspace/viewer/NodeListMenu.js +5 -0
- package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +88 -0
- package/dist/es/layouts/workspace/viewer/Stage.js +5 -0
- package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +206 -0
- package/dist/es/layouts/workspace/viewer/StageOverlay.js +5 -0
- package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +89 -0
- package/dist/es/layouts/workspace/viewer/ViewerMenu.js +5 -0
- package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +132 -0
- package/dist/es/plugin.js +61 -0
- package/dist/es/services/BaseService.js +148 -0
- package/dist/es/services/codeBlock.js +251 -0
- package/dist/es/services/componentList.js +29 -0
- package/dist/es/services/dataSource.js +157 -0
- package/dist/es/services/dep.js +173 -0
- package/dist/es/services/editor.js +752 -0
- package/dist/es/services/events.js +64 -0
- package/dist/es/services/history.js +84 -0
- package/dist/es/services/keybinding.js +182 -0
- package/dist/es/services/props.js +216 -0
- package/dist/es/services/stageOverlay.js +161 -0
- package/dist/es/services/storage.js +127 -0
- package/dist/es/services/ui.js +112 -0
- package/dist/es/style.css +1937 -0
- package/dist/es/type.js +90 -0
- package/dist/es/utils/compose.js +44 -0
- package/dist/es/utils/config.js +8 -0
- package/dist/es/utils/const.js +15 -0
- package/dist/es/utils/content-menu.js +76 -0
- package/dist/es/utils/data-source/formConfigs/base.js +28 -0
- package/dist/es/utils/data-source/formConfigs/http.js +74 -0
- package/dist/es/utils/data-source/index.js +202 -0
- package/dist/es/utils/dep/idle-task.js +76 -0
- package/dist/es/utils/dep/worker.js +19 -0
- package/dist/es/utils/editor.js +261 -0
- package/dist/es/utils/keybinding-config.js +106 -0
- package/dist/es/utils/logger.js +18 -0
- package/dist/es/utils/monaco-editor.js +13 -0
- package/dist/es/utils/operator.js +73 -0
- package/dist/es/utils/props.js +232 -0
- package/dist/es/utils/scroll-viewer.js +115 -0
- package/dist/es/utils/tree.js +11 -0
- package/dist/es/utils/undo-redo.js +43 -0
- package/dist/style.css +10 -10
- package/dist/tmagic-editor.umd.cjs +18430 -21979
- package/package.json +16 -12
- package/src/components/CodeBlockEditor.vue +2 -8
- package/src/fields/CodeLink.vue +2 -2
- package/src/fields/CodeSelectCol.vue +1 -1
- package/src/fields/DataSourceFieldSelect/Index.vue +16 -3
- package/src/fields/DataSourceFields.vue +4 -1
- package/src/fields/EventSelect.vue +11 -11
- package/src/fields/StyleSetter/components/BackgroundPosition.vue +2 -2
- package/src/fields/StyleSetter/pro/Layout.vue +8 -8
- package/src/index.ts +1 -73
- package/src/plugin.ts +92 -0
- package/src/services/props.ts +3 -1
- package/src/type.ts +1 -1
- package/src/utils/data-source/index.ts +71 -73
- package/src/utils/index.ts +1 -0
- package/src/utils/props.ts +9 -7
- package/types/index.d.ts +3369 -3319
- package/dist/tmagic-editor.js +0 -17053
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { LayerOffset, Layout } from "../../../type.js";
|
|
2
|
+
import { useServices } from "../../../hooks/use-services.js";
|
|
3
|
+
import ContentMenu_default from "../../../components/ContentMenu.js";
|
|
4
|
+
import { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from "../../../utils/content-menu.js";
|
|
5
|
+
import CenterIcon_default from "../../../icons/CenterIcon.js";
|
|
6
|
+
import { isPage, isPageFragment } from "@tmagic/utils";
|
|
7
|
+
import { NodeType } from "@tmagic/core";
|
|
8
|
+
import { computed, createBlock, defineComponent, markRaw, openBlock, ref, useTemplateRef, watch } from "vue";
|
|
9
|
+
import { Bottom, Top } from "@element-plus/icons-vue";
|
|
10
|
+
//#region packages/editor/src/layouts/workspace/viewer/ViewerMenu.vue?vue&type=script&setup=true&lang.ts
|
|
11
|
+
var ViewerMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
|
|
12
|
+
name: "MEditorViewerMenu",
|
|
13
|
+
__name: "ViewerMenu",
|
|
14
|
+
props: {
|
|
15
|
+
isMultiSelect: {
|
|
16
|
+
type: Boolean,
|
|
17
|
+
default: false
|
|
18
|
+
},
|
|
19
|
+
stageContentMenu: {},
|
|
20
|
+
customContentMenu: {}
|
|
21
|
+
},
|
|
22
|
+
setup(__props, { expose: __expose }) {
|
|
23
|
+
const props = __props;
|
|
24
|
+
const services = useServices();
|
|
25
|
+
const { editorService } = services;
|
|
26
|
+
const menuRef = useTemplateRef("menu");
|
|
27
|
+
const canCenter = ref(false);
|
|
28
|
+
const node = computed(() => editorService.get("node"));
|
|
29
|
+
const nodes = computed(() => editorService.get("nodes"));
|
|
30
|
+
const parent = computed(() => editorService.get("parent"));
|
|
31
|
+
const menuData = computed(() => props.customContentMenu([
|
|
32
|
+
{
|
|
33
|
+
type: "button",
|
|
34
|
+
text: "水平居中",
|
|
35
|
+
icon: markRaw(CenterIcon_default),
|
|
36
|
+
display: () => canCenter.value,
|
|
37
|
+
handler: () => {
|
|
38
|
+
if (!nodes.value) return;
|
|
39
|
+
editorService.alignCenter(nodes.value);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
useCopyMenu(),
|
|
43
|
+
usePasteMenu(menuRef),
|
|
44
|
+
{
|
|
45
|
+
type: "divider",
|
|
46
|
+
direction: "horizontal",
|
|
47
|
+
display: () => {
|
|
48
|
+
if (!node.value) return false;
|
|
49
|
+
return !isPage(node.value) && !isPageFragment(node.value);
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: "button",
|
|
54
|
+
text: "上移一层",
|
|
55
|
+
icon: markRaw(Top),
|
|
56
|
+
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
57
|
+
handler: () => {
|
|
58
|
+
editorService.moveLayer(1);
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: "button",
|
|
63
|
+
text: "下移一层",
|
|
64
|
+
icon: markRaw(Bottom),
|
|
65
|
+
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
66
|
+
handler: () => {
|
|
67
|
+
editorService.moveLayer(-1);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: "button",
|
|
72
|
+
text: "置顶",
|
|
73
|
+
icon: markRaw(Top),
|
|
74
|
+
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
75
|
+
handler: () => {
|
|
76
|
+
editorService.moveLayer(LayerOffset.TOP);
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: "button",
|
|
81
|
+
text: "置底",
|
|
82
|
+
icon: markRaw(Bottom),
|
|
83
|
+
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
|
|
84
|
+
handler: () => {
|
|
85
|
+
editorService.moveLayer(LayerOffset.BOTTOM);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
useMoveToMenu(services),
|
|
89
|
+
{
|
|
90
|
+
type: "divider",
|
|
91
|
+
direction: "horizontal",
|
|
92
|
+
display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect
|
|
93
|
+
},
|
|
94
|
+
useDeleteMenu(),
|
|
95
|
+
{
|
|
96
|
+
type: "divider",
|
|
97
|
+
direction: "horizontal"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
type: "button",
|
|
101
|
+
text: "清空参考线",
|
|
102
|
+
handler: () => {
|
|
103
|
+
editorService.get("stage")?.clearGuides();
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
...props.stageContentMenu
|
|
107
|
+
], "viewer"));
|
|
108
|
+
watch(parent, async () => {
|
|
109
|
+
if (!parent.value) return canCenter.value = false;
|
|
110
|
+
const layout = await editorService.getLayout(parent.value);
|
|
111
|
+
const isLayoutConform = [Layout.ABSOLUTE, Layout.FIXED].includes(layout);
|
|
112
|
+
const isTypeConform = nodes.value?.every((selectedNode) => ![
|
|
113
|
+
NodeType.ROOT,
|
|
114
|
+
NodeType.PAGE,
|
|
115
|
+
"pop"
|
|
116
|
+
].includes(`${selectedNode?.type}`));
|
|
117
|
+
canCenter.value = isLayoutConform && !!isTypeConform;
|
|
118
|
+
}, { immediate: true });
|
|
119
|
+
const show = (e) => {
|
|
120
|
+
menuRef.value?.show(e);
|
|
121
|
+
};
|
|
122
|
+
__expose({ show });
|
|
123
|
+
return (_ctx, _cache) => {
|
|
124
|
+
return openBlock(), createBlock(ContentMenu_default, {
|
|
125
|
+
"menu-data": menuData.value,
|
|
126
|
+
ref: "menu"
|
|
127
|
+
}, null, 8, ["menu-data"]);
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
//#endregion
|
|
132
|
+
export { ViewerMenu_vue_vue_type_script_setup_true_lang_default as default };
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { setEditorConfig } from "./utils/config.js";
|
|
2
|
+
import CodeEditor_default from "./layouts/CodeEditor.js";
|
|
3
|
+
import Editor_default from "./Editor.js";
|
|
4
|
+
import CodeSelect_default from "./fields/CodeSelect.js";
|
|
5
|
+
import CodeSelectCol_default from "./fields/CodeSelectCol.js";
|
|
6
|
+
import DataSourceFields_default from "./fields/DataSourceFields.js";
|
|
7
|
+
import DataSourceMocks_default from "./fields/DataSourceMocks.js";
|
|
8
|
+
import DataSourceMethods_default from "./fields/DataSourceMethods.js";
|
|
9
|
+
import DataSourceInput_default from "./fields/DataSourceInput.js";
|
|
10
|
+
import DataSourceSelect_default from "./fields/DataSourceSelect.js";
|
|
11
|
+
import DataSourceMethodSelect_default from "./fields/DataSourceMethodSelect.js";
|
|
12
|
+
import Index_default from "./fields/DataSourceFieldSelect/Index.js";
|
|
13
|
+
import EventSelect_default from "./fields/EventSelect.js";
|
|
14
|
+
import KeyValue_default from "./fields/KeyValue.js";
|
|
15
|
+
import PageFragmentSelect_default from "./fields/PageFragmentSelect.js";
|
|
16
|
+
import DisplayConds_default from "./fields/DisplayConds.js";
|
|
17
|
+
import CondOpSelect_default from "./fields/CondOpSelect.js";
|
|
18
|
+
import Index_default$1 from "./fields/StyleSetter/Index.js";
|
|
19
|
+
import Code_default from "./fields/Code.js";
|
|
20
|
+
import CodeLink_default from "./fields/CodeLink.js";
|
|
21
|
+
import UISelect_default from "./fields/UISelect.js";
|
|
22
|
+
/* empty css */
|
|
23
|
+
import formPlugin from "@tmagic/form";
|
|
24
|
+
import tablePlugin from "@tmagic/table";
|
|
25
|
+
import designPlugin from "@tmagic/design";
|
|
26
|
+
//#region packages/editor/src/plugin.ts
|
|
27
|
+
var defaultInstallOpt = {
|
|
28
|
+
parseDSL: (dsl) => eval(dsl),
|
|
29
|
+
customCreateMonacoEditor: (monaco, codeEditorEl, options) => monaco.editor.create(codeEditorEl, options),
|
|
30
|
+
customCreateMonacoDiffEditor: (monaco, codeEditorEl, options) => monaco.editor.createDiffEditor(codeEditorEl, options)
|
|
31
|
+
};
|
|
32
|
+
var plugin_default = { install: (app, opt) => {
|
|
33
|
+
const option = Object.assign(defaultInstallOpt, opt || {});
|
|
34
|
+
app.use(designPlugin, opt || {});
|
|
35
|
+
app.use(formPlugin, opt || {});
|
|
36
|
+
app.use(tablePlugin);
|
|
37
|
+
app.config.globalProperties.$TMAGIC_EDITOR = option;
|
|
38
|
+
setEditorConfig(option);
|
|
39
|
+
app.component(`${Editor_default.name || "MEditor"}`, Editor_default);
|
|
40
|
+
app.component("magic-code-editor", CodeEditor_default);
|
|
41
|
+
app.component("m-fields-ui-select", UISelect_default);
|
|
42
|
+
app.component("m-fields-code-link", CodeLink_default);
|
|
43
|
+
app.component("m-fields-vs-code", Code_default);
|
|
44
|
+
app.component("m-fields-code-select", CodeSelect_default);
|
|
45
|
+
app.component("m-fields-code-select-col", CodeSelectCol_default);
|
|
46
|
+
app.component("m-fields-event-select", EventSelect_default);
|
|
47
|
+
app.component("m-fields-data-source-fields", DataSourceFields_default);
|
|
48
|
+
app.component("m-fields-data-source-mocks", DataSourceMocks_default);
|
|
49
|
+
app.component("m-fields-key-value", KeyValue_default);
|
|
50
|
+
app.component("m-fields-data-source-input", DataSourceInput_default);
|
|
51
|
+
app.component("m-fields-data-source-select", DataSourceSelect_default);
|
|
52
|
+
app.component("m-fields-data-source-methods", DataSourceMethods_default);
|
|
53
|
+
app.component("m-fields-data-source-method-select", DataSourceMethodSelect_default);
|
|
54
|
+
app.component("m-fields-data-source-field-select", Index_default);
|
|
55
|
+
app.component("m-fields-page-fragment-select", PageFragmentSelect_default);
|
|
56
|
+
app.component("m-fields-display-conds", DisplayConds_default);
|
|
57
|
+
app.component("m-fields-cond-op-select", CondOpSelect_default);
|
|
58
|
+
app.component("m-form-style-setter", Index_default$1);
|
|
59
|
+
} };
|
|
60
|
+
//#endregion
|
|
61
|
+
export { plugin_default as default };
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { compose } from "../utils/compose.js";
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
//#region packages/editor/src/services/BaseService.ts
|
|
4
|
+
var methodName = (prefix, name) => `${prefix}${name[0].toUpperCase()}${name.substring(1)}`;
|
|
5
|
+
var isError = (error) => Object.prototype.toString.call(error) === "[object Error]";
|
|
6
|
+
var doAction = (args, scope, sourceMethod, beforeMethodName, afterMethodName, fn) => {
|
|
7
|
+
try {
|
|
8
|
+
let beforeArgs = args;
|
|
9
|
+
for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {
|
|
10
|
+
beforeArgs = beforeMethod(...beforeArgs) || [];
|
|
11
|
+
if (isError(beforeArgs)) throw beforeArgs;
|
|
12
|
+
if (!Array.isArray(beforeArgs)) beforeArgs = [beforeArgs];
|
|
13
|
+
}
|
|
14
|
+
let returnValue = fn(beforeArgs, sourceMethod.bind(scope));
|
|
15
|
+
for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {
|
|
16
|
+
returnValue = afterMethod(returnValue, ...beforeArgs);
|
|
17
|
+
if (isError(returnValue)) throw returnValue;
|
|
18
|
+
}
|
|
19
|
+
return returnValue;
|
|
20
|
+
} catch (error) {
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var doAsyncAction = async (args, scope, sourceMethod, beforeMethodName, afterMethodName, fn) => {
|
|
25
|
+
try {
|
|
26
|
+
let beforeArgs = args;
|
|
27
|
+
for (const beforeMethod of scope.pluginOptionsList[beforeMethodName]) {
|
|
28
|
+
beforeArgs = await beforeMethod(...beforeArgs) || [];
|
|
29
|
+
if (isError(beforeArgs)) throw beforeArgs;
|
|
30
|
+
if (!Array.isArray(beforeArgs)) beforeArgs = [beforeArgs];
|
|
31
|
+
}
|
|
32
|
+
let returnValue = await fn(beforeArgs, sourceMethod.bind(scope));
|
|
33
|
+
for (const afterMethod of scope.pluginOptionsList[afterMethodName]) {
|
|
34
|
+
returnValue = await afterMethod(returnValue, ...beforeArgs);
|
|
35
|
+
if (isError(returnValue)) throw returnValue;
|
|
36
|
+
}
|
|
37
|
+
return returnValue;
|
|
38
|
+
} catch (error) {
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* 提供两种方式对Class进行扩展
|
|
44
|
+
* 方法1:
|
|
45
|
+
* 给Class中的每个方法都添加before after两个钩子
|
|
46
|
+
* 给Class添加一个usePlugin方法,use方法可以传入一个包含before或者after方法的对象
|
|
47
|
+
*
|
|
48
|
+
* 例如:
|
|
49
|
+
* Class EditorService extends BaseService {
|
|
50
|
+
* constructor() {
|
|
51
|
+
* super([ { name: 'add', isAsync: true },]);
|
|
52
|
+
* }
|
|
53
|
+
* add(value) { return result; }
|
|
54
|
+
* };
|
|
55
|
+
*
|
|
56
|
+
* const editorService = new EditorService();
|
|
57
|
+
*
|
|
58
|
+
* editorService.usePlugin({
|
|
59
|
+
* beforeAdd(value) { return [value] },
|
|
60
|
+
* afterAdd(result, value) { return result },
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* editorService.add(); 最终会变成 () => {
|
|
64
|
+
* editorService.beforeAdd();
|
|
65
|
+
* editorService.add();
|
|
66
|
+
* editorService.afterAdd();
|
|
67
|
+
* }
|
|
68
|
+
*
|
|
69
|
+
* 调用时的参数会透传到before方法的参数中, 然后before的return 会作为原方法的参数和after的参数,after第一个参数则是原方法的return值;
|
|
70
|
+
* 如需终止后续方法调用可以return new Error();
|
|
71
|
+
*
|
|
72
|
+
* 方法2:
|
|
73
|
+
* 给Class中的每个方法都添加中间件
|
|
74
|
+
* 给Class添加一个use方法,use方法可以传入一个包含源对象方法名作为key值的对象
|
|
75
|
+
*
|
|
76
|
+
* 例如:
|
|
77
|
+
* Class EditorService extends BaseService {
|
|
78
|
+
* constructor() {
|
|
79
|
+
* super([ { name: 'add', isAsync: true },]);
|
|
80
|
+
* }
|
|
81
|
+
* add(value) { return result; }
|
|
82
|
+
* };
|
|
83
|
+
*
|
|
84
|
+
* const editorService = new EditorService();
|
|
85
|
+
* editorService.use({
|
|
86
|
+
* add(value, next) { console.log(value); next() },
|
|
87
|
+
* });
|
|
88
|
+
*/
|
|
89
|
+
var BaseService_default = class extends EventEmitter {
|
|
90
|
+
pluginOptionsList = {};
|
|
91
|
+
middleware = {};
|
|
92
|
+
taskList = [];
|
|
93
|
+
doingTask = false;
|
|
94
|
+
constructor(methods = [], serialMethods = []) {
|
|
95
|
+
super();
|
|
96
|
+
methods.forEach(({ name: propertyName, isAsync }) => {
|
|
97
|
+
const scope = this;
|
|
98
|
+
const sourceMethod = scope[propertyName];
|
|
99
|
+
const beforeMethodName = methodName("before", propertyName);
|
|
100
|
+
const afterMethodName = methodName("after", propertyName);
|
|
101
|
+
this.pluginOptionsList[beforeMethodName] = [];
|
|
102
|
+
this.pluginOptionsList[afterMethodName] = [];
|
|
103
|
+
this.middleware[propertyName] = [];
|
|
104
|
+
const fn = compose(this.middleware[propertyName], isAsync);
|
|
105
|
+
Object.defineProperty(scope, propertyName, { value: isAsync ? async (...args) => {
|
|
106
|
+
if (!serialMethods.includes(propertyName)) return doAsyncAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn);
|
|
107
|
+
const promise = new Promise((resolve, reject) => {
|
|
108
|
+
this.taskList.push(async () => {
|
|
109
|
+
try {
|
|
110
|
+
resolve(await doAsyncAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn));
|
|
111
|
+
} catch (e) {
|
|
112
|
+
reject(e);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
if (!this.doingTask) this.doTask();
|
|
117
|
+
return promise;
|
|
118
|
+
} : (...args) => doAction(args, scope, sourceMethod, beforeMethodName, afterMethodName, fn) });
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* @deprecated 请使用usePlugin代替
|
|
123
|
+
*/
|
|
124
|
+
use(options) {
|
|
125
|
+
for (const [methodName, method] of Object.entries(options)) if (typeof method === "function") this.middleware[methodName].push(method);
|
|
126
|
+
}
|
|
127
|
+
usePlugin(options) {
|
|
128
|
+
for (const [methodName, method] of Object.entries(options)) if (typeof method === "function" && !this.pluginOptionsList[methodName].includes(method)) this.pluginOptionsList[methodName].push(method);
|
|
129
|
+
}
|
|
130
|
+
removePlugin(options) {
|
|
131
|
+
for (const [methodName, method] of Object.entries(options)) if (Array.isArray(this.pluginOptionsList[methodName])) this.pluginOptionsList[methodName] = this.pluginOptionsList[methodName].filter((item) => item !== method);
|
|
132
|
+
}
|
|
133
|
+
removeAllPlugins() {
|
|
134
|
+
for (const key of Object.keys(this.pluginOptionsList)) this.pluginOptionsList[key] = [];
|
|
135
|
+
for (const key of Object.keys(this.middleware)) this.middleware[key] = [];
|
|
136
|
+
}
|
|
137
|
+
async doTask() {
|
|
138
|
+
this.doingTask = true;
|
|
139
|
+
let task = this.taskList.shift();
|
|
140
|
+
while (task) {
|
|
141
|
+
await task();
|
|
142
|
+
task = this.taskList.shift();
|
|
143
|
+
}
|
|
144
|
+
this.doingTask = false;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
//#endregion
|
|
148
|
+
export { BaseService_default as default };
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { CODE_DRAFT_STORAGE_KEY } from "../type.js";
|
|
2
|
+
import BaseService_default from "./BaseService.js";
|
|
3
|
+
import { getEditorConfig } from "../utils/config.js";
|
|
4
|
+
import storage_default, { Protocol } from "./storage.js";
|
|
5
|
+
import { COPY_CODE_STORAGE_KEY } from "../utils/editor.js";
|
|
6
|
+
import editor_default from "./editor.js";
|
|
7
|
+
import { Target, Watcher } from "@tmagic/core";
|
|
8
|
+
import { reactive } from "vue";
|
|
9
|
+
import { cloneDeep, get, keys, pick } from "lodash-es";
|
|
10
|
+
//#region packages/editor/src/services/codeBlock.ts
|
|
11
|
+
var canUsePluginMethods = {
|
|
12
|
+
async: [
|
|
13
|
+
"setCodeDslById",
|
|
14
|
+
"setEditStatus",
|
|
15
|
+
"setCombineIds",
|
|
16
|
+
"setUndeleteableList",
|
|
17
|
+
"deleteCodeDslByIds"
|
|
18
|
+
],
|
|
19
|
+
sync: ["setCodeDslByIdSync"]
|
|
20
|
+
};
|
|
21
|
+
var CodeBlock = class extends BaseService_default {
|
|
22
|
+
state = reactive({
|
|
23
|
+
codeDsl: null,
|
|
24
|
+
editable: true,
|
|
25
|
+
combineIds: [],
|
|
26
|
+
undeletableList: [],
|
|
27
|
+
paramsColConfig: void 0
|
|
28
|
+
});
|
|
29
|
+
constructor() {
|
|
30
|
+
super([...canUsePluginMethods.async.map((methodName) => ({
|
|
31
|
+
name: methodName,
|
|
32
|
+
isAsync: true
|
|
33
|
+
})), ...canUsePluginMethods.sync.map((methodName) => ({
|
|
34
|
+
name: methodName,
|
|
35
|
+
isAsync: false
|
|
36
|
+
}))]);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 设置活动的代码块dsl数据源
|
|
40
|
+
* @param {CodeBlockDSL} codeDsl 代码DSL
|
|
41
|
+
* @returns {void}
|
|
42
|
+
*/
|
|
43
|
+
async setCodeDsl(codeDsl) {
|
|
44
|
+
this.state.codeDsl = codeDsl;
|
|
45
|
+
this.emit("code-dsl-change", this.state.codeDsl);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 获取活动的代码块dsl数据源(默认从dsl中的codeBlocks字段读取)
|
|
49
|
+
* 方法要支持钩子添加扩展,会被重写为异步方法,因此这里显示写为异步以提醒调用者需以异步形式调用
|
|
50
|
+
* @param {boolean} forceRefresh 是否强制从活动dsl拉取刷新
|
|
51
|
+
* @returns {CodeBlockDSL | null}
|
|
52
|
+
*/
|
|
53
|
+
getCodeDsl() {
|
|
54
|
+
return this.state.codeDsl;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 根据代码块id获取代码块内容
|
|
58
|
+
* @param {Id} id 代码块id
|
|
59
|
+
* @returns {CodeBlockContent | null}
|
|
60
|
+
*/
|
|
61
|
+
getCodeContentById(id) {
|
|
62
|
+
if (!id) return null;
|
|
63
|
+
const totalCodeDsl = this.getCodeDsl();
|
|
64
|
+
if (!totalCodeDsl) return null;
|
|
65
|
+
return totalCodeDsl[id] ?? null;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 设置代码块ID和代码内容到源dsl
|
|
69
|
+
* @param {Id} id 代码块id
|
|
70
|
+
* @param {CodeBlockContent} codeConfig 代码块内容配置信息
|
|
71
|
+
* @returns {void}
|
|
72
|
+
*/
|
|
73
|
+
async setCodeDslById(id, codeConfig) {
|
|
74
|
+
this.setCodeDslByIdSync(id, codeConfig, true);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* 为了兼容历史原因
|
|
78
|
+
* 设置代码块ID和代码内容到源dsl
|
|
79
|
+
* @param {Id} id 代码块id
|
|
80
|
+
* @param {CodeBlockContent} codeConfig 代码块内容配置信息
|
|
81
|
+
* @param {boolean} force 是否强制写入,默认true
|
|
82
|
+
* @returns {void}
|
|
83
|
+
*/
|
|
84
|
+
setCodeDslByIdSync(id, codeConfig, force = true) {
|
|
85
|
+
const codeDsl = this.getCodeDsl();
|
|
86
|
+
if (!codeDsl) throw new Error("dsl中没有codeBlocks");
|
|
87
|
+
if (codeDsl[id] && !force) return;
|
|
88
|
+
const codeConfigProcessed = cloneDeep(codeConfig);
|
|
89
|
+
if (codeConfigProcessed.content) {
|
|
90
|
+
const parseDSL = getEditorConfig("parseDSL");
|
|
91
|
+
if (typeof codeConfigProcessed.content === "string") codeConfigProcessed.content = parseDSL(codeConfigProcessed.content);
|
|
92
|
+
}
|
|
93
|
+
codeDsl[id] = {
|
|
94
|
+
...codeDsl[id] || {},
|
|
95
|
+
...codeConfigProcessed
|
|
96
|
+
};
|
|
97
|
+
this.emit("addOrUpdate", id, codeDsl[id]);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* 根据代码块id数组获取代码dsl
|
|
101
|
+
* @param {string[]} ids 代码块id数组
|
|
102
|
+
* @returns {CodeBlockDSL}
|
|
103
|
+
*/
|
|
104
|
+
getCodeDslByIds(ids) {
|
|
105
|
+
return pick(this.getCodeDsl(), ids);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 获取编辑状态
|
|
109
|
+
* @returns {boolean} 是否可编辑
|
|
110
|
+
*/
|
|
111
|
+
getEditStatus() {
|
|
112
|
+
return this.state.editable;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 设置编辑状态
|
|
116
|
+
* @param {boolean} status 是否可编辑
|
|
117
|
+
* @returns {void}
|
|
118
|
+
*/
|
|
119
|
+
async setEditStatus(status) {
|
|
120
|
+
this.state.editable = status;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* 设置当前选中组件已关联绑定的代码块id数组
|
|
124
|
+
* @param {string[]} ids 代码块id数组
|
|
125
|
+
* @returns {void}
|
|
126
|
+
*/
|
|
127
|
+
async setCombineIds(ids) {
|
|
128
|
+
this.state.combineIds = ids;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 获取当前选中组件已关联绑定的代码块id数组
|
|
132
|
+
* @returns {string[]}
|
|
133
|
+
*/
|
|
134
|
+
getCombineIds() {
|
|
135
|
+
return this.state.combineIds;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* 获取不可删除列表
|
|
139
|
+
* @returns {Id[]}
|
|
140
|
+
*/
|
|
141
|
+
getUndeletableList() {
|
|
142
|
+
return this.state.undeletableList;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* 设置不可删除列表:为业务逻辑预留的不可删除的代码块列表,由业务逻辑维护(如代码块上线后不可删除)
|
|
146
|
+
* @param {Id[]} codeIds 代码块id数组
|
|
147
|
+
* @returns {void}
|
|
148
|
+
*/
|
|
149
|
+
async setUndeleteableList(codeIds) {
|
|
150
|
+
this.state.undeletableList = codeIds;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* 设置代码草稿
|
|
154
|
+
*/
|
|
155
|
+
setCodeDraft(codeId, content) {
|
|
156
|
+
globalThis.localStorage.setItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`, content);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* 获取代码草稿
|
|
160
|
+
*/
|
|
161
|
+
getCodeDraft(codeId) {
|
|
162
|
+
return globalThis.localStorage.getItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* 删除代码草稿
|
|
166
|
+
*/
|
|
167
|
+
removeCodeDraft(codeId) {
|
|
168
|
+
globalThis.localStorage.removeItem(`${CODE_DRAFT_STORAGE_KEY}_${codeId}`);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* 在dsl数据源中删除指定id的代码块
|
|
172
|
+
* @param {Id[]} codeIds 需要删除的代码块id数组
|
|
173
|
+
*/
|
|
174
|
+
async deleteCodeDslByIds(codeIds) {
|
|
175
|
+
const currentDsl = await this.getCodeDsl();
|
|
176
|
+
if (!currentDsl) return;
|
|
177
|
+
codeIds.forEach((id) => {
|
|
178
|
+
delete currentDsl[id];
|
|
179
|
+
this.emit("remove", id);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
setParamsColConfig(config) {
|
|
183
|
+
this.state.paramsColConfig = config;
|
|
184
|
+
}
|
|
185
|
+
getParamsColConfig() {
|
|
186
|
+
return this.state.paramsColConfig;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* 生成代码块唯一id
|
|
190
|
+
* @returns {Id} 代码块唯一id
|
|
191
|
+
*/
|
|
192
|
+
async getUniqueId() {
|
|
193
|
+
const newId = `code_${Math.random().toString(10).substring(2).substring(0, 4)}`;
|
|
194
|
+
if (!keys(await this.getCodeDsl()).includes(newId)) return newId;
|
|
195
|
+
return await this.getUniqueId();
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* 复制时会带上组件关联的代码块
|
|
199
|
+
* @param config 组件节点配置
|
|
200
|
+
* @returns
|
|
201
|
+
*/
|
|
202
|
+
copyWithRelated(config, collectorOptions) {
|
|
203
|
+
const copyNodes = Array.isArray(config) ? config : [config];
|
|
204
|
+
const copyData = {};
|
|
205
|
+
if (collectorOptions && typeof collectorOptions.isTarget === "function") {
|
|
206
|
+
const customTarget = new Target({ ...collectorOptions });
|
|
207
|
+
const coperWatcher = new Watcher();
|
|
208
|
+
coperWatcher.addTarget(customTarget);
|
|
209
|
+
coperWatcher.collect(copyNodes, {}, true, collectorOptions.type);
|
|
210
|
+
Object.keys(customTarget.deps).forEach((nodeId) => {
|
|
211
|
+
const node = editor_default.getNodeById(nodeId);
|
|
212
|
+
if (!node) return;
|
|
213
|
+
customTarget.deps[nodeId].keys.forEach((key) => {
|
|
214
|
+
const relateCodeId = get(node, key);
|
|
215
|
+
if (!Object.keys(copyData).find((codeId) => codeId === relateCodeId)) {
|
|
216
|
+
const relateCode = this.getCodeContentById(relateCodeId);
|
|
217
|
+
if (relateCode) copyData[relateCodeId] = relateCode;
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
storage_default.setItem(COPY_CODE_STORAGE_KEY, copyData, { protocol: Protocol.OBJECT });
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* 粘贴代码块
|
|
226
|
+
* @returns
|
|
227
|
+
*/
|
|
228
|
+
paste() {
|
|
229
|
+
const codeDsl = storage_default.getItem(COPY_CODE_STORAGE_KEY);
|
|
230
|
+
Object.keys(codeDsl).forEach((codeId) => {
|
|
231
|
+
this.setCodeDslByIdSync(codeId, codeDsl[codeId], false);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
resetState() {
|
|
235
|
+
this.state.codeDsl = null;
|
|
236
|
+
this.state.editable = true;
|
|
237
|
+
this.state.combineIds = [];
|
|
238
|
+
this.state.undeletableList = [];
|
|
239
|
+
}
|
|
240
|
+
destroy() {
|
|
241
|
+
this.resetState();
|
|
242
|
+
this.removeAllListeners();
|
|
243
|
+
this.removeAllPlugins();
|
|
244
|
+
}
|
|
245
|
+
usePlugin(options) {
|
|
246
|
+
super.usePlugin(options);
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
var codeBlock_default = new CodeBlock();
|
|
250
|
+
//#endregion
|
|
251
|
+
export { codeBlock_default as default };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import BaseService_default from "./BaseService.js";
|
|
2
|
+
import { shallowReactive } from "vue";
|
|
3
|
+
//#region packages/editor/src/services/componentList.ts
|
|
4
|
+
var ComponentList = class extends BaseService_default {
|
|
5
|
+
state = shallowReactive({ list: [] });
|
|
6
|
+
constructor() {
|
|
7
|
+
super([]);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @param componentGroupList 组件列表配置
|
|
11
|
+
*/
|
|
12
|
+
setList(componentGroupList) {
|
|
13
|
+
this.state.list = componentGroupList;
|
|
14
|
+
}
|
|
15
|
+
getList() {
|
|
16
|
+
return this.state.list;
|
|
17
|
+
}
|
|
18
|
+
resetState() {
|
|
19
|
+
this.state.list = [];
|
|
20
|
+
}
|
|
21
|
+
destroy() {
|
|
22
|
+
this.resetState();
|
|
23
|
+
this.removeAllListeners();
|
|
24
|
+
this.removeAllPlugins();
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
var componentList_default = new ComponentList();
|
|
28
|
+
//#endregion
|
|
29
|
+
export { componentList_default as default };
|