@tmagic/editor 1.8.0-beta.2 → 1.8.0-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (306) hide show
  1. package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +43 -9
  2. package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +8 -4
  3. package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +3 -2
  4. package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +22 -98
  5. package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +32 -9
  6. package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +68 -17
  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 +1 -1
  9. package/dist/es/components/ScrollBar.js +0 -1
  10. package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +1 -1
  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 +7 -7
  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 +58 -0
  19. package/dist/es/editorProps.js +9 -1
  20. package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +16 -5
  21. package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +7 -7
  22. package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +81 -44
  23. package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +10 -3
  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 +13 -6
  26. package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +11 -8
  27. package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +39 -12
  28. package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +11 -20
  29. package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +11 -6
  30. package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +30 -14
  31. package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +11 -4
  32. package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +5 -2
  33. package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +38 -6
  34. package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +151 -153
  35. package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +5 -2
  36. package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +5 -2
  37. package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +8 -10
  38. package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +5 -2
  39. package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +28 -6
  40. package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +1 -1
  41. package/dist/es/fields/StyleSetter/icons/align-items/Center.js +31 -0
  42. package/dist/es/fields/StyleSetter/icons/align-items/FlexEnd.js +31 -0
  43. package/dist/es/fields/StyleSetter/icons/align-items/FlexStart.js +31 -0
  44. package/dist/es/fields/StyleSetter/icons/align-items/SpaceAround.js +50 -0
  45. package/dist/es/fields/StyleSetter/icons/align-items/SpaceBetween.js +50 -0
  46. package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +7 -7
  47. package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +6 -3
  48. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +29 -6
  49. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +32 -6
  50. package/dist/es/fields/StyleSetter/icons/display/Block.js +1 -1
  51. package/dist/es/fields/StyleSetter/icons/display/Flex.js +1 -1
  52. package/dist/es/fields/StyleSetter/icons/display/Inline.js +1 -1
  53. package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +1 -1
  54. package/dist/es/fields/StyleSetter/icons/display/None.js +1 -1
  55. package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +11 -3
  56. package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +11 -3
  57. package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +11 -3
  58. package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +11 -3
  59. package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +17 -3
  60. package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +19 -3
  61. package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +19 -3
  62. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +37 -3
  63. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +33 -3
  64. package/dist/es/fields/StyleSetter/icons/text-align/Center.js +1 -1
  65. package/dist/es/fields/StyleSetter/icons/text-align/Left.js +1 -1
  66. package/dist/es/fields/StyleSetter/icons/text-align/Right.js +1 -1
  67. package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +56 -30
  68. package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +7 -4
  69. package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +35 -26
  70. package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +76 -48
  71. package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +29 -23
  72. package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +7 -4
  73. package/dist/es/fields/UISelect.js +0 -1
  74. package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +5 -2
  75. package/dist/es/hooks/use-code-block-edit.js +6 -3
  76. package/dist/es/hooks/use-compare-form.js +119 -0
  77. package/dist/es/hooks/use-data-source-edit.js +5 -2
  78. package/dist/es/hooks/use-stage.js +9 -4
  79. package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  80. package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  81. package/dist/es/icons/DatasourceIcon.js +17 -0
  82. package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  83. package/dist/es/index.js +24 -10
  84. package/dist/es/initService.js +19 -13
  85. package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +1 -1
  86. package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +24 -12
  87. package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +25 -18
  88. package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +4 -4
  89. package/dist/es/layouts/NavMenuColumn.vue_vue_type_script_setup_true_lang.js +1 -1
  90. package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +25 -38
  91. package/dist/es/layouts/history-list/BucketTab.js +5 -0
  92. package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +62 -0
  93. package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +177 -88
  94. package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +139 -37
  95. package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +164 -107
  96. package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +44 -9
  97. package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +49 -53
  98. package/dist/es/layouts/history-list/composables.js +138 -108
  99. package/dist/es/layouts/history-list/useHistoryList.js +56 -0
  100. package/dist/es/layouts/history-list/useHistoryRevert.js +317 -0
  101. package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +1 -1
  102. package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +5 -3
  103. package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +1 -1
  104. package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +1 -1
  105. package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +2 -2
  106. package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +50 -7
  107. package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +33 -13
  108. package/dist/es/layouts/props-panel/use-style-panel.js +3 -2
  109. package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +3 -3
  110. package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +26 -38
  111. package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +4 -4
  112. package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
  113. package/dist/es/layouts/sidebar/code-block/useContentMenu.js +19 -4
  114. package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +1 -1
  115. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +23 -6
  116. package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +1 -1
  117. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +27 -5
  118. package/dist/es/layouts/sidebar/data-source/useContentMenu.js +19 -4
  119. package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +8 -8
  120. package/dist/es/layouts/sidebar/layer/LayerNodeContent.js +5 -0
  121. package/dist/es/layouts/sidebar/layer/LayerNodeContent.vue_vue_type_script_setup_true_lang.js +46 -0
  122. package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +2 -2
  123. package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +3 -2
  124. package/dist/es/layouts/sidebar/layer/use-click.js +3 -3
  125. package/dist/es/layouts/sidebar/layer/use-node-status.js +2 -2
  126. package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +1 -1
  127. package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +1 -1
  128. package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +9 -3
  129. package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +2 -2
  130. package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
  131. package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +16 -16
  132. package/dist/es/plugin.js +5 -2
  133. package/dist/es/services/codeBlock.js +137 -56
  134. package/dist/es/services/dataSource.js +122 -52
  135. package/dist/es/services/dep.js +162 -41
  136. package/dist/es/services/editor.js +613 -179
  137. package/dist/es/services/history.js +350 -386
  138. package/dist/es/services/keybinding.js +6 -6
  139. package/dist/es/services/props.js +3 -2
  140. package/dist/es/services/storage.js +2 -2
  141. package/dist/es/services/ui.js +10 -2
  142. package/dist/es/style.css +549 -113
  143. package/dist/es/utils/config.js +4 -1
  144. package/dist/es/utils/const.js +2 -2
  145. package/dist/es/utils/content-menu.js +19 -11
  146. package/dist/es/utils/data-source/index.js +34 -11
  147. package/dist/es/utils/dep/collect-worker-client.js +114 -0
  148. package/dist/es/utils/dep/idle-task.js +47 -22
  149. package/dist/es/utils/dep/worker.js +1 -1
  150. package/dist/es/utils/editor.js +103 -49
  151. package/dist/es/utils/event.js +123 -0
  152. package/dist/es/utils/history.js +220 -0
  153. package/dist/es/utils/indexed-db.js +86 -0
  154. package/dist/es/utils/monaco-editor.js +22 -6
  155. package/dist/es/utils/operator.js +2 -2
  156. package/dist/es/utils/props.js +114 -33
  157. package/dist/es/utils/type-match-rules.js +367 -0
  158. package/dist/es/utils/undo-redo.js +60 -1
  159. package/dist/style.css +549 -113
  160. package/dist/themes/magic-admin.css +3028 -0
  161. package/dist/tmagic-editor.umd.cjs +14273 -10029
  162. package/package.json +8 -8
  163. package/src/Editor.vue +43 -2
  164. package/src/components/CodeBlockEditor.vue +3 -0
  165. package/src/components/CompareForm.vue +18 -146
  166. package/src/components/ContentMenu.vue +44 -8
  167. package/src/components/FloatingBox.vue +84 -9
  168. package/src/components/ScrollBar.vue +0 -67
  169. package/src/components/ToolButton.vue +2 -2
  170. package/src/components/ViewForm.vue +55 -0
  171. package/src/editorProps.ts +30 -0
  172. package/src/fields/Code.vue +10 -2
  173. package/src/fields/CodeLink.vue +2 -5
  174. package/src/fields/CodeSelect.vue +54 -40
  175. package/src/fields/CodeSelectCol.vue +8 -1
  176. package/src/fields/CondOpSelect.vue +2 -24
  177. package/src/fields/DataSourceFieldSelect/FieldSelect.vue +16 -2
  178. package/src/fields/DataSourceFieldSelect/Index.vue +14 -5
  179. package/src/fields/DataSourceFields.vue +42 -8
  180. package/src/fields/DataSourceInput.vue +10 -28
  181. package/src/fields/DataSourceMethodSelect.vue +9 -4
  182. package/src/fields/DataSourceMethods.vue +42 -21
  183. package/src/fields/DataSourceMocks.vue +3 -0
  184. package/src/fields/DisplayConds.vue +18 -1
  185. package/src/fields/EventSelect.vue +145 -161
  186. package/src/fields/StyleSetter/Index.vue +3 -12
  187. package/src/fields/StyleSetter/components/Border.vue +15 -6
  188. package/src/fields/StyleSetter/icons/align-items/Center.vue +19 -0
  189. package/src/fields/StyleSetter/icons/align-items/FlexEnd.vue +19 -0
  190. package/src/fields/StyleSetter/icons/align-items/FlexStart.vue +19 -0
  191. package/src/fields/StyleSetter/icons/align-items/SpaceAround.vue +34 -0
  192. package/src/fields/StyleSetter/icons/align-items/SpaceBetween.vue +34 -0
  193. package/src/fields/StyleSetter/icons/align-items/index.ts +5 -0
  194. package/src/fields/StyleSetter/icons/background-repeat/NoRepeat.vue +20 -4
  195. package/src/fields/StyleSetter/icons/background-repeat/Repeat.vue +10 -28
  196. package/src/fields/StyleSetter/icons/background-repeat/RepeatX.vue +4 -5
  197. package/src/fields/StyleSetter/icons/background-repeat/RepeatY.vue +4 -5
  198. package/src/fields/StyleSetter/icons/flex-direction/Column.vue +4 -3
  199. package/src/fields/StyleSetter/icons/flex-direction/ColumnReverse.vue +4 -3
  200. package/src/fields/StyleSetter/icons/flex-direction/Row.vue +4 -3
  201. package/src/fields/StyleSetter/icons/flex-direction/RowReverse.vue +4 -3
  202. package/src/fields/StyleSetter/icons/justify-content/Center.vue +5 -2
  203. package/src/fields/StyleSetter/icons/justify-content/FlexEnd.vue +15 -2
  204. package/src/fields/StyleSetter/icons/justify-content/FlexStart.vue +15 -2
  205. package/src/fields/StyleSetter/icons/justify-content/SpaceAround.vue +28 -3
  206. package/src/fields/StyleSetter/icons/justify-content/SpaceBetween.vue +28 -2
  207. package/src/fields/StyleSetter/pro/Background.vue +99 -55
  208. package/src/fields/StyleSetter/pro/Border.vue +9 -11
  209. package/src/fields/StyleSetter/pro/Font.vue +66 -64
  210. package/src/fields/StyleSetter/pro/Layout.vue +211 -139
  211. package/src/fields/StyleSetter/pro/Position.vue +69 -67
  212. package/src/fields/StyleSetter/pro/Transform.vue +23 -25
  213. package/src/fields/UISelect.vue +0 -12
  214. package/src/hooks/index.ts +1 -0
  215. package/src/hooks/use-code-block-edit.ts +4 -3
  216. package/src/hooks/use-compare-form.ts +187 -0
  217. package/src/hooks/use-data-source-edit.ts +2 -2
  218. package/src/hooks/use-stage.ts +5 -3
  219. package/src/icons/DatasourceIcon.vue +7 -0
  220. package/src/index.ts +12 -0
  221. package/src/initService.ts +26 -16
  222. package/src/layouts/CodeEditor.vue +34 -11
  223. package/src/layouts/Framework.vue +15 -8
  224. package/src/layouts/NavMenu.vue +3 -3
  225. package/src/layouts/history-list/Bucket.vue +33 -41
  226. package/src/layouts/history-list/BucketTab.vue +72 -0
  227. package/src/layouts/history-list/GroupRow.vue +190 -93
  228. package/src/layouts/history-list/HistoryDiffDialog.vue +169 -90
  229. package/src/layouts/history-list/HistoryListPanel.vue +191 -95
  230. package/src/layouts/history-list/InitialRow.vue +38 -8
  231. package/src/layouts/history-list/PageTab.vue +67 -43
  232. package/src/layouts/history-list/composables.ts +239 -125
  233. package/src/layouts/history-list/useHistoryList.ts +60 -0
  234. package/src/layouts/history-list/useHistoryRevert.ts +425 -0
  235. package/src/layouts/page-bar/PageBar.vue +4 -2
  236. package/src/layouts/props-panel/FormPanel.vue +72 -6
  237. package/src/layouts/props-panel/PropsPanel.vue +62 -18
  238. package/src/layouts/props-panel/use-style-panel.ts +4 -3
  239. package/src/layouts/sidebar/ComponentListPanel.vue +10 -6
  240. package/src/layouts/sidebar/Sidebar.vue +13 -6
  241. package/src/layouts/sidebar/code-block/CodeBlockList.vue +5 -5
  242. package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +5 -2
  243. package/src/layouts/sidebar/code-block/useContentMenu.ts +14 -2
  244. package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +34 -2
  245. package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +29 -4
  246. package/src/layouts/sidebar/data-source/useContentMenu.ts +14 -2
  247. package/src/layouts/sidebar/layer/LayerMenu.vue +21 -13
  248. package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
  249. package/src/layouts/sidebar/layer/LayerNodeTool.vue +7 -4
  250. package/src/layouts/sidebar/layer/LayerPanel.vue +4 -1
  251. package/src/layouts/sidebar/layer/use-click.ts +3 -3
  252. package/src/layouts/sidebar/layer/use-node-status.ts +2 -2
  253. package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
  254. package/src/layouts/workspace/viewer/Stage.vue +1 -1
  255. package/src/layouts/workspace/viewer/ViewerMenu.vue +15 -15
  256. package/src/plugin.ts +6 -3
  257. package/src/services/codeBlock.ts +152 -47
  258. package/src/services/dataSource.ts +120 -41
  259. package/src/services/dep.ts +292 -47
  260. package/src/services/editor.ts +820 -224
  261. package/src/services/history.ts +449 -412
  262. package/src/services/keybinding.ts +6 -6
  263. package/src/services/ui.ts +33 -5
  264. package/src/theme/code-block.scss +37 -0
  265. package/src/theme/common/var.scss +1 -1
  266. package/src/theme/component-list-panel.scss +2 -2
  267. package/src/theme/data-source-field.scss +4 -0
  268. package/src/theme/display-conds.scss +11 -0
  269. package/src/theme/event.scss +70 -1
  270. package/src/theme/floating-box.scss +9 -1
  271. package/src/theme/framework.scss +4 -1
  272. package/src/theme/history-list-panel.scss +157 -23
  273. package/src/theme/layer-node-content.scss +14 -0
  274. package/src/theme/nav-menu.scss +5 -1
  275. package/src/theme/page-bar.scss +0 -4
  276. package/src/theme/props-panel.scss +5 -4
  277. package/src/theme/scroll-bar.scss +64 -0
  278. package/src/theme/style-setter/border.scss +17 -5
  279. package/src/theme/theme.scss +4 -0
  280. package/src/theme/themes/magic-admin/index.scss +214 -0
  281. package/src/theme/ui-select.scss +9 -0
  282. package/src/type.ts +668 -124
  283. package/src/utils/config.ts +9 -1
  284. package/src/utils/const.ts +3 -2
  285. package/src/utils/content-menu.ts +20 -11
  286. package/src/utils/data-source/index.ts +32 -12
  287. package/src/utils/dep/collect-worker-client.ts +149 -0
  288. package/src/utils/dep/idle-task.ts +72 -35
  289. package/src/utils/dep/worker.ts +113 -9
  290. package/src/utils/editor.ts +166 -60
  291. package/src/utils/event.ts +224 -0
  292. package/src/utils/history.ts +286 -0
  293. package/src/utils/index.ts +4 -0
  294. package/src/utils/indexed-db.ts +122 -0
  295. package/src/utils/monaco-editor.ts +27 -0
  296. package/src/utils/operator.ts +2 -2
  297. package/src/utils/props.ts +114 -11
  298. package/src/utils/type-match-rules.ts +684 -0
  299. package/src/utils/undo-redo.ts +88 -0
  300. package/types/index.d.ts +1979 -515
  301. package/dist/es/layouts/history-list/CodeBlockTab.js +0 -5
  302. package/dist/es/layouts/history-list/CodeBlockTab.vue_vue_type_script_setup_true_lang.js +0 -62
  303. package/dist/es/layouts/history-list/DataSourceTab.js +0 -5
  304. package/dist/es/layouts/history-list/DataSourceTab.vue_vue_type_script_setup_true_lang.js +0 -62
  305. package/src/layouts/history-list/CodeBlockTab.vue +0 -61
  306. package/src/layouts/history-list/DataSourceTab.vue +0 -61
