@tmagic/stage 1.3.3 → 1.3.4

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/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.3.3",
2
+ "version": "1.3.4",
3
3
  "name": "@tmagic/stage",
4
4
  "type": "module",
5
5
  "sideEffects": [
@@ -31,9 +31,9 @@
31
31
  },
32
32
  "dependencies": {
33
33
  "@scena/guides": "^0.29.2",
34
- "@tmagic/core": "1.3.3",
35
- "@tmagic/schema": "1.3.3",
36
- "@tmagic/utils": "1.3.3",
34
+ "@tmagic/core": "1.3.4",
35
+ "@tmagic/schema": "1.3.4",
36
+ "@tmagic/utils": "1.3.4",
37
37
  "events": "^3.3.0",
38
38
  "keycon": "^1.4.0",
39
39
  "lodash-es": "^4.17.21",
@@ -377,6 +377,7 @@ export default class ActionManager extends EventEmitter {
377
377
  targetEls: this.selectedElList,
378
378
  targetElIds: this.selectedElList?.map((item) => item.id),
379
379
  isMulti,
380
+ document: this.getRenderDocument(),
380
381
  };
381
382
  return options(cfg);
382
383
  }
@@ -19,7 +19,7 @@
19
19
  import EventEmitter from 'events';
20
20
 
21
21
  import { merge } from 'lodash-es';
22
- import { MoveableOptions } from 'moveable';
22
+ import type { ElementGuidelineValueOption, MoveableOptions, MoveableRefType } from 'moveable';
23
23
 
24
24
  import { GuidesType, Mode } from './const';
25
25
  import MoveableActionsAble from './MoveableActionsAble';
