@tmagic/editor 1.8.0-beta.11 → 1.8.0-beta.12

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.
Files changed (111) hide show
  1. package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +7 -4
  2. package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +4 -0
  3. package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +2 -1
  4. package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +5 -2
  5. package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +60 -14
  6. package/dist/es/components/ScrollBar.js +0 -1
  7. package/dist/es/editorProps.js +6 -1
  8. package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +15 -3
  9. package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +2 -17
  10. package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +2 -1
  11. package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +7 -0
  12. package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +5 -17
  13. package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +4 -0
  14. package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +29 -3
  15. package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +50 -88
  16. package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +2 -5
  17. package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +48 -23
  18. package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +6 -3
  19. package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +28 -22
  20. package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +28 -22
  21. package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +28 -22
  22. package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +6 -3
  23. package/dist/es/fields/UISelect.js +0 -1
  24. package/dist/es/index.js +9 -6
  25. package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +21 -6
  26. package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +9 -6
  27. package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +4 -1
  28. package/dist/es/layouts/history-list/composables.js +1 -1
  29. package/dist/es/layouts/history-list/useHistoryRevert.js +7 -3
  30. package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +44 -5
  31. package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +15 -8
  32. package/dist/es/layouts/props-panel/use-style-panel.js +3 -2
  33. package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +15 -31
  34. package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +2 -2
  35. package/dist/es/layouts/sidebar/code-block/useContentMenu.js +18 -3
  36. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +4 -0
  37. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +2 -2
  38. package/dist/es/layouts/sidebar/data-source/useContentMenu.js +18 -3
  39. package/dist/es/layouts/sidebar/layer/LayerNodeContent.js +5 -0
  40. package/dist/es/layouts/sidebar/layer/LayerNodeContent.vue_vue_type_script_setup_true_lang.js +46 -0
  41. package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +2 -1
  42. package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +8 -2
  43. package/dist/es/plugin.js +3 -1
  44. package/dist/es/services/editor.js +104 -5
  45. package/dist/es/services/props.js +2 -1
  46. package/dist/es/services/storage.js +1 -1
  47. package/dist/es/services/ui.js +3 -0
  48. package/dist/es/style.css +104 -55
  49. package/dist/es/utils/data-source/index.js +30 -11
  50. package/dist/es/utils/event.js +123 -0
  51. package/dist/es/utils/monaco-editor.js +22 -6
  52. package/dist/es/utils/props.js +94 -8
  53. package/dist/es/utils/type-match-rules.js +360 -0
  54. package/dist/style.css +104 -55
  55. package/dist/tmagic-editor.umd.cjs +16895 -15757
  56. package/package.json +8 -8
  57. package/src/Editor.vue +3 -1
  58. package/src/components/CodeBlockEditor.vue +3 -0
  59. package/src/components/CompareForm.vue +7 -0
  60. package/src/components/FloatingBox.vue +77 -8
  61. package/src/components/ScrollBar.vue +0 -67
  62. package/src/editorProps.ts +13 -0
  63. package/src/fields/CodeSelect.vue +4 -1
  64. package/src/fields/CondOpSelect.vue +2 -24
  65. package/src/fields/DataSourceFields.vue +5 -0
  66. package/src/fields/DataSourceInput.vue +7 -25
  67. package/src/fields/DataSourceMocks.vue +3 -0
  68. package/src/fields/DisplayConds.vue +14 -0
  69. package/src/fields/EventSelect.vue +84 -129
  70. package/src/fields/StyleSetter/Index.vue +2 -8
  71. package/src/fields/StyleSetter/pro/Background.vue +94 -55
  72. package/src/fields/StyleSetter/pro/Border.vue +9 -11
  73. package/src/fields/StyleSetter/pro/Font.vue +66 -64
  74. package/src/fields/StyleSetter/pro/Layout.vue +140 -138
  75. package/src/fields/StyleSetter/pro/Position.vue +69 -67
  76. package/src/fields/StyleSetter/pro/Transform.vue +23 -25
  77. package/src/fields/UISelect.vue +0 -12
  78. package/src/index.ts +1 -0
  79. package/src/layouts/CodeEditor.vue +32 -6
  80. package/src/layouts/Framework.vue +7 -6
  81. package/src/layouts/history-list/HistoryDiffDialog.vue +11 -1
  82. package/src/layouts/history-list/useHistoryRevert.ts +4 -0
  83. package/src/layouts/props-panel/FormPanel.vue +66 -5
  84. package/src/layouts/props-panel/PropsPanel.vue +20 -6
  85. package/src/layouts/props-panel/use-style-panel.ts +4 -3
  86. package/src/layouts/sidebar/Sidebar.vue +2 -0
  87. package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +4 -1
  88. package/src/layouts/sidebar/code-block/useContentMenu.ts +13 -1
  89. package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +3 -0
  90. package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +2 -2
  91. package/src/layouts/sidebar/data-source/useContentMenu.ts +13 -1
  92. package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
  93. package/src/layouts/sidebar/layer/LayerPanel.vue +4 -1
  94. package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
  95. package/src/plugin.ts +3 -1
  96. package/src/services/editor.ts +168 -3
  97. package/src/services/ui.ts +6 -0
  98. package/src/theme/event.scss +8 -0
  99. package/src/theme/floating-box.scss +9 -1
  100. package/src/theme/layer-node-content.scss +14 -0
  101. package/src/theme/scroll-bar.scss +64 -0
  102. package/src/theme/theme.scss +3 -0
  103. package/src/theme/ui-select.scss +9 -0
  104. package/src/type.ts +53 -2
  105. package/src/utils/data-source/index.ts +30 -12
  106. package/src/utils/event.ts +224 -0
  107. package/src/utils/index.ts +2 -0
  108. package/src/utils/monaco-editor.ts +27 -0
  109. package/src/utils/props.ts +160 -2
  110. package/src/utils/type-match-rules.ts +678 -0
  111. package/types/index.d.ts +372 -85
package/dist/es/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { CODE_DRAFT_STORAGE_KEY, CodeDeleteErrorType, ColumnLayout, DragType, KeyBindingCommand, Keys, LayerOffset, Layout, SideItemKey, canUsePluginMethods } from "./type.js";
2
2
  import { useCodeBlockEdit } from "./hooks/use-code-block-edit.js";