@@ -1,4 +1,4 @@
1
- import { opLabel } from "./composables.js";
1
+ import { opLabel, sourceLabel } from "./composables.js";
2
2
  import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, renderList, toDisplayString, unref, withModifiers } from "vue";
3
3
  //#region packages/editor/src/layouts/history-list/GroupRow.vue?vue&type=script&setup=true&lang.ts
4
4
  var _hoisted_1 = ["title"];
@@ -6,104 +6,147 @@ var _hoisted_2 = ["title"];
6
6
  var _hoisted_3 = { class: "m-editor-history-list-item-desc" };
7
7
  var _hoisted_4 = {
8
8
  key: 0,
9
- class: "m-editor-history-list-item-current"
9
+ class: "m-editor-history-list-item-saved",
10
+ title: "该记录为最近一次保存的状态"
10
11
  };
11
12
  var _hoisted_5 = {
12
- key: 2,
13
+ key: 1,
14
+ class: "m-editor-history-list-item-actions"
15
+ };
16
+ var _hoisted_6 = ["title"];
17
+ var _hoisted_7 = ["title"];
18
+ var _hoisted_8 = ["title"];
19
+ var _hoisted_9 = {
20
+ key: 5,
13
21
  class: "m-editor-history-list-item-merge"
14
22
  };