@@ -88,16 +88,19 @@ export default class MoveableOptionsManager extends EventEmitter {
88
88
  /**
89
89
  * 设置有哪些元素要辅助对齐
90
90
  * @param selectedElList 选中的元素列表,需要排除在对齐元素之外
91
- * @param allElList 全部元素列表
92
91
  */
93
- protected setElementGuidelines(selectedElList: HTMLElement[], allElList: Element[]): void {
92
+ protected setElementGuidelines(selectedElList: HTMLElement[]): void {
94
93
  this.elementGuidelines.forEach((node) => {
95
94
  node.remove();
96
95
  });
97
96
  this.elementGuidelines = [];
98
97
 
98
+ // 设置选中元素的周围元素,用于选中元素跟周围元素对齐辅助
99
+ const elementGuidelines: Array<ElementGuidelineValueOption | MoveableRefType<Element>> =
100
+ this.getCustomizeOptions()?.elementGuidelines || Array.from(selectedElList[0]?.parentElement?.children || []);
101
+
99
102
  if (this.mode === Mode.ABSOLUTE) {
100
- this.container.append(this.createGuidelineElements(selectedElList, allElList));
103
+ this.container.append(this.createGuidelineElements(selectedElList, elementGuidelines));
101
104
  }
102
105
  }
103
106
 
@@ -224,13 +227,29 @@ export default class MoveableOptionsManager extends EventEmitter {
224
227
  * @param allElList 全部元素列表
225
228
  * @returns frame 辅助对齐元素集合的页面片
226
229
  */
227
- private createGuidelineElements(selectedElList: HTMLElement[], allElList: Element[]): DocumentFragment {
230
+ private createGuidelineElements(
231
+ selectedElList: HTMLElement[],
232
+ allElList: Array<ElementGuidelineValueOption | MoveableRefType<Element>>,
233
+ ): DocumentFragment {
228
234
  const frame = globalThis.document.createDocumentFragment();
229
235
 
230
- for (const node of allElList) {
231
- const { width, height } = node.getBoundingClientRect();
232
- if (this.isInElementList(node, selectedElList)) continue;
233
- const { left, top } = getOffset(node);
236
+ for (const element of allElList) {
237
+ let node: MoveableRefType<Element> =
238
+ (element as ElementGuidelineValueOption).element || (element as MoveableRefType<Element>);
239
+
240
+ if (!node || typeof node === 'string') continue;
241
+
242
+ if (typeof node === 'function') {
243
+ node = node();
244
+ }
245
+
246
+ if (this.isInElementList(node as Element, selectedElList)) continue;
247
+
248
+ const { width, height } = (node as Element).getBoundingClientRect();
249
+
250
+ if (!width || !height) continue;
251
+
252
+ const { left, top } = getOffset(node as Element);
234
253
  const elementGuideline = globalThis.document.createElement('div');
235
254
  elementGuideline.style.cssText = `position: absolute;width: ${width}px;height: ${height}px;top: ${top}px;left: ${left}px`;
236
255
  this.elementGuidelines.push(elementGuideline);
@@ -131,9 +131,7 @@ export default class StageDragResize extends MoveableOptionsManager {
131
131
  this.dragResizeHelper.updateShadowEl(el);
132
132
  this.dragResizeHelper.setMode(this.mode);
133
133
 
134
- // 设置选中元素的周围元素,用于选中元素跟周围元素对齐辅助
135
- const elementGuidelines: Element[] = Array.from(this.target?.parentElement?.children || []);
136
- this.setElementGuidelines([this.target as HTMLElement], elementGuidelines);
134
+ this.setElementGuidelines([this.target as HTMLElement]);
137
135
 
138
136
  return this.getOptions(false, {
139
137
  target: this.dragResizeHelper.getShadowEl(),
@@ -79,9 +79,7 @@ export default class StageMultiDragResize extends MoveableOptionsManager {
79
79
 
80
80
  this.dragResizeHelper.updateGroup(els);
81
81
 
82
- // 设置周围元素,用于选中元素跟周围元素的对齐辅助
83
- const elementGuidelines: Element[] = Array.from(this.targetList[0].parentElement?.children || []);
84
- this.setElementGuidelines(this.targetList, elementGuidelines);
82
+ this.setElementGuidelines(this.targetList);
85
83
 
86
84
  this.moveableForMulti?.destroy();
87
85
  this.dragResizeHelper.clear();
package/src/types.ts CHANGED
@@ -101,6 +101,7 @@ export interface CustomizeMoveableOptionsCallbackConfig {
101
101
  targetEls?: HTMLElement[];
102
102
  targetElIds?: string[];
103
103
  isMulti: boolean;
104
+ document?: Document;
104
105
  }
105
106
 
106
107
  export interface StageRenderConfig {
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import EventEmitter from 'events';
3
- import { MoveableOptions } from 'moveable';
3
+ import type { MoveableOptions } from 'moveable';
4
4
  import { GuidesType, Mode } from './const';
5
5
  import { MoveableOptionsManagerConfig } from './types';
6
6
  /**
@@ -38,9 +38,8 @@ export default class MoveableOptionsManager extends EventEmitter {
38
38
  /**
39
39
  * 设置有哪些元素要辅助对齐
40
40
  * @param selectedElList 选中的元素列表,需要排除在对齐元素之外
41
- * @param allElList 全部元素列表
42
41
  */
43
- protected setElementGuidelines(selectedElList: HTMLElement[], allElList: Element[]): void;
42
+ protected setElementGuidelines(selectedElList: HTMLElement[]): void;
44
43
  /**
45
44
  * 获取moveable参数
46
45
  * @param isMultiSelect 是否多选模式
package/types/types.d.ts CHANGED
@@ -71,6 +71,7 @@ export interface CustomizeMoveableOptionsCallbackConfig {
71
71
  targetEls?: HTMLElement[];
72
72
  targetElIds?: string[];
73
73
  isMulti: boolean;
74
+ document?: Document;
74
75
  }
75
76
  export interface StageRenderConfig {
76
77
  runtimeUrl?: string;