@tmagic/editor 1.8.0-manmanyu.8 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +22 -13
  2. package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +10 -5
  3. package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +7 -6
  4. package/dist/es/components/CompareForm.vue_vue_type_script_setup_true_lang.js +21 -119
  5. package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +21 -5
  6. package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +62 -16
  7. package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +1 -1
  8. package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +3 -2
  9. package/dist/es/components/ScrollBar.js +0 -1
  10. package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +5 -4
  11. package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +1 -1
  12. package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +1 -1
  13. package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +1 -1
  14. package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +1 -1
  15. package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +1 -1
  16. package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +1 -1
  17. package/dist/es/components/ViewForm.js +5 -0
  18. package/dist/es/components/ViewForm.vue_vue_type_script_setup_true_lang.js +56 -0
  19. package/dist/es/editorProps.js +7 -1
  20. package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +1 -1
  21. package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +1 -1
  22. package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +30 -113
  23. package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +2 -2
  24. package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +7 -19
  25. package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +7 -6
  26. package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +4 -2
  27. package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +12 -4
  28. package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +9 -20
  29. package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +2 -2
  30. package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +5 -3
  31. package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +9 -4
  32. package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +2 -2
  33. package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +10 -110
  34. package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +52 -363
  35. package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +1 -1
  36. package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +1 -1
  37. package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +3 -6
  38. package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +1 -1
  39. package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +4 -35
  40. package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +3 -3
  41. package/dist/es/fields/StyleSetter/configs.js +663 -0
  42. package/dist/es/fields/StyleSetter/icons/align-items/Center.js +1 -1
  43. package/dist/es/fields/StyleSetter/icons/align-items/FlexEnd.js +1 -1
  44. package/dist/es/fields/StyleSetter/icons/align-items/FlexStart.js +1 -1
  45. package/dist/es/fields/StyleSetter/icons/align-items/SpaceAround.js +1 -1
  46. package/dist/es/fields/StyleSetter/icons/align-items/SpaceBetween.js +1 -1
  47. package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +1 -1
  48. package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +1 -1
  49. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +1 -1
  50. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +1 -1
  51. package/dist/es/fields/StyleSetter/icons/display/Block.js +1 -1
  52. package/dist/es/fields/StyleSetter/icons/display/Flex.js +1 -1
  53. package/dist/es/fields/StyleSetter/icons/display/Inline.js +1 -1
  54. package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +1 -1
  55. package/dist/es/fields/StyleSetter/icons/display/None.js +1 -1
  56. package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +1 -1
  57. package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +1 -1
  58. package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +1 -1
  59. package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +1 -1
  60. package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +1 -1
  61. package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +1 -1
  62. package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +1 -1
  63. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +1 -1
  64. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +1 -1
  65. package/dist/es/fields/StyleSetter/icons/text-align/Center.js +1 -1
  66. package/dist/es/fields/StyleSetter/icons/text-align/Left.js +1 -1
  67. package/dist/es/fields/StyleSetter/icons/text-align/Right.js +1 -1
  68. package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +29 -106
  69. package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +8 -11
  70. package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +30 -89
  71. package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +29 -297
  72. package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +29 -82
  73. package/dist/es/fields/StyleSetter/pro/Transform.vue_vue_type_script_setup_true_lang.js +8 -24
  74. package/dist/es/fields/UISelect.js +0 -1
  75. package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +1 -1
  76. package/dist/es/fields/configs/codeSelect.js +98 -0
  77. package/dist/es/fields/configs/displayConds.js +158 -0
  78. package/dist/es/fields/configs/eventSelect.js +225 -0
  79. package/dist/es/fields/configs/stickyAddButton.js +21 -0
  80. package/dist/es/fields/headless-validation.js +139 -0
  81. package/dist/es/headless.js +2 -0
  82. package/dist/es/hooks/use-code-block-edit.js +4 -2
  83. package/dist/es/hooks/use-compare-form.js +101 -0
  84. package/dist/es/hooks/use-form-context.js +29 -0
  85. package/dist/es/hooks/use-stage.js +1 -0
  86. package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  87. package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  88. package/dist/es/icons/DatasourceIcon.js +1 -1
  89. package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +1 -1
  90. package/dist/es/index.js +17 -9
  91. package/dist/es/initService.js +52 -16
  92. package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +1 -1
  93. package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +26 -10
  94. package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +11 -8
  95. package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +3 -3
  96. package/dist/es/layouts/NavMenuColumn.vue_vue_type_script_setup_true_lang.js +1 -1
  97. package/dist/es/layouts/history-list/Bucket.vue_vue_type_script_setup_true_lang.js +1 -1
  98. package/dist/es/layouts/history-list/BucketTab.vue_vue_type_script_setup_true_lang.js +8 -5
  99. package/dist/es/layouts/history-list/GroupRow.vue_vue_type_script_setup_true_lang.js +1 -1
  100. package/dist/es/layouts/history-list/HistoryDiffDialog.vue_vue_type_script_setup_true_lang.js +26 -10
  101. package/dist/es/layouts/history-list/HistoryListPanel.vue_vue_type_script_setup_true_lang.js +36 -28
  102. package/dist/es/layouts/history-list/InitialRow.vue_vue_type_script_setup_true_lang.js +1 -1
  103. package/dist/es/layouts/history-list/PageTab.vue_vue_type_script_setup_true_lang.js +1 -1
  104. package/dist/es/layouts/history-list/composables.js +1 -1
  105. package/dist/es/layouts/history-list/useHistoryList.js +4 -4
  106. package/dist/es/layouts/history-list/useHistoryRevert.js +38 -33
  107. package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +1 -1
  108. package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +1 -1
  109. package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +1 -1
  110. package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +1 -1
  111. package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +2 -2
  112. package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +50 -20
  113. package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +53 -35
  114. package/dist/es/layouts/props-panel/use-style-panel.js +3 -2
  115. package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +3 -3
  116. package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +21 -36
  117. package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +1 -1
  118. package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
  119. package/dist/es/layouts/sidebar/code-block/useContentMenu.js +19 -4
  120. package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +1 -1
  121. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +9 -4
  122. package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +1 -1
  123. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +4 -4
  124. package/dist/es/layouts/sidebar/data-source/useContentMenu.js +19 -4
  125. package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +3 -3
  126. package/dist/es/layouts/sidebar/layer/LayerNodeContent.js +5 -0
  127. package/dist/es/layouts/sidebar/layer/LayerNodeContent.vue_vue_type_script_setup_true_lang.js +46 -0
  128. package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +1 -1
  129. package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +6 -4
  130. package/dist/es/layouts/sidebar/layer/use-click.js +3 -3
  131. package/dist/es/layouts/sidebar/layer/use-drag.js +11 -10
  132. package/dist/es/layouts/sidebar/layer/use-node-status.js +2 -2
  133. package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +1 -1
  134. package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +1 -1
  135. package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +9 -3
  136. package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +55 -9
  137. package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +1 -1
  138. package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +8 -8
  139. package/dist/es/plugin.js +35 -23
  140. package/dist/es/services/codeBlock.js +40 -31
  141. package/dist/es/services/dataSource.js +46 -34
  142. package/dist/es/services/dep.js +162 -41
  143. package/dist/es/services/editor.js +373 -137
  144. package/dist/es/services/events.js +4 -4
  145. package/dist/es/services/history.js +275 -392
  146. package/dist/es/services/keybinding.js +3 -3
  147. package/dist/es/services/props.js +2 -1
  148. package/dist/es/services/storage.js +2 -2
  149. package/dist/es/services/ui.js +7 -2
  150. package/dist/es/style.css +277 -114
  151. package/dist/es/utils/code-block.js +14 -7
  152. package/dist/es/utils/config.js +4 -1
  153. package/dist/es/utils/const.js +2 -2
  154. package/dist/es/utils/content-menu.js +2 -2
  155. package/dist/es/utils/data-source/index.js +34 -12
  156. package/dist/es/utils/dep/collect-worker-client.js +154 -0
  157. package/dist/es/utils/dep/idle-task.js +70 -22
  158. package/dist/es/utils/dep/worker.js +1 -1
  159. package/dist/es/utils/editor.js +4 -2
  160. package/dist/es/utils/event.js +135 -0
  161. package/dist/es/utils/history.js +35 -47
  162. package/dist/es/utils/monaco-editor.js +22 -6
  163. package/dist/es/utils/operator.js +2 -2
  164. package/dist/es/utils/props.js +50 -106
  165. package/dist/es/utils/type-match-rules.js +356 -0
  166. package/dist/style.css +277 -114
  167. package/dist/themes/magic-admin.css +978 -175
  168. package/dist/tmagic-editor-headless.umd.cjs +10880 -0
  169. package/dist/tmagic-editor.umd.cjs +13047 -11363
  170. package/package.json +18 -13
  171. package/src/Editor.vue +23 -6
  172. package/src/components/CodeBlockEditor.vue +3 -0
  173. package/src/components/CodeParams.vue +10 -4
  174. package/src/components/CompareForm.vue +20 -190
  175. package/src/components/ContentMenu.vue +34 -6
  176. package/src/components/FloatingBox.vue +71 -7
  177. package/src/components/ScrollBar.vue +0 -67
  178. package/src/components/ViewForm.vue +54 -0
  179. package/src/editorProps.ts +23 -10
  180. package/src/fields/Code.vue +1 -1
  181. package/src/fields/CodeSelect.vue +20 -113
  182. package/src/fields/CodeSelectCol.vue +1 -1
  183. package/src/fields/CondOpSelect.vue +5 -26
  184. package/src/fields/DataSourceFieldSelect/FieldSelect.vue +2 -2
  185. package/src/fields/DataSourceFieldSelect/Index.vue +4 -1
  186. package/src/fields/DataSourceFields.vue +5 -1
  187. package/src/fields/DataSourceInput.vue +10 -28
  188. package/src/fields/DataSourceMethodSelect.vue +1 -1
  189. package/src/fields/DataSourceMethods.vue +6 -2
  190. package/src/fields/DataSourceMocks.vue +3 -0
  191. package/src/fields/DataSourceSelect.vue +1 -1
  192. package/src/fields/DisplayConds.vue +17 -139
  193. package/src/fields/EventSelect.vue +29 -416
  194. package/src/fields/KeyValue.vue +1 -1
  195. package/src/fields/StyleSetter/Index.vue +2 -8
  196. package/src/fields/StyleSetter/components/Border.vue +4 -38
  197. package/src/fields/StyleSetter/components/Box.vue +1 -1
  198. package/src/fields/StyleSetter/components/Position.vue +1 -1
  199. package/src/fields/StyleSetter/configs.ts +690 -0
  200. package/src/fields/StyleSetter/pro/Background.vue +9 -64
  201. package/src/fields/StyleSetter/pro/Border.vue +5 -16
  202. package/src/fields/StyleSetter/pro/Font.vue +11 -71
  203. package/src/fields/StyleSetter/pro/Layout.vue +10 -230
  204. package/src/fields/StyleSetter/pro/Position.vue +11 -82
  205. package/src/fields/StyleSetter/pro/Transform.vue +6 -34
  206. package/src/fields/UISelect.vue +0 -12
  207. package/src/fields/configs/codeSelect.ts +127 -0
  208. package/src/fields/configs/displayConds.ts +184 -0
  209. package/src/fields/configs/eventSelect.ts +309 -0
  210. package/src/fields/configs/stickyAddButton.ts +32 -0
  211. package/src/fields/headless-validation.ts +177 -0
  212. package/src/headless.ts +33 -0
  213. package/src/hooks/index.ts +1 -0
  214. package/src/hooks/use-compare-form.ts +166 -0
  215. package/src/hooks/use-form-context.ts +56 -0
  216. package/src/hooks/use-stage.ts +1 -0
  217. package/src/index.ts +9 -0
  218. package/src/initService.ts +73 -18
  219. package/src/layouts/CodeEditor.vue +32 -6
  220. package/src/layouts/Framework.vue +7 -6
  221. package/src/layouts/history-list/BucketTab.vue +2 -2
  222. package/src/layouts/history-list/HistoryDiffDialog.vue +33 -15
  223. package/src/layouts/history-list/HistoryListPanel.vue +16 -18
  224. package/src/layouts/history-list/useHistoryRevert.ts +57 -41
  225. package/src/layouts/props-panel/FormPanel.vue +75 -20
  226. package/src/layouts/props-panel/PropsPanel.vue +81 -30
  227. package/src/layouts/props-panel/use-style-panel.ts +4 -3
  228. package/src/layouts/sidebar/ComponentListPanel.vue +6 -2
  229. package/src/layouts/sidebar/Sidebar.vue +5 -3
  230. package/src/layouts/sidebar/code-block/CodeBlockListPanel.vue +5 -2
  231. package/src/layouts/sidebar/code-block/useContentMenu.ts +14 -2
  232. package/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +3 -0
  233. package/src/layouts/sidebar/data-source/DataSourceListPanel.vue +3 -3
  234. package/src/layouts/sidebar/data-source/useContentMenu.ts +14 -2
  235. package/src/layouts/sidebar/layer/LayerMenu.vue +2 -2
  236. package/src/layouts/sidebar/layer/LayerNodeContent.vue +57 -0
  237. package/src/layouts/sidebar/layer/LayerPanel.vue +5 -2
  238. package/src/layouts/sidebar/layer/use-click.ts +3 -3
  239. package/src/layouts/sidebar/layer/use-node-status.ts +2 -2
  240. package/src/layouts/workspace/viewer/NodeListMenu.vue +4 -1
  241. package/src/layouts/workspace/viewer/Stage.vue +80 -10
  242. package/src/layouts/workspace/viewer/ViewerMenu.vue +7 -7
  243. package/src/plugin.ts +35 -25
  244. package/src/services/codeBlock.ts +4 -0
  245. package/src/services/dataSource.ts +3 -0
  246. package/src/services/dep.ts +292 -47
  247. package/src/services/editor.ts +383 -120
  248. package/src/services/events.ts +8 -7
  249. package/src/services/history.ts +22 -1
  250. package/src/services/keybinding.ts +3 -3
  251. package/src/services/ui.ts +26 -5
  252. package/src/theme/code-block.scss +0 -37
  253. package/src/theme/display-conds.scss +4 -0
  254. package/src/theme/event.scss +25 -33
  255. package/src/theme/floating-box.scss +9 -1
  256. package/src/theme/framework.scss +4 -1
  257. package/src/theme/layer-node-content.scss +14 -0
  258. package/src/theme/nav-menu.scss +5 -1
  259. package/src/theme/props-panel.scss +17 -3
  260. package/src/theme/scroll-bar.scss +64 -0
  261. package/src/theme/theme.scss +3 -0
  262. package/src/theme/themes/magic-admin/index.scss +109 -9
  263. package/src/theme/ui-select.scss +9 -0
  264. package/src/type.ts +216 -6
  265. package/src/utils/code-block.ts +1 -0
  266. package/src/utils/config.ts +9 -1
  267. package/src/utils/const.ts +3 -3
  268. package/src/utils/content-menu.ts +2 -2
  269. package/src/utils/data-source/index.ts +31 -12
  270. package/src/utils/dep/collect-worker-client.ts +215 -0
  271. package/src/utils/dep/idle-task.ts +104 -35
  272. package/src/utils/dep/worker.ts +113 -9
  273. package/src/utils/event.ts +237 -0
  274. package/src/utils/index.ts +2 -0
  275. package/src/utils/monaco-editor.ts +27 -0
  276. package/src/utils/operator.ts +2 -2
  277. package/src/utils/props.ts +61 -122
  278. package/src/utils/type-match-rules.ts +697 -0
  279. package/types/headless.d.ts +17 -0
  280. package/types/index.d.ts +1494 -978
  281. package/src/fields/StyleSetter/icons/align-items/index copy.ts +0 -5
