@tmagic/editor 1.7.6 → 1.7.8-beta.1

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 (238) hide show
  1. package/LICENSE +235 -164
  2. package/dist/es/Editor.js +5 -0
  3. package/dist/es/Editor.vue_vue_type_script_setup_true_lang.js +214 -0
  4. package/dist/es/_virtual/_plugin-vue_export-helper.js +8 -0
  5. package/dist/es/components/CodeBlockEditor.js +5 -0
  6. package/dist/es/components/CodeBlockEditor.vue_vue_type_script_setup_true_lang.js +337 -0
  7. package/dist/es/components/CodeParams.js +5 -0
  8. package/dist/es/components/CodeParams.vue_vue_type_script_setup_true_lang.js +63 -0
  9. package/dist/es/components/ContentMenu.js +5 -0
  10. package/dist/es/components/ContentMenu.vue_vue_type_script_setup_true_lang.js +160 -0
  11. package/dist/es/components/FloatingBox.js +5 -0
  12. package/dist/es/components/FloatingBox.vue_vue_type_script_setup_true_lang.js +161 -0
  13. package/dist/es/components/Icon.js +5 -0
  14. package/dist/es/components/Icon.vue_vue_type_script_setup_true_lang.js +39 -0
  15. package/dist/es/components/Resizer.js +5 -0
  16. package/dist/es/components/Resizer.vue_vue_type_script_setup_true_lang.js +20 -0
  17. package/dist/es/components/ScrollBar.js +6 -0
  18. package/dist/es/components/ScrollBar.vue_vue_type_script_setup_true_lang.js +72 -0
  19. package/dist/es/components/ScrollViewer.js +5 -0
  20. package/dist/es/components/ScrollViewer.vue_vue_type_script_setup_true_lang.js +104 -0
  21. package/dist/es/components/SearchInput.js +5 -0
  22. package/dist/es/components/SearchInput.vue_vue_type_script_setup_true_lang.js +40 -0
  23. package/dist/es/components/SplitView.js +5 -0
  24. package/dist/es/components/SplitView.vue_vue_type_script_setup_true_lang.js +135 -0
  25. package/dist/es/components/ToolButton.js +5 -0
  26. package/dist/es/components/ToolButton.vue_vue_type_script_setup_true_lang.js +131 -0
  27. package/dist/es/components/Tree.js +5 -0
  28. package/dist/es/components/Tree.vue_vue_type_script_setup_true_lang.js +60 -0
  29. package/dist/es/components/TreeNode.js +5 -0
  30. package/dist/es/components/TreeNode.vue_vue_type_script_setup_true_lang.js +126 -0
  31. package/dist/es/editorProps.js +34 -0
  32. package/dist/es/fields/Code.js +5 -0
  33. package/dist/es/fields/Code.vue_vue_type_script_setup_true_lang.js +54 -0
  34. package/dist/es/fields/CodeLink.js +5 -0
  35. package/dist/es/fields/CodeLink.vue_vue_type_script_setup_true_lang.js +69 -0
  36. package/dist/es/fields/CodeSelect.js +5 -0
  37. package/dist/es/fields/CodeSelect.vue_vue_type_script_setup_true_lang.js +116 -0
  38. package/dist/es/fields/CodeSelectCol.js +5 -0
  39. package/dist/es/fields/CodeSelectCol.vue_vue_type_script_setup_true_lang.js +145 -0
  40. package/dist/es/fields/CondOpSelect.js +5 -0
  41. package/dist/es/fields/CondOpSelect.vue_vue_type_script_setup_true_lang.js +81 -0
  42. package/dist/es/fields/DataSourceFieldSelect/FieldSelect.js +5 -0
  43. package/dist/es/fields/DataSourceFieldSelect/FieldSelect.vue_vue_type_script_setup_true_lang.js +158 -0
  44. package/dist/es/fields/DataSourceFieldSelect/Index.js +5 -0
  45. package/dist/es/fields/DataSourceFieldSelect/Index.vue_vue_type_script_setup_true_lang.js +155 -0
  46. package/dist/es/fields/DataSourceFields.js +5 -0
  47. package/dist/es/fields/DataSourceFields.vue_vue_type_script_setup_true_lang.js +390 -0
  48. package/dist/es/fields/DataSourceInput.js +5 -0
  49. package/dist/es/fields/DataSourceInput.vue_vue_type_script_setup_true_lang.js +268 -0
  50. package/dist/es/fields/DataSourceMethodSelect.js +5 -0
  51. package/dist/es/fields/DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js +144 -0
  52. package/dist/es/fields/DataSourceMethods.js +5 -0
  53. package/dist/es/fields/DataSourceMethods.vue_vue_type_script_setup_true_lang.js +148 -0
  54. package/dist/es/fields/DataSourceMocks.js +5 -0
  55. package/dist/es/fields/DataSourceMocks.vue_vue_type_script_setup_true_lang.js +259 -0
  56. package/dist/es/fields/DataSourceSelect.js +5 -0
  57. package/dist/es/fields/DataSourceSelect.vue_vue_type_script_setup_true_lang.js +101 -0
  58. package/dist/es/fields/DisplayConds.js +5 -0
  59. package/dist/es/fields/DisplayConds.vue_vue_type_script_setup_true_lang.js +156 -0
  60. package/dist/es/fields/EventSelect.js +5 -0
  61. package/dist/es/fields/EventSelect.vue_vue_type_script_setup_true_lang.js +338 -0
  62. package/dist/es/fields/KeyValue.js +5 -0
  63. package/dist/es/fields/KeyValue.vue_vue_type_script_setup_true_lang.js +158 -0
  64. package/dist/es/fields/PageFragmentSelect.js +5 -0
  65. package/dist/es/fields/PageFragmentSelect.vue_vue_type_script_setup_true_lang.js +81 -0
  66. package/dist/es/fields/StyleSetter/Index.js +5 -0
  67. package/dist/es/fields/StyleSetter/Index.vue_vue_type_script_setup_true_lang.js +92 -0
  68. package/dist/es/fields/StyleSetter/components/BackgroundPosition.js +5 -0
  69. package/dist/es/fields/StyleSetter/components/BackgroundPosition.vue_vue_type_script_setup_true_lang.js +96 -0
  70. package/dist/es/fields/StyleSetter/components/Border.js +5 -0
  71. package/dist/es/fields/StyleSetter/components/Border.vue_vue_type_script_setup_true_lang.js +100 -0
  72. package/dist/es/fields/StyleSetter/components/Box.js +5 -0
  73. package/dist/es/fields/StyleSetter/components/Box.vue_vue_type_script_setup_true_lang.js +81 -0
  74. package/dist/es/fields/StyleSetter/icons/background-repeat/NoRepeat.js +17 -0
  75. package/dist/es/fields/StyleSetter/icons/background-repeat/Repeat.js +14 -0
  76. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatX.js +17 -0
  77. package/dist/es/fields/StyleSetter/icons/background-repeat/RepeatY.js +17 -0
  78. package/dist/es/fields/StyleSetter/icons/display/Block.js +14 -0
  79. package/dist/es/fields/StyleSetter/icons/display/Flex.js +14 -0
  80. package/dist/es/fields/StyleSetter/icons/display/Inline.js +14 -0
  81. package/dist/es/fields/StyleSetter/icons/display/InlineBlock.js +14 -0
  82. package/dist/es/fields/StyleSetter/icons/display/None.js +14 -0
  83. package/dist/es/fields/StyleSetter/icons/flex-direction/Column.js +14 -0
  84. package/dist/es/fields/StyleSetter/icons/flex-direction/ColumnReverse.js +14 -0
  85. package/dist/es/fields/StyleSetter/icons/flex-direction/Row.js +14 -0
  86. package/dist/es/fields/StyleSetter/icons/flex-direction/RowReverse.js +14 -0
  87. package/dist/es/fields/StyleSetter/icons/justify-content/Center.js +14 -0
  88. package/dist/es/fields/StyleSetter/icons/justify-content/FlexEnd.js +14 -0
  89. package/dist/es/fields/StyleSetter/icons/justify-content/FlexStart.js +14 -0
  90. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceAround.js +14 -0
  91. package/dist/es/fields/StyleSetter/icons/justify-content/SpaceBetween.js +14 -0
  92. package/dist/es/fields/StyleSetter/icons/text-align/Center.js +14 -0
  93. package/dist/es/fields/StyleSetter/icons/text-align/Left.js +14 -0
  94. package/dist/es/fields/StyleSetter/icons/text-align/Right.js +14 -0
  95. package/dist/es/fields/StyleSetter/pro/Background.js +5 -0
  96. package/dist/es/fields/StyleSetter/pro/Background.vue_vue_type_script_setup_true_lang.js +114 -0
  97. package/dist/es/fields/StyleSetter/pro/Border.js +5 -0
  98. package/dist/es/fields/StyleSetter/pro/Border.vue_vue_type_script_setup_true_lang.js +50 -0
  99. package/dist/es/fields/StyleSetter/pro/Font.js +5 -0
  100. package/dist/es/fields/StyleSetter/pro/Font.vue_vue_type_script_setup_true_lang.js +98 -0
  101. package/dist/es/fields/StyleSetter/pro/Layout.js +5 -0
  102. package/dist/es/fields/StyleSetter/pro/Layout.vue_vue_type_script_setup_true_lang.js +287 -0
  103. package/dist/es/fields/StyleSetter/pro/Position.js +5 -0
  104. package/dist/es/fields/StyleSetter/pro/Position.vue_vue_type_script_setup_true_lang.js +95 -0
  105. package/dist/es/fields/UISelect.js +6 -0
  106. package/dist/es/fields/UISelect.vue_vue_type_script_setup_true_lang.js +161 -0
  107. package/dist/es/hooks/use-code-block-edit.js +54 -0
  108. package/dist/es/hooks/use-data-source-edit.js +29 -0
  109. package/dist/es/hooks/use-editor-content-height.js +17 -0
  110. package/dist/es/hooks/use-filter.js +35 -0
  111. package/dist/es/hooks/use-float-box.js +76 -0
  112. package/dist/es/hooks/use-getso.js +28 -0
  113. package/dist/es/hooks/use-next-float-box-position.js +27 -0
  114. package/dist/es/hooks/use-node-status.js +28 -0
  115. package/dist/es/hooks/use-services.js +9 -0
  116. package/dist/es/hooks/use-stage.js +107 -0
  117. package/dist/es/hooks/use-window-rect.js +19 -0
  118. package/dist/es/icons/CenterIcon.js +5 -0
  119. package/dist/es/icons/CenterIcon.vue_vue_type_script_setup_true_lang.js +40 -0
  120. package/dist/es/icons/CodeIcon.js +5 -0
  121. package/dist/es/icons/CodeIcon.vue_vue_type_script_setup_true_lang.js +19 -0
  122. package/dist/es/icons/FolderMinusIcon.js +5 -0
  123. package/dist/es/icons/FolderMinusIcon.vue_vue_type_script_setup_true_lang.js +27 -0
  124. package/dist/es/index.js +79 -0
  125. package/dist/es/initService.js +392 -0
  126. package/dist/es/layouts/AddPageBox.js +5 -0
  127. package/dist/es/layouts/AddPageBox.vue_vue_type_script_setup_true_lang.js +38 -0
  128. package/dist/es/layouts/CodeEditor.js +5 -0
  129. package/dist/es/layouts/CodeEditor.vue_vue_type_script_setup_true_lang.js +270 -0
  130. package/dist/es/layouts/Framework.js +5 -0
  131. package/dist/es/layouts/Framework.vue_vue_type_script_setup_true_lang.js +134 -0
  132. package/dist/es/layouts/NavMenu.js +5 -0
  133. package/dist/es/layouts/NavMenu.vue_vue_type_script_setup_true_lang.js +181 -0
  134. package/dist/es/layouts/page-bar/AddButton.js +5 -0
  135. package/dist/es/layouts/page-bar/AddButton.vue_vue_type_script_setup_true_lang.js +57 -0
  136. package/dist/es/layouts/page-bar/PageBar.js +5 -0
  137. package/dist/es/layouts/page-bar/PageBar.vue_vue_type_script_setup_true_lang.js +135 -0
  138. package/dist/es/layouts/page-bar/PageBarScrollContainer.js +5 -0
  139. package/dist/es/layouts/page-bar/PageBarScrollContainer.vue_vue_type_script_setup_true_lang.js +119 -0
  140. package/dist/es/layouts/page-bar/PageList.js +5 -0
  141. package/dist/es/layouts/page-bar/PageList.vue_vue_type_script_setup_true_lang.js +54 -0
  142. package/dist/es/layouts/page-bar/Search.js +5 -0
  143. package/dist/es/layouts/page-bar/Search.vue_vue_type_script_setup_true_lang.js +60 -0
  144. package/dist/es/layouts/props-panel/FormPanel.js +5 -0
  145. package/dist/es/layouts/props-panel/FormPanel.vue_vue_type_script_setup_true_lang.js +129 -0
  146. package/dist/es/layouts/props-panel/PropsPanel.js +5 -0
  147. package/dist/es/layouts/props-panel/PropsPanel.vue_vue_type_script_setup_true_lang.js +179 -0
  148. package/dist/es/layouts/props-panel/use-style-panel.js +40 -0
  149. package/dist/es/layouts/sidebar/ComponentListPanel.js +5 -0
  150. package/dist/es/layouts/sidebar/ComponentListPanel.vue_vue_type_script_setup_true_lang.js +121 -0
  151. package/dist/es/layouts/sidebar/Sidebar.js +5 -0
  152. package/dist/es/layouts/sidebar/Sidebar.vue_vue_type_script_setup_true_lang.js +314 -0
  153. package/dist/es/layouts/sidebar/code-block/CodeBlockList.js +5 -0
  154. package/dist/es/layouts/sidebar/code-block/CodeBlockList.vue_vue_type_script_setup_true_lang.js +161 -0
  155. package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.js +5 -0
  156. package/dist/es/layouts/sidebar/code-block/CodeBlockListPanel.vue_vue_type_script_setup_true_lang.js +113 -0
  157. package/dist/es/layouts/sidebar/code-block/useContentMenu.js +60 -0
  158. package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.js +5 -0
  159. package/dist/es/layouts/sidebar/data-source/DataSourceAddButton.vue_vue_type_script_setup_true_lang.js +44 -0
  160. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.js +5 -0
  161. package/dist/es/layouts/sidebar/data-source/DataSourceConfigPanel.vue_vue_type_script_setup_true_lang.js +103 -0
  162. package/dist/es/layouts/sidebar/data-source/DataSourceList.js +5 -0
  163. package/dist/es/layouts/sidebar/data-source/DataSourceList.vue_vue_type_script_setup_true_lang.js +162 -0
  164. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.js +5 -0
  165. package/dist/es/layouts/sidebar/data-source/DataSourceListPanel.vue_vue_type_script_setup_true_lang.js +133 -0
  166. package/dist/es/layouts/sidebar/data-source/useContentMenu.js +59 -0
  167. package/dist/es/layouts/sidebar/layer/LayerMenu.js +5 -0
  168. package/dist/es/layouts/sidebar/layer/LayerMenu.vue_vue_type_script_setup_true_lang.js +90 -0
  169. package/dist/es/layouts/sidebar/layer/LayerNodeTool.js +5 -0
  170. package/dist/es/layouts/sidebar/layer/LayerNodeTool.vue_vue_type_script_setup_true_lang.js +35 -0
  171. package/dist/es/layouts/sidebar/layer/LayerPanel.js +5 -0
  172. package/dist/es/layouts/sidebar/layer/LayerPanel.vue_vue_type_script_setup_true_lang.js +99 -0
  173. package/dist/es/layouts/sidebar/layer/use-click.js +68 -0
  174. package/dist/es/layouts/sidebar/layer/use-drag.js +118 -0
  175. package/dist/es/layouts/sidebar/layer/use-keybinding.js +36 -0
  176. package/dist/es/layouts/sidebar/layer/use-node-status.js +75 -0
  177. package/dist/es/layouts/workspace/Breadcrumb.js +5 -0
  178. package/dist/es/layouts/workspace/Breadcrumb.vue_vue_type_script_setup_true_lang.js +39 -0
  179. package/dist/es/layouts/workspace/Workspace.js +5 -0
  180. package/dist/es/layouts/workspace/Workspace.vue_vue_type_script_setup_true_lang.js +43 -0
  181. package/dist/es/layouts/workspace/viewer/NodeListMenu.js +5 -0
  182. package/dist/es/layouts/workspace/viewer/NodeListMenu.vue_vue_type_script_setup_true_lang.js +88 -0
  183. package/dist/es/layouts/workspace/viewer/Stage.js +5 -0
  184. package/dist/es/layouts/workspace/viewer/Stage.vue_vue_type_script_setup_true_lang.js +206 -0
  185. package/dist/es/layouts/workspace/viewer/StageOverlay.js +5 -0
  186. package/dist/es/layouts/workspace/viewer/StageOverlay.vue_vue_type_script_setup_true_lang.js +89 -0
  187. package/dist/es/layouts/workspace/viewer/ViewerMenu.js +5 -0
  188. package/dist/es/layouts/workspace/viewer/ViewerMenu.vue_vue_type_script_setup_true_lang.js +132 -0
  189. package/dist/es/plugin.js +61 -0
  190. package/dist/es/services/BaseService.js +148 -0
  191. package/dist/es/services/codeBlock.js +251 -0
  192. package/dist/es/services/componentList.js +29 -0
  193. package/dist/es/services/dataSource.js +157 -0
  194. package/dist/es/services/dep.js +173 -0
  195. package/dist/es/services/editor.js +752 -0
  196. package/dist/es/services/events.js +64 -0
  197. package/dist/es/services/history.js +84 -0
  198. package/dist/es/services/keybinding.js +182 -0
  199. package/dist/es/services/props.js +215 -0
  200. package/dist/es/services/stageOverlay.js +161 -0
  201. package/dist/es/services/storage.js +127 -0
  202. package/dist/es/services/ui.js +112 -0
  203. package/dist/es/style.css +1937 -0
  204. package/dist/es/type.js +90 -0
  205. package/dist/es/utils/compose.js +44 -0
  206. package/dist/es/utils/config.js +8 -0
  207. package/dist/es/utils/const.js +15 -0
  208. package/dist/es/utils/content-menu.js +76 -0
  209. package/dist/es/utils/data-source/formConfigs/base.js +28 -0
  210. package/dist/es/utils/data-source/formConfigs/http.js +74 -0
  211. package/dist/es/utils/data-source/index.js +201 -0
  212. package/dist/es/utils/dep/idle-task.js +76 -0
  213. package/dist/es/utils/dep/worker.js +19 -0
  214. package/dist/es/utils/editor.js +261 -0
  215. package/dist/es/utils/keybinding-config.js +106 -0
  216. package/dist/es/utils/logger.js +18 -0
  217. package/dist/es/utils/monaco-editor.js +13 -0
  218. package/dist/es/utils/operator.js +73 -0
  219. package/dist/es/utils/props.js +232 -0
  220. package/dist/es/utils/scroll-viewer.js +115 -0
  221. package/dist/es/utils/tree.js +11 -0
  222. package/dist/es/utils/undo-redo.js +43 -0
  223. package/dist/style.css +10 -10
  224. package/dist/tmagic-editor.umd.cjs +18427 -21980
  225. package/package.json +17 -13
  226. package/src/fields/CodeLink.vue +2 -2
  227. package/src/fields/DataSourceFieldSelect/Index.vue +10 -2
  228. package/src/fields/EventSelect.vue +6 -5
  229. package/src/index.ts +1 -73
  230. package/src/layouts/CodeEditor.vue +15 -8
  231. package/src/layouts/Framework.vue +1 -1
  232. package/src/plugin.ts +92 -0
  233. package/src/type.ts +6 -7
  234. package/src/utils/index.ts +1 -0
  235. package/src/utils/monaco-editor.ts +13 -6
  236. package/src/utils/props.ts +2 -0
  237. package/types/index.d.ts +3388 -3342
  238. package/dist/tmagic-editor.js +0 -17037
