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

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 (308) 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 +156 -155
  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/events.js +2 -2
  138. package/dist/es/services/history.js +350 -386
  139. package/dist/es/services/keybinding.js +6 -6
  140. package/dist/es/services/props.js +3 -2
  141. package/dist/es/services/storage.js +2 -2
  142. package/dist/es/services/ui.js +10 -2
  143. package/dist/es/style.css +549 -113
  144. package/dist/es/utils/config.js +4 -1
  145. package/dist/es/utils/const.js +2 -2
  146. package/dist/es/utils/content-menu.js +19 -11
  147. package/dist/es/utils/data-source/index.js +34 -11
  148. package/dist/es/utils/dep/collect-worker-client.js +114 -0
  149. package/dist/es/utils/dep/idle-task.js +70 -22
  150. package/dist/es/utils/dep/worker.js +1 -1
  151. package/dist/es/utils/editor.js +103 -49
  152. package/dist/es/utils/event.js +135 -0
  153. package/dist/es/utils/history.js +220 -0
  154. package/dist/es/utils/indexed-db.js +86 -0
  155. package/dist/es/utils/monaco-editor.js +22 -6
  156. package/dist/es/utils/operator.js +2 -2
  157. package/dist/es/utils/props.js +114 -33
  158. package/dist/es/utils/type-match-rules.js +367 -0
  159. package/dist/es/utils/undo-redo.js +60 -1
  160. package/dist/style.css +549 -113
  161. package/dist/themes/magic-admin.css +3028 -0
  162. package/dist/tmagic-editor.umd.cjs +14403 -10121
  163. package/package.json +8 -8
  164. package/src/Editor.vue +43 -2
  165. package/src/components/CodeBlockEditor.vue +3 -0
  166. package/src/components/CompareForm.vue +18 -146
  167. package/src/components/ContentMenu.vue +44 -8
  168. package/src/components/FloatingBox.vue +84 -9
  169. package/src/components/ScrollBar.vue +0 -67
  170. package/src/components/ToolButton.vue +2 -2
  171. package/src/components/ViewForm.vue +55 -0
  172. package/src/editorProps.ts +30 -0
  173. package/src/fields/Code.vue +10 -2
  174. package/src/fields/CodeLink.vue +2 -5
  175. package/src/fields/CodeSelect.vue +54 -40
  176. package/src/fields/CodeSelectCol.vue +8 -1
  177. package/src/fields/CondOpSelect.vue +2 -24
  178. package/src/fields/DataSourceFieldSelect/FieldSelect.vue +16 -2
  179. package/src/fields/DataSourceFieldSelect/Index.vue +14 -5
  180. package/src/fields/DataSourceFields.vue +42 -8
  181. package/src/fields/DataSourceInput.vue +10 -28
  182. package/src/fields/DataSourceMethodSelect.vue +9 -4
  183. package/src/fields/DataSourceMethods.vue +42 -21
  184. package/src/fields/DataSourceMocks.vue +3 -0
  185. package/src/fields/DisplayConds.vue +18 -1
  186. package/src/fields/EventSelect.vue +152 -166
  187. package/src/fields/StyleSetter/Index.vue +3 -12
  188. package/src/fields/StyleSetter/components/Border.vue +15 -6
  189. package/src/fields/StyleSetter/icons/align-items/Center.vue +19 -0
  190. package/src/fields/StyleSetter/icons/align-items/FlexEnd.vue +19 -0
  191. package/src/fields/StyleSetter/icons/align-items/FlexStart.vue +19 -0
  192. package/src/fields/StyleSetter/icons/align-items/SpaceAround.vue +34 -0
  193. package/src/fields/StyleSetter/icons/align-items/SpaceBetween.vue +34 -0
  194. package/src/fields/StyleSetter/icons/align-items/index.ts +5 -0
  195. package/src/fields/StyleSetter/icons/background-repeat/NoRepeat.vue +20 -4
  196. package/src/fields/StyleSetter/icons/background-repeat/Repeat.vue +10 -28
  197. package/src/fields/StyleSetter/icons/background-repeat/RepeatX.vue +4 -5
  198. package/src/fields/StyleSetter/icons/background-repeat/RepeatY.vue +4 -5
  199. package/src/fields/StyleSetter/icons/flex-direction/Column.vue +4 -3
  200. package/src/fields/StyleSetter/icons/flex-direction/ColumnReverse.vue +4 -3
  201. package/src/fields/StyleSetter/icons/flex-direction/Row.vue +4 -3
  202. package/src/fields/StyleSetter/icons/flex-direction/RowReverse.vue +4 -3
  203. package/src/fields/StyleSetter/icons/justify-content/Center.vue +5 -2
  204. package/src/fields/StyleSetter/icons/justify-content/FlexEnd.vue +15 -2
  205. package/src/fields/StyleSetter/icons/justify-content/FlexStart.vue +15 -2
  206. package/src/fields/StyleSetter/icons/justify-content/SpaceAround.vue +28 -3
  207. package/src/fields/StyleSetter/icons/justify-content/SpaceBetween.vue +28 -2
  208. package/src/fields/StyleSetter/pro/Background.vue +99 -55
  209. package/src/fields/StyleSetter/pro/Border.vue +9 -11
  210. package/src/fields/StyleSetter/pro/Font.vue +66 -64
  211. package/src/fields/StyleSetter/pro/Layout.vue +211 -139
  212. package/src/fields/StyleSetter/pro/Position.vue +69 -67
  213. package/src/fields/StyleSetter/pro/Transform.vue +23 -25
  214. package/src/fields/UISelect.vue +0 -12
  215. package/src/hooks/index.ts +1 -0
  216. package/src/hooks/use-code-block-edit.ts +4 -3
  217. package/src/hooks/use-compare-form.ts +187 -0
  218. package/src/hooks/use-data-source-edit.ts +2 -2
  219. package/src/hooks/use-stage.ts +5 -3
  220. package/src/icons/DatasourceIcon.vue +7 -0
  221. package/src/index.ts +12 -0
  222. package/src/initService.ts +26 -16
  223. package/src/layouts/CodeEditor.vue +34 -11
  224. package/src/layouts/Framework.vue +15 -8
  225. package/src/layouts/NavMenu.vue +3 -3
  226. package/src/layouts/history-list/Bucket.vue +33 -41
  227. package/src/layouts/history-list/BucketTab.vue +72 -0
  228. package/src/layouts/history-list/GroupRow.vue +190 -93
  229. package/src/layouts/history-list/HistoryDiffDialog.vue +169 -90
  230. package/src/layouts/history-list/HistoryListPanel.vue +191 -95
  231. package/src/layouts/history-list/InitialRow.vue +38 -8
  232. package/src/layouts/history-list/PageTab.vue +67 -43
  233. package/src/layouts/history-list/composables.ts +239 -125
  234. package/src/layouts/history-list/useHistoryList.ts +60 -0
  235. package/src/layouts/history-list/useHistoryRevert.ts +425 -0
  236. package/src/layouts/page-bar/PageBar.vue +4 -2
  237. package/src/layouts/props-panel/FormPanel.vue +72 -6
  238. package/src/layouts/props-panel/PropsPanel.vue +62 -18
  239. package/src/layouts/props-panel/use-style-panel.ts +4 -3
  240. package/src/layouts/sidebar/ComponentListPanel.vue +10 -6
  241. package/src/layouts/sidebar/Sidebar.vue +13 -6
  242. package/src/layouts/sidebar/code-block/CodeBlockList.vue +5 -5
  243. package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +5 -2
  244. package/src/layouts/sidebar/code-block/useContentMenu.ts +14 -2
  245. package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +34 -2
  246. package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +29 -4
  247. package/src/layouts/sidebar/data-source/useContentMenu.ts +14 -2
  248. package/src/layouts/sidebar/layer/LayerMenu.vue +21 -13
  249. package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
  250. package/src/layouts/sidebar/layer/LayerNodeTool.vue +7 -4
  251. package/src/layouts/sidebar/layer/LayerPanel.vue +4 -1
  252. package/src/layouts/sidebar/layer/use-click.ts +3 -3
  253. package/src/layouts/sidebar/layer/use-node-status.ts +2 -2
  254. package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
  255. package/src/layouts/workspace/viewer/Stage.vue +1 -1
  256. package/src/layouts/workspace/viewer/ViewerMenu.vue +15 -15
  257. package/src/plugin.ts +6 -3
  258. package/src/services/codeBlock.ts +152 -47
  259. package/src/services/dataSource.ts +120 -41
  260. package/src/services/dep.ts +292 -47
  261. package/src/services/editor.ts +820 -224
  262. package/src/services/events.ts +3 -3
  263. package/src/services/history.ts +449 -412
  264. package/src/services/keybinding.ts +6 -6
  265. package/src/services/ui.ts +33 -5
  266. package/src/theme/code-block.scss +37 -0
  267. package/src/theme/common/var.scss +1 -1
  268. package/src/theme/component-list-panel.scss +2 -2
  269. package/src/theme/data-source-field.scss +4 -0
  270. package/src/theme/display-conds.scss +11 -0
  271. package/src/theme/event.scss +70 -1
  272. package/src/theme/floating-box.scss +9 -1
  273. package/src/theme/framework.scss +4 -1
  274. package/src/theme/history-list-panel.scss +157 -23
  275. package/src/theme/layer-node-content.scss +14 -0
  276. package/src/theme/nav-menu.scss +5 -1
  277. package/src/theme/page-bar.scss +0 -4
  278. package/src/theme/props-panel.scss +5 -4
  279. package/src/theme/scroll-bar.scss +64 -0
  280. package/src/theme/style-setter/border.scss +17 -5
  281. package/src/theme/theme.scss +4 -0
  282. package/src/theme/themes/magic-admin/index.scss +214 -0
  283. package/src/theme/ui-select.scss +9 -0
  284. package/src/type.ts +668 -124
  285. package/src/utils/config.ts +9 -1
  286. package/src/utils/const.ts +3 -2
  287. package/src/utils/content-menu.ts +20 -11
  288. package/src/utils/data-source/index.ts +32 -12
  289. package/src/utils/dep/collect-worker-client.ts +149 -0
  290. package/src/utils/dep/idle-task.ts +104 -35
  291. package/src/utils/dep/worker.ts +113 -9
  292. package/src/utils/editor.ts +166 -60
  293. package/src/utils/event.ts +237 -0
  294. package/src/utils/history.ts +286 -0
  295. package/src/utils/index.ts +4 -0
  296. package/src/utils/indexed-db.ts +122 -0
  297. package/src/utils/monaco-editor.ts +27 -0
  298. package/src/utils/operator.ts +2 -2
  299. package/src/utils/props.ts +114 -11
  300. package/src/utils/type-match-rules.ts +684 -0
  301. package/src/utils/undo-redo.ts +88 -0
  302. package/types/index.d.ts +1990 -517
  303. package/dist/es/layouts/history-list/CodeBlockTab.js +0 -5
  304. package/dist/es/layouts/history-list/CodeBlockTab.vue_vue_type_script_setup_true_lang.js +0 -62
  305. package/dist/es/layouts/history-list/DataSourceTab.js +0 -5
  306. package/dist/es/layouts/history-list/DataSourceTab.vue_vue_type_script_setup_true_lang.js +0 -62
  307. package/src/layouts/history-list/CodeBlockTab.vue +0 -61
  308. package/src/layouts/history-list/DataSourceTab.vue +0 -61
