@tmagic/editor 1.3.0-beta.0 → 1.3.0-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 (41) hide show
  1. package/dist/style.css +29 -1
  2. package/dist/tmagic-editor.js +1014 -644
  3. package/dist/tmagic-editor.js.map +1 -1
  4. package/dist/tmagic-editor.umd.cjs +1032 -662
  5. package/dist/tmagic-editor.umd.cjs.map +1 -1
  6. package/package.json +10 -10
  7. package/src/components/CodeBlockEditor.vue +15 -6
  8. package/src/components/ContentMenu.vue +88 -42
  9. package/src/components/Resizer.vue +8 -30
  10. package/src/components/SplitView.vue +3 -2
  11. package/src/fields/DataSourceFields.vue +10 -0
  12. package/src/fields/DataSourceMethods.vue +1 -0
  13. package/src/hooks/use-getso.ts +35 -0
  14. package/src/icons/PinIcon.vue +25 -0
  15. package/src/icons/PinnedIcon.vue +25 -0
  16. package/src/index.ts +2 -0
  17. package/src/layouts/workspace/Workspace.vue +1 -1
  18. package/src/layouts/workspace/viewer/NodeListMenu.vue +159 -0
  19. package/src/layouts/workspace/viewer/NodeListMenuTitle.vue +68 -0
  20. package/src/layouts/workspace/{Stage.vue → viewer/Stage.vue} +2 -0
  21. package/src/theme/content-menu.scss +25 -1
  22. package/src/theme/index.scss +8 -0
  23. package/src/type.ts +2 -0
  24. package/src/utils/data-source/formConfigs/http.ts +9 -0
  25. package/src/utils/props.ts +20 -10
  26. package/types/components/CodeBlockEditor.vue.d.ts +2 -0
  27. package/types/components/ContentMenu.vue.d.ts +27 -8
  28. package/types/components/Resizer.vue.d.ts +1 -3
  29. package/types/hooks/use-code-block-edit.d.ts +7 -0
  30. package/types/hooks/use-data-source-method.d.ts +7 -0
  31. package/types/hooks/use-getso.d.ts +5 -0
  32. package/types/icons/PinIcon.vue.d.ts +2 -0
  33. package/types/icons/PinnedIcon.vue.d.ts +2 -0
  34. package/types/index.d.ts +1 -0
  35. package/types/layouts/PropsPanel.vue.d.ts +1 -1
  36. package/types/layouts/workspace/viewer/NodeListMenu.vue.d.ts +15 -0
  37. package/types/layouts/workspace/viewer/NodeListMenuTitle.vue.d.ts +15 -0
  38. package/types/layouts/workspace/{Stage.vue.d.ts → viewer/Stage.vue.d.ts} +1 -1
  39. package/types/layouts/workspace/{ViewerMenu.vue.d.ts → viewer/ViewerMenu.vue.d.ts} +1 -1
  40. package/types/type.d.ts +2 -0
  41. /package/src/layouts/workspace/{ViewerMenu.vue → viewer/ViewerMenu.vue} +0 -0