@@ -0,0 +1,5 @@
1
+ import DataSourceFields_vue_vue_type_script_setup_true_lang_default from "./DataSourceFields.vue_vue_type_script_setup_true_lang.js";
2
+ //#region packages/editor/src/fields/DataSourceFields.vue
3
+ var DataSourceFields_default = DataSourceFields_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { DataSourceFields_default as default };
@@ -0,0 +1,390 @@
1
+ import { useServices } from "../hooks/use-services.js";
2
+ import { useEditorContentHeight } from "../hooks/use-editor-content-height.js";
3
+ import { useNextFloatBoxPosition } from "../hooks/use-next-float-box-position.js";
4
+ import { error } from "../utils/logger.js";
5
+ import FloatingBox_default from "../components/FloatingBox.js";
6
+ import { MFormBox } from "@tmagic/form";
7
+ import { MagicTable } from "@tmagic/table";
8
+ import { TMagicButton, tMagicMessage, tMagicMessageBox } from "@tmagic/design";
9
+ import { getDefaultValueFromFields } from "@tmagic/utils";
10
+ import { createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, inject, isRef, mergeModels, openBlock, ref, unref, useModel, withCtx } from "vue";
11
+ //#region packages/editor/src/fields/DataSourceFields.vue?vue&type=script&setup=true&lang.ts
12
+ var _hoisted_1 = { class: "m-editor-data-source-fields" };
13
+ var _hoisted_2 = { class: "m-editor-data-source-fields-footer" };
14
+ var DataSourceFields_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
15
+ name: "MFieldsDataSourceFields",
16
+ __name: "DataSourceFields",
17
+ props: /* @__PURE__ */ mergeModels({
18
+ config: {},
19
+ model: {},
20
+ initValues: {},
21
+ values: {},
22
+ name: {},
23
+ prop: {},
24
+ disabled: {
25
+ type: Boolean,
26
+ default: false
27
+ },
28
+ size: {},
29
+ lastValues: {},
30
+ isCompare: { type: Boolean }
31
+ }, {
32
+ "width": { default: 670 },
33
+ "widthModifiers": {},
34
+ "visible": {
35
+ type: Boolean,
36
+ default: false
37
+ },
38
+ "visibleModifiers": {},
39
+ "visible1": {
40
+ type: Boolean,
41
+ default: false
42
+ },
43
+ "visible1Modifiers": {}
44
+ }),
45
+ emits: /* @__PURE__ */ mergeModels(["change"], [
46
+ "update:width",
47
+ "update:visible",
48
+ "update:visible1"
49
+ ]),
50
+ setup(__props, { emit: __emit }) {
51
+ const props = __props;
52
+ const emit = __emit;
53
+ const { uiService } = useServices();
54
+ const fieldValues = ref({});
55
+ const fieldTitle = ref("");
56
+ const width = useModel(__props, "width");
57
+ const newHandler = () => {
58
+ fieldValues.value = {};
59
+ fieldTitle.value = "新增属性";
60
+ calcBoxPosition();
61
+ addDialogVisible.value = true;
62
+ };
63
+ const fieldChange = ({ index, ...value }, data) => {
64
+ addDialogVisible.value = false;
65
+ if (index > -1) emit("change", value, {
66
+ modifyKey: index,
67
+ changeRecords: (data.changeRecords || []).map((item) => ({
68
+ propPath: `${props.prop}.${index}.${item.propPath}`,
69
+ value: item.value
70
+ }))
71
+ });
72
+ else {
73
+ const modifyKey = props.model[props.name].length;
74
+ emit("change", value, {
75
+ modifyKey,
76
+ changeRecords: [{
77
+ propPath: `${props.prop}.${modifyKey}`,
78
+ value
79
+ }]
80
+ });
81
+ }
82
+ };
83
+ const fieldColumns = [
84
+ {
85
+ label: "属性名称",
86
+ prop: "title"
87
+ },
88
+ {
89
+ label: "属性key",
90
+ prop: "name"
91
+ },
92
+ {
93
+ label: "属性描述",
94
+ prop: "description"
95
+ },
96
+ {
97
+ label: "默认值",
98
+ prop: "defaultValue",
99
+ formatter(item, row) {
100
+ try {
101
+ return JSON.stringify(row.defaultValue);
102
+ } catch (e) {
103
+ error(e);
104
+ return row.defaultValue;
105
+ }
106
+ }
107
+ },
108
+ {
109
+ label: "操作",
110
+ fixed: "right",
111
+ actions: [{
112
+ text: "编辑",
113
+ handler: (row, index) => {
114
+ fieldValues.value = {
115
+ ...row,
116
+ index
117
+ };
118
+ fieldTitle.value = `编辑${row.title}`;
119
+ calcBoxPosition();
120
+ addDialogVisible.value = true;
121
+ }
122
+ }, {
123
+ text: "删除",
124
+ buttonType: "danger",
125
+ handler: async (row, index) => {
126
+ await tMagicMessageBox.confirm(`确定删除${row.title}(${row.name})?`, "提示");
127
+ props.model[props.name].splice(index, 1);
128
+ emit("change", props.model[props.name]);
129
+ }
130
+ }]
131
+ }
132
+ ];
133
+ const dataSourceFieldsConfig = [
134
+ {
135
+ name: "index",
136
+ type: "hidden",
137
+ filter: "number",
138
+ defaultValue: -1
139
+ },
140
+ {
141
+ name: "type",
142
+ text: "数据类型",
143
+ type: "select",
144
+ defaultValue: "string",
145
+ options: [
146
+ {
147
+ text: "字符串",
148
+ value: "string"
149
+ },
150
+ {
151
+ text: "数字",
152
+ value: "number"
153
+ },
154
+ {
155
+ text: "布尔值",
156
+ value: "boolean"
157
+ },
158
+ {
159
+ text: "对象",
160
+ value: "object"
161
+ },
162
+ {
163
+ text: "数组",
164
+ value: "array"
165
+ },
166
+ {
167
+ text: "null",
168
+ value: "null"
169
+ },
170
+ {
171
+ text: "any",
172
+ value: "any"
173
+ }
174
+ ],
175
+ onChange: (_formState, v, { setModel }) => {
176
+ if (![
177
+ "any",
178
+ "array",
179
+ "object"
180
+ ].includes(v)) setModel("fields", []);
181
+ return v;
182
+ }
183
+ },
184
+ {
185
+ name: "name",
186
+ text: "字段名称",
187
+ rules: [{
188
+ required: true,
189
+ message: "请输入字段名称"
190
+ }, { validator: ({ value, callback }, { model, parent }) => {
191
+ const index = parent.findIndex((item) => item.name === value);
192
+ if (model.index === -1 && index > -1 || model.index > -1 && index > -1 && index !== model.index) return callback(`属性key(${value})已存在`);
193
+ callback();
194
+ } }]
195
+ },
196
+ {
197
+ name: "title",
198
+ text: "展示名称",
199
+ rules: [{
200
+ required: true,
201
+ message: "请输入展示名称"
202
+ }]
203
+ },
204
+ {
205
+ name: "description",
206
+ text: "描述",
207
+ type: "textarea"
208
+ },
209
+ {
210
+ name: "defaultValue",
211
+ text: "默认值",
212
+ parse: true,
213
+ mFormItemType: "data-source-field-defaultValue",
214
+ type: (mForm, { model }) => {
215
+ if (model.type === "number") return "number";
216
+ if (model.type === "boolean") return "select";
217
+ if (model.type === "string") return "text";
218
+ return "vs-code";
219
+ },
220
+ autosize: {
221
+ minRows: 1,
222
+ maxRows: 30
223
+ },
224
+ options: [{
225
+ text: "true",
226
+ value: true
227
+ }, {
228
+ text: "false",
229
+ value: false
230
+ }]
231
+ },
232
+ {
233
+ name: "enable",
234
+ text: "是否可用",
235
+ type: "switch",
236
+ defaultValue: true
237
+ },
238
+ {
239
+ name: "fields",
240
+ type: "data-source-fields",
241
+ defaultValue: [],
242
+ display: (formState, { model }) => model.type === "object" || model.type === "array"
243
+ }
244
+ ];
245
+ const jsonFromConfig = [{
246
+ name: "data",
247
+ type: "vs-code",
248
+ labelWidth: "0",
249
+ language: "json",
250
+ autosize: {
251
+ minRows: 30,
252
+ maxRows: 50
253
+ },
254
+ options: inject("codeOptions", {})
255
+ }];
256
+ const jsonFromValues = ref({ data: {} });
257
+ const newFromJsonHandler = () => {
258
+ jsonFromValues.value.data = getDefaultValueFromFields(props.model[props.name]);
259
+ calcBoxPosition();
260
+ addFromJsonDialogVisible.value = true;
261
+ };
262
+ const getValueType = (value) => {
263
+ if (Array.isArray(value)) return "array";
264
+ if (value === null) return "null";
265
+ if (typeof value === "object") return "object";
266
+ if (typeof value === "number") return "number";
267
+ if (typeof value === "boolean") return "boolean";
268
+ if (typeof value === "string") return "string";
269
+ return "any";
270
+ };
271
+ const getFieldsConfig = (value, fields = []) => {
272
+ if (!value || typeof value !== "object") throw new Error("数据格式错误");
273
+ const newFields = [];
274
+ Object.entries(value).forEach(([key, value]) => {
275
+ const type = getValueType(value);
276
+ const oldField = fields.find((field) => field.name === key);
277
+ let childFields = [];
278
+ if (Array.isArray(value) && value.length > 0) childFields = getFieldsConfig(value[0], oldField?.fields);
279
+ else if (type === "object") childFields = getFieldsConfig(value, oldField?.fields);
280
+ newFields.push({
281
+ name: key,
282
+ title: oldField?.title || key,
283
+ type,
284
+ description: oldField?.description || "",
285
+ enable: oldField?.enable ?? true,
286
+ defaultValue: value,
287
+ fields: childFields
288
+ });
289
+ });
290
+ return newFields;
291
+ };
292
+ const addFromJsonFromChange = ({ data }) => {
293
+ try {
294
+ const value = JSON.parse(data);
295
+ addFromJsonDialogVisible.value = false;
296
+ emit("change", getFieldsConfig(value, props.model[props.name]));
297
+ } catch (e) {
298
+ tMagicMessage.error(e.message);
299
+ }
300
+ };
301
+ const addDialogVisible = useModel(__props, "visible");
302
+ const addFromJsonDialogVisible = useModel(__props, "visible1");
303
+ const { height: editorHeight } = useEditorContentHeight();
304
+ const { boxPosition, calcBoxPosition } = useNextFloatBoxPosition(uiService, inject("parentFloating", ref(null)));
305
+ return (_ctx, _cache) => {
306
+ return openBlock(), createElementBlock("div", _hoisted_1, [
307
+ createVNode(unref(MagicTable), {
308
+ data: __props.model[__props.name],
309
+ columns: fieldColumns,
310
+ border: true
311
+ }, null, 8, ["data"]),
312
+ createElementVNode("div", _hoisted_2, [createVNode(unref(TMagicButton), {
313
+ size: "small",
314
+ disabled: __props.disabled,
315
+ plain: "",
316
+ onClick: _cache[0] || (_cache[0] = ($event) => newFromJsonHandler())
317
+ }, {
318
+ default: withCtx(() => [..._cache[8] || (_cache[8] = [createTextVNode("快速添加", -1)])]),
319
+ _: 1
320
+ }, 8, ["disabled"]), createVNode(unref(TMagicButton), {
321
+ size: "small",
322
+ type: "primary",
323
+ disabled: __props.disabled,
324
+ plain: "",
325
+ onClick: _cache[1] || (_cache[1] = ($event) => newHandler())
326
+ }, {
327
+ default: withCtx(() => [..._cache[9] || (_cache[9] = [createTextVNode("添加", -1)])]),
328
+ _: 1
329
+ }, 8, ["disabled"])]),
330
+ createVNode(FloatingBox_default, {
331
+ visible: addDialogVisible.value,
332
+ "onUpdate:visible": _cache[2] || (_cache[2] = ($event) => addDialogVisible.value = $event),
333
+ width: width.value,
334
+ "onUpdate:width": _cache[3] || (_cache[3] = ($event) => width.value = $event),
335
+ height: unref(editorHeight),
336
+ "onUpdate:height": _cache[4] || (_cache[4] = ($event) => isRef(editorHeight) ? editorHeight.value = $event : null),
337
+ title: fieldTitle.value,
338
+ position: unref(boxPosition)
339
+ }, {
340
+ body: withCtx(() => [createVNode(unref(MFormBox), {
341
+ "label-width": "80px",
342
+ title: fieldTitle.value,
343
+ config: dataSourceFieldsConfig,
344
+ values: fieldValues.value,
345
+ parentValues: __props.model[__props.name],
346
+ disabled: __props.disabled,
347
+ onSubmit: fieldChange
348
+ }, null, 8, [
349
+ "title",
350
+ "values",
351
+ "parentValues",
352
+ "disabled"
353
+ ])]),
354
+ _: 1
355
+ }, 8, [
356
+ "visible",
357
+ "width",
358
+ "height",
359
+ "title",
360
+ "position"
361
+ ]),
362
+ createVNode(FloatingBox_default, {
363
+ visible: addFromJsonDialogVisible.value,
364
+ "onUpdate:visible": _cache[5] || (_cache[5] = ($event) => addFromJsonDialogVisible.value = $event),
365
+ width: width.value,
366
+ "onUpdate:width": _cache[6] || (_cache[6] = ($event) => width.value = $event),
367
+ height: unref(editorHeight),
368
+ "onUpdate:height": _cache[7] || (_cache[7] = ($event) => isRef(editorHeight) ? editorHeight.value = $event : null),
369
+ title: "快速添加数据定义",
370
+ position: unref(boxPosition)
371
+ }, {
372
+ body: withCtx(() => [createVNode(unref(MFormBox), {
373
+ config: jsonFromConfig,
374
+ values: jsonFromValues.value,
375
+ disabled: __props.disabled,
376
+ onSubmit: addFromJsonFromChange
377
+ }, null, 8, ["values", "disabled"])]),
378
+ _: 1
379
+ }, 8, [
380
+ "visible",
381
+ "width",
382
+ "height",
383
+ "position"
384
+ ])
385
+ ]);
386
+ };
387
+ }
388
+ });
389
+ //#endregion
390
+ export { DataSourceFields_vue_vue_type_script_setup_true_lang_default as default };
@@ -0,0 +1,5 @@
1
+ import DataSourceInput_vue_vue_type_script_setup_true_lang_default from "./DataSourceInput.vue_vue_type_script_setup_true_lang.js";
2
+ //#region packages/editor/src/fields/DataSourceInput.vue
3
+ var DataSourceInput_default = DataSourceInput_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { DataSourceInput_default as default };
@@ -0,0 +1,268 @@
1
+ import { useServices } from "../hooks/use-services.js";
2
+ import { getDisplayField } from "../utils/data-source/index.js";
3
+ import Icon_default from "../components/Icon.js";
4
+ import { TMagicInput, TMagicTag, getDesignConfig } from "@tmagic/design";
5
+ import { getKeysArray, isNumber } from "@tmagic/utils";
6
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, mergeProps, nextTick, normalizeClass, openBlock, ref, renderList, resolveDynamicComponent, toDisplayString, unref, useTemplateRef, watch, withCtx } from "vue";
7
+ import { Coin } from "@element-plus/icons-vue";
8
+ //#region packages/editor/src/fields/DataSourceInput.vue?vue&type=script&setup=true&lang.ts
9
+ var _hoisted_1 = { style: {
10
+ "display": "flex",
11
+ "flex-direction": "column",
12
+ "line-height": "1.2em"
13
+ } };
14
+ var _hoisted_2 = { style: {
15
+ "font-size": "10px",
16
+ "color": "rgba(0, 0, 0, 0.6)"
17
+ } };
18
+ var DataSourceInput_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
19
+ name: "MFieldsDataSourceInput",
20
+ __name: "DataSourceInput",
21
+ props: {
22
+ config: {},
23
+ model: {},
24
+ initValues: {},
25
+ values: {},
26
+ name: {},
27
+ prop: {},
28
+ disabled: {
29
+ type: Boolean,
30
+ default: false
31
+ },
32
+ size: {},
33
+ lastValues: {},
34
+ isCompare: { type: Boolean }
35
+ },
36
+ emits: ["change"],
37
+ setup(__props, { emit: __emit }) {
38
+ const props = __props;
39
+ const emit = __emit;
40
+ const adapterType = getDesignConfig("adapterType");
41
+ const { dataSourceService, propsService } = useServices();
42
+ const autocompleteRef = useTemplateRef("autocomplete");
43
+ const isFocused = ref(false);
44
+ const state = ref("");
45
+ const displayState = ref([]);
46
+ const input = computed(() => autocompleteRef.value?.inputRef?.input);
47
+ const dataSources = computed(() => dataSourceService.get("dataSources"));
48
+ const disabledDataSource = computed(() => propsService.getDisabledDataSource());
49
+ const setDisplayState = () => {
50
+ displayState.value = getDisplayField(dataSources.value, state.value);
51
+ };
52
+ watch(() => props.model[props.name], (value = "") => {
53
+ state.value = value;
54
+ setDisplayState();
55
+ }, { immediate: true });
56
+ const mouseupHandler = async () => {
57
+ const selection = globalThis.document.getSelection();
58
+ const anchorOffset = selection?.anchorOffset || 0;
59
+ const focusOffset = selection?.focusOffset || 0;
60
+ isFocused.value = true;
61
+ await nextTick();
62
+ autocompleteRef.value?.focus();
63
+ if (focusOffset && input.value) input.value.setSelectionRange(anchorOffset, focusOffset);
64
+ };
65
+ const blurHandler = () => {
66
+ isFocused.value = false;
67
+ setDisplayState();
68
+ emit("change", state.value);
69
+ };
70
+ const changeHandler = (v) => {
71
+ emit("change", v);
72
+ };
73
+ let inputText = "";
74
+ const inputHandler = (v) => {
75
+ if (!v) inputText = v;
76
+ };
77
+ /**
78
+ * 光标位置是不是}
79
+ * @param selectionStart 光标位置
80
+ */
81
+ const isRightCurlyBracket = (selectionStart = 0) => {
82
+ return inputText.substring(selectionStart - 1, selectionStart) === "}";
83
+ };
84
+ /**
85
+ * 获取光标位置
86
+ */
87
+ const getSelectionStart = () => {
88
+ let selectionStart = input.value?.selectionStart || 0;
89
+ if (isRightCurlyBracket(selectionStart)) selectionStart -= 1;
90
+ return selectionStart;
91
+ };
92
+ /**
93
+ * 当前输入的是{
94
+ * @param leftCurlyBracketIndex {字符索引
95
+ */
96
+ const curCharIsLeftCurlyBracket = (leftCurlyBracketIndex) => leftCurlyBracketIndex > 0 && leftCurlyBracketIndex === getSelectionStart() - 1;
97
+ /**
98
+ * 当前输入的是.
99
+ * @param leftCurlyBracketIndex .字符索引
100
+ */
101
+ const curCharIsDot = (dotIndex) => dotIndex > -1 && dotIndex === getSelectionStart() - 1;
102
+ /**
103
+ * @param leftCurlyBracketIndex 左大括号字符索引
104
+ * @param cb 建议的方法
105
+ */
106
+ const dsQuerySearch = (queryString, leftCurlyBracketIndex, cb) => {
107
+ let result = [];
108
+ if (curCharIsLeftCurlyBracket(leftCurlyBracketIndex)) result = dataSources.value;
109
+ else if (leftCurlyBracketIndex > 0) {
110
+ const queryName = queryString.substring(leftCurlyBracketIndex + 1).toLowerCase();
111
+ result = dataSources.value.filter((ds) => ds.title?.toLowerCase().includes(queryName) || ds.id.includes(queryName));
112
+ }
113
+ cb(result.map((ds) => ({
114
+ value: ds.id,
115
+ text: ds.title,
116
+ type: "dataSource"
117
+ })));
118
+ };
119
+ /**
120
+ * 字段提示
121
+ * @param queryString 当前输入框内的字符串
122
+ * @param leftAngleIndex {字符索引
123
+ * @param dotIndex .字符索引
124
+ * @param cb 建议回调
125
+ */
126
+ const fieldQuerySearch = (queryString, leftAngleIndex, dotIndex, cb) => {
127
+ let result = [];
128
+ const keys = getKeysArray(queryString.substring(leftAngleIndex + 1, dotIndex));
129
+ const dsId = keys.shift();
130
+ const ds = dataSources.value.find((ds) => ds.id === dsId);
131
+ if (!ds) {
132
+ cb([]);
133
+ return;
134
+ }
135
+ let fields = ds.fields || [];
136
+ let key = keys.shift();
137
+ while (key) {
138
+ if (isNumber(key)) {
139
+ key = keys.shift();
140
+ continue;
141
+ }
142
+ for (const field of fields) if (field.name === key) {
143
+ fields = field.fields || [];
144
+ key = keys.shift();
145
+ break;
146
+ }
147
+ }
148
+ if (curCharIsDot(dotIndex)) result = fields || [];
149
+ else if (dotIndex > -1) {
150
+ const queryName = queryString.substring(dotIndex + 1).toLowerCase();
151
+ result = fields.filter((field) => field.name?.toLowerCase().includes(queryName) || field.title?.toLowerCase().includes(queryName)) || [];
152
+ }
153
+ cb(result.map((field) => ({
154
+ value: field.name,
155
+ text: field.title,
156
+ type: "field"
157
+ })));
158
+ };
159
+ /**
160
+ * 数据源提示
161
+ * @param queryString 当前输入框内的字符串
162
+ * @param cb 建议回调
163
+ */
164
+ const querySearch = (queryString, cb) => {
165
+ inputText = queryString;
166
+ const selectionStart = getSelectionStart();
167
+ const curQueryString = queryString.substring(0, selectionStart);
168
+ const fieldKeyStringLastIndex = curQueryString.lastIndexOf(".");
169
+ const dsKeyStringLastIndex = curQueryString.lastIndexOf("${") + 1;
170
+ if (fieldKeyStringLastIndex > dsKeyStringLastIndex) fieldQuerySearch(curQueryString, dsKeyStringLastIndex, fieldKeyStringLastIndex, cb);
171
+ else dsQuerySearch(curQueryString, dsKeyStringLastIndex, cb);
172
+ };
173
+ /**
174
+ * 选择建议
175
+ * @param value 建议值
176
+ * @param type 建议类型,是数据源还是字段
177
+ */
178
+ const selectHandler = async ({ value, type }) => {
179
+ const isDataSource = type === "dataSource";
180
+ const selectionStart = input.value?.selectionStart || 0;
181
+ let startText = inputText.substring(0, selectionStart);
182
+ const dotIndex = startText.lastIndexOf(".");
183
+ const leftCurlyBracketIndex = startText.lastIndexOf("${") + 1;
184
+ const endText = inputText.substring(selectionStart);
185
+ let suggestText = value;
186
+ if (isDataSource) {
187
+ if (!curCharIsLeftCurlyBracket(leftCurlyBracketIndex)) startText = startText.substring(0, leftCurlyBracketIndex + 1);
188
+ if (!isRightCurlyBracket(selectionStart + 1)) suggestText = `${suggestText}}`;
189
+ } else if (!curCharIsDot(dotIndex)) startText = startText.substring(0, dotIndex + 1);
190
+ state.value = `${startText}${suggestText}${endText}`;
191
+ await nextTick();
192
+ let newSelectionStart = 0;
193
+ if (isDataSource) newSelectionStart = leftCurlyBracketIndex + suggestText.length;
194
+ else newSelectionStart = dotIndex + suggestText.length + 1;
195
+ input.value?.setSelectionRange(newSelectionStart, newSelectionStart);
196
+ changeHandler(state.value);
197
+ };
198
+ return (_ctx, _cache) => {
199
+ return disabledDataSource.value ? (openBlock(), createBlock(unref(TMagicInput), {
200
+ key: 0,
201
+ modelValue: state.value,
202
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => state.value = $event),
203
+ disabled: __props.disabled,
204
+ size: __props.size,
205
+ clearable: true,
206
+ onChange: changeHandler
207
+ }, null, 8, [
208
+ "modelValue",
209
+ "disabled",
210
+ "size"
211
+ ])) : __props.disabled || isFocused.value ? (openBlock(), createBlock(resolveDynamicComponent(unref(getDesignConfig)("components")?.autocomplete.component || "el-autocomplete"), mergeProps({
212
+ key: 1,
213
+ class: "tmagic-design-auto-complete",
214
+ ref: "autocomplete",
215
+ modelValue: state.value,
216
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => state.value = $event)
217
+ }, unref(getDesignConfig)("components")?.autocomplete.props({
218
+ disabled: __props.disabled,
219
+ size: __props.size,
220
+ fetchSuggestions: querySearch,
221
+ triggerOnFocus: false,
222
+ clearable: true
223
+ }) || {}, {
224
+ style: { "width": "100%" },
225
+ onBlur: blurHandler,
226
+ onInput: inputHandler,
227
+ onSelect: selectHandler
228
+ }), {
229
+ suffix: withCtx(() => [createVNode(Icon_default, { icon: unref(Coin) }, null, 8, ["icon"])]),
230
+ default: withCtx(({ item }) => [createElementVNode("div", _hoisted_1, [createElementVNode("div", null, toDisplayString(item.text), 1), createElementVNode("span", _hoisted_2, toDisplayString(item.value), 1)])]),
231
+ _: 1
232
+ }, 16, ["modelValue"])) : (openBlock(), createElementBlock("div", {
233
+ key: 2,
234
+ class: normalizeClass({
235
+ "tmagic-data-source-input-text": true,
236
+ "el-input": unref(adapterType) === "element-plus",
237
+ [`el-input--${__props.size}`]: unref(adapterType) === "element-plus",
238
+ "t-input": unref(adapterType) === "tdesign-vue-next",
239
+ [`t-size-${__props.size?.[0]}`]: unref(adapterType) === "tdesign-vue-next"
240
+ }),
241
+ onMouseup: mouseupHandler
242
+ }, [createElementVNode("div", { class: normalizeClass({
243
+ "tmagic-data-source-input-text-wrapper": true,
244
+ "el-input__wrapper": unref(adapterType) === "element-plus",
245
+ "is-focus": isFocused.value
246
+ }) }, [createElementVNode("div", { class: normalizeClass({
247
+ "el-input__inner": unref(adapterType) === "element-plus",
248
+ input__inner: unref(adapterType) === "tdesign-vue-next"
249
+ }) }, [(openBlock(true), createElementBlock(Fragment, null, renderList(displayState.value, (item, index) => {
250
+ return openBlock(), createElementBlock(Fragment, null, [item.type === "text" ? (openBlock(), createElementBlock("span", {
251
+ key: index,
252
+ style: { "margin-right": "2px" }
253
+ }, toDisplayString(item.value), 1)) : createCommentVNode("v-if", true), item.type === "var" ? (openBlock(), createBlock(unref(TMagicTag), {
254
+ key: index,
255
+ size: __props.size
256
+ }, {
257
+ default: withCtx(() => [createTextVNode(toDisplayString(item.value), 1)]),
258
+ _: 2
259
+ }, 1032, ["size"])) : createCommentVNode("v-if", true)], 64);
260
+ }), 256)), createVNode(Icon_default, {
261
+ class: "tmagic-data-source-input-icon",
262
+ icon: unref(Coin)
263
+ }, null, 8, ["icon"])], 2)], 2)], 34));
264
+ };
265
+ }
266
+ });
267
+ //#endregion
268
+ export { DataSourceInput_vue_vue_type_script_setup_true_lang_default as default };
@@ -0,0 +1,5 @@
1
+ import DataSourceMethodSelect_vue_vue_type_script_setup_true_name_true_lang_default from "./DataSourceMethodSelect.vue_vue_type_script_setup_true_name_true_lang.js";
2
+ //#region packages/editor/src/fields/DataSourceMethodSelect.vue
3
+ var DataSourceMethodSelect_default = DataSourceMethodSelect_vue_vue_type_script_setup_true_name_true_lang_default;
4
+ //#endregion
5
+ export { DataSourceMethodSelect_default as default };