@@ -1,31 +1,34 @@
1
+ import { useEditorFormContext } from "./hooks/use-form-context.js";
1
2
  import props_default from "./services/props.js";
2
3
  import history_default from "./services/history.js";
3
4
  import storage_default from "./services/storage.js";
4
5
  import editor_default from "./services/editor.js";
5
6
  import ui_default from "./services/ui.js";
7
+ import codeBlock_default from "./services/codeBlock.js";
8
+ import dataSource_default from "./services/dataSource.js";
9
+ import events_default from "./services/events.js";
6
10
  import Framework_default from "./layouts/Framework.js";
7
11
  import NavMenu_default from "./layouts/NavMenu.js";
12
+ import { ENABLE_PROPS_FORM_VALIDATE, defaultEditorProps } from "./editorProps.js";
8
13
  import PropsPanel_default from "./layouts/props-panel/PropsPanel.js";
9
14
  import keybinding_config_default from "./utils/keybinding-config.js";
10
15
  import Sidebar_default from "./layouts/sidebar/Sidebar.js";
11
16
  import Workspace_default from "./layouts/workspace/Workspace.js";
12
- import codeBlock_default from "./services/codeBlock.js";
13
17
  import componentList_default from "./services/componentList.js";
14
- import dataSource_default from "./services/dataSource.js";
15
18
  import dep_default from "./services/dep.js";
