@galacean/effects-plugin-editor-gizmo 2.10.3 → 2.11.0-alpha.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 (125) hide show
  1. package/README.md +37 -5
  2. package/dist/2d/configs/builtin-configs.d.ts +14 -0
  3. package/dist/2d/configs/config-definition.d.ts +40 -0
  4. package/dist/2d/configs/config-manager.d.ts +52 -0
  5. package/dist/2d/configs/index.d.ts +6 -0
  6. package/dist/2d/configs/loading-config.d.ts +3 -0
  7. package/dist/2d/configs/types.d.ts +321 -0
  8. package/dist/2d/cursor-icons.d.ts +8 -0
  9. package/dist/2d/cursor.d.ts +36 -0
  10. package/dist/2d/drag-threshold.d.ts +13 -0
  11. package/dist/2d/drawing.d.ts +148 -0
  12. package/dist/2d/frame/frame-assisted-layout.d.ts +115 -0
  13. package/dist/2d/frame/frame-auto-layout.d.ts +47 -0
  14. package/dist/2d/frame/frame-manager.d.ts +169 -0
  15. package/dist/2d/frame/frame-resize.d.ts +13 -0
  16. package/dist/2d/frame/index.d.ts +5 -0
  17. package/dist/2d/frame/layout-calculations.d.ts +109 -0
  18. package/dist/2d/frame/types.d.ts +41 -0
  19. package/dist/2d/gesture-handler.d.ts +253 -0
  20. package/dist/2d/gizmo-action.d.ts +159 -0
  21. package/dist/2d/gizmo-manager.d.ts +105 -0
  22. package/dist/2d/gizmo-owner.d.ts +65 -0
  23. package/dist/2d/gizmo-tool.d.ts +15 -0
  24. package/dist/2d/gizmo-tools/hand-gizmo-tool.d.ts +4 -0
  25. package/dist/2d/gizmo-tools/image-cut-gizmo-tool.d.ts +7 -0
  26. package/dist/2d/gizmo-tools/image-expand-gizmo-tool.d.ts +7 -0
  27. package/dist/2d/gizmo-tools/index.d.ts +7 -0
  28. package/dist/2d/gizmo-tools/item-create-gizmo-tool.d.ts +10 -0
  29. package/dist/2d/gizmo-tools/mask-gizmo-tool.d.ts +7 -0
  30. package/dist/2d/gizmo-tools/move-gizmo-tool.d.ts +6 -0
  31. package/dist/2d/gizmo-tools/sprite-text-edit-gizmo-tool.d.ts +7 -0
  32. package/dist/2d/gizmo-type.d.ts +37 -0
  33. package/dist/2d/gizmo.d.ts +60 -0
  34. package/dist/2d/gizmos/box-selection-gizmo.d.ts +67 -0
  35. package/dist/2d/gizmos/change-selection-gizmo.d.ts +45 -0
  36. package/dist/2d/gizmos/click-drag-multiplex-gizmo.d.ts +95 -0
  37. package/dist/2d/gizmos/corner-rotation-gizmo.d.ts +101 -0
  38. package/dist/2d/gizmos/enter-edit-mode-gizmo.d.ts +11 -0
  39. package/dist/2d/gizmos/hand-gizmo.d.ts +67 -0
  40. package/dist/2d/gizmos/icon-gizmo.d.ts +107 -0
  41. package/dist/2d/gizmos/image-cut-gizmo.d.ts +140 -0
  42. package/dist/2d/gizmos/image-expand-gizmo.d.ts +135 -0
  43. package/dist/2d/gizmos/image-interaction.d.ts +40 -0
  44. package/dist/2d/gizmos/item-create-gizmo.d.ts +146 -0
  45. package/dist/2d/gizmos/leave-effects-edit-gizmo.d.ts +11 -0
  46. package/dist/2d/gizmos/leave-text-edit-gizmo.d.ts +11 -0
  47. package/dist/2d/gizmos/loading-gizmo.d.ts +110 -0
  48. package/dist/2d/gizmos/loading-manager.d.ts +74 -0
  49. package/dist/2d/gizmos/mask-gizmo.d.ts +153 -0
  50. package/dist/2d/gizmos/move-selection-gizmo.d.ts +64 -0
  51. package/dist/2d/gizmos/resize-selection-gizmo/anchored-resize.d.ts +40 -0
  52. package/dist/2d/gizmos/resize-selection-gizmo/index.d.ts +2 -0
  53. package/dist/2d/gizmos/resize-selection-gizmo/resize-selection-gizmo.d.ts +364 -0
  54. package/dist/2d/gizmos/resize-selection-gizmo/transform-types.d.ts +27 -0
  55. package/dist/2d/gizmos/select-text-gizmo.d.ts +77 -0
  56. package/dist/2d/gizmos/sprite-text-edit-gizmo.d.ts +149 -0
  57. package/dist/2d/gizmos/text-gizmo.d.ts +65 -0
  58. package/dist/2d/gizmos/viewport-overlay-gizmo.d.ts +66 -0
  59. package/dist/2d/index.d.ts +44 -0
  60. package/dist/2d/items/default-vfx-items.d.ts +45 -0
  61. package/dist/2d/items/index.d.ts +6 -0
  62. package/dist/2d/items/item-geometry.d.ts +69 -0
  63. package/dist/2d/items/item-hierarchy.d.ts +39 -0
  64. package/dist/2d/items/item-predicates.d.ts +31 -0
  65. package/dist/2d/items/media-controls.d.ts +39 -0
  66. package/dist/2d/items/vfx-item-factory.d.ts +13 -0
  67. package/dist/2d/math/core.d.ts +26 -0
  68. package/dist/2d/math/geometry.d.ts +83 -0
  69. package/dist/2d/math/index.d.ts +4 -0
  70. package/dist/2d/math/ray-caster.d.ts +56 -0
  71. package/dist/2d/math/utils.d.ts +6 -0
  72. package/dist/2d/modes/default-selection-mode.d.ts +19 -0
  73. package/dist/2d/modes/edit-mode.d.ts +18 -0
  74. package/dist/2d/modes/effects-edit-mode.d.ts +34 -0
  75. package/dist/2d/modes/index.d.ts +4 -0
  76. package/dist/2d/modes/text-edit-mode.d.ts +34 -0
  77. package/dist/2d/selection/create-selection-interaction-gizmo.d.ts +14 -0
  78. package/dist/2d/selection/index.d.ts +3 -0
  79. package/dist/2d/selection/selection.d.ts +338 -0
  80. package/dist/2d/selection/snap-manager.d.ts +130 -0
  81. package/dist/2d/text/index.d.ts +2 -0
  82. package/dist/2d/text/text-caret-mapper.d.ts +61 -0
  83. package/dist/2d/text/text-edit-session.d.ts +169 -0
  84. package/dist/2d/viewport/coordinates.d.ts +89 -0
  85. package/dist/2d/viewport/gizmo-viewport.d.ts +108 -0
  86. package/dist/2d/viewport/index.d.ts +6 -0
  87. package/dist/2d/viewport/types.d.ts +11 -0
  88. package/dist/2d/viewport/viewport-navigation-controller.d.ts +110 -0
  89. package/dist/2d/viewport/viewport-operations.d.ts +15 -0
  90. package/dist/2d/viewport/viewport-range.d.ts +9 -0
  91. package/dist/2d/viewport/viewport-utils.d.ts +32 -0
  92. package/dist/{gizmo-component.d.ts → 3d/gizmo-component.d.ts} +3 -5
  93. package/dist/3d/index.d.ts +4 -0
  94. package/dist/index.d.ts +2 -5
  95. package/dist/index.js +15030 -171
  96. package/dist/index.js.map +1 -1
  97. package/dist/index.min.js +2 -2
  98. package/dist/index.min.js.map +1 -1
  99. package/dist/index.mjs +14871 -173
  100. package/dist/index.mjs.map +1 -1
  101. package/package.json +9 -3
  102. /package/dist/{constants.d.ts → 3d/constants.d.ts} +0 -0
  103. /package/dist/{define.d.ts → 3d/define.d.ts} +0 -0
  104. /package/dist/{geometry → 3d/geometry}/box.d.ts +0 -0
  105. /package/dist/{geometry → 3d/geometry}/cone.d.ts +0 -0
  106. /package/dist/{geometry → 3d/geometry}/cylinder.d.ts +0 -0
  107. /package/dist/{geometry → 3d/geometry}/direction-light.d.ts +0 -0
  108. /package/dist/{geometry → 3d/geometry}/floor-line-edge.d.ts +0 -0
  109. /package/dist/{geometry → 3d/geometry}/floor-line.d.ts +0 -0
  110. /package/dist/{geometry → 3d/geometry}/frustum.d.ts +0 -0
  111. /package/dist/{geometry → 3d/geometry}/geometry.d.ts +0 -0
  112. /package/dist/{geometry → 3d/geometry}/index.d.ts +0 -0
  113. /package/dist/{geometry → 3d/geometry}/plane.d.ts +0 -0
  114. /package/dist/{geometry → 3d/geometry}/point-light.d.ts +0 -0
  115. /package/dist/{geometry → 3d/geometry}/sphere.d.ts +0 -0
  116. /package/dist/{geometry → 3d/geometry}/spot-light.d.ts +0 -0
  117. /package/dist/{geometry → 3d/geometry}/torus.d.ts +0 -0
  118. /package/dist/{gizmo-loader.d.ts → 3d/gizmo-loader.d.ts} +0 -0
  119. /package/dist/{gizmo-vfx-item.d.ts → 3d/gizmo-vfx-item.d.ts} +0 -0
  120. /package/dist/{math-utils.d.ts → 3d/math-utils.d.ts} +0 -0
  121. /package/dist/{mesh.d.ts → 3d/mesh.d.ts} +0 -0
  122. /package/dist/{raycast.d.ts → 3d/raycast.d.ts} +0 -0
  123. /package/dist/{shape.d.ts → 3d/shape.d.ts} +0 -0
  124. /package/dist/{util.d.ts → 3d/util.d.ts} +0 -0
  125. /package/dist/{wireframe.d.ts → 3d/wireframe.d.ts} +0 -0
