@tmagic/editor 1.8.0-manmanyu.9 → 1.8.0

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 (279) hide show
  1. package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +22 -13
  2. package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +10 -5
  3. package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +7 -6
  4. package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +21 -122
  5. package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +21 -5
  6. package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +62 -16
  7. package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +1 -1
  8. package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +3 -2
  9. package/dist/es/components/ScrollBar.js +0 -1
  10. package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +5 -4
  11. package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +1 -1
  12. package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +1 -1
  13. package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +1 -1
  14. package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +1 -1
  15. package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +1 -1
  16. package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +1 -1
  17. package/dist/es/components/ViewForm.js +5 -0
  18. package/dist/es/components/ViewForm.vue_vue_type_script_setup_true_lang.js +56 -0
  19. package/dist/es/editorProps.js +7 -1
  20. package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +1 -1
  21. package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +1 -1
  22. package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +30 -113
  23. package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +2 -2
  24. package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +7 -19
  25. package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +7 -6
  26. package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +4 -2
  27. package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +12 -4
  28. package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +9 -20
  29. package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +2 -2
  30. package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +5 -3
  31. package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +9 -4
  32. package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +2 -2
  33. package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +10 -110
  34. package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +52 -363
  35. package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +1 -1
  37. package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +3 -6
  38. package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +1 -1
  39. package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +4 -35
  40. package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +3 -3
  41. package/dist/es/fields/StyleSetter/configs.js +663 -0
  42. package/dist/es/fields/StyleSetter/icons/align-items/Center.js +1 -1
  43. package/dist/es/fields/StyleSetter/icons/align-items/FlexEnd.js +1 -1
  44. package/dist/es/fields/StyleSetter/icons/align-items/FlexStart.js +1 -1
  45. package/dist/es/fields/StyleSetter/icons/align-items/SpaceAround.js +1 -1
  46. package/dist/es/fields/StyleSetter/icons/align-items/SpaceBetween.js +1 -1
  47. package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +1 -1
  48. package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +1 -1
  49. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +1 -1
  50. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +1 -1
  51. package/dist/es/fields/StyleSetter/icons/display/Block.js +1 -1
  52. package/dist/es/fields/StyleSetter/icons/display/Flex.js +1 -1
  53. package/dist/es/fields/StyleSetter/icons/display/Inline.js +1 -1
  54. package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +1 -1
  55. package/dist/es/fields/StyleSetter/icons/display/None.js +1 -1
  56. package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +1 -1
  57. package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +1 -1
  58. package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +1 -1
  59. package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +1 -1
  60. package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +1 -1
  61. package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +1 -1
  62. package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +1 -1
  63. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +1 -1
  64. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +1 -1
  65. package/dist/es/fields/StyleSetter/icons/text-align/Center.js +1 -1
  66. package/dist/es/fields/StyleSetter/icons/text-align/Left.js +1 -1
  67. package/dist/es/fields/StyleSetter/icons/text-align/Right.js +1 -1
  68. package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +29 -106
  69. package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +8 -11
  70. package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +30 -89
  71. package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +29 -297
  72. package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +29 -82
  73. package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +8 -24
  74. package/dist/es/fields/UISelect.js +0 -1
  75. package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +1 -1
  76. package/dist/es/fields/configs/codeSelect.js +98 -0
  77. package/dist/es/fields/configs/displayConds.js +158 -0
  78. package/dist/es/fields/configs/eventSelect.js +225 -0
  79. package/dist/es/fields/configs/stickyAddButton.js +21 -0
  80. package/dist/es/fields/headless-validation.js +139 -0
  81. package/dist/es/headless.js +2 -0
  82. package/dist/es/hooks/use-code-block-edit.js +4 -2
  83. package/dist/es/hooks/use-compare-form.js +101 -0
  84. package/dist/es/hooks/use-form-context.js +29 -0
  85. package/dist/es/hooks/use-stage.js +1 -0
  86. package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  87. package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  88. package/dist/es/icons/DatasourceIcon.js +1 -1
  89. package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  90. package/dist/es/index.js +16 -8
  91. package/dist/es/initService.js +52 -16
  92. package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +1 -1
  93. package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +26 -10
  94. package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +11 -8
  95. package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +1 -1
  96. package/dist/es/layouts/NavMenuColumn.vue_vue_type_script_setup_true_lang.js +1 -1
  97. package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +1 -1
  98. package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +8 -5
  99. package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +1 -1
  100. package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +26 -10
  101. package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +11 -13
  102. package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +1 -1
  103. package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +1 -1
  104. package/dist/es/layouts/history-list/composables.js +1 -1
  105. package/dist/es/layouts/history-list/useHistoryRevert.js +38 -33
  106. package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +1 -1
  107. package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +1 -1
  108. package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +1 -1
  109. package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +1 -1
  110. package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +2 -2
  111. package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +50 -20
  112. package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +53 -35
  113. package/dist/es/layouts/props-panel/use-style-panel.js +3 -2
  114. package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +3 -3
  115. package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +21 -36
  116. package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +1 -1
  117. package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
  118. package/dist/es/layouts/sidebar/code-block/useContentMenu.js +19 -4
  119. package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +1 -1
  120. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +9 -4
  121. package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +1 -1
  122. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
  123. package/dist/es/layouts/sidebar/data-source/useContentMenu.js +19 -4
  124. package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +3 -3
  125. package/dist/es/layouts/sidebar/layer/LayerNodeContent.js +5 -0
  126. package/dist/es/layouts/sidebar/layer/LayerNodeContent.vue_vue_type_script_setup_true_lang.js +46 -0
  127. package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +1 -1
  128. package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +6 -4
  129. package/dist/es/layouts/sidebar/layer/use-click.js +3 -3
  130. package/dist/es/layouts/sidebar/layer/use-drag.js +11 -10
  131. package/dist/es/layouts/sidebar/layer/use-node-status.js +2 -2
  132. package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +1 -1
  133. package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +1 -1
  134. package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +9 -3
  135. package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +55 -9
  136. package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
  137. package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +8 -8
  138. package/dist/es/plugin.js +35 -23
  139. package/dist/es/services/codeBlock.js +8 -3
  140. package/dist/es/services/dataSource.js +3 -0
  141. package/dist/es/services/dep.js +162 -41
  142. package/dist/es/services/editor.js +344 -113
  143. package/dist/es/services/events.js +4 -4
  144. package/dist/es/services/history.js +17 -1
  145. package/dist/es/services/keybinding.js +3 -3
  146. package/dist/es/services/props.js +2 -1
  147. package/dist/es/services/storage.js +2 -2
  148. package/dist/es/services/ui.js +7 -2
  149. package/dist/es/style.css +277 -114
  150. package/dist/es/utils/code-block.js +14 -7
  151. package/dist/es/utils/config.js +4 -1
  152. package/dist/es/utils/const.js +2 -2
  153. package/dist/es/utils/content-menu.js +2 -2
  154. package/dist/es/utils/data-source/index.js +34 -12
  155. package/dist/es/utils/dep/collect-worker-client.js +154 -0
  156. package/dist/es/utils/dep/idle-task.js +70 -22
  157. package/dist/es/utils/dep/worker.js +1 -1
  158. package/dist/es/utils/editor.js +4 -2
  159. package/dist/es/utils/event.js +135 -0
  160. package/dist/es/utils/monaco-editor.js +22 -6
  161. package/dist/es/utils/operator.js +2 -2
  162. package/dist/es/utils/props.js +50 -106
  163. package/dist/es/utils/type-match-rules.js +356 -0
  164. package/dist/style.css +277 -114
  165. package/dist/themes/magic-admin.css +978 -175
  166. package/dist/tmagic-editor-headless.umd.cjs +10880 -0
  167. package/dist/tmagic-editor.umd.cjs +12695 -10896
  168. package/package.json +18 -13
  169. package/src/Editor.vue +23 -6
  170. package/src/components/CodeBlockEditor.vue +3 -0
  171. package/src/components/CodeParams.vue +10 -4
  172. package/src/components/CompareForm.vue +20 -190
  173. package/src/components/ContentMenu.vue +34 -6
  174. package/src/components/FloatingBox.vue +71 -7
  175. package/src/components/ScrollBar.vue +0 -67
  176. package/src/components/ViewForm.vue +54 -0
  177. package/src/editorProps.ts +23 -10
  178. package/src/fields/Code.vue +1 -1
  179. package/src/fields/CodeSelect.vue +20 -113
  180. package/src/fields/CodeSelectCol.vue +1 -1
  181. package/src/fields/CondOpSelect.vue +5 -26
  182. package/src/fields/DataSourceFieldSelect/FieldSelect.vue +2 -2
  183. package/src/fields/DataSourceFieldSelect/Index.vue +4 -1
  184. package/src/fields/DataSourceFields.vue +5 -1
  185. package/src/fields/DataSourceInput.vue +10 -28
  186. package/src/fields/DataSourceMethodSelect.vue +1 -1
  187. package/src/fields/DataSourceMethods.vue +6 -2
  188. package/src/fields/DataSourceMocks.vue +3 -0
  189. package/src/fields/DataSourceSelect.vue +1 -1
  190. package/src/fields/DisplayConds.vue +17 -139
  191. package/src/fields/EventSelect.vue +29 -416
  192. package/src/fields/KeyValue.vue +1 -1
  193. package/src/fields/StyleSetter/Index.vue +2 -8
  194. package/src/fields/StyleSetter/components/Border.vue +4 -38
  195. package/src/fields/StyleSetter/components/Box.vue +1 -1
  196. package/src/fields/StyleSetter/components/Position.vue +1 -1
  197. package/src/fields/StyleSetter/configs.ts +690 -0
  198. package/src/fields/StyleSetter/pro/Background.vue +9 -64
  199. package/src/fields/StyleSetter/pro/Border.vue +5 -16
  200. package/src/fields/StyleSetter/pro/Font.vue +11 -71
  201. package/src/fields/StyleSetter/pro/Layout.vue +10 -230
  202. package/src/fields/StyleSetter/pro/Position.vue +11 -82
  203. package/src/fields/StyleSetter/pro/Transform.vue +6 -34
  204. package/src/fields/UISelect.vue +0 -12
  205. package/src/fields/configs/codeSelect.ts +127 -0
  206. package/src/fields/configs/displayConds.ts +184 -0
  207. package/src/fields/configs/eventSelect.ts +309 -0
  208. package/src/fields/configs/stickyAddButton.ts +32 -0
  209. package/src/fields/headless-validation.ts +177 -0
  210. package/src/headless.ts +33 -0
  211. package/src/hooks/index.ts +1 -0
  212. package/src/hooks/use-compare-form.ts +166 -0
  213. package/src/hooks/use-form-context.ts +56 -0
  214. package/src/hooks/use-stage.ts +1 -0
  215. package/src/index.ts +9 -0
  216. package/src/initService.ts +73 -18
  217. package/src/layouts/CodeEditor.vue +32 -6
  218. package/src/layouts/Framework.vue +7 -6
  219. package/src/layouts/history-list/BucketTab.vue +2 -2
  220. package/src/layouts/history-list/HistoryDiffDialog.vue +33 -15
  221. package/src/layouts/history-list/HistoryListPanel.vue +16 -18
  222. package/src/layouts/history-list/useHistoryRevert.ts +57 -41
  223. package/src/layouts/props-panel/FormPanel.vue +75 -20
  224. package/src/layouts/props-panel/PropsPanel.vue +81 -30
  225. package/src/layouts/props-panel/use-style-panel.ts +4 -3
  226. package/src/layouts/sidebar/ComponentListPanel.vue +6 -2
  227. package/src/layouts/sidebar/Sidebar.vue +5 -3
  228. package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +5 -2
  229. package/src/layouts/sidebar/code-block/useContentMenu.ts +14 -2
  230. package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +3 -0
  231. package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +3 -3
  232. package/src/layouts/sidebar/data-source/useContentMenu.ts +14 -2
  233. package/src/layouts/sidebar/layer/LayerMenu.vue +2 -2
  234. package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
  235. package/src/layouts/sidebar/layer/LayerPanel.vue +5 -2
  236. package/src/layouts/sidebar/layer/use-click.ts +3 -3
  237. package/src/layouts/sidebar/layer/use-node-status.ts +2 -2
  238. package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
  239. package/src/layouts/workspace/viewer/Stage.vue +80 -10
  240. package/src/layouts/workspace/viewer/ViewerMenu.vue +7 -7
  241. package/src/plugin.ts +35 -25
  242. package/src/services/codeBlock.ts +4 -0
  243. package/src/services/dataSource.ts +3 -0
  244. package/src/services/dep.ts +292 -47
  245. package/src/services/editor.ts +383 -120
  246. package/src/services/events.ts +8 -7
  247. package/src/services/history.ts +22 -1
  248. package/src/services/keybinding.ts +3 -3
  249. package/src/services/ui.ts +26 -5
  250. package/src/theme/code-block.scss +0 -37
  251. package/src/theme/display-conds.scss +4 -0
  252. package/src/theme/event.scss +25 -33
  253. package/src/theme/floating-box.scss +9 -1
  254. package/src/theme/framework.scss +4 -1
  255. package/src/theme/layer-node-content.scss +14 -0
  256. package/src/theme/nav-menu.scss +5 -1
  257. package/src/theme/props-panel.scss +17 -3
  258. package/src/theme/scroll-bar.scss +64 -0
  259. package/src/theme/theme.scss +3 -0
  260. package/src/theme/themes/magic-admin/index.scss +109 -9
  261. package/src/theme/ui-select.scss +9 -0
  262. package/src/type.ts +216 -6
  263. package/src/utils/code-block.ts +1 -0
  264. package/src/utils/config.ts +9 -1
  265. package/src/utils/const.ts +3 -3
  266. package/src/utils/content-menu.ts +2 -2
  267. package/src/utils/data-source/index.ts +31 -12
  268. package/src/utils/dep/collect-worker-client.ts +215 -0
  269. package/src/utils/dep/idle-task.ts +104 -35
  270. package/src/utils/dep/worker.ts +113 -9
  271. package/src/utils/event.ts +237 -0
  272. package/src/utils/index.ts +2 -0
  273. package/src/utils/monaco-editor.ts +27 -0
  274. package/src/utils/operator.ts +2 -2
  275. package/src/utils/props.ts +61 -122
  276. package/src/utils/type-match-rules.ts +697 -0
  277. package/types/headless.d.ts +17 -0
  278. package/types/index.d.ts +1199 -724
  279. package/src/fields/StyleSetter/icons/align-items/index copy.ts +0 -5