@@ -4,7 +4,7 @@ import AddButton_default from "./AddButton.js";
4
4
  import PageBarScrollContainer_default from "./PageBarScrollContainer.js";
5
5
  import PageList_default from "./PageList.js";
6
6
  import Search_default from "./Search.js";
7
- import { TMagicIcon, TMagicPopover } from "@tmagic/design";
7
+ import { TMagicIcon, TMagicPopover, tMagicMessageBox } from "@tmagic/design";
8
8
  import { NodeType } from "@tmagic/core";
9
9
  import { Fragment, computed, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, ref, renderList, renderSlot, toDisplayString, unref, useTemplateRef, watch, withCtx } from "vue";
10
10
  import { CaretBottom, Delete, DocumentCopy } from "@element-plus/icons-vue";
@@ -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: {
@@ -54,7 +54,8 @@ var PageBar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
54
54
  top: 0
55
55
  });
56
56
  };
57
- const remove = (node) => {
57
+ const remove = async (node) => {
58
+ await tMagicMessageBox.confirm("确定删除该页面吗?");
58
59
  editorService.remove(node);
59
60
  };
60
61
  const pageBarScrollContainerRef = useTemplateRef("pageBarScrollContainer");
@@ -121,6 +122,7 @@ var PageBar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
121
122
  type: "button",
122
123
  text: "删除",
123
124
  icon: unref(Delete),
125
+ buttonProps: { type: "danger" },
124
126
  handler: () => remove(item)
125
127
  } }, null, 8, ["data"])])])]),