3
- import { advancedTabConfig, arrayOptions, displayTabConfig, eqOptions, eventTabConfig, fillConfig, numberOptions, styleTabConfig } from "./utils/props.js";
3
+ import { advancedTabConfig, arrayOptions, booleanOptions, displayTabConfig, eqOptions, eventTabConfig, fillConfig, getCondOpOptionsByFieldType, numberOptions, styleTabConfig, validatePropsForm } from "./utils/props.js";
4
4
  import props_default from "./services/props.js";
5
5
  import { getEditorConfig, setEditorConfig } from "./utils/config.js";
6
6
  import { UndoRedo } from "./utils/undo-redo.js";
@@ -25,9 +25,14 @@ import { useNextFloatBoxPosition } from "./hooks/use-next-float-box-position.js"
25
25
  import { useNodeStatus } from "./hooks/use-node-status.js";
26
26
  import { getCodeBlockFormConfig } from "./utils/code-block.js";
27
27
  import { debug, error, info, log, warn } from "./utils/logger.js";
28
- import { getCascaderOptionsFromFields, getDisplayField, getFieldType, getFormConfig, getFormValue } from "./utils/data-source/index.js";
28
+ import { getCascaderOptionsFromFields, getDisplayField, getFieldType, getFormConfig, getFormValue, resolveFieldByPath } from "./utils/data-source/index.js";
29
29
  import { IdleTask } from "./utils/dep/idle-task.js";
30
30
  import { ScrollViewer } from "./utils/scroll-viewer.js";
31
+ import codeBlock_default from "./services/codeBlock.js";
32
+ import dataSource_default from "./services/dataSource.js";
33
+ import { ALL_COND_OPS, editorTypeMatchRules } from "./utils/type-match-rules.js";
34
+ import events_default from "./services/events.js";
35
+ import { EVENT_NAME_VALUE_SEPARATOR, collectEventNameOptionValues, getCompActionAllowedValues, getCompActionOptions, getEventNameAllowedValues, getEventNameOptions, isEventNameCheckStrictly, normalizeCompActionValue } from "./utils/event.js";
31
36
  import monaco_editor_default from "./utils/monaco-editor.js";
32
37
  import Resizer_default from "./components/Resizer.js";
33
38
  import SplitView_default from "./components/SplitView.js";
@@ -49,13 +54,11 @@ import CodeBlockList_default from "./layouts/sidebar/code-block/CodeBlockList.js
49
54
  import CodeBlockListPanel_default from "./layouts/sidebar/code-block/CodeBlockListPanel.js";
50
55
  import DataSourceAddButton_default from "./layouts/sidebar/data-source/DataSourceAddButton.js";
51
56
  import DataSourceConfigPanel_default from "./layouts/sidebar/data-source/DataSourceConfigPanel.js";
57
+ import LayerNodeContent_default from "./layouts/sidebar/layer/LayerNodeContent.js";
52
58
  import LayerPanel_default from "./layouts/sidebar/layer/LayerPanel.js";
53
59
  import ComponentListPanel_default from "./layouts/sidebar/ComponentListPanel.js";
54
- import codeBlock_default from "./services/codeBlock.js";
55
60
  import componentList_default from "./services/componentList.js";
56
- import dataSource_default from "./services/dataSource.js";
57
61
  import dep_default from "./services/dep.js";
58
- import events_default from "./services/events.js";
59
62
  import keybinding_default from "./services/keybinding.js";
60
63
  import stageOverlay_default from "./services/stageOverlay.js";
61
64
  import Editor_default from "./Editor.js";
@@ -87,4 +90,4 @@ export * from "@tmagic/table";
87
90
  export * from "@tmagic/stage";
88
91
  export * from "@tmagic/design";
89
92
  export * from "@tmagic/utils";