@@ -0,0 +1,68 @@
1
+ <template>
2
+ <div
3
+ style="
4
+ text-align: center;
5
+ padding: 5px 0;
6
+ font-size: 14px;
7
+ cursor: move;
8
+ display: flex;
9
+ justify-content: space-between;
10
+ align-items: center;
11
+ "
12
+ ref="target"
13
+ >
14
+ <TMagicTooltip placement="top" :content="pinned ? '取消置于顶层自动隐藏' : '置于顶层不消失'">
15
+ <MIcon
16
+ style="margin-left: 10px; cursor: pointer"
17
+ :icon="pinned ? PinnedIcon : PinIcon"
18
+ @click="pinHandler"
19
+ ></MIcon>
20
+ </TMagicTooltip>
21
+
22
+ <span>可选组件</span>
23
+
24
+ <div style="margin-right: 10px">
25
+ <TMagicButton text size="small" @click="closeHandler">
26
+ <MIcon :icon="Close"></MIcon>
27
+ </TMagicButton>
28
+ </div>
29
+ </div>
30
+ </template>
31
+
32
+ <script lang="ts" setup>
33
+ import { ref } from 'vue';
34
+ import { Close } from '@element-plus/icons-vue';
35
+ import type { OnDrag } from 'gesto';
36
+
37
+ import { TMagicButton, TMagicTooltip } from '@tmagic/design';
38
+
39
+ import MIcon from '@editor/components/Icon.vue';
40
+ import { useGetSo } from '@editor/hooks/use-getso';
41
+ import PinIcon from '@editor/icons/PinIcon.vue';
42
+ import PinnedIcon from '@editor/icons/PinnedIcon.vue';
43
+
44
+ defineOptions({
45
+ name: 'MEditorNodeListMenuTitle',
46
+ });
47
+
48
+ const props = defineProps<{
49
+ pinned: boolean;
50
+ }>();
51
+
52
+ const emit = defineEmits<{
53
+ close: [];
54
+ 'update:pinned': [pinned: boolean];
55
+ change: [e: OnDrag];
56
+ }>();
57
+
58
+ const pinHandler = () => {
59
+ emit('update:pinned', !props.pinned);
60
+ };
61
+
62
+ const closeHandler = () => {
63
+ emit('close');
64
+ };
65
+
66
+ const target = ref<HTMLDivElement>();
67
+ useGetSo(target, emit);
68
+ </script>
@@ -24,6 +24,7 @@
24
24
  ></div>
25
25
  <Teleport to="body">
26
26
  <ViewerMenu ref="menu" :is-multi-select="isMultiSelect" :stage-content-menu="stageContentMenu"></ViewerMenu>
27
+ <NodeListMenu ref="nodeList" :is-multi-select="isMultiSelect"></NodeListMenu>
27
28
  </Teleport>
28
29
  </ScrollViewer>
29
30
  </template>
@@ -40,6 +41,7 @@ import { useStage } from '@editor/hooks/use-stage';
40
41
  import { Layout, MenuButton, MenuComponent, Services, StageOptions } from '@editor/type';
41
42
  import { getConfig } from '@editor/utils/config';
42
43
 
44
+ import NodeListMenu from './NodeListMenu.vue';
43
45
  import ViewerMenu from './ViewerMenu.vue';
44
46
 
45
47
  defineOptions({
@@ -3,12 +3,13 @@
3
3
  font-size: 12px;
4
4
  background: #fff;
5
5
  box-shadow: 0 2px 8px 2px rgba(68, 73, 77, 0.16);
6
- z-index: 9999;
6
+ z-index: 1000;
7
7
  transform-origin: 0% 0%;
8
8
  font-weight: 600;
9
9
  padding: 4px 0px;
10
10
  overflow: auto;
11
11
  max-height: 80%;
12
+ min-width: 180px;
12
13
 
13
14
  .menu-item {
14
15
  color: #333;
@@ -43,8 +44,31 @@
43
44
  }
44
45
  }
45
46
 
47
+ &.active {
48
+ background-color: $--theme-color;
49
+ .tmagic-design-button,
50
+ .tmagic-design-button:active,
51
+ .tmagic-design-button:focus {
52
+ color: #fff;
53
+ background-color: $--theme-color;
54
+ }
55
+
56
+ &.menu-item i {
57
+ color: #fff;
58
+ }
59
+ }
60
+
46
61
  &:hover {
47
62
  background-color: $--hover-color;
63
+ .tmagic-design-button,
64
+ .tmagic-design-button:active,
65
+ .tmagic-design-button:focus {
66
+ color: $--font-color;
67
+ }
68
+
69
+ &.menu-item i {
70
+ color: $--font-color;
71
+ }
48
72
  }
49
73
  }
50
74
  }
@@ -1,2 +1,10 @@
1
1
  @import "./common/var.scss";
2
2
  @import "./theme.scss";
3
+
4
+ .fade-enter-active,
5
+ .fade-leave-active {
6
+ transition: opacity 0.5s;
7
+ }
8
+ .fade-enter, .fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
9
+ opacity: 0;
10
+ }
package/src/type.ts CHANGED
@@ -201,6 +201,8 @@ export interface MenuButton {
201
201
  className?: string;
202
202
  /** type为dropdown时,下拉的菜单列表, 或者有子菜单时 */
203
203
  items?: MenuButton[];
204
+ /** 唯一标识,用于高亮 */
205
+ id?: string | number;
204
206
  }