126
128
  _: 2
@@ -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");
@@ -2,13 +2,15 @@ import { useServices } from "../../hooks/use-services.js";
2
2
  import { useEditorContentHeight } from "../../hooks/use-editor-content-height.js";
3
3
  import Icon_default from "../../components/Icon.js";
4
4
  import CodeEditor_default from "../CodeEditor.js";
5
- import { MForm } from "@tmagic/form";
6
- import { TMagicButton, TMagicScrollbar } from "@tmagic/design";
5
+ import { ENABLE_PROPS_FORM_VALIDATE } from "../../editorProps.js";
6
+ import { MForm, validateForm } from "@tmagic/form";
7
+ import { TMagicButton, TMagicScrollbar, tMagicMessage } from "@tmagic/design";
8
+ import { filterXSS } from "@tmagic/utils";
7
9
  import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, getCurrentInstance, inject, normalizeClass, onMounted, onUnmounted, openBlock, ref, renderSlot, unref, useTemplateRef, watchEffect, withCtx } from "vue";
8
10
  import { Document } from "@element-plus/icons-vue";
9
11
  //#region packages/editor/src/layouts/props-panel/FormPanel.vue?vue&type=script&setup=true&lang.ts
10
12
  var _hoisted_1 = { class: "m-editor-props-form-panel" };
11
- var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
13
+ var FormPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
14
  name: "MEditorFormPanel",
13
15
  __name: "FormPanel",
14
16
  props: {
@@ -30,6 +32,7 @@ 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
37
  const { editorService, uiService } = services;
35
38
  const codeOptions = inject("codeOptions", {});
@@ -53,16 +56,54 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
53
56
  });
54
57
  const submit = async (v, eventData) => {
55
58
  try {
56
- emit("submit", await configFormRef.value?.submitForm(), eventData);
59
+ const values = await configFormRef.value?.submitForm();
60
+ emit("submit", values, eventData);
57
61
  } catch (e) {
58
- emit("submit-error", e);
62
+ if (enablePropsFormValidate) emit("submit", v, eventData, e);
63
+ else emit("submit-error", e);
59
64
  }
60
65
  };
61
66
  const errorHandler = (e) => {
62
67
  emit("form-error", e);
63
68
  };
