@tmagic/stage 1.8.0-manmanyu.9 → 1.8.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.
package/types/index.d.ts CHANGED
@@ -5,29 +5,28 @@ import Core, { Id, MApp, MContainer, MNode } from "@tmagic/core";
5
5
  import Guides, { GuidesOptions, GuidesOptions as GuidesOptions$1 } from "@scena/guides";
6
6
  import MoveableHelper from "moveable-helper";
7
7
  export * from "moveable";
8
-
9
8
  //#region temp/packages/stage/src/const.d.ts
10
9
  /** 流式布局下拖动时需要clone一个镜像节点,镜像节点的id前缀 */
11
- declare const GHOST_EL_ID_PREFIX = "ghost_el_";
10
+ export declare const GHOST_EL_ID_PREFIX = "ghost_el_";
12
11
  /** 拖动的时候需要在蒙层中创建一个占位节点,该节点的id前缀 */
13
- declare const DRAG_EL_ID_PREFIX = "drag_el_";
12
+ export declare const DRAG_EL_ID_PREFIX = "drag_el_";
14
13
  /** 高亮时需要在蒙层中创建一个占位节点,该节点的id前缀 */
15
- declare const HIGHLIGHT_EL_ID_PREFIX = "highlight_el_";
14
+ export declare const HIGHLIGHT_EL_ID_PREFIX = "highlight_el_";
16
15
  /** 闪烁提示时需要在蒙层中创建一个占位节点,该节点的id前缀 */
17
- declare const FLASH_EL_ID_PREFIX = "flash_el_";
18
- declare const CONTAINER_HIGHLIGHT_CLASS_NAME = "tmagic-stage-container-highlight";
19
- declare const PAGE_CLASS = "magic-ui-page";
16
+ export declare const FLASH_EL_ID_PREFIX = "flash_el_";
17
+ export declare const CONTAINER_HIGHLIGHT_CLASS_NAME = "tmagic-stage-container-highlight";
18
+ export declare const PAGE_CLASS = "magic-ui-page";
20
19
  /** 默认放到缩小倍数 */
21
- declare const DEFAULT_ZOOM = 1;
20
+ export declare const DEFAULT_ZOOM = 1;
22
21
  /** 参考线类型 */