@@ -0,0 +1,148 @@
1
+ import type { Control } from '@galacean/effects-plugin-gui';
2
+ import { type Box2 } from '@galacean/effects-math/es/extension/index';
3
+ import type { Vector2 } from './math';
4
+ import { Color } from './math';
5
+ /** 信息标签默认字号。 */
6
+ export declare const INFO_TEXT_FONT_SIZE = 14;
7
+ /** 信息标签默认字体。 */
8
+ export declare const INFO_TEXT_FONT_FAMILY = "sans-serif";
9
+ /** effects Control 字符 atlas 的固定单边留白。 */
10
+ export declare const CONTROL_TEXT_GLYPH_PADDING = 4;
11
+ /** 用于测量字体高度的代表字符。 */
12
+ export declare const METRICS_STRING = "|\u00C9q\u00C5";
13
+ /** 用于测量字体基线的字符。 */
14
+ export declare const BASELINE_SYMBOL = "M";
15
+ /**
16
+ * 将十六进制色值 + alpha 转为 effects Color(带全局缓存)。
17
+ * @param hex 0xRRGGBB 颜色
18
+ * @param alpha 透明度 0..1
19
+ * @returns effects Color
20
+ */
21
+ export declare function toColor(hex: number, alpha?: number): Color;
22
+ /** 文本宽度和可见字形边界。 */
23
+ export type MeasuredTextMetrics = {
24
+ /** 文本宽度。 */
25
+ width: number;
26
+ /** 基线到可见字形顶部的距离。 */
27
+ actualBoundingBoxAscent: number;
28
+ /** 基线到可见字形底部的距离。 */
29
+ actualBoundingBoxDescent: number;
30
+ };
31
+ /**
32
+ * 测量文本的宽度与可见字形边界。
33
+ * @param text 文本内容
34
+ * @param fontSize 字号
35
+ * @param fontFamily 字体
36
+ * @param fontWeight 字重
37
+ * @param fontStyle 字体样式
38
+ * @returns 文本测量结果
39
+ */
40
+ export declare function measureTextMetrics(text: string, fontSize?: number, fontFamily?: string, fontWeight?: string, fontStyle?: string): MeasuredTextMetrics;
41
+ /**
42
+ * 计算 effects Control.drawText 实际使用的 atlas cell 高度。
43
+ * @param fontSize 字号
44
+ * @param fontFamily 字体
45
+ * @param fontWeight 字重
46
+ * @param fontStyle 字体样式
47
+ * @param resolution 渲染分辨率
48
+ * @returns 字符图集单元格高度
49
+ */
50
+ export declare function measureControlTextCellHeight(fontSize?: number, fontFamily?: string, fontWeight?: string, fontStyle?: string, resolution?: number): number;
51
+ /**
52
+ * 测量文本宽度(逻辑像素),用于信息标签的溢出判断与右对齐定位。
53
+ * @param text 文本内容
54
+ * @param fontSize 字号
55
+ * @param fontFamily 字体
56
+ * @param fontWeight 字重
57
+ * @returns 文本宽度
58
+ */
59
+ export declare function measureTextWidth(text: string, fontSize?: number, fontFamily?: string, fontWeight?: string): number;
60
+ /**
61
+ * 单行文本截断:逐字符累加,超出可用宽度时把最后两个字符替换为省略号。
62
+ * @param text 文本内容
63
+ * @param maxWidth 可用宽度
64
+ * @param fontSize 字号
65
+ * @param fontFamily 字体
66
+ * @returns 截断后的文本
67
+ */
68
+ export declare function truncateText(text: string, maxWidth: number, fontSize?: number, fontFamily?: string): string;
69
+ /**
70
+ * 多行逐字符折行:行宽超出 maxWidth 时换行;行数达到 maxLines 时末行用省略号收尾。
71
+ * @param text 文本内容
72
+ * @param maxWidth 单行可用宽度
73
+ * @param maxLines 最大行数
74
+ * @param fontSize 字号
75
+ * @param fontFamily 字体
76
+ * @returns 折行后的文本行数组
77
+ */
78
+ export declare function wrapText(text: string, maxWidth: number, maxLines: number, fontSize?: number, fontFamily?: string): string[];
79
+ /**
80
+ * 绘制由 4 个角点构成的(可能非正交的)包围盒边框。
81
+ * @param control 绘制控制器
82
+ * @param corners 4 个角点(视图坐标,Y 向下)
83
+ * @param color 边框颜色
84
+ * @param width 线宽
85
+ */
86
+ export declare function drawCorners(control: Control, corners: Vector2[], color: Color, width: number): void;
87
+ /**
88
+ * 绘制虚线包围盒,并在相邻边之间保持连续虚线相位。
89
+ * @param control 绘制控制器
90
+ * @param corners 四个视图角点
91
+ * @param color 虚线颜色
92
+ * @param width 线宽
93
+ * @param dashLength 实线段长度
94
+ * @param gapLength 间隔长度
95
+ */
96
+ export declare function drawDashedCorners(control: Control, corners: Vector2[], color: Color, width: number, dashLength: number, gapLength: number): void;
97
+ /**
98
+ * 绘制包围盒边框(沿 4 个角点连边)。
99
+ * @param control 绘制控制器
100
+ * @param box 包围盒(视图坐标,Y 向下)
101
+ * @param color 边框颜色
102
+ * @param width 线宽
103
+ */
104
+ export declare function drawBox(control: Control, box: Box2, color: Color, width: number): void;
105
+ /**
106
+ * 填充轴对齐包围盒(实心矩形)。
107
+ * @param control 绘制控制器
108
+ * @param box 包围盒(视图坐标,Y 向下)
109
+ * @param color 填充颜色
110
+ */
111
+ export declare function fillBox(control: Control, box: Box2, color: Color): void;
112
+ /**
113
+ * 用两个三角形填充 Box2 四角区域。
114
+ * @param control 绘制控件
115
+ * @param corners Box2 四角快照
116
+ * @param color 填充颜色
117
+ */
118
+ export declare function fillBoxByCorners(control: Control, corners: Vector2[], color: Color): void;
119
+ /**
120
+ * 构造沿局部轴展开的旋转矩形角点。
121
+ * @param center 矩形中心(视图坐标)
122
+ * @param xAxis 局部 X 轴单位向量(视图坐标,宽方向)
123
+ * @param yAxis 局部 Y 轴单位向量(视图坐标,高方向)
124
+ * @param halfWidth 半宽(沿 xAxis,视图像素)
125
+ * @param halfHeight 半高(沿 yAxis,视图像素)
126
+ * @returns 4 个角点(视图坐标,环绕顺序)
127
+ */
128
+ export declare function getRotatedBoxCorners(center: Vector2, xAxis: Vector2, yAxis: Vector2, halfWidth: number, halfHeight: number): Vector2[];
129
+ /**
130
+ * 填充沿局部轴展开的旋转矩形。
131
+ * @param control 绘制控制器
132
+ * @param center 矩形中心(视图坐标)
133
+ * @param xAxis 局部 X 轴单位向量(视图坐标,宽方向)
134
+ * @param yAxis 局部 Y 轴单位向量(视图坐标,高方向)
135
+ * @param width 宽(沿 xAxis,视图像素)
136
+ * @param height 高(沿 yAxis,视图像素)
137
+ * @param color 填充颜色
138
+ */
139
+ export declare function fillRotatedRect(control: Control, center: Vector2, xAxis: Vector2, yAxis: Vector2, width: number, height: number, color: Color): void;
140
+ /**
141
+ * 在由锚点和两个基向量定义的局部坐标系内执行绘制。
142
+ * @param control 绘制控制器
143
+ * @param anchor Control 绘制空间锚点(局部原点)
144
+ * @param ex 局部 X 轴基向量(单位向量)
145
+ * @param ey 局部 Y 轴基向量(单位向量)
146
+ * @param drawFn 在局部坐标系内执行的绘制
147
+ */
148
+ export declare function drawWithBoxTransform(control: Control, anchor: Vector2, ex: Vector2, ey: Vector2, drawFn: () => void): void;
@@ -0,0 +1,115 @@
1
+ import { type VFXItem } from '@galacean/effects';
2
+ import type { Control } from '@galacean/effects-plugin-gui';
3
+ import type { GizmoOwner } from '../gizmo-owner';
4
+ import { Vector2 } from '../math';
5
+ /** 选区拖拽产生的层级位置变更。 */
6
+ export type SelectionPlacementChange = {
7
+ /** 移入画板。 */
8
+ type: 'moveIn';
9
+ /** 待移入元素 ID。 */
10
+ itemIds: string[];
11
+ /** 目标画板 ID。 */
12
+ targetFrameId: string;
13
+ } | {
14
+ /** 移出画板。 */
15
+ type: 'moveOut';
16
+ /** 待移出元素 ID。 */
17
+ itemIds: string[];
18
+ /** 原画板 ID。 */
19
+ originalFrameId: string;
20
+ } | {
21
+ /** 子元素脱离组合。 */
22
+ type: 'detachGroupChildren';
23
+ /** 原组合 ID。 */
24
+ groupId: string;
25
+ /** 待脱离的子元素 ID。 */
26
+ itemIds: string[];
27
+ /** 原画板 ID。 */
28
+ originalFrameId: string;
29
+ };
30
+ /** 自动布局重排的起止位置。 */
31
+ export type AutoLayoutChangeInfo = {
32
+ /** 画板 ID。 */
33
+ frameId: string;
34
+ /** 被拖拽元素 ID。 */
35
+ draggedItemId: string;
36
+ /** 原行号。 */
37
+ fromRow: number;
38
+ /** 原列号。 */
39
+ fromColumn: number;
40
+ /** 目标行号。 */
41
+ toRow: number;
42
+ /** 目标列号。 */
43
+ toColumn: number;
44
+ };
45
+ /** 辅助布局交互的提交结果。 */
46
+ export type AssistedLayoutFinishResult = {
47
+ /** 层级位置变更。 */
48
+ placementChanges: SelectionPlacementChange[];
49
+ /** 自动布局重排信息。 */
50
+ autoLayoutChange?: AutoLayoutChangeInfo;
51
+ };
52
+ /** 计算选区拖拽期间的画板归属、自动布局位置和视觉提示。 */
53
+ export declare class AssistedLayout {
54
+ private readonly owner;
55
+ private readonly engine;
56
+ private selectedItems;
57
+ private readonly selectedFrameIds;
58
+ private readonly currentFrameIds;
59
+ private readonly pendingGroupDetaches;
60
+ private targetFrameId;
61
+ private autoLayoutIndicator;
62
+ private autoLayoutDragOriginalPosition;
63
+ private autoLayoutDragFrameId;
64
+ private autoLayoutDragItemId;
65
+ private pendingLayoutPosition;
66
+ /**
67
+ * @param owner Gizmo 宿主
68
+ */
69
+ constructor(owner: GizmoOwner);
70
+ /**
71
+ * 开始辅助布局会话并记录元素原画板。
72
+ * @param selectedItems 当前选中元素
73
+ */
74
+ begin(selectedItems: readonly VFXItem[]): void;
75
+ /**
76
+ * 根据当前指针计算元素移入或移出画板的变更。
77
+ * @param pointer 当前指针视图坐标
78
+ * @returns 本帧需要应用的层级位置变更
79
+ */
80
+ resolveReparent(pointer: Vector2): SelectionPlacementChange[];
81
+ /**
82
+ * 更新自动布局目标位置和插入指示器。
83
+ * @param pointer 当前指针视图坐标
84
+ */
85
+ updateAutoLayout(pointer: Vector2): void;
86
+ /** @returns 当前会话需要提交的层级和自动布局变更。 */
87
+ finish(): AssistedLayoutFinishResult;
88
+ /**
89
+ * 绘制目标画板和自动布局插入指示器。
90
+ * @param control 绘制控制器
91
+ */
92
+ draw(control: Control): void;
93
+ /** 取消会话并清空全部辅助布局状态。 */
94
+ cancel(): void;
95
+ /**
96
+ * 计算单个元素相对画板的层级位置变更。
97
+ * @param item 被拖拽元素
98
+ * @param pointer 当前指针视图坐标
99
+ * @param frameInfos 当前画板视图信息
100
+ * @param containerSize 画布容器尺寸
101
+ * @returns 目标画板和可选的层级位置变更
102
+ */
103
+ private resolveItemReparent;
104
+ /** 清空自动布局指示器和待提交位置。 */
105
+ private clearAutoLayoutVisualState;
106
+ /** 清空自动布局会话状态。 */
107
+ private clearAutoLayoutState;
108
+ /**
109
+ * 为没有参考元素的位置创建画板边缘指示线。
110
+ * @param frameBox 画板视图包围盒
111
+ * @param layoutPosition 目标行列位置
112
+ * @returns 插入指示线
113
+ */
114
+ private createFallbackIndicatorLine;
115
+ }
@@ -0,0 +1,47 @@
1
+ import type { AutoLayoutConfig } from './types';
2
+ import type { Box2 } from '@galacean/effects-math/es/extension/index';
3
+ /** 参与画板自动布局的元素。 */
4
+ export type FrameLayoutItem = {
5
+ /** 元素 ID。 */
6
+ id: string;
7
+ /** 元素包围盒。 */
8
+ box: Box2;
9
+ /** 已指定的行号。 */
10
+ row?: number;
11
+ /** 已指定的列号。 */
12
+ column?: number;
13
+ };
14
+ /** 自动布局后的元素位置。 */
15
+ export type FrameLayoutResultItem = {
16
+ /** 元素 ID。 */
17
+ id: string;
18
+ /** 相对画板左上角的中心位置。 */
19
+ position: [number, number];
20
+ /** 行号。 */
21
+ row: number;
22
+ /** 列号。 */
23
+ column: number;
24
+ };
25
+ /** 画板自动布局选项。 */
26
+ export type FrameAutoLayoutOptions = {
27
+ /** 画板内边距。 */
28
+ padding?: number;
29
+ /** 元素间距。 */
30
+ gap?: number;
31
+ /** 行宽和行数约束。 */
32
+ config?: AutoLayoutConfig;
33
+ };
34
+ /** 画板自动布局结果。 */
35
+ export type FrameAutoLayoutResult = {
36
+ /** 布局后的元素。 */
37
+ items: FrameLayoutResultItem[];
38
+ /** 布局所需的画板尺寸。 */
39
+ size: [number, number];
40
+ };
41
+ /**
42
+ * 计算画板内元素的自动布局和画板尺寸。
43
+ * @param items 待布局元素
44
+ * @param options 布局间距与行约束
45
+ * @returns 自动布局结果
46
+ */
47
+ export declare function computeFrameAutoLayout(items: FrameLayoutItem[], options?: FrameAutoLayoutOptions): FrameAutoLayoutResult;
@@ -0,0 +1,169 @@
1
+ import type { Engine } from '@galacean/effects';
2
+ import { type Vector2 } from '../math';
3
+ import { FrameLayoutMode, type AutoLayoutConfig, type FrameInfo, type LayoutInfo } from './types';
4
+ import { type FrameAutoLayoutOptions, type FrameAutoLayoutResult, type FrameLayoutItem } from './frame-auto-layout';
5
+ /** 画板运行时布局数据。 */
6
+ export type FrameRecord = {
7
+ /** 画板元素实例 ID。 */
8
+ id: string;
9
+ /** 布局模式。 */
10
+ layoutMode: FrameLayoutMode;
11
+ /** 子元素实例 ID。 */
12
+ children: string[];
13
+ /** 自动布局约束。 */
14
+ autoLayoutConfig?: AutoLayoutConfig;
15
+ /** 子元素布局信息。 */
16
+ layoutInfos: Record<string, LayoutInfo>;
17
+ };
18
+ /** 新建或更新画板数据的输入。 */
19
+ export type FrameRecordInput = {
20
+ /** 画板元素实例 ID。 */
21
+ id: string;
22
+ /** 布局模式。 */
23
+ layoutMode?: FrameLayoutMode;
24
+ /** 子元素实例 ID。 */
25
+ children?: readonly string[];
26
+ /** 自动布局约束。 */
27
+ autoLayoutConfig?: AutoLayoutConfig;
28
+ /** 子元素布局信息。 */
29
+ layoutInfos?: Readonly<Record<string, LayoutInfo>>;
30
+ };
31
+ /** 管理画板布局数据及其视图投影。 */
32
+ export declare class FrameManager {
33
+ private readonly records;
34
+ private readonly boxes;
35
+ private readonly engine;
36
+ /**
37
+ * @param engine 用于更新画板投影的 Effects 引擎
38
+ */
39
+ constructor(engine: Engine);
40
+ /**
41
+ * 新建或覆盖画板数据。
42
+ * @param input 画板数据
43
+ * @returns 保存后的画板记录
44
+ */
45
+ upsertFrame(input: FrameRecordInput): FrameRecord;
46
+ /**
47
+ * 获取画板记录,不存在时创建。
48
+ * @param input 画板数据
49
+ * @returns 已存在或新建的画板记录
50
+ */
51
+ ensureFrame(input: FrameRecordInput): FrameRecord;
52
+ /**
53
+ * 删除画板记录和投影。
54
+ * @param id 画板 ID
55
+ * @returns 是否删除了画板记录
56
+ */
57
+ deleteFrame(id: string): boolean;
58
+ /** 清空全部画板数据和投影。 */
59
+ clear(): void;
60
+ /**
61
+ * 使用输入列表重建画板数据。
62
+ * @param records 画板数据列表
63
+ */
64
+ hydrate(records: readonly FrameRecordInput[]): void;
65
+ /** @returns 全部画板数据的深拷贝快照。 */
66
+ snapshot(): FrameRecord[];
67
+ /**
68
+ * 获取指定画板数据。
69
+ * @param id 画板 ID
70
+ * @returns 画板数据;不存在时返回 undefined
71
+ */
72
+ getFrame(id: string): Readonly<FrameRecord> | undefined;
73
+ /** @returns 全部画板数据。 */
74
+ getFrames(): readonly Readonly<FrameRecord>[];
75
+ /**
76
+ * 设置画板布局模式。
77
+ * @param id 画板 ID
78
+ * @param layoutMode 布局模式
79
+ */
80
+ setLayoutMode(id: string, layoutMode: FrameLayoutMode): void;
81
+ /**
82
+ * 替换画板子元素列表。
83
+ * @param id 画板 ID
84
+ * @param children 子元素 ID
85
+ */
86
+ setChildren(id: string, children: readonly string[]): void;
87
+ /**
88
+ * 向画板添加子元素。
89
+ * @param id 画板 ID
90
+ * @param childId 子元素 ID
91
+ * @returns 是否添加成功
92
+ */
93
+ addChild(id: string, childId: string): boolean;
94
+ /**
95
+ * 从画板移除子元素及其布局信息。
96
+ * @param id 画板 ID
97
+ * @param childId 子元素 ID
98
+ * @returns 是否移除成功
99
+ */
100
+ removeChild(id: string, childId: string): boolean;
101
+ /**
102
+ * 替换画板的全部子元素布局信息。
103
+ * @param id 画板 ID
104
+ * @param layoutInfos 子元素布局信息
105
+ */
106
+ setLayoutInfos(id: string, layoutInfos: Readonly<Record<string, LayoutInfo>> | undefined): void;
107
+ /**
108
+ * 设置单个子元素的布局信息。
109
+ * @param id 画板 ID
110
+ * @param childId 子元素 ID
111
+ * @param layoutInfo 布局信息
112
+ */
113
+ setChildLayoutInfo(id: string, childId: string, layoutInfo: LayoutInfo): void;
114
+ /**
115
+ * 设置画板自动布局约束。
116
+ * @param id 画板 ID
117
+ * @param config 自动布局约束
118
+ */
119
+ setAutoLayoutConfig(id: string, config: AutoLayoutConfig | undefined): void;
120
+ /**
121
+ * 使用画板当前布局信息计算自动布局。
122
+ * @param frameId 画板 ID
123
+ * @param items 待布局元素
124
+ * @param options 内边距和元素间距
125
+ * @returns 自动布局结果;画板不存在时返回 undefined
126
+ */
127
+ computeAutoLayout(frameId: string, items: readonly Pick<FrameLayoutItem, 'id' | 'box'>[], options?: Omit<FrameAutoLayoutOptions, 'config'>): FrameAutoLayoutResult | undefined;
128
+ /**
129
+ * 计算元素重排后的完整布局信息。
130
+ * @param frameId 画板 ID
131
+ * @param draggedItemId 被拖拽元素 ID
132
+ * @param fromRow 原行号
133
+ * @param fromColumn 原列号
134
+ * @param toRow 目标行号
135
+ * @param toColumn 目标列号
136
+ * @returns 重排后的布局信息;元素不属于画板时返回 undefined
137
+ */
138
+ computeLayoutInfosAfterReorder(frameId: string, draggedItemId: string, fromRow: number, fromColumn: number, toRow: number, toColumn: number): Record<string, LayoutInfo> | undefined;
139
+ /** 在每帧更新时同步画板投影。 */
140
+ onUpdate(): void;
141
+ /** 更新全部画板的视图包围盒。 */
142
+ updateViewBoxes(): void;
143
+ /** @returns 带当前视图包围盒的全部画板信息。 */
144
+ getViewInfos(): FrameInfo[];
145
+ /**
146
+ * 获取指定画板的视图信息。
147
+ * @param id 画板 ID
148
+ * @returns 画板视图信息;不存在时返回 undefined
149
+ */
150
+ getViewInfo(id: string): FrameInfo | undefined;
151
+ /**
152
+ * 查找元素所属的画板。
153
+ * @param itemId 元素 ID
154
+ * @returns 父画板记录;不存在时返回 undefined
155
+ */
156
+ getParentFrame(itemId: string): Readonly<FrameRecord> | undefined;
157
+ /**
158
+ * 查找包含指定视图坐标的画板。
159
+ * @param point 视图坐标
160
+ * @returns 命中的画板视图信息
161
+ */
162
+ findFrameAt(point: Vector2): FrameInfo | undefined;
163
+ /**
164
+ * 将画板记录转换为视图信息。
165
+ * @param record 画板记录
166
+ * @returns 画板视图信息
167
+ */
168
+ private toViewInfo;
169
+ }
@@ -0,0 +1,13 @@
1
+ import type { VFXItem } from '@galacean/effects';
2
+ import { type Vector2, Vector3 } from '../math';
3
+ /**
4
+ * 调整画板元素(Frame)的尺寸与位置,并同步其子合成 Item 的位移。
5
+ * @param frameItem 画板元素(Frame 空节点控制器)
6
+ * @param worldSize 目标世界尺寸(所属合成坐标系,不受 viewport zoom 影响)
7
+ * @param translation 位移
8
+ * @param initialSize pointer down 时冻结的本地 / 世界尺寸;传入后允许尺寸连续经过 0 并变为负值
9
+ */
10
+ export declare function resizeFrameItem(frameItem: VFXItem, worldSize: Vector2, translation: Vector3, initialSize?: {
11
+ localSize: Vector2;
12
+ worldSize: Vector2;
13
+ }): void;
@@ -0,0 +1,5 @@
1
+ export * from './frame-auto-layout';
2
+ export * from './frame-manager';
3
+ export * from './frame-resize';
4
+ export * from './layout-calculations';
5
+ export * from './types';
@@ -0,0 +1,109 @@
1
+ import type { Box2 } from '@galacean/effects-math/es/extension/index';
2
+ import { Line2 } from '@galacean/effects-math/es/extension/index';
3
+ import { Vector2 } from '../math';
4
+ import type { LayoutInfo } from './types';
5
+ /** 自动布局兄弟元素的几何与位置信息。 */
6
+ export type SiblingInfo = {
7
+ /** 元素 ID。 */
8
+ id: string;
9
+ /** 视图包围盒。 */
10
+ box: Box2;
11
+ /** 包围盒中心点。 */
12
+ center: Vector2;
13
+ /** 自动布局位置。 */
14
+ layoutInfo?: LayoutInfo;
15
+ };
16
+ /** 自动布局插入指示器。 */
17
+ export type AutoLayoutIndicator = {
18
+ /** 目标画板 ID。 */
19
+ frameId: string;
20
+ /** 在画板子元素列表中的插入索引。 */
21
+ insertIndex: number;
22
+ /** 相对参考元素的插入方向。 */
23
+ insertDirection: 'before' | 'after';
24
+ /** 参考兄弟元素 ID。 */
25
+ targetSiblingId?: string;
26
+ /** 插入指示线。 */
27
+ line: Line2;
28
+ /** 目标行号。 */
29
+ targetRow?: number;
30
+ /** 目标列号。 */
31
+ targetColumn?: number;
32
+ } | null;
33
+ /** 自动布局中的行列位置。 */
34
+ export type LayoutPosition = {
35
+ /** 行号。 */
36
+ row: number;
37
+ /** 列号。 */
38
+ column: number;
39
+ };
40
+ /** 自动布局的插入位置及指示器依据。 */
41
+ export type InsertInfo = {
42
+ /** 在画板子元素列表中的插入索引。 */
43
+ index: number;
44
+ /** 相对参考元素的插入方向。 */
45
+ direction: 'before' | 'after';
46
+ /** 参考兄弟元素 ID。 */
47
+ siblingId?: string;
48
+ /** 目标行号。 */
49
+ row: number;
50
+ /** 目标列号。 */
51
+ column: number;
52
+ /** 跨行移动信息。 */
53
+ rowChange?: {
54
+ /** 原行号。 */
55
+ fromRow: number;
56
+ /** 目标行号。 */
57
+ toRow: number;
58
+ /** 原行的视图边界。 */
59
+ rowBounds?: {
60
+ /** 最小 Y 坐标。 */
61
+ minY: number;
62
+ /** 最大 Y 坐标。 */
63
+ maxY: number;
64
+ /** 最小 X 坐标。 */
65
+ minX: number;
66
+ /** 最大 X 坐标。 */
67
+ maxX: number;
68
+ };
69
+ /** 是否发生跨行移动。 */
70
+ isRowChange: boolean;
71
+ };
72
+ /** 参考元素包围盒。 */
73
+ box?: Box2;
74
+ };
75
+ /** 已解析行列位置的兄弟元素。 */
76
+ export type SiblingWithInfo = {
77
+ /** 元素 ID。 */
78
+ id: string;
79
+ /** 视图包围盒。 */
80
+ box: Box2;
81
+ /** 行号。 */
82
+ row: number;
83
+ /** 列号。 */
84
+ column: number;
85
+ /** 包围盒中心 X 坐标。 */
86
+ centerX: number;
87
+ };
88
+ /**
89
+ * 计算自动布局插入指示线。
90
+ * @param insertInfo 插入位置信息
91
+ * @returns 主指示线
92
+ */
93
+ export declare function calculateAutoLayoutIndicatorLine(insertInfo: InsertInfo): Line2;
94
+ /**
95
+ * 基于鼠标位置计算布局位置(row 和 column)。
96
+ * @param mousePoint 鼠标位置
97
+ * @param siblingInfos 所有兄弟元素的信息
98
+ * @returns 布局位置信息 { row: number, column: number }
99
+ */
100
+ export declare function calculateAutoLayoutPositionByMouse(mousePoint: Vector2, siblingInfos: SiblingInfo[]): LayoutPosition | null;
101
+ /**
102
+ * 基于鼠标位置计算插入位置(用于显示指示器)。
103
+ * @param mousePoint 鼠标位置
104
+ * @param siblingsWithInfos 所有兄弟元素信息
105
+ * @param allChildren 所有兄弟元素ID数组
106
+ * @param originalRow 原始行号
107
+ * @returns 插入位置信息和计算出的行列位置
108
+ */
109
+ export declare function calculateInsertPositionFromLayout(mousePoint: Vector2, siblingsWithInfos: SiblingWithInfo[], allChildren: string[], originalRow: number): InsertInfo;
@@ -0,0 +1,41 @@
1
+ import type { Box2 } from '@galacean/effects-math/es/extension/index';
2
+ /** 画板布局模式。 */
3
+ export declare enum FrameLayoutMode {
4
+ /** 自动布局:元素按行列规则自动排布。 */
5
+ AUTO = "auto",
6
+ /** 自由布局:元素位置不受布局约束。 */
7
+ FREE = "free"
8
+ }
9
+ /** 画板数据及其当前视图包围盒。 */
10
+ export type FrameInfo = {
11
+ /** 画板元素 ID。 */
12
+ id: string;
13
+ /** 当前视图包围盒。 */
14
+ box: Box2;
15
+ /** 布局模式。 */
16
+ layoutMode: FrameLayoutMode;
17
+ /** 子元素 ID。 */
18
+ children: string[];
19
+ /** 子元素自动布局信息。 */
20
+ layoutInfos: Record<string, LayoutInfo>;
21
+ };
22
+ /** 元素在自动布局中的位置信息。 */
23
+ export type LayoutInfo = {
24
+ /**
25
+ * 所在行号(可为小数)。
26
+ * 整数部分为主行号(0, 1, 2...),小数部分为分行后的子行号(如 1.5 表示第 1 行的第 5 个子行),
27
+ * 仅支持两层(即小数部分为 0-9)。
28
+ */
29
+ row: number;
30
+ /** 所在列号(必须为整数)。 */
31
+ column: number;
32
+ /** 元素在布局中的位置(相对于画板左上角,可选)。 */
33
+ position?: [number, number];
34
+ };
35
+ /** 画板自动布局约束。 */
36
+ export type AutoLayoutConfig = {
37
+ /** 单行最大宽度。 */
38
+ maxRowWidth?: number;
39
+ /** 最大行数。 */
40
+ maxRowCount?: number;
41
+ };