64
- const saveCode = (values) => {
65
- emit("submit", props.codeValueKey ? { [props.codeValueKey]: values } : values);
69
+ /**
70
+ * 将校验错误文案安全地转为用于弹窗展示的 HTML。
71
+ *
72
+ * 文案形如 `字段 -> 主文案\n\n建议`,多条以结构性 `<br>` 拼接。为在保留换行排版的同时
73
+ * 避免 `${value}`/字段名中可能夹带的 HTML 造成 XSS:先按结构性 `<br>` 拆分,对每段做 HTML
74
+ * 转义后再把段内换行 `\n` 替换为 `<br>`,最后用 `<br>` 拼回。
75
+ */
76
+ const formatValidateErrorHtml = (error) => error.split(/<br\s*\/?>/i).map((segment) => filterXSS(segment).replaceAll("\n", "<br>")).join("<br>");
77
+ const saveCode = async (values) => {
78
+ const newValues = props.codeValueKey ? { [props.codeValueKey]: values } : values;
79
+ if (!enablePropsFormValidate) {
80
+ emit("submit", newValues);
81
+ return;
82
+ }
83
+ try {
84
+ const error = await validateForm({
85
+ config: props.config,
86
+ typeMatchValid: true,
87
+ initValues: newValues,
88
+ appContext: internalInstance?.appContext ? {
89
+ ...internalInstance?.appContext,
90
+ provides: { services }
91
+ } : null,
92
+ extendState: (state) => {
93
+ if (configFormRef.value?.formState) return { ...configFormRef.value?.formState || {} };
94
+ return props.extendState?.(state) || {};
95
+ }
96
+ });
97
+ if (error) tMagicMessage({
98
+ type: "error",
99
+ message: formatValidateErrorHtml(error),
100
+ dangerouslyUseHTMLString: true
101
+ });
102
+ emit("submit", newValues, void 0, error ? new Error(error) : void 0);
103
+ } catch (e) {
104
+ console.log("validateForm error", e);
105
+ emit("submit", newValues);
106
+ }
66
107
  };
67
108
  __expose({
68
109
  configForm: configFormRef,
@@ -81,7 +122,9 @@ var FormPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
81
122
  size: propsPanelSize.value,
82
123
  "init-values": __props.values,
83
124
  config: __props.config,
125
+ "type-match-valid": true,
84
126
  "extend-state": __props.extendState,
127
+ "validate-on-init": true,
85
128
  onChange: submit,
86
129
  onError: errorHandler
87
130
  }, null, 8, [
@@ -4,11 +4,12 @@ import { PROPS_PANEL_WIDTH_STORAGE_KEY } from "../../utils/const.js";
4
4
  import { useServices } from "../../hooks/use-services.js";
5
5
  import Resizer_default from "../../components/Resizer.js";
6
6
  import Icon_default from "../../components/Icon.js";
7
+ import { ENABLE_PROPS_FORM_VALIDATE } from "../../editorProps.js";
7
8
  import FormPanel_default from "./FormPanel.js";
8
9
  import { useStylePanel } from "./use-style-panel.js";
9
10
  import { TMagicButton } from "@tmagic/design";
10
11
  import { setValueByKeyPath } from "@tmagic/utils";
11
- import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, unref, useTemplateRef, vShow, watch, watchEffect, withCtx, withDirectives } from "vue";
12
+ import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, normalizeClass, onBeforeUnmount, onMounted, openBlock, ref, renderSlot, unref, useTemplateRef, vShow, watch, watchEffect, withCtx, withDirectives } from "vue";
12
13
  import { Close, Sugar } from "@element-plus/icons-vue";
13
14
  //#region packages/editor/src/layouts/props-panel/PropsPanel.vue?vue&type=script&setup=true&lang.ts
14
15
  var _hoisted_1 = {
@@ -16,7 +17,7 @@ var _hoisted_1 = {
16
17
  class: "m-editor-props-panel"
17
18
  };
18
19
  var _hoisted_2 = { class: "m-editor-props-style-panel-title" };
19
- var PropsPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
20
+ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
20
21
  name: "MEditorPropsPanel",
21
22
  __name: "PropsPanel",
22
23
  props: {
@@ -32,6 +33,7 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
32
33
  setup(__props, { expose: __expose, emit: __emit }) {
33
34
  const emit = __emit;
34
35
  const { editorService, uiService, propsService, storageService } = useServices();
36
+ const enablePropsFormValidate = inject(ENABLE_PROPS_FORM_VALIDATE, false);
35
37
  const values = ref({});
36
38
  const curFormConfig = ref([]);
37
39
  const node = computed(() => editorService.get("node"));
@@ -40,36 +42,54 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
40
42
  tabPosition: "right",
41
43
  items: styleTabConfig.items
42
44
  }];
45
+ let initSeq = 0;
46
+ let mounted = true;
43
47
  const init = async () => {
48
+ initSeq += 1;
49
+ const seq = initSeq;
44
50
  if (!node.value) {
51
+ if (seq !== initSeq || !mounted) return;
45
52
  curFormConfig.value = [];
46
53
  return;
47
54
  }
48
55
  const type = node.value.type || (node.value.items ? "container" : "text");
49
- curFormConfig.value = await propsService.getPropsConfig(type, { node: node.value });
56
+ const config = await propsService.getPropsConfig(type, { node: node.value });
57
+ if (seq !== initSeq || !mounted) return;
58
+ if (!node.value) return;
59
+ curFormConfig.value = config;
50
60
  values.value = node.value;
51
61
  };
52
62
  watchEffect(init);
53
63
  propsService.on("props-configs-change", init);
54
64
  onBeforeUnmount(() => {
65
+ mounted = false;
55
66
  propsService.off("props-configs-change", init);
56
67
  });
57
- const submit = async (v, eventData) => {
68
+ const submit = async (v, eventData, error, source = "props") => {
58
69
  try {
59
70
  if (!v.id) v.id = values.value.id;
60
71
  const newValue = {
61
72
  ...v,
62
73
  style: {}
63
74
  };
64
- if (v.style) {
75
+ if (v.style) if (eventData) {
65
76
  Object.entries(v.style).forEach(([key, value]) => {
66
77
  if (value !== "" && newValue.style) newValue.style[key] = value;
67
78
  });
68
- eventData?.changeRecords?.forEach((record) => {
79
+ eventData.changeRecords?.forEach((record) => {
69
80
  if (record.propPath?.startsWith("style") && record.value === "") setValueByKeyPath(record.propPath, record.value, newValue);
70
81
  });
71
- }
72
- editorService.update(newValue, { changeRecords: eventData?.changeRecords });
82
+ } else newValue.style = { ...v.style };
83
+ const historySource = eventData ? "props" : "code";
84
+ editorService.update(newValue, {
85
+ changeRecords: eventData?.changeRecords,
86
+ historySource,
87
+ ...enablePropsFormValidate && error ? { invalidInfo: {
88
+ id: newValue.id,
89
+ source,
90
+ error: error?.message
91
+ } } : {}
92
+ });
73
93
  } catch (e) {
74
94
  emit("submit-error", e);
75
95
  }
@@ -119,7 +139,7 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
119
139
  values: values.value,
120
140
  disabledShowSrc: __props.disabledShowSrc,
121
141
  extendState: __props.extendState,
122
- onSubmit: submit,
142
+ onSubmit: _cache[0] || (_cache[0] = (v, eventData, error) => submit(v, eventData, error, "props")),
123
143
  onSubmitError: errorHandler,
124
144
  onFormError: errorHandler,
125
145
  onMounted: mountedHandler,
@@ -144,14 +164,14 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
144
164
  values: values.value,
145
165
  disabledShowSrc: __props.disabledShowSrc,
146
166
  extendState: __props.extendState,
147
- onSubmit: submit,
167
+ onSubmit: _cache[2] || (_cache[2] = (v, eventData, error) => submit(v, eventData, error, "style")),
148
168
  onSubmitError: errorHandler,
149
169
  onFormError: errorHandler
150
170
  }, {
151
- "props-form-panel-header": withCtx(() => [createElementVNode("div", _hoisted_2, [_cache[2] || (_cache[2] = createElementVNode("span", null, "样式", -1)), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
171
+ "props-form-panel-header": withCtx(() => [createElementVNode("div", _hoisted_2, [_cache[4] || (_cache[4] = createElementVNode("span", null, "样式", -1)), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
152
172
  link: "",
153
173
  size: "small",
154
- onClick: _cache[0] || (_cache[0] = ($event) => unref(toggleStylePanel)(false))
174
+ onClick: _cache[1] || (_cache[1] = ($event) => unref(toggleStylePanel)(false))
155
175
  }, {
156
176
  default: withCtx(() => [createVNode(Icon_default, { icon: unref(Close) }, null, 8, ["icon"])]),
157
177
  _: 1
@@ -166,7 +186,7 @@ var PropsPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
166
186
  key: 2,
167
187
  class: "m-editor-props-panel-style-icon",
168
188
  circle: "",
169
- onClick: _cache[1] || (_cache[1] = ($event) => unref(toggleStylePanel)(true))
189
+ onClick: _cache[3] || (_cache[3] = ($event) => unref(toggleStylePanel)(true))
170
190
  }, {
171
191
  default: withCtx(() => [createVNode(Icon_default, { icon: unref(Sugar) }, null, 8, ["icon"])]),
172
192
  _: 1
@@ -23,8 +23,9 @@ var useStylePanel = ({ uiService, storageService }, propsPanelWidth) => {
23
23
  columnWidth.center += propsPanelWidth.value;
24
24
  }
25
25
  if (columnWidth.center < 0) {
26
- columnWidth.right = columnWidth.right + columnWidth.center - 400;
27
- columnWidth.center = 400;
26
+ const minCenterColumnWidth = uiService.get("minCenterColumnWidth");
27
+ columnWidth.right = columnWidth.right + columnWidth.center - minCenterColumnWidth;
28
+ columnWidth.center = minCenterColumnWidth;
28
29
  propsPanelWidth.value = columnWidth.right / 2;
29
30
  }
30
31
  storageService.setItem(RIGHT_COLUMN_WIDTH_STORAGE_KEY, columnWidth.right, { protocol: Protocol.NUMBER });
@@ -10,7 +10,7 @@ import { Grid } from "@element-plus/icons-vue";
10
10
  //#region packages/editor/src/layouts/sidebar/ComponentListPanel.vue?vue&type=script&setup=true&lang.ts
11
11
  var _hoisted_1 = ["onClick", "onDragstart"];
12
12
  var _hoisted_2 = ["title"];
13
- var ComponentListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
13
+ var ComponentListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
14
14
  name: "MEditorComponentListPanel",
15
15
  __name: "ComponentListPanel",
16
16
  setup(__props) {
@@ -37,7 +37,7 @@ var ComponentListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
37
37
  name: text,
38
38
  type,
39
39
  ...data
40
- });
40
+ }, void 0, { historySource: "component-panel" });
41
41
  };
42
42
  const dragstartHandler = ({ text, type, data = {} }, e) => {
43
43
  e.dataTransfer?.setData("text/json", serialize({
@@ -70,7 +70,7 @@ var ComponentListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
70
70
  return;
71
71
  }
72
72
  if (timeout || !stage.value) return;
73
- timeout = stage.value.delayedMarkContainer(e);
73
+ timeout = stage.value.delayedMarkContainer(e, [], true);
74
74
  };
75
75
  return (_ctx, _cache) => {
76
76
  return openBlock(), createBlock(unref(TMagicScrollbar), null, {
@@ -9,7 +9,7 @@ import DataSourceListPanel_default from "./data-source/DataSourceListPanel.js";
9
9
  import LayerPanel_default from "./layer/LayerPanel.js";
10
10
  import ComponentListPanel_default from "./ComponentListPanel.js";
11
11
  import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createVNode, defineComponent, mergeProps, nextTick, normalizeClass, normalizeStyle, openBlock, ref, renderList, renderSlot, resolveDynamicComponent, toDisplayString, toHandlers, unref, vShow, watch, withCtx, withDirectives, withModifiers } from "vue";
12
- import { Close, Coin, EditPen, Goods, List } from "@element-plus/icons-vue";
12
+ import { Box, Close, Coin, EditPen, Finished } from "@element-plus/icons-vue";
13
13
  //#region packages/editor/src/layouts/sidebar/Sidebar.vue?vue&type=script&setup=true&lang.ts
14
14
  var _hoisted_1 = {
15
15
  key: 0,
@@ -30,7 +30,7 @@ var _hoisted_5 = {
30
30
  class: "m-editor-sidebar-tips"
31
31
  };
32
32
  var _hoisted_6 = { class: "m-editor-slide-list-box" };
33
- var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
33
+ var Sidebar_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
34
34
  name: "MEditorSidebar",
35
35
  __name: "Sidebar",
36
36
  props: {
@@ -61,6 +61,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
61
61
  const taskLength = computed(() => depService.get("taskLength"));
62
62
  const tipsBarVisible = ref(true);
63
63
  const columnLeftWidth = computed(() => uiService.get("columnWidth")[ColumnLayout.LEFT]);
64
+ const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
64
65
  const { height: editorContentHeight } = useEditorContentHeight();
65
66
  const columnLeftHeight = ref(0);
66
67
  const unWatchEditorContentHeight = watch(editorContentHeight, (height) => {
@@ -71,21 +72,25 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
71
72
  });
72
73
  }
73
74
  }, { immediate: true });
74
- const activeTabName = ref(props.data?.status);
75
+ const activeTabName = computed({
76
+ get: () => uiService.get("sideBarActiveTabName"),
77
+ set: (value) => uiService.set("sideBarActiveTabName", value)
78
+ });
79
+ uiService.set("sideBarActiveTabName", props.data?.status || "");
75
80
  const getItemConfig = (data) => {
76
81
  const map = {
77
82
  [SideItemKey.COMPONENT_LIST]: {
78
83
  $key: SideItemKey.COMPONENT_LIST,
79
84
  type: "component",
80
- icon: Goods,
85
+ icon: Box,
81
86
  text: "组件",
82
87
  component: ComponentListPanel_default,
83
88
  slots: {}
84
89
  },
85
90
  layer: {
86
- $key: "layer",
91
+ $key: SideItemKey.LAYER,
87
92
  type: "component",
88
- icon: List,
93
+ icon: Finished,
89
94
  text: "已选组件",
90
95
  props: {
91
96
  layerContentMenu: props.layerContentMenu,
@@ -101,7 +106,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
101
106
  slots: {}
102
107
  },
103
108
  [SideItemKey.CODE_BLOCK]: {
104
- $key: "code-block",
109
+ $key: SideItemKey.CODE_BLOCK,
105
110
  type: "component",
106
111
  icon: EditPen,
107
112
  text: "代码编辑",
@@ -185,23 +190,17 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
185
190
  }, config.props || {}, toHandlers(config?.listeners || {})), createSlots({ _: 2 }, [
186
191
  config.$key === "component-list" || config.slots?.componentList ? {
187
192
  name: "component-list",
188
- fn: withCtx(({ componentGroupList }) => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list", {
189
- key: 0,
190
- componentGroupList
191
- }) : config.slots?.componentList ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentList), { key: 1 })) : createCommentVNode("v-if", true)]),
193
+ fn: withCtx(({ componentGroupList }) => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list", { componentGroupList }, void 0, void 0, 0) : config.slots?.componentList ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentList), { key: 1 })) : createCommentVNode("v-if", true)]),
192
194
  key: "0"
193
195
  } : void 0,
194
196
  config.$key === "component-list" || config.slots?.componentListPanelHeader ? {
195
197
  name: "component-list-panel-header",
196
- fn: withCtx(() => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list-panel-header", { key: 0 }) : config.slots?.componentListPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentListPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
198
+ fn: withCtx(() => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list-panel-header", {}, void 0, void 0, 0) : config.slots?.componentListPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentListPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
197
199
  key: "1"
198
200
  } : void 0,
199
201
  config.$key === "component-list" || config.slots?.componentListItem ? {
200
202
  name: "component-list-item",
201
- fn: withCtx(({ component }) => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list-item", {
202
- key: 0,
203
- component
204
- }) : config.slots?.componentListItem ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentListItem), {
203
+ fn: withCtx(({ component }) => [config.$key === "component-list" ? renderSlot(_ctx.$slots, "component-list-item", { component }, void 0, void 0, 0) : config.slots?.componentListItem ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.componentListItem), {
205
204
  key: 1,
206
205
  component
207
206
  }, null, 8, ["component"])) : createCommentVNode("v-if", true)]),
@@ -209,34 +208,30 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
209
208
  } : void 0,
210
209
  config.$key === "layer" || config.slots?.layerPanelHeader ? {
211
210
  name: "layer-panel-header",
212
- fn: withCtx(() => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-panel-header", { key: 0 }) : config.slots?.layerPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
211
+ fn: withCtx(() => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-panel-header", {}, void 0, void 0, 0) : config.slots?.layerPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
213
212
  key: "3"
214
213
  } : void 0,
215
214
  config.$key === "code-block" || config.slots?.codeBlockPanelHeader ? {
216
215
  name: "code-block-panel-header",
217
- fn: withCtx(() => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-header", { key: 0 }) : config.slots?.codeBlockPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
216
+ fn: withCtx(() => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-header", {}, void 0, void 0, 0) : config.slots?.codeBlockPanelHeader ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelHeader), { key: 1 })) : createCommentVNode("v-if", true)]),
218
217
  key: "4"
219
218
  } : void 0,
220
219
  config.$key === "code-block" || config.slots?.codeBlockPanelTool ? {
221
220
  name: "code-block-panel-tool",
222
221
  fn: withCtx(({ id, data }) => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-tool", {
223
- key: 0,
224
222
  id,
225
223
  data
226
- }) : config.slots?.codeBlockPanelTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelTool), { key: 1 })) : createCommentVNode("v-if", true)]),
224
+ }, void 0, void 0, 0) : config.slots?.codeBlockPanelTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelTool), { key: 1 })) : createCommentVNode("v-if", true)]),
227
225
  key: "5"
228
226
  } : void 0,
229
227
  config.$key === "code-block" || config.slots?.codeBlockPanelSearch ? {
230
228
  name: "code-block-panel-search",
231
- fn: withCtx(() => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-search", { key: 0 }) : config.slots?.codeBlockPanelSearch ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelSearch), { key: 1 })) : createCommentVNode("v-if", true)]),
229
+ fn: withCtx(() => [config.$key === "code-block" ? renderSlot(_ctx.$slots, "code-block-panel-search", {}, void 0, void 0, 0) : config.slots?.codeBlockPanelSearch ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.codeBlockPanelSearch), { key: 1 })) : createCommentVNode("v-if", true)]),
232
230
  key: "6"
