@tmagic/stage 1.3.16 → 1.4.0-beta.2
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.
- package/README.md +2 -2
- package/dist/tmagic-stage.js +155 -103
- package/dist/tmagic-stage.umd.cjs +155 -103
- package/package.json +6 -6
- package/src/ActionManager.ts +57 -24
- package/src/DragResizeHelper.ts +12 -8
- package/src/MoveableActionsAble.ts +1 -1
- package/src/StageCore.ts +41 -25
- package/src/StageDragResize.ts +50 -23
- package/src/StageMask.ts +12 -1
- package/src/StageMultiDragResize.ts +18 -3
- package/src/StageRender.ts +22 -26
- package/src/TargetShadow.ts +1 -1
- package/src/const.ts +31 -0
- package/src/types.ts +73 -37
- package/src/util.ts +2 -2
- package/types/ActionManager.d.ts +10 -8
- package/types/DragResizeHelper.d.ts +2 -2
- package/types/StageCore.d.ts +9 -7
- package/types/StageDragResize.d.ts +8 -6
- package/types/StageMask.d.ts +3 -1
- package/types/StageMultiDragResize.d.ts +5 -2
- package/types/StageRender.d.ts +5 -3
- package/types/const.d.ts +27 -0
- package/types/types.d.ts +67 -33
- package/types/util.d.ts +2 -2
package/src/StageRender.ts
CHANGED
|
@@ -21,17 +21,9 @@ import { EventEmitter } from 'events';
|
|
|
21
21
|
import { Id } from '@tmagic/schema';
|
|
22
22
|
import { getHost, injectStyle, isSameDomain } from '@tmagic/utils';
|
|
23
23
|
|
|
24
|
-
import { DEFAULT_ZOOM } from './const';
|
|
24
|
+
import { DEFAULT_ZOOM, RenderType } from './const';
|
|
25
25
|
import style from './style.css?raw';
|
|
26
|
-
import {
|
|
27
|
-
type Point,
|
|
28
|
-
type RemoveData,
|
|
29
|
-
RenderType,
|
|
30
|
-
type Runtime,
|
|
31
|
-
type RuntimeWindow,
|
|
32
|
-
type StageRenderConfig,
|
|
33
|
-
type UpdateData,
|
|
34
|
-
} from './types';
|
|
26
|
+
import type { Point, RemoveData, RenderEvents, Runtime, RuntimeWindow, StageRenderConfig, UpdateData } from './types';
|
|
35
27
|
import { addSelectedClassName, removeSelectedClassName } from './util';
|
|
36
28
|
|
|
37
29
|
export default class StageRender extends EventEmitter {
|
|
@@ -87,15 +79,13 @@ export default class StageRender extends EventEmitter {
|
|
|
87
79
|
runtime?.update?.(data);
|
|
88
80
|
}
|
|
89
81
|
|
|
90
|
-
public async select(
|
|
82
|
+
public async select(ids: Id[]): Promise<void> {
|
|
91
83
|
const runtime = await this.getRuntime();
|
|
92
84
|
|
|
93
|
-
for (const
|
|
94
|
-
await runtime?.select?.(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
this.flagSelectedEl(el);
|
|
85
|
+
for (const id of ids) {
|
|
86
|
+
await runtime?.select?.(id);
|
|
87
|
+
|
|
88
|
+
this.flagSelectedEl(this.getTargetElement(id));
|
|
99
89
|
}
|
|
100
90
|
}
|
|
101
91
|
|
|
@@ -161,13 +151,8 @@ export default class StageRender extends EventEmitter {
|
|
|
161
151
|
return this.getDocument()?.elementsFromPoint(x / this.zoom, y / this.zoom) as HTMLElement[];
|
|
162
152
|
}
|
|
163
153
|
|
|
164
|
-
public getTargetElement(
|
|
165
|
-
|
|
166
|
-
const el = this.getDocument()?.getElementById(`${idOrEl}`);
|
|
167
|
-
if (!el) throw new Error(`不存在ID为${idOrEl}的元素`);
|
|
168
|
-
return el;
|
|
169
|
-
}
|
|
170
|
-
return idOrEl;
|
|
154
|
+
public getTargetElement(id: Id): HTMLElement | null {
|
|
155
|
+
return this.getDocument()?.getElementById(`${id}`) || null;
|
|
171
156
|
}
|
|
172
157
|
|
|
173
158
|
/**
|
|
@@ -181,6 +166,17 @@ export default class StageRender extends EventEmitter {
|
|
|
181
166
|
this.removeAllListeners();
|
|
182
167
|
}
|
|
183
168
|
|
|
169
|
+
public on<Name extends keyof RenderEvents, Param extends RenderEvents[Name]>(
|
|
170
|
+
eventName: Name,
|
|
171
|
+
listener: (...args: Param) => void | Promise<void>,
|
|
172
|
+
) {
|
|
173
|
+
return super.on(eventName, listener as any);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
public emit<Name extends keyof RenderEvents, Param extends RenderEvents[Name]>(eventName: Name, ...args: Param) {
|
|
177
|
+
return super.emit(eventName, ...args);
|
|
178
|
+
}
|
|
179
|
+
|
|
184
180
|
private createIframe(): HTMLIFrameElement {
|
|
185
181
|
this.iframe = globalThis.document.createElement('iframe');
|
|
186
182
|
// 同源,直接加载
|
|
@@ -214,11 +210,11 @@ export default class StageRender extends EventEmitter {
|
|
|
214
210
|
* 在runtime中对被选中的元素进行标记,部分组件有对选中态进行特殊显示的需求
|
|
215
211
|
* @param el 被选中的元素
|
|
216
212
|
*/
|
|
217
|
-
private flagSelectedEl(el: HTMLElement): void {
|
|
213
|
+
private flagSelectedEl(el: HTMLElement | null): void {
|
|
218
214
|
const doc = this.getDocument();
|
|
219
215
|
if (doc) {
|
|
220
216
|
removeSelectedClassName(doc);
|
|
221
|
-
addSelectedClassName(el, doc);
|
|
217
|
+
el && addSelectedClassName(el, doc);
|
|
222
218
|
}
|
|
223
219
|
}
|
|
224
220
|
|
package/src/TargetShadow.ts
CHANGED
|
@@ -93,7 +93,7 @@ export default class TargetShadow {
|
|
|
93
93
|
private updateEl(target: ShadowElement, src?: ShadowElement): ShadowElement {
|
|
94
94
|
const el = src || globalThis.document.createElement('div');
|
|
95
95
|
|
|
96
|
-
el.id = `${this.idPrefix}${target.id}`;
|
|
96
|
+
el.id = `${this.idPrefix}_${target.id}`;
|
|
97
97
|
|
|
98
98
|
el.style.cssText = getTargetElStyle(target, this.zIndex);
|
|
99
99
|
|
package/src/const.ts
CHANGED
|
@@ -78,3 +78,34 @@ export enum AbleActionEventType {
|
|
|
78
78
|
SELECT_PARENT = 'select-parent',
|
|
79
79
|
REMOVE = 'remove',
|
|
80
80
|
}
|
|
81
|
+
|
|
82
|
+
/** 将组件添加到容器的方式 */
|
|
83
|
+
export enum ContainerHighlightType {
|
|
84
|
+
/** 默认方式:组件在容器上方悬停一段时间后加入 */
|
|
85
|
+
DEFAULT = 'default',
|
|
86
|
+
/** 按住alt键,并在容器上方悬停一段时间后加入 */
|
|
87
|
+
ALT = 'alt',
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export enum RenderType {
|
|
91
|
+
IFRAME = 'iframe',
|
|
92
|
+
NATIVE = 'native',
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/** 选择状态 */
|
|
96
|
+
export enum SelectStatus {
|
|
97
|
+
/** 单选 */
|
|
98
|
+
SELECT = 'select',
|
|
99
|
+
/** 多选 */
|
|
100
|
+
MULTI_SELECT = 'multiSelect',
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** 拖动状态 */
|
|
104
|
+
export enum StageDragStatus {
|
|
105
|
+
/** 开始拖动 */
|
|
106
|
+
START = 'start',
|
|
107
|
+
/** 拖动中 */
|
|
108
|
+
ING = 'ing',
|
|
109
|
+
/** 拖动结束 */
|
|
110
|
+
END = 'end',
|
|
111
|
+
}
|
package/src/types.ts
CHANGED
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
19
|
import type { GuidesOptions } from '@scena/guides';
|
|
20
|
-
import type { MoveableOptions } from 'moveable';
|
|
20
|
+
import type { MoveableOptions, OnDragStart } from 'moveable';
|
|
21
21
|
|
|
22
22
|
import Core from '@tmagic/core';
|
|
23
23
|
import type { Id, MApp, MContainer, MNode } from '@tmagic/schema';
|
|
24
24
|
|
|
25
|
-
import { GuidesType, ZIndex } from './const';
|
|
25
|
+
import { AbleActionEventType, ContainerHighlightType, GuidesType, RenderType, ZIndex } from './const';
|
|
26
26
|
import DragResizeHelper from './DragResizeHelper';
|
|
27
27
|
import StageCore from './StageCore';
|
|
28
28
|
|
|
@@ -36,8 +36,8 @@ export type CustomizeMoveableOptions =
|
|
|
36
36
|
| ((config?: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions)
|
|
37
37
|
| MoveableOptions
|
|
38
38
|
| undefined;
|
|
39
|
-
/** render
|
|
40
|
-
export type GetTargetElement = (
|
|
39
|
+
/** render提供给的接口,id转成el */
|
|
40
|
+
export type GetTargetElement = (id: Id) => HTMLElement | null;
|
|
41
41
|
/** render提供的接口,通过坐标获得坐标下所有HTML元素数组 */
|
|
42
42
|
export type GetElementsFromPoint = (point: Point) => HTMLElement[];
|
|
43
43
|
export type GetRenderDocument = () => Document | undefined;
|
|
@@ -45,19 +45,6 @@ export type DelayedMarkContainer = (event: MouseEvent, exclude: Element[]) => No
|
|
|
45
45
|
export type MarkContainerEnd = () => HTMLElement | null;
|
|
46
46
|
export type GetRootContainer = () => HTMLDivElement | undefined;
|
|
47
47
|
|
|
48
|
-
/** 将组件添加到容器的方式 */
|
|
49
|
-
export enum ContainerHighlightType {
|
|
50
|
-
/** 默认方式:组件在容器上方悬停一段时间后加入 */
|
|
51
|
-
DEFAULT = 'default',
|
|
52
|
-
/** 按住alt键,并在容器上方悬停一段时间后加入 */
|
|
53
|
-
ALT = 'alt',
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export enum RenderType {
|
|
57
|
-
IFRAME = 'iframe',
|
|
58
|
-
NATIVE = 'native',
|
|
59
|
-
}
|
|
60
|
-
|
|
61
48
|
export type UpdateDragEl = (el: TargetElement, target: TargetElement, container: HTMLElement) => void;
|
|
62
49
|
|
|
63
50
|
export interface StageCoreConfig {
|
|
@@ -106,7 +93,7 @@ export interface MoveableOptionsManagerConfig {
|
|
|
106
93
|
}
|
|
107
94
|
|
|
108
95
|
export interface CustomizeMoveableOptionsCallbackConfig {
|
|
109
|
-
targetEl
|
|
96
|
+
targetEl: HTMLElement | null;
|
|
110
97
|
targetElId?: string;
|
|
111
98
|
targetEls?: HTMLElement[];
|
|
112
99
|
targetElIds?: string[];
|
|
@@ -151,24 +138,6 @@ export interface DragResizeHelperConfig {
|
|
|
151
138
|
updateDragEl?: UpdateDragEl;
|
|
152
139
|
}
|
|
153
140
|
|
|
154
|
-
/** 选择状态 */
|
|
155
|
-
export enum SelectStatus {
|
|
156
|
-
/** 单选 */
|
|
157
|
-
SELECT = 'select',
|
|
158
|
-
/** 多选 */
|
|
159
|
-
MULTI_SELECT = 'multiSelect',
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/** 拖动状态 */
|
|
163
|
-
export enum StageDragStatus {
|
|
164
|
-
/** 开始拖动 */
|
|
165
|
-
START = 'start',
|
|
166
|
-
/** 拖动中 */
|
|
167
|
-
ING = 'ing',
|
|
168
|
-
/** 拖动结束 */
|
|
169
|
-
END = 'end',
|
|
170
|
-
}
|
|
171
|
-
|
|
172
141
|
export type Rect = {
|
|
173
142
|
width: number;
|
|
174
143
|
height: number;
|
|
@@ -234,7 +203,6 @@ export interface RemoveData {
|
|
|
234
203
|
|
|
235
204
|
export interface Runtime {
|
|
236
205
|
getApp?: () => Core | undefined;
|
|
237
|
-
beforeSelect?: (el: HTMLElement) => Promise<boolean> | boolean;
|
|
238
206
|
updateRootConfig?: (config: MApp) => void;
|
|
239
207
|
updatePageId?: (id: Id) => void;
|
|
240
208
|
select?: (id: Id) => Promise<HTMLElement> | HTMLElement;
|
|
@@ -271,3 +239,71 @@ export interface TargetShadowConfig {
|
|
|
271
239
|
export interface RuleOptions {
|
|
272
240
|
guidesOptions?: Partial<GuidesOptions>;
|
|
273
241
|
}
|
|
242
|
+
|
|
243
|
+
export interface CoreEvents {
|
|
244
|
+
mounted: [];
|
|
245
|
+
'runtime-ready': [runtime: Runtime];
|
|
246
|
+
'page-el-update': [el: HTMLElement];
|
|
247
|
+
'change-guides': [data: GuidesEventData];
|
|
248
|
+
select: [selectedEl: HTMLElement, event: MouseEvent];
|
|
249
|
+
'multi-select': [selectedElList: HTMLElement[], event: MouseEvent];
|
|
250
|
+
dblclick: [event: MouseEvent];
|
|
251
|
+
update: [data: UpdateEventData];
|
|
252
|
+
sort: [data: SortEventData];
|
|
253
|
+
'select-parent': [];
|
|
254
|
+
remove: [data: RemoveEventData];
|
|
255
|
+
highlight: [highlightEl: HTMLElement];
|
|
256
|
+
mousemove: [event: MouseEvent];
|
|
257
|
+
mouseleave: [event: MouseEvent];
|
|
258
|
+
'drag-start': [event: OnDragStart];
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
export interface RenderEvents {
|
|
262
|
+
onload: [];
|
|
263
|
+
'page-el-update': [el: HTMLElement];
|
|
264
|
+
'runtime-ready': [runtime: Runtime];
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
export interface MaskEvents {
|
|
268
|
+
scroll: [event: WheelEvent];
|
|
269
|
+
'change-guides': [
|
|
270
|
+
data: {
|
|
271
|
+
type: GuidesType.HORIZONTAL;
|
|
272
|
+
guides: number[];
|
|
273
|
+
},
|
|
274
|
+
];
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export interface ActionManagerEvents {
|
|
278
|
+
dblclick: [event: MouseEvent];
|
|
279
|
+
mousemove: [event: MouseEvent];
|
|
280
|
+
mouseleave: [event: MouseEvent];
|
|
281
|
+
highlight: [el: HTMLElement];
|
|
282
|
+
update: [data: UpdateEventData];
|
|
283
|
+
sort: [data: SortEventData];
|
|
284
|
+
remove: [data: RemoveEventData];
|
|
285
|
+
select: [selectedEl: HTMLElement | null, event: MouseEvent];
|
|
286
|
+
'select-parent': [];
|
|
287
|
+
'drag-start': [event: OnDragStart];
|
|
288
|
+
'multi-update': [data: UpdateEventData];
|
|
289
|
+
'change-to-select': [id: Id, event: MouseEvent];
|
|
290
|
+
'before-multi-select': [selectedElList: HTMLElement[]];
|
|
291
|
+
'before-select': [el: HTMLElement, event: MouseEvent];
|
|
292
|
+
'multi-select': [selectedElList: HTMLElement[], event: MouseEvent];
|
|
293
|
+
'get-elements-from-point': [els: HTMLElement[]];
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export interface DrEvents {
|
|
297
|
+
'update-moveable': [];
|
|
298
|
+
[AbleActionEventType.REMOVE]: [];
|
|
299
|
+
[AbleActionEventType.SELECT_PARENT]: [];
|
|
300
|
+
'drag-start': [event: OnDragStart];
|
|
301
|
+
update: [data: UpdateEventData];
|
|
302
|
+
sort: [data: SortEventData];
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export interface MultiDrEvents {
|
|
306
|
+
'update-moveable': [];
|
|
307
|
+
'change-to-select': [id: Id, event: MouseEvent];
|
|
308
|
+
update: [data: UpdateEventData];
|
|
309
|
+
}
|
package/src/util.ts
CHANGED
|
@@ -177,7 +177,7 @@ export const calcValueByFontsize = (doc: Document, value: number) => {
|
|
|
177
177
|
* @param {number} deltaTop 偏移量
|
|
178
178
|
* @param {Object} detail 当前选中的组件配置
|
|
179
179
|
*/
|
|
180
|
-
export const down = (deltaTop: number, target: TargetElement): SortEventData
|
|
180
|
+
export const down = (deltaTop: number, target: TargetElement): SortEventData => {
|
|
181
181
|
let swapIndex = 0;
|
|
182
182
|
let addUpH = target.clientHeight;
|
|
183
183
|
const brothers = Array.from(target.parentNode?.children || []).filter(
|
|
@@ -213,7 +213,7 @@ export const down = (deltaTop: number, target: TargetElement): SortEventData | v
|
|
|
213
213
|
* @param {number} deltaTop 偏移量
|
|
214
214
|
* @param {Object} detail 当前选中的组件配置
|
|
215
215
|
*/
|
|
216
|
-
export const up = (deltaTop: number, target: TargetElement): SortEventData
|
|
216
|
+
export const up = (deltaTop: number, target: TargetElement): SortEventData => {
|
|
217
217
|
const brothers = Array.from(target.parentNode?.children || []).filter(
|
|
218
218
|
(node) => !node.id.startsWith(GHOST_EL_ID_PREFIX),
|
|
219
219
|
);
|
package/types/ActionManager.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
import EventEmitter from 'events';
|
|
4
4
|
import type { MoveableOptions } from 'moveable';
|
|
5
5
|
import type { Id } from '@tmagic/schema';
|
|
6
|
-
import { GuidesType } from './const';
|
|
7
|
-
import { ActionManagerConfig,
|
|
6
|
+
import { GuidesType, SelectStatus, StageDragStatus } from './const';
|
|
7
|
+
import type { ActionManagerConfig, ActionManagerEvents } from './types';
|
|
8
8
|
/**
|
|
9
9
|
* 管理蒙层mask之上的操作:1、监听键盘鼠标事件,判断形成单选、多选、高亮操作;2、管理单选、多选、高亮三个类协同工作。
|
|
10
10
|
* @extends EventEmitter
|
|
@@ -60,8 +60,8 @@ export default class ActionManager extends EventEmitter {
|
|
|
60
60
|
* 判断是否单选选中的元素
|
|
61
61
|
*/
|
|
62
62
|
isSelectedEl(el: HTMLElement): boolean;
|
|
63
|
-
setSelectedEl(el
|
|
64
|
-
getSelectedEl(): HTMLElement |
|
|
63
|
+
setSelectedEl(el: HTMLElement | null): void;
|
|
64
|
+
getSelectedEl(): HTMLElement | null;
|
|
65
65
|
getSelectedElList(): HTMLElement[];
|
|
66
66
|
getMoveableOption<K extends keyof MoveableOptions>(key: K): MoveableOptions[K] | undefined;
|
|
67
67
|
/**
|
|
@@ -69,7 +69,7 @@ export default class ActionManager extends EventEmitter {
|
|
|
69
69
|
* @param event 鼠标事件
|
|
70
70
|
* @returns 鼠标下方第一个可选中元素
|
|
71
71
|
*/
|
|
72
|
-
getElementFromPoint(event: MouseEvent): Promise<HTMLElement |
|
|
72
|
+
getElementFromPoint(event: MouseEvent): Promise<HTMLElement | null>;
|
|
73
73
|
/**
|
|
74
74
|
* 判断一个元素能否在当前场景被选中
|
|
75
75
|
* @param el 被判断的元素
|
|
@@ -82,11 +82,11 @@ export default class ActionManager extends EventEmitter {
|
|
|
82
82
|
* 判断一个元素是否可以被多选,如果当前元素是page,则调stop函数告诉调用方不必继续判断其它元素了
|
|
83
83
|
*/
|
|
84
84
|
canMultiSelect(el: HTMLElement, stop: () => boolean): boolean;
|
|
85
|
-
select(el: HTMLElement, event
|
|
86
|
-
multiSelect(
|
|
85
|
+
select(el: HTMLElement | null, event?: MouseEvent): void;
|
|
86
|
+
multiSelect(ids: Id[]): void;
|
|
87
87
|
getHighlightEl(): HTMLElement | undefined;
|
|
88
88
|
setHighlightEl(el: HTMLElement | undefined): void;
|
|
89
|
-
highlight(
|
|
89
|
+
highlight(id: Id): void;
|
|
90
90
|
clearHighlight(): void;
|
|
91
91
|
/**
|
|
92
92
|
* 用于在切换选择模式时清除上一次的状态
|
|
@@ -109,6 +109,8 @@ export default class ActionManager extends EventEmitter {
|
|
|
109
109
|
delayedMarkContainer(event: MouseEvent, excludeElList?: Element[]): NodeJS.Timeout | undefined;
|
|
110
110
|
getDragStatus(): StageDragStatus;
|
|
111
111
|
destroy(): void;
|
|
112
|
+
on<Name extends keyof ActionManagerEvents, Param extends ActionManagerEvents[Name]>(eventName: Name, listener: (...args: Param) => void): this;
|
|
113
|
+
emit<Name extends keyof ActionManagerEvents, Param extends ActionManagerEvents[Name]>(eventName: Name, ...args: Param): boolean;
|
|
112
114
|
private createDr;
|
|
113
115
|
private createMultiDr;
|
|
114
116
|
private changeCallback;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { OnDrag, OnDragGroup, OnDragGroupStart, OnDragStart, OnResize, OnResizeGroup, OnResizeGroupStart, OnResizeStart, OnRotate, OnRotateStart, OnScale, OnScaleStart } from 'moveable';
|
|
1
|
+
import type { OnDrag, OnDragGroup, OnDragGroupStart, OnDragStart, OnResize, OnResizeGroup, OnResizeGroupStart, OnResizeStart, OnRotate, OnRotateStart, OnScale, OnScaleStart } from 'moveable';
|
|
2
2
|
import MoveableHelper from 'moveable-helper';
|
|
3
3
|
import { Mode } from './const';
|
|
4
|
-
import { DragResizeHelperConfig, Rect, TargetElement } from './types';
|
|
4
|
+
import type { DragResizeHelperConfig, Rect, TargetElement } from './types';
|
|
5
5
|
/**
|
|
6
6
|
* 拖拽/改变大小等操作发生时,moveable会抛出各种状态事件,DragResizeHelper负责响应这些事件,对目标节点target和拖拽节点targetShadow进行修改;
|
|
7
7
|
* 其中目标节点是DragResizeHelper直接改的,targetShadow作为直接被操作的拖拽框,是调用moveableHelper改的;
|
package/types/StageCore.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { Id } from '@tmagic/schema';
|
|
|
6
6
|
import ActionManager from './ActionManager';
|
|
7
7
|
import StageMask from './StageMask';
|
|
8
8
|
import StageRender from './StageRender';
|
|
9
|
-
import type { RemoveData, StageCoreConfig, UpdateData } from './types';
|
|
9
|
+
import type { CoreEvents, RemoveData, StageCoreConfig, UpdateData } from './types';
|
|
10
10
|
/**
|
|
11
11
|
* 负责管理画布,管理renderer、mask、actionManager三个核心类,并负责统一对外通信,包括提供接口和抛事件
|
|
12
12
|
*/
|
|
@@ -21,19 +21,19 @@ export default class StageCore extends EventEmitter {
|
|
|
21
21
|
constructor(config: StageCoreConfig);
|
|
22
22
|
/**
|
|
23
23
|
* 单选选中元素
|
|
24
|
-
* @param
|
|
24
|
+
* @param id 选中的id
|
|
25
25
|
*/
|
|
26
|
-
select(
|
|
26
|
+
select(id: Id, event?: MouseEvent): Promise<void>;
|
|
27
27
|
/**
|
|
28
28
|
* 多选选中多个元素
|
|
29
|
-
* @param
|
|
29
|
+
* @param ids 选中元素的id列表
|
|
30
30
|
*/
|
|
31
|
-
multiSelect(
|
|
31
|
+
multiSelect(ids: Id[]): Promise<void>;
|
|
32
32
|
/**
|
|
33
33
|
* 高亮选中元素
|
|
34
34
|
* @param el 要高亮的元素
|
|
35
35
|
*/
|
|
36
|
-
highlight(
|
|
36
|
+
highlight(id: Id): void;
|
|
37
37
|
clearHighlight(): void;
|
|
38
38
|
/**
|
|
39
39
|
* 更新组件
|
|
@@ -73,13 +73,15 @@ export default class StageCore extends EventEmitter {
|
|
|
73
73
|
*/
|
|
74
74
|
delayedMarkContainer(event: MouseEvent, excludeElList?: Element[]): NodeJS.Timeout | undefined;
|
|
75
75
|
getMoveableOption<K extends keyof MoveableOptions>(key: K): MoveableOptions[K] | undefined;
|
|
76
|
-
getDragStatus(): import("./
|
|
76
|
+
getDragStatus(): import("./const").StageDragStatus;
|
|
77
77
|
disableMultiSelect(): void;
|
|
78
78
|
enableMultiSelect(): void;
|
|
79
79
|
/**
|
|
80
80
|
* 销毁实例
|
|
81
81
|
*/
|
|
82
82
|
destroy(): void;
|
|
83
|
+
on<Name extends keyof CoreEvents, Param extends CoreEvents[Name]>(eventName: Name, listener: (...args: Param) => void | Promise<void>): this;
|
|
84
|
+
emit<Name extends keyof CoreEvents, Param extends CoreEvents[Name]>(eventName: Name, ...args: Param): boolean;
|
|
83
85
|
/**
|
|
84
86
|
* 监听页面大小变化
|
|
85
87
|
*/
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
import { StageDragStatus } from './const';
|
|
1
2
|
import MoveableOptionsManager from './MoveableOptionsManager';
|
|
2
|
-
import type { StageDragResizeConfig } from './types';
|
|
3
|
-
import { StageDragStatus } from './types';
|
|
3
|
+
import type { DrEvents, StageDragResizeConfig } from './types';
|
|
4
4
|
/**
|
|
5
5
|
* 管理单选操作,响应选中操作,初始化moveableOption参数并初始化moveable,处理moveable回调事件对组件进行更新
|
|
6
6
|
* @extends MoveableOptionsManager
|
|
7
7
|
*/
|
|
8
8
|
export default class StageDragResize extends MoveableOptionsManager {
|
|
9
9
|
/** 目标节点 */
|
|
10
|
-
private target
|
|
10
|
+
private target;
|
|
11
11
|
/** Moveable拖拽类实例 */
|
|
12
12
|
private moveable?;
|
|
13
13
|
/** 拖动状态 */
|
|
@@ -18,24 +18,26 @@ export default class StageDragResize extends MoveableOptionsManager {
|
|
|
18
18
|
private markContainerEnd;
|
|
19
19
|
private delayedMarkContainer;
|
|
20
20
|
constructor(config: StageDragResizeConfig);
|
|
21
|
-
getTarget(): HTMLElement |
|
|
21
|
+
getTarget(): HTMLElement | null;
|
|
22
22
|
/**
|
|
23
23
|
* 将选中框渲染并覆盖到选中的组件Dom节点上方
|
|
24
24
|
* 当选中的节点不是absolute时,会创建一个新的节点出来作为拖拽目标
|
|
25
25
|
* @param el 选中组件的Dom节点元素
|
|
26
26
|
* @param event 鼠标事件
|
|
27
27
|
*/
|
|
28
|
-
select(el: HTMLElement, event?: MouseEvent): void;
|
|
28
|
+
select(el: HTMLElement | null, event?: MouseEvent): void;
|
|
29
29
|
/**
|
|
30
30
|
* 初始化选中框并渲染出来
|
|
31
31
|
*/
|
|
32
|
-
updateMoveable(el?: HTMLElement |
|
|
32
|
+
updateMoveable(el?: HTMLElement | null): void;
|
|
33
33
|
clearSelectStatus(): void;
|
|
34
34
|
getDragStatus(): StageDragStatus;
|
|
35
35
|
/**
|
|
36
36
|
* 销毁实例
|
|
37
37
|
*/
|
|
38
38
|
destroy(): void;
|
|
39
|
+
on<Name extends keyof DrEvents, Param extends DrEvents[Name]>(eventName: Name, listener: (...args: Param) => void | Promise<void>): this;
|
|
40
|
+
emit<Name extends keyof DrEvents, Param extends DrEvents[Name]>(eventName: Name, ...args: Param): boolean;
|
|
39
41
|
private init;
|
|
40
42
|
private initMoveable;
|
|
41
43
|
private bindResizeEvent;
|
package/types/StageMask.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Mode } from './const';
|
|
2
2
|
import Rule from './Rule';
|
|
3
|
-
import type { RuleOptions } from './types';
|
|
3
|
+
import type { MaskEvents, RuleOptions } from './types';
|
|
4
4
|
/**
|
|
5
5
|
* 蒙层
|
|
6
6
|
* @description 用于拦截页面的点击动作,避免点击时触发组件自身动作;在编辑器中点击组件应当是选中组件;
|
|
@@ -50,6 +50,8 @@ export default class StageMask extends Rule {
|
|
|
50
50
|
* 销毁实例
|
|
51
51
|
*/
|
|
52
52
|
destroy(): void;
|
|
53
|
+
on<Name extends keyof MaskEvents, Param extends MaskEvents[Name]>(eventName: Name, listener: (...args: Param) => void | Promise<void>): this;
|
|
54
|
+
emit<Name extends keyof MaskEvents, Param extends MaskEvents[Name]>(eventName: Name, ...args: Param): boolean;
|
|
53
55
|
/**
|
|
54
56
|
* 监听选中元素是否在画布可视区域内,如果目标元素不在可视区域内,通过滚动使该元素出现在可视区域
|
|
55
57
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import Moveable from 'moveable';
|
|
2
|
+
import { StageDragStatus } from './const';
|
|
2
3
|
import MoveableOptionsManager from './MoveableOptionsManager';
|
|
3
|
-
import {
|
|
4
|
+
import { MultiDrEvents, StageMultiDragResizeConfig } from './types';
|
|
4
5
|
export default class StageMultiDragResize extends MoveableOptionsManager {
|
|
5
6
|
/** 画布容器 */
|
|
6
7
|
container: HTMLElement;
|
|
@@ -19,7 +20,7 @@ export default class StageMultiDragResize extends MoveableOptionsManager {
|
|
|
19
20
|
* @param els
|
|
20
21
|
*/
|
|
21
22
|
multiSelect(els: HTMLElement[]): void;
|
|
22
|
-
canSelect(el: HTMLElement, selectedEl: HTMLElement |
|
|
23
|
+
canSelect(el: HTMLElement, selectedEl: HTMLElement | null): boolean;
|
|
23
24
|
updateMoveable(eleList?: HTMLElement[]): void;
|
|
24
25
|
/**
|
|
25
26
|
* 清除多选状态
|
|
@@ -29,6 +30,8 @@ export default class StageMultiDragResize extends MoveableOptionsManager {
|
|
|
29
30
|
* 销毁实例
|
|
30
31
|
*/
|
|
31
32
|
destroy(): void;
|
|
33
|
+
on<Name extends keyof MultiDrEvents, Param extends MultiDrEvents[Name]>(eventName: Name, listener: (...args: Param) => void | Promise<void>): this;
|
|
34
|
+
emit<Name extends keyof MultiDrEvents, Param extends MultiDrEvents[Name]>(eventName: Name, ...args: Param): boolean;
|
|
32
35
|
/**
|
|
33
36
|
* 拖拽完成后将更新的位置信息暴露给上层业务方,业务方可以接收事件进行保存
|
|
34
37
|
* @param isResize 是否进行大小缩放
|
package/types/StageRender.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
3
|
import { Id } from '@tmagic/schema';
|
|
4
|
-
import {
|
|
4
|
+
import type { Point, RemoveData, RenderEvents, Runtime, RuntimeWindow, StageRenderConfig, UpdateData } from './types';
|
|
5
5
|
export default class StageRender extends EventEmitter {
|
|
6
6
|
/** 组件的js、css执行的环境,直接渲染为当前window,iframe渲染则为iframe.contentWindow */
|
|
7
7
|
contentWindow: RuntimeWindow | null;
|
|
@@ -20,7 +20,7 @@ export default class StageRender extends EventEmitter {
|
|
|
20
20
|
add(data: UpdateData): Promise<void>;
|
|
21
21
|
remove(data: RemoveData): Promise<void>;
|
|
22
22
|
update(data: UpdateData): Promise<void>;
|
|
23
|
-
select(
|
|
23
|
+
select(ids: Id[]): Promise<void>;
|
|
24
24
|
setZoom(zoom?: number): void;
|
|
25
25
|
/**
|
|
26
26
|
* 挂载Dom节点
|
|
@@ -35,11 +35,13 @@ export default class StageRender extends EventEmitter {
|
|
|
35
35
|
* @returns 坐标下方所有HTML元素数组,会包含父元素直至html,元素层叠时返回顺序是从上到下
|
|
36
36
|
*/
|
|
37
37
|
getElementsFromPoint(point: Point): HTMLElement[];
|
|
38
|
-
getTargetElement(
|
|
38
|
+
getTargetElement(id: Id): HTMLElement | null;
|
|
39
39
|
/**
|
|
40
40
|
* 销毁实例
|
|
41
41
|
*/
|
|
42
42
|
destroy(): void;
|
|
43
|
+
on<Name extends keyof RenderEvents, Param extends RenderEvents[Name]>(eventName: Name, listener: (...args: Param) => void | Promise<void>): this;
|
|
44
|
+
emit<Name extends keyof RenderEvents, Param extends RenderEvents[Name]>(eventName: Name, ...args: Param): boolean;
|
|
43
45
|
private createIframe;
|
|
44
46
|
private createNativeContainer;
|
|
45
47
|
/**
|
package/types/const.d.ts
CHANGED
|
@@ -49,3 +49,30 @@ export declare enum AbleActionEventType {
|
|
|
49
49
|
SELECT_PARENT = "select-parent",
|
|
50
50
|
REMOVE = "remove"
|
|
51
51
|
}
|
|
52
|
+
/** 将组件添加到容器的方式 */
|
|
53
|
+
export declare enum ContainerHighlightType {
|
|
54
|
+
/** 默认方式:组件在容器上方悬停一段时间后加入 */
|
|
55
|
+
DEFAULT = "default",
|
|
56
|
+
/** 按住alt键,并在容器上方悬停一段时间后加入 */
|
|
57
|
+
ALT = "alt"
|
|
58
|
+
}
|
|
59
|
+
export declare enum RenderType {
|
|
60
|
+
IFRAME = "iframe",
|
|
61
|
+
NATIVE = "native"
|
|
62
|
+
}
|
|
63
|
+
/** 选择状态 */
|
|
64
|
+
export declare enum SelectStatus {
|
|
65
|
+
/** 单选 */
|
|
66
|
+
SELECT = "select",
|
|
67
|
+
/** 多选 */
|
|
68
|
+
MULTI_SELECT = "multiSelect"
|
|
69
|
+
}
|
|
70
|
+
/** 拖动状态 */
|
|
71
|
+
export declare enum StageDragStatus {
|
|
72
|
+
/** 开始拖动 */
|
|
73
|
+
START = "start",
|
|
74
|
+
/** 拖动中 */
|
|
75
|
+
ING = "ing",
|
|
76
|
+
/** 拖动结束 */
|
|
77
|
+
END = "end"
|
|
78
|
+
}
|