90
- export { CODE_DRAFT_STORAGE_KEY, COPY_CODE_STORAGE_KEY, COPY_DS_STORAGE_KEY, COPY_STORAGE_KEY, CodeBlockEditor_default as CodeBlockEditor, CodeBlockList_default as CodeBlockList, CodeBlockListPanel_default as CodeBlockListPanel, CodeDeleteErrorType, CodeSelect_default as CodeSelect, CodeSelectCol_default as CodeSelectCol, ColumnLayout, CompareForm_default as CompareForm, ComponentListPanel_default as ComponentListPanel, CondOpSelect_default as CondOpSelect, ContentMenu_default as ContentMenu, DEFAULT_LEFT_COLUMN_WIDTH, DEFAULT_RIGHT_COLUMN_WIDTH, DataSourceAddButton_default as DataSourceAddButton, DataSourceConfigPanel_default as DataSourceConfigPanel, Index_default as DataSourceFieldSelect, DataSourceFields_default as DataSourceFields, DataSourceInput_default as DataSourceInput, DataSourceMethodSelect_default as DataSourceMethodSelect, DataSourceMethods_default as DataSourceMethods, DataSourceMocks_default as DataSourceMocks, DataSourceSelect_default as DataSourceSelect, DepTargetType, DisplayConds_default as DisplayConds, DragType, EventSelect_default as EventSelect, Fixed2Other, FloatingBox_default as FloatingBox, H_GUIDE_LINE_STORAGE_KEY, HistoryDiffDialog_default as HistoryDiffDialog, Bucket_default as HistoryListBucket, BucketTab_default as HistoryListBucketTab, Icon_default as Icon, IdleTask, KeyBindingCommand, KeyValue_default as KeyValue, Keys, LEFT_COLUMN_WIDTH_STORAGE_KEY, LayerOffset, LayerPanel_default as LayerPanel, Layout, SplitView_default as LayoutContainer, MIN_CENTER_COLUMN_WIDTH, MIN_LEFT_COLUMN_WIDTH, MIN_RIGHT_COLUMN_WIDTH, PROPS_PANEL_WIDTH_STORAGE_KEY, PageFragmentSelect_default as PageFragmentSelect, FormPanel_default as PropsFormPanel, PropsPanel_default as PropsPanel, RIGHT_COLUMN_WIDTH_STORAGE_KEY, Resizer_default as Resizer, ScrollViewer, SideItemKey, SplitView_default as SplitView, StageCore, Index_default$1 as StyleSetter, CodeEditor_default as TMagicCodeEditor, Editor_default as TMagicEditor, ToolButton_default as ToolButton, Tree_default as Tree, TreeNode_default as TreeNode, UI_SELECT_MODE_EVENT_NAME, UndoRedo, V_GUIDE_LINE_STORAGE_KEY, advancedTabConfig, arrayOptions, beforePaste, buildChangeRecords, calcAlignCenterStyle, calcLayerTargetIndex, calcMoveStyle, canUsePluginMethods, change2Fixed, classifyDragSources, codeBlock_default as codeBlockService, collectRelatedNodes, componentList_default as componentListService, confirmHistoryAction, createStackStep, dataSource_default as dataSourceService, debug, plugin_default as default, defaultIsExpandable, dep_default as depService, describeRevertStep, describeStepForRevert, deserializeStacks, designPlugin, detectStackOpType, detectTargetId, detectTargetName, displayTabConfig, editorNodeMergeCustomizer, editor_default as editorService, eqOptions, error, eventTabConfig, events_default as eventsService, fillConfig, fixNodeLeft, fixNodePosition, formPlugin, generatePageName, generatePageNameByApp, getAddParent, getCascaderOptionsFromFields, getCodeBlockFormConfig, getDefaultConfig, getDisplayField, getEditorConfig, getFieldType, getFormConfig, getFormValue, getGuideLineFromCache, getInitPositionStyle, getLastPushedHistoryIds, getNodeIndex, getOrCreateStack, getPageFragmentList, getPageList, getPageNameList, getPositionInContainer, getRelativeStyle, history_default as historyService, idbDelete, idbGet, idbSet, info, isIncludeDataSource, isIndexedDBSupported, keybinding_default as keybindingService, monaco_editor_default as loadMonaco, log, markStackSaved, mergeSteps, moveItemsInContainer, numberOptions, openIndexedDB, props_default as propsService, resolveSelectedNode, serializeConfig, serializeStacks, setChildrenLayout, setEditorConfig, setLayout, stageOverlay_default as stageOverlayService, storage_default as storageService, styleTabConfig, tablePlugin, toggleFixedPosition, ui_default as uiService, undoFloor, updateStatus, useCodeBlockEdit, useEditorContentHeight, useFilter, useFloatBox, useGetSo, useHistoryRevert, useNextFloatBoxPosition, useNodeStatus, useServices, useStage, useWindowRect, warn };
93
+ export { ALL_COND_OPS, CODE_DRAFT_STORAGE_KEY, COPY_CODE_STORAGE_KEY, COPY_DS_STORAGE_KEY, COPY_STORAGE_KEY, CodeBlockEditor_default as CodeBlockEditor, CodeBlockList_default as CodeBlockList, CodeBlockListPanel_default as CodeBlockListPanel, CodeDeleteErrorType, CodeSelect_default as CodeSelect, CodeSelectCol_default as CodeSelectCol, ColumnLayout, CompareForm_default as CompareForm, ComponentListPanel_default as ComponentListPanel, CondOpSelect_default as CondOpSelect, ContentMenu_default as ContentMenu, DEFAULT_LEFT_COLUMN_WIDTH, DEFAULT_RIGHT_COLUMN_WIDTH, DataSourceAddButton_default as DataSourceAddButton, DataSourceConfigPanel_default as DataSourceConfigPanel, Index_default as DataSourceFieldSelect, DataSourceFields_default as DataSourceFields, DataSourceInput_default as DataSourceInput, DataSourceMethodSelect_default as DataSourceMethodSelect, DataSourceMethods_default as DataSourceMethods, DataSourceMocks_default as DataSourceMocks, DataSourceSelect_default as DataSourceSelect, DepTargetType, DisplayConds_default as DisplayConds, DragType, EVENT_NAME_VALUE_SEPARATOR, EventSelect_default as EventSelect, Fixed2Other, FloatingBox_default as FloatingBox, H_GUIDE_LINE_STORAGE_KEY, HistoryDiffDialog_default as HistoryDiffDialog, Bucket_default as HistoryListBucket, BucketTab_default as HistoryListBucketTab, Icon_default as Icon, IdleTask, KeyBindingCommand, KeyValue_default as KeyValue, Keys, LEFT_COLUMN_WIDTH_STORAGE_KEY, LayerNodeContent_default as LayerNodeContent, LayerOffset, LayerPanel_default as LayerPanel, Layout, SplitView_default as LayoutContainer, MIN_CENTER_COLUMN_WIDTH, MIN_LEFT_COLUMN_WIDTH, MIN_RIGHT_COLUMN_WIDTH, PROPS_PANEL_WIDTH_STORAGE_KEY, PageFragmentSelect_default as PageFragmentSelect, FormPanel_default as PropsFormPanel, PropsPanel_default as PropsPanel, RIGHT_COLUMN_WIDTH_STORAGE_KEY, Resizer_default as Resizer, ScrollViewer, SideItemKey, SplitView_default as SplitView, StageCore, Index_default$1 as StyleSetter, CodeEditor_default as TMagicCodeEditor, Editor_default as TMagicEditor, ToolButton_default as ToolButton, Tree_default as Tree, TreeNode_default as TreeNode, UI_SELECT_MODE_EVENT_NAME, UndoRedo, V_GUIDE_LINE_STORAGE_KEY, advancedTabConfig, arrayOptions, beforePaste, booleanOptions, buildChangeRecords, calcAlignCenterStyle, calcLayerTargetIndex, calcMoveStyle, canUsePluginMethods, change2Fixed, classifyDragSources, codeBlock_default as codeBlockService, collectEventNameOptionValues, collectRelatedNodes, componentList_default as componentListService, confirmHistoryAction, createStackStep, dataSource_default as dataSourceService, debug, plugin_default as default, defaultIsExpandable, dep_default as depService, describeRevertStep, describeStepForRevert, deserializeStacks, designPlugin, detectStackOpType, detectTargetId, detectTargetName, displayTabConfig, editorNodeMergeCustomizer, editor_default as editorService, editorTypeMatchRules, eqOptions, error, eventTabConfig, events_default as eventsService, fillConfig, fixNodeLeft, fixNodePosition, formPlugin, generatePageName, generatePageNameByApp, getAddParent, getCascaderOptionsFromFields, getCodeBlockFormConfig, getCompActionAllowedValues, getCompActionOptions, getCondOpOptionsByFieldType, getDefaultConfig, getDisplayField, getEditorConfig, getEventNameAllowedValues, getEventNameOptions, getFieldType, getFormConfig, getFormValue, getGuideLineFromCache, getInitPositionStyle, getLastPushedHistoryIds, getNodeIndex, getOrCreateStack, getPageFragmentList, getPageList, getPageNameList, getPositionInContainer, getRelativeStyle, history_default as historyService, idbDelete, idbGet, idbSet, info, isEventNameCheckStrictly, isIncludeDataSource, isIndexedDBSupported, keybinding_default as keybindingService, monaco_editor_default as loadMonaco, log, markStackSaved, mergeSteps, moveItemsInContainer, normalizeCompActionValue, numberOptions, openIndexedDB, props_default as propsService, resolveFieldByPath, resolveSelectedNode, serializeConfig, serializeStacks, setChildrenLayout, setEditorConfig, setLayout, stageOverlay_default as stageOverlayService, storage_default as storageService, styleTabConfig, tablePlugin, toggleFixedPosition, ui_default as uiService, undoFloor, updateStatus, useCodeBlockEdit, useEditorContentHeight, useFilter, useFloatBox, useGetSo, useHistoryRevert, useNextFloatBoxPosition, useNodeStatus, useServices, useStage, useWindowRect, validatePropsForm, warn };
@@ -110,6 +110,7 @@ var CodeEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
110
110
  const values = ref("");