233
231
  } : void 0,
234
232
  config.$key === "layer" || config.slots?.layerNodeContent ? {
235
233
  name: "layer-node-content",
236
- fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-content", {
237
- key: 0,
238
- data: nodeData
239
- }) : config.slots?.layerNodeContent ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeContent), {
234
+ fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-content", { data: nodeData }, void 0, void 0, 0) : config.slots?.layerNodeContent ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeContent), {
240
235
  key: 1,
241
236
  data: nodeData
242
237
  }, null, 8, ["data"])) : createCommentVNode("v-if", true)]),
@@ -244,10 +239,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
244
239
  } : void 0,
245
240
  config.$key === "layer" || config.slots?.layerNodeLabel ? {
246
241
  name: "layer-node-label",
247
- fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-label", {
248
- key: 0,
249
- data: nodeData
250
- }) : config.slots?.layerNodeLabel ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeTool), {
242
+ fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-label", { data: nodeData }, void 0, void 0, 0) : config.slots?.layerNodeLabel ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeTool), {
251
243
  key: 1,
252
244
  data: nodeData
253
245
  }, null, 8, ["data"])) : createCommentVNode("v-if", true)]),
@@ -255,10 +247,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
255
247
  } : void 0,
256
248
  config.$key === "layer" || config.slots?.layerNodeTool ? {
257
249
  name: "layer-node-tool",
258
- fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-tool", {
259
- key: 0,
260
- data: nodeData
261
- }) : config.slots?.layerNodeTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeTool), {
250
+ fn: withCtx(({ data: nodeData }) => [config.$key === "layer" ? renderSlot(_ctx.$slots, "layer-node-tool", { data: nodeData }, void 0, void 0, 0) : config.slots?.layerNodeTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.layerNodeTool), {
262
251
  key: 1,
263
252
  data: nodeData
264
253
  }, null, 8, ["data"])) : createCommentVNode("v-if", true)]),