23
- declare enum GuidesType {
22
+ export declare enum GuidesType {
24
23
  /** 水平 */
25
24
  HORIZONTAL = "horizontal",
26
25
  /** 垂直 */
27
26
  VERTICAL = "vertical"
28
27
  }
29
28
  /** css z-index */
30
- declare enum ZIndex {
29
+ export declare enum ZIndex {
31
30
  /** 蒙层,用于监听用户操作,需要置于顶层 */
32
31
  MASK = "99999",
33
32
  /** 选中的节点 */
@@ -37,7 +36,7 @@ declare enum ZIndex {
37
36
  HIGHLIGHT_EL = "8"
38
37
  }
39
38
  /** 鼠标按键 */
40
- declare enum MouseButton {
39
+ export declare enum MouseButton {
41
40
  /** 左键 */
42
41
  LEFT = 0,
43
42
  /** z中健 */
@@ -46,7 +45,7 @@ declare enum MouseButton {
46
45
  RIGHT = 2
47
46
  }
48
47
  /** 布局方式 */
49
- declare enum Mode {
48
+ export declare enum Mode {
50
49
  /** 绝对定位布局 */
51
50
  ABSOLUTE = "absolute",
52
51
  /** 固定定位布局 */
@@ -55,32 +54,32 @@ declare enum Mode {
55
54
  SORTABLE = "sortable"
56
55
  }
57
56
  /** 选中节点的class name */
58
- declare const SELECTED_CLASS = "tmagic-stage-selected-area";
59
- declare enum AbleActionEventType {
57
+ export declare const SELECTED_CLASS = "tmagic-stage-selected-area";
58
+ export declare enum AbleActionEventType {
60
59
  SELECT_PARENT = "select-parent",
61
60
  REMOVE = "remove",
62
61
  RERENDER = "rerender"
63
62
  }
64
63
  /** 将组件添加到容器的方式 */
65
- declare enum ContainerHighlightType {
64
+ export declare enum ContainerHighlightType {
66
65
  /** 默认方式:组件在容器上方悬停一段时间后加入 */
67
66
  DEFAULT = "default",
68
67
  /** 按住alt键,并在容器上方悬停一段时间后加入 */
69
68
  ALT = "alt"
70
69
  }
71
- declare enum RenderType {
70
+ export declare enum RenderType {
72
71
  IFRAME = "iframe",
73
72
  NATIVE = "native"
74
73
  }
75
74
  /** 选择状态 */
76
- declare enum SelectStatus {
75
+ export declare enum SelectStatus {
77
76
  /** 单选 */
78
77
  SELECT = "select",
79
78
  /** 多选 */
80
79
  MULTI_SELECT = "multiSelect"
81
80
  }
82
81
  /** 拖动状态 */
83
- declare enum StageDragStatus {
82
+ export declare enum StageDragStatus {
84
83
  /** 开始拖动 */
85
84
  START = "start",
86
85
  /** 拖动中 */
@@ -158,9 +157,9 @@ declare class DragResizeHelper {
158
157
  }
159
158
  //#endregion
160
159
  //#region temp/packages/stage/src/types.d.ts
161
- type TargetElement = HTMLElement | SVGElement;
162
- type CanSelect = (el: HTMLElement, event: MouseEvent, stop: () => boolean) => boolean | Promise<boolean>;
163
- type IsContainer = (el: HTMLElement) => boolean | Promise<boolean>;
160
+ export type TargetElement = HTMLElement | SVGElement;
161
+ export type CanSelect = (el: HTMLElement, event: MouseEvent, stop: () => boolean) => boolean | Promise<boolean>;
162
+ export type IsContainer = (el: HTMLElement) => boolean | Promise<boolean>;
164
163
  /**
165
164
  * 判断当前正在拖动的源是否可以拖入目标容器(用于画布上拖入组件时的容器高亮命中)
166
165
  * @param sourceIds 当前正在拖动的源节点 id 列表
@@ -172,21 +171,21 @@ type IsContainer = (el: HTMLElement) => boolean | Promise<boolean>;
172
171
  * - `Id`(string | number):将拖入目标重定向到该 id 对应的节点
173
172
  * - 其他(`true` / `void` / `undefined`):按命中的 targetId 正常拖入
174
173
  */
175
- type CanDropIn = (sourceIds: Id[], targetId: Id) => Id | boolean | void;
176
- type CustomizeRender = (renderer: StageCore) => Promise<HTMLElement | void> | HTMLElement | void;
177
- type CustomizeMoveableOptionsFunction = (config: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions;
174
+ export type CanDropIn = (sourceIds: Id[], targetId: Id) => Id | boolean | void;
175
+ export type CustomizeRender = (renderer: StageCore) => Promise<HTMLElement | void> | HTMLElement | void;
176
+ export type CustomizeMoveableOptionsFunction = (config: CustomizeMoveableOptionsCallbackConfig) => MoveableOptions;
178
177
  /** 业务方自定义的moveableOptions,可以是配置,也可以是回调函数 */
179
- type CustomizeMoveableOptions = CustomizeMoveableOptionsFunction | MoveableOptions;
178
+ export type CustomizeMoveableOptions = CustomizeMoveableOptionsFunction | MoveableOptions;
180
179
  /** render提供给的接口,id转成el */
181
- type GetTargetElement = (id: Id) => HTMLElement | null;
180
+ export type GetTargetElement = (id: Id) => HTMLElement | null;
182
181
  /** render提供的接口,通过坐标获得坐标下所有HTML元素数组 */
183
- type GetElementsFromPoint = (point: Point) => HTMLElement[];
184
- type GetRenderDocument = () => Document | undefined;
185
- type DelayedMarkContainer = (event: MouseEvent, exclude: Element[]) => NodeJS.Timeout | undefined;
186
- type MarkContainerEnd = () => HTMLElement | null;
187
- type GetRootContainer = () => HTMLDivElement | undefined;
188
- type UpdateDragEl = (el: TargetElement, target: TargetElement, container: HTMLElement) => void;
189
- interface StageCoreConfig {
182
+ export type GetElementsFromPoint = (point: Point) => HTMLElement[];
183
+ export type GetRenderDocument = () => Document | undefined;
184
+ export type DelayedMarkContainer = (event: MouseEvent, exclude?: Element[], isAdd?: boolean) => NodeJS.Timeout | undefined;
185
+ export type MarkContainerEnd = () => HTMLElement | null;
186
+ export type GetRootContainer = () => HTMLDivElement | undefined;
187
+ export type UpdateDragEl = (el: TargetElement, target: TargetElement, container: HTMLElement) => void;
188
+ export interface StageCoreConfig {
190
189
  /** 需要对齐的dom节点的CSS选择器字符串 */
191
190
  snapElementQuerySelector?: string;
192
191
  /** 放大倍数,默认1倍 */
@@ -201,6 +200,11 @@ interface StageCoreConfig {
201
200
  containerHighlightClassName?: string;
202
201
  containerHighlightDuration?: number;
203
202
  containerHighlightType?: ContainerHighlightType;
203
+ /**
204
+ * 是否仅在新增组件(从组件列表拖入新组件)时才启用将组件拖入容器,
205
+ * 开启后在画布中拖动已有组件不会识别容器,默认 false
206
+ */
207
+ containerHighlightAddOnly?: boolean;
204
208
  moveableOptions?: CustomizeMoveableOptions;
205
209
  /** runtime 的HTML地址,可以是一个HTTP地址,如果和编辑器不同域,需要设置跨域,也可以是一个相对或绝对路径 */
206
210
  runtimeUrl?: string;
@@ -223,11 +227,13 @@ interface StageCoreConfig {
223
227
  */
224
228
  disabledFlashTip?: boolean;
225
229
  }
226
- interface ActionManagerConfig {
230
+ export interface ActionManagerConfig {
227
231
  container: HTMLElement;
228
232
  containerHighlightClassName?: string;
229
233
  containerHighlightDuration?: number;
230
234
  containerHighlightType?: ContainerHighlightType;
235
+ /** 见 StageCoreConfig.containerHighlightAddOnly */
236
+ containerHighlightAddOnly?: boolean;
231
237
  moveableOptions?: CustomizeMoveableOptions;
232
238
  disabledDragStart?: boolean;
233
239
  disabledMultiSelect?: boolean;
@@ -246,12 +252,12 @@ interface ActionManagerConfig {
246
252
  getTargetElement: GetTargetElement;
247
253
  getElementsFromPoint: GetElementsFromPoint;
248
254
  }
249
- interface MoveableOptionsManagerConfig {
255
+ export interface MoveableOptionsManagerConfig {
250
256
  container: HTMLElement;
251
257
  moveableOptions?: MoveableOptions | (() => MoveableOptions);
252
258
  getRootContainer: GetRootContainer;
253
259
  }
254
- interface CustomizeMoveableOptionsCallbackConfig {
260
+ export interface CustomizeMoveableOptionsCallbackConfig {
255
261
  targetEl: HTMLElement | null;
256
262
  targetElId?: string;
257
263
  targetEls?: HTMLElement[];
@@ -259,49 +265,49 @@ interface CustomizeMoveableOptionsCallbackConfig {
259
265
  isMulti: boolean;
260
266
  document?: Document;
261
267
  }
262
- interface StageRenderConfig {
268
+ export interface StageRenderConfig {
263
269
  runtimeUrl?: string;
264
270
  zoom: number | undefined;
265
271
  renderType?: RenderType;
266
272
  customizedRender?: () => Promise<HTMLElement | null | void>;
267
273
  }
268
- interface StageMaskConfig {
274
+ export interface StageMaskConfig {
269
275
  core: StageCore;
270
276
  }
271
- interface StageDragResizeConfig extends MoveableOptionsManagerConfig {
277
+ export interface StageDragResizeConfig extends MoveableOptionsManagerConfig {
272
278
  dragResizeHelper: DragResizeHelper;
273
279
  disabledDragStart?: boolean;
274
280
  getRenderDocument: GetRenderDocument;
275
281
  markContainerEnd: MarkContainerEnd;
276
282
  delayedMarkContainer: DelayedMarkContainer;
277
283
  }
278
- interface StageMultiDragResizeConfig extends MoveableOptionsManagerConfig {
284
+ export interface StageMultiDragResizeConfig extends MoveableOptionsManagerConfig {
279
285
  dragResizeHelper: DragResizeHelper;
280
286
  getRenderDocument: GetRenderDocument;
281
287
  markContainerEnd: MarkContainerEnd;
282
288
  delayedMarkContainer: DelayedMarkContainer;
283
289
  }
284
- interface DragResizeHelperConfig {
290
+ export interface DragResizeHelperConfig {
285
291
  container: HTMLElement;
286
292
  updateDragEl?: UpdateDragEl;
287
293
  }
288
- type Rect = {
294
+ export type Rect = {
289
295
  width: number;
290
296
  height: number;
291
297
  } & Offset;
292
- interface Offset {
298
+ export interface Offset {
293
299
  left: number;
294
300
  top: number;
295
301
  }
296
- interface Point {
302
+ export interface Point {
297
303
  clientX: number;
298
304
  clientY: number;
299
305
  }
300
- interface GuidesEventData {
306
+ export interface GuidesEventData {
301
307
  type: GuidesType;
302
308
  guides: number[];
303
309
  }
304
- interface UpdateEventData {
310
+ export interface UpdateEventData {
305
311
  data: {
306
312
  el: HTMLElement;
307
313
  style: {
@@ -318,28 +324,30 @@ interface UpdateEventData {
318
324
  }[];
319
325
  parentEl: HTMLElement | null;
320
326
  }
321
- interface RemoveEventData {
327
+ export interface RemoveEventData {
322
328
  data: {
323
329
  el: HTMLElement;
324
330
  }[];
325
331
  }
326
- interface SortEventData {
332
+ export interface SortEventData {
327
333
  src: Id;
328
334
  dist: Id;
329
335
  root?: MApp;
330
336
  }
331
- interface UpdateData {
337
+ export interface UpdateData {
332
338
  config: MNode;
333
339
  parent?: MContainer;
334
340
  parentId?: Id;
335
341
  root: MApp;
342
+ /** 插入到父节点 items 中的目标下标;runtime 优先按此同步,避免依赖选中态推算顺序 */
343
+ index?: number;
336
344
  }
337
- interface RemoveData {
345
+ export interface RemoveData {
338
346
  id: Id;
339
347
  parentId: Id;
340
348
  root: MApp;
341
349
  }
342
- interface Runtime {
350
+ export interface Runtime {
343
351
  getApp?: () => Core | undefined;
344
352
  updateRootConfig?: (config: MApp) => void;
345
353
  updatePageId?: (id: Id) => void;
@@ -350,35 +358,35 @@ interface Runtime {
350
358
  remove?: (data: RemoveData) => void;
351
359
  [key: string]: any;
352
360
  }
353
- interface Magic {
361
+ export interface Magic {
354
362
  id: string;
355
363
  /** 当前页面的根节点变化时调用该方法,编辑器会同步该el和stage的大小,该方法由stage注入到iframe.contentWindow中 */
356
364
  onPageElUpdate: (el: HTMLElement) => void;
357
365
  onRuntimeReady: (runtime: Runtime) => void;
358
366
  }
359
- interface RuntimeWindow extends Window {
367
+ export interface RuntimeWindow extends Window {
360
368
  magic: Magic;
361
369
  }
362
- interface StageHighlightConfig {
370
+ export interface StageHighlightConfig {
363
371
  container: HTMLElement;
364
372
  updateDragEl?: UpdateDragEl;
365
373
  getRootContainer: GetRootContainer;
366
374
  }
367
- interface TargetShadowConfig {
375
+ export interface TargetShadowConfig {
368
376
  container: HTMLElement;
369
377
  zIndex?: ZIndex;
370
378
  updateDragEl?: UpdateDragEl;
371
379
  idPrefix?: string;
372
380
  }
373
- interface StageFlashHighlightConfig {
381
+ export interface StageFlashHighlightConfig {
374
382
  container: HTMLElement;
375
383
  updateDragEl?: UpdateDragEl;
376
384
  }
377
- interface RuleOptions {
385
+ export interface RuleOptions {
378
386
  guidesOptions?: Partial<GuidesOptions$1>;
379
387
  disabledRule?: boolean;
380
388
  }
381
- interface CoreEvents {
389
+ export interface CoreEvents {
382
390
  mounted: [];
383
391
  'runtime-ready': [runtime: Runtime];
384
392
  'page-el-update': [el: HTMLElement];
@@ -396,19 +404,19 @@ interface CoreEvents {
396
404
  mouseleave: [event: MouseEvent];
397
405
  'drag-start': [event: OnDragStart];
398
406
  }
399
- interface RenderEvents {
407
+ export interface RenderEvents {
400
408
  onload: [];
401
409
  'page-el-update': [el: HTMLElement];
402
410
  'runtime-ready': [runtime: Runtime];
403
411
  }
404
- interface MaskEvents {
412
+ export interface MaskEvents {
405
413
  scroll: [event: WheelEvent];
406
414
  'change-guides': [data: {
407
415
  type: GuidesType.HORIZONTAL;
408
416
  guides: number[];
409
417
  }];
410
418
  }
411
- interface ActionManagerEvents {
419
+ export interface ActionManagerEvents {
412
420
  dblclick: [event: MouseEvent];
413
421
  mousemove: [event: MouseEvent];
414
422
  mouseleave: [event: MouseEvent];
@@ -427,7 +435,7 @@ interface ActionManagerEvents {
427
435
  'multi-select': [selectedElList: HTMLElement[], event: MouseEvent];
428
436
  'get-elements-from-point': [els: HTMLElement[]];
429
437
  }
430
- interface DrEvents {
438
+ export interface DrEvents {
431
439
  'update-moveable': [];
432
440
  [AbleActionEventType.REMOVE]: [];
433
441
  [AbleActionEventType.SELECT_PARENT]: [];
@@ -436,7 +444,7 @@ interface DrEvents {
436
444
  update: [data: UpdateEventData];
437
445
  sort: [data: SortEventData];
438
446
  }
439
- interface MultiDrEvents {
447
+ export interface MultiDrEvents {
440
448
  'update-moveable': [];
441
449
  'change-to-select': [id: Id, event: MouseEvent];
442
450
  update: [data: UpdateEventData];
@@ -467,6 +475,8 @@ declare class ActionManager extends EventEmitter$1 {
467
475
  private containerHighlightDuration;
468
476
  /** 将组件加入容器的操作方式 */
469
477
  private containerHighlightType?;
478
+ /** 是否仅在新增组件时才启用将组件加入容器 */
479
+ private containerHighlightAddOnly;
470
480
  private isAltKeydown;
471
481
  private getTargetElement;
472
482
  private getElementsFromPoint;
@@ -557,9 +567,10 @@ declare class ActionManager extends EventEmitter$1 {
557
567
  * 标记的作用:1、高亮容器,给用户一个加入容器的交互感知;2、释放鼠标后,通过标记的标志找到要加入的容器
558
568
  * @param event 鼠标事件
559
569
  * @param excludeElList 计算鼠标所在容器时要排除的元素列表
570
+ * @param isAdd 当前操作是否为新增组件(从组件列表拖入),开启 containerHighlightAddOnly 时只有新增才会标记
560
571
  * @returns timeoutId,调用方在鼠标移走时要取消该timeout,阻止标记
561
572
  */
562
- delayedMarkContainer(event: MouseEvent, excludeElList?: Element[]): NodeJS.Timeout | undefined;
573
+ delayedMarkContainer(event: MouseEvent, excludeElList?: Element[], isAdd?: boolean): NodeJS.Timeout | undefined;
563
574
  getDragStatus(): StageDragStatus | undefined;
564
575
  updateMoveableOptions(): void;
565
576
  destroy(): void;
@@ -575,7 +586,9 @@ declare class ActionManager extends EventEmitter$1 {
575
586
  */
576
587
  private beforeMultiSelect;
577
588
  /**
578
- * 当前状态下能否将组件加入容器,默认是鼠标悬停一段时间加入,alt模式则是按住alt+鼠标悬停一段时间加入
589
+ * 当前状态下能否将组件加入容器,默认是鼠标悬停一段时间加入,alt模式则是按住alt+鼠标悬停一段时间加入;
590
+ * 开启containerHighlightAddOnly时,画布中拖动已有组件不能加入容器
591
+ * @param isAdd 当前操作是否为新增组件
579
592
  */
580
593
  private canAddToContainer;
581
594
  /**
@@ -693,12 +706,13 @@ declare class StageMask extends Rule {
693
706
  setMode(mode: Mode): void;
694
707
  /**
695
708
  * 初始化视窗和蒙层监听,监听元素是否在视窗区域、监听mask蒙层所在的wrapper大小变化
696
- * @description 初始化视窗和蒙层监听
709
+ * @description 初始化视窗和蒙层监听;切换到新页面 DOM 时重置滚动
697
710
  * @param page 页面Dom节点
698
711
  */
699
712
  observe(page: HTMLElement): void;
700
713
  /**
701
- * 处理页面大小变更,同步页面和mask大小
714
+ * 处理页面大小变更,同步页面和 mask 大小
715
+ * @description 仅处理当前 page 且仍挂载在文档中的 entry;非当前页、已卸载或宽高为 0 的回调会被忽略
702
716
  * @param entries ResizeObserverEntry,获取页面最新大小
703
717
  */
704
718
  pageResize(entries: ResizeObserverEntry[]): void;
@@ -713,6 +727,11 @@ declare class StageMask extends Rule {
713
727
  */
714
728
  mount(el: HTMLDivElement): void;
715
729
  setLayout(el: HTMLElement): void;
730
+ /**
731
+ * 将元素滚动到画布可视区域内
732
+ * @description 页面不可见时不做滚动:此时滚动既无视觉效果,又会记录错误的滚动偏移
733
+ * @param el 目标元素
734
+ */
716
735
  scrollIntoView(el: Element): void;
717
736
  /**
718
737
  * 销毁实例
@@ -730,6 +749,21 @@ declare class StageMask extends Rule {
730
749
  private initObserverWrapper;
731
750
  private scroll;
732
751
  private scrollTo;
752
+ /**
753
+ * 页面是否可见
754
+ * @description 页面未挂载、或画布容器被隐藏(如编辑器切到其他面板)时页面不可见;
755
+ * 蒙层与页面所在的 iframe 挂载在同一容器中,容器隐藏时页面内部元素仍可能是"可见"的,因此额外判断蒙层;
756
+ * 浏览器 tab 不可见(切到其他标签页、窗口最小化)时同样视为不可见
757
+ */
758
+ private isPageVisible;
759
+ /**
760
+ * 从当前页面同步蒙层宽高,并修正滚动偏移
761
+ */
762
+ private syncPageSize;
763
+ /**
764
+ * 应用页面尺寸到蒙层;宽高为 0 时忽略,避免切换/布局过程中把 editor-mask 置空
765
+ */
766
+ private applyPageSize;
733
767
  /**
734
768
  * 设置蒙层高度
735
769
  * @param height 高度
@@ -767,12 +801,7 @@ declare class StageRender extends EventEmitter {
767
801
  private zoom;
768
802
  private renderType;
769
803
  private customizedRender?;
770
- constructor({
771
- runtimeUrl,
772
- zoom,
773
- customizedRender,
774
- renderType
775
- }: StageRenderConfig);
804
+ constructor({ runtimeUrl, zoom, customizedRender, renderType }: StageRenderConfig);
776
805
  getMagicApi: () => {
777
806
  id: string;
778
807
  onPageElUpdate: (el: HTMLElement) => void;
@@ -827,7 +856,7 @@ declare class StageRender extends EventEmitter {
827
856
  /**
828
857
  * 负责管理画布,管理renderer、mask、actionManager三个核心类,并负责统一对外通信,包括提供接口和抛事件
829
858
  */
830
- declare class StageCore extends EventEmitter {
859
+ export default class StageCore extends EventEmitter {
831
860
  container?: HTMLDivElement;
832
861
  renderer: StageRender | null;
833
862
  mask: StageMask | null;
@@ -891,9 +920,10 @@ declare class StageCore extends EventEmitter {
891
920
  * 标记的作用:1、高亮容器,给用户一个加入容器的交互感知;2、释放鼠标后,通过标记的标志找到要加入的容器
892
921
  * @param event 鼠标事件
893
922
  * @param excludeElList 计算鼠标所在容器时要排除的元素列表
923
+ * @param isAdd 当前操作是否为新增组件(从组件列表拖入),开启 containerHighlightAddOnly 时只有新增才会标记
894
924
  * @returns timeoutId,调用方在鼠标移走时要取消该timeout,阻止标记
895
925
  */
896
- delayedMarkContainer(event: MouseEvent, excludeElList?: Element[]): NodeJS.Timeout | undefined;
926
+ delayedMarkContainer(event: MouseEvent, excludeElList?: Element[], isAdd?: boolean): NodeJS.Timeout | undefined;
897
927
  getMoveableOption<K extends keyof MoveableOptions>(key: K): MoveableOptions[K] | undefined;
898
928
  getDragStatus(): import("@tmagic/editor").StageDragStatus | undefined;
899
929
  disableMultiSelect(): void;
@@ -918,6 +948,10 @@ declare class StageCore extends EventEmitter {
918
948
  * 监听页面大小变化
919
949
  */
920
950
  private observePageResize;
951
+ /**
952
+ * page-el-update 后,若当前选中节点仍在新页面文档中且需要自动滚动,则重新触发 scrollIntoView
953
+ */
954
+ private scrollSelectedIntoViewAfterPageUpdate;
921
955
  private getActionManagerConfig;
922
956
  private initRenderEvent;
923
957
  private initMaskEvent;
@@ -1080,38 +1114,57 @@ declare class StageDragResize extends MoveableOptionsManager {
1080
1114
  }
1081
1115
  //#endregion
1082
1116
  //#region temp/packages/stage/src/util.d.ts
1083
- declare const getOffset: (el: Element) => Offset;
1084
- declare const getTargetElStyle: (el: TargetElement, zIndex?: ZIndex) => string;
1085
- declare const getAbsolutePosition: (el: HTMLElement, {
1086
- top,
1087
- left
1088
- }: Offset) => {
1117
+ export declare const getOffset: (el: Element) => Offset;
1118
+ export declare const getTargetElStyle: (el: TargetElement, zIndex?: ZIndex) => string;
1119
+ export declare const getAbsolutePosition: (el: HTMLElement, { top, left }: Offset) => {
1089
1120
  left: number;
1090
1121
  top: number;
1091
1122
  };
1092
- declare const isAbsolute: (style: {
1123
+ export declare const isAbsolute: (style: {
1093
1124
  position?: string;
1094
1125
  }) => boolean;
1095
- declare const isRelative: (style: {
1126
+ export declare const isRelative: (style: {
1096
1127
  position?: string;
1097
1128
  }) => boolean;
1098
- declare const isStatic: (style: {
1129
+ export declare const isStatic: (style: {
1099
1130
  position?: string;
1100
1131
  }) => boolean;
1101
- declare const isFixed: (style: {
1132
+ export declare const isFixed: (style: {
1102
1133
  position?: string;
1103
1134
  }) => boolean;
1104
- declare const isFixedParent: (el: Element) => boolean;
1105
- declare const getMode: (el: Element) => Mode;
1106
- declare const getScrollParent: (element: HTMLElement, includeHidden?: boolean) => HTMLElement | null;
1107
- declare const removeSelectedClassName: (doc: Document) => void;
1108
- declare const addSelectedClassName: (el: Element, doc: Document) => void;
1135
+ export declare const isFixedParent: (el: Element) => boolean;
1136
+ export declare const getMode: (el: Element) => Mode;
1137
+ export declare const getScrollParent: (element: HTMLElement, includeHidden?: boolean) => HTMLElement | null;
1138
+ /**
1139
+ * 判断文档是否可见
1140
+ * @description 浏览器 tab 切到后台、窗口最小化时文档 visibilityState 为 hidden;
1141
+ * 只将 hidden 视为不可见,避免 prerender 等中间态被误判
1142
+ * @param doc 目标文档
1143
+ */
1144
+ export declare const isDocumentVisible: (doc: Document | null | undefined) => boolean;
1145
+ /**
1146
+ * 判断元素是否可见
1147
+ * @description 元素未挂载到文档、或其自身/祖先被 display:none、visibility:hidden 隐藏时视为不可见;
1148
+ * 优先使用浏览器提供的 checkVisibility,不支持时退化为沿祖先链检查计算样式
1149
+ * @param el 目标元素
1150
+ */
1151
+ export declare const isElementVisible: (el: Element | null | undefined) => boolean;
1152
+ /**
1153
+ * 将元素滚动到指定滚动容器的可视区域内(仅垂直方向,滚动最小距离)
1154
+ * @description 与原生 scrollIntoView 不同,只滚动指定的容器自身,不会连带滚动外层祖先滚动容器,
1155
+ * 避免编辑器画布外层容器(如 stage 外层使用 transform 模拟滚动的容器)被浏览器自动滚动导致整个画布位移
1156
+ * @param el 目标元素
1157
+ * @param container 滚动容器
1158
+ */
1159
+ export declare const scrollElementIntoView: (el: Element, container: HTMLElement) => void;
1160
+ export declare const removeSelectedClassName: (doc: Document) => void;
1161
+ export declare const addSelectedClassName: (el: Element, doc: Document) => void;
1109
1162
  /**
1110
1163
  * 下移组件位置
1111
1164
  * @param {number} deltaTop 偏移量
1112
1165
  * @param {Object} detail 当前选中的组件配置
1113
1166
  */
1114
- declare const down: (deltaTop: number, target: TargetElement) => SortEventData;
1167
+ export declare const down: (deltaTop: number, target: TargetElement) => SortEventData;
1115
1168
  /**
1116
1169
  * 上移组件位置
1117
1170
  * @param {Array} brothers 处于同一容器下的所有子组件配置
@@ -1119,13 +1172,13 @@ declare const down: (deltaTop: number, target: TargetElement) => SortEventData;
1119
1172
  * @param {number} deltaTop 偏移量
1120
1173
  * @param {Object} detail 当前选中的组件配置
1121
1174
  */
1122
- declare const up: (deltaTop: number, target: TargetElement) => SortEventData;
1123
- declare const isMoveableButton: (target: Element) => boolean | undefined;
1124
- declare const getMarginValue: (el: Element) => {
1175
+ export declare const up: (deltaTop: number, target: TargetElement) => SortEventData;
1176
+ export declare const isMoveableButton: (target: Element) => boolean | undefined;
1177
+ export declare const getMarginValue: (el: Element) => {
1125
1178
  marginLeft: number;
1126
1179
  marginTop: number;
1127
1180
  };
1128
- declare const getBorderWidth: (el: Element) => {
1181
+ export declare const getBorderWidth: (el: Element) => {
1129
1182
  borderLeftWidth: number;
1130
1183
  borderRightWidth: number;
1131
1184
  borderTopWidth: number;
@@ -1133,7 +1186,7 @@ declare const getBorderWidth: (el: Element) => {
1133
1186
  };
1134
1187
  //#endregion
1135
1188
  //#region temp/packages/stage/src/MoveableActionsAble.d.ts
1136
- interface AbleCustomizedButton {
1189
+ export interface AbleCustomizedButton {
1137
1190
  props: {
1138
1191
  className?: string;
1139
1192
  onClick?(e: MouseEvent): void;
@@ -1149,4 +1202,4 @@ declare const _default: (handler: (type: AbleActionEventType) => void, customize
1149
1202
  render(moveable: MoveableManagerInterface<any, any>, React: Renderer): any;
1150
1203
  };
1151
1204
  //#endregion
1152
- export { AbleActionEventType, AbleCustomizedButton, ActionManagerConfig, ActionManagerEvents, CONTAINER_HIGHLIGHT_CLASS_NAME, CanDropIn, CanSelect, ContainerHighlightType, CoreEvents, CustomizeMoveableOptions, CustomizeMoveableOptionsCallbackConfig, CustomizeMoveableOptionsFunction, CustomizeRender, DEFAULT_ZOOM, DRAG_EL_ID_PREFIX, DelayedMarkContainer, DrEvents, DragResizeHelperConfig, FLASH_EL_ID_PREFIX, GHOST_EL_ID_PREFIX, GetElementsFromPoint, GetRenderDocument, GetRootContainer, GetTargetElement, GuidesEventData, type GuidesOptions, GuidesType, HIGHLIGHT_EL_ID_PREFIX, IsContainer, Magic, MarkContainerEnd, MaskEvents, Mode, MouseButton, _default as MoveableActionsAble, MoveableOptionsManagerConfig, MultiDrEvents, Offset, PAGE_CLASS, Point, Rect, RemoveData, RemoveEventData, RenderEvents, RenderType, RuleOptions, Runtime, RuntimeWindow, SELECTED_CLASS, SelectStatus, SortEventData, StageCoreConfig, StageDragResize, StageDragResizeConfig, StageDragStatus, StageFlashHighlightConfig, StageHighlightConfig, StageMask, StageMaskConfig, StageMultiDragResizeConfig, StageRender, StageRenderConfig, TargetElement, TargetShadowConfig, UpdateData, UpdateDragEl, UpdateEventData, ZIndex, addSelectedClassName, StageCore as default, down, getAbsolutePosition, getBorderWidth, getMarginValue, getMode, getOffset, getScrollParent, getTargetElStyle, isAbsolute, isFixed, isFixedParent, isMoveableButton, isRelative, isStatic, removeSelectedClassName, up };
1205
+ export { type GuidesOptions, _default as MoveableActionsAble, StageDragResize, StageMask, StageRender };