111
111
  const loading = ref(false);
112
112
  const codeEditorEl = useTemplateRef("codeEditor");
113
+ let destroyed = false;
113
114
  const resizeObserver = new globalThis.ResizeObserver(throttle(() => {
114
115
  vsEditor?.layout();
115
116
  vsDiffEditor?.layout();
@@ -150,11 +151,17 @@ var CodeEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
150
151
  emit("save", props.parse ? parseCode(newValue, props.language) : newValue);
151
152
  }
152
153
  };
154
+ const isEditorElValid = () => !destroyed && !!codeEditorEl.value && codeEditorEl.value.isConnected;
153
155
  const init = async () => {
154
- if (!codeEditorEl.value) return;
155
- if (codeEditorEl.value.clientHeight === 0) await nextTick();
156
+ if (!isEditorElValid()) return;
157
+ if (codeEditorEl.value.clientHeight === 0) {
158
+ await nextTick();
159
+ if (!isEditorElValid()) return;
160
+ }
156
161
  cachedExtraHeight = null;
157
162
  monaco = await monaco_editor_default();
163
+ if (!isEditorElValid()) return;
164
+ const editorEl = codeEditorEl.value;
158
165
  const options = {
159
166
  value: values.value,
160
167
  language: props.language,
@@ -163,19 +170,26 @@ var CodeEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
163
170
  ...props.options
164
171
  };
165
172
  if (props.type === "diff") {
166
- vsDiffEditor = await getEditorConfig("customCreateMonacoDiffEditor")(monaco, codeEditorEl.value, options);
173
+ vsDiffEditor = await getEditorConfig("customCreateMonacoDiffEditor")(monaco, editorEl, options);
167
174
  vsDiffEditor.getModifiedEditor().onDidChangeModelContent(() => {
168
175
  if (props.autosize) setAutoHeight(getEditorValue());
169
176
  });
170
177
  } else {
171
- vsEditor = await getEditorConfig("customCreateMonacoEditor")(monaco, codeEditorEl.value, options);
178
+ vsEditor = await getEditorConfig("customCreateMonacoEditor")(monaco, editorEl, options);
172
179
  vsEditor.onDidChangeModelContent(() => {
173
180
  if (props.autosize) setAutoHeight(getEditorValue());
174
181
  });
175
182
  }
183
+ if (destroyed) {
184
+ vsEditor?.dispose();
185
+ vsDiffEditor?.dispose();
186
+ vsEditor = null;
187
+ vsDiffEditor = null;
188
+ return;
189
+ }
176
190
  setEditorValue(props.initValues, props.modifiedValues);
177
191
  emit("initd", vsEditor);
178
- codeEditorEl.value.addEventListener("keydown", handleKeyDown);
192
+ editorEl.addEventListener("keydown", handleKeyDown);
179
193
  if (props.type !== "diff" && props.autoSave) vsEditor?.onDidBlurEditorWidget(() => {
180
194
  const newValue = getEditorValue();
181
195
  if (values.value !== newValue) {
@@ -183,7 +197,7 @@ var CodeEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
183
197
  emit("save", props.parse ? parseCode(newValue, props.language) : newValue);
184
198
  }
185
199
  });
186
- resizeObserver.observe(codeEditorEl.value);
200
+ resizeObserver.observe(editorEl);
187
201
  };
188
202
  watch(() => props.initValues, (v, preV) => {
189
203
  if (v !== preV) setEditorValue(props.initValues, props.modifiedValues);
@@ -205,6 +219,7 @@ var CodeEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
205
219
  loading.value = false;
206
220
  });
207
221
  onBeforeUnmount(() => {
222
+ destroyed = true;
208
223
  resizeObserver.disconnect();
209
224
  vsEditor?.dispose();
210
225
  vsDiffEditor?.dispose();
@@ -33,6 +33,9 @@ var Framework_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
33
33
  const pageLength = computed(() => editorService.get("pageLength") || 0);
34
34
  const showSrc = computed(() => uiService.get("showSrc"));
35
35
  const columnWidth = computed(() => uiService.get("columnWidth"));
36
+ const minLeftColumnWidth = computed(() => uiService.get("minLeftColumnWidth"));
37
+ const minCenterColumnWidth = computed(() => uiService.get("minCenterColumnWidth"));
38
+ const minRightColumnWidth = computed(() => uiService.get("minRightColumnWidth"));
36
39
  watch(pageLength, () => {
37
40
  splitViewRef.value?.updateWidth();
38
41
  });
@@ -76,13 +79,13 @@ var Framework_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
76
79
  renderSlot(_ctx.$slots, "header"),
77
80
  renderSlot(_ctx.$slots, "nav"),
78
81
  renderSlot(_ctx.$slots, "content-before"),
79
- showSrc.value ? renderSlot(_ctx.$slots, "src-code", { key: 0 }, () => [createVNode(CodeEditor_default, {
82
+ showSrc.value ? renderSlot(_ctx.$slots, "src-code", {}, () => [createVNode(CodeEditor_default, {
80
83
  class: "m-editor-content",
81
84
  "editor-custom-type": "m-editor-content",
82
85
  "init-values": root.value,
83
86
  options: unref(codeOptions),
84
87
  onSave: saveCode
85
- }, null, 8, ["init-values", "options"])]) : createCommentVNode("v-if", true),
88
+ }, null, 8, ["init-values", "options"])], void 0, 0) : createCommentVNode("v-if", true),
86
89
  withDirectives(createVNode(SplitView_default, {
87
90
  ref: "splitView",
88
91
  class: "m-editor-content",
@@ -91,13 +94,13 @@ var Framework_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
91
94
  "right-class": "m-editor-framework-right",
92
95
  left: __props.hideSidebar ? void 0 : columnWidth.value.left,
93
96
  right: columnWidth.value.right,
94
- "min-left": __props.hideSidebar ? 0 : unref(200),
95
- "min-right": unref(300),
96
- "min-center": unref(400),
97
+ "min-left": __props.hideSidebar ? 0 : minLeftColumnWidth.value,
98
+ "min-right": minRightColumnWidth.value,
99
+ "min-center": minCenterColumnWidth.value,
97
100
  width: frameworkRect.value.width,
98
101
  onChange: columnWidthChange
99
102
  }, createSlots({
100
- center: withCtx(() => [page.value ? renderSlot(_ctx.$slots, "workspace", { key: 0 }) : renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [createVNode(AddPageBox_default, { "disabled-page-fragment": __props.disabledPageFragment }, null, 8, ["disabled-page-fragment"])]), renderSlot(_ctx.$slots, "page-bar", {}, () => [createVNode(PageBar_default, {
103
+ center: withCtx(() => [page.value ? renderSlot(_ctx.$slots, "workspace", {}, void 0, void 0, 0) : renderSlot(_ctx.$slots, "empty", {}, () => [createVNode(AddPageBox_default, { "disabled-page-fragment": __props.disabledPageFragment }, null, 8, ["disabled-page-fragment"])], void 0, 1), renderSlot(_ctx.$slots, "page-bar", {}, () => [createVNode(PageBar_default, {
101
104
  "disabled-page-fragment": __props.disabledPageFragment,
102
105
  "page-bar-sort-options": __props.pageBarSortOptions,
103
106
  "filter-function": __props.pageFilterFunction
@@ -28,6 +28,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
28
28
  extendState: {},
29
29
  loadConfig: {},
30
30
  width: { default: "900px" },
31
+ size: {},
31
32
  isConfirm: { type: Boolean },
32
33
  onConfirm: {},
33
34
  selfDiffFieldTypes: {},
@@ -258,6 +259,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
258
259
  "load-config": __props.loadConfig,
259
260
  "self-diff-field-types": __props.selfDiffFieldTypes,
260
261
  services: props.services,
262
+ size: props.size,
261
263
  height: "70vh"
262
264
  }, null, 8, [
263
265
  "category",
@@ -269,7 +271,8 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*
269
271
  "extend-state",
270
272
  "load-config",
271
273
  "self-diff-field-types",
272
- "services"
274
+ "services",
275
+ "size"
273
276
  ])) : (openBlock(), createBlock(CodeEditor_default, {
274
277
  key: 2,
275
278
  type: "diff",
@@ -181,4 +181,4 @@ var confirmHistoryAction = async (message) => {
181
181
  }
182
182
  };
183
183
  //#endregion
184
- export { confirmHistoryAction, describePageGroup, describePageStep, describeStep, formatHistoryFullTime, formatHistoryTime, isHistoryGroupExpanded, isPageStepRevertable, isSingleDiffStepRevertable, opLabel, sourceLabel, toRowGroup };
184
+ export { confirmHistoryAction, describePageGroup, describePageStep, describeStep, formatHistoryFullTime, formatHistoryTime, groupOperator, groupSource, groupTimestamp, isHistoryGroupExpanded, isPageStepRevertable, isSingleDiffStepRevertable, opLabel, sourceLabel, toRowGroup };
@@ -48,6 +48,7 @@ var mountHistoryDiffDialog = async (options) => {
48
48
  selfDiffFieldTypes: options.selfDiffFieldTypes,
49
49
  compareFormState: options.compareFormState,
50
50
  width: options.width,
51
+ size: options.size ?? options.services?.uiService?.get("propsPanelSize"),
51
52
  onClose: options.onClose
52
53
  });
53
54
  if (options.appContext) Object.assign(app._context, options.appContext);
@@ -148,7 +149,8 @@ var useHistoryRevert = (options = {}, services) => {
148
149
  extendState,
149
150
  services,
150
151
  ...extra,
151
- width: extra?.width ?? dialogWidth
152
+ width: extra?.width ?? dialogWidth,
153
+ size: extra?.size
152
154
  });
153
155
  return confirmRevert();
154
156
  };
@@ -275,7 +277,8 @@ var useHistoryRevert = (options = {}, services) => {
275
277
  if (!await runRevert(revertOptions.diffPayload ?? null, {
276
278
  loadConfig: revertOptions.loadConfig,
277
279
  selfDiffFieldTypes: revertOptions.selfDiffFieldTypes,
278
- width: revertOptions.width
280
+ width: revertOptions.width,
281
+ size: revertOptions.size
279
282
  })) return null;
280
283
  return await revertOptions.revert();
281
284
  };
@@ -289,7 +292,8 @@ var useHistoryRevert = (options = {}, services) => {
289
292
  extendState,
290
293
  services,
291
294
  ...extra,
292
- width: extra?.width ?? dialogWidth
295
+ width: extra?.width ?? dialogWidth,
296
+ size: extra?.size
293
297
  });
294
298
  };
295
299
  return {
@@ -1,9 +1,12 @@
1
+ import { validatePropsForm } from "../../utils/props.js";
1
2
  import { useServices } from "../../hooks/use-services.js";
2
3
  import { useEditorContentHeight } from "../../hooks/use-editor-content-height.js";
3
4
  import Icon_default from "../../components/Icon.js";
4
5
  import CodeEditor_default from "../CodeEditor.js";
6
+ import { ENABLE_PROPS_FORM_VALIDATE } from "../../editorProps.js";
5
7
  import { MForm } from "@tmagic/form";
6
- import { TMagicButton, TMagicScrollbar } from "@tmagic/design";
8
+ import { TMagicButton, TMagicScrollbar, tMagicMessage } from "@tmagic/design";
9
+ import { filterXSS } from "@tmagic/utils";
7
10
  import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, getCurrentInstance, inject, normalizeClass, onMounted, onUnmounted, openBlock, ref, renderSlot, unref, useTemplateRef, watchEffect, withCtx } from "vue";
8
11
  import { Document } from "@element-plus/icons-vue";
9
12
  //#region packages/editor/src/layouts/props-panel/FormPanel.vue?vue&type=script&setup=true&lang.ts
@@ -30,6 +33,7 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
30
33
  setup(__props, { expose: __expose, emit: __emit }) {
31
34
  const props = __props;
32
35
  const emit = __emit;
36
+ const enablePropsFormValidate = inject(ENABLE_PROPS_FORM_VALIDATE, false);
33
37
  const services = useServices();
34
38
  const { editorService, uiService } = services;
35
39
  const codeOptions = inject("codeOptions", {});
@@ -53,16 +57,50 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
53
57
  });
54
58
  const submit = async (v, eventData) => {
55
59
  try {
56
- emit("submit", await configFormRef.value?.submitForm(), eventData);
60
+ const values = await configFormRef.value?.submitForm();
61
+ emit("submit", values, eventData);
57
62
  } catch (e) {
58
- emit("submit-error", e);
63
+ if (enablePropsFormValidate) emit("submit", v, eventData, e);
64
+ else emit("submit-error", e);
59
65
  }
60
66
  };
61
67
  const errorHandler = (e) => {
62
68
  emit("form-error", e);
63
69
  };
64
- const saveCode = (values) => {
65
- emit("submit", props.codeValueKey ? { [props.codeValueKey]: values } : values);
70
+ /**
71
+ * 将校验错误文案安全地转为用于弹窗展示的 HTML。
72
+ *
73
+ * 文案形如 `字段 -> 主文案\n\n建议`,多条以结构性 `<br>` 拼接。为在保留换行排版的同时
74
+ * 避免 `${value}`/字段名中可能夹带的 HTML 造成 XSS:先按结构性 `<br>` 拆分,对每段做 HTML
75
+ * 转义后再把段内换行 `\n` 替换为 `<br>`,最后用 `<br>` 拼回。
76
+ */
77
+ const formatValidateErrorHtml = (error) => error.split(/<br\s*\/?>/i).map((segment) => filterXSS(segment).replaceAll("\n", "<br>")).join("<br>");
78
+ const saveCode = async (values) => {
79
+ const newValues = props.codeValueKey ? { [props.codeValueKey]: values } : values;
80
+ if (!enablePropsFormValidate) {
81
+ emit("submit", newValues);
82
+ return;
83
+ }
84
+ try {
85
+ const error = await validatePropsForm({
86
+ config: props.config,
87
+ values: newValues,
88
+ appContext: internalInstance?.appContext ?? null,
89
+ services,
90
+ stage: stage.value,
91
+ typeMatchValid: true,
92
+ extendState: props.extendState
93
+ });
94
+ if (error) tMagicMessage({
95
+ type: "error",
96
+ message: formatValidateErrorHtml(error),
97
+ dangerouslyUseHTMLString: true
98
+ });
99
+ emit("submit", newValues, void 0, error ? new Error(error) : void 0);
100
+ } catch (e) {
101
+ console.log("validateForm error", e);
102
+ emit("submit", newValues);
103
+ }
66
104
  };
67
105
  __expose({
68
106
  configForm: configFormRef,
@@ -81,6 +119,7 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ define
81
119
  size: propsPanelSize.value,
82
120
  "init-values": __props.values,
83
121
  config: __props.config,
122
+ "type-match-valid": true,
84
123
  "extend-state": __props.extendState,
85
124
  onChange: submit,
86
125
  onError: errorHandler
@@ -4,11 +4,12 @@ import { PROPS_PANEL_WIDTH_STORAGE_KEY } from "../../utils/const.js";
4
4
  import { useServices } from "../../hooks/use-services.js";
5
5
  import Resizer_default from "../../components/Resizer.js";
6
6
  import Icon_default from "../../components/Icon.js";
7
+ import { ENABLE_PROPS_FORM_VALIDATE } from "../../editorProps.js";
7
8
  import FormPanel_default from "./FormPanel.js";
8
9
  import { useStylePanel } from "./use-style-panel.js";
9
10
  import { TMagicButton } from "@tmagic/design";
10
11
  import { setValueByKeyPath } from "@tmagic/utils";
11
- import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, unref, useTemplateRef, vShow, watch, watchEffect, withCtx, withDirectives } from "vue";
12
+ import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, unref, useTemplateRef, vShow, watch, watchEffect, withCtx, withDirectives } from "vue";
12
13
  import { Close, Sugar } from "@element-plus/icons-vue";
13
14
  //#region packages/editor/src/layouts/props-panel/PropsPanel.vue?vue&type=script&setup=true&lang.ts
14
15
  var _hoisted_1 = {
@@ -32,6 +33,7 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
32
33
  setup(__props, { expose: __expose, emit: __emit }) {
33
34
  const emit = __emit;
34
35
  const { editorService, uiService, propsService, storageService } = useServices();
36
+ const enablePropsFormValidate = inject(ENABLE_PROPS_FORM_VALIDATE, false);
35
37
  const values = ref({});
36
38
  const curFormConfig = ref([]);
37
39
  const node = computed(() => editorService.get("node"));
@@ -54,7 +56,7 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
54
56
  onBeforeUnmount(() => {
55
57
  propsService.off("props-configs-change", init);
56
58
  });
57
- const submit = async (v, eventData) => {
59
+ const submit = async (v, eventData, error, source = "props") => {
58
60
  try {
59
61
  if (!v.id) v.id = values.value.id;
60
62
  const newValue = {
@@ -72,7 +74,12 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
72
74
  const historySource = eventData ? "props" : "code";
73
75
  editorService.update(newValue, {
74
76
  changeRecords: eventData?.changeRecords,
75
- historySource
77
+ historySource,
78
+ ...enablePropsFormValidate && error ? { invalidInfo: {
79
+ id: newValue.id,
80
+ source,
81
+ error: error?.message
82
+ } } : {}
76
83
  });
77
84
  } catch (e) {
78
85
  emit("submit-error", e);
@@ -123,7 +130,7 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
123
130
  values: values.value,
124
131
  disabledShowSrc: __props.disabledShowSrc,
125
132
  extendState: __props.extendState,
126
- onSubmit: submit,
133
+ onSubmit: _cache[0] || (_cache[0] = (v, eventData, error) => submit(v, eventData, error, "props")),
127
134
  onSubmitError: errorHandler,
128
135
  onFormError: errorHandler,
129
136
  onMounted: mountedHandler,
@@ -148,14 +155,14 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
148
155
  values: values.value,
149
156
  disabledShowSrc: __props.disabledShowSrc,
150
157
  extendState: __props.extendState,
151
- onSubmit: submit,
158
+ onSubmit: _cache[2] || (_cache[2] = (v, eventData, error) => submit(v, eventData, error, "style")),
152
159
  onSubmitError: errorHandler,
153
160
  onFormError: errorHandler
154
161
  }, {
155
- "props-form-panel-header": withCtx(() => [createElementVNode("div", _hoisted_2, [_cache[2] || (_cache[2] = createElementVNode("span", null, "样式", -1)), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
162
+ "props-form-panel-header": withCtx(() => [createElementVNode("div", _hoisted_2, [_cache[4] || (_cache[4] = createElementVNode("span", null, "样式", -1)), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
156
163
  link: "",
157
164
  size: "small",
158
- onClick: _cache[0] || (_cache[0] = ($event) => unref(toggleStylePanel)(false))
165
+ onClick: _cache[1] || (_cache[1] = ($event) => unref(toggleStylePanel)(false))
159
166
  }, {
160
167
  default: withCtx(() => [createVNode(Icon_default, { icon: unref(Close) }, null, 8, ["icon"])]),
161
168
  _: 1
@@ -170,7 +177,7 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
170
177
  key: 2,
171
178
  class: "m-editor-props-panel-style-icon",
172
179
  circle: "",
173
- onClick: _cache[1] || (_cache[1] = ($event) => unref(toggleStylePanel)(true))
180
+ onClick: _cache[3] || (_cache[3] = ($event) => unref(toggleStylePanel)(true))
174
181
  }, {
175
182
  default: withCtx(() => [createVNode(Icon_default, { icon: unref(Sugar) }, null, 8, ["icon"])]),
176
183
  _: 1
@@ -23,8 +23,9 @@ var useStylePanel = ({ uiService, storageService }, propsPanelWidth) => {
23
23
  columnWidth.center += propsPanelWidth.value;
24
24
  }
25
25
  if (columnWidth.center < 0) {
26
- columnWidth.right = columnWidth.right + columnWidth.center - 400;
27
- columnWidth.center = 400;
26
+ const minCenterColumnWidth = uiService.get("minCenterColumnWidth");
27
+ columnWidth.right = columnWidth.right + columnWidth.center - minCenterColumnWidth;
28
+ columnWidth.center = minCenterColumnWidth;
28
29
  propsPanelWidth.value = columnWidth.right / 2;
29
30
  }
30
31
  storageService.setItem(RIGHT_COLUMN_WIDTH_STORAGE_KEY, columnWidth.right, { protocol: Protocol.NUMBER });
@@ -61,6 +61,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
61
61
  const taskLength = computed(() => depService.get("taskLength"));
62
62
  const tipsBarVisible = ref(true);
63
63
  const columnLeftWidth = computed(() => uiService.get("columnWidth")[ColumnLayout.LEFT]);
64
+ const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
64
65
  const { height: editorContentHeight } = useEditorContentHeight();
65
66
  const columnLeftHeight = ref(0);
66
67
  const unWatchEditorContentHeight = watch(editorContentHeight, (height) => {
@@ -189,23 +190,17 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
189
190
  }, config.props || {}, toHandlers(config?.listeners || {})), createSlots({ _: 2 }, [
190
191
  config.$key === "component-list" || config.slots?.componentList ? {
191
192
  name: "component-list",
192
- fn: withCtx(({ componentGroupList }) => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list", {
193
- key: 0,
194
- componentGroupList
195
- }) : config.slots?.componentList ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentList), { key: 1 })) : createCommentVNode("v-if", true)]),
193
+ fn: withCtx(({ componentGroupList }) => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list", { componentGroupList }, void 0, void 0, 0) : config.slots?.componentList ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentList), { key: 1 })) : createCommentVNode("v-if", true)]),
196
194
  key: "0"
197
195
  } : void 0,
198
196
  config.$key === "component-list" || config.slots?.componentListPanelHeader ? {
199
197
  name: "component-list-panel-header",
200
- fn: withCtx(() => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list-panel-header", { key: 0 }) : config.slots?.componentListPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentListPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
198
+ fn: withCtx(() => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list-panel-header", {}, void 0, void 0, 0) : config.slots?.componentListPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentListPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
201
199
  key: "1"
202
200
  } : void 0,
203
201
  config.$key === "component-list" || config.slots?.componentListItem ? {
204
202
  name: "component-list-item",
205
- fn: withCtx(({ component }) => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list-item", {
206
- key: 0,
207
- component
208
- }) : config.slots?.componentListItem ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentListItem), {
203
+ fn: withCtx(({ component }) => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list-item", { component }, void 0, void 0, 0) : config.slots?.componentListItem ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentListItem), {
209
204
  key: 1,
210
205
  component
211
206
  }, null, 8, ["component"])) : createCommentVNode("v-if", true)]),
@@ -213,34 +208,30 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
213
208
  } : void 0,
214
209
  config.$key === "layer" || config.slots?.layerPanelHeader ? {
215
210
  name: "layer-panel-header",
216
- fn: withCtx(() => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-panel-header", { key: 0 }) : config.slots?.layerPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
211
+ fn: withCtx(() => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-panel-header", {}, void 0, void 0, 0) : config.slots?.layerPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
217
212
  key: "3"
218
213
  } : void 0,
219
214
  config.$key === "code-block" || config.slots?.codeBlockPanelHeader ? {
220
215
  name: "code-block-panel-header",
221
- fn: withCtx(() => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-header", { key: 0 }) : config.slots?.codeBlockPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
216
+ fn: withCtx(() => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-header", {}, void 0, void 0, 0) : config.slots?.codeBlockPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
222
217
  key: "4"
223
218
  } : void 0,
224
219
  config.$key === "code-block" || config.slots?.codeBlockPanelTool ? {
225
220
  name: "code-block-panel-tool",
226
221
  fn: withCtx(({ id, data }) => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-tool", {
227
- key: 0,
228
222
  id,
229
223
  data
230
- }) : config.slots?.codeBlockPanelTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelTool), { key: 1 })) : createCommentVNode("v-if", true)]),
224
+ }, void 0, void 0, 0) : config.slots?.codeBlockPanelTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelTool), { key: 1 })) : createCommentVNode("v-if", true)]),
231
225
  key: "5"
232
226
  } : void 0,
233
227
  config.$key === "code-block" || config.slots?.codeBlockPanelSearch ? {
234
228
  name: "code-block-panel-search",
235
- fn: withCtx(() => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-search", { key: 0 }) : config.slots?.codeBlockPanelSearch ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelSearch), { key: 1 })) : createCommentVNode("v-if", true)]),
229
+ fn: withCtx(() => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-search", {}, void 0, void 0, 0) : config.slots?.codeBlockPanelSearch ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelSearch), { key: 1 })) : createCommentVNode("v-if", true)]),
236
230
  key: "6"
237
231
  } : void 0,
238
232
  config.$key === "layer" || config.slots?.layerNodeContent ? {
239
233
  name: "layer-node-content",
240
- fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-content", {
241
- key: 0,
242
- data: nodeData
243
- }) : config.slots?.layerNodeContent ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeContent), {
234
+ fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-content", { data: nodeData }, void 0, void 0, 0) : config.slots?.layerNodeContent ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeContent), {
244
235
  key: 1,
245
236
  data: nodeData
246
237
  }, null, 8, ["data"])) : createCommentVNode("v-if", true)]),
@@ -248,10 +239,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
248
239
  } : void 0,
249
240
  config.$key === "layer" || config.slots?.layerNodeLabel ? {
250
241
  name: "layer-node-label",
251
- fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-label", {
252
- key: 0,
253
- data: nodeData
254
- }) : config.slots?.layerNodeLabel ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeTool), {
242
+ fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-label", { data: nodeData }, void 0, void 0, 0) : config.slots?.layerNodeLabel ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeTool), {
255
243
  key: 1,
256
244
  data: nodeData
257
245
  }, null, 8, ["data"])) : createCommentVNode("v-if", true)]),