@@ -266,15 +255,12 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
266
255
  } : void 0,
267
256
  config.$key === "data-source" || config.slots?.dataSourcePanelTool ? {
268
257
  name: "data-source-panel-tool",
269
- fn: withCtx(({ data }) => [config.$key === "data-source" ? renderSlot(_ctx.$slots, "data-source-panel-tool", {
270
- key: 0,
271
- data
272
- }) : config.slots?.DataSourcePanelTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.DataSourcePanelTool), { key: 1 })) : createCommentVNode("v-if", true)]),
258
+ fn: withCtx(({ data }) => [config.$key === "data-source" ? renderSlot(_ctx.$slots, "data-source-panel-tool", { data }, void 0, void 0, 0) : config.slots?.DataSourcePanelTool ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.DataSourcePanelTool), { key: 1 })) : createCommentVNode("v-if", true)]),
273
259
  key: "10"
274
260
  } : void 0,
275
261
  config.$key === "data-source" || config.slots?.dataSourcePanelSearch ? {
276
262
  name: "data-source-panel-search",
277
- fn: withCtx(() => [config.$key === "data-source" ? renderSlot(_ctx.$slots, "data-source-panel-search", { key: 0 }) : config.slots?.dataSourcePanelSearch ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.dataSourcePanelSearch), { key: 1 })) : createCommentVNode("v-if", true)]),
263
+ fn: withCtx(() => [config.$key === "data-source" ? renderSlot(_ctx.$slots, "data-source-panel-search", {}, void 0, void 0, 0) : config.slots?.dataSourcePanelSearch ? (openBlock(), createBlock(resolveDynamicComponent(config.slots.dataSourcePanelSearch), { key: 1 })) : createCommentVNode("v-if", true)]),
278
264
  key: "11"
