@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
@@ -2,7 +2,7 @@ import ToolButton_default from "../../../components/ToolButton.js";
2
2
  import { TMagicButton, TMagicPopover } from "@tmagic/design";
3
3
  import { Fragment, createBlock, createElementBlock, createTextVNode, createVNode, defineComponent, guardReactiveProps, normalizeProps, openBlock, renderList, toDisplayString, unref, withCtx } from "vue";
4
4
  //#region packages/editor/src/layouts/sidebar/data-source/DataSourceAddButton.vue?vue&type=script&setup=true&lang.ts
5
- var DataSourceAddButton_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var DataSourceAddButton_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MEditorDataSourceAddButton",
7
7
  __name: "DataSourceAddButton",
8
8
  props: {
@@ -4,15 +4,17 @@ import { useNextFloatBoxPosition } from "../../../hooks/use-next-float-box-posit
4
4
  import FloatingBox_default from "../../../components/FloatingBox.js";
5
5
  import { MFormBox } from "@tmagic/form";
6
6
  import { tMagicMessage } from "@tmagic/design";
7
- import { createBlock, createVNode, defineComponent, inject, isRef, mergeModels, nextTick, openBlock, ref, unref, useModel, watch, watchEffect, withCtx } from "vue";
7
+ import { computed, createBlock, createVNode, defineComponent, inject, isRef, mergeModels, nextTick, openBlock, provide, ref, unref, useModel, watch, watchEffect, withCtx } from "vue";
8
8
  //#region packages/editor/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue?vue&type=script&setup=true&lang.ts
9
- var DataSourceConfigPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
9
+ var DataSourceConfigPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
10
10
  name: "MEditorDataSourceConfigPanel",
11
11
  __name: "DataSourceConfigPanel",
12
- props: /* @__PURE__ */ mergeModels({
12
+ props: /*@__PURE__*/ mergeModels({
13
13
  title: {},
14
14
  values: {},
15
- disabled: { type: Boolean }
15
+ disabled: { type: Boolean },
16
+ editMethodName: {},
17
+ editFieldPath: {}
16
18
  }, {
17
19
  "visible": {
18
20
  type: Boolean,
@@ -22,7 +24,7 @@ var DataSourceConfigPanel_vue_vue_type_script_setup_true_lang_default = /* @__PU
22
24
  "width": { default: 670 },
23
25
  "widthModifiers": {}
24
26
  }),
25
- emits: /* @__PURE__ */ mergeModels([
27
+ emits: /*@__PURE__*/ mergeModels([
26
28
  "submit",
27
29
  "close",
28
30
  "open"
@@ -37,9 +39,21 @@ var DataSourceConfigPanel_vue_vue_type_script_setup_true_lang_default = /* @__PU
37
39
  const dataSourceConfig = ref([]);
38
40
  const { height: editorHeight } = useEditorContentHeight();
39
41
  const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, inject("parentFloating", ref(null)));
42
+ const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
43
+ /** 供「方法定义」tab 内的字段消费,用于打开数据源详情后自动打开指定方法 */
44
+ provide("editingDataSourceMethodName", computed(() => props.editMethodName));
45
+ /** 供「数据定义」tab 内的字段消费,用于打开数据源详情后自动打开指定字段 */
46
+ provide("editingDataSourceFieldPath", computed(() => props.editFieldPath || []));
40
47
  watchEffect(() => {
41
48
  initValues.value = props.values;
42
- dataSourceConfig.value = dataSourceService.getFormConfig(initValues.value.type);
49
+ const config = dataSourceService.getFormConfig(initValues.value.type);
50
+ let activeTab = "fields";
51
+ if (props.editMethodName) activeTab = "methods";
52
+ else if (props.editFieldPath?.length) activeTab = "fields";
53
+ dataSourceConfig.value = config.map((item) => item.type === "tab" ? {
54
+ ...item,
55
+ active: activeTab
56
+ } : item);
43
57
  });
44
58
  const submitHandler = (values, data) => {
45
59
  emit("submit", values, data);
@@ -64,6 +78,7 @@ var DataSourceConfigPanel_vue_vue_type_script_setup_true_lang_default = /* @__PU
64
78
  });
65
79
  return (_ctx, _cache) => {
66
80
  return openBlock(), createBlock(FloatingBox_default, {
81
+ "body-style": { padding: "0 16px" },
67
82
  visible: boxVisible.value,
68
83
  "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => boxVisible.value = $event),
69
84
  width: width.value,
@@ -71,6 +86,7 @@ var DataSourceConfigPanel_vue_vue_type_script_setup_true_lang_default = /* @__PU
71
86
  height: unref(editorHeight),
72
87
  "onUpdate:height": _cache[2] || (_cache[2] = ($event) => isRef(editorHeight) ? editorHeight.value = $event : null),
73
88
  title: __props.title,
89
+ "framework-width": frameworkWidth.value,
74
90
  position: unref(boxPosition)
75
91
  }, {
76
92
  body: withCtx(() => [createVNode(unref(MFormBox), {
@@ -94,6 +110,7 @@ var DataSourceConfigPanel_vue_vue_type_script_setup_true_lang_default = /* @__PU
94
110
  "width",
95
111
  "height",
96
112
  "title",
113
+ "framework-width",
97
114
  "position"
98
115
  ]);
99
116
  };
@@ -8,7 +8,7 @@ import { DepTargetType } from "@tmagic/core";
8
8
  import { computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref, withCtx, withModifiers } from "vue";
9
9
  import { Close, Edit, View } from "@element-plus/icons-vue";
10
10
  //#region packages/editor/src/layouts/sidebar/data-source/DataSourceList.vue?vue&type=script&setup=true&lang.ts
11
- var DataSourceList_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
11
+ var DataSourceList_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
12
  name: "MEditorDataSourceList",
13
13
  __name: "DataSourceList",
14
14
  props: {
@@ -7,11 +7,11 @@ import DataSourceConfigPanel_default from "./DataSourceConfigPanel.js";
7
7
  import DataSourceList_default from "./DataSourceList.js";
8
8
  import { useContentMenu } from "./useContentMenu.js";
9
9
  import { TMagicScrollbar, tMagicMessageBox } from "@tmagic/design";
10
- import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, renderSlot, unref, useTemplateRef, watch, withCtx } from "vue";
10
+ import { Fragment, Teleport, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, inject, openBlock, ref, renderSlot, unref, useTemplateRef, watch, withCtx } from "vue";
11
11
  import { mergeWith } from "lodash-es";
12
12
  //#region packages/editor/src/layouts/sidebar/data-source/DataSourceListPanel.vue?vue&type=script&setup=true&lang.ts
13
13
  var _hoisted_1 = { class: "search-wrapper" };
14
- var DataSourceListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
14
+ var DataSourceListPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
15
15
  name: "MEditorDataSourceListPanel",
16
16
  __name: "DataSourceListPanel",
17
17
  props: {
@@ -24,7 +24,13 @@ var DataSourceListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE
24
24
  const eventBus = inject("eventBus");
25
25
  const { dataSourceService } = useServices();
26
26
  const { editDialog, dataSourceValues, dialogTitle, editable, editHandler, submitDataSourceHandler } = useDataSourceEdit(dataSourceService);
27
+ /** 打开数据源详情时需要直接定位并打开的方法名,为空则正常展示「数据定义」tab */
28
+ const editMethodName = ref("");
29
+ /** 打开数据源详情时需要直接定位并打开的字段路径,为空则不自动打开字段配置 */
30
+ const editFieldPath = ref([]);
27
31
  const editDialogCloseHandler = () => {
32
+ editMethodName.value = "";
33
+ editFieldPath.value = [];
28
34
  if (dataSourceListRef.value) for (const [, status] of dataSourceListRef.value.nodeStatusMap.entries()) status.selected = false;
29
35
  };
30
36
  watch(dataSourceValues, (dataSourceValues) => {
@@ -55,20 +61,32 @@ var DataSourceListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE
55
61
  cancelButtonText: "取消",
56
62
  type: "warning"
57
63
  });
58
- dataSourceService.remove(id);
64
+ dataSourceService.remove(id, { historySource: "tree-contextmenu" });
59
65
  };
60
66
  const dataSourceListRef = useTemplateRef("dataSourceList");
61
67
  const filterTextChangeHandler = (val) => {
62
68
  dataSourceListRef.value?.filter(val);
63
69
  };
64
70
  eventBus?.on("edit-data-source", (id) => {
71
+ editMethodName.value = "";
72
+ editFieldPath.value = [];
73
+ editHandler(id);
74
+ });
75
+ eventBus?.on("edit-data-source-method", (id, methodName) => {
76
+ editMethodName.value = methodName;
77
+ editFieldPath.value = [];
78
+ editHandler(id);
79
+ });
80
+ eventBus?.on("edit-data-source-field", (id, fieldPath) => {
81
+ editMethodName.value = "";
82
+ editFieldPath.value = fieldPath;
65
83
  editHandler(id);
66
84
  });
67
85
  eventBus?.on("remove-data-source", (id) => {
68
86
  removeHandler(id);
69
87
  });
70
- const { nodeContentMenuHandler, menuData: contentMenuData, contentMenuHideHandler } = useContentMenu();
71
- const menuData = computed(() => props.customContentMenu(contentMenuData, "data-source"));
88
+ const { nodeContentMenuHandler, menuData: contentMenuData, contentMenuHideHandler, getTarget } = useContentMenu();
89
+ const menuData = computed(() => props.customContentMenu(contentMenuData, "data-source", getTarget));
72
90
  return (_ctx, _cache) => {
73
91
  return openBlock(), createElementBlock(Fragment, null, [
74
92
  createVNode(unref(TMagicScrollbar), { class: "data-source-list-panel m-editor-layer-panel" }, {
@@ -110,12 +128,16 @@ var DataSourceListPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE
110
128
  disabled: !unref(editable),
111
129
  values: unref(dataSourceValues),
112
130
  title: unref(dialogTitle),
131
+ "edit-method-name": editMethodName.value,
132
+ "edit-field-path": editFieldPath.value,
113
133
  onSubmit: unref(submitDataSourceHandler),
114
134
  onClose: editDialogCloseHandler
115
135
  }, null, 8, [
116
136
  "disabled",
117
137
  "values",
118
138
  "title",
139
+ "edit-method-name",
140
+ "edit-field-path",
119
141
  "onSubmit"
120
142
  ]),
121
143
  (openBlock(), createBlock(Teleport, { to: "body" }, [menuData.value.length ? (openBlock(), createBlock(ContentMenu_default, {
@@ -6,6 +6,14 @@ var useContentMenu = () => {
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",
@@ -25,7 +33,7 @@ var useContentMenu = () => {
25
33
  if (!selectId) return;
26
34
  const ds = dataSourceService.getDataSourceById(selectId);
27
35
  if (!ds) return;
28
- dataSourceService.add(cloneDeep(ds));
36
+ dataSourceService.add(cloneDeep(ds), { historySource: "tree-contextmenu" });
29
37
  }
30
38
  },
31
39
  {
@@ -42,17 +50,24 @@ var useContentMenu = () => {
42
50
  event.preventDefault();
43
51
  if (data.type === "ds") {
44
52
  menuRef.value?.show(event);
45
- if (data.id) selectId = `${data.id}`;
46
- else selectId = "";
53
+ if (data.id) {
54
+ selectId = `${data.id}`;
55
+ selectData = data;
56
+ } else {
57
+ selectId = "";
58
+ selectData = null;
59
+ }
47
60
  }
48
61
  };
49
62
  const contentMenuHideHandler = () => {
50
63
  selectId = "";
64
+ selectData = null;
51
65
  };
52
66
  return {
53
67
  menuData,
54
68
  nodeContentMenuHandler,
55
- contentMenuHideHandler
69
+ contentMenuHideHandler,
70
+ getTarget
56
71
  };
57
72
  };
58
73
  //#endregion
@@ -2,11 +2,11 @@ import { useServices } from "../../../hooks/use-services.js";
2
2
  import ContentMenu_default from "../../../components/ContentMenu.js";
3
3
  import FolderMinusIcon_default from "../../../icons/FolderMinusIcon.js";
4
4
  import { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from "../../../utils/content-menu.js";
5
- import { isPage, isPageFragment } from "@tmagic/utils";
5
+ import { isPageOrFragment } from "@tmagic/utils";
6
6
  import { computed, createBlock, defineComponent, markRaw, openBlock, useTemplateRef } from "vue";
7
7
  import { Files, Plus } from "@element-plus/icons-vue";
8
8
  //#region packages/editor/src/layouts/sidebar/layer/LayerMenu.vue?vue&type=script&setup=true&lang.ts
9
- var LayerMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
9
+ var LayerMenu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
10
10
  name: "MEditorLayerMenu",
11
11
  __name: "LayerMenu",
12
12
  props: {
@@ -32,7 +32,7 @@ var LayerMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
32
32
  name: component.text,
33
33
  type: component.type,
34
34
  ...component.data || {}
35
- });
35
+ }, void 0, { historySource: "tree-contextmenu" });
36
36
  }
37
37
  }));
38
38
  const getSubMenuData = computed(() => {
@@ -41,7 +41,7 @@ var LayerMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
41
41
  type: "button",
42
42
  icon: Files,
43
43
  handler: () => {
44
- editorService.add({ type: "tab-pane" });
44
+ editorService.add({ type: "tab-pane" }, void 0, { historySource: "tree-contextmenu" });
45
45
  }
46
46
  }];
47
47
  if (node.value?.items) return componentList.value.reduce((subMenuData, group, index) => subMenuData.concat(createMenuItems(group), index < componentList.value.length - 1 ? [{
@@ -55,7 +55,7 @@ var LayerMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
55
55
  type: "button",
56
56
  text: "全部折叠",
57
57
  icon: FolderMinusIcon_default,
58
- display: () => isPage(node.value) || isPageFragment(node.value),
58
+ display: () => isPageOrFragment(node.value),
59
59
  handler: () => {
60
60
  emit("collapse-all");
61
61
  }
@@ -68,9 +68,9 @@ var LayerMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defi
68
68
  items: getSubMenuData.value
69
69
  },
70
70
  useCopyMenu(),
71
- usePasteMenu(),
72
- useDeleteMenu(),
73
- useMoveToMenu(services),
71
+ usePasteMenu("tree-contextmenu"),
72
+ useDeleteMenu("tree-contextmenu"),
73
+ useMoveToMenu(services, "tree-contextmenu"),
74
74
  ...props.layerContentMenu
75
75
  ], "layer"));
76
76
  const show = (e) => {
@@ -0,0 +1,5 @@
1
+ import LayerNodeContent_vue_vue_type_script_setup_true_lang_default from "./LayerNodeContent.vue_vue_type_script_setup_true_lang.js";
2
+ //#region packages/editor/src/layouts/sidebar/layer/LayerNodeContent.vue
3
+ var LayerNodeContent_default = LayerNodeContent_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { LayerNodeContent_default as default };
@@ -0,0 +1,46 @@
1
+ import { useServices } from "../../../hooks/use-services.js";
2
+ import Icon_default from "../../../components/Icon.js";
3
+ import { TMagicTooltip, stripValidateSuggestion } from "@tmagic/design";
4
+ import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, normalizeClass, openBlock, toDisplayString, unref, withCtx } from "vue";
5
+ import { WarningFilled } from "@element-plus/icons-vue";
6
+ //#region packages/editor/src/layouts/sidebar/layer/LayerNodeContent.vue?vue&type=script&setup=true&lang.ts
7
+ var _hoisted_1 = { class: "m-editor-layer-node-label" };
8
+ var _hoisted_2 = ["innerHTML"];
9
+ var LayerNodeContent_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
10
+ name: "MEditorLayerNodeContent",
11
+ __name: "LayerNodeContent",
12
+ props: { data: {} },
13
+ setup(__props) {
14
+ const props = __props;
15
+ const { editorService } = useServices();
16
+ const label = computed(() => `${props.data.name} (${props.data.id})`);
17
+ /** 读取集中存储的校验错误状态,建立响应式依赖 */
18
+ const invalidInfo = computed(() => editorService.get("invalidNodeIds").get(props.data.id));
19
+ const hasError = computed(() => Boolean(invalidInfo.value?.props || invalidInfo.value?.style));
20
+ /**
21
+ * 去掉单条校验文案中的「修改建议」部分。
22
+ *
23
+ * 错误文案可能是多条错误以 `<br>` 拼接的 HTML,每条本身形如 `主文案\n\n建议`。
24
+ * 组件树 tooltip 仅展示错误描述,不展示修改建议(建议仅在错误汇总面板展示),
25
+ * 故先按 `<br>` 拆分,每段用 `stripValidateSuggestion` 截断建议后再拼回。
26
+ */
27
+ const stripSuggestion = (text) => String(text ?? "").split(/<br\s*\/?>/i).map((segment) => stripValidateSuggestion(segment)).join("<br>");
28
+ /** 合并属性表单与样式表单的错误文案(去掉建议,本身可能仍是含 <br> 的 HTML) */
29
+ const errorMessage = computed(() => [stripSuggestion(invalidInfo.value?.props), stripSuggestion(invalidInfo.value?.style)].filter(Boolean).join("<br>"));
30
+ return (_ctx, _cache) => {
31
+ return openBlock(), createElementBlock("span", { class: normalizeClass(["m-editor-layer-node-content", { "is-invalid": hasError.value }]) }, [createElementVNode("span", _hoisted_1, toDisplayString(label.value), 1), hasError.value ? (openBlock(), createBlock(unref(TMagicTooltip), {
32
+ key: 0,
33
+ placement: "top"
34
+ }, {
35
+ content: withCtx(() => [createElementVNode("span", { innerHTML: errorMessage.value }, null, 8, _hoisted_2)]),
36
+ default: withCtx(() => [createVNode(Icon_default, {
37
+ class: "m-editor-layer-node-error-icon",
38
+ icon: unref(WarningFilled)
39
+ }, null, 8, ["icon"])]),
40
+ _: 1
41
+ })) : createCommentVNode("v-if", true)], 2);
42
+ };
43
+ }
44
+ });
45
+ //#endregion
46
+ export { LayerNodeContent_vue_vue_type_script_setup_true_lang_default as default };
@@ -3,7 +3,7 @@ import { TMagicButton } from "@tmagic/design";
3
3
  import { createBlock, createCommentVNode, defineComponent, openBlock, unref, withModifiers } from "vue";
4
4
  import { Hide, View } from "@element-plus/icons-vue";
5
5
  //#region packages/editor/src/layouts/sidebar/layer/LayerNodeTool.vue?vue&type=script&setup=true&lang.ts
6
- var LayerNodeTool_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var LayerNodeTool_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  __name: "LayerNodeTool",
8
8
  props: { data: {} },
9
9
  setup(__props) {
@@ -13,7 +13,7 @@ var LayerNodeTool_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
13
13
  editorService.update({
14
14
  id: props.data.id,
15
15
  visible
16
- });
16
+ }, { historySource: "tree" });
17
17
  };
18
18
  return (_ctx, _cache) => {
19
19
  return __props.data.type !== "page" ? (openBlock(), createBlock(unref(TMagicButton), {
@@ -3,6 +3,7 @@ import { useFilter } from "../../../hooks/use-filter.js";
3
3
  import SearchInput_default from "../../../components/SearchInput.js";
4
4
  import Tree_default from "../../../components/Tree.js";
5
5
  import LayerMenu_default from "./LayerMenu.js";
6
+ import LayerNodeContent_default from "./LayerNodeContent.js";
6
7
  import LayerNodeTool_default from "./LayerNodeTool.js";
7
8
  import { useClick } from "./use-click.js";
8
9
  import { useDrag } from "./use-drag.js";
@@ -11,7 +12,7 @@ import { useNodeStatus } from "./use-node-status.js";
11
12
  import { TMagicScrollbar } from "@tmagic/design";
12
13
  import { Teleport, computed, createBlock, createCommentVNode, createVNode, defineComponent, openBlock, renderSlot, unref, useTemplateRef, withCtx } from "vue";
13
14
  //#region packages/editor/src/layouts/sidebar/layer/LayerPanel.vue?vue&type=script&setup=true&lang.ts
14
- var LayerPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
15
+ var LayerPanel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
15
16
  name: "MEditorLayerPanel",
16
17
  __name: "LayerPanel",
17
18
  props: {
@@ -83,7 +84,7 @@ var LayerPanel_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
83
84
  }, {
84
85
  "tree-node-content": withCtx(({ data: nodeData }) => [renderSlot(_ctx.$slots, "layer-node-content", { data: nodeData })]),
85
86
  "tree-node-tool": withCtx(({ data: nodeData }) => [renderSlot(_ctx.$slots, "layer-node-tool", { data: nodeData }, () => [createVNode(LayerNodeTool_default, { data: nodeData }, null, 8, ["data"])])]),
86
- "tree-node-label": withCtx(({ data: nodeData }) => [renderSlot(_ctx.$slots, "layer-node-label", { data: nodeData })]),
87
+ "tree-node-label": withCtx(({ data: nodeData }) => [renderSlot(_ctx.$slots, "layer-node-label", { data: nodeData }, () => [createVNode(LayerNodeContent_default, { data: nodeData }, null, 8, ["data"])])]),
87
88
  _: 3
88
89
  }, 8, [
89
90
  "data",
@@ -1,6 +1,6 @@
1
1
  import { UI_SELECT_MODE_EVENT_NAME } from "../../../utils/const.js";
2
2
  import { updateStatus } from "../../../utils/tree.js";
3
- import { getElById, isPage, isPageFragment } from "@tmagic/utils";
3
+ import { getElById, isPageOrFragment } from "@tmagic/utils";
4
4
  import { computed, nextTick } from "vue";
5
5
  import { throttle } from "lodash-es";
6
6
  //#region packages/editor/src/layouts/sidebar/layer/use-click.ts
@@ -16,7 +16,7 @@ var useClick = ({ editorService, stageOverlayService, uiService }, isCtrlKeyDown
16
16
  }
17
17
  };
18
18
  const multiSelect = async (data) => {
19
- if (isPage(data) || isPageFragment(data)) return;
19
+ if (isPageOrFragment(data)) return;
20
20
  const nodes = editorService.get("nodes") || [];
21
21
  const newNodes = [];
22
22
  let isCancel = false;
@@ -25,7 +25,7 @@ var useClick = ({ editorService, stageOverlayService, uiService }, isCtrlKeyDown
25
25
  isCancel = true;
26
26
  return;
27
27
  }
28
- if (isPage(node) || isPageFragment(node)) return;
28
+ if (isPageOrFragment(node)) return;
29
29
  newNodes.push(node.id);
30
30
  });
31
31
  if (!isCancel || newNodes.length === 0) newNodes.push(data.id);
@@ -1,5 +1,5 @@
1
1
  import { updateStatus } from "../../../utils/tree.js";
2
- import { getNodePath, isPage, isPageFragment, traverseNode } from "@tmagic/utils";
2
+ import { getNodePath, isPageOrFragment, traverseNode } from "@tmagic/utils";
3
3
  import { computed, onBeforeUnmount, ref, watch } from "vue";
4
4
  //#region packages/editor/src/layouts/sidebar/layer/use-node-status.ts
5
5
  var createPageNodeStatus = (page, initialLayerNodeStatus) => {
@@ -75,7 +75,7 @@ var useNodeStatus = ({ editorService }) => {
75
75
  }, { immediate: true });
76
76
  const addHandler = (newNodes) => {
77
77
  newNodes.forEach((node) => {
78
- if (isPage(node) || isPageFragment(node)) return;
78
+ if (isPageOrFragment(node)) return;
79
79
  traverseNode(node, (node) => {
80
80
  nodeStatusMap.value?.set(node.id, {
81
81
  visible: true,
@@ -12,7 +12,7 @@ var _hoisted_2 = {
12
12
  class: "m-editor-breadcrumb-separator"
13
13
  };
14
14
  var COLLAPSE_RATIO = .8;
15
- var Breadcrumb_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
15
+ var Breadcrumb_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
16
16
  name: "MEditorBreadcrumb",
17
17
  __name: "Breadcrumb",
18
18
  setup(__props) {
@@ -4,7 +4,7 @@ import Breadcrumb_default from "./Breadcrumb.js";
4
4
  import { computed, createBlock, createCommentVNode, createElementBlock, createVNode, defineComponent, inject, openBlock, renderSlot, unref, withCtx } from "vue";
5
5
  //#region packages/editor/src/layouts/workspace/Workspace.vue?vue&type=script&setup=true&lang.ts
6
6
  var _hoisted_1 = { class: "m-editor-workspace" };
7
- var Workspace_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var Workspace_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
8
8
  name: "MEditorWorkspace",
9
9
  __name: "Workspace",
10
10
  props: {
@@ -7,11 +7,12 @@ import { TMagicTooltip } from "@tmagic/design";
7
7
  import { getIdFromEl } from "@tmagic/utils";
8
8
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, nextTick, openBlock, ref, unref, useTemplateRef, watch, withCtx } from "vue";
9
9
  //#region packages/editor/src/layouts/workspace/viewer/NodeListMenu.vue?vue&type=script&setup=true&lang.ts
10
- var NodeListMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
10
+ var NodeListMenu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
11
11
  __name: "NodeListMenu",
12
12
  setup(__props) {
13
13
  const services = useServices();
14
- const { editorService } = services;
14
+ const { editorService, uiService } = services;
15
+ const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
15
16
  const visible = ref(false);
16
17
  const buttonVisible = ref(false);
17
18
  const buttonEl = useTemplateRef("button");
@@ -71,6 +72,7 @@ var NodeListMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
71
72
  visible: visible.value,
72
73
  "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => visible.value = $event),
73
74
  title: "当前位置下的组件",
75
+ "framework-width": frameworkWidth.value,
74
76
  position: menuPosition.value
75
77
  }, {
76
78
  body: withCtx(() => [createVNode(Tree_default, {
@@ -80,7 +82,11 @@ var NodeListMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ d
80
82
  onNodeClick: clickHandler
81
83
  }, null, 8, ["data", "node-status-map"])]),
82
84
  _: 1
83
- }, 8, ["visible", "position"])) : createCommentVNode("v-if", true)], 64);
85
+ }, 8, [
86
+ "visible",
87
+ "framework-width",
88
+ "position"
89
+ ])) : createCommentVNode("v-if", true)], 64);
84
90
  };
85
91
  }
86
92
  });
@@ -11,7 +11,7 @@ import { getOffset } from "@tmagic/stage";
11
11
  import { calcValueByFontsize, getIdFromEl } from "@tmagic/utils";
12
12
  import { Teleport, computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, markRaw, nextTick, normalizeStyle, onBeforeUnmount, onMounted, openBlock, renderSlot, resolveDirective, useTemplateRef, watch, watchEffect, withCtx, withDirectives } from "vue";
13
13
  //#region packages/editor/src/layouts/workspace/viewer/Stage.vue?vue&type=script&setup=true&lang.ts
14
- var Stage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
14
+ var Stage_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
15
15
  name: "MEditorStage",
16
16
  __name: "Stage",
17
17
  props: {
@@ -226,7 +226,7 @@ var Stage_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineCo
226
226
  left: calcValueByFontsize(doc, left / zoom.value)
227
227
  };
228
228
  config.data.inputEvent = e;
229
- editorService.add(config.data, parent);
229
+ editorService.add(config.data, parent, { historySource: "component-panel" });
230
230
  }
231
231
  };
232
232
  return (_ctx, _cache) => {
@@ -8,7 +8,7 @@ var _hoisted_1 = {
8
8
  key: 0,
9
9
  class: "m-editor-stage-overlay"
10
10
  };
11
- var StageOverlay_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
11
+ var StageOverlay_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
12
  __name: "StageOverlay",
13
13
  setup(__props) {
14
14
  const { stageOverlayService, editorService, uiService } = useServices();
@@ -3,12 +3,12 @@ import { useServices } from "../../../hooks/use-services.js";
3
3
  import ContentMenu_default from "../../../components/ContentMenu.js";
4
4
  import { useCopyMenu, useDeleteMenu, useMoveToMenu, usePasteMenu } from "../../../utils/content-menu.js";
5
5
  import CenterIcon_default from "../../../icons/CenterIcon.js";
6
- import { isPage, isPageFragment } from "@tmagic/utils";
6
+ import { isPageOrFragment } from "@tmagic/utils";
7
7
  import { NodeType } from "@tmagic/core";
8
8
  import { computed, createBlock, defineComponent, markRaw, openBlock, ref, useTemplateRef, watch } from "vue";
9
9
  import { Bottom, Top } from "@element-plus/icons-vue";
10
10
  //#region packages/editor/src/layouts/workspace/viewer/ViewerMenu.vue?vue&type=script&setup=true&lang.ts
11
- var ViewerMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
11
+ var ViewerMenu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
12
  name: "MEditorViewerMenu",
13
13
  __name: "ViewerMenu",
14
14
  props: {
@@ -36,62 +36,62 @@ var ViewerMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
36
36
  display: () => canCenter.value,
37
37
  handler: () => {
38
38
  if (!nodes.value) return;
39
- editorService.alignCenter(nodes.value);
39
+ editorService.alignCenter(nodes.value, { historySource: "stage-contextmenu" });
40
40
  }
41
41
  },
42
42
  useCopyMenu(),
43
- usePasteMenu(menuRef),
43
+ usePasteMenu("stage-contextmenu", menuRef),
44
44
  {
45
45
  type: "divider",
46
46
  direction: "horizontal",
47
47
  display: () => {
48
48
  if (!node.value) return false;
49
- return !isPage(node.value) && !isPageFragment(node.value);
49
+ return !isPageOrFragment(node.value);
50
50
  }
51
51
  },
52
52
  {
53
53
  type: "button",
54
54
  text: "上移一层",
55
55
  icon: markRaw(Top),
56
- display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
56
+ display: () => !isPageOrFragment(node.value) && !props.isMultiSelect,
57
57
  handler: () => {
58
- editorService.moveLayer(1);
58
+ editorService.moveLayer(1, { historySource: "stage-contextmenu" });
59
59
  }
60
60
  },
61
61
  {
62
62
  type: "button",
63
63
  text: "下移一层",
64
64
  icon: markRaw(Bottom),
65
- display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
65
+ display: () => !isPageOrFragment(node.value) && !props.isMultiSelect,
66
66
  handler: () => {
67
- editorService.moveLayer(-1);
67
+ editorService.moveLayer(-1, { historySource: "stage-contextmenu" });
68
68
  }
69
69
  },
70
70
  {
71
71
  type: "button",
72
72
  text: "置顶",
73
73
  icon: markRaw(Top),
74
- display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
74
+ display: () => !isPageOrFragment(node.value) && !props.isMultiSelect,
75
75
  handler: () => {
76
- editorService.moveLayer(LayerOffset.TOP);
76
+ editorService.moveLayer(LayerOffset.TOP, { historySource: "stage-contextmenu" });
77
77
  }
78
78
  },
79
79
  {
80
80
  type: "button",
81
81
  text: "置底",
82
82
  icon: markRaw(Bottom),
83
- display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect,
83
+ display: () => !isPageOrFragment(node.value) && !props.isMultiSelect,
84
84
  handler: () => {
85
- editorService.moveLayer(LayerOffset.BOTTOM);
85
+ editorService.moveLayer(LayerOffset.BOTTOM, { historySource: "stage-contextmenu" });
86
86
  }
87
87
  },
88
- useMoveToMenu(services),
88
+ useMoveToMenu(services, "stage-contextmenu"),
89
89
  {
90
90
  type: "divider",
91
91
  direction: "horizontal",
92
- display: () => !isPage(node.value) && !isPageFragment(node.value) && !props.isMultiSelect
92
+ display: () => !isPageOrFragment(node.value) && !props.isMultiSelect
93
93
  },
94
- useDeleteMenu(),
94
+ useDeleteMenu("stage-contextmenu"),
95
95
  {
96
96
  type: "divider",
97
97
  direction: "horizontal"
package/dist/es/plugin.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { setEditorConfig } from "./utils/config.js";
2
+ import { editorTypeMatchRules } from "./utils/type-match-rules.js";
2
3
  import CodeEditor_default from "./layouts/CodeEditor.js";
3
4
  import Editor_default from "./Editor.js";
4
5
  import CodeSelect_default from "./fields/CodeSelect.js";
@@ -20,20 +21,22 @@ import Code_default from "./fields/Code.js";
20
21
  import CodeLink_default from "./fields/CodeLink.js";
21
22
  import UISelect_default from "./fields/UISelect.js";
22
23
  /* empty css */
23
- import formPlugin from "@tmagic/form";
24
+ import formPlugin, { registerTypeMatchRules } from "@tmagic/form";
24
25
  import tablePlugin from "@tmagic/table";
25
26
  import designPlugin from "@tmagic/design";
26
27
  //#region packages/editor/src/plugin.ts
27
28
  var defaultInstallOpt = {
28
29
  parseDSL: (dsl) => eval(dsl),
29
30
  customCreateMonacoEditor: (monaco, codeEditorEl, options) => monaco.editor.create(codeEditorEl, options),
30
- customCreateMonacoDiffEditor: (monaco, codeEditorEl, options) => monaco.editor.createDiffEditor(codeEditorEl, options)
31
+ customCreateMonacoDiffEditor: (monaco, codeEditorEl, options) => monaco.editor.createDiffEditor(codeEditorEl, options),
32
+ flat: false
31
33
  };
32
34
  var plugin_default = { install: (app, opt) => {
33
35
  const option = Object.assign(defaultInstallOpt, opt || {});
34
36
  app.use(designPlugin, opt || {});
35
37
  app.use(formPlugin, opt || {});
36
38
  app.use(tablePlugin);
39
+ registerTypeMatchRules(editorTypeMatchRules);
37
40
  app.config.globalProperties.$TMAGIC_EDITOR = option;
38
41
  setEditorConfig(option);
39
42
  app.component(`${Editor_default.name || "MEditor"}`, Editor_default);