@@ -259,10 +247,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
259
247
  } : void 0,
260
248
  config.$key === "layer" || config.slots?.layerNodeTool ? {
261
249
  name: "layer-node-tool",
262
- fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-tool", {
263
- key: 0,
264
- data: nodeData
265
- }) : config.slots?.layerNodeTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeTool), {
250
+ fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-tool", { data: nodeData }, void 0, void 0, 0) : config.slots?.layerNodeTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeTool), {
266
251
  key: 1,
267
252
  data: nodeData
268
253
  }, null, 8, ["data"])) : createCommentVNode("v-if", true)]),
@@ -270,15 +255,12 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
270
255
  } : void 0,
271
256
  config.$key === "data-source" || config.slots?.dataSourcePanelTool ? {
272
257
  name: "data-source-panel-tool",
273
- fn: withCtx(({ data }) => [config.$key === "data-source" ? renderSlot(_ctx.$slots, "data-source-panel-tool", {
274
- key: 0,
275
- data
276
- }) : config.slots?.DataSourcePanelTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.DataSourcePanelTool), { key: 1 })) : createCommentVNode("v-if", true)]),
258
+ fn: withCtx(({ data }) => [config.$key === "data-source" ? renderSlot(_ctx.$slots, "data-source-panel-tool", { data }, void 0, void 0, 0) : config.slots?.DataSourcePanelTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.DataSourcePanelTool), { key: 1 })) : createCommentVNode("v-if", true)]),
277
259
  key: "10"