279
265
  } : void 0
280
266
  ]), 1040)) : createCommentVNode("v-if", true)], 2)), [[vShow, [
@@ -297,6 +283,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
297
283
  "onUpdate:height": _cache[2] || (_cache[2] = ($event) => columnLeftHeight.value = $event),
298
284
  width: columnLeftWidth.value,
299
285
  title: config.text,
286
+ "framework-width": frameworkWidth.value,
300
287
  position: {
301
288
  left: unref(floatBoxStates)[config.$key].left,
302
289
  top: unref(floatBoxStates)[config.$key].top
@@ -313,6 +300,7 @@ var Sidebar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ define
313
300
  "height",
314
301
  "width",
315
302
  "title",
303
+ "framework-width",
316
304
  "position"
317
305
  ])) : createCommentVNode("v-if", true)], 64);
318
306
  }), 256))]))], 64);
@@ -9,7 +9,7 @@ import { DepTargetType } from "@tmagic/core";
9
9
  import { computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref, withCtx, withModifiers } from "vue";
10
10
  import { Close, Edit, View } from "@element-plus/icons-vue";
11
11
  //#region packages/editor/src/layouts/sidebar/code-block/CodeBlockList.vue?vue&type=script&setup=true&lang.ts
12
- var CodeBlockList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
12
+ var CodeBlockList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
13
13
  name: "MEditorCodeBlockList",