205
207
 
206
208
  export interface MenuComponent {
@@ -7,6 +7,15 @@ export default [
7
7
  type: 'switch',
8
8
  defaultValue: true,
9
9
  },
10
+ {
11
+ name: 'responseOptions',
12
+ items: [
13
+ {
14
+ name: 'dataPath',
15
+ text: '数据路径',
16
+ },
17
+ ],
18
+ },
10
19
  {
11
20
  type: 'fieldset',
12
21
  name: 'options',
@@ -248,7 +248,7 @@ export const displayTabConfig: TabPaneConfig = {
248
248
  },
249
249
  {
250
250
  type: 'select',
251
- options: (mForm: FormState | undefined, { model }: any) => {
251
+ options: (mForm, { model }) => {
252
252
  const [id, field] = model.field;
253
253
 
254
254
  const ds = dataSourceService.getDataSourceById(id);
@@ -284,23 +284,33 @@ export const displayTabConfig: TabPaneConfig = {
284
284
  items: [
285
285
  {
286
286
  name: 'value',
287
- display: (vm: FormState, { model }: any) =>
288
- !['between', 'not_between', 'is', 'not'].includes(model.op),
289
- },
290
- {
291
- name: 'value',
292
- type: 'select',
287
+ type: (mForm, { model }) => {
288
+ const [id, field] = model.field;
289
+
290
+ const ds = dataSourceService.getDataSourceById(id);
291
+
292
+ const type = ds?.fields.find((f) => f.name === field)?.type;
293
+
294
+ if (type === 'number') {
295
+ return 'number';
296
+ }
297
+
298
+ if (type === 'boolean') {
299
+ return 'select';
300
+ }
301
+
302
+ return 'text';
303
+ },
293
304
  options: [
294
305
  { text: 'true', value: true },
295
306
  { text: 'false', value: false },
296
307
  ],
297
- display: (vm: FormState, { model }: any) => ['is', 'not'].includes(model.op),
308
+ display: (vm, { model }) => !['between', 'not_between'].includes(model.op),
298
309
  },
299
310
  {
300
311
  name: 'range',
301
312
  type: 'number-range',
302
- display: (vm: FormState, { model }: any) =>
303
- ['between', 'not_between'].includes(model.op) && !['is', 'not'].includes(model.op),
313
+ display: (vm, { model }) => ['between', 'not_between'].includes(model.op),
304
314
  },
305
315
  ],
306
316
  },
@@ -3,6 +3,7 @@ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimePr
3
3
  content: CodeBlockContent;
4
4
  disabled?: boolean | undefined;
5
5
  isDataSource?: boolean | undefined;
6
+ dataSourceType?: string | undefined;
6
7
  }>, {
7
8
  show(): void;
8
9
  hide(): void;
@@ -10,6 +11,7 @@ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimePr
10
11
  content: CodeBlockContent;
11
12
  disabled?: boolean | undefined;
12
13
  isDataSource?: boolean | undefined;
14
+ dataSourceType?: string | undefined;
13
15
  }>>>, {}, {}>;
14
16
  export default _default;
15
17
  type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
@@ -1,28 +1,42 @@
1
1
  import { MenuButton, MenuComponent } from '../type';
2
- declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
2
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
3
3
  menuData?: (MenuButton | MenuComponent)[] | undefined;
4
4
  isSubMenu?: boolean | undefined;
5
+ active?: string | number | undefined;
6
+ autoHide?: boolean | undefined;
5
7
  }>, {
6
8
  menuData: () => never[];
7
9
  isSubMenu: boolean;
10
+ autoHide: boolean;
8
11
  }>, {
9
12
  menu: import("vue").Ref<HTMLDivElement | undefined>;
13
+ menuPosition: import("vue").Ref<{
14
+ left: number;
15
+ top: number;
16
+ }>;
10
17
  hide: () => void;
11
- show: (e: MouseEvent) => void;
18
+ show: (e?: MouseEvent | undefined) => void;
12
19
  contains: (el: HTMLElement) => any;
13
- }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("show" | "hide")[], "show" | "hide", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
20
+ setPosition: (e: {
21
+ clientY: number;
22
+ clientX: number;
23
+ }) => void;
24
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
14
25
  menuData?: (MenuButton | MenuComponent)[] | undefined;
15
26
  isSubMenu?: boolean | undefined;
27
+ active?: string | number | undefined;
28
+ autoHide?: boolean | undefined;
16
29
  }>, {
17
30
  menuData: () => never[];
18
31
  isSubMenu: boolean;
19
- }>>> & {
20
- onShow?: ((...args: any[]) => any) | undefined;
21
- onHide?: ((...args: any[]) => any) | undefined;
22
- }, {
32
+ autoHide: boolean;
33
+ }>>>, {
23
34
  menuData: (MenuButton | MenuComponent)[];
24
35
  isSubMenu: boolean;
25
- }, {}>;
36
+ autoHide: boolean;
37
+ }, {}>, {
38
+ title?(_: {}): any;
39
+ }>;
26
40
  export default _default;
27
41
  type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
28
42
  type __VLS_TypePropsToRuntimeProps<T> = {
@@ -38,6 +52,11 @@ type __VLS_WithDefaults<P, D> = {
38
52
  default: D[K];
39
53
  }> : P[K];
40
54
  };
55
+ type __VLS_WithTemplateSlots<T, S> = T & {
56
+ new (): {
57
+ $slots: S;
58
+ };
59
+ };
41
60
  type __VLS_Prettify<T> = {
42
61
  [K in keyof T]: T[K];
43
62
  } & {};
@@ -1,6 +1,4 @@
1
- declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "change"[], "change", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>> & {
2
- onChange?: ((...args: any[]) => any) | undefined;
3
- }, {}, {}>, {
1
+ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>, {
4
2
  default?(_: {}): any;
5
3
  }>;
6
4
  export default _default;
@@ -55,6 +55,7 @@ export declare const useCodeBlockEdit: (codeBlockService?: CodeBlockService) =>
55
55
  readonly content: CodeBlockContent;
56
56
  readonly disabled?: boolean | undefined;
57
57
  readonly isDataSource?: boolean | undefined;
58
+ readonly dataSourceType?: string | undefined;
58
59
  };
59
60
  $attrs: {
60
61
  [x: string]: unknown;
@@ -80,6 +81,9 @@ export declare const useCodeBlockEdit: (codeBlockService?: CodeBlockService) =>
80
81
  isDataSource: {
81
82
  type: import("vue").PropType<boolean>;
82
83
  };
84
+ dataSourceType: {
85
+ type: import("vue").PropType<string>;
86
+ };
83
87
  }>>, {
84
88
  show(): void;
85
89
  hide(): void;
@@ -114,6 +118,9 @@ export declare const useCodeBlockEdit: (codeBlockService?: CodeBlockService) =>
114
118
  isDataSource: {
115
119
  type: import("vue").PropType<boolean>;
116
120
  };
121
+ dataSourceType: {
122
+ type: import("vue").PropType<string>;
123
+ };
117
124
  }>> & import("vue").ShallowUnwrapRef<{
118
125
  show(): void;
119
126
  hide(): void;
@@ -53,6 +53,7 @@ export declare const useDataSourceMethod: () => {
53
53
  readonly content: CodeBlockContent;
54
54
  readonly disabled?: boolean | undefined;
55
55
  readonly isDataSource?: boolean | undefined;
56
+ readonly dataSourceType?: string | undefined;
56
57
  };
57
58
  $attrs: {
58
59
  [x: string]: unknown;
@@ -78,6 +79,9 @@ export declare const useDataSourceMethod: () => {
78
79
  isDataSource: {
79
80
  type: import("vue").PropType<boolean>;
80
81
  };
82
+ dataSourceType: {
83
+ type: import("vue").PropType<string>;
84
+ };
81
85
  }>>, {
82
86
  show(): void;
83
87
  hide(): void;
@@ -112,6 +116,9 @@ export declare const useDataSourceMethod: () => {
112
116
  isDataSource: {
113
117
  type: import("vue").PropType<boolean>;
114
118
  };
119
+ dataSourceType: {
120
+ type: import("vue").PropType<string>;
121
+ };
115
122
  }>> & import("vue").ShallowUnwrapRef<{
116
123
  show(): void;
117
124
  hide(): void;
@@ -0,0 +1,5 @@
1
+ import { type Ref } from 'vue';
2
+ import Gesto, { type OnDrag } from 'gesto';
3
+ export declare const useGetSo: (target: Ref<HTMLElement | undefined>, emit: (evt: 'change', e: OnDrag<Gesto>) => void) => {
4
+ isDraging: Ref<boolean>;
5
+ };
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
2
+ export default _default;
package/types/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { App } from 'vue';
2
2
  import type { InstallOptions } from './type';
3
3
  import './theme/index.scss';
4
+ export type { OnDrag } from 'gesto';
4
5
  export type { MoveableOptions } from '@tmagic/stage';
5
6
  export * from './type';
6
7
  export * from './hooks';
@@ -18,7 +18,6 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
18
18
  height?: string | undefined;
19
19
  inline?: boolean | undefined;
20
20
  labelPosition?: string | undefined;
21
- onChange?: ((...args: any[]) => any) | undefined;
22
21
  key?: string | number | symbol | undefined;
23
22
  ref?: import("vue").VNodeRef | undefined;
24
23
  ref_for?: boolean | undefined;
@@ -63,6 +62,7 @@ declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<__
63
62
  }>) => void)[] | undefined;
64
63
  class?: unknown;
65
64
  style?: unknown;
65
+ onChange?: ((...args: any[]) => any) | undefined;
66
66
  readonly size?: "default" | "small" | "large" | undefined;
67
67
  readonly popperClass?: string | undefined;
68
68
  readonly extendState?: ((state: FormState) => Record<string, any> | Promise<Record<string, any>>) | undefined;
@@ -0,0 +1,15 @@
1
+ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<{
2
+ isMultiSelect?: boolean | undefined;
3
+ }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
4
+ isMultiSelect?: boolean | undefined;
5
+ }>>>, {}, {}>;
6
+ export default _default;
7
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
8
+ type __VLS_TypePropsToRuntimeProps<T> = {
9
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
10
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
11
+ } : {
12
+ type: import('vue').PropType<T[K]>;
13
+ required: true;
14
+ };
15
+ };
@@ -0,0 +1,15 @@
1
+ declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<{
2
+ pinned: boolean;
3
+ }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
4
+ pinned: boolean;
5
+ }>>>, {}, {}>;
6
+ export default _default;
7
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
8
+ type __VLS_TypePropsToRuntimeProps<T> = {
9
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
10
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
11
+ } : {
12
+ type: import('vue').PropType<T[K]>;
13
+ required: true;
14
+ };
15
+ };
@@ -1,4 +1,4 @@
1
- import { MenuButton, MenuComponent } from '../../type';
1
+ import { MenuButton, MenuComponent } from '../../../type';
2
2
  declare const _default: import("vue").DefineComponent<__VLS_TypePropsToRuntimeProps<{
3
3
  stageContentMenu: (MenuButton | MenuComponent)[];
4
4
  }>, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
@@ -1,4 +1,4 @@
1
- import { MenuButton, MenuComponent } from '../../type';
1
+ import { MenuButton, MenuComponent } from '../../../type';
2
2
  declare const _default: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
3
3
  isMultiSelect?: boolean | undefined;
4
4
  stageContentMenu: (MenuButton | MenuComponent)[];
package/types/type.d.ts CHANGED
@@ -159,6 +159,8 @@ export interface MenuButton {
159
159
  className?: string;
160
160
  /** type为dropdown时,下拉的菜单列表, 或者有子菜单时 */
161
161
  items?: MenuButton[];
162
+ /** 唯一标识,用于高亮 */
163
+ id?: string | number;
162
164
  }
163
165
  export interface MenuComponent {
164
166
  type: 'component';