@@ -1,4 +1,3 @@
1
- import { useServices } from "../../hooks/use-services.js";
2
1
  import CodeEditor_default from "../CodeEditor.js";
3
2
  import CompareForm_default from "../../components/CompareForm.js";
4
3
  import { TMagicButton, TMagicDialog, TMagicRadioButton, TMagicRadioGroup, TMagicTag } from "@tmagic/design";
@@ -21,14 +20,14 @@ var _hoisted_7 = {
21
20
  key: 0,
22
21
  class: "m-editor-history-diff-dialog-tip"
23
22
  };
24
- var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
23
+ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
25
24
  name: "MEditorHistoryDiffDialog",
26
25
  __name: "HistoryDiffDialog",
27
26
  props: {
28
- services: { default: () => useServices() },
29
- extendState: {},
27
+ services: {},
30
28
  loadConfig: {},
31
29
  width: { default: "900px" },
30
+ size: {},
32
31
  isConfirm: { type: Boolean },
33
32
  onConfirm: {},
34
33
  selfDiffFieldTypes: {}
@@ -65,6 +64,20 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
65
64
  };
66
65
  const dialogTitle = computed(() => props.onConfirm ? "确认回滚" : "查看修改差异");
67
66
  const hasCurrent = computed(() => payload.value?.currentValue !== void 0 && payload.value?.currentValue !== null);