278
260
  } : void 0,
279
261
  config.$key === "data-source" || config.slots?.dataSourcePanelSearch ? {
280
262
  name: "data-source-panel-search",
281
- fn: withCtx(() => [config.$key === "data-source" ? renderSlot(_ctx.$slots, "data-source-panel-search", { key: 0 }) : config.slots?.dataSourcePanelSearch ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.dataSourcePanelSearch), { key: 1 })) : createCommentVNode("v-if", true)]),
263
+ fn: withCtx(() => [config.$key === "data-source" ? renderSlot(_ctx.$slots, "data-source-panel-search", {}, void 0, void 0, 0) : config.slots?.dataSourcePanelSearch ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.dataSourcePanelSearch), { key: 1 })) : createCommentVNode("v-if", true)]),
282
264
  key: "11"
283
265
  } : void 0
284
266
  ]), 1040)) : createCommentVNode("v-if", true)], 2)), [[vShow, [
@@ -301,6 +283,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
301
283
  "onUpdate:height": _cache[2] || (_cache[2] = ($event) => columnLeftHeight.value = $event),
302
284
  width: columnLeftWidth.value,
303
285
  title: config.text,
286
+ "framework-width": frameworkWidth.value,
304
287
  position: {
305
288
  left: unref(floatBoxStates)[config.$key].left,
306
289
  top: unref(floatBoxStates)[config.$key].top
@@ -317,6 +300,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCo
317
300
  "height",
318
301
  "width",
319
302
  "title",
303
+ "framework-width",
320
304
  "position"
321
305
  ])) : createCommentVNode("v-if", true)], 64);
