@vvfx/artis 0.0.1-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.
- package/LICENSE +22 -0
- package/dist/artis/artis.d.ts +44 -0
- package/dist/artis/base-artis.d.ts +520 -0
- package/dist/artis/canvas-layer-order.d.ts +19 -0
- package/dist/artis/create-info-to-schema.d.ts +21 -0
- package/dist/artis/index.d.ts +15 -0
- package/dist/artis/operations/index.d.ts +3 -0
- package/dist/artis/operations/operations.d.ts +362 -0
- package/dist/artis/operations/scene-operations.d.ts +26 -0
- package/dist/artis/operations/types.d.ts +39 -0
- package/dist/artis/scene-artis.d.ts +386 -0
- package/dist/artis/screenshot-service.d.ts +83 -0
- package/dist/artis/types.d.ts +130 -0
- package/dist/artis/wiring/index.d.ts +17 -0
- package/dist/artis/wiring/register-commands.d.ts +44 -0
- package/dist/artis/wiring/setup-commands.d.ts +5 -0
- package/dist/artis/wiring/setup-event-bindings.d.ts +16 -0
- package/dist/artis/wiring/setup-keybindings.d.ts +38 -0
- package/dist/artis/wiring/setup-plugins.d.ts +5 -0
- package/dist/artis/wiring/wiring-context.d.ts +34 -0
- package/dist/artis-sdk/artis-sdk.d.ts +1117 -0
- package/dist/artis-sdk/index.d.ts +1 -0
- package/dist/core/asset/asset-manager.d.ts +288 -0
- package/dist/core/asset/index.d.ts +3 -0
- package/dist/core/command/command-service.d.ts +315 -0
- package/dist/core/command/commands/composite-command.d.ts +45 -0
- package/dist/core/command/commands/frame-layout-command.d.ts +81 -0
- package/dist/core/command/commands/frame-layout-mode-command.d.ts +55 -0
- package/dist/core/command/commands/frame-move-in-command.d.ts +54 -0
- package/dist/core/command/commands/frame-move-out-command.d.ts +54 -0
- package/dist/core/command/commands/group-children-detach-command.d.ts +28 -0
- package/dist/core/command/commands/index.d.ts +98 -0
- package/dist/core/command/commands/item-align-command.d.ts +52 -0
- package/dist/core/command/commands/item-create-command.d.ts +66 -0
- package/dist/core/command/commands/item-delete-command.d.ts +40 -0
- package/dist/core/command/commands/item-distribute-command.d.ts +53 -0
- package/dist/core/command/commands/item-group-command.d.ts +41 -0
- package/dist/core/command/commands/item-reorder-command.d.ts +41 -0
- package/dist/core/command/commands/item-replace-source-command.d.ts +48 -0
- package/dist/core/command/commands/item-set-font-family-command.d.ts +46 -0
- package/dist/core/command/commands/item-set-generator-resource-command.d.ts +40 -0
- package/dist/core/command/commands/item-transform-command.d.ts +51 -0
- package/dist/core/command/commands/item-ungroup-command.d.ts +34 -0
- package/dist/core/command/commands/item-update-property-by-create-info-command.d.ts +41 -0
- package/dist/core/command/commands/item-update-property-command.d.ts +82 -0
- package/dist/core/command/commands/mask-commit-command.d.ts +53 -0
- package/dist/core/command/commands/page-auto-layout-command.d.ts +53 -0
- package/dist/core/command/commands/picture-cut-commit-command.d.ts +43 -0
- package/dist/core/command/commands/picture-expand-commit-command.d.ts +35 -0
- package/dist/core/command/commands/scene-switch-command.d.ts +35 -0
- package/dist/core/command/commands/selection-set-command.d.ts +38 -0
- package/dist/core/command/commands/sprite-image-command.d.ts +36 -0
- package/dist/core/command/commands/sprite-text-edit-commit-command.d.ts +43 -0
- package/dist/core/command/commands/state-hand-command.d.ts +14 -0
- package/dist/core/command/commands/state-image-cut-command.d.ts +14 -0
- package/dist/core/command/commands/state-image-expand-command.d.ts +14 -0
- package/dist/core/command/commands/state-image-mask-command.d.ts +15 -0
- package/dist/core/command/commands/state-image-text-edit-command.d.ts +14 -0
- package/dist/core/command/commands/state-item-create-command.d.ts +34 -0
- package/dist/core/command/commands/state-move-command.d.ts +14 -0
- package/dist/core/command/commands/state-switch-command-base.d.ts +41 -0
- package/dist/core/command/commands/text-move-command.d.ts +47 -0
- package/dist/core/command/commands/text-rotate-command.d.ts +52 -0
- package/dist/core/command/commands/text-scale-command.d.ts +56 -0
- package/dist/core/command/commands/text-update-content-command.d.ts +51 -0
- package/dist/core/command/commands/transform-move-command.d.ts +56 -0
- package/dist/core/command/commands/transform-move-with-frame-change-command.d.ts +80 -0
- package/dist/core/command/commands/transform-move-with-layout-command.d.ts +56 -0
- package/dist/core/command/commands/transform-rotate-command.d.ts +51 -0
- package/dist/core/command/commands/transform-scale-command.d.ts +54 -0
- package/dist/core/command/commands/video-play-command.d.ts +28 -0
- package/dist/core/command/commands/video-source-command.d.ts +39 -0
- package/dist/core/command/commands/viewport-fit-to-box-command.d.ts +37 -0
- package/dist/core/command/commands/viewport-fit-to-items-command.d.ts +43 -0
- package/dist/core/command/commands/viewport-move-command.d.ts +34 -0
- package/dist/core/command/commands/viewport-zoom-command.d.ts +35 -0
- package/dist/core/command/index.d.ts +5 -0
- package/dist/core/command/registry.d.ts +246 -0
- package/dist/core/command/types.d.ts +124 -0
- package/dist/core/element-registry/element-facade.d.ts +35 -0
- package/dist/core/element-registry/element-identity-strategy.d.ts +75 -0
- package/dist/core/element-registry/element-registry.d.ts +72 -0
- package/dist/core/element-registry/index.d.ts +5 -0
- package/dist/core/element-registry/types.d.ts +15 -0
- package/dist/core/gizmo/gizmo-bootstrap.d.ts +70 -0
- package/dist/core/gizmo/gizmo-command-binder.d.ts +55 -0
- package/dist/core/gizmo/gizmo-config-override.d.ts +24 -0
- package/dist/core/gizmo/gizmo-registry.d.ts +39 -0
- package/dist/core/gizmo/index.d.ts +19 -0
- package/dist/core/gizmo/register-gizmo-command-bindings.d.ts +20 -0
- package/dist/core/gizmo/state-gizmo-controller.d.ts +20 -0
- package/dist/core/history/history-manager.d.ts +174 -0
- package/dist/core/history/index.d.ts +1 -0
- package/dist/core/index.d.ts +25 -0
- package/dist/core/item/base-item.d.ts +154 -0
- package/dist/core/item/card-item.d.ts +91 -0
- package/dist/core/item/default-item-schema.d.ts +20 -0
- package/dist/core/item/effects-item.d.ts +99 -0
- package/dist/core/item/frame-item.d.ts +153 -0
- package/dist/core/item/generator-item.d.ts +114 -0
- package/dist/core/item/group-item.d.ts +51 -0
- package/dist/core/item/index.d.ts +25 -0
- package/dist/core/item/sprite-item.d.ts +80 -0
- package/dist/core/item/text-item.d.ts +171 -0
- package/dist/core/item/types.d.ts +158 -0
- package/dist/core/item/video-item.d.ts +120 -0
- package/dist/core/keybinding/index.d.ts +11 -0
- package/dist/core/keybinding/key-binding-controller.d.ts +44 -0
- package/dist/core/keybinding/key-binding-registry.d.ts +92 -0
- package/dist/core/keybinding/key-binding-store.d.ts +29 -0
- package/dist/core/keybinding/key-matcher.d.ts +24 -0
- package/dist/core/keybinding/types.d.ts +84 -0
- package/dist/core/plugin/index.d.ts +3 -0
- package/dist/core/plugin/io-plugin.d.ts +167 -0
- package/dist/core/plugin/plugin-system.d.ts +77 -0
- package/dist/core/predict/align-predict.d.ts +20 -0
- package/dist/core/predict/base/box-ops.d.ts +40 -0
- package/dist/core/predict/base/index.d.ts +14 -0
- package/dist/core/predict/base/parent-coord.d.ts +29 -0
- package/dist/core/predict/base/schema-box.d.ts +21 -0
- package/dist/core/predict/distribute-predict.d.ts +19 -0
- package/dist/core/predict/frame-layout-predict.d.ts +24 -0
- package/dist/core/predict/index.d.ts +12 -0
- package/dist/core/preferences/index.d.ts +2 -0
- package/dist/core/preferences/user-preferences-manager.d.ts +130 -0
- package/dist/core/quality/error-monitor/error-monitor-facade.d.ts +73 -0
- package/dist/core/quality/error-monitor/error-monitor.d.ts +106 -0
- package/dist/core/quality/error-monitor/index.d.ts +4 -0
- package/dist/core/quality/error-monitor/types.d.ts +198 -0
- package/dist/core/quality/index.d.ts +3 -0
- package/dist/core/quality/perf-monitor/index.d.ts +5 -0
- package/dist/core/quality/perf-monitor/perf-monitor-facade.d.ts +45 -0
- package/dist/core/quality/perf-monitor/perf-monitor.d.ts +60 -0
- package/dist/core/quality/perf-monitor/types.d.ts +66 -0
- package/dist/core/quality/stability-monitor/index.d.ts +5 -0
- package/dist/core/quality/stability-monitor/stability-monitor-facade.d.ts +50 -0
- package/dist/core/quality/stability-monitor/stability-monitor.d.ts +61 -0
- package/dist/core/quality/stability-monitor/types.d.ts +69 -0
- package/dist/core/renderer/background-controller.d.ts +56 -0
- package/dist/core/renderer/index.d.ts +5 -0
- package/dist/core/renderer/player-adapter.d.ts +129 -0
- package/dist/core/renderer/renderer.d.ts +134 -0
- package/dist/core/service/frame-service.d.ts +116 -0
- package/dist/core/service/index.d.ts +9 -0
- package/dist/core/service/interaction-providers.d.ts +20 -0
- package/dist/core/service/interaction-service.d.ts +211 -0
- package/dist/core/service/item-asset-service.d.ts +120 -0
- package/dist/core/service/item-creator-service.d.ts +211 -0
- package/dist/core/service/item-service.d.ts +641 -0
- package/dist/core/service/item-sync-service.d.ts +66 -0
- package/dist/core/service/json-scene-sync-service.d.ts +140 -0
- package/dist/core/service/refresh-animation-base-service.d.ts +1 -0
- package/dist/core/service/scene-data-assembler.d.ts +166 -0
- package/dist/core/service/view-service.d.ts +202 -0
- package/dist/core/state/base-state.d.ts +28 -0
- package/dist/core/state/index.d.ts +6 -0
- package/dist/core/state/presets.d.ts +25 -0
- package/dist/core/state/state-manager.d.ts +50 -0
- package/dist/core/state/types.d.ts +52 -0
- package/dist/core/store/index.d.ts +3 -0
- package/dist/core/store/scene-store.d.ts +194 -0
- package/dist/core/store/store.d.ts +36 -0
- package/dist/core/types/artis-config.d.ts +186 -0
- package/dist/core/types/artis-events.d.ts +101 -0
- package/dist/core/types/frame.d.ts +3 -0
- package/dist/core/types/generator.d.ts +28 -0
- package/dist/core/types/index.d.ts +15 -0
- package/dist/core/types/item-create-info.d.ts +205 -0
- package/dist/core/types/item-property.d.ts +149 -0
- package/dist/core/types/item-reorder.d.ts +12 -0
- package/dist/core/types/item-schema.d.ts +263 -0
- package/dist/core/types/item-set-property.d.ts +48 -0
- package/dist/core/types/page.d.ts +40 -0
- package/dist/core/types/sdk.d.ts +28 -0
- package/dist/core/types/view.d.ts +39 -0
- package/dist/helper/exporter/config.d.ts +18 -0
- package/dist/helper/exporter/const.d.ts +71 -0
- package/dist/helper/exporter/export-media.d.ts +189 -0
- package/dist/helper/exporter/exporter.d.ts +58 -0
- package/dist/helper/exporter/index.d.ts +2 -0
- package/dist/helper/exporter/types.d.ts +194 -0
- package/dist/helper/exporter/utils.d.ts +71 -0
- package/dist/helper/exporter/wav-audio.d.ts +35 -0
- package/dist/helper/html-overlay/anchor-navigation-runtime.d.ts +1 -0
- package/dist/helper/html-overlay/auto-height-layout.d.ts +16 -0
- package/dist/helper/html-overlay/auto-height-runtime.d.ts +40 -0
- package/dist/helper/html-overlay/document-runtime.d.ts +18 -0
- package/dist/helper/html-overlay/document-transform.d.ts +46 -0
- package/dist/helper/html-overlay/dom-order.d.ts +5 -0
- package/dist/helper/html-overlay/host-message-runtime.d.ts +15 -0
- package/dist/helper/html-overlay/html-capture-runtime.d.ts +12 -0
- package/dist/helper/html-overlay/html-card-service.d.ts +287 -0
- package/dist/helper/html-overlay/html-viewport-style.d.ts +6 -0
- package/dist/helper/html-overlay/index.d.ts +1 -0
- package/dist/helper/html-overlay/inline-script-json.d.ts +1 -0
- package/dist/helper/html-overlay/mime-utils.d.ts +13 -0
- package/dist/helper/html-overlay/overlay-transform.d.ts +30 -0
- package/dist/helper/html-overlay/path-utils.d.ts +34 -0
- package/dist/helper/html-overlay/runtime-context.d.ts +2 -0
- package/dist/helper/html-overlay/shell-runtime.d.ts +13 -0
- package/dist/helper/index.d.ts +5 -0
- package/dist/helper/scene-builder.d.ts +111 -0
- package/dist/helper/screen-shot.d.ts +51 -0
- package/dist/helper/size-adapt.d.ts +88 -0
- package/dist/index.cjs +69350 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.mjs +68963 -0
- package/dist/index.mjs.map +1 -0
- package/dist/shared/index.d.ts +1 -0
- package/dist/shared/player.d.ts +9 -0
- package/dist/utils/background-manager.d.ts +76 -0
- package/dist/utils/common-utils.d.ts +39 -0
- package/dist/utils/container-size.d.ts +7 -0
- package/dist/utils/find-player-item.d.ts +9 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/json-data-utils.d.ts +198 -0
- package/dist/utils/layout-utils.d.ts +144 -0
- package/dist/utils/pixel-box-utils.d.ts +26 -0
- package/dist/utils/player-data-utils.d.ts +9 -0
- package/dist/utils/player-utils.d.ts +42 -0
- package/dist/utils/replay-utils.d.ts +22 -0
- package/dist/utils/types.d.ts +130 -0
- package/package.json +66 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
import { BaseArtis } from './base-artis';
|
|
2
|
+
import { spec } from '../shared';
|
|
3
|
+
import { SceneStore, SceneDataAssembler, JsonSceneSyncService, IdentityStrategy, BaseState, type SceneEntry, type SceneEntrySnapshot, type VariantErrorSnapshot, type ArtisItemTypeTable, type ArtisItem } from '../core';
|
|
4
|
+
import { type SceneSourceInput, type SceneView } from '../helper';
|
|
5
|
+
import type { ArtisOptions } from './types';
|
|
6
|
+
import type { Operations } from './operations/operations';
|
|
7
|
+
declare global {
|
|
8
|
+
interface Window {
|
|
9
|
+
artis?: () => unknown;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 播放态:仅保留可见的 ViewportOverlayGizmo(边框/安全区),消除所有编辑类 Gizmo 的渲染与交互。
|
|
14
|
+
*
|
|
15
|
+
* 编辑类(transform/text/picture-cut/picture-expand/sprite-text-edit/mask/item-create/
|
|
16
|
+
* frame/auto-layout/selection snapping 等)不由 createGizmos 创建,因此不会进入当前实例图。
|
|
17
|
+
* 选区交互(选中/hover/框选)同样由 createGizmos 不创建选区子图而缺席;换图会先清 hover,
|
|
18
|
+
* 缺少 ChangeSelection 的新图不会按缓存指针重新提交命中,无需运行期 selectionEnabled flag。
|
|
19
|
+
* 非独立功能(isolated=false):不隔离 History 栈,
|
|
20
|
+
* stop 后切回原 State 恢复编辑能力。
|
|
21
|
+
*/
|
|
22
|
+
export declare class PlayState extends BaseState {
|
|
23
|
+
constructor();
|
|
24
|
+
}
|
|
25
|
+
/** Scene-specific Move State with Preference rendering in its Tool graph. */
|
|
26
|
+
export declare class SceneMoveState extends BaseState {
|
|
27
|
+
constructor();
|
|
28
|
+
}
|
|
29
|
+
export type { SceneSourceInput, SceneView };
|
|
30
|
+
/**
|
|
31
|
+
* SceneArtis 运行输入
|
|
32
|
+
*
|
|
33
|
+
* 三场景映射:
|
|
34
|
+
* - a 单产物直初始化:`sources: [{ url }]`
|
|
35
|
+
* - b 单产物 + 多视图 + 安全区:`sources: [{ url, views: [...] }]`
|
|
36
|
+
* - c 多产物直初始化:`sources: [{ url }, { url }, ...]`
|
|
37
|
+
*/
|
|
38
|
+
export type SceneArtisRunInput = {
|
|
39
|
+
/** Galacean/effects 产物源列表 */
|
|
40
|
+
sources: SceneSourceInput[];
|
|
41
|
+
/** 初始激活场景 id(缺省=第一个) */
|
|
42
|
+
activeSceneId?: string;
|
|
43
|
+
/** 可选:id→ArtisItemType 类型表,消除 GENERATOR/CARD/EFFECTS 歧义 */
|
|
44
|
+
typeTable?: ArtisItemTypeTable;
|
|
45
|
+
/** 展示标准产物:true 时首个 origin 场景只读(仅播放+选中查看,不可编辑) */
|
|
46
|
+
showStandardProduct?: boolean;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* SceneArtis 复现输入:用错误快照内的 sceneEntries 直接灌入重建多场景,绕过 SceneBuilder
|
|
50
|
+
* 重新自适应,保真还原 source/adapt/originScene/readonly/id 关联。
|
|
51
|
+
*/
|
|
52
|
+
export type SceneArtisReproduceInput = {
|
|
53
|
+
/** 快照场景数组(SceneEntrySnapshot 反序列化形态),至少一条 */
|
|
54
|
+
entries: SceneEntrySnapshot[];
|
|
55
|
+
/** 激活场景 id(缺省=首个 entry) */
|
|
56
|
+
activeSceneId?: string;
|
|
57
|
+
/** 首个 origin 标记只读(与 run 同语义,覆盖快照内 readonly 决策) */
|
|
58
|
+
showStandardProduct?: boolean;
|
|
59
|
+
/** 初始游标(缺省=0) */
|
|
60
|
+
sceneTime?: number;
|
|
61
|
+
/** 初始播放态(缺省=false) */
|
|
62
|
+
scenePlaying?: boolean;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* SceneArtis - effects-JSON 原生、场景驱动的画布编辑器
|
|
66
|
+
*
|
|
67
|
+
* 与编辑数据驱动的 {@link Artis} 平级,继承 {@link BaseArtis}。差异在数据层与初始化:
|
|
68
|
+
* - 数据真源是 {@link spec.JSONScene}(持久 + 动画),ArtisItem[] 是 runtime 组装的编辑模型
|
|
69
|
+
* - 一 JSON 可按自适应参数生成多场景;多 JSON 各成独立场景,同时只激活一个
|
|
70
|
+
* - 编辑经 Command 双向同步:先写 runtime VFXItem,再回写场景 JSON({@link JsonSceneSyncService})
|
|
71
|
+
* - 导出 = 取已同步的当前场景 JSON
|
|
72
|
+
*
|
|
73
|
+
* 仅未播放态(stop)可编辑。
|
|
74
|
+
*/
|
|
75
|
+
export declare class SceneArtis extends BaseArtis<SceneArtisRunInput> {
|
|
76
|
+
/** 多场景数据 + 会话状态中枢 */
|
|
77
|
+
readonly sceneStore: SceneStore;
|
|
78
|
+
/** JSON + runtime → ArtisItem 装配器 */
|
|
79
|
+
readonly sceneDataAssembler: SceneDataAssembler;
|
|
80
|
+
/** ArtisItem → JSONScene 回写服务 */
|
|
81
|
+
readonly jsonSceneSync: JsonSceneSyncService;
|
|
82
|
+
/**
|
|
83
|
+
* 编辑类命令清单(PlayState 等非编辑态须拦截)。系统类(scene.switch / selection.set /
|
|
84
|
+
* viewport.move/zoom / item.updateProperty 仅 name 等)放行——审计确认它们在播放/只读态也合法。
|
|
85
|
+
* 仅 item.updateProperty 的 name 改写归系统类放行,其余 item.updateProperty 字段属编辑类。
|
|
86
|
+
*/
|
|
87
|
+
private static readonly EDITABLE_COMMANDS;
|
|
88
|
+
private _sceneBuilder;
|
|
89
|
+
private _jsonSyncInstalled;
|
|
90
|
+
/** 在途场景切换链(序列化互斥:避免快速切场景时并发 apply 交错竞态,S15)。 */
|
|
91
|
+
private _switchChain;
|
|
92
|
+
/** JSON 回写 afterExecute 订阅的注销函数 */
|
|
93
|
+
private _disposeJsonSyncAfterExecute;
|
|
94
|
+
/** 播放进度同步订阅的注销函数(progress → SceneStore.time) */
|
|
95
|
+
private _disposeProgressSync;
|
|
96
|
+
/** 容器 resize 订阅注销函数(resize → 重算 contentRatio/pixelRatio 并刷新注入) */
|
|
97
|
+
private _disposeResizeSync;
|
|
98
|
+
/** play 前激活 State id,stop 时恢复(Play 态切换的内务记录) */
|
|
99
|
+
private _stateBeforePlay;
|
|
100
|
+
/** run/reproduce 进行中标志:互斥两者并发,防止 sceneStore/viewService 被并发写入串台 */
|
|
101
|
+
private _running;
|
|
102
|
+
/** undo/redo → JSON 回写的具名 handler(稳定引用,供 dispose 时 off 解绑,不依赖基类清空 listeners 的脆弱实现) */
|
|
103
|
+
private readonly _undoRedoJsonSyncHandler;
|
|
104
|
+
/**
|
|
105
|
+
* @override 一次性产出 SceneArtis 变体专属快照(与 variant: 'SceneArtis' tag 绑定返回):
|
|
106
|
+
* 全场景 JSONScene(scenes) + 结构快照(sceneEntries) + 激活场景 id + 选中元素 +
|
|
107
|
+
* 视图参数(widthRatio/heightRatio) + 播放游标/态 + 只读标记。
|
|
108
|
+
*
|
|
109
|
+
* 始终返回 SceneArtis tag(哪怕无场景数据),确保 info.artisVariant 与实际变体一致——
|
|
110
|
+
* 复现页据 hasEntries/hasScenes 自行决定能否重建。任一字段取值异常不阻断其余(尽力而为),
|
|
111
|
+
* 仅当整体抛错才由 ErrorMonitor._safeGet 兜底为缺省(退回 Artis 兜底)。
|
|
112
|
+
*/
|
|
113
|
+
protected _captureErrorSnapshot(): VariantErrorSnapshot;
|
|
114
|
+
/**
|
|
115
|
+
* 构造 SceneArtis 实例,初始化场景 store、装配器、JSON 回写服务与场景切换 Command。
|
|
116
|
+
* @param container 画布挂载的 DOM 容器。
|
|
117
|
+
* @param options 初始化选项(缺省取默认)。
|
|
118
|
+
*/
|
|
119
|
+
constructor(container: HTMLElement, options?: ArtisOptions);
|
|
120
|
+
/**
|
|
121
|
+
* 可编辑态守卫(S7):非编辑态(PlayState)下,编辑类命令抛 {@link IgnoredInteractionError} 拒绝。
|
|
122
|
+
* item.updateProperty 按 args 分流:改 name(args[1]==='name')放行,其余字段按编辑类拦截。
|
|
123
|
+
*/
|
|
124
|
+
protected _assertEditable(commandId: string, args?: unknown[]): void;
|
|
125
|
+
/** 注册只读查看态 / 播放态。 */
|
|
126
|
+
protected _registerExtraStates(): void;
|
|
127
|
+
/** 当前渲染场景 id */
|
|
128
|
+
get activeSceneId(): string | undefined;
|
|
129
|
+
/** 当前播放游标 */
|
|
130
|
+
get time(): number;
|
|
131
|
+
/** 播放态 */
|
|
132
|
+
get playing(): boolean;
|
|
133
|
+
/**
|
|
134
|
+
* 获取当前激活场景的 entry(含 scene + items)。
|
|
135
|
+
* @returns 当前激活场景 entry;若无激活场景返回 `undefined`。
|
|
136
|
+
*/
|
|
137
|
+
getActiveScene(): SceneEntry | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* 加载场景并启动渲染(入口方法)
|
|
140
|
+
*
|
|
141
|
+
* 阶段A:多场景构建(SceneBuilder)
|
|
142
|
+
* 阶段B:激活首个场景
|
|
143
|
+
* 阶段C:清旧注册表(首屏专属)+ _prepareGizmo(首屏一次性)
|
|
144
|
+
* 阶段D:统一加载收口 loadSceneEntry(加载+装配+视口+只读+Gizmo刷新+游标恢复,与切场景同路径)
|
|
145
|
+
* 阶段E:安装 JSON 同步 + _onReady
|
|
146
|
+
*/
|
|
147
|
+
run(input?: SceneArtisRunInput): Promise<void>;
|
|
148
|
+
/**
|
|
149
|
+
* 阶段A 公共:按需把首个 origin 标记只读(showStandardProduct),再把 entries 灌入 SceneStore,
|
|
150
|
+
* 统一打 scene-build 性能埋点。run(builder 产出 entries)与 reproduce(快照 entries)共享,
|
|
151
|
+
* 避免两路 addScene 循环 + 只读标记 + 埋点重复。
|
|
152
|
+
*/
|
|
153
|
+
private _hydrateScenes;
|
|
154
|
+
/**
|
|
155
|
+
* 阶段B~E 公共装配:激活指定场景 → 主 Player 加载 → 装配编辑模型 items → _prepareGizmo →
|
|
156
|
+
* resolver/主视口/只读态 → goto 游标 → 安装 JSON/进度/resize 同步 → _onReady。
|
|
157
|
+
*
|
|
158
|
+
* 抽离自 {@link run} 供 {@link reproduce} 复现入口共享,避免两条初始化路径重复装配逻辑
|
|
159
|
+
* 与重复安装同步订阅。
|
|
160
|
+
*
|
|
161
|
+
* @param activeId 激活场景 id(须已 addScene 进 store)
|
|
162
|
+
* @param typeTable 元素类型表(assemble 消歧用)
|
|
163
|
+
* @param time 初始游标;run 传 0,reproduce 传快照游标还原
|
|
164
|
+
* @param playing 初始播放态;run 传 false,reproduce 传快照播放态还原
|
|
165
|
+
*/
|
|
166
|
+
private _bootstrapActiveScene;
|
|
167
|
+
/**
|
|
168
|
+
* 复现入口:用快照内 sceneEntries 直接灌入 SceneStore 重建多场景,绕过 SceneBuilder.build
|
|
169
|
+
* 重新自适应,保真还原 source/adapt/originScene/readonly/id 关联。items 不从快照取——
|
|
170
|
+
* runtime 直接重新 assemble(与 run 一致路径)。
|
|
171
|
+
*
|
|
172
|
+
* 与 {@link run} 的区别:阶段A 由 SceneBuilder.build 改为快照 entries 直接灌入(无自适应重排、
|
|
173
|
+
* 原样保留结构字段);阶段B~E 复用 {@link _bootstrapActiveScene}。游标/播放态按快照还原
|
|
174
|
+
* (run 始终为 0/false)。
|
|
175
|
+
*
|
|
176
|
+
* 适用于 BugRepro 等复现工具:错误快照带了 sceneEntries 时走本方法保真复现;
|
|
177
|
+
* 快照仅有 scenes(JSONScene[]) 无结构字段时退回 {@link run}。
|
|
178
|
+
*/
|
|
179
|
+
reproduce(input: SceneArtisReproduceInput): Promise<void>;
|
|
180
|
+
/**
|
|
181
|
+
* 切换激活场景(通过 Command 纳入历史栈,支持 undo/redo)。
|
|
182
|
+
* 边界:目标 id 不存在或已是当前激活场景时直接返回,不产生 Command。
|
|
183
|
+
* @param sceneId 目标场景 id。
|
|
184
|
+
*/
|
|
185
|
+
switchScene(sceneId: string): void;
|
|
186
|
+
refreshContentScale(previewSize: spec.vec2, clipMode: spec.CameraClipMode): void;
|
|
187
|
+
/**
|
|
188
|
+
* 场景切换入口(被 SceneSwitchCommand 回调,index-based)。
|
|
189
|
+
*
|
|
190
|
+
* 经序列化互斥连到在途切换链尾:SceneSwitchCommand.execute/undo 为 sync 接口却触发异步 apply,
|
|
191
|
+
* 快速连发会并发交错 saveCurrentItems/setActiveIndex/loadSceneEntry 损坏状态。此处保证同一时刻
|
|
192
|
+
* 只有一个切换在执行,后续请求排队到前一个完成后串行执行。
|
|
193
|
+
* @param targetIndex 目标场景下标。
|
|
194
|
+
*/
|
|
195
|
+
private applySwitchSceneByIndex;
|
|
196
|
+
/**
|
|
197
|
+
* 实际执行场景切换(已由 {@link applySwitchSceneByIndex} 串行化保护,此处为单次切换本体)。
|
|
198
|
+
*
|
|
199
|
+
* 视口重初始化:ViewService 跨场景复用,须在加载新场景前清掉旧场景编辑会话遗留的 zoom/translation
|
|
200
|
+
* (assemble 经 getPixelSizeByViewSize 读 effectiveScale=zoom·contentRatio,zoom 残留会污染新场景
|
|
201
|
+
* items 装配)。ratios 无需手动归位——_initRendererWithScene 内 refreshContentScale 会按新场景
|
|
202
|
+
* contain-fit 几何同时落定两轴 ratio(contentRatio 取 clipMode 对应轴,由 sceneLoaded→setClipMode
|
|
203
|
+
* 维护),不残留旧场景值。reset 的 emit('change') 经 wiring 应用到 Player 与 ResizeSelectionGizmo,配
|
|
204
|
+
* _applyPreferenceViewport 重灌 ViewportOverlayGizmo;Gizmo 整体刷新由原生 pre-render 帧入口完成。
|
|
205
|
+
* @param targetIndex 目标场景下标。
|
|
206
|
+
*/
|
|
207
|
+
private _doApplySwitch;
|
|
208
|
+
/**
|
|
209
|
+
* 取当前激活场景的 items;无激活场景时回退到 store.items。
|
|
210
|
+
* @returns 当前激活场景的 ArtisItem 数组。
|
|
211
|
+
*/
|
|
212
|
+
protected _getActiveItems(): ArtisItem[];
|
|
213
|
+
/** context-lost 重建工厂:new 同类型 SceneArtis 实例 */
|
|
214
|
+
protected _createInstance(container: HTMLElement, options: ArtisOptions): SceneArtis;
|
|
215
|
+
/**
|
|
216
|
+
* 重载身份策略:SceneArtis 以 VFXItemId 为基准——artisItem.id 跟随 Player 分配的 instanceId,
|
|
217
|
+
* 即 id === vfxItemId === instanceId 全程成立,无需 registry 映射(加载 assemble / 恢复 reload /
|
|
218
|
+
* 会话内 createItem 三条路径一致)。Artis 保留基类默认的 RegistryIdentityStrategy。
|
|
219
|
+
*/
|
|
220
|
+
protected _createIdentityStrategy(): IdentityStrategy;
|
|
221
|
+
/**
|
|
222
|
+
* @override SceneArtis 用 SceneOperations 扩展基础 Operations——继承全部基础操作门面能力,
|
|
223
|
+
* 并追加 Scene 专属「导出场景 JSON」家族(基于 SceneStore 实时回写)。getter 类型仍为基类
|
|
224
|
+
* Operations(基类声明),消费侧需 Scene 专属方法时按 SceneOperations 取用。
|
|
225
|
+
*/
|
|
226
|
+
protected _createOperations(): Operations;
|
|
227
|
+
/**
|
|
228
|
+
* 从指定时间开始播放;缺省则从当前游标继续。进入播放态后禁止编辑。
|
|
229
|
+
* @param time 起始时间(秒);传 `undefined` 使用当前游标。
|
|
230
|
+
*/
|
|
231
|
+
play(time?: number): void;
|
|
232
|
+
/**
|
|
233
|
+
* 停止播放并跳转到指定时间(gotoAndStop),进入可编辑态。
|
|
234
|
+
* @param time 停止后停留的时间(秒);传 `undefined` 使用当前游标。
|
|
235
|
+
*/
|
|
236
|
+
stop(time?: number): void;
|
|
237
|
+
/**
|
|
238
|
+
* 跳转到指定时间,保持当前播放/停止态不变。
|
|
239
|
+
* @param time 目标时间(秒)。
|
|
240
|
+
*/
|
|
241
|
+
seek(time: number): void;
|
|
242
|
+
/**
|
|
243
|
+
* 切换播放态:`true` 调用 `play()`,`false` 调用 `stop()`(均使用当前游标)。
|
|
244
|
+
* @param playing 是否进入播放态。
|
|
245
|
+
*/
|
|
246
|
+
setPlaying(playing: boolean): void;
|
|
247
|
+
/**
|
|
248
|
+
* 开关:出血安全区显隐(联动 ViewportOverlayGizmo 的 safeArea 边带绘制)。
|
|
249
|
+
*
|
|
250
|
+
* 安全区数据由当前激活场景的 `adapt.safeArea` 提供({@link _applyPreferenceViewport} 写入 viewProperty),
|
|
251
|
+
* 显隐由本开关统一控制。经 GizmoManager.setPreference 设置(配置真源下沉 GizmoManager,
|
|
252
|
+
* 变更事件下放到 ViewportOverlayGizmo 实例)。
|
|
253
|
+
* @param enabled 是否显示安全区
|
|
254
|
+
*/
|
|
255
|
+
setSafeAreaEnabled(enabled: boolean): void;
|
|
256
|
+
/**
|
|
257
|
+
* 导出当前激活场景 JSON(已由 JsonSceneSyncService 实时回写,浅克隆保护)。
|
|
258
|
+
* @returns 当前激活场景 JSON;无激活场景时返回 `undefined`。
|
|
259
|
+
*/
|
|
260
|
+
exportScene(): spec.JSONScene | undefined;
|
|
261
|
+
/**
|
|
262
|
+
* 按 id 导出指定场景 JSON。
|
|
263
|
+
* @param id 目标场景 id。
|
|
264
|
+
* @returns 目标场景 JSON;id 不存在时返回 `undefined`。
|
|
265
|
+
*/
|
|
266
|
+
exportSceneById(id: string): spec.JSONScene | undefined;
|
|
267
|
+
/**
|
|
268
|
+
* 按 index 导出指定场景 JSON。
|
|
269
|
+
* @param index 目标场景下标。
|
|
270
|
+
* @returns 目标场景 JSON;越界时返回 `undefined`。
|
|
271
|
+
*/
|
|
272
|
+
exportSceneByIndex(index: number): spec.JSONScene | undefined;
|
|
273
|
+
/**
|
|
274
|
+
* 导出全部场景 JSON。
|
|
275
|
+
* @returns 全部场景 JSON 数组(按 store 顺序)。
|
|
276
|
+
*/
|
|
277
|
+
exportAllScenes(): spec.JSONScene[];
|
|
278
|
+
/**
|
|
279
|
+
* 主 Player 加载场景并按 previewSize contain-fit 适配进当前容器。
|
|
280
|
+
*
|
|
281
|
+
* @param entry 待加载的场景条目(取其 scene + previewSize)。
|
|
282
|
+
*/
|
|
283
|
+
private _initRendererWithScene;
|
|
284
|
+
/**
|
|
285
|
+
* 统一加载场景条目(首屏 run 与切场景 applySwitchSceneByIndex 的共享收口)。
|
|
286
|
+
*
|
|
287
|
+
* 对齐 run 现有正确顺序,把"主 Player 加载 → 装配 items → resolver/视口/只读态 → Gizmo 刷新 → 游标恢复"
|
|
288
|
+
* 收口为单一流程,保证任何一次加载 JSON 走同一链路。仅剔除首屏专属的 _prepareGizmo / clearElementRegistry /
|
|
289
|
+
* install* / _onReady(这些留在 run);切场景由调用方各自完成前置(saveCurrentItems / clearSelection /
|
|
290
|
+
* setActiveIndex / viewService.reset)后调本方法。
|
|
291
|
+
*
|
|
292
|
+
* 4B:末尾显式 syncAllItemsFromPlayer,不依赖 afterExecute 钩子隐式触发;Gizmo 由原生 pre-render 刷新。
|
|
293
|
+
*
|
|
294
|
+
* @param entry 待加载场景条目(取 scene + previewSize + clipMode)。
|
|
295
|
+
* @param typeTable 类型表(首屏 run 透传;切场景缺省走默认)。
|
|
296
|
+
* @param gotoTime 加载后恢复游标(首屏传 0;切场景缺省=当前 sceneStore.time)。
|
|
297
|
+
*/
|
|
298
|
+
private loadSceneEntry;
|
|
299
|
+
/**
|
|
300
|
+
* 解析场景的主视口预览尺寸。
|
|
301
|
+
*
|
|
302
|
+
* adapted 场景取自适应 viewSize;其余取 `compositions[0].previewSize`,回退 contentSize。
|
|
303
|
+
* @param entry 场景条目
|
|
304
|
+
* @returns [宽, 高]
|
|
305
|
+
*/
|
|
306
|
+
private _resolvePreviewSize;
|
|
307
|
+
/**
|
|
308
|
+
* 解析场景主合成的相机裁剪模式,供 refreshContentScale 决定 contentRatio 取宽/高轴。
|
|
309
|
+
*
|
|
310
|
+
* 取 `compositions[0].camera.clipMode`(createMaskScene 原样透传主合成 camera,故与
|
|
311
|
+
* player 加载、wiring setClipMode 同源),缺省回退 portrait(与 wiring.ts setClipMode 同口径)。
|
|
312
|
+
* @param entry 场景条目
|
|
313
|
+
* @returns portrait | landscape
|
|
314
|
+
*/
|
|
315
|
+
private _resolveClipMode;
|
|
316
|
+
/**
|
|
317
|
+
* 注入主视口展示参数到 ViewportOverlayGizmo:viewProperty(size/safeArea)。
|
|
318
|
+
*
|
|
319
|
+
* 主视口 box 不再由外部 provider 手算——{@link _addSceneMaskFrame} 加的遮罩画板 item 已使
|
|
320
|
+
* ViewportOverlayGizmo.onPreRender 走 isFramePlayerItem 分支,用 getItemViewBox(遮罩画板) 投影
|
|
321
|
+
* 算 box(与 loading/transform 同源),红框/安全区随相机/视口变换跟随。此处仅设 viewProperty,
|
|
322
|
+
* 供 safeArea/previewSafeAreas 的比例分母。
|
|
323
|
+
* @param entry 当前激活场景条目
|
|
324
|
+
*/
|
|
325
|
+
private _applyPreferenceViewport;
|
|
326
|
+
/**
|
|
327
|
+
* State 切换(play/stop 等)经 rebuildGizmos 重建 preference 实例后,按当前激活场景重灌
|
|
328
|
+
* viewProperty。preference 实例为全新、viewProperty 丢失,出血/安全区数据需现算重注入;
|
|
329
|
+
* box 仍由蒙版 item 投影(不依赖 viewProperty),故红框不受影响。无激活场景时跳过。
|
|
330
|
+
*/
|
|
331
|
+
private _reapplyPreferenceViewport;
|
|
332
|
+
/**
|
|
333
|
+
* 按场景只读标记切换交互态:只读场景切 ViewOnlyState(禁编辑手柄,仅播放+选中查看),
|
|
334
|
+
* 非只读场景从只读态退回默认 move 态。
|
|
335
|
+
* @param entry 当前激活场景条目
|
|
336
|
+
*/
|
|
337
|
+
private _applyReadonlyState;
|
|
338
|
+
/**
|
|
339
|
+
* 在已加载冻结的 composition 上装配 ArtisItem[](同步:主 Player 已 loadScene)。
|
|
340
|
+
* @param _scene 已加载的场景 JSON(实际从 runtime 取,参数仅作占位)。
|
|
341
|
+
* @returns 装配得到的 ArtisItem 数组。
|
|
342
|
+
*/
|
|
343
|
+
private _assembleScene;
|
|
344
|
+
/**
|
|
345
|
+
* 解析 JSON 源(对象直返,字符串按 URL fetch)。
|
|
346
|
+
* @param source JSON 对象或 URL 字符串。
|
|
347
|
+
* @returns 解析得到的 JSONScene。
|
|
348
|
+
*/
|
|
349
|
+
private _resolveScene;
|
|
350
|
+
/**
|
|
351
|
+
* 注入 SelectionManager resolver(指向激活场景 items)+ 同步 store.items。
|
|
352
|
+
* resolver 使选中 id 解析到当前激活场景的 ArtisItem,切场景时重新注入。
|
|
353
|
+
* @param entry 当前激活场景 entry。
|
|
354
|
+
*/
|
|
355
|
+
private _injectResolver;
|
|
356
|
+
/**
|
|
357
|
+
* 安装 JSON 回写:通过 afterExecute 多回调中继点追加 JSON 同步 + 监听 history.change。
|
|
358
|
+
*
|
|
359
|
+
* CommandService 支持 addAfterExecute 多订阅,基类的 syncAllItemsFromPlayer 与此处的
|
|
360
|
+
* JSON 回写互不覆盖。undo/itemDragEnd 走事件。
|
|
361
|
+
*/
|
|
362
|
+
private _installJsonSync;
|
|
363
|
+
/**
|
|
364
|
+
* 把当前 store.items(编辑模型)回写到激活场景 JSON
|
|
365
|
+
*/
|
|
366
|
+
private _syncActiveItemsToJson;
|
|
367
|
+
/**
|
|
368
|
+
* 安装播放进度同步:Player 播放时经 PlayerAdapter <code>progress</code> 事件上报 composition.time,
|
|
369
|
+
* 实时写回 {@link sceneStore}.time,使 stop()/seek() 取到的是实时游标而非初始 0。
|
|
370
|
+
*
|
|
371
|
+
* progress 仅在 PlayerAdapter 内部 <code>_playing=true</code> 时发出(stop 态早退),
|
|
372
|
+
* SceneStore.time setter 纯写无副作用——故无需额外 playing 守卫,无回环风险。
|
|
373
|
+
* 切场景时 Player 重新 loadScene,progress 继续按新 composition.time 上报,自动跟随。
|
|
374
|
+
*/
|
|
375
|
+
private _installProgressSync;
|
|
376
|
+
/**
|
|
377
|
+
* 安装容器 resize 同步:容器尺寸变化时重算 contentRatio/pixelRatio(contain-fit 比
|
|
378
|
+
* 依赖容器宽高)并刷新注入 ResizeSelectionGizmo,使 size 标签在 resize 后仍正确。
|
|
379
|
+
* 切场景/初始化由 _initRendererWithScene → refreshContentScale 已算首帧,此处覆盖 resize。
|
|
380
|
+
*/
|
|
381
|
+
private _installResizeSync;
|
|
382
|
+
/**
|
|
383
|
+
* 释放场景 store 资源并调用基类 dispose。
|
|
384
|
+
*/
|
|
385
|
+
dispose(): void;
|
|
386
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { spec } from '../shared';
|
|
2
|
+
/** 创建局部截图场景时的选项。 */
|
|
3
|
+
export type ScreenshotSceneOptions = {
|
|
4
|
+
/**
|
|
5
|
+
* 生成场景的预览尺寸 `[width, height]`。
|
|
6
|
+
*
|
|
7
|
+
* 缺省时由所选元素的像素包围盒自动计算;传入时用于固定场景宽高比和截图画布尺寸。
|
|
8
|
+
*/
|
|
9
|
+
sceneSize?: [number, number];
|
|
10
|
+
/** HTML Card 栅格化像素比,默认 2。 */
|
|
11
|
+
cardPixelRatio?: number;
|
|
12
|
+
};
|
|
13
|
+
/** 渲染已有 JSONScene 时的选项。 */
|
|
14
|
+
export type ScreenshotRenderOptions = {
|
|
15
|
+
/**
|
|
16
|
+
* 截图播放器画布尺寸 `[width, height]`。
|
|
17
|
+
*
|
|
18
|
+
* 缺省时读取场景主合成的 `previewSize`,场景未声明时回退为 `[750, 1624]`。
|
|
19
|
+
*/
|
|
20
|
+
containerSize?: [number, number];
|
|
21
|
+
/** 输出图片尺寸 `[width, height]`,缺省与 `containerSize` 相同。 */
|
|
22
|
+
size?: [number, number];
|
|
23
|
+
/** 截图时刻(秒),默认 0。 */
|
|
24
|
+
time?: number;
|
|
25
|
+
/** 输出背景色 `[r, g, b, a]`,缺省为透明。 */
|
|
26
|
+
backgroundColor?: spec.vec4;
|
|
27
|
+
};
|
|
28
|
+
/** 按元素 ID 直接生成截图时的选项。 */
|
|
29
|
+
export type ScreenshotGenerateOptions = ScreenshotSceneOptions & Omit<ScreenshotRenderOptions, 'containerSize'>;
|
|
30
|
+
/**
|
|
31
|
+
* Artis 截图服务。
|
|
32
|
+
*
|
|
33
|
+
* 该服务是截图流程的正式编排层:
|
|
34
|
+
* 1. 校验、去重并解析元素 ID;
|
|
35
|
+
* 2. 串行栅格化不属于 JSONScene 渲染树的 HTML Card;
|
|
36
|
+
* 3. 委托 {@link IOPlugin.createSceneByItemIds} 组装局部 JSONScene;
|
|
37
|
+
* 4. 使用独立的 {@link ScreenShot} Player 将 JSONScene 渲染为 PNG data URL。
|
|
38
|
+
*
|
|
39
|
+
* 推荐通过 `artis.screenshot` 使用。实例由 BaseArtis 持有并随 Artis 一起销毁,
|
|
40
|
+
* 业务方无需手动创建或释放底层 ScreenShot。
|
|
41
|
+
*/
|
|
42
|
+
export declare class ScreenshotService {
|
|
43
|
+
private readonly options;
|
|
44
|
+
private renderer?;
|
|
45
|
+
/**
|
|
46
|
+
* 根据元素 ID 创建可独立渲染的 JSONScene。
|
|
47
|
+
*
|
|
48
|
+
* 输入 ID 会去重,不存在的元素会被忽略;若最终没有有效元素则返回 `undefined`。
|
|
49
|
+
* HTML Card 会先按输入尺寸串行栅格化,并以 Sprite 快照写入场景。任一卡片
|
|
50
|
+
* 栅格化失败时整次创建失败,避免返回内容不完整但表面成功的场景。
|
|
51
|
+
*
|
|
52
|
+
* @param ids 单个元素 ID 或元素 ID 数组
|
|
53
|
+
* @param options 场景尺寸与 HTML Card 栅格化选项
|
|
54
|
+
* @returns 可独立渲染的 JSONScene;无有效元素或卡片栅格化失败时返回 `undefined`
|
|
55
|
+
*/
|
|
56
|
+
createSceneByItemIds(ids: string | string[], options?: ScreenshotSceneOptions): Promise<spec.JSONScene | undefined>;
|
|
57
|
+
/**
|
|
58
|
+
* 将已有 JSONScene 渲染为 PNG data URL。
|
|
59
|
+
*
|
|
60
|
+
* 截图使用服务内部懒创建的独立 Player,不会改变主 Artis Player 的播放时间、尺寸或状态。
|
|
61
|
+
* 同一 ScreenshotService 会复用该 Player,避免连续截图时重复初始化渲染上下文。
|
|
62
|
+
*
|
|
63
|
+
* @param scene 要渲染的 JSONScene
|
|
64
|
+
* @param options 截图播放器尺寸、输出尺寸、时间和背景色
|
|
65
|
+
* @returns PNG data URL
|
|
66
|
+
*/
|
|
67
|
+
generateScene(scene: spec.JSONScene, options?: ScreenshotRenderOptions): Promise<string>;
|
|
68
|
+
/**
|
|
69
|
+
* 根据元素 ID 创建局部场景并直接生成 PNG data URL。
|
|
70
|
+
*
|
|
71
|
+
* 这是常规元素截图的推荐入口,等价于依次调用
|
|
72
|
+
* {@link createSceneByItemIds} 与 {@link generateScene}。
|
|
73
|
+
*
|
|
74
|
+
* @param ids 单个元素 ID 或元素 ID 数组
|
|
75
|
+
* @param options 场景尺寸、输出尺寸、时间、背景色与卡片像素比
|
|
76
|
+
* @returns PNG data URL;无有效元素或 HTML Card 栅格化失败时返回 `undefined`
|
|
77
|
+
*/
|
|
78
|
+
generateByItemIds(ids: string | string[], options?: ScreenshotGenerateOptions): Promise<string | undefined>;
|
|
79
|
+
/** 释放截图 Player;重复调用安全。 */
|
|
80
|
+
dispose(): void;
|
|
81
|
+
/** 获取截图 Player 包装器,首次生成截图时才创建。 */
|
|
82
|
+
private getRenderer;
|
|
83
|
+
}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import type { ItemSchema, PagePreferences, ArtisBackgroundConfig, UserPreferences } from '../core/types';
|
|
2
|
+
import type { BaseArtisEvents } from '../core/types/artis-events';
|
|
3
|
+
import type { BaseState } from '../core/state';
|
|
4
|
+
import type { Box2 } from '@vvfx/gizmo';
|
|
5
|
+
import type { GizmoConfigOverride } from '../core/gizmo/gizmo-config-override';
|
|
6
|
+
import { BaseArtis } from './base-artis';
|
|
7
|
+
/** Artis 编辑态专属事件;不属于 BaseArtis 或 SceneArtis 的公共契约。 */
|
|
8
|
+
export type ArtisStateEvents = {
|
|
9
|
+
/** 任意编辑状态切换;source 为触发切换的业务入参。 */
|
|
10
|
+
'state.change': [previousState: BaseState | undefined, currentState: BaseState, source: any];
|
|
11
|
+
/** 图片裁切框变化。 */
|
|
12
|
+
'picture-cut.change': [info: {
|
|
13
|
+
box: Box2;
|
|
14
|
+
}];
|
|
15
|
+
/** 图片扩图框变化。 */
|
|
16
|
+
'picture-expand.change': [info: {
|
|
17
|
+
box: Box2;
|
|
18
|
+
}];
|
|
19
|
+
};
|
|
20
|
+
/** Artis 完整事件表:BaseArtis 公共事件与编辑态专属事件的组合。 */
|
|
21
|
+
export type ArtisEvents = BaseArtisEvents & ArtisStateEvents;
|
|
22
|
+
/**
|
|
23
|
+
* context-lost 恢复配置(同实例轻同步,非整实例重建)。
|
|
24
|
+
*
|
|
25
|
+
* 供 ArtisOptions.contextRecovery 声明式启用与 enableContextRecovery 编程式启用共用同一形状。
|
|
26
|
+
* Player 已 opt-in 自恢复,故无重试/退避参数——engine 在 webglcontextrestored 上就地重建 GPU 资源。
|
|
27
|
+
*/
|
|
28
|
+
export type ContextRecoveryOptions = {
|
|
29
|
+
/** context 丢失时的通知回调(同实例 this,引用未变)——lost 冷冻期已拦截 run 等写入,宿主可据此提示"正在恢复…" */
|
|
30
|
+
onLost?: (self: BaseArtis) => void;
|
|
31
|
+
/** 恢复就绪回调(同实例 this,引用未变,无需重接 monitor);contextRestored 事件负载含轻同步失败步骤 syncFailures */
|
|
32
|
+
onRecovered?: (self: BaseArtis) => void;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Artis 初始化选项
|
|
36
|
+
*/
|
|
37
|
+
export type ArtisOptions = {
|
|
38
|
+
/**
|
|
39
|
+
* 画布宽度(占位,未生效)。
|
|
40
|
+
* @deprecated 已声明但 BaseArtis/Renderer 从未读取(画布尺寸实际取容器 offsetWidth)。
|
|
41
|
+
* 如需固定尺寸请改容器 CSS;本字段后续将移除,勿依赖。
|
|
42
|
+
*/
|
|
43
|
+
width?: number;
|
|
44
|
+
/**
|
|
45
|
+
* 画布高度(占位,未生效)。
|
|
46
|
+
* @deprecated 同 {@link width},已声明但从未读取,后续将移除。
|
|
47
|
+
*/
|
|
48
|
+
height?: number;
|
|
49
|
+
/** 背景配置 */
|
|
50
|
+
background?: ArtisBackgroundConfig;
|
|
51
|
+
/**
|
|
52
|
+
* 是否启用线框渲染(占位,未生效)。
|
|
53
|
+
* @deprecated 已声明但从未读取(线框渲染未接线),后续将移除,勿依赖。
|
|
54
|
+
*/
|
|
55
|
+
enableWireframe?: boolean;
|
|
56
|
+
/** 是否启用历史记录,默认 true */
|
|
57
|
+
enableHistory?: boolean;
|
|
58
|
+
/** 历史记录最大长度,正整数(≥1),默认 100;非正数行为未定义,建议宿主自行钳位 */
|
|
59
|
+
maxHistoryLength?: number;
|
|
60
|
+
/** 要注册的 State ID 列表,对应官方预置状态,默认注册全部 */
|
|
61
|
+
states?: string[];
|
|
62
|
+
/** 初始状态 ID,默认 'move' */
|
|
63
|
+
defaultState?: string;
|
|
64
|
+
/**
|
|
65
|
+
* 插件列表(占位,未生效)。
|
|
66
|
+
* @deprecated 已声明但从未读取(插件经 PluginSystem 内部装配,非按此名称列表),后续将移除。
|
|
67
|
+
*/
|
|
68
|
+
plugins?: string[];
|
|
69
|
+
/** 偏好设置预配置(终端用户个人偏好:page/item/export 等,不含 gizmo 配置) */
|
|
70
|
+
preferences?: Partial<UserPreferences>;
|
|
71
|
+
/** Gizmo 配置初始化覆盖(平台/产品级默认),构造期一次性注入。 */
|
|
72
|
+
gizmoConfigs?: readonly GizmoConfigOverride[];
|
|
73
|
+
/** 是否开启性能监测(构造期即装配,采得到 INIT 段与完整 READY 总时长),默认 false。运行期亦可用 enablePerfMonitor 开启 */
|
|
74
|
+
perf?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* 元素尺寸 0 兜底尺寸 [width, height],默认 1024×1024。
|
|
77
|
+
*
|
|
78
|
+
* 外部传入显式 0 的 width/height 创建元素时,createItemCore 用此尺寸兜底(回写 property 落盘)
|
|
79
|
+
* 并 emit warning,避免 0 透传给 LoadingGizmo/interactionService 导致除零 NaN 挂死。运行期亦可用
|
|
80
|
+
* `artis.item...`(经 ItemService.setFallbackSize)调整。两分量均须 > 0。
|
|
81
|
+
*/
|
|
82
|
+
fallbackSize?: [number, number];
|
|
83
|
+
/**
|
|
84
|
+
* 编辑操作(建/删/改/加载资源)后 goto 的 playing 参数:
|
|
85
|
+
* `true`=gotoAndPlay(Artis 默认,编辑后继续播放),
|
|
86
|
+
* `false`=gotoAndStop(SceneArtis 默认,保持 stop 态可编辑)。
|
|
87
|
+
* 由 BaseArtis 透传给 Renderer 作为「编辑后渲染刷新」单一真源,服务层经 `renderer.gotoEdit()` 调用。缺省 true。
|
|
88
|
+
*/
|
|
89
|
+
editGotoPlaying?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* 自动恢复(WebGL context-lost)声明式配置。传入即在构造期自动启用 enableContextRecovery(同实例轻同步),
|
|
92
|
+
* 免去宿主单独调用;不传则不自动启用。形状与 enableContextRecovery 编程式入参一致({@link ContextRecoveryOptions})。
|
|
93
|
+
* 恢复就绪事件 contextRestored 带轻同步失败步骤 syncFailures;onLost/onRecovered 见该类型。
|
|
94
|
+
*/
|
|
95
|
+
contextRecovery?: ContextRecoveryOptions;
|
|
96
|
+
/**
|
|
97
|
+
* @deprecated 旧名字,语义误导(实际为同实例轻同步非 recreate)。别名指向 {@link contextRecovery},
|
|
98
|
+
* 构造期读取时 `contextRecovery ?? autoRecreate` 兼容旧宿主,后续版本将移除。
|
|
99
|
+
*/
|
|
100
|
+
autoRecreate?: ContextRecoveryOptions;
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* run() 方法的输入参数
|
|
104
|
+
*/
|
|
105
|
+
export type ArtisRunInput = {
|
|
106
|
+
/** 页面选项覆盖 */
|
|
107
|
+
options?: Partial<PagePreferences>;
|
|
108
|
+
/** 初始元素数据 */
|
|
109
|
+
items?: ItemSchema[];
|
|
110
|
+
/** 视口参数列表 */
|
|
111
|
+
viewParams?: ArtisViewParam[];
|
|
112
|
+
};
|
|
113
|
+
/**
|
|
114
|
+
* 视口参数(对应原 ViewParam)
|
|
115
|
+
*/
|
|
116
|
+
export type ArtisViewParam = {
|
|
117
|
+
/** 画布尺寸 [width, height],均须 >0(非正值会让下游 layout/viewport 计算产生 NaN/负 box) */
|
|
118
|
+
size: [number, number];
|
|
119
|
+
/** 导出配置 */
|
|
120
|
+
export?: {
|
|
121
|
+
/** 导出帧时间(秒,≥0;负值行为未定义) */
|
|
122
|
+
time?: number;
|
|
123
|
+
/** 是否包含音频 */
|
|
124
|
+
audioEnable?: boolean;
|
|
125
|
+
/** 导出文件名 */
|
|
126
|
+
name?: string;
|
|
127
|
+
};
|
|
128
|
+
/** 出血安全区 [top, right, bottom, left],各分量 ≥0;超出画布的值由下游裁剪,建议 0~size */
|
|
129
|
+
safeArea?: [number, number, number, number];
|
|
130
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artis 装配胶水层(wiring)。
|
|
3
|
+
*
|
|
4
|
+
* 这里只做「把 BaseArtis 已建好的核心服务接起来」的胶水工作——注册命令、激活插件、
|
|
5
|
+
* 绑定事件转发——不持有状态,也不构造任何服务,故所有函数都必须在 BaseArtis 构造装配完成后调用。
|
|
6
|
+
*
|
|
7
|
+
* 与 `register-commands`(把 core 的 Command 类按对外 id 绑进 CommandService)同属装配层,
|
|
8
|
+
* 一起收口在本子目录,使 `artis/` 顶层只剩门面、变体与对外契约。
|
|
9
|
+
*/
|
|
10
|
+
export { setupCommands } from './setup-commands';
|
|
11
|
+
export { setupPlugins } from './setup-plugins';
|
|
12
|
+
export { setupCoreEventBindings, setupSelectionBindings } from './setup-event-bindings';
|
|
13
|
+
export { registerCommands } from './register-commands';
|
|
14
|
+
export type { RegisterCommandsContext } from './register-commands';
|
|
15
|
+
export { setupKeyBindings } from './setup-keybindings';
|
|
16
|
+
export type { KeyBindingWiringContext } from './setup-keybindings';
|
|
17
|
+
export type { WiringContext } from './wiring-context';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ItemCreateType, Selection } from '@vvfx/gizmo';
|
|
2
|
+
import { CommandService, ItemService, ViewService, type Store, type StateManager } from '../../core';
|
|
3
|
+
/**
|
|
4
|
+
* 命令目标元素 id 提取器注册表(单一真源,F1)。
|
|
5
|
+
*
|
|
6
|
+
* 供 ignored-interaction 守卫按 commandId 查询命令携带的目标元素 id,使命令 args 形状与
|
|
7
|
+
* 守卫所需 id 提取同源维护——新增/改命令时只需在此登记一次,避免守卫侧另硬编码一份平行表
|
|
8
|
+
* (漏登记则守卫对该命令静默跳过,与未携带目标元素的命令行为一致)。
|
|
9
|
+
*
|
|
10
|
+
* 键受 {@link CommandRegistry} 约束(防 drift / typo),未登记命令缺省 undefined → 守卫跳过。
|
|
11
|
+
* 值读取对象 args 的具名字段(itemId / itemIds / childrenIds / groupId / newSelectedIds / frameId 等)。
|
|
12
|
+
* 模块加载即静态就绪(不依赖 registerCommands() 调用),消除初始化顺序耦合与多实例冗余填充。
|
|
13
|
+
* 返回 undefined 表示该命令不携带可校验的元素目标(如新建/视口操作),守卫跳过。
|
|
14
|
+
*/
|
|
15
|
+
export declare const COMMAND_TARGET_ID_EXTRACTORS: Partial<Record<string, (args: unknown) => string[] | undefined>>;
|
|
16
|
+
/**
|
|
17
|
+
* 注册命令所需的上下文依赖
|
|
18
|
+
*/
|
|
19
|
+
export type RegisterCommandsContext = {
|
|
20
|
+
/** 命令注册目标 */
|
|
21
|
+
commandService: CommandService;
|
|
22
|
+
/** 使用 getter 延迟获取,确保 itemService 初始化后可用 */
|
|
23
|
+
getItemService: () => ItemService;
|
|
24
|
+
/** 编辑数据 store */
|
|
25
|
+
store: Store;
|
|
26
|
+
/** 选中态真源 getter:Selection 由 GizmoManager 装配后才存在,命令工厂在装配后执行时按需求值 */
|
|
27
|
+
getSelection: () => Selection;
|
|
28
|
+
/** 视口服务 */
|
|
29
|
+
viewService: ViewService;
|
|
30
|
+
/** 交互状态管理器 getter:供 item.createInteractive 等切态命令用,gestureHandler 就绪后取值 */
|
|
31
|
+
getStateManager: () => StateManager;
|
|
32
|
+
getItemCreateType: () => ItemCreateType;
|
|
33
|
+
setItemCreateType: (value: ItemCreateType) => void;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* 注册所有预置 Commands 到 CommandService
|
|
37
|
+
*
|
|
38
|
+
* 将 Artis 构造函数中的 Command 注册逻辑抽离,便于维护与阅读。
|
|
39
|
+
* 工厂入参为<b>单参对象</b>(与 {@link ../../core/command/registry.ts | CommandRegistry} args 形状同源),
|
|
40
|
+
* 字段名与各 Command 的 XxxCommandArgs 对齐,工厂体可 spread 透传 `new XxxCommand({ ...args, deps })`,
|
|
41
|
+
* 删除原位置参数 `args[N] as T` cast 群。内部依赖(itemService/store/stateManager/applyXxx 等)由 wiring 注入。
|
|
42
|
+
* @param context 注册命令所需的上下文依赖。
|
|
43
|
+
*/
|
|
44
|
+
export declare function registerCommands(context: RegisterCommandsContext): void;
|