67
+ /** 是否存在该步「修改后的值」:不存在(如仅删除)时「与修改前对比」无意义,置灰禁用。 */
68
+ const hasValue = computed(() => payload.value?.value !== void 0 && payload.value?.value !== null);
69
+ /** 指定模式当前是否可用:before 依赖「修改后的值」,current 依赖「当前值」。 */
70
+ const isModeAvailable = (m) => m === "current" ? hasCurrent.value : hasValue.value;
71
+ /**
72
+ * 计算 open 时的初始对比模式:
73
+ * - 调用方通过 payload.mode 指定且该模式可用时,优先使用指定模式;
74
+ * - 否则没有「修改后的值」但有当前值时(「与修改前对比」不可用),默认进入「与当前对比」;
75
+ * - 其余情况默认「与修改前对比」。
76
+ */
77
+ const resolveInitialMode = (specified) => {
78
+ if (specified && isModeAvailable(specified)) return specified;
79
+ return !hasValue.value && hasCurrent.value ? "current" : "before";
80
+ };
68
81
  /** 左侧(旧/参照)值 */
69
82
  const leftValue = computed(() => {
70
83
  if (!payload.value) return {};
@@ -107,7 +120,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
107
120
  });
108
121
  const open = (p) => {
109
122
  payload.value = p;
110
- mode.value = "before";
123
+ mode.value = resolveInitialMode(p.mode);
111
124
  viewMode.value = "form";
112
125
  visible.value = true;
113
126
  };