15
- var _hoisted_6 = {
23
+ var _hoisted_10 = {
16
24
  key: 0,
17
25
  class: "m-editor-history-list-substeps"
18
26
  };
19
- var _hoisted_7 = ["title", "onClick"];
20
- var _hoisted_8 = { class: "m-editor-history-list-item-index" };
21
- var _hoisted_9 = { class: "m-editor-history-list-substep-desc" };
22
- var _hoisted_10 = {
27
+ var _hoisted_11 = ["title", "onClick"];
28
+ var _hoisted_12 = { class: "m-editor-history-list-item-index" };
29
+ var _hoisted_13 = { class: "m-editor-history-list-substep-desc" };
30
+ var _hoisted_14 = {
23
31
  key: 0,
24
- class: "m-editor-history-list-item-current"
32
+ class: "m-editor-history-list-item-saved",
33
+ title: "该记录为最近一次保存的状态"
25
34
  };
26
- var _hoisted_11 = ["onClick"];
27
- var _hoisted_12 = ["onClick"];
28
- var GroupRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
35
+ var _hoisted_15 = {
36
+ key: 1,
37
+ class: "m-editor-history-list-item-actions"
38
+ };
39
+ var _hoisted_16 = ["onClick"];
40
+ var _hoisted_17 = ["onClick"];
41
+ var _hoisted_18 = ["onClick"];
42
+ var _hoisted_19 = ["title"];
43
+ var _hoisted_20 = ["title"];
44
+ var _hoisted_21 = ["title"];
45
+ var GroupRow_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
29
46
  name: "MEditorHistoryListGroupRow",
30
47
  __name: "GroupRow",
31
48
  props: {
32
- groupKey: {},
33
- applied: { type: Boolean },
34
- merged: { type: Boolean },
35
- opType: {},
36
- desc: {},
37
- stepCount: {},
38
- subSteps: {},
49
+ group: {},
39
50
  expanded: { type: Boolean },
40
- isCurrent: { type: Boolean }
51
+ gotoEnabled: {
52
+ type: Boolean,
53
+ default: true
54
+ },
55
+ selectEnabled: {
56
+ type: Boolean,
57
+ default: false
58
+ }
41
59
  },
42
60
  emits: [
43
61
  "toggle",
44
62
  "goto",
45
63
  "diff-step",
46
- "revert-step"
64
+ "revert-step",
65
+ "select"
47
66
  ],
48
67
  setup(__props, { emit: __emit }) {
49
68
  const props = __props;
50
69
  const emit = __emit;
51
- /** 单步组:头部可点击 goto;合并组:头部可点击切换展开。当前组(isCurrent)的单步组头部不可点击。 */
52
- const isHeadClickable = computed(() => {
53
- if (props.merged) return true;
54
- return !props.isCurrent;
55
- });
70
+ /** 子步数大于 1 即为合并组:决定是否展示合并标记与可展开的子步列表。 */
71
+ const merged = computed(() => props.group.subSteps.length > 1);
72
+ /** 组内 step 总数,仅在合并组时显示为 "合并 N 步"。 */
73
+ const stepCount = computed(() => props.group.subSteps.length);
74
+ /**
75
+ * 头部可点击的场景:
76
+ * - 合并组:点击切换展开 / 收起;
77
+ * - 开启 `selectEnabled`(页面 tab):点击选中对应节点。
78
+ * 单步组的跳转仍由头部的「回到」按钮触发。
79
+ */
80
+ const isHeadClickable = computed(() => merged.value || props.selectEnabled);
56
81
  const headTitle = computed(() => {
57
- if (props.merged) return props.expanded ? "点击收起子步" : "点击展开子步";
58
- if (props.isCurrent) return "当前所在记录";
59
- return "点击跳转到该记录";
82
+ if (merged.value) {
83
+ const expandHint = props.expanded ? "点击收起子步" : "点击展开子步";
84
+ return props.selectEnabled ? `${expandHint}(并选中该节点)` : expandHint;
85
+ }
86
+ if (props.selectEnabled) return "点击选中该节点";
87
+ if (props.group.isCurrent) return "当前所在记录";
88
+ return "";
60
89
  });
61
90
  /**
62
- * 头部点击行为分流:
63
- * - 合并组:仅切换展开 / 收起,不触发 goto;
64
- * - 单步组:跳转到该唯一步骤;当前组忽略点击。
91
+ * 头部点击行为:
92
+ * - 开启 selectEnabled 时,发出 select(携带组内首步 index,上层据此选中节点);
93
+ * - 合并组同时切换展开 / 收起。
65
94
  */
66
95
  const onHeadClick = () => {
67
- if (props.merged) {
68
- emit("toggle", props.groupKey);
69
- return;
70
- }
71
- if (props.isCurrent) return;
72
- if (!props.subSteps.length) return;
73
- emit("goto", props.subSteps[0].index);
96
+ if (props.selectEnabled && props.group.subSteps.length) emit("select", props.group.subSteps[0].index);
97
+ if (merged.value) emit("toggle", props.group.key);
74
98
  };
75
- const onSubStepClick = (s) => {
76
- if (s.isCurrent) return;
77
- emit("goto", s.index);
99
+ const onGotoClick = (index) => {
100
+ if (!props.gotoEnabled) return;
101
+ emit("goto", index);
78
102
  };
103
+ /** 点击子步行:开启 selectEnabled 时选中该子步对应的节点。 */
104
+ const onSubStepClick = (index) => {
105
+ if (!props.selectEnabled) return;
106
+ emit("select", index);
107
+ };
108
+ const subStepTitle = (s) => {
109
+ if (props.selectEnabled) return "点击选中该节点";
110
+ if (s.isCurrent) return "当前所在记录";
111
+ return "";
112
+ };
113
+ /**
114
+ * 头部是否展示「已保存」标记:
115
+ * - 单步组:取该唯一子步的 saved;
116
+ * - 合并组:组内任一子步为已保存即在头部提示(具体落在哪一步可展开查看)。
117
+ */
118
+ const headSaved = computed(() => merged.value ? props.group.subSteps.some((s) => s.saved) : Boolean(props.group.subSteps[0]?.saved));
79
119
  /** 单步组头部是否展示"查看差异"入口:要求该唯一子步本身可对比。 */
80
- const headDiffable = computed(() => !props.merged && Boolean(props.subSteps[0]?.diffable));
120
+ const headDiffable = computed(() => !merged.value && Boolean(props.group.subSteps[0]?.diffable));
81
121
  /** 单步组头部是否展示"回滚"入口:要求该唯一子步本身可回滚(已应用)。 */
82
- const headRevertable = computed(() => !props.merged && Boolean(props.subSteps[0]?.revertable));
122
+ const headRevertable = computed(() => !merged.value && Boolean(props.group.subSteps[0]?.revertable));
123
+ /** 单步组头部是否展示"回到"入口:可跳转、非当前、且存在唯一子步。 */
124
+ const canHeadGoto = computed(() => !merged.value && props.gotoEnabled && !props.group.isCurrent && props.group.subSteps.length > 0);
83
125
  /**
84
126
  * 合并组展开后的子步渲染顺序:与外层分组列表保持一致——倒序展示(最新的子步在最上方)。
85
127
  * 外层 page tab / bucket 都已对 groups 做了 reverse,子步沿用同样的视觉规则更直观。
86
128
  * 注意:仅用于渲染,原 `subSteps` 保持时间正序,`headIndexLabel` 等基于首尾索引的展示语义不变。
87
129
  */
88
- const subStepsDisplay = computed(() => props.subSteps.slice().reverse());
130
+ const subStepsDisplay = computed(() => props.group.subSteps.slice().reverse());
89
131
  /**
90
132
  * 头部索引展示:
91
- * - 单步组(merged=false):显示该唯一 step 的编号,如 `#5`;
133
+ * - 单步组(非合并):显示该唯一 step 的编号,如 `#5`;
92
134
  * - 合并组:显示组内 step 的编号范围,如 `#3-#7`(首尾相同则退化为 `#5`)。
93
135
  *
94
136
  * 这里展示的是 step.index + 1(与子步列表 `#{{ s.index + 1 }}` 保持一致),从 1 起编号更符合直觉。
95
137
  */
96
138
  const headIndexLabel = computed(() => {
97
- const list = props.subSteps;
139
+ const list = props.group.subSteps;
98
140
  if (!list.length) return "";
99
141
  const first = list[0].index + 1;
100
142
  const last = list[list.length - 1].index + 1;
101
- if (!props.merged || first === last) return `#${first}`;
143
+ if (!merged.value || first === last) return `#${first}`;
102
144
  return `#${first}-#${last}`;
103
145
  });
104
146
  const headIndexTitle = computed(() => {
105
- if (!props.merged) return `历史步骤编号 #${props.subSteps[0]?.index + 1}`;
106
- return `合并了第 ${props.subSteps[0]?.index + 1} 至第 ${props.subSteps[props.subSteps.length - 1]?.index + 1} 共 ${props.subSteps.length} 条历史步骤`;
147
+ const list = props.group.subSteps;
148
+ if (!merged.value) return `历史步骤编号 #${list[0]?.index + 1}`;
149
+ return `合并了第 ${list[0]?.index + 1} 至第 ${list[list.length - 1]?.index + 1} 共 ${list.length} 条历史步骤`;
107
150
  });
108
151
  const onDiffClick = (index) => {
109
152
  emit("diff-step", index);
@@ -113,9 +156,9 @@ var GroupRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
113
156
  };
114
157
  return (_ctx, _cache) => {
115
158
  return openBlock(), createElementBlock("li", { class: normalizeClass(["m-editor-history-list-item m-editor-history-list-group", {
116
- "is-undone": !__props.applied,
117
- "is-merged": __props.merged,
118
- "is-current": __props.isCurrent
159
+ "is-undone": !__props.group.applied,
160
+ "is-merged": merged.value,
161
+ "is-current": __props.group.isCurrent
119
162
  }]) }, [createElementVNode("div", {
120
163
  class: normalizeClass(["m-editor-history-list-group-head", { "is-clickable": isHeadClickable.value }]),
121
164
  title: headTitle.value,
@@ -125,53 +168,99 @@ var GroupRow_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defin
125
168
  class: "m-editor-history-list-item-index",
126
169
  title: headIndexTitle.value
127
170
  }, toDisplayString(headIndexLabel.value), 9, _hoisted_2),
128
- createElementVNode("span", { class: normalizeClass(["m-editor-history-list-item-op", `op-${__props.opType}`]) }, toDisplayString(unref(opLabel)(__props.opType)), 3),
129
- createElementVNode("span", _hoisted_3, toDisplayString(__props.desc), 1),
130
- __props.isCurrent ? (openBlock(), createElementBlock("span", _hoisted_4, "当前")) : createCommentVNode("v-if", true),
131
- !__props.merged && headDiffable.value ? (openBlock(), createElementBlock("span", {
132
- key: 1,
133
- class: "m-editor-history-list-item-diff",
134
- title: "查看修改差异",
135
- onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onDiffClick(__props.subSteps[0].index), ["stop"]))
136
- }, "查看差异")) : createCommentVNode("v-if", true),
137
- __props.merged ? (openBlock(), createElementBlock("span", _hoisted_5, "合并 " + toDisplayString(__props.stepCount) + " 步", 1)) : createCommentVNode("v-if", true),
138
- !__props.merged && headRevertable.value ? (openBlock(), createElementBlock("span", {
171
+ createElementVNode("span", { class: normalizeClass(["m-editor-history-list-item-op", `op-${__props.group.opType}`]) }, toDisplayString(unref(opLabel)(__props.group.opType)), 3),
172
+ createElementVNode("span", _hoisted_3, toDisplayString(__props.group.desc), 1),
173
+ headSaved.value ? (openBlock(), createElementBlock("span", _hoisted_4, "已保存")) : createCommentVNode("v-if", true),
174
+ !merged.value && (headRevertable.value || headDiffable.value || canHeadGoto.value) ? (openBlock(), createElementBlock("span", _hoisted_5, [
175
+ headRevertable.value ? (openBlock(), createElementBlock("span", {
176
+ key: 0,
177
+ class: "m-editor-history-list-item-revert",
178
+ title: "将该步骤的修改作为一次新操作反向应用(不影响后续历史)",
179
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => onRevertClick(__props.group.subSteps[0].index), ["stop"]))
180
+ }, "回滚")) : createCommentVNode("v-if", true),
181
+ canHeadGoto.value ? (openBlock(), createElementBlock("span", {
182
+ key: 1,
183
+ class: "m-editor-history-list-item-goto",
184
+ title: "回到该记录",
185
+ onClick: _cache[1] || (_cache[1] = withModifiers(($event) => onGotoClick(__props.group.subSteps[0].index), ["stop"]))
186
+ }, "回到")) : createCommentVNode("v-if", true),
187
+ headDiffable.value ? (openBlock(), createElementBlock("span", {
188
+ key: 2,
189
+ class: "m-editor-history-list-item-diff",
190
+ title: "查看修改差异",
191
+ onClick: _cache[2] || (_cache[2] = withModifiers(($event) => onDiffClick(__props.group.subSteps[0].index), ["stop"]))
192
+ }, "查看差异")) : createCommentVNode("v-if", true)
193
+ ])) : createCommentVNode("v-if", true),
194
+ !merged.value && unref(sourceLabel)(__props.group.source) ? (openBlock(), createElementBlock("span", {
195
+ key: 2,
196
+ class: "m-editor-history-list-item-source",
197
+ title: `操作途径:${unref(sourceLabel)(__props.group.source)}`
198
+ }, toDisplayString(unref(sourceLabel)(__props.group.source)), 9, _hoisted_6)) : createCommentVNode("v-if", true),
199
+ !merged.value && __props.group.operator ? (openBlock(), createElementBlock("span", {
139
200
  key: 3,
140
- class: "m-editor-history-list-item-revert",
141
- title: "将该步骤的修改作为一次新操作反向应用(不影响后续历史)",
142
- onClick: _cache[1] || (_cache[1] = withModifiers(($event) => onRevertClick(__props.subSteps[0].index), ["stop"]))
143
- }, "回滚")) : createCommentVNode("v-if", true),
144
- __props.merged ? (openBlock(), createElementBlock("span", {
201
+ class: "m-editor-history-list-item-operator",
202
+ title: `操作人:${__props.group.operator}`
203
+ }, toDisplayString(__props.group.operator), 9, _hoisted_7)) : createCommentVNode("v-if", true),
204
+ !merged.value && __props.group.time ? (openBlock(), createElementBlock("span", {
145
205
  key: 4,
206
+ class: "m-editor-history-list-item-time",
207
+ title: __props.group.timeTitle || __props.group.time
208
+ }, toDisplayString(__props.group.time), 9, _hoisted_8)) : createCommentVNode("v-if", true),
209
+ merged.value ? (openBlock(), createElementBlock("span", _hoisted_9, "合并 " + toDisplayString(stepCount.value) + " 步", 1)) : createCommentVNode("v-if", true),
210
+ merged.value ? (openBlock(), createElementBlock("span", {
211
+ key: 6,
146
212
  class: normalizeClass(["m-editor-history-list-group-toggle", { "is-expanded": __props.expanded }])
147
213
  }, "▾", 2)) : createCommentVNode("v-if", true)
148
- ], 10, _hoisted_1), __props.merged && __props.expanded ? (openBlock(), createElementBlock("ul", _hoisted_6, [(openBlock(true), createElementBlock(Fragment, null, renderList(subStepsDisplay.value, (s) => {
214
+ ], 10, _hoisted_1), merged.value && __props.expanded ? (openBlock(), createElementBlock("ul", _hoisted_10, [(openBlock(true), createElementBlock(Fragment, null, renderList(subStepsDisplay.value, (s) => {
149
215
  return openBlock(), createElementBlock("li", {
150
216
  key: s.index,
151
217
  class: normalizeClass({
152
218
  "is-undone": !s.applied,
153
219
  "is-current": s.isCurrent,
154
- "is-clickable": !s.isCurrent
220
+ "is-clickable": __props.selectEnabled
155
221
  }),
156
- title: s.isCurrent ? "当前所在记录" : "点击跳转到该记录",
157
- onClick: ($event) => onSubStepClick(s)
222
+ title: subStepTitle(s),
223
+ onClick: ($event) => onSubStepClick(s.index)
158
224
  }, [
159
- createElementVNode("span", _hoisted_8, "#" + toDisplayString(s.index + 1), 1),
160
- createElementVNode("span", _hoisted_9, toDisplayString(s.desc), 1),
161
- s.isCurrent ? (openBlock(), createElementBlock("span", _hoisted_10, "当前")) : createCommentVNode("v-if", true),
162
- s.diffable ? (openBlock(), createElementBlock("span", {
163
- key: 1,
164
- class: "m-editor-history-list-item-diff",
165
- title: "查看修改差异",
166
- onClick: withModifiers(($event) => onDiffClick(s.index), ["stop"])
167
- }, "查看差异", 8, _hoisted_11)) : createCommentVNode("v-if", true),
168
- s.revertable ? (openBlock(), createElementBlock("span", {
225
+ createElementVNode("span", _hoisted_12, "#" + toDisplayString(s.index + 1), 1),
226
+ createElementVNode("span", _hoisted_13, toDisplayString(s.desc), 1),
227
+ s.saved ? (openBlock(), createElementBlock("span", _hoisted_14, "已保存")) : createCommentVNode("v-if", true),
228
+ s.revertable || s.diffable || __props.gotoEnabled && !s.isCurrent ? (openBlock(), createElementBlock("span", _hoisted_15, [
229
+ s.revertable ? (openBlock(), createElementBlock("span", {
230
+ key: 0,
231
+ class: "m-editor-history-list-item-revert",
232
+ title: "将该步骤的修改作为一次新操作反向应用(不影响后续历史)",
233
+ onClick: withModifiers(($event) => onRevertClick(s.index), ["stop"])
234
+ }, "回滚", 8, _hoisted_16)) : createCommentVNode("v-if", true),
235
+ __props.gotoEnabled && !s.isCurrent ? (openBlock(), createElementBlock("span", {
236
+ key: 1,
237
+ class: "m-editor-history-list-item-goto",
238
+ title: "回到该记录",
239
+ onClick: withModifiers(($event) => onGotoClick(s.index), ["stop"])
240
+ }, "回到", 8, _hoisted_17)) : createCommentVNode("v-if", true),
241
+ s.diffable ? (openBlock(), createElementBlock("span", {
242
+ key: 2,
243
+ class: "m-editor-history-list-item-diff",
244
+ title: "查看修改差异",
245
+ onClick: withModifiers(($event) => onDiffClick(s.index), ["stop"])
246
+ }, "查看差异", 8, _hoisted_18)) : createCommentVNode("v-if", true)
247
+ ])) : createCommentVNode("v-if", true),
248
+ unref(sourceLabel)(s.source) ? (openBlock(), createElementBlock("span", {
169
249
  key: 2,
170
- class: "m-editor-history-list-item-revert",
171
- title: "将该步骤的修改作为一次新操作反向应用(不影响后续历史)",
172
- onClick: withModifiers(($event) => onRevertClick(s.index), ["stop"])
173
- }, "回滚", 8, _hoisted_12)) : createCommentVNode("v-if", true)
174
- ], 10, _hoisted_7);
250
+ class: "m-editor-history-list-item-source",
251
+ title: `操作途径:${unref(sourceLabel)(s.source)}`
252
+ }, toDisplayString(unref(sourceLabel)(s.source)), 9, _hoisted_19)) : createCommentVNode("v-if", true),
253
+ s.operator ? (openBlock(), createElementBlock("span", {
254
+ key: 3,
255
+ class: "m-editor-history-list-item-operator",
256
+ title: `操作人:${s.operator}`
257
+ }, toDisplayString(s.operator), 9, _hoisted_20)) : createCommentVNode("v-if", true),
258
+ s.time ? (openBlock(), createElementBlock("span", {
259
+ key: 4,
260
+ class: "m-editor-history-list-item-time",
261
+ title: s.timeTitle || s.time
262
+ }, toDisplayString(s.time), 9, _hoisted_21)) : createCommentVNode("v-if", true)
263
+ ], 10, _hoisted_11);
175
264
  }), 128))])) : createCommentVNode("v-if", true)], 2);
176
265
  };
177
266
  }
@@ -1,27 +1,48 @@
1
1
  import CodeEditor_default from "../CodeEditor.js";
2
2
  import CompareForm_default from "../../components/CompareForm.js";
3
3
  import { TMagicButton, TMagicDialog, TMagicRadioButton, TMagicRadioGroup, TMagicTag } from "@tmagic/design";
4
- import { Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, ref, toDisplayString, unref, watch, withCtx } from "vue";
4
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, ref, toDisplayString, unref, watch, withCtx } from "vue";
5
5
  import { isEqual } from "lodash-es";
6
6
  //#region packages/editor/src/layouts/history-list/HistoryDiffDialog.vue?vue&type=script&setup=true&lang.ts
7
7
  var _hoisted_1 = {
8
8
  key: 0,
9
9
  class: "m-editor-history-diff-dialog-body"
10
10
  };
11
- var _hoisted_2 = { class: "m-editor-history-diff-dialog-header" };
12
- var _hoisted_3 = { class: "m-editor-history-diff-dialog-target" };
13
- var _hoisted_4 = { class: "m-editor-history-diff-dialog-controls" };
14
- var _hoisted_5 = { class: "m-editor-history-diff-dialog-legend" };
15
- var _hoisted_6 = {
11
+ var _hoisted_2 = {
12
+ key: 0,
13
+ class: "m-editor-history-diff-dialog-notice"
14
+ };
15
+ var _hoisted_3 = { class: "m-editor-history-diff-dialog-header" };
16
+ var _hoisted_4 = { class: "m-editor-history-diff-dialog-target" };
17
+ var _hoisted_5 = { class: "m-editor-history-diff-dialog-controls" };
18
+ var _hoisted_6 = { class: "m-editor-history-diff-dialog-legend" };
19
+ var _hoisted_7 = {
16
20
  key: 0,
17
21
  class: "m-editor-history-diff-dialog-tip"
18
22
  };
19
- 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({
20
24
  name: "MEditorHistoryDiffDialog",
21
25
  __name: "HistoryDiffDialog",
22
- props: { extendState: { type: Function } },
23
- setup(__props, { expose: __expose }) {
24
- /** 差异对话框的入参 */
26
+ props: {
27
+ services: {},
28
+ extendState: {},
29
+ loadConfig: {},
30
+ width: { default: "900px" },
31
+ size: {},
32
+ isConfirm: { type: Boolean },
33
+ onConfirm: {},
34
+ selfDiffFieldTypes: {},
35
+ compareFormState: {}
36
+ },
37
+ emits: ["close"],
38
+ setup(__props, { expose: __expose, emit: __emit }) {
39
+ const props = __props;
40
+ const emit = __emit;
41
+ /**
42
+ * 差异对比模式:
43
+ * - before:该步骤修改前 vs 该步骤修改后(默认行为,体现这一步带来的变化)
44
+ * - current:该步骤修改后 vs 当前最新值(用于查看「该步骤之后是否还被改过」)
45
+ */
25
46
  const visible = ref(false);
26
47
  const payload = ref(null);
27
48
  const mode = ref("before");
@@ -43,7 +64,22 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
43
64
  scrollBeyondLastLine: false,
44
65
  hideUnchangedRegions: { enabled: true }
45
66
  };
67
+ const dialogTitle = computed(() => props.onConfirm ? "确认回滚" : "查看修改差异");
46
68
  const hasCurrent = computed(() => payload.value?.currentValue !== void 0 && payload.value?.currentValue !== null);
69
+ /** 是否存在该步「修改后的值」:不存在(如仅删除)时「与修改前对比」无意义,置灰禁用。 */
70
+ const hasValue = computed(() => payload.value?.value !== void 0 && payload.value?.value !== null);
71
+ /** 指定模式当前是否可用:before 依赖「修改后的值」,current 依赖「当前值」。 */
72
+ const isModeAvailable = (m) => m === "current" ? hasCurrent.value : hasValue.value;
73
+ /**
74
+ * 计算 open 时的初始对比模式:
75
+ * - 调用方通过 payload.mode 指定且该模式可用时,优先使用指定模式;
76
+ * - 否则没有「修改后的值」但有当前值时(「与修改前对比」不可用),默认进入「与当前对比」;
77
+ * - 其余情况默认「与修改前对比」。
78
+ */
79
+ const resolveInitialMode = (specified) => {
80
+ if (specified && isModeAvailable(specified)) return specified;
81
+ return !hasValue.value && hasCurrent.value ? "current" : "before";
82
+ };
47
83
  /** 左侧(旧/参照)值 */
48
84
  const leftValue = computed(() => {
49
85
  if (!payload.value) return {};
@@ -63,63 +99,112 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
63
99
  if (mode.value !== "current" || !payload.value) return false;
64
100
  return isEqual(payload.value.value, payload.value.currentValue);
65
101
  });
102
+ /** confirm() 的 resolve,仅在「等待用户确认回滚」期间存在 */
103
+ let confirmResolve = null;
104
+ const onConfirmClick = () => {
105
+ props.onConfirm?.();
106
+ confirmResolve?.(true);
107
+ confirmResolve = null;
108
+ visible.value = false;
109
+ };
66
110
  const targetText = computed(() => {
67
111
  if (!payload.value) return "";
68
- const prefix = {
112
+ const categoryText = {
69
113
  node: "节点",
70
114
  "data-source": "数据源",
71
115
  "code-block": "代码块"
72
- }[payload.value.category] || "";
116
+ };
117
+ const { category } = payload.value;
118
+ const prefix = category ? categoryText[category] : "";
73
119
  const label = payload.value.targetLabel || payload.value.type || "";
74
120
  const { id } = payload.value;
75
121
  return [prefix, id !== void 0 && id !== "" ? `${label}(${id})` : label].filter(Boolean).join(":");
76
122
  });
77
123
  const open = (p) => {
78
124
  payload.value = p;
79
- mode.value = "before";
125
+ mode.value = resolveInitialMode(p.mode);
80
126
  viewMode.value = "form";
81
127
  visible.value = true;
82
128
  };
129
+ /**
130
+ * 以 Promise 形式打开确认回滚弹窗:
131
+ * - 用户点击「确定回滚」时 resolve(true);
132
+ * - 取消 / 关闭 / 按 Esc 等其他方式关闭弹窗时 resolve(false)。
133
+ *
134
+ * 同一时刻只允许一个待确认流程,重复调用会先 resolve(false) 掉上一个。
135
+ */
136
+ const confirm = (p) => {
137
+ confirmResolve?.(false);
138
+ confirmResolve = null;
139
+ return new Promise((resolve) => {
140
+ confirmResolve = resolve;
141
+ open(p);
142
+ });
143
+ };
83
144
  const close = () => {
84
145
  visible.value = false;
85
146
  };
86
147
  watch(visible, (v) => {
87
- if (!v) payload.value = null;
148
+ if (!v) {
149
+ payload.value = null;
150
+ confirmResolve?.(false);
151
+ confirmResolve = null;
152
+ }
88
153
  });
154
+ const onClose = () => {
155
+ emit("close");
156
+ };
89
157
  __expose({
90
158
  open,
159
+ confirm,
91
160
  close
92
161
  });
93
162
  return (_ctx, _cache) => {
94
- return openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(TMagicDialog), {
163
+ return openBlock(), createBlock(unref(TMagicDialog), {
95
164
  modelValue: visible.value,
96
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => visible.value = $event),
165
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => visible.value = $event),
97
166
  class: "m-editor-history-diff-dialog",
98
- title: "查看修改差异",
99
- width: "900px",
167
+ title: dialogTitle.value,
100
168
  top: "5vh",
101
169
  "destroy-on-close": "",
102
- "append-to-body": ""
170
+ "append-to-body": "",
171
+ width: __props.width,
172
+ onClose
103
173
  }, {
104
- footer: withCtx(() => [createVNode(unref(TMagicButton), {
174
+ footer: withCtx(() => [__props.isConfirm ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [createVNode(unref(TMagicButton), {
105
175
  size: "small",
106
176
  onClick: _cache[2] || (_cache[2] = ($event) => visible.value = false)
107
177
  }, {
108
- default: withCtx(() => [..._cache[9] || (_cache[9] = [createTextVNode("关闭", -1)])]),
178
+ default: withCtx(() => [..._cache[10] || (_cache[10] = [createTextVNode("取消", -1)])]),
179
+ _: 1
180
+ }), createVNode(unref(TMagicButton), {
181
+ size: "small",
182
+ type: "primary",
183
+ onClick: onConfirmClick
184
+ }, {
185
+ default: withCtx(() => [..._cache[11] || (_cache[11] = [createTextVNode("确定回滚", -1)])]),
109
186
  _: 1
110
- })]),
111
- default: withCtx(() => [payload.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
112
- createElementVNode("div", _hoisted_2, [createElementVNode("span", _hoisted_3, toDisplayString(targetText.value), 1), createElementVNode("div", _hoisted_4, [createVNode(unref(TMagicRadioGroup), {
187
+ })], 64)) : (openBlock(), createBlock(unref(TMagicButton), {
188
+ key: 1,
189
+ size: "small",
190
+ onClick: _cache[3] || (_cache[3] = ($event) => visible.value = false)
191
+ }, {
192
+ default: withCtx(() => [..._cache[12] || (_cache[12] = [createTextVNode("关闭", -1)])]),
193
+ _: 1
194
+ }))]),
195
+ default: withCtx(() => [payload.value && visible.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
196
+ __props.onConfirm ? (openBlock(), createElementBlock("div", _hoisted_2, "仅回滚有差异的字段")) : createCommentVNode("v-if", true),
197
+ createElementVNode("div", _hoisted_3, [createElementVNode("span", _hoisted_4, toDisplayString(targetText.value), 1), createElementVNode("div", _hoisted_5, [createVNode(unref(TMagicRadioGroup), {
113
198
  modelValue: viewMode.value,
114
199
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => viewMode.value = $event),
115
200
  size: "small",
116
201
  class: "m-editor-history-diff-dialog-view"
117
202
  }, {
118
203
  default: withCtx(() => [createVNode(unref(TMagicRadioButton), { value: "form" }, {
119
- default: withCtx(() => [..._cache[4] || (_cache[4] = [createTextVNode("表单对比", -1)])]),
204
+ default: withCtx(() => [..._cache[5] || (_cache[5] = [createTextVNode("表单对比", -1)])]),
120
205
  _: 1
121
206
  }), createVNode(unref(TMagicRadioButton), { value: "code" }, {
122
- default: withCtx(() => [..._cache[5] || (_cache[5] = [createTextVNode("源码对比", -1)])]),
207
+ default: withCtx(() => [..._cache[6] || (_cache[6] = [createTextVNode("源码对比", -1)])]),
123
208
  _: 1
124
209
  })]),
125
210
  _: 1
@@ -129,19 +214,22 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
129
214
  size: "small",
130
215
  class: "m-editor-history-diff-dialog-mode"
131
216
  }, {
132
- default: withCtx(() => [createVNode(unref(TMagicRadioButton), { value: "before" }, {
133
- default: withCtx(() => [..._cache[6] || (_cache[6] = [createTextVNode("与修改前对比", -1)])]),
217
+ default: withCtx(() => [createVNode(unref(TMagicRadioButton), {
218
+ value: "before",
219
+ disabled: !hasValue.value
220
+ }, {
221
+ default: withCtx(() => [..._cache[7] || (_cache[7] = [createTextVNode("与修改前对比", -1)])]),
134
222
  _: 1
135
- }), createVNode(unref(TMagicRadioButton), {
223
+ }, 8, ["disabled"]), createVNode(unref(TMagicRadioButton), {
136
224
  value: "current",
137
225
  disabled: !hasCurrent.value
138
226
  }, {
139
- default: withCtx(() => [..._cache[7] || (_cache[7] = [createTextVNode("与当前对比", -1)])]),
227
+ default: withCtx(() => [..._cache[8] || (_cache[8] = [createTextVNode("与当前对比", -1)])]),
140
228
  _: 1
141
229
  }, 8, ["disabled"])]),
142
230
  _: 1
143
231
  }, 8, ["modelValue"])])]),
144
- createElementVNode("div", _hoisted_5, [
232
+ createElementVNode("div", _hoisted_6, [
145
233
  createVNode(unref(TMagicTag), {
146
234
  size: "small",
147
235
  type: "danger"
@@ -149,7 +237,7 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
149
237
  default: withCtx(() => [createTextVNode(toDisplayString(leftLabel.value), 1)]),
150
238
  _: 1
151
239
  }),
152
- _cache[8] || (_cache[8] = createElementVNode("span", { class: "m-editor-history-diff-dialog-arrow" }, "→", -1)),
240
+ _cache[9] || (_cache[9] = createElementVNode("span", { class: "m-editor-history-diff-dialog-arrow" }, "→", -1)),
153
241
  createVNode(unref(TMagicTag), {
154
242
  size: "small",
155
243
  type: "success"
@@ -157,16 +245,21 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
157
245
  default: withCtx(() => [createTextVNode(toDisplayString(rightLabel.value), 1)]),
158
246
  _: 1
159
247
  }),
160
- mode.value === "current" && isSameAsCurrent.value ? (openBlock(), createElementBlock("span", _hoisted_6, " 当前值与该步修改后一致,无差异 ")) : createCommentVNode("v-if", true)
248
+ mode.value === "current" && isSameAsCurrent.value ? (openBlock(), createElementBlock("span", _hoisted_7, " 当前值与该步修改后一致,无差异 ")) : createCommentVNode("v-if", true)
161
249
  ]),
162
250
  viewMode.value === "form" ? (openBlock(), createBlock(CompareForm_default, {
163
- key: 0,
251
+ key: 1,
164
252
  category: payload.value.category,
165
253
  type: payload.value.type,
166
254
  "data-source-type": payload.value.dataSourceType,
167
255
  value: rightValue.value,
168
256
  "last-value": leftValue.value,
257
+ "base-form-state": __props.compareFormState,
169
258
  "extend-state": __props.extendState,
259
+ "load-config": __props.loadConfig,
260
+ "self-diff-field-types": __props.selfDiffFieldTypes,
261
+ services: props.services,
262
+ size: props.size,
170
263
  height: "70vh"
171
264
  }, null, 8, [
172
265
  "category",
@@ -174,9 +267,14 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
174
267
  "data-source-type",
175
268
  "value",
176
269
  "last-value",
177
- "extend-state"
270
+ "base-form-state",
271
+ "extend-state",
272
+ "load-config",
273
+ "self-diff-field-types",
274
+ "services",
275
+ "size"
178
276
  ])) : (openBlock(), createBlock(CodeEditor_default, {
179
- key: 1,
277
+ key: 2,
180
278
  type: "diff",
181
279
  language: "json",
182
280
  "init-values": leftValue.value,
@@ -187,7 +285,11 @@ var HistoryDiffDialog_vue_vue_type_script_setup_true_lang_default = /* @__PURE__
187
285
  }, null, 8, ["init-values", "modified-values"]))
188
286
  ])) : createCommentVNode("v-if", true)]),
189
287
  _: 1
190
- }, 8, ["modelValue"])]);
288
+ }, 8, [
289
+ "modelValue",
290
+ "title",
291
+ "width"
292
+ ]);
191
293
  };
192
294
  }
193
295
  });