14
14
  __name: "CodeBlockList",
15
15
  props: {
@@ -78,7 +78,7 @@ var CodeBlockList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
78
78
  const editCode = (id) => {
79
79
  emit("edit", id);
80
80
  };
81
- const deleteCode = async (id) => {
81
+ const deleteCode = async (id, { historySource } = {}) => {
82
82
  const currentCode = codeList.value.find((codeItem) => codeItem.id === id);
83
83
  const existBinds = Boolean(currentCode?.items?.length);
84
84
  const undeleteableList = codeBlockService.getUndeletableList() || [];
@@ -88,7 +88,7 @@ var CodeBlockList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
88
88
  cancelButtonText: "取消",
89
89
  type: "warning"
90
90
  });
91
- emit("remove", id);
91
+ emit("remove", id, { historySource });
92
92
  } else if (typeof props.customError === "function") props.customError(id, existBinds ? CodeDeleteErrorType.BIND : CodeDeleteErrorType.UNDELETEABLE);
93
93
  else if (existBinds) tMagicMessage.error("代码块存在绑定关系,不可删除");
94
94
  else tMagicMessage.error("代码块不可删除");
@@ -138,7 +138,7 @@ var CodeBlockList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
138
138
  default: withCtx(() => [createVNode(Icon_default, {
139
139
  icon: unref(Close),
140
140
  class: "edit-icon",
141
- onClick: withModifiers(($event) => deleteCode(`${data.key}`), ["stop"])
141
+ onClick: withModifiers(($event) => deleteCode(`${data.key}`, { historySource: "tree" }), ["stop"])
142
142
  }, null, 8, ["icon", "onClick"])]),
143
143
  _: 2
144
144
  }, 1024)) : createCommentVNode("v-if", true),
@@ -9,7 +9,7 @@ import { TMagicButton, TMagicScrollbar } from "@tmagic/design";
9
9
  import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, openBlock, renderSlot, unref, useTemplateRef, watch, withCtx } from "vue";
10
10
  //#region packages/editor/src/layouts/sidebar/code-block/CodeBlockListPanel.vue?vue&type=script&setup=true&lang.ts
11
11
  var _hoisted_1 = { class: "search-wrapper" };
12
- var CodeBlockListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
12
+ var CodeBlockListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
13
13
  name: "MEditorCodeBlockListPanel",
14
14
  __name: "CodeBlockListPanel",
15
15
  props: {
@@ -37,10 +37,10 @@ var CodeBlockListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE_
37
37
  const editDialogCloseHandler = () => {
38
38
  if (codeBlockListRef.value) for (const [, status] of codeBlockListRef.value.nodeStatusMap.entries()) status.selected = false;
39
39
  };
40
- const { nodeContentMenuHandler, menuData: contentMenuData, contentMenuHideHandler } = useContentMenu((id) => {
41
- codeBlockListRef.value?.deleteCode(id);
40
+ const { nodeContentMenuHandler, menuData: contentMenuData, contentMenuHideHandler, getTarget } = useContentMenu((id) => {
41
+ codeBlockListRef.value?.deleteCode(id, { historySource: "tree-contextmenu" });
42
42
  });
43
- const menuData = computed(() => props.customContentMenu(contentMenuData, "code-block"));
43
+ const menuData = computed(() => props.customContentMenu(contentMenuData, "code-block", getTarget));
44
44
  return (_ctx, _cache) => {
45
45
  return openBlock(), createElementBlock(Fragment, null, [
46
46
  createVNode(unref(TMagicScrollbar), { class: "m-editor-code-block-list m-editor-layer-panel" }, {
@@ -6,6 +6,14 @@ var useContentMenu = (deleteCode) => {
6
6
  const eventBus = inject("eventBus");
7
7
  const menuRef = useTemplateRef("menu");
8
8
  let selectId = "";
9
+ let selectData = null;
10
+ const getTarget = () => {
11
+ if (!selectId) return null;
12
+ return {
13
+ id: selectId,
14
+ data: selectData ?? void 0
15
+ };
16
+ };
9
17
  const menuData = [
10
18
  {
11
19
  type: "button",
@@ -26,7 +34,7 @@ var useContentMenu = (deleteCode) => {
26
34
  const codeBlock = codeBlockService.getCodeContentById(selectId);
27
35
  if (!codeBlock) return;
28
36
  const newCodeId = await codeBlockService.getUniqueId();
29
- codeBlockService.setCodeDslById(newCodeId, cloneDeep(codeBlock));
37
+ codeBlockService.setCodeDslById(newCodeId, cloneDeep(codeBlock), { historySource: "tree-contextmenu" });
30
38
  }
31
39
  },
32
40
  {
@@ -43,17 +51,24 @@ var useContentMenu = (deleteCode) => {
43
51
  event.preventDefault();
44
52
  if (data.type === "code") {
45
53
  menuRef.value?.show(event);
46
- if (data.id) selectId = `${data.id}`;
47
- else selectId = "";
54
+ if (data.id) {
55
+ selectId = `${data.id}`;
56
+ selectData = data;
57
+ } else {
58
+ selectId = "";
59
+ selectData = null;
60
+ }
48
61
  }
49
62
  };
50
63
  const contentMenuHideHandler = () => {
51
64
  selectId = "";
65
+ selectData = null;
52
66
  };
53
67
  return {
54
68
  menuData,
55
69
  nodeContentMenuHandler,
56
- contentMenuHideHandler
70
+ contentMenuHideHandler,
71
+ getTarget
57
72
  };
58
73
  };
59
74
  //#endregion