322
306
  }), 256))]))], 64);
@@ -37,10 +37,10 @@ var CodeBlockListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__
37
37
  const editDialogCloseHandler = () => {
38
38
  if (codeBlockListRef.value) for (const [, status] of codeBlockListRef.value.nodeStatusMap.entries()) status.selected = false;
39
39
  };
40
- const { nodeContentMenuHandler, menuData: contentMenuData, contentMenuHideHandler } = useContentMenu((id) => {
40
+ const { nodeContentMenuHandler, menuData: contentMenuData, contentMenuHideHandler, getTarget } = useContentMenu((id) => {
41
41
  codeBlockListRef.value?.deleteCode(id, { historySource: "tree-contextmenu" });
42
42
  });
43
- const menuData = computed(() => props.customContentMenu(contentMenuData, "code-block"));
43
+ const menuData = computed(() => props.customContentMenu(contentMenuData, "code-block", getTarget));
44
44
  return (_ctx, _cache) => {
45
45
  return openBlock(), createElementBlock(Fragment, null, [
46
46
  createVNode(unref(TMagicScrollbar), { class: "m-editor-code-block-list m-editor-layer-panel" }, {
@@ -6,6 +6,14 @@ var useContentMenu = (deleteCode) => {
6
6
  const eventBus = inject("eventBus");
7
7
  const menuRef = useTemplateRef("menu");
8
8
  let selectId = "";
9
+ let selectData = null;
10
+ const getTarget = () => {
11
+ if (!selectId) return null;
12
+ return {
13
+ id: selectId,
14
+ data: selectData ?? void 0
15
+ };
16
+ };
9
17
  const menuData = [
10
18
  {
11
19
  type: "button",
@@ -43,17 +51,24 @@ var useContentMenu = (deleteCode) => {
43
51
  event.preventDefault();
44
52
  if (data.type === "code") {
45
53
  menuRef.value?.show(event);
46
- if (data.id) selectId = `${data.id}`;
47
- else selectId = "";
54
+ if (data.id) {
55
+ selectId = `${data.id}`;
56
+ selectData = data;
57
+ } else {
58
+ selectId = "";
59
+ selectData = null;
60
+ }
48
61
  }
49
62
  };
50
63
  const contentMenuHideHandler = () => {
51
64
  selectId = "";
65
+ selectData = null;
52
66
  };
53
67
  return {
54
68
  menuData,
55
69
  nodeContentMenuHandler,
56
- contentMenuHideHandler
70
+ contentMenuHideHandler,
71
+ getTarget
57
72
  };
58
73
  };
59
74
  //#endregion