@tmagic/stage 1.2.0-beta.8 → 1.2.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 (39) hide show
  1. package/README.md +62 -1
  2. package/dist/{tmagic-stage.mjs → tmagic-stage.js} +1395 -1062
  3. package/dist/tmagic-stage.js.map +1 -0
  4. package/dist/{tmagic-stage.umd.js → tmagic-stage.umd.cjs} +1393 -1060
  5. package/dist/tmagic-stage.umd.cjs.map +1 -0
  6. package/package.json +9 -8
  7. package/src/ActionManager.ts +535 -0
  8. package/src/DragResizeHelper.ts +338 -0
  9. package/src/MoveableOptionsManager.ts +249 -0
  10. package/src/MoveableSelectParentAble.ts +3 -5
  11. package/src/Rule.ts +4 -4
  12. package/src/StageCore.ts +203 -275
  13. package/src/StageDragResize.ts +86 -348
  14. package/src/StageHighlight.ts +17 -16
  15. package/src/StageMask.ts +19 -102
  16. package/src/StageMultiDragResize.ts +97 -198
  17. package/src/StageRender.ts +85 -10
  18. package/src/TargetShadow.ts +120 -0
  19. package/src/const.ts +1 -1
  20. package/src/types.ts +99 -19
  21. package/src/util.ts +18 -11
  22. package/types/ActionManager.d.ts +141 -0
  23. package/types/DragResizeHelper.d.ts +70 -0
  24. package/types/MoveableOptionsManager.d.ts +86 -0
  25. package/types/MoveableSelectParentAble.d.ts +1 -2
  26. package/types/StageCore.d.ts +58 -41
  27. package/types/StageDragResize.d.ts +12 -40
  28. package/types/StageHighlight.d.ts +3 -4
  29. package/types/StageMask.d.ts +0 -21
  30. package/types/StageMultiDragResize.d.ts +8 -24
  31. package/types/StageRender.d.ts +23 -4
  32. package/types/TargetShadow.d.ts +22 -0
  33. package/types/const.d.ts +1 -1
  34. package/types/types.d.ts +87 -18
  35. package/types/util.d.ts +8 -8
  36. package/dist/tmagic-stage.mjs.map +0 -1
  37. package/dist/tmagic-stage.umd.js.map +0 -1
  38. package/src/TargetCalibrate.ts +0 -119
  39. package/types/TargetCalibrate.d.ts +0 -20