@@ -199,10 +212,13 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
199
212
  size: "small",
200
213
  class: "m-editor-history-diff-dialog-mode"
201
214
  }, {
202
- default: withCtx(() => [createVNode(unref(TMagicRadioButton), { value: "before" }, {
215
+ default: withCtx(() => [createVNode(unref(TMagicRadioButton), {
216
+ value: "before",
217
+ disabled: !hasValue.value
218
+ }, {
203
219
  default: withCtx(() => [..._cache[7] || (_cache[7] = [createTextVNode("与修改前对比", -1)])]),
204
220
  _: 1
205
- }), createVNode(unref(TMagicRadioButton), {
221
+ }, 8, ["disabled"]), createVNode(unref(TMagicRadioButton), {
206
222
  value: "current",
207
223
  disabled: !hasCurrent.value
208
224
  }, {
@@ -236,10 +252,10 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
236
252
  "data-source-type": payload.value.dataSourceType,
237
253
  value: rightValue.value,
238
254
  "last-value": leftValue.value,
239
- "extend-state": __props.extendState,
240
255
  "load-config": __props.loadConfig,
241
256
  "self-diff-field-types": __props.selfDiffFieldTypes,
242
257
  services: props.services,
258
+ size: props.size,
243
259
  height: "70vh"
244
260
  }, null, 8, [
245
261
  "category",
@@ -247,10 +263,10 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
247
263
  "data-source-type",
248
264
  "value",
249
265
  "last-value",
250
- "extend-state",
251
266
  "load-config",
252
267
  "self-diff-field-types",
253
- "services"
268
+ "services",
269
+ "size"
254
270
  ])) : (openBlock(), createBlock(CodeEditor_default, {
255
271
  key: 2,
256
272
  type: "diff",
@@ -10,7 +10,7 @@ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock
10
10
  import { Clock, Close } from "@element-plus/icons-vue";
11
11
  //#region packages/editor/src/layouts/history-list/HistoryListPanel.vue?vue&type=script&setup=true&lang.ts
12
12
  var _hoisted_1 = { class: "m-editor-history-list" };
13
- var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
13
+ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
14
14
  name: "MEditorHistoryListPanel",
15
15
  __name: "HistoryListPanel",
16
16
  setup(__props) {
@@ -62,12 +62,6 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
62
62
  watch([disabledDataSource, disabledCodeBlock], ([dsDisabled, cbDisabled]) => {
63
63
  if (activeTab.value === "data-source" && dsDisabled || activeTab.value === "code-block" && cbDisabled) activeTab.value = "page";
64
64
  });
65
- /**
66
- * 通过 inject 拿到 Editor 顶层注入的 `extendFormState`,转交给 HistoryDiffDialog
67
- * 内部的 CompareForm,使差异对比表单的 filterFunction 能拿到完整的业务上下文。
68
- * 未提供时为 undefined,CompareForm/MForm 会跳过 extendState 处理。
69
- */
70
- const extendFormState = inject("extendFormState", void 0);
71
65
  const { expanded, toggleGroup, pageGroups, dataSourceGroups, codeBlockGroups, pageGroupsDisplay, dataSourceGroupsByTarget, codeBlockGroupsByTarget } = useHistoryList();
72
66
  /**
73
67
  * 当前活动页的「加载/初始」标记记录(设置 root 时生成),透传给 PageTab 的底部初始行展示。
@@ -149,9 +143,9 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
149
143
  /**
150
144
  * 「单步回滚」与「查看差异」的完整逻辑收敛到 useHistoryRevert,面板与业务方共用:
151
145
  * 二者均由 useHistoryRevert 内部按需动态挂载 HistoryDiffDialog,
152
- * 业务方亦可直接 import useHistoryRevert(services) 调用,无需自行挂载任何弹窗。
146
+ * 业务方亦可直接 import useHistoryRevert(options, services) 调用,无需自行挂载任何弹窗。
153
147
  */
154
- const { onPageRevert, onDataSourceRevert, onCodeBlockRevert, onPageDiff, onDataSourceDiff, onCodeBlockDiff } = useHistoryRevert(services, { extendState: extendFormState });
148
+ const { onPageRevert, onDataSourceRevert, onCodeBlockRevert, onPageDiff, onDataSourceDiff, onCodeBlockDiff } = useHistoryRevert({}, services);
155
149
  /**
156
150
  * 把内存中(已清空对应类别后的)历史状态重新写回 IndexedDB,
157
151
  * 使本地持久化的那份与内存保持一致——即「连同本地保存的一并删除」。
@@ -227,7 +221,8 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
227
221
  default: withCtx(() => [
228
222
  (openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), normalizeProps(guardReactiveProps(unref(tabPaneComponent)?.props({
229
223
  name: "page",
230
- label: `${pageName.value} (${unref(pageGroups).length})`
224
+ label: `${pageName.value} (${unref(pageGroups).length})`,
225
+ lazy: true
231
226
  }) || {})), {
232
227
  default: withCtx(() => [createVNode(PageTab_default, {
233
228
  list: unref(pageGroupsDisplay),
@@ -252,7 +247,8 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
252
247
  }, 16)),
253
248
  !disabledDataSource.value ? (openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), normalizeProps(mergeProps({ key: 0 }, unref(tabPaneComponent)?.props({
254
249
  name: "data-source",
255
- label: `${dataSourceName.value} (${unref(dataSourceGroups).length})`
250
+ label: `${dataSourceName.value} (${unref(dataSourceGroups).length})`,
251
+ lazy: true
256
252
  }) || {})), {
257
253
  default: withCtx(() => [createVNode(BucketTab_default, {
258
254
  config: dataSourceConfig.value,
@@ -276,7 +272,8 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
276
272
  }, 16)) : createCommentVNode("v-if", true),
277
273
  !disabledCodeBlock.value ? (openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), normalizeProps(mergeProps({ key: 1 }, unref(tabPaneComponent)?.props({
278
274
  name: "code-block",
279
- label: `${codeBlockName.value} (${unref(codeBlockGroups).length})`
275
+ label: `${codeBlockName.value} (${unref(codeBlockGroups).length})`,
276
+ lazy: true
280
277
  }) || {})), {
281
278
  default: withCtx(() => [createVNode(BucketTab_default, {
282
279
  config: codeBlockConfig.value,
@@ -301,7 +298,8 @@ var HistoryListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
301
298
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(extraTabs), (tab) => {
302
299
  return openBlock(), createBlock(resolveDynamicComponent(unref(tabPaneComponent)?.component || "el-tab-pane"), mergeProps({ key: tab.name }, { ref_for: true }, unref(tabPaneComponent)?.props({
303
300
  name: tab.name,
304
- label: resolveTabLabel(tab)
301
+ label: resolveTabLabel(tab),
302
+ lazy: true
305
303
  }) || {}), {
306
304
  default: withCtx(() => [(openBlock(), createBlock(resolveDynamicComponent(tab.component), mergeProps({ ref_for: true }, tab.props || {}, toHandlers(tab.listeners || {})), null, 16))]),
307
305
  _: 2
@@ -13,7 +13,7 @@ var _hoisted_4 = {
13
13
  class: "m-editor-history-list-item-actions"
14
14
  };
15
15
  var _hoisted_5 = ["title"];
16
- var InitialRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
16
+ var InitialRow_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
17
17
  name: "MEditorHistoryListInitialRow",
18
18
  __name: "InitialRow",
19
19
  props: {
@@ -13,7 +13,7 @@ var _hoisted_2 = {
13
13
  class: "m-editor-history-list-toolbar"
14
14
  };
15
15
  var _hoisted_3 = { class: "m-editor-history-list-ul" };
16
- var PageTab_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
16
+ var PageTab_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
17
17
  name: "MEditorHistoryListPageTab",
18
18
  __name: "PageTab",
19
19
  props: {
@@ -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 };
@@ -43,9 +43,10 @@ var mountHistoryDiffDialog = async (options) => {
43
43
  const app = createApp(historyDiffDialog, {
44
44
  services: options.services,
45
45
  isConfirm: options.isConfirm,
46
- extendState: options.extendState,
47
46
  loadConfig: options.loadConfig,
48
47
  selfDiffFieldTypes: options.selfDiffFieldTypes,
48
+ width: options.width,
49
+ size: options.size ?? options.services?.uiService?.get("propsPanelSize"),
49
50
  onClose: options.onClose
50
51
  });
51
52
  if (options.appContext) Object.assign(app._context, options.appContext);
@@ -59,6 +60,7 @@ var mountHistoryDiffDialog = async (options) => {
59
60
  }, 300);
60
61
  };
61
62
  return {
63
+ app,
62
64
  instance,
63
65
  destroy
64
66
  };
@@ -116,15 +118,14 @@ var viewHistoryDiffDialog = async (payload, options) => {
116
118
  * ```ts
117
119
  * import { useHistoryRevert } from '@tmagic/editor';
118
120
  *
119
- * const { onPageRevert, onPageDiff } = useHistoryRevert(editorRef.value); // editorRef.value 即 Editor 暴露的 services
121
+ * const { onPageRevert, onPageDiff } = useHistoryRevert({}, editorRef.value); // editorRef.value 即 Editor 暴露的 services
120
122
  * await onPageRevert(index); // 弹出差异 / 二次确认弹窗后回滚
121
123
  * onPageDiff(index); // 弹出只读差异弹窗查看前后值差异
122
124
  * ```
123
125
  */
124
- var useHistoryRevert = (services, options = {}) => {
125
- const { editorService, dataSourceService, codeBlockService, historyService } = services;
126
+ var useHistoryRevert = (options = {}, services) => {
126
127
  const appContext = options.appContext ?? getCurrentInstance()?.appContext ?? null;
127
- const { extendState } = options;
128
+ const { dialogWidth } = options;
128
129
  /** 目标数据已被删除、无法回滚时的统一提示。 */
129
130
  const showRevertTargetMissing = () => {
130
131
  tMagicMessage.error("回滚失败:该记录对应的数据已被删除");
@@ -134,7 +135,7 @@ var useHistoryRevert = (services, options = {}) => {
134
135
  * 不弹差异弹窗,改用一个普通确认框替代「确定回滚」按钮,避免点击后无任何提示直接执行。
135
136
  * 用户取消时返回 false,调用方据此中止回滚。
136
137
  */
137
- const confirmRevert = () => confirmHistoryAction("确定回滚该步骤吗?回滚会将该操作作为一条新记录反向应用(新增将被删除、删除将被还原),不影响后续历史记录。");
138
+ const confirmRevert = () => confirmHistoryAction("确定回滚该步骤吗?");
138
139
  /**
139
140
  * 「回滚」统一确认入口:可差异对比的步骤动态挂载 HistoryDiffDialog 走差异确认弹窗,
140
141
  * 无法对比的步骤(add / remove / 多节点更新)回退到普通二次确认框。
@@ -143,30 +144,31 @@ var useHistoryRevert = (services, options = {}) => {
143
144
  const runRevert = (payload, extra) => {
144
145
  if (payload) return confirmRevertWithDiffDialog(payload, {
145
146
  appContext,
146
- extendState,
147
147
  services,
148
- ...extra
148
+ ...extra,
149
+ width: extra?.width ?? dialogWidth,
150
+ size: extra?.size
149
151
  });
150
152
  return confirmRevert();
151
153
  };
152
154
  const buildPageDiffPayload = (index) => buildDiffPayload({
153
155
  category: "node",
154
- groups: () => historyService.getHistoryGroups("page", editorService.get("page")?.id),
155
- getCurrent: (id) => editorService.getNodeById(id),
156
+ groups: () => services?.historyService.getHistoryGroups("page", services?.editorService.get("page")?.id) ?? [],
157
+ getCurrent: (id) => services?.editorService.getNodeById(id),
156
158
  resolveType: (n, o) => n.type || o.type || "",
157
159
  resolveLabel: (n, o) => n.name || o.name || n.type || o.type || ""
158
160
  }, index);
159
161
  const buildDataSourceDiffPayload = (id, index) => buildDiffPayload({
160
162
  category: "data-source",
161
- groups: () => historyService.getHistoryGroups("dataSource"),
162
- getCurrent: (id) => dataSourceService.getDataSourceById(`${id}`),
163
+ groups: () => services?.historyService.getHistoryGroups("dataSource") ?? [],
164
+ getCurrent: (id) => services?.dataSourceService.getDataSourceById(`${id}`),
163
165
  resolveType: (n, o) => n.type || o.type || "base",
164
166
  resolveLabel: (n, o, id) => n.title || o.title || `${id}`
165
167
  }, index, id);
166
168
  const buildCodeBlockDiffPayload = (id, index) => buildDiffPayload({
167
169
  category: "code-block",
168
- groups: () => historyService.getHistoryGroups("codeBlock"),
169
- getCurrent: (id) => codeBlockService.getCodeContentById(id),
170
+ groups: () => services?.historyService.getHistoryGroups("codeBlock") ?? [],
171
+ getCurrent: (id) => services?.codeBlockService.getCodeContentById(id),
170
172
  resolveLabel: (n, o, id) => n.name || o.name || `${id}`
171
173
  }, index, id);
172
174
  /**
@@ -176,45 +178,45 @@ var useHistoryRevert = (services, options = {}) => {
176
178
  * add(回滚即删除)即使目标已不在,也已达成「删除」目的,不视为失败。
177
179
  */
178
180
  const isPageRevertTargetMissing = (index) => {
179
- const step = historyService.getStepList("page", editorService.get("page")?.id)[index]?.step;
181
+ const step = services?.historyService.getStepList("page", services?.editorService.get("page")?.id)[index]?.step;
180
182
  if (!step) return false;
181
183
  if (step.opType === "update") return (step.diff ?? []).some((item) => {
182
184
  const id = item.newSchema?.id ?? item.oldSchema?.id;
183
- return id !== void 0 && !editorService.getNodeById(id, false);
185
+ return id !== void 0 && !services?.editorService.getNodeById(id, false);
184
186
  });
185
- if (step.opType === "remove") return (step.diff ?? []).some((item) => item.parentId !== void 0 && !editorService.getNodeById(item.parentId, false));
187
+ if (step.opType === "remove") return (step.diff ?? []).some((item) => item.parentId !== void 0 && !services?.editorService.getNodeById(item.parentId, false));
186
188
  return false;
187
189
  };
188
190
  /** 数据源 update 步骤回滚时,对应数据源必须仍存在(已删除则无处写回旧值)。 */
189
191
  const isDataSourceRevertTargetMissing = (id, index) => {
190
- const step = historyService.getStepList("dataSource", id)[index]?.step;
191
- return Boolean(step?.opType === "update" && !dataSourceService.getDataSourceById(`${id}`));
192
+ const step = services?.historyService.getStepList("dataSource", id)[index]?.step;
193
+ return Boolean(step?.opType === "update" && !services?.dataSourceService.getDataSourceById(`${id}`));
192
194
  };
193
195
  /** 代码块 update 步骤回滚时,对应代码块必须仍存在(已删除则无处写回旧值)。 */
194
196
  const isCodeBlockRevertTargetMissing = (id, index) => {
195
- const step = historyService.getStepList("codeBlock", id)[index]?.step;
196
- return Boolean(step?.opType === "update" && !codeBlockService.getCodeContentById(id));
197
+ const step = services?.historyService.getStepList("codeBlock", id)[index]?.step;
198
+ return Boolean(step?.opType === "update" && !services?.codeBlockService.getCodeContentById(id));
197
199
  };
198
200
  const onPageRevert = (index) => {
199
201
  if (isPageRevertTargetMissing(index)) {
200
202
  showRevertTargetMissing();
201
203
  return Promise.resolve(null);
202
204
  }
203
- return runRevert(buildPageDiffPayload(index)).then((result) => result ? editorService.revertPageStep(index) : null);
205
+ return runRevert(buildPageDiffPayload(index), {}).then((result) => result ? services?.editorService.revertPageStep(index) : null);
204
206
  };
205
207
  const onDataSourceRevert = (id, index) => {
206
208
  if (isDataSourceRevertTargetMissing(id, index)) {
207
209
  showRevertTargetMissing();
208
210
  return Promise.resolve(null);
209
211
  }
210
- return runRevert(buildDataSourceDiffPayload(id, index)).then((result) => result ? dataSourceService.revert(id, index) : null);
212
+ return runRevert(buildDataSourceDiffPayload(id, index)).then((result) => result ? services?.dataSourceService.revert(id, index) : null);
211
213
  };
212
214
  const onCodeBlockRevert = (id, index) => {
213
215
  if (isCodeBlockRevertTargetMissing(id, index)) {
214
216
  showRevertTargetMissing();
215
217
  return Promise.resolve(null);
216
218
  }
217
- return runRevert(buildCodeBlockDiffPayload(id, index)).then((result) => result ? codeBlockService.revert(id, index) : null);
219
+ return runRevert(buildCodeBlockDiffPayload(id, index)).then((result) => result ? services?.codeBlockService.revert(id, index) : null);
218
220
  };
219
221
  /**
220
222
  * 「查看差异」:可差异对比的步骤(单实体 update)动态挂载只读 HistoryDiffDialog 展示前后值差异,
@@ -224,24 +226,24 @@ var useHistoryRevert = (services, options = {}) => {
224
226
  const payload = buildPageDiffPayload(index);
225
227
  if (payload) return viewHistoryDiffDialog(payload, {
226
228
  appContext,
227
- extendState,
228
- services
229
+ services,
230
+ width: dialogWidth
229
231
  });
230
232
  };
231
233
  const onDataSourceDiff = (id, index) => {
232
234
  const payload = buildDataSourceDiffPayload(id, index);
233
235
  if (payload) return viewHistoryDiffDialog(payload, {
234
236
  appContext,
235
- extendState,
236
- services
237
+ services,
238
+ width: dialogWidth
237
239
  });
238
240
  };
239
241
  const onCodeBlockDiff = (id, index) => {
240
242
  const payload = buildCodeBlockDiffPayload(id, index);
241
243
  if (payload) return viewHistoryDiffDialog(payload, {
242
244
  appContext,
243
- extendState,
244
- services
245
+ services,
246
+ width: dialogWidth
245
247
  });
246
248
  };
247
249
  /**
@@ -267,7 +269,9 @@ var useHistoryRevert = (services, options = {}) => {
267
269
  }
268
270
  if (!await runRevert(revertOptions.diffPayload ?? null, {
269
271
  loadConfig: revertOptions.loadConfig,
270
- selfDiffFieldTypes: revertOptions.selfDiffFieldTypes
272
+ selfDiffFieldTypes: revertOptions.selfDiffFieldTypes,
273
+ width: revertOptions.width,
274
+ size: revertOptions.size
271
275
  })) return null;
272
276
  return await revertOptions.revert();
273
277
  };
@@ -278,9 +282,10 @@ var useHistoryRevert = (services, options = {}) => {
278
282
  const viewDiff = (payload, extra) => {
279
283
  if (payload) return viewHistoryDiffDialog(payload, {
280
284
  appContext,
281
- extendState,
282
285
  services,
283
- ...extra
286
+ ...extra,
287
+ width: extra?.width ?? dialogWidth,
288
+ size: extra?.size
284
289
  });
285
290
  };
286
291
  return {
@@ -16,7 +16,7 @@ var _hoisted_2 = {
16
16
  key: 1,
17
17
  style: { "width": "21px" }
18
18
  };
19
- var AddButton_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
19
+ var AddButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
20
20
  name: "MEditorPageBarAddButton",
21
21
  __name: "AddButton",
22
22
  setup(__props) {
@@ -13,7 +13,7 @@ var _hoisted_1 = { class: "m-editor-page-bar-tabs" };
13
13
  var _hoisted_2 = ["data-page-id", "onClick"];
14
14
  var _hoisted_3 = { class: "m-editor-page-bar-title" };
15
15
  var _hoisted_4 = ["title"];
16
- var PageBar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
16
+ var PageBar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
17
17
  name: "MEditorPageBar",
18
18
  __name: "PageBar",
19
19
  props: {
@@ -13,7 +13,7 @@ var _hoisted_2 = {
13
13
  class: "m-editor-page-bar-items",
14
14
  ref: "itemsContainer"
15
15
  };
16
- var PageBarScrollContainer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
16
+ var PageBarScrollContainer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
17
17
  name: "MEditorPageBarScrollContainer",
18
18
  __name: "PageBarScrollContainer",
19
19
  props: {
@@ -11,7 +11,7 @@ var _hoisted_1 = {
11
11
  };
12
12
  var _hoisted_2 = { class: "page-bar-popover-wrapper" };
13
13
  var _hoisted_3 = { class: "page-bar-popover-inner" };
14
- var PageList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
14
+ var PageList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
15
15
  name: "MEditorPageList",
16
16
  __name: "PageList",
17
17
  props: { list: {} },
@@ -5,13 +5,13 @@ import { Teleport, createBlock, createCommentVNode, createElementBlock, createVN
5
5
  import { Search } from "@element-plus/icons-vue";
6
6
  //#region packages/editor/src/layouts/page-bar/Search.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = { class: "m-editor-page-bar-item m-editor-page-bar-item-icon m-editor-page-bar-search" };
8
- var Search_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
8
+ var Search_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
9
  __name: "Search",
10
10
  props: {
11
11
  "query": {},
12
12
  "queryModifiers": {}
13
13
  },
14
- emits: /* @__PURE__ */ mergeModels(["search"], ["update:query"]),
14
+ emits: /*@__PURE__*/ mergeModels(["search"], ["update:query"]),
15
15
  setup(__props, { emit: __emit }) {
16
16
  const emit = __emit;
17
17
  const query = useModel(__props, "query");
@@ -1,14 +1,17 @@
1
+ import { useEditorFormContext } from "../../hooks/use-form-context.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";
5
- import { MForm } from "@tmagic/form";
6
- import { TMagicButton, TMagicScrollbar } from "@tmagic/design";
7
- import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, getCurrentInstance, inject, normalizeClass, onMounted, onUnmounted, openBlock, ref, renderSlot, unref, useTemplateRef, watchEffect, withCtx } from "vue";
6
+ import { ENABLE_PROPS_FORM_VALIDATE } from "../../editorProps.js";
7
+ import { MForm, validateForm } from "@tmagic/form";
8
+ import { TMagicButton, TMagicScrollbar, tMagicMessage } from "@tmagic/design";
9
+ import { filterXSS } from "@tmagic/utils";
10
+ import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, getCurrentInstance, inject, normalizeClass, onMounted, onUnmounted, openBlock, ref, renderSlot, unref, useTemplateRef, 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
10
13
  var _hoisted_1 = { class: "m-editor-props-form-panel" };
11
- var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
14
+ var FormPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
15
  name: "MEditorFormPanel",
13
16
  __name: "FormPanel",
14
17
  props: {
@@ -17,8 +20,7 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
17
20
  disabledShowSrc: { type: Boolean },
18
21
  labelWidth: {},
19
22
  codeValueKey: {},
20
- labelPosition: {},
21
- extendState: { type: Function }
23
+ labelPosition: {}
22
24
  },
23
25
  emits: [
24
26
  "submit",
@@ -30,20 +32,15 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
30
32
  setup(__props, { expose: __expose, emit: __emit }) {
31
33
  const props = __props;
32
34
  const emit = __emit;
35
+ const enablePropsFormValidate = inject(ENABLE_PROPS_FORM_VALIDATE, false);
33
36
  const services = useServices();
34
- const { editorService, uiService } = services;
37
+ const { uiService } = services;
35
38
  const codeOptions = inject("codeOptions", {});
36
39
  const showSrc = ref(false);
37
40
  const propsPanelSize = computed(() => uiService.get("propsPanelSize") || "small");
38
41
  const { height: editorContentHeight } = useEditorContentHeight();
39
- const stage = computed(() => editorService.get("stage"));
42
+ const formContext = useEditorFormContext(() => services);
40
43
  const configFormRef = useTemplateRef("configForm");
41
- watchEffect(() => {
42
- if (configFormRef.value) {
43
- configFormRef.value.formState.stage = stage.value;
44
- configFormRef.value.formState.services = services;
45
- }
46
- });
47
44
  const internalInstance = getCurrentInstance();
48
45
  onMounted(() => {
49
46
  emit("mounted", internalInstance?.proxy);
@@ -53,16 +50,47 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
53
50
  });
54
51
  const submit = async (v, eventData) => {
55
52
  try {
56
- emit("submit", await configFormRef.value?.submitForm(), eventData);
53
+ const values = await configFormRef.value?.submitForm();
54
+ emit("submit", values, eventData);
57
55
  } catch (e) {
58
- emit("submit-error", e);
56
+ if (enablePropsFormValidate) emit("submit", v, eventData, e);
57
+ else emit("submit-error", e);
59
58
  }
60
59
  };
61
60
  const errorHandler = (e) => {
62
61
  emit("form-error", e);
63
62
  };
64
- const saveCode = (values) => {
65
- emit("submit", props.codeValueKey ? { [props.codeValueKey]: values } : values);
63
+ /**
64
+ * 将校验错误文案安全地转为用于弹窗展示的 HTML。
65
+ *
66
+ * 文案形如 `字段 -> 主文案\n\n建议`,多条以结构性 `<br>` 拼接。为在保留换行排版的同时
67
+ * 避免 `${value}`/字段名中可能夹带的 HTML 造成 XSS:先按结构性 `<br>` 拆分,对每段做 HTML
68
+ * 转义后再把段内换行 `\n` 替换为 `<br>`,最后用 `<br>` 拼回。
69
+ */
70
+ const formatValidateErrorHtml = (error) => error.split(/<br\s*\/?>/i).map((segment) => filterXSS(segment).replaceAll("\n", "<br>")).join("<br>");
71
+ const saveCode = async (values) => {
72
+ const newValues = props.codeValueKey ? { [props.codeValueKey]: values } : values;
73
+ if (!enablePropsFormValidate) {
74
+ emit("submit", newValues);
75
+ return;
76
+ }
77
+ try {
78
+ const error = await validateForm({
79
+ config: props.config,
80
+ typeMatchValid: true,
81
+ initValues: newValues,
82
+ context: formContext.value
83
+ });
84
+ if (error) tMagicMessage({
85
+ type: "error",
86
+ message: formatValidateErrorHtml(error),
87
+ dangerouslyUseHTMLString: true
88
+ });
89
+ emit("submit", newValues, void 0, error ? new Error(error) : void 0);
90
+ } catch (e) {
91
+ console.error("validateForm error", e);
92
+ emit("submit", newValues, void 0, e instanceof Error ? e : new Error(String(e)));
93
+ }
66
94
  };
67
95
  __expose({
68
96
  configForm: configFormRef,
@@ -81,7 +109,9 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
81
109
  size: propsPanelSize.value,
82
110
  "init-values": __props.values,
83
111
  config: __props.config,
84
- "extend-state": __props.extendState,
112
+ "type-match-valid": true,
113
+ context: unref(formContext),
114
+ "validate-on-init": true,
85
115
  onChange: submit,
86
116
  onError: errorHandler
87
117
  }, null, 8, [
@@ -92,7 +122,7 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
92
122
  "size",
93
123
  "init-values",
94
124
  "config",
95
- "extend-state"
125
+ "context"
96
126
  ])]),
97
127
  _: 1
98
128
  }),