@tmagic/editor 1.8.0-beta.2 → 1.8.0-beta.20
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/es/Editor.vue_vue_type_script_setup_true_lang.js +43 -9
- package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +8 -4
- package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +22 -98
- package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +32 -9
- package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +68 -17
- package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ScrollBar.js +0 -1
- package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/components/ViewForm.js +5 -0
- package/dist/es/components/ViewForm.vue_vue_type_script_setup_true_lang.js +58 -0
- package/dist/es/editorProps.js +9 -1
- package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +16 -5
- package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +81 -44
- package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +10 -3
- package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +7 -19
- package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +13 -6
- package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +11 -8
- package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +39 -12
- package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +11 -20
- package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +11 -6
- package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +30 -14
- package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +11 -4
- package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +38 -6
- package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +151 -153
- package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +8 -10
- package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +28 -6
- package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/fields/StyleSetter/icons/align-items/Center.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/FlexEnd.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/FlexStart.js +31 -0
- package/dist/es/fields/StyleSetter/icons/align-items/SpaceAround.js +50 -0
- package/dist/es/fields/StyleSetter/icons/align-items/SpaceBetween.js +50 -0
- package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +7 -7
- package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +6 -3
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +29 -6
- package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +32 -6
- package/dist/es/fields/StyleSetter/icons/display/Block.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Flex.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/Inline.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +1 -1
- package/dist/es/fields/StyleSetter/icons/display/None.js +1 -1
- package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +11 -3
- package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +11 -3
- package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +11 -3
- package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +11 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +17 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +19 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +19 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +37 -3
- package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +33 -3
- package/dist/es/fields/StyleSetter/icons/text-align/Center.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Left.js +1 -1
- package/dist/es/fields/StyleSetter/icons/text-align/Right.js +1 -1
- package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +56 -30
- package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +7 -4
- package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +35 -26
- package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +76 -48
- package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +29 -23
- package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +7 -4
- package/dist/es/fields/UISelect.js +0 -1
- package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/es/hooks/use-code-block-edit.js +6 -3
- package/dist/es/hooks/use-compare-form.js +119 -0
- package/dist/es/hooks/use-data-source-edit.js +5 -2
- package/dist/es/hooks/use-stage.js +9 -4
- package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/icons/DatasourceIcon.js +17 -0
- package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/index.js +24 -10
- package/dist/es/initService.js +19 -13
- package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +24 -12
- package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +25 -18
- package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/NavMenuColumn.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +25 -38
- package/dist/es/layouts/history-list/BucketTab.js +5 -0
- package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +62 -0
- package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +177 -88
- package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +139 -37
- package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +164 -107
- package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +44 -9
- package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +49 -53
- package/dist/es/layouts/history-list/composables.js +138 -108
- package/dist/es/layouts/history-list/useHistoryList.js +56 -0
- package/dist/es/layouts/history-list/useHistoryRevert.js +317 -0
- package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +5 -3
- package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +50 -7
- package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +33 -13
- package/dist/es/layouts/props-panel/use-style-panel.js +3 -2
- package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +26 -38
- package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/es/layouts/sidebar/code-block/useContentMenu.js +19 -4
- package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +23 -6
- package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +27 -5
- package/dist/es/layouts/sidebar/data-source/useContentMenu.js +19 -4
- package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/es/layouts/sidebar/layer/LayerNodeContent.js +5 -0
- package/dist/es/layouts/sidebar/layer/LayerNodeContent.vue_vue_type_script_setup_true_lang.js +46 -0
- package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/es/layouts/sidebar/layer/use-click.js +3 -3
- package/dist/es/layouts/sidebar/layer/use-node-status.js +2 -2
- package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +9 -3
- package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +16 -16
- package/dist/es/plugin.js +5 -2
- package/dist/es/services/codeBlock.js +137 -56
- package/dist/es/services/dataSource.js +122 -52
- package/dist/es/services/dep.js +162 -41
- package/dist/es/services/editor.js +613 -179
- package/dist/es/services/history.js +350 -386
- package/dist/es/services/keybinding.js +6 -6
- package/dist/es/services/props.js +3 -2
- package/dist/es/services/storage.js +2 -2
- package/dist/es/services/ui.js +10 -2
- package/dist/es/style.css +549 -113
- package/dist/es/utils/config.js +4 -1
- package/dist/es/utils/const.js +2 -2
- package/dist/es/utils/content-menu.js +19 -11
- package/dist/es/utils/data-source/index.js +34 -11
- package/dist/es/utils/dep/collect-worker-client.js +114 -0
- package/dist/es/utils/dep/idle-task.js +47 -22
- package/dist/es/utils/dep/worker.js +1 -1
- package/dist/es/utils/editor.js +103 -49
- package/dist/es/utils/event.js +123 -0
- package/dist/es/utils/history.js +220 -0
- package/dist/es/utils/indexed-db.js +86 -0
- package/dist/es/utils/monaco-editor.js +22 -6
- package/dist/es/utils/operator.js +2 -2
- package/dist/es/utils/props.js +114 -33
- package/dist/es/utils/type-match-rules.js +367 -0
- package/dist/es/utils/undo-redo.js +60 -1
- package/dist/style.css +549 -113
- package/dist/themes/magic-admin.css +3028 -0
- package/dist/tmagic-editor.umd.cjs +14273 -10029
- package/package.json +8 -8
- package/src/Editor.vue +43 -2
- package/src/components/CodeBlockEditor.vue +3 -0
- package/src/components/CompareForm.vue +18 -146
- package/src/components/ContentMenu.vue +44 -8
- package/src/components/FloatingBox.vue +84 -9
- package/src/components/ScrollBar.vue +0 -67
- package/src/components/ToolButton.vue +2 -2
- package/src/components/ViewForm.vue +55 -0
- package/src/editorProps.ts +30 -0
- package/src/fields/Code.vue +10 -2
- package/src/fields/CodeLink.vue +2 -5
- package/src/fields/CodeSelect.vue +54 -40
- package/src/fields/CodeSelectCol.vue +8 -1
- package/src/fields/CondOpSelect.vue +2 -24
- package/src/fields/DataSourceFieldSelect/FieldSelect.vue +16 -2
- package/src/fields/DataSourceFieldSelect/Index.vue +14 -5
- package/src/fields/DataSourceFields.vue +42 -8
- package/src/fields/DataSourceInput.vue +10 -28
- package/src/fields/DataSourceMethodSelect.vue +9 -4
- package/src/fields/DataSourceMethods.vue +42 -21
- package/src/fields/DataSourceMocks.vue +3 -0
- package/src/fields/DisplayConds.vue +18 -1
- package/src/fields/EventSelect.vue +145 -161
- package/src/fields/StyleSetter/Index.vue +3 -12
- package/src/fields/StyleSetter/components/Border.vue +15 -6
- package/src/fields/StyleSetter/icons/align-items/Center.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/FlexEnd.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/FlexStart.vue +19 -0
- package/src/fields/StyleSetter/icons/align-items/SpaceAround.vue +34 -0
- package/src/fields/StyleSetter/icons/align-items/SpaceBetween.vue +34 -0
- package/src/fields/StyleSetter/icons/align-items/index.ts +5 -0
- package/src/fields/StyleSetter/icons/background-repeat/NoRepeat.vue +20 -4
- package/src/fields/StyleSetter/icons/background-repeat/Repeat.vue +10 -28
- package/src/fields/StyleSetter/icons/background-repeat/RepeatX.vue +4 -5
- package/src/fields/StyleSetter/icons/background-repeat/RepeatY.vue +4 -5
- package/src/fields/StyleSetter/icons/flex-direction/Column.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/ColumnReverse.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/Row.vue +4 -3
- package/src/fields/StyleSetter/icons/flex-direction/RowReverse.vue +4 -3
- package/src/fields/StyleSetter/icons/justify-content/Center.vue +5 -2
- package/src/fields/StyleSetter/icons/justify-content/FlexEnd.vue +15 -2
- package/src/fields/StyleSetter/icons/justify-content/FlexStart.vue +15 -2
- package/src/fields/StyleSetter/icons/justify-content/SpaceAround.vue +28 -3
- package/src/fields/StyleSetter/icons/justify-content/SpaceBetween.vue +28 -2
- package/src/fields/StyleSetter/pro/Background.vue +99 -55
- package/src/fields/StyleSetter/pro/Border.vue +9 -11
- package/src/fields/StyleSetter/pro/Font.vue +66 -64
- package/src/fields/StyleSetter/pro/Layout.vue +211 -139
- package/src/fields/StyleSetter/pro/Position.vue +69 -67
- package/src/fields/StyleSetter/pro/Transform.vue +23 -25
- package/src/fields/UISelect.vue +0 -12
- package/src/hooks/index.ts +1 -0
- package/src/hooks/use-code-block-edit.ts +4 -3
- package/src/hooks/use-compare-form.ts +187 -0
- package/src/hooks/use-data-source-edit.ts +2 -2
- package/src/hooks/use-stage.ts +5 -3
- package/src/icons/DatasourceIcon.vue +7 -0
- package/src/index.ts +12 -0
- package/src/initService.ts +26 -16
- package/src/layouts/CodeEditor.vue +34 -11
- package/src/layouts/Framework.vue +15 -8
- package/src/layouts/NavMenu.vue +3 -3
- package/src/layouts/history-list/Bucket.vue +33 -41
- package/src/layouts/history-list/BucketTab.vue +72 -0
- package/src/layouts/history-list/GroupRow.vue +190 -93
- package/src/layouts/history-list/HistoryDiffDialog.vue +169 -90
- package/src/layouts/history-list/HistoryListPanel.vue +191 -95
- package/src/layouts/history-list/InitialRow.vue +38 -8
- package/src/layouts/history-list/PageTab.vue +67 -43
- package/src/layouts/history-list/composables.ts +239 -125
- package/src/layouts/history-list/useHistoryList.ts +60 -0
- package/src/layouts/history-list/useHistoryRevert.ts +425 -0
- package/src/layouts/page-bar/PageBar.vue +4 -2
- package/src/layouts/props-panel/FormPanel.vue +72 -6
- package/src/layouts/props-panel/PropsPanel.vue +62 -18
- package/src/layouts/props-panel/use-style-panel.ts +4 -3
- package/src/layouts/sidebar/ComponentListPanel.vue +10 -6
- package/src/layouts/sidebar/Sidebar.vue +13 -6
- package/src/layouts/sidebar/code-block/CodeBlockList.vue +5 -5
- package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +5 -2
- package/src/layouts/sidebar/code-block/useContentMenu.ts +14 -2
- package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +34 -2
- package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +29 -4
- package/src/layouts/sidebar/data-source/useContentMenu.ts +14 -2
- package/src/layouts/sidebar/layer/LayerMenu.vue +21 -13
- package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
- package/src/layouts/sidebar/layer/LayerNodeTool.vue +7 -4
- package/src/layouts/sidebar/layer/LayerPanel.vue +4 -1
- package/src/layouts/sidebar/layer/use-click.ts +3 -3
- package/src/layouts/sidebar/layer/use-node-status.ts +2 -2
- package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
- package/src/layouts/workspace/viewer/Stage.vue +1 -1
- package/src/layouts/workspace/viewer/ViewerMenu.vue +15 -15
- package/src/plugin.ts +6 -3
- package/src/services/codeBlock.ts +152 -47
- package/src/services/dataSource.ts +120 -41
- package/src/services/dep.ts +292 -47
- package/src/services/editor.ts +820 -224
- package/src/services/history.ts +449 -412
- package/src/services/keybinding.ts +6 -6
- package/src/services/ui.ts +33 -5
- package/src/theme/code-block.scss +37 -0
- package/src/theme/common/var.scss +1 -1
- package/src/theme/component-list-panel.scss +2 -2
- package/src/theme/data-source-field.scss +4 -0
- package/src/theme/display-conds.scss +11 -0
- package/src/theme/event.scss +70 -1
- package/src/theme/floating-box.scss +9 -1
- package/src/theme/framework.scss +4 -1
- package/src/theme/history-list-panel.scss +157 -23
- package/src/theme/layer-node-content.scss +14 -0
- package/src/theme/nav-menu.scss +5 -1
- package/src/theme/page-bar.scss +0 -4
- package/src/theme/props-panel.scss +5 -4
- package/src/theme/scroll-bar.scss +64 -0
- package/src/theme/style-setter/border.scss +17 -5
- package/src/theme/theme.scss +4 -0
- package/src/theme/themes/magic-admin/index.scss +214 -0
- package/src/theme/ui-select.scss +9 -0
- package/src/type.ts +668 -124
- package/src/utils/config.ts +9 -1
- package/src/utils/const.ts +3 -2
- package/src/utils/content-menu.ts +20 -11
- package/src/utils/data-source/index.ts +32 -12
- package/src/utils/dep/collect-worker-client.ts +149 -0
- package/src/utils/dep/idle-task.ts +72 -35
- package/src/utils/dep/worker.ts +113 -9
- package/src/utils/editor.ts +166 -60
- package/src/utils/event.ts +224 -0
- package/src/utils/history.ts +286 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/indexed-db.ts +122 -0
- package/src/utils/monaco-editor.ts +27 -0
- package/src/utils/operator.ts +2 -2
- package/src/utils/props.ts +114 -11
- package/src/utils/type-match-rules.ts +684 -0
- package/src/utils/undo-redo.ts +88 -0
- package/types/index.d.ts +1979 -515
- package/dist/es/layouts/history-list/CodeBlockTab.js +0 -5
- package/dist/es/layouts/history-list/CodeBlockTab.vue_vue_type_script_setup_true_lang.js +0 -62
- package/dist/es/layouts/history-list/DataSourceTab.js +0 -5
- package/dist/es/layouts/history-list/DataSourceTab.vue_vue_type_script_setup_true_lang.js +0 -62
- package/src/layouts/history-list/CodeBlockTab.vue +0 -61
- package/src/layouts/history-list/DataSourceTab.vue +0 -61
|
@@ -3,28 +3,31 @@ import history_default from "./services/history.js";
|
|
|
3
3
|
import storage_default from "./services/storage.js";
|
|
4
4
|
import editor_default from "./services/editor.js";
|
|
5
5
|
import ui_default from "./services/ui.js";
|
|
6
|
+
import codeBlock_default from "./services/codeBlock.js";
|
|
7
|
+
import dataSource_default from "./services/dataSource.js";
|
|
8
|
+
import events_default from "./services/events.js";
|
|
6
9
|
import Framework_default from "./layouts/Framework.js";
|
|
7
10
|
import NavMenu_default from "./layouts/NavMenu.js";
|
|
11
|
+
import { ENABLE_PROPS_FORM_VALIDATE, defaultEditorProps } from "./editorProps.js";
|
|
8
12
|
import PropsPanel_default from "./layouts/props-panel/PropsPanel.js";
|
|
9
13
|
import keybinding_config_default from "./utils/keybinding-config.js";
|
|
10
14
|
import Sidebar_default from "./layouts/sidebar/Sidebar.js";
|
|
11
15
|
import Workspace_default from "./layouts/workspace/Workspace.js";
|
|
12
|
-
import codeBlock_default from "./services/codeBlock.js";
|
|
13
16
|
import componentList_default from "./services/componentList.js";
|
|
14
|
-
import dataSource_default from "./services/dataSource.js";
|
|
15
17
|
import dep_default from "./services/dep.js";
|
|
16
|
-
import events_default from "./services/events.js";
|
|
17
18
|
import keybinding_default from "./services/keybinding.js";
|
|
18
19
|
import stageOverlay_default from "./services/stageOverlay.js";
|
|
19
|
-
import { defaultEditorProps } from "./editorProps.js";
|
|
20
20
|
import { initServiceEvents, initServiceState } from "./initService.js";
|
|
21
|
-
import {
|
|
21
|
+
import { M_THEME_KEY } from "@tmagic/design";
|
|
22
|
+
import { computed, createBlock, createVNode, defineComponent, mergeDefaults, openBlock, provide, ref, renderSlot, unref, withCtx } from "vue";
|
|
22
23
|
import { EventEmitter } from "events";
|
|
23
24
|
//#region packages/editor/src/Editor.vue?vue&type=script&setup=true&lang.ts
|
|
24
|
-
var Editor_vue_vue_type_script_setup_true_lang_default =
|
|
25
|
+
var Editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
25
26
|
name: "MEditor",
|
|
26
27
|
__name: "Editor",
|
|
27
|
-
props:
|
|
28
|
+
props: /*@__PURE__*/ mergeDefaults({
|
|
29
|
+
isLargeStageContainer: { type: Boolean },
|
|
30
|
+
theme: {},
|
|
28
31
|
modelValue: {},
|
|
29
32
|
componentGroupList: {},
|
|
30
33
|
datasourceList: {},
|
|
@@ -47,6 +50,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
47
50
|
containerHighlightClassName: {},
|
|
48
51
|
containerHighlightDuration: {},
|
|
49
52
|
containerHighlightType: {},
|
|
53
|
+
containerHighlightAddOnly: { type: Boolean },
|
|
50
54
|
stageRect: {},
|
|
51
55
|
codeOptions: {},
|
|
52
56
|
disabledDragStart: { type: Boolean },
|
|
@@ -54,7 +58,9 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
54
58
|
disabledMultiSelect: { type: Boolean },
|
|
55
59
|
alwaysMultiSelect: { type: Boolean },
|
|
56
60
|
disabledPageFragment: { type: Boolean },
|
|
61
|
+
disabledFlashTip: { type: Boolean },
|
|
57
62
|
disabledStageOverlay: { type: Boolean },
|
|
63
|
+
enablePropsFormValidate: { type: Boolean },
|
|
58
64
|
disabledShowSrc: { type: Boolean },
|
|
59
65
|
disabledDataSource: { type: Boolean },
|
|
60
66
|
disabledCodeBlock: { type: Boolean },
|
|
@@ -70,6 +76,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
70
76
|
beforeDblclick: { type: Function },
|
|
71
77
|
beforeLayerNodeDblclick: { type: Function },
|
|
72
78
|
extendFormState: { type: Function },
|
|
79
|
+
historyListExtraTabs: {},
|
|
73
80
|
pageBarSortOptions: {},
|
|
74
81
|
pageFilterFunction: { type: Function }
|
|
75
82
|
}, defaultEditorProps),
|
|
@@ -114,28 +121,53 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
114
121
|
containerHighlightClassName: props.containerHighlightClassName,
|
|
115
122
|
containerHighlightDuration: props.containerHighlightDuration,
|
|
116
123
|
containerHighlightType: props.containerHighlightType,
|
|
124
|
+
containerHighlightAddOnly: props.containerHighlightAddOnly,
|
|
117
125
|
disabledDragStart: props.disabledDragStart,
|
|
118
126
|
renderType: props.renderType,
|
|
119
127
|
guidesOptions: props.guidesOptions,
|
|
120
128
|
disabledMultiSelect: props.disabledMultiSelect,
|
|
121
129
|
alwaysMultiSelect: props.alwaysMultiSelect,
|
|
130
|
+
disabledFlashTip: props.disabledFlashTip,
|
|
122
131
|
beforeDblclick: props.beforeDblclick
|
|
123
132
|
};
|
|
124
133
|
stageOverlay_default.set("stageOptions", stageOptions);
|
|
134
|
+
const propsPanelRef = ref(null);
|
|
125
135
|
provide("services", services);
|
|
126
136
|
provide("codeOptions", props.codeOptions);
|
|
127
137
|
provide("stageOptions", stageOptions);
|
|
138
|
+
/** 是否启用「属性配置表单校验」联动能力,供 PropsPanel / FormPanel 判断校验失败时是否仍更新节点并记录错误 */
|
|
139
|
+
provide(ENABLE_PROPS_FORM_VALIDATE, props.enablePropsFormValidate ?? false);
|
|
128
140
|
/**
|
|
129
141
|
* 把顶层 `extendFormState` 提供给非 PropsPanel 链路上的组件使用(例如历史差异对话框 HistoryDiffDialog
|
|
130
142
|
* 内部的 CompareForm)。这样所有依赖业务上下文的表单 filterFunction 都能拿到一致的扩展状态,
|
|
131
143
|
* 与 PropsPanel 通过 `:extend-state` 显式传入的方式保持等价。
|
|
132
144
|
*/
|
|
133
145
|
provide("extendFormState", props.extendFormState);
|
|
146
|
+
provide("isLargeStageContainer", computed(() => props.isLargeStageContainer));
|
|
147
|
+
/**
|
|
148
|
+
* 提供 PropsPanel 主属性表单的 formState getter,供历史差异弹窗复用,
|
|
149
|
+
* 让 CompareForm 与 PropsPanel 的 filterFunction 上下文保持一致。
|
|
150
|
+
*/
|
|
151
|
+
provide("getPropsPanelFormState", () => propsPanelRef.value?.configForm?.formState);
|
|
152
|
+
/**
|
|
153
|
+
* 把历史记录面板的自定义扩展 tab 提供给深层的 HistoryListPanel(它挂在 NavMenu 中,
|
|
154
|
+
* 以 markRaw component 形式渲染,无法直接通过 props 透传)。业务方可借此在历史记录
|
|
155
|
+
* 面板内追加自定义模块的历史 tab。
|
|
156
|
+
*/
|
|
157
|
+
provide("historyListExtraTabs", props.historyListExtraTabs);
|
|
134
158
|
provide("eventBus", new EventEmitter());
|
|
159
|
+
/**
|
|
160
|
+
* 把当前主题以响应式 ref 形式 provide 给后代,供包含 `Teleport` 的组件
|
|
161
|
+
* (如 `TMagicPopover` / `FloatingBox` / `ContentMenu`)在传送目标上挂 `m-theme--<theme>`
|
|
162
|
+
* 类,让主题级 CSS 变量在 portal 节点上也能命中。详见 `@tmagic/design/theme.ts`。
|
|
163
|
+
*/
|
|
164
|
+
provide(M_THEME_KEY, computed(() => props.theme ?? ""));
|
|
135
165
|
const propsPanelMountedHandler = (e) => {
|
|
166
|
+
propsPanelRef.value = e;
|
|
136
167
|
emit("props-panel-mounted", e);
|
|
137
168
|
};
|
|
138
169
|
const propsPanelUnmountedHandler = () => {
|
|
170
|
+
propsPanelRef.value = null;
|
|
139
171
|
emit("props-panel-unmounted");
|
|
140
172
|
};
|
|
141
173
|
const propsPanelSubmitErrorHandler = (e) => {
|
|
@@ -153,7 +185,8 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
153
185
|
"disabled-page-fragment": __props.disabledPageFragment,
|
|
154
186
|
"page-bar-sort-options": __props.pageBarSortOptions,
|
|
155
187
|
"page-filter-function": __props.pageFilterFunction,
|
|
156
|
-
"hide-sidebar": __props.hideSidebar
|
|
188
|
+
"hide-sidebar": __props.hideSidebar,
|
|
189
|
+
theme: __props.theme
|
|
157
190
|
}, {
|
|
158
191
|
header: withCtx(() => [renderSlot(_ctx.$slots, "header")]),
|
|
159
192
|
nav: withCtx(() => [renderSlot(_ctx.$slots, "nav", { editorService: unref(editor_default) }, () => [createVNode(NavMenu_default, { data: __props.menu }, null, 8, ["data"])])]),
|
|
@@ -234,7 +267,8 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
|
|
|
234
267
|
"disabled-page-fragment",
|
|
235
268
|
"page-bar-sort-options",
|
|
236
269
|
"page-filter-function",
|
|
237
|
-
"hide-sidebar"
|
|
270
|
+
"hide-sidebar",
|
|
271
|
+
"theme"
|
|
238
272
|
]);
|
|
239
273
|
};
|
|
240
274
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { getEditorConfig } from "../utils/config.js";
|
|
2
|
+
import { getCodeBlockFormConfig } from "../utils/code-block.js";
|
|
2
3
|
import { useServices } from "../hooks/use-services.js";
|
|
3
4
|
import { useWindowRect } from "../hooks/use-window-rect.js";
|
|
4
5
|
import { useEditorContentHeight } from "../hooks/use-editor-content-height.js";
|
|
5
6
|
import { useNextFloatBoxPosition } from "../hooks/use-next-float-box-position.js";
|
|
6
|
-
import { getCodeBlockFormConfig } from "../utils/code-block.js";
|
|
7
7
|
import CodeEditor_default from "../layouts/CodeEditor.js";
|
|
8
8
|
import FloatingBox_default from "./FloatingBox.js";
|
|
9
9
|
import { MFormBox } from "@tmagic/form";
|
|
@@ -17,10 +17,10 @@ var _hoisted_1 = { style: {
|
|
|
17
17
|
var _hoisted_2 = { style: { "flex": "1" } };
|
|
18
18
|
var _hoisted_3 = { style: { "flex": "1" } };
|
|
19
19
|
var _hoisted_4 = { class: "dialog-footer" };
|
|
20
|
-
var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default =
|
|
20
|
+
var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
21
21
|
name: "MEditorCodeBlockEditor",
|
|
22
22
|
__name: "CodeBlockEditor",
|
|
23
|
-
props:
|
|
23
|
+
props: /*@__PURE__*/ mergeModels({
|
|
24
24
|
content: {},
|
|
25
25
|
disabled: { type: Boolean },
|
|
26
26
|
isDataSource: { type: Boolean },
|
|
@@ -34,7 +34,7 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
34
34
|
},
|
|
35
35
|
"visibleModifiers": {}
|
|
36
36
|
}),
|
|
37
|
-
emits:
|
|
37
|
+
emits: /*@__PURE__*/ mergeModels([
|
|
38
38
|
"submit",
|
|
39
39
|
"close",
|
|
40
40
|
"open"
|
|
@@ -120,6 +120,7 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
120
120
|
changedValue.value = void 0;
|
|
121
121
|
};
|
|
122
122
|
const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, inject("parentFloating", ref(null)));
|
|
123
|
+
const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
|
|
123
124
|
watch(boxVisible, (visible) => {
|
|
124
125
|
nextTick(() => {
|
|
125
126
|
if (!visible) emit("close");
|
|
@@ -145,7 +146,9 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
145
146
|
"onUpdate:width": _cache[2] || (_cache[2] = ($event) => width.value = $event),
|
|
146
147
|
height: unref(codeBlockEditorHeight),
|
|
147
148
|
"onUpdate:height": _cache[3] || (_cache[3] = ($event) => isRef(codeBlockEditorHeight) ? codeBlockEditorHeight.value = $event : null),
|
|
149
|
+
"body-style": { padding: "0 16px" },
|
|
148
150
|
title: __props.content.name ? `${__props.disabled ? "查看" : "编辑"}${__props.content.name}` : "新增代码",
|
|
151
|
+
"framework-width": frameworkWidth.value,
|
|
149
152
|
position: unref(boxPosition),
|
|
150
153
|
"before-close": beforeClose
|
|
151
154
|
}, {
|
|
@@ -187,6 +190,7 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
|
|
|
187
190
|
"width",
|
|
188
191
|
"height",
|
|
189
192
|
"title",
|
|
193
|
+
"framework-width",
|
|
190
194
|
"position"
|
|
191
195
|
]),
|
|
192
196
|
(openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(TMagicDialog), {
|
|
@@ -2,7 +2,7 @@ import { error } from "../utils/logger.js";
|
|
|
2
2
|
import { MForm } from "@tmagic/form";
|
|
3
3
|
import { computed, createBlock, defineComponent, openBlock, unref, useTemplateRef } from "vue";
|
|
4
4
|
//#region packages/editor/src/components/CodeParams.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
-
var CodeParams_vue_vue_type_script_setup_true_lang_default =
|
|
5
|
+
var CodeParams_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
6
6
|
name: "MEditorCodeParams",
|
|
7
7
|
__name: "CodeParams",
|
|
8
8
|
props: {
|
|
@@ -48,7 +48,8 @@ var CodeParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
|
|
|
48
48
|
*/
|
|
49
49
|
const onParamsChangeHandler = async (v, eventData) => {
|
|
50
50
|
try {
|
|
51
|
-
|
|
51
|
+
const value = await formRef.value?.submitForm(true);
|
|
52
|
+
emit("change", value, eventData);
|
|
52
53
|
} catch (e) {
|
|
53
54
|
error(e);
|
|
54
55
|
}
|
|
@@ -1,67 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { getCodeBlockFormConfig } from "../utils/code-block.js";
|
|
1
|
+
import { useCompareForm } from "../hooks/use-compare-form.js";
|
|
3
2
|
import { MForm } from "@tmagic/form";
|
|
4
3
|
import { HookType } from "@tmagic/core";
|
|
5
|
-
import { computed, createBlock, createCommentVNode, createElementBlock, defineComponent,
|
|
4
|
+
import { computed, createBlock, createCommentVNode, createElementBlock, defineComponent, normalizeStyle, openBlock, unref } from "vue";
|
|
6
5
|
import { isEqual } from "lodash-es";
|
|
7
6
|
//#region packages/editor/src/components/CompareForm.vue?vue&type=script&setup=true&lang.ts
|
|
8
|
-
var CompareForm_vue_vue_type_script_setup_true_lang_default =
|
|
7
|
+
var CompareForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
9
8
|
name: "MEditorCompareForm",
|
|
10
9
|
__name: "CompareForm",
|
|
11
10
|
props: {
|
|
12
11
|
value: {},
|
|
13
|
-
lastValue: {},
|
|
14
12
|
type: {},
|
|
15
13
|
category: { default: "node" },
|
|
16
14
|
dataSourceType: {},
|
|
17
15
|
labelWidth: { default: "120px" },
|
|
18
16
|
height: {},
|
|
19
|
-
extendState: {}
|
|
17
|
+
extendState: {},
|
|
18
|
+
baseFormState: {},
|
|
19
|
+
size: {},
|
|
20
|
+
loadConfig: {},
|
|
21
|
+
services: {},
|
|
22
|
+
lastValue: {},
|
|
23
|
+
selfDiffFieldTypes: {}
|
|
20
24
|
},
|
|
21
25
|
setup(__props, { expose: __expose }) {
|
|
22
|
-
/**
|
|
23
|
-
* 对比类型:
|
|
24
|
-
* - node: 节点组件,按 `type` 从 propsService 获取属性表单配置
|
|
25
|
-
* - data-source: 数据源,按 `type`(base/http/...) 从 dataSourceService 获取数据源表单配置
|
|
26
|
-
* - code-block: 数据源代码块,使用内置的代码块表单配置
|
|
27
|
-
*/
|
|
28
26
|
const props = __props;
|
|
29
|
-
const {
|
|
30
|
-
const services = useServices();
|
|
31
|
-
const config = ref([]);
|
|
32
|
-
/** vs-code 编辑器的 monaco 配置项,沿用 Editor 顶层 provide('codeOptions', ...) 的注入。 */
|
|
33
|
-
const codeOptions = inject("codeOptions", {});
|
|
34
|
-
/** 将代码块的 content 字段统一成字符串,便于在表单/对比中展示 */
|
|
35
|
-
const normalizeCodeBlockValue = (v) => {
|
|
36
|
-
if (!v) return {};
|
|
37
|
-
const next = { ...v };
|
|
38
|
-
if (next.content && typeof next.content !== "string") try {
|
|
39
|
-
next.content = next.content.toString();
|
|
40
|
-
} catch {
|
|
41
|
-
next.content = "";
|
|
42
|
-
}
|
|
43
|
-
return next;
|
|
44
|
-
};
|
|
45
|
-
const currentValues = computed(() => {
|
|
46
|
-
if (props.category === "code-block") return normalizeCodeBlockValue(props.value);
|
|
47
|
-
return props.value || {};
|
|
48
|
-
});
|
|
27
|
+
const { config, currentValues, wrapperStyle, mergedExtendState, loadConfig, formRef, normalizeCodeBlockValue } = useCompareForm(props);
|
|
49
28
|
const lastValuesProcessed = computed(() => {
|
|
50
29
|
if (props.category === "code-block") return normalizeCodeBlockValue(props.lastValue);
|
|
51
30
|
return props.lastValue || {};
|
|
52
31
|
});
|
|
53
32
|
/**
|
|
54
|
-
* 外层包裹层的样式:当传入 `height` 时启用固定高度 + 内部滚动,
|
|
55
|
-
* 这样滚动条会出现在 CompareForm 内部,避免父容器(如 Dialog)自身也产生滚动。
|
|
56
|
-
*/
|
|
57
|
-
const wrapperStyle = computed(() => {
|
|
58
|
-
if (!props.height) return void 0;
|
|
59
|
-
return {
|
|
60
|
-
height: props.height,
|
|
61
|
-
overflow: "auto"
|
|
62
|
-
};
|
|
63
|
-
});
|
|
64
|
-
/**
|
|
65
33
|
* `code-select` 字段在历史数据中存在两种"语义为空"的形态:
|
|
66
34
|
* - 字符串 `''`(旧数据 / 用户从未配置过钩子);
|
|
67
35
|
* - `{ hookType: HookType.CODE, hookData: [] }`(CodeSelect.vue 在挂载时
|
|
@@ -84,54 +52,6 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
84
52
|
}
|
|
85
53
|
return !isEqual(curValue, lastValue);
|
|
86
54
|
};
|
|
87
|
-
const loadConfig = async () => {
|
|
88
|
-
switch (props.category) {
|
|
89
|
-
case "node":
|
|
90
|
-
if (!props.type) {
|
|
91
|
-
config.value = [];
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
config.value = await propsService.getPropsConfig(props.type);
|
|
95
|
-
break;
|
|
96
|
-
case "data-source":
|
|
97
|
-
config.value = dataSourceService.getFormConfig(props.type || "base");
|
|
98
|
-
break;
|
|
99
|
-
case "code-block":
|
|
100
|
-
config.value = getCodeBlockFormConfig({
|
|
101
|
-
paramColConfig: codeBlockService.getParamsColConfig(),
|
|
102
|
-
isDataSource: () => Boolean(props.dataSourceType),
|
|
103
|
-
dataSourceType: () => props.dataSourceType,
|
|
104
|
-
codeOptions,
|
|
105
|
-
editable: false
|
|
106
|
-
});
|
|
107
|
-
break;
|
|
108
|
-
default: config.value = [];
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
watch([
|
|
112
|
-
() => props.category,
|
|
113
|
-
() => props.type,
|
|
114
|
-
() => props.dataSourceType
|
|
115
|
-
], () => {
|
|
116
|
-
loadConfig();
|
|
117
|
-
}, { immediate: true });
|
|
118
|
-
const formRef = useTemplateRef("form");
|
|
119
|
-
/**
|
|
120
|
-
* 把 services / stage 注入 MForm 的 formState,避免 propsService 注入的表单配置中
|
|
121
|
-
* 形如 `display: ({ services }) => services.uiService.get(...)` 的 filterFunction
|
|
122
|
-
* 在执行时拿不到 `formState.services` 而报错。
|
|
123
|
-
*
|
|
124
|
-
* 与 props-panel/FormPanel.vue 中的注入方式保持一致:
|
|
125
|
-
* - services:整个 useServices() 返回的服务集合;
|
|
126
|
-
* - stage:当前 editorService.get('stage') 的最新值。
|
|
127
|
-
*/
|
|
128
|
-
const stage = computed(() => editorService.get("stage"));
|
|
129
|
-
watchEffect(() => {
|
|
130
|
-
if (formRef.value) {
|
|
131
|
-
formRef.value.formState.stage = stage.value;
|
|
132
|
-
formRef.value.formState.services = services;
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
55
|
__expose({
|
|
136
56
|
form: formRef,
|
|
137
57
|
config,
|
|
@@ -140,25 +60,29 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
140
60
|
return (_ctx, _cache) => {
|
|
141
61
|
return openBlock(), createElementBlock("div", {
|
|
142
62
|
class: "m-editor-compare-form-wrapper",
|
|
143
|
-
style: normalizeStyle(wrapperStyle
|
|
144
|
-
}, [config.
|
|
63
|
+
style: normalizeStyle(unref(wrapperStyle))
|
|
64
|
+
}, [unref(config).length ? (openBlock(), createBlock(unref(MForm), {
|
|
145
65
|
key: 0,
|
|
146
66
|
ref: "form",
|
|
147
67
|
class: "m-editor-compare-form",
|
|
148
|
-
config: config
|
|
149
|
-
"init-values": currentValues
|
|
68
|
+
config: unref(config),
|
|
69
|
+
"init-values": unref(currentValues),
|
|
150
70
|
"last-values": lastValuesProcessed.value,
|
|
151
71
|
"is-compare": true,
|
|
152
72
|
disabled: true,
|
|
153
73
|
"label-width": __props.labelWidth,
|
|
154
|
-
"extend-state":
|
|
155
|
-
"show-diff": showDiff
|
|
74
|
+
"extend-state": unref(mergedExtendState),
|
|
75
|
+
"show-diff": showDiff,
|
|
76
|
+
"self-diff-field-types": __props.selfDiffFieldTypes,
|
|
77
|
+
size: __props.size
|
|
156
78
|
}, null, 8, [
|
|
157
79
|
"config",
|
|
158
80
|
"init-values",
|
|
159
81
|
"last-values",
|
|
160
82
|
"label-width",
|
|
161
|
-
"extend-state"
|
|
83
|
+
"extend-state",
|
|
84
|
+
"self-diff-field-types",
|
|
85
|
+
"size"
|
|
162
86
|
])) : createCommentVNode("v-if", true)], 4);
|
|
163
87
|
};
|
|
164
88
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import ToolButton_default from "./ToolButton.js";
|
|
2
|
-
import { useZIndex } from "@tmagic/design";
|
|
3
|
-
import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, resolveComponent, useTemplateRef, vShow, withCtx, withDirectives, withModifiers } from "vue";
|
|
2
|
+
import { useThemeClass, useZIndex } from "@tmagic/design";
|
|
3
|
+
import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, resolveComponent, unref, useTemplateRef, vShow, withCtx, withDirectives, withModifiers } from "vue";
|
|
4
4
|
//#region packages/editor/src/components/ContentMenu.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
-
var ContentMenu_vue_vue_type_script_setup_true_lang_default =
|
|
5
|
+
var ContentMenu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
6
6
|
name: "MEditorContentMenu",
|
|
7
7
|
__name: "ContentMenu",
|
|
8
8
|
props: {
|
|
@@ -29,6 +29,13 @@ var ContentMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
29
29
|
const buttonRefs = useTemplateRef("buttons");
|
|
30
30
|
const subMenuRef = useTemplateRef("subMenu");
|
|
31
31
|
const visible = ref(false);
|
|
32
|
+
/**
|
|
33
|
+
* 主题修饰类(来自最近的 `<MEditor>` / `<MForm>` 祖先 provide)。
|
|
34
|
+
* - 顶层 `ContentMenu` 渲染在编辑器子树中,加上去是冗余但无害;
|
|
35
|
+
* - 子菜单(递归 `<content-menu :is-sub-menu="true">` 被 `<teleport to="body">` 送到 body)
|
|
36
|
+
* 不在编辑器子树中,必须显式挂上主题类,主题级 CSS 变量才能命中。
|
|
37
|
+
*/
|
|
38
|
+
const themeClass = useThemeClass();
|
|
32
39
|
const subMenuData = ref([]);
|
|
33
40
|
const zIndex = useZIndex();
|
|
34
41
|
const curZIndex = ref(0);
|
|
@@ -59,15 +66,29 @@ var ContentMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
59
66
|
if (contains(target)) return;
|
|
60
67
|
hide();
|
|
61
68
|
};
|
|
69
|
+
const fixPosition = () => {
|
|
70
|
+
const menu = menuEl.value;
|
|
71
|
+
if (!menu || !visible.value) return;
|
|
72
|
+
const menuHeight = menu.clientHeight;
|
|
73
|
+
const menuWidth = menu.clientWidth;
|
|
74
|
+
let { top, left } = menuPosition.value;
|
|
75
|
+
if (top + menuHeight > document.body.clientHeight) top = Math.max(0, document.body.clientHeight - menuHeight);
|
|
76
|
+
if (left + menuWidth > document.body.clientWidth) left = Math.max(0, document.body.clientWidth - menuWidth);
|
|
77
|
+
if (top !== menuPosition.value.top || left !== menuPosition.value.left) menuPosition.value = {
|
|
78
|
+
top,
|
|
79
|
+
left
|
|
80
|
+
};
|
|
81
|
+
};
|
|
62
82
|
const setPosition = (e) => {
|
|
63
|
-
const menuHeight = menuEl.value?.clientHeight || 0;
|
|
64
|
-
let top = e.clientY;
|
|
65
|
-
if (menuHeight + e.clientY > document.body.clientHeight) top = document.body.clientHeight - menuHeight;
|
|
66
83
|
menuPosition.value = {
|
|
67
|
-
top,
|
|
84
|
+
top: e.clientY,
|
|
68
85
|
left: e.clientX
|
|
69
86
|
};
|
|
87
|
+
fixPosition();
|
|
70
88
|
};
|
|
89
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
90
|
+
fixPosition();
|
|
91
|
+
});
|
|
71
92
|
const show = (e) => {
|
|
72
93
|
visible.value = true;
|
|
73
94
|
nextTick(() => {
|
|
@@ -96,10 +117,12 @@ var ContentMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
96
117
|
emit("mouseenter");
|
|
97
118
|
};
|
|
98
119
|
onMounted(() => {
|
|
120
|
+
if (menuEl.value) resizeObserver.observe(menuEl.value);
|
|
99
121
|
if (props.isSubMenu) return;
|
|
100
122
|
globalThis.addEventListener("mousedown", outsideClickHideHandler, true);
|
|
101
123
|
});
|
|
102
124
|
onBeforeUnmount(() => {
|
|
125
|
+
resizeObserver.disconnect();
|
|
103
126
|
if (props.isSubMenu) return;
|
|
104
127
|
globalThis.removeEventListener("mousedown", outsideClickHideHandler, true);
|
|
105
128
|
});
|
|
@@ -118,8 +141,8 @@ var ContentMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
118
141
|
persisted: ""
|
|
119
142
|
}, {
|
|
120
143
|
default: withCtx(() => [withDirectives(createElementVNode("div", {
|
|
121
|
-
class: "magic-editor-content-menu",
|
|
122
144
|
ref: "menu",
|
|
145
|
+
class: normalizeClass(["magic-editor-content-menu", unref(themeClass)]),
|
|
123
146
|
style: normalizeStyle(menuStyle.value),
|
|
124
147
|
onMouseenter: _cache[0] || (_cache[0] = ($event) => mouseenterHandler()),
|
|
125
148
|
onContextmenu: _cache[1] || (_cache[1] = withModifiers(() => {}, ["prevent"]))
|
|
@@ -150,7 +173,7 @@ var ContentMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
150
173
|
"is-sub-menu": true,
|
|
151
174
|
onHide: hide
|
|
152
175
|
}, null, 8, ["active", "menu-data"])) : createCommentVNode("v-if", true)]))
|
|
153
|
-
],
|
|
176
|
+
], 38), [[vShow, visible.value]])]),
|
|
154
177
|
_: 3
|
|
155
178
|
});
|
|
156
179
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { useServices } from "../hooks/use-services.js";
|
|
2
1
|
import Icon_default from "./Icon.js";
|
|
3
|
-
import { TMagicButton, useZIndex } from "@tmagic/design";
|
|
4
|
-
import { Teleport, computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeStyle, onBeforeUnmount, openBlock, provide, ref, renderSlot, toDisplayString, unref, useModel, useTemplateRef, watch, withCtx } from "vue";
|
|
2
|
+
import { TMagicButton, useThemeClass, useZIndex } from "@tmagic/design";
|
|
3
|
+
import { Teleport, computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeStyle, onBeforeUnmount, openBlock, provide, ref, renderSlot, toDisplayString, unref, useModel, useTemplateRef, watch, withCtx } from "vue";
|
|
5
4
|
import { Close } from "@element-plus/icons-vue";
|
|
6
5
|
import VanillaMoveable from "moveable";
|
|
7
6
|
//#region packages/editor/src/components/FloatingBox.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -9,14 +8,17 @@ var _hoisted_1 = {
|
|
|
9
8
|
ref: "title",
|
|
10
9
|
class: "m-editor-float-box-title"
|
|
11
10
|
};
|
|
12
|
-
var FloatingBox_vue_vue_type_script_setup_true_lang_default =
|
|
11
|
+
var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
13
12
|
__name: "FloatingBox",
|
|
14
|
-
props:
|
|
13
|
+
props: /*@__PURE__*/ mergeModels({
|
|
15
14
|
position: { default: () => ({
|
|
16
15
|
left: 0,
|
|
17
16
|
top: 0
|
|
18
17
|
}) },
|
|
19
18
|
title: { default: "" },
|
|
19
|
+
bodyStyle: {},
|
|
20
|
+
initialStyle: { default: () => ({}) },
|
|
21
|
+
frameworkWidth: { default: 0 },
|
|
20
22
|
beforeClose: {}
|
|
21
23
|
}, {
|
|
22
24
|
"width": { default: 0 },
|
|
@@ -41,6 +43,11 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
41
43
|
const props = __props;
|
|
42
44
|
const targetEl = useTemplateRef("target");
|
|
43
45
|
const titleEl = useTemplateRef("title");
|
|
46
|
+
/**
|
|
47
|
+
* 主题修饰类(来自最近的 `<MEditor>` / `<MForm>` 祖先 provide)。
|
|
48
|
+
* 挂在 `Teleport` 出去的浮动面板根节点上,让主题级 CSS 变量在 portal 节点上也能命中。
|
|
49
|
+
*/
|
|
50
|
+
const themeClass = useThemeClass();
|
|
44
51
|
const zIndex = useZIndex();
|
|
45
52
|
const curZIndex = ref(0);
|
|
46
53
|
const titleHeight = ref(0);
|
|
@@ -49,19 +56,51 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
49
56
|
if (targetEl.value) return targetEl.value.clientHeight - titleHeight.value;
|
|
50
57
|
return "auto";
|
|
51
58
|
});
|
|
52
|
-
const { uiService } = useServices();
|
|
53
|
-
const frameworkWidth = computed(() => uiService.get("frameworkRect").width || 0);
|
|
54
59
|
const style = computed(() => {
|
|
55
60
|
let { left } = props.position;
|
|
56
|
-
|
|
61
|
+
const frameworkWidth = props.frameworkWidth || globalThis.window?.innerWidth || 0;
|
|
62
|
+
if (width.value && frameworkWidth) left = left + width.value > frameworkWidth ? frameworkWidth - width.value : left;
|
|
57
63
|
return {
|
|
58
64
|
left: `${left}px`,
|
|
59
65
|
top: `${props.position.top}px`,
|
|
60
66
|
width: width.value ? `${width.value}px` : "auto",
|
|
61
|
-
height: height.value ? `${height.value}px` : "auto"
|
|
67
|
+
height: height.value ? `${height.value}px` : "auto",
|
|
68
|
+
...props.initialStyle
|
|
62
69
|
};
|
|
63
70
|
});
|
|
64
71
|
let moveable = null;
|
|
72
|
+
let dragMask = null;
|
|
73
|
+
let dragMaskVisible = false;
|
|
74
|
+
const bindDragMaskSafety = () => {
|
|
75
|
+
globalThis.window?.addEventListener("pointerup", hideDragMask, true);
|
|
76
|
+
globalThis.window?.addEventListener("blur", hideDragMask);
|
|
77
|
+
globalThis.document?.addEventListener("visibilitychange", hideDragMask);
|
|
78
|
+
};
|
|
79
|
+
const unbindDragMaskSafety = () => {
|
|
80
|
+
globalThis.window?.removeEventListener("pointerup", hideDragMask, true);
|
|
81
|
+
globalThis.window?.removeEventListener("blur", hideDragMask);
|
|
82
|
+
globalThis.document?.removeEventListener("visibilitychange", hideDragMask);
|
|
83
|
+
};
|
|
84
|
+
const showDragMask = () => {
|
|
85
|
+
if (dragMaskVisible) return;
|
|
86
|
+
if (!dragMask) {
|
|
87
|
+
dragMask = globalThis.document.createElement("div");
|
|
88
|
+
dragMask.className = "m-editor-float-box-drag-mask";
|
|
89
|
+
}
|
|
90
|
+
globalThis.document.body.appendChild(dragMask);
|
|
91
|
+
dragMaskVisible = true;
|
|
92
|
+
bindDragMaskSafety();
|
|
93
|
+
const setMaskZIndex = () => {
|
|
94
|
+
if (dragMask) dragMask.style.zIndex = `${curZIndex.value + 1}`;
|
|
95
|
+
};
|
|
96
|
+
setMaskZIndex();
|
|
97
|
+
nextTick(setMaskZIndex);
|
|
98
|
+
};
|
|
99
|
+
const hideDragMask = () => {
|
|
100
|
+
unbindDragMaskSafety();
|
|
101
|
+
dragMask?.parentNode?.removeChild(dragMask);
|
|
102
|
+
dragMaskVisible = false;
|
|
103
|
+
};
|
|
65
104
|
const initMoveable = () => {
|
|
66
105
|
moveable = new VanillaMoveable(globalThis.document.body, {
|
|
67
106
|
className: "m-editor-floating-box-moveable",
|
|
@@ -84,6 +123,10 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
84
123
|
position: "css"
|
|
85
124
|
}
|
|
86
125
|
});
|
|
126
|
+
moveable.on("drag", showDragMask);
|
|
127
|
+
moveable.on("resize", showDragMask);
|
|
128
|
+
moveable.on("dragEnd", hideDragMask);
|
|
129
|
+
moveable.on("resizeEnd", hideDragMask);
|
|
87
130
|
moveable.on("drag", (e) => {
|
|
88
131
|
e.target.style.transform = e.transform;
|
|
89
132
|
});
|
|
@@ -96,6 +139,7 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
96
139
|
});
|
|
97
140
|
};
|
|
98
141
|
const destroyMoveable = () => {
|
|
142
|
+
hideDragMask();
|
|
99
143
|
moveable?.destroy();
|
|
100
144
|
moveable = null;
|
|
101
145
|
};
|
|
@@ -109,7 +153,10 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
109
153
|
height.value = targetRect.height;
|
|
110
154
|
initMoveable();
|
|
111
155
|
}
|
|
112
|
-
if (titleEl.value)
|
|
156
|
+
if (titleEl.value) {
|
|
157
|
+
const titleRect = titleEl.value.getBoundingClientRect();
|
|
158
|
+
titleHeight.value = titleRect.height;
|
|
159
|
+
}
|
|
113
160
|
} else destroyMoveable();
|
|
114
161
|
}, { immediate: true });
|
|
115
162
|
onBeforeUnmount(() => {
|
|
@@ -135,15 +182,16 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
135
182
|
return visible.value ? (openBlock(), createBlock(Teleport, {
|
|
136
183
|
key: 0,
|
|
137
184
|
to: "body"
|
|
138
|
-
}, [createElementVNode("div", {
|
|
185
|
+
}, [createElementVNode("div", mergeProps({
|
|
139
186
|
ref: "target",
|
|
140
|
-
class: "m-editor-float-box",
|
|
141
|
-
|
|
187
|
+
class: ["m-editor-float-box", unref(themeClass)]
|
|
188
|
+
}, _ctx.$attrs, {
|
|
189
|
+
style: {
|
|
142
190
|
...style.value,
|
|
143
191
|
zIndex: curZIndex.value
|
|
144
|
-
}
|
|
192
|
+
},
|
|
145
193
|
onMousedown: nextZIndex
|
|
146
|
-
}, [createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", null, toDisplayString(__props.title), 1)]), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
|
|
194
|
+
}), [createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", null, toDisplayString(__props.title), 1)]), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
|
|
147
195
|
link: "",
|
|
148
196
|
size: "small",
|
|
149
197
|
onClick: closeHandler
|
|
@@ -152,8 +200,11 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
|
|
|
152
200
|
_: 1
|
|
153
201
|
})])], 512), createElementVNode("div", {
|
|
154
202
|
class: "m-editor-float-box-body",
|
|
155
|
-
style: normalizeStyle({
|
|
156
|
-
|
|
203
|
+
style: normalizeStyle({
|
|
204
|
+
height: `${bodyHeight.value}px`,
|
|
205
|
+
...__props.bodyStyle
|
|
206
|
+
})
|
|
207
|
+
}, [renderSlot(_ctx.$slots, "body")], 4)], 16)])) : createCommentVNode("v-if", true);
|
|
157
208
|
};
|
|
158
209
|
}
|
|
159
210
|
});
|
|
@@ -3,7 +3,7 @@ import { createBlock, createElementBlock, createElementVNode, createVNode, defin
|
|
|
3
3
|
import { Edit } from "@element-plus/icons-vue";
|
|
4
4
|
//#region packages/editor/src/components/Icon.vue?vue&type=script&setup=true&lang.ts
|
|
5
5
|
var _hoisted_1 = ["src"];
|
|
6
|
-
var Icon_vue_vue_type_script_setup_true_lang_default =
|
|
6
|
+
var Icon_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
7
7
|
name: "MEditorIcon",
|
|
8
8
|
__name: "Icon",
|
|
9
9
|
props: { icon: {} },
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useGetSo } from "../hooks/use-getso.js";
|
|
2
2
|
import { createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref, useTemplateRef } from "vue";
|
|
3
3
|
//#region packages/editor/src/components/Resizer.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
-
var Resizer_vue_vue_type_script_setup_true_lang_default =
|
|
4
|
+
var Resizer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
|
|
5
5
|
name: "MEditorResizer",
|
|
6
6
|
__name: "Resizer",
|
|
7
7
|
emits: ["change"],
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import ScrollBar_vue_vue_type_script_setup_true_lang_default from "./ScrollBar.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
-
/* empty css */
|
|
3
2
|
//#region packages/editor/src/components/ScrollBar.vue
|
|
4
3
|
var ScrollBar_default = ScrollBar_vue_vue_type_script_setup_true_lang_default;
|
|
5
4
|
//#endregion
|