@@ -0,0 +1,70 @@
1
+ import { OnDrag, OnDragGroup, OnDragGroupStart, OnDragStart, OnResize, OnResizeGroup, OnResizeGroupStart, OnResizeStart, OnRotate, OnRotateStart, OnScale, OnScaleStart } from 'moveable';
2
+ import MoveableHelper from 'moveable-helper';
3
+ import { Mode } from './const';
4
+ import { DragResizeHelperConfig, TargetElement } from './types';
5
+ /**
6
+ * 拖拽/改变大小等操作发生时,moveable会抛出各种状态事件,DragResizeHelper负责响应这些事件,对目标节点target和拖拽节点targetShadow进行修改;
7
+ * 其中目标节点是DragResizeHelper直接改的,targetShadow作为直接被操作的拖拽框,是调用moveableHelper改的;
8
+ * 有个特殊情况是流式布局下,moveableHelper不支持,targetShadow也是DragResizeHelper直接改的
9
+ */
10
+ export default class DragResizeHelper {
11
+ /** 目标节点在蒙层上的占位节点,用于跟鼠标交互,避免鼠标事件直接作用到目标节点 */
12
+ private targetShadow;
13
+ /** 要操作的原始目标节点 */
14
+ private target;
15
+ /** 多选:目标节点组 */
16
+ private targetList;
17
+ /** 响应拖拽的状态事件,修改绝对定位布局下targetShadow的dom。
18
+ * MoveableHelper里面的方法是成员属性,如果DragResizeHelper用继承的方式将无法通过super去调这些方法 */
19
+ private moveableHelper;
20
+ /** 流式布局下,目标节点的镜像节点 */
21
+ private ghostEl;
22
+ /** 用于记录节点被改变前的位置 */
23
+ private frameSnapShot;
24
+ /** 多选模式下的多个节点 */
25
+ private framesSnapShot;
26
+ /** 布局方式:流式布局、绝对定位、固定定位 */
27
+ private mode;
28
+ constructor(config: DragResizeHelperConfig);
29
+ destroy(): void;
30
+ destroyShadowEl(): void;
31
+ getShadowEl(): TargetElement | undefined;
32
+ updateShadowEl(el: HTMLElement): void;
33
+ setMode(mode: Mode): void;
34
+ /**
35
+ * 改变大小事件开始
36
+ * @param e 包含了拖拽节点的dom,moveableHelper会直接修改拖拽节点
37
+ */
38
+ onResizeStart(e: OnResizeStart): void;
39
+ onResize(e: OnResize): void;
40
+ onDragStart(e: OnDragStart): void;
41
+ onDrag(e: OnDrag): void;
42
+ onRotateStart(e: OnRotateStart): void;
43
+ onRotate(e: OnRotate): void;
44
+ onScaleStart(e: OnScaleStart): void;
45
+ onScale(e: OnScale): void;
46
+ getGhostEl(): HTMLElement | undefined;
47
+ destroyGhostEl(): void;
48
+ clear(): void;
49
+ getFrame(el: HTMLElement | SVGElement): ReturnType<MoveableHelper['getFrame']>;
50
+ getShadowEls(): TargetElement[];
51
+ updateGroup(els: HTMLElement[]): void;
52
+ setTargetList(targetList: HTMLElement[]): void;
53
+ clearMultiSelectStatus(): void;
54
+ onResizeGroupStart(e: OnResizeGroupStart): void;
55
+ /**
56
+ * 多选状态下通过拖拽边框改变大小,所有选中组件会一起改变大小
57
+ */
58
+ onResizeGroup(e: OnResizeGroup): void;
59
+ onDragGroupStart(e: OnDragGroupStart): void;
60
+ onDragGroup(e: OnDragGroup): void;
61
+ /**
62
+ * 多选状态设置多个节点的快照
63
+ */
64
+ private setFramesSnapShot;
65
+ /**
66
+ * 流式布局把目标节点复制一份进行拖拽,在拖拽结束前不影响页面原布局样式
67
+ */
68
+ private generateGhostEl;
69
+ private setGhostElChildrenId;
70
+ }
@@ -0,0 +1,86 @@
1
+ /// <reference types="node" />
2
+ import EventEmitter from 'events';
3
+ import { MoveableOptions } from 'moveable';
4
+ import { GuidesType, Mode } from './const';
5
+ import { MoveableOptionsManagerConfig } from './types';
6
+ /**
7
+ * 单选和多选的父类,用于管理moveableOptions
8
+ * @extends EventEmitter
9
+ */
10
+ export default class MoveableOptionsManager extends EventEmitter {
11
+ /** 布局方式:流式布局、绝对定位、固定定位 */
12
+ mode: Mode;
13
+ /** 画布容器 */
14
+ protected container: HTMLElement;
15
+ /** 水平参考线 */
16
+ private horizontalGuidelines;
17
+ /** 垂直参考线 */
18
+ private verticalGuidelines;
19
+ /** 对齐元素集合 */
20
+ private elementGuidelines;
21
+ /** 由外部调用方(编辑器)传入进来的moveable默认参数,可以为空,也可以是一个回调函数 */
22
+ private customizedOptions?;
23
+ /** 获取整个画布的根元素(在StageCore的mount函数中挂载的container) */
24
+ private getRootContainer;
25
+ constructor(config: MoveableOptionsManagerConfig);
26
+ /**
27
+ * 设置水平/垂直参考线
28
+ * @param type 参考线类型
29
+ * @param guidelines 参考线坐标数组
30
+ */
31
+ setGuidelines(type: GuidesType, guidelines: number[]): void;
32
+ /**
33
+ * 清除横向和纵向的参考线
34
+ */
35
+ clearGuides(): void;
36
+ /**
37
+ * 设置有哪些元素要辅助对齐
38
+ * @param selectedElList 选中的元素列表,需要排除在对齐元素之外
39
+ * @param allElList 全部元素列表
40
+ */
41
+ protected setElementGuidelines(selectedElList: HTMLElement[], allElList: HTMLElement[]): void;
42
+ /**
43
+ * 获取moveable参数
44
+ * @param isMultiSelect 是否多选模式
45
+ * @param runtimeOptions 调用时实时传进来的的moveable参数
46
+ * @returns moveable所需参数
47
+ */
48
+ protected getOptions(isMultiSelect: boolean, runtimeOptions?: MoveableOptions): MoveableOptions;
49
+ /**
50
+ * 获取单选和多选的moveable公共参数
51
+ * @returns moveable公共参数
52
+ */
53
+ private getDefaultOptions;
54
+ /**
55
+ * 获取单选下的差异化参数
56
+ * @returns {MoveableOptions} moveable options参数
57
+ */
58
+ private getSingleOptions;
59
+ /**
60
+ * 获取多选下的差异化参数
61
+ * @returns {MoveableOptions} moveable options参数
62
+ */
63
+ private getMultiOptions;
64
+ /**
65
+ * 获取业务方自定义的moveable参数
66
+ */
67
+ private getCustomizeOptions;
68
+ /**
69
+ * 这是给selectParentAbles的回调函数,用于触发选中父元素事件
70
+ */
71
+ private selectParentHandler;
72
+ /**
73
+ * 为需要辅助对齐的元素创建div
74
+ * @param selectedElList 选中的元素列表,需要排除在对齐元素之外
75
+ * @param allElList 全部元素列表
76
+ * @returns frame 辅助对齐元素集合的页面片
77
+ */
78
+ private createGuidelineElements;
79
+ /**
80
+ * 判断一个元素是否在元素列表里面
81
+ * @param ele 元素
82
+ * @param eleList 元素列表
83
+ * @returns 是否在元素列表里面
84
+ */
85
+ private isInElementList;
86
+ }
@@ -1,6 +1,5 @@
1
1
  import { MoveableManagerInterface, Renderer } from 'moveable';
