@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
package/README.md CHANGED
@@ -1,13 +1,45 @@
1
1
  # Galacean Effects Editor Gizmo Plugin
2
2
 
3
- ## Development
3
+ Editor interaction and scene gizmos for Galacean Effects.
4
+
5
+ - **2D**: selection, translation, resizing, rotation, text editing, image cropping,
6
+ viewport navigation and frame layout.
7
+ - **3D**: transform handles, camera and light gizmos, geometry and wireframes.
8
+
9
+ ## Usage
10
+
11
+ ```ts
12
+ import { GestureHandler, GizmoComponent } from '@galacean/effects-plugin-editor-gizmo';
13
+ ```
14
+
15
+ Use `GestureHandler` for 2D editor interaction and `GizmoComponent` for 3D scene
16
+ gizmos. Importing the package registers the `editor-gizmo` plugin. Keep its version
17
+ aligned with `@galacean/effects`.
4
18
 
5
- ### Getting Started
19
+ ## Source layout
6
20
 
7
- ``` bash
8
- # demo
21
+ - `src/2d/`: 2D interaction, selection, viewport and layout helpers.
22
+ - `src/3d/`: 3D gizmos, geometry, wireframes and plugin loader.
23
+ - `../../web-packages/test/unit/src/plugin-editor-gizmo/`: unit tests.
24
+
25
+ ## Development
26
+
27
+ ```bash
9
28
  pnpm --filter @galacean/effects-plugin-editor-gizmo dev