16
- import events_default from "./services/events.js";
17
19
  import keybinding_default from "./services/keybinding.js";
18
20
  import stageOverlay_default from "./services/stageOverlay.js";
19
- import { defaultEditorProps } from "./editorProps.js";
20
21
  import { initServiceEvents, initServiceState } from "./initService.js";
22
+ import { FORM_CONTEXT_KEY } from "@tmagic/form";
21
23
  import { M_THEME_KEY } from "@tmagic/design";
22
24
  import { computed, createBlock, createVNode, defineComponent, mergeDefaults, openBlock, provide, renderSlot, unref, withCtx } from "vue";
23
25
  import { EventEmitter } from "events";
24
26
  //#region packages/editor/src/Editor.vue?vue&type=script&setup=true&lang.ts
25
- var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
27
+ var Editor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
26
28
  name: "MEditor",
27
29
  __name: "Editor",
28
- props: /* @__PURE__ */ mergeDefaults({
30
+ props: /*@__PURE__*/ mergeDefaults({
31
+ isLargeStageContainer: { type: Boolean },
29
32
  theme: {},
30
33
  modelValue: {},
31
34
  componentGroupList: {},
@@ -49,6 +52,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
49
52
  containerHighlightClassName: {},
50
53
  containerHighlightDuration: {},
51
54
  containerHighlightType: {},
55
+ containerHighlightAddOnly: { type: Boolean },
52
56
  stageRect: {},
53
57
  codeOptions: {},
54
58
  disabledDragStart: { type: Boolean },
@@ -58,6 +62,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
58
62
  disabledPageFragment: { type: Boolean },
59
63
  disabledFlashTip: { type: Boolean },
60
64
  disabledStageOverlay: { type: Boolean },
65
+ enablePropsFormValidate: { type: Boolean },
61
66
  disabledShowSrc: { type: Boolean },
62
67
  disabledDataSource: { type: Boolean },
63
68
  disabledCodeBlock: { type: Boolean },
@@ -72,7 +77,6 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
72
77
  canDropIn: { type: Function },
73
78
  beforeDblclick: { type: Function },
74
79
  beforeLayerNodeDblclick: { type: Function },
75
- extendFormState: { type: Function },
76
80
  historyListExtraTabs: {},
77
81
  pageBarSortOptions: {},
78
82
  pageFilterFunction: { type: Function }
@@ -118,6 +122,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
118
122
  containerHighlightClassName: props.containerHighlightClassName,
119
123
  containerHighlightDuration: props.containerHighlightDuration,
120
124
  containerHighlightType: props.containerHighlightType,
125
+ containerHighlightAddOnly: props.containerHighlightAddOnly,
121
126
  disabledDragStart: props.disabledDragStart,
122
127
  renderType: props.renderType,
123
128
  guidesOptions: props.guidesOptions,
@@ -130,12 +135,17 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
130
135
  provide("services", services);
131
136
  provide("codeOptions", props.codeOptions);
132
137
  provide("stageOptions", stageOptions);
138
+ /** 是否启用「属性配置表单校验」联动能力,供 PropsPanel / FormPanel 判断校验失败时是否仍更新节点并记录错误 */
139
+ provide(ENABLE_PROPS_FORM_VALIDATE, props.enablePropsFormValidate ?? false);
133
140
  /**
134
- * 把顶层 `extendFormState` 提供给非 PropsPanel 链路上的组件使用(例如历史差异对话框 HistoryDiffDialog
135
- * 内部的 CompareForm)。这样所有依赖业务上下文的表单 filterFunction 都能拿到一致的扩展状态,
136
- * 与 PropsPanel 通过 `:extend-state` 显式传入的方式保持等价。
141
+ * 编辑器注入给整棵表单树的业务上下文(`services` / `stage`),属性面板、对比表单、
142
+ * 侧边栏里的嵌套 MForm 都通过 inject 自动继承。
143
+ *
144
+ * 业务方要追加自己的字段,在 `<MEditor>` 外层再 `provide(FORM_CONTEXT_KEY, computed(...))`
145
+ * 即可,配置回调统一通过 `mForm.xxx` 读取。
137
146
  */
138
- provide("extendFormState", props.extendFormState);
147
+ provide(FORM_CONTEXT_KEY, useEditorFormContext(() => services));
148
+ provide("isLargeStageContainer", computed(() => props.isLargeStageContainer));
139
149
  /**
140
150
  * 把历史记录面板的自定义扩展 tab 提供给深层的 HistoryListPanel(它挂在 NavMenu 中,
141
151
  * 以 markRaw component 形式渲染,无法直接通过 props 透传)。业务方可借此在历史记录
@@ -229,7 +239,6 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
229
239
  "custom-content-menu"
230
240
  ])])]),
231
241
  "props-panel": withCtx(() => [renderSlot(_ctx.$slots, "props-panel", {}, () => [createVNode(PropsPanel_default, {
232
- "extend-state": __props.extendFormState,
233
242
  "disabled-show-src": __props.disabledShowSrc,
234
243
  onMounted: propsPanelMountedHandler,
235
244
  onUnmounted: propsPanelUnmountedHandler,
@@ -238,7 +247,7 @@ var Editor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineC
238
247
  }, {
239
248
  "props-panel-header": withCtx(() => [renderSlot(_ctx.$slots, "props-panel-header")]),
240
249
  _: 3
241
- }, 8, ["extend-state", "disabled-show-src"])])]),
250
+ }, 8, ["disabled-show-src"])])]),
242
251
  empty: withCtx(() => [renderSlot(_ctx.$slots, "empty", { editorService: unref(editor_default) })]),
243
252
  "content-after": withCtx(() => [renderSlot(_ctx.$slots, "content-after")]),
244
253
  footer: withCtx(() => [renderSlot(_ctx.$slots, "footer")]),
@@ -1,9 +1,9 @@
1
1
  import { getEditorConfig } from "../utils/config.js";
2
+ import { getCodeBlockFormConfig } from "../utils/code-block.js";
2
3
  import { useServices } from "../hooks/use-services.js";
3
4
  import { useWindowRect } from "../hooks/use-window-rect.js";
4
5
  import { useEditorContentHeight } from "../hooks/use-editor-content-height.js";
5
6
  import { useNextFloatBoxPosition } from "../hooks/use-next-float-box-position.js";
6
- import { getCodeBlockFormConfig } from "../utils/code-block.js";
7
7
  import CodeEditor_default from "../layouts/CodeEditor.js";
8
8
  import FloatingBox_default from "./FloatingBox.js";
9
9
  import { MFormBox } from "@tmagic/form";
@@ -17,10 +17,10 @@ var _hoisted_1 = { style: {
17
17
  var _hoisted_2 = { style: { "flex": "1" } };
18
18
  var _hoisted_3 = { style: { "flex": "1" } };
19
19
  var _hoisted_4 = { class: "dialog-footer" };
20
- var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
20
+ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
21
21
  name: "MEditorCodeBlockEditor",
22
22
  __name: "CodeBlockEditor",
23
- props: /* @__PURE__ */ mergeModels({
23
+ props: /*@__PURE__*/ mergeModels({
24
24
  content: {},
25
25
  disabled: { type: Boolean },
26
26
  isDataSource: { type: Boolean },
@@ -34,7 +34,7 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
34
34
  },
35
35
  "visibleModifiers": {}
36
36
  }),
37
- emits: /* @__PURE__ */ mergeModels([
37
+ emits: /*@__PURE__*/ mergeModels([
38
38
  "submit",
39
39
  "close",
40
40
  "open"
@@ -119,7 +119,9 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
119
119
  const closedHandler = () => {
120
120
  changedValue.value = void 0;
121
121
  };
122
- const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, inject("parentFloating", ref(null)));
122
+ const parentFloating = inject("parentFloating", ref(null));
123
+ const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, parentFloating);
124
+ const frameworkWidth = computed(() => uiService.get("frameworkRect")?.width || 0);
123
125
  watch(boxVisible, (visible) => {
124
126
  nextTick(() => {
125
127
  if (!visible) emit("close");
@@ -145,7 +147,9 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
145
147
  "onUpdate:width": _cache[2] || (_cache[2] = ($event) => width.value = $event),
146
148
  height: unref(codeBlockEditorHeight),
147
149
  "onUpdate:height": _cache[3] || (_cache[3] = ($event) => isRef(codeBlockEditorHeight) ? codeBlockEditorHeight.value = $event : null),
150
+ "body-style": { padding: "0 16px" },
148
151
  title: __props.content.name ? `${__props.disabled ? "查看" : "编辑"}${__props.content.name}` : "新增代码",
152
+ "framework-width": frameworkWidth.value,
149
153
  position: unref(boxPosition),
150
154
  "before-close": beforeClose
151
155
  }, {
@@ -187,6 +191,7 @@ var CodeBlockEditor_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ *
187
191
  "width",
188
192
  "height",
189
193
  "title",
194
+ "framework-width",
190
195
  "position"
191
196
  ]),
192
197
  (openBlock(), createBlock(Teleport, { to: "body" }, [createVNode(unref(TMagicDialog), {
@@ -1,8 +1,8 @@
1
1
  import { error } from "../utils/logger.js";
2
- import { MForm } from "@tmagic/form";
2
+ import { MForm, defineFormItem } from "@tmagic/form";
3
3
  import { computed, createBlock, defineComponent, openBlock, unref, useTemplateRef } from "vue";
4
4
  //#region packages/editor/src/components/CodeParams.vue?vue&type=script&setup=true&lang.ts
5
- var CodeParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var CodeParams_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MEditorCodeParams",
7
7
  __name: "CodeParams",
8
8
  props: {
@@ -19,13 +19,13 @@ var CodeParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
19
19
  const props = __props;
20
20
  const emit = __emit;
21
21
  const formRef = useTemplateRef("form");
22
- const getFormConfig = (items = []) => [{
22
+ const getFormConfig = (items = []) => [defineFormItem({
23
23
  type: "fieldset",
24
24
  items,
25
25
  legend: "参数",
26
- labelWidth: "120px",
26
+ labelPosition: "top",
27
27
  name: props.name
28
- }];
28
+ })];
29
29
  const codeParamsConfig = computed(() => getFormConfig(props.paramsConfig.map(({ name, text, extra, ...config }) => {
30
30
  let { type } = config;
31
31
  if (typeof type === "function") type = type(void 0, { model: props.model[props.name] });
@@ -48,7 +48,8 @@ var CodeParams_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ def
48
48
  */
49
49
  const onParamsChangeHandler = async (v, eventData) => {
50
50
  try {
51
- emit("change", await formRef.value?.submitForm(true), eventData);
51
+ const value = await formRef.value?.submitForm(true);
52
+ emit("change", value, eventData);
52
53
  } catch (e) {
53
54
  error(e);
54
55
  }
@@ -1,68 +1,37 @@
1
- import { useServices } from "../hooks/use-services.js";
2
- import { getCodeBlockFormConfig } from "../utils/code-block.js";
1
+ import { useCompareForm } from "../hooks/use-compare-form.js";
3
2
  import { MForm } from "@tmagic/form";
4
3
  import { HookType } from "@tmagic/core";
5
- import { computed, createBlock, createCommentVNode, createElementBlock, defineComponent, inject, normalizeStyle, openBlock, provide, ref, unref, useTemplateRef, watch, watchEffect } from "vue";
4
+ import { computed, createBlock, createCommentVNode, createElementBlock, defineComponent, normalizeStyle, openBlock, unref } from "vue";
6
5
  import { isEqual } from "lodash-es";
7
6
  //#region packages/editor/src/components/CompareForm.vue?vue&type=script&setup=true&lang.ts
8
- var CompareForm_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
7
+ var CompareForm_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
9
8
  name: "MEditorCompareForm",
10
9
  __name: "CompareForm",
11
10
  props: {
12
11
  value: {},
13
- lastValue: {},
14
12
  type: {},
15
13
  category: { default: "node" },
16
14
  dataSourceType: {},
17
15
  labelWidth: { default: "120px" },
18
16
  height: {},
19
- extendState: {},
17
+ size: {},
20
18
  loadConfig: {},
21
- services: { default: () => useServices() }
19
+ services: {},
20
+ lastValue: {},
21
+ selfDiffFieldTypes: {}
22
22
  },
23
23
  setup(__props, { expose: __expose }) {
24
24
  const props = __props;
25
- const { propsService, dataSourceService, codeBlockService, editorService } = props.services;
26
- provide("services", props.services);
27
- const config = ref([]);
28
- /** vs-code 编辑器的 monaco 配置项,沿用 Editor 顶层 provide('codeOptions', ...) 的注入。 */
29
- const codeOptions = inject("codeOptions", {});
30
- /** 将代码块的 content 字段统一成字符串,便于在表单/对比中展示 */
31
- const normalizeCodeBlockValue = (v) => {
32
- if (!v) return {};
33
- const next = { ...v };
34
- if (next.content && typeof next.content !== "string") try {
35
- next.content = next.content.toString();
36
- } catch {
37
- next.content = "";
38
- }
39
- return next;
40
- };
41
- const currentValues = computed(() => {
42
- if (props.category === "code-block") return normalizeCodeBlockValue(props.value);
43
- return props.value || {};
44
- });
25
+ const { config, currentValues, wrapperStyle, formContext, loadConfig, formRef, normalizeCodeBlockValue } = useCompareForm(props);
45
26
  const lastValuesProcessed = computed(() => {
46
27
  if (props.category === "code-block") return normalizeCodeBlockValue(props.lastValue);
47
28
  return props.lastValue || {};
48
29
  });
49
30
  /**
50
- * 外层包裹层的样式:当传入 `height` 时启用固定高度 + 内部滚动,
51
- * 这样滚动条会出现在 CompareForm 内部,避免父容器(如 Dialog)自身也产生滚动。
52
- */
53
- const wrapperStyle = computed(() => {
54
- if (!props.height) return void 0;
55
- return {
56
- height: props.height,
57
- overflow: "auto"
58
- };
59
- });
60
- /**
61
31
  * `code-select` 字段在历史数据中存在两种"语义为空"的形态:
62
32
  * - 字符串 `''`(旧数据 / 用户从未配置过钩子);
63
- * - `{ hookType: HookType.CODE, hookData: [] }`(CodeSelect.vue 在挂载时
64
- * 写入的默认结构,参见 packages/editor/src/fields/CodeSelect.vue 中
65
- * `props.model[props.name] = { hookType: HookType.CODE, hookData: [] }`)。
33
+ * - `{ hookType: HookType.CODE, hookData: [] }`(`normalizeCodeSelectValue`
34
+ * 写入的默认结构)。
66
35
  *
67
36
  * 直接 `isEqual` 会把两者判为不等,从而在历史对比里对每个未配置过钩子的组件
68
37
  * 都展示一份"差异",体验很糟糕。这里把它们视为相等,跳过对比。
@@ -80,77 +49,6 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
80
49
  }
81
50
  return !isEqual(curValue, lastValue);
82
51
  };
83
- const removeStyleDisplayConfig = (formConfig) => formConfig.map((item) => {
84
- if (!("type" in item)) return item;
85
- if (item?.type !== "tab" || !Array.isArray(item.items)) return item;
86
- return {
87
- ...item,
88
- items: item.items.map((tabPane) => {
89
- if (tabPane?.title !== "样式" || !Array.isArray(tabPane.items)) return tabPane;
90
- return {
91
- ...tabPane,
92
- display: true
93
- };
94
- })
95
- };
96
- });
97
- /**
98
- * 内置的默认 FormConfig 加载逻辑:按 `category` 从对应 service / 工具取配置。
99
- * 作为 ctx.defaultLoadConfig 透传给自定义 `loadConfig`,方便复用与二次加工。
100
- */
101
- const defaultLoadConfig = async () => {
102
- switch (props.category) {
103
- case "node":
104
- if (!props.type) return [];
105
- return removeStyleDisplayConfig(await propsService.getPropsConfig(props.type, { node: props.value }));
106
- case "data-source": return dataSourceService.getFormConfig(props.type || "base");
107
- case "code-block": return getCodeBlockFormConfig({
108
- paramColConfig: codeBlockService.getParamsColConfig(),
109
- isDataSource: () => Boolean(props.dataSourceType),
110
- dataSourceType: () => props.dataSourceType,
111
- codeOptions,
112
- editable: false
113
- });
114
- default: return [];
115
- }
116
- };
117
- const loadConfig = async () => {
118
- if (props.loadConfig) {
119
- config.value = await props.loadConfig({
120
- category: props.category,
121
- type: props.type,
122
- dataSourceType: props.dataSourceType,
123
- defaultLoadConfig
124
- });
125
- return;
126
- }
127
- config.value = await defaultLoadConfig();
128
- };
129
- watch([
130
- () => props.category,
131
- () => props.type,
132
- () => props.dataSourceType,
133
- () => props.loadConfig
134
- ], () => {
135
- loadConfig();
136
- }, { immediate: true });
137
- const formRef = useTemplateRef("form");
138
- /**
139
- * 把 services / stage 注入 MForm 的 formState,避免 propsService 注入的表单配置中
140
- * 形如 `display: ({ services }) => services.uiService.get(...)` 的 filterFunction
141
- * 在执行时拿不到 `formState.services` 而报错。
142
- *
143
- * 与 props-panel/FormPanel.vue 中的注入方式保持一致:
144
- * - services:整个 useServices() 返回的服务集合;
145
- * - stage:当前 editorService.get('stage') 的最新值。
146
- */
147
- const stage = computed(() => editorService.get("stage"));
148
- watchEffect(() => {
149
- if (formRef.value) {
150
- formRef.value.formState.stage = stage.value;
151
- formRef.value.formState.services = props.services;
152
- }
153
- });
154
52
  __expose({
155
53
  form: formRef,
156
54
  config,
@@ -159,25 +57,29 @@ var CompareForm_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
159
57
  return (_ctx, _cache) => {
160
58
  return openBlock(), createElementBlock("div", {
161
59
  class: "m-editor-compare-form-wrapper",
162
- style: normalizeStyle(wrapperStyle.value)
163
- }, [config.value.length ? (openBlock(), createBlock(unref(MForm), {
60
+ style: normalizeStyle(unref(wrapperStyle))
61
+ }, [unref(config).length ? (openBlock(), createBlock(unref(MForm), {
164
62
  key: 0,
165
63
  ref: "form",
166
64
  class: "m-editor-compare-form",
167
- config: config.value,
168
- "init-values": currentValues.value,
65
+ config: unref(config),
66
+ "init-values": unref(currentValues),
169
67
  "last-values": lastValuesProcessed.value,
170
68
  "is-compare": true,
171
69
  disabled: true,
172
70
  "label-width": __props.labelWidth,
173
- "extend-state": __props.extendState,
174
- "show-diff": showDiff
71
+ context: unref(formContext),
72
+ "show-diff": showDiff,
73
+ "self-diff-field-types": __props.selfDiffFieldTypes,
74
+ size: __props.size
175
75
  }, null, 8, [
176
76
  "config",
177
77
  "init-values",
178
78
  "last-values",
179
79
  "label-width",
180
- "extend-state"
80
+ "context",
81
+ "self-diff-field-types",
82
+ "size"
181
83
  ])) : createCommentVNode("v-if", true)], 4);
182
84
  };
183
85
  }
@@ -2,7 +2,7 @@ import ToolButton_default from "./ToolButton.js";
2
2
  import { useThemeClass, useZIndex } from "@tmagic/design";
3
3
  import { Fragment, Teleport, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, openBlock, ref, renderList, renderSlot, resolveComponent, unref, useTemplateRef, vShow, withCtx, withDirectives, withModifiers } from "vue";
4
4
  //#region packages/editor/src/components/ContentMenu.vue?vue&type=script&setup=true&lang.ts
5
- var ContentMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
5
+ var ContentMenu_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
6
6
  name: "MEditorContentMenu",
7
7
  __name: "ContentMenu",
8
8
  props: {
@@ -66,15 +66,29 @@ var ContentMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
66
66
  if (contains(target)) return;
67
67
  hide();
68
68
  };
69
+ const fixPosition = () => {
70
+ const menu = menuEl.value;
71
+ if (!menu || !visible.value) return;
72
+ const menuHeight = menu.clientHeight;
73
+ const menuWidth = menu.clientWidth;
74
+ let { top, left } = menuPosition.value;
75
+ if (top + menuHeight > document.body.clientHeight) top = Math.max(0, document.body.clientHeight - menuHeight);
76
+ if (left + menuWidth > document.body.clientWidth) left = Math.max(0, document.body.clientWidth - menuWidth);
77
+ if (top !== menuPosition.value.top || left !== menuPosition.value.left) menuPosition.value = {
78
+ top,
79
+ left
80
+ };
81
+ };
69
82
  const setPosition = (e) => {
70
- const menuHeight = menuEl.value?.clientHeight || 0;
71
- let top = e.clientY;
72
- if (menuHeight + e.clientY > document.body.clientHeight) top = document.body.clientHeight - menuHeight;
73
83
  menuPosition.value = {
74
- top,
84
+ top: e.clientY,
75
85
  left: e.clientX
76
86
  };
87
+ fixPosition();
77
88
  };
89
+ const resizeObserver = new ResizeObserver(() => {
90
+ fixPosition();
91
+ });
78
92
  const show = (e) => {
79
93
  visible.value = true;
80
94
  nextTick(() => {
@@ -103,10 +117,12 @@ var ContentMenu_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
103
117
  emit("mouseenter");
104
118
  };
105
119
  onMounted(() => {
120
+ if (menuEl.value) resizeObserver.observe(menuEl.value);
106
121
  if (props.isSubMenu) return;
107
122
  globalThis.addEventListener("mousedown", outsideClickHideHandler, true);
108
123
  });
109
124
  onBeforeUnmount(() => {
125
+ resizeObserver.disconnect();
110
126
  if (props.isSubMenu) return;
111
127
  globalThis.removeEventListener("mousedown", outsideClickHideHandler, true);
112
128
  });
@@ -1,7 +1,6 @@
1
- import { useServices } from "../hooks/use-services.js";
2
1
  import Icon_default from "./Icon.js";
3
2
  import { TMagicButton, useThemeClass, useZIndex } from "@tmagic/design";
4
- import { Teleport, computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, mergeModels, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, openBlock, provide, ref, renderSlot, toDisplayString, unref, useModel, useTemplateRef, watch, withCtx } from "vue";
3
+ import { Teleport, computed, createBlock, createCommentVNode, createElementVNode, createVNode, defineComponent, mergeModels, mergeProps, nextTick, normalizeStyle, onBeforeUnmount, openBlock, provide, ref, renderSlot, toDisplayString, unref, useModel, useTemplateRef, watch, withCtx } from "vue";
5
4
  import { Close } from "@element-plus/icons-vue";
6
5
  import VanillaMoveable from "moveable";
7
6
  //#region packages/editor/src/components/FloatingBox.vue?vue&type=script&setup=true&lang.ts
@@ -9,14 +8,17 @@ var _hoisted_1 = {
9
8
  ref: "title",
10
9
  class: "m-editor-float-box-title"
11
10
  };
12
- var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
11
+ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
13
12
  __name: "FloatingBox",
14
- props: /* @__PURE__ */ mergeModels({
13
+ props: /*@__PURE__*/ mergeModels({
15
14
  position: { default: () => ({
16
15
  left: 0,
17
16
  top: 0
18
17
  }) },
19
18
  title: { default: "" },
19
+ bodyStyle: {},
20
+ initialStyle: { default: () => ({}) },
21
+ frameworkWidth: { default: 0 },
20
22
  beforeClose: {}
21
23
  }, {
22
24
  "width": { default: 0 },
@@ -54,19 +56,51 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
54
56
  if (targetEl.value) return targetEl.value.clientHeight - titleHeight.value;
55
57
  return "auto";
56
58
  });
57
- const { uiService } = useServices();
58
- const frameworkWidth = computed(() => uiService.get("frameworkRect").width || 0);
59
59
  const style = computed(() => {
60
60
  let { left } = props.position;
61
- if (width.value) left = left + width.value > frameworkWidth.value ? frameworkWidth.value - width.value : left;
61
+ const frameworkWidth = props.frameworkWidth || globalThis.window?.innerWidth || 0;
62
+ if (width.value && frameworkWidth) left = left + width.value > frameworkWidth ? frameworkWidth - width.value : left;
62
63
  return {
63
64
  left: `${left}px`,
64
65
  top: `${props.position.top}px`,
65
66
  width: width.value ? `${width.value}px` : "auto",
66
- height: height.value ? `${height.value}px` : "auto"
67
+ height: height.value ? `${height.value}px` : "auto",
68
+ ...props.initialStyle
67
69
  };
68
70
  });
69
71
  let moveable = null;
72
+ let dragMask = null;
73
+ let dragMaskVisible = false;
74
+ const bindDragMaskSafety = () => {
75
+ globalThis.window?.addEventListener("pointerup", hideDragMask, true);
76
+ globalThis.window?.addEventListener("blur", hideDragMask);
77
+ globalThis.document?.addEventListener("visibilitychange", hideDragMask);
78
+ };
79
+ const unbindDragMaskSafety = () => {
80
+ globalThis.window?.removeEventListener("pointerup", hideDragMask, true);
81
+ globalThis.window?.removeEventListener("blur", hideDragMask);
82
+ globalThis.document?.removeEventListener("visibilitychange", hideDragMask);
83
+ };
84
+ const showDragMask = () => {
85
+ if (dragMaskVisible) return;
86
+ if (!dragMask) {
87
+ dragMask = globalThis.document.createElement("div");
88
+ dragMask.className = "m-editor-float-box-drag-mask";
89
+ }
90
+ globalThis.document.body.appendChild(dragMask);
91
+ dragMaskVisible = true;
92
+ bindDragMaskSafety();
93
+ const setMaskZIndex = () => {
94
+ if (dragMask) dragMask.style.zIndex = `${curZIndex.value + 1}`;
95
+ };
96
+ setMaskZIndex();
97
+ nextTick(setMaskZIndex);
98
+ };
99
+ const hideDragMask = () => {
100
+ unbindDragMaskSafety();
101
+ dragMask?.parentNode?.removeChild(dragMask);
102
+ dragMaskVisible = false;
103
+ };
70
104
  const initMoveable = () => {
71
105
  moveable = new VanillaMoveable(globalThis.document.body, {
72
106
  className: "m-editor-floating-box-moveable",
@@ -89,6 +123,10 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
89
123
  position: "css"
90
124
  }
91
125
  });
126
+ moveable.on("drag", showDragMask);
127
+ moveable.on("resize", showDragMask);
128
+ moveable.on("dragEnd", hideDragMask);
129
+ moveable.on("resizeEnd", hideDragMask);
92
130
  moveable.on("drag", (e) => {
93
131
  e.target.style.transform = e.transform;
94
132
  });
@@ -101,6 +139,7 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
101
139
  });
102
140
  };
103
141
  const destroyMoveable = () => {
142
+ hideDragMask();
104
143
  moveable?.destroy();
105
144
  moveable = null;
106
145
  };
@@ -114,7 +153,10 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
114
153
  height.value = targetRect.height;
115
154
  initMoveable();
116
155
  }
117
- if (titleEl.value) titleHeight.value = titleEl.value.getBoundingClientRect().height;
156
+ if (titleEl.value) {
157
+ const titleRect = titleEl.value.getBoundingClientRect();
158
+ titleHeight.value = titleRect.height;
159
+ }
118
160
  } else destroyMoveable();
119
161
  }, { immediate: true });
120
162
  onBeforeUnmount(() => {
@@ -140,15 +182,16 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
140
182
  return visible.value ? (openBlock(), createBlock(Teleport, {
141
183
  key: 0,
142
184
  to: "body"
143
- }, [createElementVNode("div", {
185
+ }, [createElementVNode("div", mergeProps({
144
186
  ref: "target",
145
- class: normalizeClass(["m-editor-float-box", unref(themeClass)]),
146
- style: normalizeStyle({
187
+ class: ["m-editor-float-box", unref(themeClass)]
188
+ }, _ctx.$attrs, {
189
+ style: {
147
190
  ...style.value,
148
191
  zIndex: curZIndex.value
149
- }),
192
+ },
150
193
  onMousedown: nextZIndex
151
- }, [createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", null, toDisplayString(__props.title), 1)]), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
194
+ }), [createElementVNode("div", _hoisted_1, [renderSlot(_ctx.$slots, "title", {}, () => [createElementVNode("span", null, toDisplayString(__props.title), 1)]), createElementVNode("div", null, [createVNode(unref(TMagicButton), {
152
195
  link: "",
153
196
  size: "small",
154
197
  onClick: closeHandler
@@ -157,8 +200,11 @@ var FloatingBox_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ de
157
200
  _: 1
158
201
  })])], 512), createElementVNode("div", {
159
202
  class: "m-editor-float-box-body",
160
- style: normalizeStyle({ height: `${bodyHeight.value}px` })
161
- }, [renderSlot(_ctx.$slots, "body")], 4)], 38)])) : createCommentVNode("v-if", true);
203
+ style: normalizeStyle({
204
+ height: `${bodyHeight.value}px`,
205
+ ...__props.bodyStyle
206
+ })
207
+ }, [renderSlot(_ctx.$slots, "body")], 4)], 16)])) : createCommentVNode("v-if", true);
162
208
  };
163
209
  }
164
210
  });
@@ -3,7 +3,7 @@ import { createBlock, createElementBlock, createElementVNode, createVNode, defin
3
3
  import { Edit } from "@element-plus/icons-vue";
4
4
  //#region packages/editor/src/components/Icon.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = ["src"];
6
- var Icon_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
6
+ var Icon_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
7
7
  name: "MEditorIcon",
8
8
  __name: "Icon",
9
9
  props: { icon: {} },
@@ -1,13 +1,14 @@
1
1
  import { useGetSo } from "../hooks/use-getso.js";
2
2
  import { createElementBlock, defineComponent, normalizeClass, openBlock, renderSlot, unref, useTemplateRef } from "vue";
3
3
  //#region packages/editor/src/components/Resizer.vue?vue&type=script&setup=true&lang.ts
4
- var Resizer_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
4
+ var Resizer_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
5
5
  name: "MEditorResizer",
6
6
  __name: "Resizer",
7
7
  emits: ["change"],
8
8
  setup(__props, { emit: __emit }) {
9
9
  const emit = __emit;
10
- const { isDragging } = useGetSo(useTemplateRef("target"), emit);
10
+ const targetEl = useTemplateRef("target");
11
+ const { isDragging } = useGetSo(targetEl, emit);
11
12
  return (_ctx, _cache) => {
12
13
  return openBlock(), createElementBlock("span", {
13
14
  ref: "target",
@@ -1,5 +1,4 @@
1
1
  import ScrollBar_vue_vue_type_script_setup_true_lang_default from "./ScrollBar.vue_vue_type_script_setup_true_lang.js";
2
- /* empty css */
3
2
  //#region packages/editor/src/components/ScrollBar.vue
4
3
  var ScrollBar_default = ScrollBar_vue_vue_type_script_setup_true_lang_default;
5
4
  //#endregion