2
- import type StageDragResize from './StageDragResize';
3
- declare const _default: (dr: StageDragResize) => {
2
+ declare const _default: (selectParentHandler: () => void) => {
4
3
  name: string;
5
4
  props: {};
6
5
  events: {};
@@ -1,64 +1,53 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
3
  import { EventEmitter } from 'events';
4
- import type { Id } from '@tmagic/schema';
5
- import StageDragResize from './StageDragResize';
6
- import StageHighlight from './StageHighlight';
4
+ import { Id } from '@tmagic/schema';
7
5
  import StageMask from './StageMask';
8
- import StageMultiDragResize from './StageMultiDragResize';
9
6
  import StageRender from './StageRender';
10
- import { ContainerHighlightType, IsContainer, RemoveData, SortEventData, StageCoreConfig, UpdateData } from './types';
7
+ import { RemoveData, StageCoreConfig, UpdateData } from './types';
8
+ /**
9
+ * 负责管理画布,管理renderer、mask、actionManager三个核心类,并负责统一对外通信,包括提供接口和抛事件
10
+ */
11
11
  export default class StageCore extends EventEmitter {
12
12
  container?: HTMLDivElement;
13
- selectedDom: HTMLElement | undefined;
14
- selectedDomList: HTMLElement[];
15
- highlightedDom: Element | undefined;
16
13
  renderer: StageRender;
17
14
  mask: StageMask;
18
- dr: StageDragResize;
19
- multiDr: StageMultiDragResize;
20
- highlightLayer: StageHighlight;
21
- config: StageCoreConfig;
22
- zoom: number;
23
- containerHighlightClassName: string;
24
- containerHighlightDuration: number;
25
- containerHighlightType?: ContainerHighlightType;
26
- isContainer: IsContainer;
27
- private canSelect;
15
+ private actionManager;
28
16
  private pageResizeObserver;
17
+ private autoScrollIntoView;
18
+ private customizedRender?;
29
19
  constructor(config: StageCoreConfig);
30
- getElementsFromPoint(event: MouseEvent): HTMLElement[];
31
- getElementFromPoint(event: MouseEvent): Promise<HTMLElement | undefined>;
32
- isElCanSelect(el: HTMLElement, event: MouseEvent, stop: () => boolean): Promise<Boolean>;
33
20
  /**
34
- * 选中组件
35
- * @param idOrEl 组件Dom节点的id属性,或者Dom节点
21
+ * 单选选中元素
22
+ * @param idOrEl 选中的id或者元素
36
23
  */
37
24
  select(idOrEl: Id | HTMLElement, event?: MouseEvent): Promise<void>;
38
25
  /**
39
- * 多选
40
- * @param domList 多选节点
26
+ * 多选选中多个元素
27
+ * @param idOrElList 选中元素的id或元素列表
41
28
  */
42
29
  multiSelect(idOrElList: HTMLElement[] | Id[]): Promise<void>;
43
30
  /**
44
- * 更新选中的节点
45
- * @param data 更新的数据
31
+ * 高亮选中元素
32
+ * @param el 要高亮的元素
33
+ */
34
+ highlight(idOrEl: Id | HTMLElement): void;
35
+ /**
36
+ * 更新组件
37
+ * @param data 更新组件的数据
46
38
  */
47
39
  update(data: UpdateData): Promise<void>;
48
40
  /**
49
- * 高亮选中组件
50
- * @param el 页面Dom节点
41
+ * 往画布增加一个组件
42
+ * @param data 组件信息数据
51
43
  */
52
- highlight(idOrEl: HTMLElement | Id): Promise<void>;
53
- sortNode(data: SortEventData): Promise<void>;
54
44
  add(data: UpdateData): Promise<void>;
55
- remove(data: RemoveData): Promise<void>;
56
- setZoom(zoom?: number): void;
57
45
  /**
58
- * 用于在切换选择模式时清除上一次的状态
59
- * @param selectType 需要清理的选择模式 多选:multiSelect,单选:select
46
+ * 从画布删除一个组件
47
+ * @param data 组件信息数据
60
48
  */
61
- clearSelectStatus(selectType: String): void;
49
+ remove(data: RemoveData): Promise<void>;
50
+ setZoom(zoom?: number): void;
62
51
  /**
63
52
  * 挂载Dom节点
64
53
  * @param el 将stage挂载到该Dom节点上
@@ -68,8 +57,18 @@ export default class StageCore extends EventEmitter {
68
57
  * 清空所有参考线
69
58
  */
70
59
  clearGuides(): void;
71
- addContainerHighlightClassName(event: MouseEvent, exclude: Element[]): Promise<void>;
72
- getAddContainerHighlightClassNameTimeout(event: MouseEvent, exclude?: Element[]): NodeJS.Timeout;
60
+ /**
61
+ * @deprecated 废弃接口,建议用delayedMarkContainer代替
62
+ */
63
+ getAddContainerHighlightClassNameTimeout(event: MouseEvent, excludeElList?: Element[]): NodeJS.Timeout;
64
+ /**
65
+ * 鼠标拖拽着元素,在容器上方悬停,延迟一段时间后,对容器进行标记,如果悬停时间够长将标记成功,悬停时间短,调用方通过返回的timeoutId取消标记
66
+ * 标记的作用:1、高亮容器,给用户一个加入容器的交互感知;2、释放鼠标后,通过标记的标志找到要加入的容器
67
+ * @param event 鼠标事件
68
+ * @param excludeElList 计算鼠标所在容器时要排除的元素列表
69
+ * @returns timeoutId,调用方在鼠标移走时要取消该timeout,阻止标记
70
+ */
71
+ delayedMarkContainer(event: MouseEvent, excludeElList?: Element[]): NodeJS.Timeout;
73
72
  /**
74
73
  * 销毁实例
75
74
  */
@@ -78,9 +77,27 @@ export default class StageCore extends EventEmitter {
78
77
  * 监听页面大小变化
79
78
  */
80
79
  private observePageResize;
80
+ private getActionManagerConfig;
81
+ private initRenderEvent;
82
+ private initMaskEvent;
83
+ /**
84
+ * 初始化操作相关事件监听
85
+ */
86
+ private initActionEvent;
87
+ /**
88
+ * 初始化ActionManager类本身抛出来的事件监听
89
+ */
90
+ private initActionManagerEvent;
91
+ /**
92
+ * 初始化DragResize类通过ActionManager抛出来的事件监听
93
+ */
94
+ private initDrEvent;
95
+ /**
96
+ * 初始化MultiDragResize类通过ActionManager抛出来的事件监听
97
+ */
98
+ private initMulDrEvent;
81
99
  /**
82
- * 传入stageRender供其回调,获取业务方自定义渲染画布页面渲染结果
100
+ * 初始化Highlight类通过ActionManager抛出来的事件监听
83
101
  */
84
- private render;
85
- private getTargetElement;
102
+ private initHighlightEvent;
86
103
  }
@@ -1,43 +1,25 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
- import Moveable from 'moveable';
4
- import { GuidesType, Mode } from './const';
5
- import StageCore from './StageCore';
6
- import StageMask from './StageMask';
1
+ import MoveableOptionsManager from './MoveableOptionsManager';
7
2
  import type { StageDragResizeConfig } from './types';
8
3
  /**
9
- * 选中框
4
+ * 管理单选操作,响应选中操作,初始化moveableOption参数并初始化moveable,处理moveable回调事件对组件进行更新
5
+ * @extends MoveableOptionsManager
10
6
  */
11
- export default class StageDragResize extends EventEmitter {
12
- core: StageCore;
13
- mask: StageMask;
14
- /** 画布容器 */
15
- container: HTMLElement;
7
+ export default class StageDragResize extends MoveableOptionsManager {
16
8
  /** 目标节点 */
17
- target?: HTMLElement;
18
- /** 目标节点在蒙层中的占位节点 */
19
- dragEl?: HTMLDivElement;
9
+ private target?;
20
10
  /** Moveable拖拽类实例 */
21
- moveable?: Moveable;
22
- /** 水平参考线 */
23
- horizontalGuidelines: number[];
24
- /** 垂直参考线 */
25
- verticalGuidelines: number[];
26
- /** 对齐元素集合 */
27
- elementGuidelines: HTMLElement[];
28
- /** 布局方式:流式布局、绝对定位、固定定位 */
29
- mode: Mode;
30
- private moveableOptions;
11
+ private moveable?;
31
12
  /** 拖动状态 */
32
13
  private dragStatus;
33
- /** 流式布局下,目标节点的镜像节点 */
34
- private ghostEl;
35
- private moveableHelper?;
36
- private isContainerHighlight;
14
+ private dragResizeHelper;
15
+ private disabledDragStart?;
16
+ private getRenderDocument;
17
+ private markContainerEnd;
18
+ private delayedMarkContainer;
37
19
  constructor(config: StageDragResizeConfig);
38
20
  /**
39
21
  * 将选中框渲染并覆盖到选中的组件Dom节点上方
40
- * 当选中的节点是不是absolute时,会创建一个新的节点出来作为拖拽目标
22
+ * 当选中的节点不是absolute时,会创建一个新的节点出来作为拖拽目标
41
23
  * @param el 选中组件的Dom节点元素
42
24
  * @param event 鼠标事件
43
25
  */
@@ -46,17 +28,12 @@ export default class StageDragResize extends EventEmitter {
46
28
  * 初始化选中框并渲染出来
47
29
  */
48
30
  updateMoveable(el?: HTMLElement | undefined): void;
49
- setGuidelines(type: GuidesType, guidelines: number[]): void;
50
- clearGuides(): void;
51
31
  clearSelectStatus(): void;
52
- destroyDragEl(): void;
53
32
  /**
54
33
  * 销毁实例
55
34
  */
56
35
  destroy(): void;
57
36
  private init;
58
- private setElementGuidelines;
59
- private createGuidelineElements;
60
37
  private initMoveable;
61
38
  private bindResizeEvent;
62
39
  private bindDragEvent;
@@ -64,9 +41,4 @@ export default class StageDragResize extends EventEmitter {
64
41
  private bindScaleEvent;
65
42
  private sort;
66
43
  private update;
67
- private generateGhostEl;
68
- private setGhostElChildrenId;
69
- private destroyGhostEl;
70
- private getOptions;
71
- private canContainerHighlight;
72
44
  }
@@ -1,15 +1,14 @@
1
1
  /// <reference types="node" />
2
2
  import { EventEmitter } from 'events';
3
3
  import Moveable from 'moveable';
4
- import StageCore from './StageCore';
5
- import TargetCalibrate from './TargetCalibrate';
4
+ import TargetShadow from './TargetShadow';
6
5
  import type { StageHighlightConfig } from './types';
7
6
  export default class StageHighlight extends EventEmitter {
8
- core: StageCore;
9
7
  container: HTMLElement;
10
8
  target?: HTMLElement;
11
9
  moveable?: Moveable;
12
- calibrationTarget: TargetCalibrate;
10
+ targetShadow: TargetShadow;
11
+ private getRootContainer;
13
12
  constructor(config: StageHighlightConfig);
14
13
  /**
15
14
  * 高亮鼠标悬停的组件
@@ -16,16 +16,10 @@ export default class StageMask extends Rule {
16
16
  wrapperWidth: number;
17
17
  maxScrollTop: number;
18
18
  maxScrollLeft: number;
19
- isMultiSelectStatus: Boolean;
20
19
  private mode;
21
20
  private pageScrollParent;
22
21
  private intersectionObserver;
23
22
  private wrapperResizeObserver;
24
- /**
25
- * 高亮事件处理函数
26
- * @param event 事件对象
27
- */
28
- private highlightHandler;
29
23
  constructor();
30
24
  setMode(mode: Mode): void;
31
25
  /**
@@ -55,14 +49,6 @@ export default class StageMask extends Rule {
55
49
  * 销毁实例
56
50
  */
57
51
  destroy(): void;
58
- /**
59
- * 初始化content的事件监听
60
- */
61
- private initContentEventListener;
62
- /**
63
- * 初始化多选事件监听
64
- */
65
- private initMultiSelectEvent;
66
52
  /**
67
53
  * 监听选中元素是否在画布可视区域内,如果目标元素不在可视区域内,通过滚动使该元素出现在可视区域
68
54
  */
@@ -96,12 +82,5 @@ export default class StageMask extends Rule {
96
82
  * 由于滚动容器变化等因素,会导致当前滚动的距离不正确
97
83
  */
98
84
  private fixScrollValue;
99
- /**
100
- * 点击事件处理函数
101
- * @param event 事件对象
102
- */
103
- private mouseDownHandler;
104
- private mouseUpHandler;
105
85
  private mouseWheelHandler;
106
- private mouseLeaveHandler;
107
86
  }
@@ -1,30 +1,24 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from 'events';
3
1
  import Moveable from 'moveable';
4
- import StageCore from './StageCore';
5
- import StageMask from './StageMask';
6
- import { StageDragResizeConfig, StageDragStatus } from './types';
7
- export default class StageMultiDragResize extends EventEmitter {
8
- core: StageCore;
9
- mask: StageMask;
2
+ import MoveableOptionsManager from './MoveableOptionsManager';
3
+ import { StageDragStatus, StageMultiDragResizeConfig } from './types';
4
+ export default class StageMultiDragResize extends MoveableOptionsManager {
10
5
  /** 画布容器 */
11
6
  container: HTMLElement;
12
7
  /** 多选:目标节点组 */
13
8
  targetList: HTMLElement[];
14
- /** 多选:目标节点在蒙层中的占位节点组 */
15
- dragElList: HTMLDivElement[];
16
9
  /** Moveable多选拖拽类实例 */
17
10
  moveableForMulti?: Moveable;
18
- /** 拖动状态 */
19
11
  dragStatus: StageDragStatus;
20
- private multiMoveableHelper?;
21
- constructor(config: StageDragResizeConfig);
12
+ private dragResizeHelper;
13
+ private getRenderDocument;
14
+ constructor(config: StageMultiDragResizeConfig);
22
15
  /**
23
16
  * 多选
24
17
  * @param els
25
18
  */
26
19
  multiSelect(els: HTMLElement[]): void;
27
- canSelect(el: HTMLElement, stop: () => boolean): Boolean;
20
+ canSelect(el: HTMLElement, selectedEl: HTMLElement | undefined): boolean;
21
+ updateMoveable(eleList?: HTMLElement[]): void;
28
22
  /**
29
23
  * 清除多选状态
30
24
  */
@@ -33,19 +27,9 @@ export default class StageMultiDragResize extends EventEmitter {
33
27
  * 销毁实例
34
28
  */
35
29
  destroy(): void;
36
- /**
37
- * 清除蒙层占位节点
38
- */
39
- destroyDragElList(): void;
40
30
  /**
41
31
  * 拖拽完成后将更新的位置信息暴露给上层业务方,业务方可以接收事件进行保存
42
32
  * @param isResize 是否进行大小缩放
43
33
  */
44
34
  private update;
45
- /**
46
- * 获取moveable options参数
47
- * @param {MoveableOptions} options
48
- * @return {MoveableOptions} moveable options参数
49
- */
50
- private getOptions;
51
35
  }
@@ -1,18 +1,25 @@
1
1
  /// <reference types="node" />
2
2
  import { EventEmitter } from 'events';
3
- import type { Runtime, RuntimeWindow, StageRenderConfig } from './types';
3
+ import { Id } from '@tmagic/schema';
4
+ import type { Point, RemoveData, Runtime, RuntimeWindow, StageRenderConfig, UpdateData } from './types';
4
5
  export default class StageRender extends EventEmitter {
5
6
  /** 组件的js、css执行的环境,直接渲染为当前window,iframe渲染则为iframe.contentWindow */
6
7
  contentWindow: RuntimeWindow | null;
7
8
  runtime: Runtime | null;
8
9
  iframe?: HTMLIFrameElement;
9
- runtimeUrl?: string;
10
- private render?;
11
- constructor({ runtimeUrl, render }: StageRenderConfig);
10
+ private runtimeUrl?;
11
+ private zoom;
12
+ private customizedRender?;
13
+ constructor({ runtimeUrl, zoom, customizedRender }: StageRenderConfig);
12
14
  getMagicApi: () => {
13
15
  onPageElUpdate: (el: HTMLElement) => boolean;
14
16
  onRuntimeReady: (runtime: Runtime) => void;
15
17
  };
18
+ add(data: UpdateData): Promise<void>;
19
+ remove(data: RemoveData): Promise<void>;
20
+ update(data: UpdateData): Promise<void>;
21
+ select(els: HTMLElement[]): Promise<void>;
22
+ setZoom(zoom?: number): void;
16
23
  /**
17
24
  * 挂载Dom节点
18
25
  * @param el 将页面挂载到该Dom节点上
@@ -20,10 +27,22 @@ export default class StageRender extends EventEmitter {
20
27
  mount(el: HTMLDivElement): Promise<void>;
21
28
  getRuntime: () => Promise<Runtime>;
22
29
  getDocument(): Document | undefined;
30
+ /**
31
+ * 通过坐标获得坐标下所有HTML元素数组
32
+ * @param point 坐标
33
+ * @returns 坐标下方所有HTML元素数组,会包含父元素直至html,元素层叠时返回顺序是从上到下
34
+ */
35
+ getElementsFromPoint(point: Point): HTMLElement[];
36
+ getTargetElement(idOrEl: Id | HTMLElement): HTMLElement;
23
37
  /**
24
38
  * 销毁实例
25
39
  */
26
40
  destroy(): void;
41
+ /**
42
+ * 在runtime中对被选中的元素进行标记,部分组件有对选中态进行特殊显示的需求
43
+ * @param el 被选中的元素
44
+ */
45
+ private flagSelectedEl;
27
46
  private loadHandler;
28
47
  private postTmagicRuntimeReady;
29
48
  }
@@ -0,0 +1,22 @@
1
+ import type { TargetElement as ShadowElement, TargetShadowConfig } from './types';
2
+ /**
3
+ * 将选中的节点修正定位后,添加一个操作节点到蒙层上
4
+ */
5
+ export default class TargetShadow {
6
+ el?: ShadowElement;
7
+ els: ShadowElement[];
8
+ private idPrefix;
9
+ private container;
10
+ private scrollLeft;
11
+ private scrollTop;
12
+ private zIndex?;
13
+ private updateDragEl?;
14
+ constructor(config: TargetShadowConfig);
15
+ update(target: ShadowElement): ShadowElement;
16
+ updateGroup(targetGroup: ShadowElement[]): ShadowElement[];
17
+ destroyEl(): void;
18
+ destroyEls(): void;
19
+ destroy(): void;
20
+ private updateEl;
21
+ private scrollHandler;
22
+ }
package/types/const.d.ts CHANGED
@@ -4,7 +4,7 @@ export declare const GHOST_EL_ID_PREFIX = "ghost_el_";
4
4
  export declare const DRAG_EL_ID_PREFIX = "drag_el_";
5
5
  /** 高亮时需要在蒙层中创建一个占位节点,该节点的id前缀 */
6
6
  export declare const HIGHLIGHT_EL_ID_PREFIX = "highlight_el_";
7
- export declare const CONTAINER_HIGHLIGHT_CLASS = "tmagic-stage-container-highlight";
7
+ export declare const CONTAINER_HIGHLIGHT_CLASS_NAME = "tmagic-stage-container-highlight";
8
8
  export declare const PAGE_CLASS = "magic-ui-page";
9
9
  /** 默认放到缩小倍数 */
10
10
  export declare const DEFAULT_ZOOM = 1;