10
29
  ```
11
30
 
12
- > Open in browser: http://localhost:8081/demo/index.html
31
+ Open [the demo](http://localhost:8081/demo/index.html).
32
+
33
+ Build the plugin:
34
+
35
+ ```bash
36
+ pnpm --filter @galacean/effects-plugin-editor-gizmo build
37
+ ```
38
+
39
+ Run the shared unit tests:
40
+
41
+ ```bash
42
+ pnpm test
43
+ ```
13
44
 
45
+ Open [the unit tests](http://localhost:9090/unit/index.html).
@@ -0,0 +1,14 @@
1
+ import type { EffectsEditModeConfig, IconConfig, ItemCreateConfig, MaskConfig, ImageCutConfig, ImageExpandConfig, SelectionPreviewConfig, SnapConfig, SpriteTextEditConfig, ResizeSelectionConfig, ViewportNavigationConfig, ViewportOverlayConfig } from './types';
2
+ export { DEFAULT_LOADING_FRAGMENT, loadingConfig } from './loading-config';
3
+ export declare const effectsEditModeConfig: import("./config-definition").ConfigDefinition<"mode.effects-edit", EffectsEditModeConfig>;
4
+ export declare const viewportNavigationConfig: import("./config-definition").ConfigDefinition<"viewport.navigation", ViewportNavigationConfig>;
5
+ export declare const viewportOverlayConfig: import("./config-definition").ConfigDefinition<"viewport.overlay", ViewportOverlayConfig>;
6
+ export declare const selectionPreviewConfig: import("./config-definition").ConfigDefinition<"selection.preview", SelectionPreviewConfig>;
7
+ export declare const selectionSnapConfig: import("./config-definition").ConfigDefinition<"selection.snap", SnapConfig>;
8
+ export declare const resizeSelectionConfig: import("./config-definition").ConfigDefinition<"resize-selection", ResizeSelectionConfig>;
9
+ export declare const imageCutConfig: import("./config-definition").ConfigDefinition<"tool.image-cut", ImageCutConfig>;
10
+ export declare const imageExpandConfig: import("./config-definition").ConfigDefinition<"tool.image-expand", ImageExpandConfig>;
11
+ export declare const maskConfig: import("./config-definition").ConfigDefinition<"tool.mask", MaskConfig>;
12
+ export declare const spriteTextEditConfig: import("./config-definition").ConfigDefinition<"tool.sprite-text-edit", SpriteTextEditConfig>;
13
+ export declare const iconConfig: import("./config-definition").ConfigDefinition<"feedback.icon", IconConfig>;
14
+ export declare const itemCreateConfig: import("./config-definition").ConfigDefinition<"tool.item-create", ItemCreateConfig>;
@@ -0,0 +1,40 @@
1
+ /** 带稳定标识、默认值和校验器的配置定义。 */
2
+ export type ConfigDefinition<Id extends string, T extends object> = {
3
+ /** 配置唯一标识。 */
4
+ readonly id: Id;
5
+ /** 配置默认值。 */
6
+ readonly defaults: Readonly<T>;
7
+ /** 校验并归一化外部配置。 */
8
+ readonly validate?: (input: unknown) => Partial<T> | undefined;
9
+ };
10
+ /** 任意配置定义的通用类型。 */
11
+ export type AnyConfigDefinition = ConfigDefinition<string, Record<string, unknown>>;
12
+ /** 提取配置定义对应的值类型。 */
13
+ export type ConfigValue<D> = D extends ConfigDefinition<string, infer T> ? T : never;
14
+ /** 一次配置变更的前后值。 */
15
+ export type ConfigChange<T extends object> = {
16
+ /** 本次接受的增量配置。 */
17
+ partial: Readonly<Partial<T>>;
18
+ /** 变更前的完整配置。 */
19
+ previous: Readonly<T>;
20
+ /** 变更后的完整配置。 */
21
+ current: Readonly<T>;
22
+ };
23
+ /**
24
+ * 深拷贝由数组和普通对象组成的配置值。
25
+ * @param value 待拷贝的配置值
26
+ * @returns 配置值副本
27
+ */
28
+ export declare function cloneConfigValue<T>(value: T): T;
29
+ /**
30
+ * 递归冻结配置值。
31
+ * @param value 待冻结的配置值
32
+ * @returns 已冻结的原值
33
+ */
34
+ export declare function freezeConfigValue<T>(value: T): T;
35
+ /**
36
+ * 创建不可变的配置定义。
37
+ * @param definition 配置标识、默认值和可选校验器
38
+ * @returns 默认值已复制并冻结的配置定义
39
+ */
40
+ export declare function defineConfig<const Id extends string, T extends object>(definition: ConfigDefinition<Id, T>): ConfigDefinition<Id, T>;
@@ -0,0 +1,52 @@
1
+ import { EventEmitter } from '@galacean/effects';
2
+ import { type AnyConfigDefinition, type ConfigChange, type ConfigValue } from './config-definition';
3
+ /** 任意配置项的一次变更。 */
4
+ export type AnyConfigChange = {
5
+ /** 配置唯一标识。 */
6
+ id: string;
7
+ /** 本次接受的增量配置。 */
8
+ partial: Readonly<Record<string, unknown>>;
9
+ /** 变更前的完整配置。 */
10
+ previous: Readonly<Record<string, unknown>>;
11
+ /** 变更后的完整配置。 */
12
+ current: Readonly<Record<string, unknown>>;
13
+ };
14
+ /** 配置管理器事件参数。 */
15
+ export type ConfigManagerEvents = {
16
+ /** 任意配置变更事件。 */
17
+ configChange: [AnyConfigChange];
18
+ };
19
+ /** 管理配置定义、当前值和变更订阅。 */
20
+ export declare class ConfigManager extends EventEmitter<ConfigManagerEvents> {
21
+ private readonly values;
22
+ private readonly definitions;
23
+ /**
24
+ * 获取配置当前值,首次读取时使用默认值初始化。
25
+ * @param definition 配置定义
26
+ * @returns 当前不可变配置
27
+ */
28
+ get<D extends AnyConfigDefinition>(definition: D): Readonly<ConfigValue<D>>;
29
+ /**
30
+ * 合并并保存增量配置。
31
+ * @param definition 配置定义
32
+ * @param partial 待合并的增量配置
33
+ */
34
+ set<D extends AnyConfigDefinition>(definition: D, partial: Partial<ConfigValue<D>>): void;
35
+ /**
36
+ * 将配置恢复为默认值。
37
+ * @param definition 配置定义
38
+ */
39
+ reset(definition: AnyConfigDefinition): void;
40
+ /**
41
+ * 订阅指定配置的变更。
42
+ * @param definition 配置定义
43
+ * @param listener 配置变更回调
44
+ * @returns 取消订阅函数
45
+ */
46
+ onChange<D extends AnyConfigDefinition>(definition: D, listener: (change: ConfigChange<ConfigValue<D>>) => void): () => void;
47
+ /**
48
+ * 注册配置定义并校验标识冲突。
49
+ * @param definition 配置定义
50
+ */
51
+ private assertDefinition;
52
+ }
@@ -0,0 +1,6 @@
1
+ export { cloneConfigValue, defineConfig, freezeConfigValue, } from './config-definition';
2
+ export type { AnyConfigDefinition, ConfigChange, ConfigDefinition, ConfigValue, } from './config-definition';
3
+ export { ConfigManager } from './config-manager';
4
+ export type { AnyConfigChange, ConfigManagerEvents, } from './config-manager';
5
+ export { effectsEditModeConfig, iconConfig, itemCreateConfig, DEFAULT_LOADING_FRAGMENT, loadingConfig, maskConfig, imageCutConfig, imageExpandConfig, resizeSelectionConfig, selectionPreviewConfig, selectionSnapConfig, spriteTextEditConfig, viewportNavigationConfig, viewportOverlayConfig, } from './builtin-configs';
6
+ export type { EffectsEditModeConfig, IconConfig, ItemCreateConfig, LoadingConfig, MaskConfig, ImageCutConfig, ImageExpandConfig, ResizeSelectionBehavior, ResizeSelectionConfig, SelectionPreviewConfig, SnapConfig, SpriteTextEditConfig, ViewportNavigationConfig, ViewportOverlayConfig, } from './types';
@@ -0,0 +1,3 @@
1
+ import type { LoadingConfig } from './types';
2
+ export declare const DEFAULT_LOADING_FRAGMENT = "\n// Shadertoy Fragment Shader\n// Diagonal background gradient + wider colorful transparent shimmer\n\nprecision highp float;\n\nvarying vec2 vUV;\n\nuniform vec4 _Time;\n\n// ------------------------------------------------------------\n// Background\n// ------------------------------------------------------------\nvec3 background(vec2 uv) {\n vec3 topLeft = vec3(0.88, 0.85, 1.00);\n vec3 bottomRight = vec3(0.98, 0.98, 0.98);\n\n float d = (uv.x + (1.0 - uv.y)) * 0.5;\n d = smoothstep(0.0, 1.0, d);\n\n vec3 col = mix(topLeft, bottomRight, d);\n\n vec2 p1 = uv - vec2(1.13, 1.40);\n float r1 = length(p1 / vec2(0.85, 0.85));\n float g1 = 1.0 - smoothstep(0.0, 0.96, r1);\n col += vec3(172.0/255.0, 183.0/255.0, 1.0) * g1 * 0.28;\n\n vec2 p2 = uv - vec2(0.25, 0.23);\n float r2 = length(p2 / vec2(0.74, 0.64));\n float g2 = 1.0 - smoothstep(0.0, 1.0, r2);\n col += vec3(147.0/255.0, 108.0/255.0, 1.0) * g2 * 0.10;\n\n return col;\n}\n\n// ------------------------------------------------------------\n// Easing: slow at start, fast at end\n// ------------------------------------------------------------\nfloat easeInQuad(float x) {\n return x * x;\n}\n\n// ------------------------------------------------------------\n// Color palette helper\n// ------------------------------------------------------------\nvec3 palette(float t) {\n // \u67D4\u548C\u7684\u5F69\u8272\u6761\uFF1A\u84DD -> \u9752 -> \u7D2B -> \u7C89 -> \u84DD\n vec3 a = vec3(0.62, 0.82, 1.00);\n vec3 b = vec3(0.72, 0.95, 1.00);\n vec3 c = vec3(0.83, 0.76, 1.00);\n vec3 d = vec3(1.00, 0.82, 0.95);\n\n t = fract(t);\n\n if (t < 0.33) {\n float k = smoothstep(0.0, 0.33, t);\n return mix(a, b, k);\n } else if (t < 0.66) {\n float k = smoothstep(0.33, 0.66, t);\n return mix(b, c, k);\n } else {\n float k = smoothstep(0.66, 1.0, t);\n return mix(c, d, k);\n }\n}\n\n// ------------------------------------------------------------\n// Wider colorful transparent left-to-right shimmer\n// ------------------------------------------------------------\nvec4 shimmerBand(vec2 uv, float t) {\n float cycle = fract(t * 0.70);\n cycle = easeInQuad(cycle);\n\n float x = cycle * 1.55 - 0.25; // sweep from left to right\n\n float d = abs(uv.x - x);\n float band = 1.0 - smoothstep(0.0, 0.30, d);\n float core = 1.0 - smoothstep(0.0, 0.10, d);\n\n float x2 = x + (uv.y - 0.5) * 0.18;\n float d2 = abs(uv.x - x2);\n float band2 = 1.0 - smoothstep(0.0, 0.20, d2);\n\n float s = max(band * 0.85, band2 * 0.60);\n s = max(s, core * 0.95);\n s = clamp(s, 0.0, 1.0);\n\n // \u989C\u8272\u6CBF\u6761\u5E26\u53D8\u5316\uFF0C\u6A21\u62DF\u5F69\u8272\u6E10\u53D8\n float hueT = uv.y * 0.25 + uv.x * 0.60 + t * 0.10;\n vec3 color1 = palette(hueT);\n\n // \u4E2D\u95F4\u66F4\u4EAE\u4E00\u70B9\uFF0C\u8FB9\u7F18\u66F4\u6DE1\n vec3 color2 = mix(color1, vec3(1.0), core * 0.35);\n\n return vec4(color2, s);\n}\n\n// ------------------------------------------------------------\n// Main\n// ------------------------------------------------------------\nvoid main() {\n vec2 uv = vUV;\n\n vec3 col = background(uv);\n\n vec4 sh = shimmerBand(uv, _Time.y);\n\n // \u53EF\u9009\uFF1A\u589E\u52A0\u4E00\u70B9\u67D4\u5149\u611F\n col += sh.rgb * sh.a * 0.06;\n\n gl_FragColor = vec4(col, 1.0);\n}";
3
+ export declare const loadingConfig: import("./config-definition").ConfigDefinition<"feedback.loading", LoadingConfig>;
@@ -0,0 +1,321 @@
1
+ /** 选区移动与缩放的吸附配置。 */
2
+ export type SnapConfig = {
3
+ /** 是否启用选区吸附。 */
4
+ enabled: boolean;
5
+ /** 吸附线宽度 */
6
+ lineWidth: number;
7
+ /** 吸附线颜色 */
8
+ lineColor: number;
9
+ /** 吸附判断距离 */
10
+ distance: number;
11
+ };
12
+ /** 动效内部编辑模式配置。 */
13
+ export type EffectsEditModeConfig = {
14
+ /** 是否允许子元素移动、缩放和旋转。 */
15
+ allowTransform: boolean;
16
+ };
17
+ /** 滚轮驱动的视口导航配置。 */
18
+ export type ViewportNavigationConfig = {
19
+ /** 是否将无修饰键的滚轮事件解释为缩放而非平移。 */
20
+ scrollWheelZoom: boolean;
21
+ /** 是否反转滚轮缩放方向。 */
22
+ invertZoom: boolean;
23
+ /** 单次滚轮事件允许的最大相对缩放比例。 */
24
+ zoomStep: number;
25
+ };
26
+ /**
27
+ * 视口展示 Gizmo 配置
28
+ */
29
+ export type ViewportOverlayConfig = {
30
+ /** 视口包围盒颜色 */
31
+ boxColor: number;
32
+ /** 视口包围盒线宽 */
33
+ boxWidth: number;
34
+ /** 是否绘制画框外遮罩。 */
35
+ outerMaskEnabled: boolean;
36
+ /** 蒙版颜色 */
37
+ markColor: number;
38
+ /** 蒙版透明度 */
39
+ markAlpha: number;
40
+ /** 出血安全区开关 */
41
+ safeAreaEnabled: boolean;
42
+ /** 出血安全区包围盒颜色 */
43
+ safeAreaBoxColor: number;
44
+ /** 出血安全区包围盒透明度 */
45
+ safeAreaBoxAlpha: number;
46
+ };
47
+ /** 选区悬停与框选预览配置。 */
48
+ export type SelectionPreviewConfig = {
49
+ /** 视频元素预选中是否自动播放 */
50
+ videoPreSelectedPlay: boolean;
51
+ /** 预选中线宽 */
52
+ preSelectedWidth: number;
53
+ /** 预选中颜色 */
54
+ preSelectedColor: number;
55
+ /** 框选区域填充色 */
56
+ regionBoxColor: number;
57
+ /** 框选区域填充透明度 */
58
+ regionBoxAlpha: number;
59
+ /** 框选区域线框颜色 */
60
+ regionWireframeColor: number;
61
+ /** 框选区域线框透明度 */
62
+ regionWireframeAlpha: number;
63
+ /** 框选区域线框宽度 */
64
+ regionWireframeWidth: number;
65
+ };
66
+ /** 元素缩放行为:整体缩放,或把缩放吸收到排版尺寸的双轴/单轴调整。 */
67
+ export type ResizeSelectionBehavior = 'scale' | 'resize' | 'resize-x' | 'resize-y';
68
+ /** 选区变换线框、手柄与信息标签配置。 */
69
+ export type ResizeSelectionConfig = {
70
+ /** 预览基准像素到当前显示尺寸的比例。 */
71
+ pixelRatio: number;
72
+ /** 已包含在 viewScale 中的内容适配比例。 */
73
+ contentRatio: number;
74
+ /** 按运行时元素 ID 解析整体缩放或排版尺寸调整行为;默认整体缩放。 */
75
+ resolveResizeBehavior?: (itemId: string) => ResizeSelectionBehavior;
76
+ /** 线框颜色 */
77
+ wireframeColor: number;
78
+ /** 线框透明度 */
79
+ wireframeAlpha: number;
80
+ /** 线框线宽 */
81
+ wireframeWidth: number;
82
+ /** 角点填充色 */
83
+ cornerFillColor: number;
84
+ /** 角点描边色 */
85
+ cornerLineColor: number;
86
+ /** 角点描边宽度 */
87
+ cornerLineWidth: number;
88
+ /** 角点描边透明度 */
89
+ cornerLineAlpha: number;
90
+ /** 缩放交互点半径 */
91
+ scaleCircleSize: number;
92
+ /** 旋转交互方形的半边长 */
93
+ rotationCircleSize: number;
94
+ /** 画板移动元素位置线颜色 */
95
+ frameMoveLineColor: number;
96
+ /** 画板移动元素位置线宽 */
97
+ frameMoveLineWidth: number;
98
+ /** 信息展示开关 */
99
+ infoShowEnabled: boolean;
100
+ /** 尺寸文案颜色 */
101
+ sizeTextColor: number;
102
+ /** 名称文案颜色 */
103
+ nameTextColor: number;
104
+ /** 图片元素 logo 地址 */
105
+ imageLogoUrl: string;
106
+ /** 成组元素 logo 地址 */
107
+ groupLogoUrl: string;
108
+ /** 文本元素 logo 地址 */
109
+ textLogoUrl: string;
110
+ /** 视频元素 logo 地址 */
111
+ videoLogoUrl: string;
112
+ /** 画板元素 logo 地址 */
113
+ frameLogoUrl: string;
114
+ /** 动效元素 logo 地址 */
115
+ effectsLogoUrl: string;
116
+ };
117
+ /**
118
+ * 图片裁切 Gizmo 配置
119
+ */
120
+ export type ImageCutConfig = {
121
+ /** 蒙版颜色 */
122
+ maskColor: number;
123
+ /** 蒙版透明度 */
124
+ maskAlpha: number;
125
+ /** 裁切包围盒线宽 */
126
+ cutBoxLineWidth: number;
127
+ /** 裁切包围盒线色 */
128
+ cutBoxLineColor: number;
129
+ /** 裁切包围盒线透明度 */
130
+ cutBoxLineAlpha: number;
131
+ /** 元素包围盒线宽 */
132
+ itemBoxLineWidth: number;
133
+ /** 元素包围盒线色 */
134
+ itemBoxLineColor: number;
135
+ /** 元素包围盒线透明度 */
136
+ itemBoxLineAlpha: number;
137
+ /** 角点半径 */
138
+ cutBoxCornerRadius: number;
139
+ /** 角点填充色 */
140
+ cutBoxCornerFillColor: number;
141
+ /** 角点线宽 */
142
+ cutBoxCornerLineWidth: number;
143
+ /** 角点线色 */
144
+ cutBoxCornerLineColor: number;
145
+ /** 角点线透明度 */
146
+ cutBoxCornerLineAlpha: number;
147
+ /** 缩放交互判断距离 */
148
+ scaleInteractionDistance: number;
149
+ /** 单向缩放交互判断距离 */
150
+ directionScaleInteractionDistance: number;
151
+ /** 网格线宽度 */
152
+ gridLineWidth: number;
153
+ /** 网格线颜色 */
154
+ gridLineColor: number;
155
+ /** 网格线透明度 */
156
+ gridLineAlpha: number;
157
+ /** 网格线数量 */
158
+ gridCount: number;
159
+ };
160
+ /**
161
+ * 图片扩边 Gizmo 配置
162
+ */
163
+ export type ImageExpandConfig = {
164
+ /** 蒙版颜色 */
165
+ maskColor: number;
166
+ /** 蒙版透明度 */
167
+ maskAlpha: number;
168
+ /** 扩边包围盒线宽 */
169
+ expandBoxLineWidth: number;
170
+ /** 扩边包围盒线色 */
171
+ expandBoxLineColor: number;
172
+ /** 扩边包围盒线透明度 */
173
+ expandBoxLineAlpha: number;
174
+ /** 角点半径 */
175
+ expandBoxCornerRadius: number;
176
+ /** 角点线宽 */
177
+ expandBoxCornerLineWidth: number;
178
+ /** 角点线色 */
179
+ expandBoxCornerLineColor: number;
180
+ /** 角点线透明度 */
181
+ expandBoxCornerLineAlpha: number;
182
+ /** 角点填充色 */
183
+ expandBoxCornerFillColor: number;
184
+ /** 缩放交互判断距离 */
185
+ scaleInteractionDistance: number;
186
+ /** 单向缩放交互判断距离 */
187
+ directionScaleInteractionDistance: number;
188
+ /** 网格线宽度 */
189
+ gridLineWidth: number;
190
+ /** 网格线颜色 */
191
+ gridLineColor: number;
192
+ /** 网格线透明度 */
193
+ gridLineAlpha: number;
194
+ /** 网格线数量 */
195
+ gridCount: number;
196
+ };
197
+ /**
198
+ * 蒙版 Gizmo 配置
199
+ */
200
+ export type MaskConfig = {
201
+ /** 黑白蒙版图片 URL;空字符串表示不使用基础蒙版图 */
202
+ maskImage: string;
203
+ /** 画笔大小 */
204
+ brushSize: number;
205
+ /** 笔刷颜色 */
206
+ brushColor: number;
207
+ /** 笔刷透明度 */
208
+ brushAlpha: number;
209
+ /** 蒙版颜色 */
210
+ maskColor: number;
211
+ /** 蒙版背景色 */
212
+ maskBackgroundColor: number;
213
+ /** 蒙版透明度 */
214
+ maskAlpha: number;
215
+ /** 元素包围盒线框宽度 */
216
+ boxLineWidth: number;
217
+ /** 元素包围盒线框颜色 */
218
+ boxLineColor: number;
219
+ /** 元素包围盒线框透明度 */
220
+ boxLineAlpha: number;
221
+ };
222
+ /**
223
+ * 精准改字 Gizmo 配置
224
+ */
225
+ export type SpriteTextEditConfig = {
226
+ /** 文案颜色 */
227
+ textColor: number;
228
+ /** 预选中文案颜色 */
229
+ preSelectedTextColor: number;
230
+ /** 包围盒线框宽度 */
231
+ boxLineWidth: number;
232
+ /** 包围盒间隔线长度 */
233
+ dashLineDash: number;
234
+ /** 包围盒间隔线间隔 */
235
+ dashLineGap: number;
236
+ /** 编辑包围盒颜色 */
237
+ editBoxColor: number;
238
+ /** 编辑包围盒透明度 */
239
+ editBoxAlpha: number;
240
+ /** 编辑包围盒线框颜色 */
241
+ editBoxLineColor: number;
242
+ /** 编辑包围盒线框透明度 */
243
+ editBoxLineAlpha: number;
244
+ /** 编辑包围盒预选颜色 */
245
+ editBoxPreSelectedColor: number;
246
+ /** 编辑包围盒预选透明度 */
247
+ editBoxPreSelectedAlpha: number;
248
+ /** 编辑包围盒预选线框颜色 */
249
+ editBoxLinePreSelectedColor: number;
250
+ /** 编辑包围盒预选线框透明度 */
251
+ editBoxLinePreSelectedAlpha: number;
252
+ /** 已更改编辑包围盒颜色 */
253
+ hasChangedEditBoxColor: number;
254
+ /** 已更改编辑包围盒透明度 */
255
+ hasChangedEditBoxAlpha: number;
256
+ /** 已更改编辑包围盒线框颜色 */
257
+ hasChangedEditBoxLineColor: number;
258
+ /** 已更改编辑包围盒线框透明度 */
259
+ hasChangedEditBoxLineAlpha: number;
260
+ /** 已更改编辑包围盒预选颜色 */
261
+ hasChangedEditBoxPreSelectedColor: number;
262
+ /** 已更改编辑包围盒预选透明度 */
263
+ hasChangedEditBoxPreSelectedAlpha: number;
264
+ /** 已更改编辑包围盒预选线框颜色 */
265
+ hasChangedEditBoxLinePreSelectedColor: number;
266
+ /** 已更改编辑包围盒预选线框透明度 */
267
+ hasChangedEditBoxLinePreSelectedAlpha: number;
268
+ /** 选中状态标记包围盒颜色 */
269
+ editBoxSelectedColor: number;
270
+ /** 选中状态标记包围盒透明度 */
271
+ editBoxSelectedAlpha: number;
272
+ };
273
+ /**
274
+ * 图标 Gizmo 配置
275
+ */
276
+ export type IconConfig = {
277
+ /** 自动展示 */
278
+ autoShow: boolean;
279
+ /** 视频播放图标地址 */
280
+ videoPlayUrl: string;
281
+ /** 视频播放图标距右下角偏移值 */
282
+ videoPlayShift: [number, number];
283
+ /** 视频播放图标宽 */
284
+ videoPlayWidth: number;
285
+ /** 视频播放图标高 */
286
+ videoPlayHeight: number;
287
+ /** 图片生成器图标地址 */
288
+ imageGeneratorUrl: string;
289
+ /** 视频生成器图标地址 */
290
+ videoGeneratorUrl: string;
291
+ /** 生成器图标宽 */
292
+ generatorWidth: number;
293
+ /** 生成器图标高 */
294
+ generatorHeight: number;
295
+ };
296
+ /**
297
+ * 元素创建 Gizmo 配置
298
+ */
299
+ export type ItemCreateConfig = {
300
+ /** 边框颜色 */
301
+ frameBorderColor: number;
302
+ /** 边框宽度 */
303
+ frameBorderWidth: number;
304
+ /** 边框透明度 */
305
+ frameBorderAlpha: number;
306
+ /** 填充颜色 */
307
+ frameFillColor: number;
308
+ /** 填充透明度 */
309
+ frameFillAlpha: number;
310
+ /** 选中子元素包围盒透明度 */
311
+ frameChildBoxAlpha: number;
312
+ /** 选中子元素包围盒颜色 */
313
+ frameChildBoxColor: number;
314
+ };
315
+ /**
316
+ * Loading Gizmo 配置
317
+ */
318
+ export type LoadingConfig = {
319
+ /** Loading 态 fragment 标识 */
320
+ loadingFragment: string;
321
+ };
@@ -0,0 +1,8 @@
1
+ import type { GestureCursorType } from './cursor';
2
+ export declare const cursorMap: Record<GestureCursorType, {
3
+ type: 'svg' | 'preset';
4
+ content: string;
5
+ url?: string;
6
+ }>;
7
+ /** 加载并缓存所有 SVG 光标资源。 */
8
+ export declare function loadCursorIcons(): Promise<void>;
@@ -0,0 +1,36 @@
1
+ /** Gizmo 提交给宿主的光标样式。 */
2
+ export type GestureCursorResult = {
3
+ /** 光标类型。 */
4
+ type: GestureCursorType;
5
+ /** 光标旋转角度。 */
6
+ angle: number;
7
+ /** 圆形光标半径。 */
8
+ radius?: number;
9
+ };
10
+ /** 内置光标类型。 */
11
+ export declare enum GestureCursorType {
12
+ /** 默认光标。 */
13
+ NORMAL = "normal",
14
+ /** 旋转光标。 */
15
+ ROTATION = "rotation",
16
+ /** 缩放光标。 */
17
+ SCALE = "scale",
18
+ /** 文本旋转光标。 */
19
+ TEXT_ROTATION = "text-rotation",
20
+ /** 圆形画笔光标。 */
21
+ CIRCLE = "circle",
22
+ /** 可抓取手形光标。 */
23
+ HAND = "hand",
24
+ /** 抓取中的手形光标。 */
25
+ ACTIVE_HAND = "active-hand",
26
+ /** 指针光标。 */
27
+ POINTER = "pointer",
28
+ /** 文本编辑光标。 */
29
+ TEXT = "text",
30
+ /** 文本创建光标。 */
31
+ TEXT_CREATE = "text-create",
32
+ /** 画板创建光标。 */
33
+ FRAME_CREATE = "frame-create",
34
+ /** 框选十字光标。 */
35
+ BOX_SELECT = "box-select"
36
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 鼠标拖拽轮次的起始距离(CSS px)。
3
+ */
4
+ export declare const DRAG_THRESHOLD_PX = 5;
5
+ /**
6
+ * 判断指针相对按下点的累计位移是否达到拖拽阈值。
7
+ * @param startClientX 按下点 X 坐标
8
+ * @param startClientY 按下点 Y 坐标
9
+ * @param currentClientX 当前 X 坐标
10
+ * @param currentClientY 当前 Y 坐标
11
+ * @returns 是否达到拖拽阈值
12
+ */
13
+ export declare function isDragThresholdReached(startClientX: number, startClientY: number, currentClientX: number, currentClientY: number): boolean;