@volcengine/amk-editor 0.0.1 → 0.0.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -1
- package/dist/amk-editor.d.ts +107 -13
- package/dist/api/client.d.ts +11 -0
- package/dist/api/preset-library.d.ts +2 -0
- package/dist/api/project.d.ts +1 -0
- package/dist/assets/import-menu-chevron-down.svg +3 -0
- package/dist/assets/import-menu-local.svg +3 -0
- package/dist/assets/import-menu-system-arrow.svg +3 -0
- package/dist/assets/import-menu-system-cloud.svg +3 -0
- package/dist/assets/import-menu-url.svg +3 -0
- package/dist/export-modal.d.ts +15 -2
- package/dist/header.d.ts +3 -0
- package/dist/i18n/keys.d.ts +2 -0
- package/dist/import-actions-dropdown-view.d.ts +15 -0
- package/dist/import-actions.d.ts +13 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +66758 -46303
- package/dist/local-upload-modal.d.ts +1 -1
- package/dist/public-types.d.ts +5 -0
- package/dist/tos-upload.d.ts +46 -0
- package/dist/types.d.ts +89 -3
- package/dist/utils/material-extract.d.ts +9 -6
- package/dist/veveditor.css +202 -5
- package/package.json +8 -3
- package/third_party_notice.txt +25 -0
package/README.md
CHANGED
|
@@ -13,6 +13,11 @@ const editor = new AmkEditor({
|
|
|
13
13
|
container,
|
|
14
14
|
projectId: 'your-project-id',
|
|
15
15
|
endpoint: 'https://your-backend.example.com',
|
|
16
|
+
// 可选:每次请求前动态获取,SDK 不解析或改写返回的 Header。
|
|
17
|
+
getHeaders: async () => ({
|
|
18
|
+
Authorization: `Bearer ${await getLatestToken()}`,
|
|
19
|
+
'X-Customer-Id': 'your-customer-id',
|
|
20
|
+
}),
|
|
16
21
|
material: {
|
|
17
22
|
onUploadMaterial: async files => {
|
|
18
23
|
// 上传到业务存储后返回素材列表,每项必须带 source_material_id
|
|
@@ -30,14 +35,46 @@ const editor = new AmkEditor({
|
|
|
30
35
|
})),
|
|
31
36
|
},
|
|
32
37
|
});
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
// 外部工具栏可复用素材面板的同一套导入弹窗与入库链路。
|
|
41
|
+
editor.requestMaterialImport('local'); // 本地文件选择 + 本地上传确认弹窗
|
|
42
|
+
editor.requestMaterialImport('url'); // URL 上传弹窗
|
|
43
|
+
editor.requestMaterialImport('system'); // 业务资产库回调
|
|
44
|
+
|
|
45
|
+
// 只有这个外部调用触发的导入成功后才回调;编辑器自身的导入按钮不会触发它。
|
|
46
|
+
editor.requestMaterialImport('local', {
|
|
47
|
+
onMaterialsImported: materials => {
|
|
48
|
+
console.log('本次已入库素材', materials);
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// 从服务端重新拉取当前工程,并热更新素材与 Track(不写入撤销历史)。
|
|
53
|
+
await editor.refreshProject();
|
|
33
54
|
```
|
|
34
55
|
页面卸载时销毁:
|
|
35
56
|
```ts
|
|
36
57
|
editor.destroy();
|
|
37
58
|
```
|
|
38
59
|
## 接入说明
|
|
39
|
-
- `projectId`、`endpoint` 必填。`endpoint`
|
|
60
|
+
- `projectId`、`endpoint` 必填。`endpoint` 指向你的业务代理。
|
|
61
|
+
- `theme` 默认 `light`。未传或传入其他值时按浅色渲染;只有显式 `theme: 'dark'` 才走暗色。
|
|
62
|
+
- 产物是单文件 ESM。依赖里的 AMD `define(["./core"])` 已在构建时剔除,避免 Next.js / webpack 误解析不存在的 `dist/core.js`。
|
|
63
|
+
- `getHeaders` 可选,每次请求前都会重新调用;SDK 不解析、不缓存、不改写返回值,仅将其合并到发往 `endpoint` 的工程、素材、tools、tasks、导出等请求中。闭包内 Token 更新会自动用于下一次请求。
|
|
40
64
|
- 本地上传、URL 导入由业务回调完成。返回的素材必须带业务主键 `source_material_id`,不必填写 `material_id`。
|
|
41
65
|
- 播放地址、封面、雪碧图可能有时效。通过 `onRefreshPlayInfo` 返回新的访问地址。
|
|
66
|
+
- 可选实现 `onMaterialsImported`:素材成功入库后回调已合并 `material_id` 的列表;可用于把新素材挂到对话草稿。失败或取消不会触发。
|
|
42
67
|
- 可选实现 `onPersistExtractUrls`:把抽帧得到的临时地址转存为业务长期地址,并随 `materialPatch` 写回自定义存储字段。
|
|
43
68
|
- 可选配置 `export.qualityEnhancement: true` 以在导出弹窗展示「视频画质增强」;默认不展示。
|
|
69
|
+
- 可选配置 `header.mount` 为外部 DOM 节点,将顶栏渲染到该节点(而不是编辑器内部),便于宿主做全宽顶栏;`header.show: false` 仍可完全隐藏顶栏。
|
|
70
|
+
- 可选配置 `header.onTitleUpdateSuccess`:工程名 PATCH 成功后回调 `{ projectId, title }`。保存成功前编辑器继续展示旧名称;保存失败不会修改编辑器标题,也不会触发回调。
|
|
71
|
+
- `requestMaterialImport(type, options?)` 返回是否成功触发已配置入口;`local`、`url`、`system` 分别要求存在本地上传能力、`onUploadUrlMaterial`、`onUploadFromSystem`。外部入口不会复制上传逻辑,仍走素材面板相同的回调、TOS 签名、素材入库与元信息处理。可选的 `options.onMaterialsImported` 只对这一次外部触发有效,编辑器自身的导入按钮不会调用它。
|
|
72
|
+
- `toolbar.customItems` 的只读态不会自动置灰。需要禁用时在该项 `disabled({ readonly })` 里自行返回 true(例如 `disabled: ({ readonly }) => readonly`)。录音中仍会全局锁定自定义项。内置 ASR 按钮在只读时仍会禁用。
|
|
73
|
+
- `refreshProject()` 会等待当前保存队列结束,再重新拉取工程、刷新临时播放地址并热更新素材与 Track;远端 Track 不会写入本地撤销历史,也不会被自动保存回服务端。
|
|
74
|
+
## 样式隔离
|
|
75
|
+
SDK 会随 `import '@volcengine/amk-editor'` 自动注入样式,导航栏、左侧分类、素材网格的布局由 SDK 自己负责。**接入方不必再写补丁 CSS 才能让界面正常显示。**
|
|
76
|
+
编辑器挂在普通 DOM(`#track-video-editor`)里,不是 Shadow DOM。宿主页面里针对 `section` / `nav` / `aside` 的全局布局重置会穿透进来,把顶栏或左侧分类挤扁。
|
|
77
|
+
请避免:
|
|
78
|
+
- 对 `section`、`nav`、`aside` 写全局 `display` / `flex` / `height` / `margin` 规则。
|
|
79
|
+
- 用 `#track-video-editor nav { ... }` 这类按标签名锁定内部节点。同名标签在编辑器里用途不同,一条规则会同时打到顶栏和分类栏。
|
|
80
|
+
如需约束编辑器尺寸,只设置挂载容器或 `#track-video-editor` 本身的 `width` / `height` / `min-height`。
|
package/dist/amk-editor.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import './veveditor.css';
|
|
2
|
-
import type { AmkEditorOptions, AmkProjectSnapshot, MaterialItem, VeVeditorInstance } from './types';
|
|
2
|
+
import type { AmkMaterialImportType, AmkMaterialImportRequestOptions, AmkEditorOptions, AmkExportRequestResult, AmkProjectSnapshot, MaterialItem, VeVeditorInstance } from './types';
|
|
3
3
|
import { type AmkI18nInstance } from './i18n';
|
|
4
4
|
import { type AmkInvokeToolParams } from './api/client';
|
|
5
5
|
export declare class AmkEditor {
|
|
@@ -9,6 +9,8 @@ export declare class AmkEditor {
|
|
|
9
9
|
private editor?;
|
|
10
10
|
private layout?;
|
|
11
11
|
private exportModal?;
|
|
12
|
+
private exportRequestInFlight?;
|
|
13
|
+
private importActions?;
|
|
12
14
|
private asrProgressModal?;
|
|
13
15
|
private confirmModal?;
|
|
14
16
|
private emptyTrackConfirmInFlight?;
|
|
@@ -23,6 +25,7 @@ export declare class AmkEditor {
|
|
|
23
25
|
private emptyTrackSaveBlocked;
|
|
24
26
|
private savedMaterials;
|
|
25
27
|
private saveQueue;
|
|
28
|
+
private projectRefreshInFlight?;
|
|
26
29
|
private pendingSaveCount;
|
|
27
30
|
private readonly asrPollingControllers;
|
|
28
31
|
/** 当前前台 ASR 会话;取消、关闭或销毁后直接丢弃,不写入工程 JSON。 */
|
|
@@ -31,8 +34,18 @@ export declare class AmkEditor {
|
|
|
31
34
|
private readonly asrStartingElementIds;
|
|
32
35
|
/** sprite 抽帧任务轮询:key = material_id / source */
|
|
33
36
|
private readonly spritePollingControllers;
|
|
37
|
+
private readonly posterPollingControllers;
|
|
38
|
+
/** TOS 上传完成前的素材面板占位:key = source_material_id。 */
|
|
39
|
+
private readonly tosUploadPlaceholders;
|
|
34
40
|
/** 同一素材的封面/雪碧图转存结果串行写回,避免自定义字段互相覆盖。 */
|
|
35
41
|
private readonly materialPatchQueues;
|
|
42
|
+
/** 等待批量落盘的素材;同一素材在窗口内只保留合并后的最新状态。 */
|
|
43
|
+
private readonly pendingMaterialPatches;
|
|
44
|
+
/** 包含等待中和提交中的最新本地状态,用于合并跨批次的并发字段。 */
|
|
45
|
+
private readonly latestMaterialPatches;
|
|
46
|
+
private materialPatchBatchTimer?;
|
|
47
|
+
/** 批次串行提交,避免先发批次晚返回后覆盖更新批次。 */
|
|
48
|
+
private materialPatchFlushQueue;
|
|
36
49
|
/** 同一素材的 sprite 失败只处理一次,避免多个缩略图同时 403 重复建任务。 */
|
|
37
50
|
private readonly thumbnailErrorInFlight;
|
|
38
51
|
/** 前端抽帧封面缓存(不落盘):key = materialKey,value = dataURL */
|
|
@@ -43,6 +56,10 @@ export declare class AmkEditor {
|
|
|
43
56
|
private readonly posterCaptureControllers;
|
|
44
57
|
/** 启动时加载的内置预设资源,供编辑器面板和 ASR 字幕复用。 */
|
|
45
58
|
private presetLibrary;
|
|
59
|
+
/** 所有 TOS 素材共用一个刷新定时器,避免按素材创建大量 timer。 */
|
|
60
|
+
private tosSignedUrlRefreshTimer?;
|
|
61
|
+
private tosSignedUrlRefreshInFlight?;
|
|
62
|
+
private readonly handleVisibilityChange;
|
|
46
63
|
private readonly handleTrackChanged;
|
|
47
64
|
private readonly handleEditParamChanged;
|
|
48
65
|
constructor(options: AmkEditorOptions);
|
|
@@ -52,18 +69,44 @@ export declare class AmkEditor {
|
|
|
52
69
|
getI18n(): AmkI18nInstance;
|
|
53
70
|
/** 通用工具调用:POST /api/v1/tools/{toolName} */
|
|
54
71
|
invokeTool<T = unknown>(options: AmkInvokeToolParams): Promise<T>;
|
|
72
|
+
/**
|
|
73
|
+
* Opens the existing export modal and resolves after the user confirms or cancels.
|
|
74
|
+
* Intended for Agent frontend tools (`request_export_task`). Header export still
|
|
75
|
+
* uses `open()` + direct submit and is unchanged.
|
|
76
|
+
*/
|
|
77
|
+
requestExport(): Promise<AmkExportRequestResult>;
|
|
78
|
+
/**
|
|
79
|
+
* 从外部工具栏打开 AMK Editor 已配置的素材导入入口。
|
|
80
|
+
* 本地、URL、资产库均复用素材面板中的同一套弹窗、回调和入库链路。
|
|
81
|
+
* @returns 当前入口存在且已触发时返回 true;未配置或尚未挂载时返回 false。
|
|
82
|
+
*/
|
|
83
|
+
requestMaterialImport(type: AmkMaterialImportType, options?: AmkMaterialImportRequestOptions): boolean;
|
|
55
84
|
/**
|
|
56
85
|
* 获取工程全量参数(materials + editParam + projectName)。
|
|
57
86
|
* 从 VeVeditor 当前素材/草稿快照读取;未挂载时回落内置拉取到的快照。
|
|
58
87
|
*/
|
|
59
88
|
getProject(): AmkProjectSnapshot;
|
|
89
|
+
/**
|
|
90
|
+
* 从 Editing 工程接口重新拉取完整素材列表。
|
|
91
|
+
* 与 `getProject()` 的当前编辑器快照不同,该方法每次都会请求服务端,
|
|
92
|
+
* 适合素材引用面板等必须包含最新导出产物的场景。
|
|
93
|
+
*/
|
|
94
|
+
fetchProjectMaterials(): Promise<MaterialItem[]>;
|
|
95
|
+
/**
|
|
96
|
+
* 重新拉取服务端工程,并把最新素材与 Track 热更新到当前编辑器。
|
|
97
|
+
* 用于 Agent 完成远端编辑后刷新右侧预览;不会产生撤销记录,也不会把回灌事件再次保存到服务端。
|
|
98
|
+
*/
|
|
99
|
+
refreshProject(): Promise<AmkProjectSnapshot>;
|
|
100
|
+
private refreshProjectFromServer;
|
|
60
101
|
/**
|
|
61
102
|
* 刷新素材播放信息(按需触发,如播放前 / 初始化)。
|
|
62
|
-
* -
|
|
63
|
-
* -
|
|
103
|
+
* - TOS 直传素材会先使用临时 STS 重签私有对象 URL
|
|
104
|
+
* - 配置 `material.onRefreshPlayInfo` 后,宿主可继续覆盖播放字段
|
|
105
|
+
* - 两者都未配置时直接返回当前素材,不发请求
|
|
64
106
|
* @param materialIdOrIds 单个 material_id、material_id 列表;省略则刷新当前全部有 material_id 的素材
|
|
65
107
|
*/
|
|
66
108
|
refreshPlayInfo(materialIdOrIds?: string | string[]): Promise<MaterialItem | MaterialItem[] | undefined>;
|
|
109
|
+
private refreshPlayInfoInternal;
|
|
67
110
|
private bootstrap;
|
|
68
111
|
/** 内置拉取工程:project + materials + editor → 归一化 → 组装 initialData。 */
|
|
69
112
|
private resolveAndApplyProject;
|
|
@@ -72,8 +115,20 @@ export declare class AmkEditor {
|
|
|
72
115
|
* 再把轨道元素里的 URL 回填到最新值,完成后回写 editor 文档。
|
|
73
116
|
*/
|
|
74
117
|
private refreshProjectOnInit;
|
|
118
|
+
/** TOS 私有桶签名刷新优先,宿主刷新回调随后可继续覆盖播放信息。 */
|
|
119
|
+
private refreshMaterialTargets;
|
|
120
|
+
/**
|
|
121
|
+
* 将重签后的素材 URL 按 material_id 同步到轨道节点并重建媒体节点。
|
|
122
|
+
* URL 是运行时数据:保存工程,但不产生撤销步骤。
|
|
123
|
+
*/
|
|
124
|
+
private applyTrackMaterialUrls;
|
|
125
|
+
private getExpiringTosMaterialIds;
|
|
126
|
+
private scheduleTosSignedUrlRefresh;
|
|
127
|
+
private refreshExpiringTosUrls;
|
|
128
|
+
private readonly handlePreviewNodeRefresh;
|
|
75
129
|
private resolveAndApplyPresetLibrary;
|
|
76
|
-
mount(): VeVeditorInstance;
|
|
130
|
+
mount(): VeVeditorInstance | undefined;
|
|
131
|
+
private mountVeVeditor;
|
|
77
132
|
destroy(): void;
|
|
78
133
|
private resolveConfig;
|
|
79
134
|
/** 与 VeVeditor 同一套顶层扁平资源字段:boolean 面板开关 + 内部 xgplayer 组装 */
|
|
@@ -119,19 +174,48 @@ export declare class AmkEditor {
|
|
|
119
174
|
private finishAsrAndCreateTextTrack;
|
|
120
175
|
private startAsrPolling;
|
|
121
176
|
private startAsrTask;
|
|
177
|
+
private resolveLocalFileType;
|
|
178
|
+
private createTosUploadPlaceholder;
|
|
179
|
+
/** 资产库选中后立即展示 0% 上传占位卡片,写入素材库成功后再切换为完成态。 */
|
|
180
|
+
private addSystemTosImportPlaceholders;
|
|
181
|
+
private removeTosUploadPlaceholders;
|
|
182
|
+
private hasTosUploadPlaceholders;
|
|
183
|
+
private uploadTosMaterials;
|
|
184
|
+
private extractToolResult;
|
|
185
|
+
private requirePositiveNumber;
|
|
186
|
+
private waitForToolTask;
|
|
187
|
+
private probeAsyncMetadata;
|
|
188
|
+
private prepareTosMaterial;
|
|
189
|
+
/** 将业务资产库的原始条目归一化为 SDK 素材;TOS 地址随后由 SDK 自行签发。 */
|
|
190
|
+
private normalizeSystemMaterial;
|
|
191
|
+
/**
|
|
192
|
+
* 资产库选择的 TOS 条目:同步签发播放 URL 并补齐基础元信息。
|
|
193
|
+
* 入参应为已 normalize 的素材;poster/sprite 在正式素材入库后后台处理。
|
|
194
|
+
*/
|
|
195
|
+
private prepareSystemTosMaterials;
|
|
196
|
+
private ingestTosImportedMaterials;
|
|
122
197
|
/**
|
|
123
198
|
* 本地 / URL 上传入库后的统一收口:
|
|
124
199
|
* POST 远端素材库 → 按 sprite/poster 判断发起抽帧并 PUT 更新。
|
|
125
200
|
*/
|
|
126
201
|
private ingestImportedMaterials;
|
|
202
|
+
/**
|
|
203
|
+
* 通知宿主素材已入库。抽帧仍在后台进行,不阻塞对话引用。
|
|
204
|
+
*/
|
|
205
|
+
private notifyMaterialsImported;
|
|
127
206
|
/**
|
|
128
207
|
* 本地上传 / URL 上传完成后,将新素材 POST 到 Editing API。
|
|
129
|
-
*
|
|
130
|
-
*
|
|
208
|
+
* 先确保远端持久化并合并 Editing API 返回的 material_id;成功后调用方
|
|
209
|
+
* 才写入素材面板(业务不用传 material_id;不覆盖本地 source / kid / 预览字段)。
|
|
131
210
|
*/
|
|
132
211
|
private persistUploadedMaterials;
|
|
133
212
|
private isHttpUrl;
|
|
134
213
|
private resolveDisplayPoster;
|
|
214
|
+
/**
|
|
215
|
+
* DataURL 已上屏时保留到本次会话结束,HTTP poster 只负责落库。
|
|
216
|
+
* 没有前端预览或当前缓存也是 HTTP 时,才切换到新的 HTTP 地址。
|
|
217
|
+
*/
|
|
218
|
+
private cachePersistedPosterForDisplay;
|
|
135
219
|
private withDisplayPosters;
|
|
136
220
|
private blobToDataUrl;
|
|
137
221
|
/** AMK 视频抽帧:指定第 0 帧并轮询任务结果。 */
|
|
@@ -140,9 +224,13 @@ export declare class AmkEditor {
|
|
|
140
224
|
private captureVideoPosterFromFrontend;
|
|
141
225
|
private isThumbnailFrontendDecodeEnabled;
|
|
142
226
|
/**
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
|
|
227
|
+
* 浏览器先解一帧仅作会话展示(DataURL 不落库)。
|
|
228
|
+
* 正式封面仍由 AMK 接口返回的 HTTP URL 负责持久化。
|
|
229
|
+
*/
|
|
230
|
+
private previewPosterFromFrontend;
|
|
231
|
+
/**
|
|
232
|
+
* 正式封面只走 AMK 抽帧接口;返回可落库的 HTTP URL。
|
|
233
|
+
* 前端预览由 {@link previewPosterFromFrontend} 并行触发。
|
|
146
234
|
*/
|
|
147
235
|
private captureVideoPosterFromUrl;
|
|
148
236
|
/**
|
|
@@ -159,24 +247,30 @@ export declare class AmkEditor {
|
|
|
159
247
|
* 统一入口:初始化 / 本地上传 / URL 上传拿到素材后,按 sprite/poster 判断是否抽帧。
|
|
160
248
|
* - sprite / poster 缺失或 auth_key 过期:重新抽帧
|
|
161
249
|
* - http 结果:先临时链上屏/PUT;若配置 onPersistExtractUrls 则后台转存换链
|
|
162
|
-
* -
|
|
163
|
-
* - enableThumbnailDecode=true:跳过 sprite
|
|
250
|
+
* - 封面:浏览器可并行解一帧作会话预览(DataURL 不落盘);正式封面始终走 AMK 接口 URL 落库
|
|
251
|
+
* - enableThumbnailDecode=true:跳过 sprite 接口,轨道缩略图走前端解码
|
|
164
252
|
*/
|
|
165
253
|
private ensureMaterialExtractTasks;
|
|
166
254
|
private createExtractFramesTask;
|
|
167
255
|
private startSpritePolling;
|
|
256
|
+
private startPosterPolling;
|
|
168
257
|
private buildSpriteFromExtractResult;
|
|
169
258
|
private extractFirstSnapshotUrl;
|
|
170
259
|
/**
|
|
171
|
-
* 时间轴 sprite 真实请求失败后的兜底:不解析 URL 的签名格式,直接以 Image.onerror 为准。
|
|
172
|
-
* 先让业务通过 onRefreshPlayInfo
|
|
260
|
+
* 时间轴 sprite / 素材库 poster 真实请求失败后的兜底:不解析 URL 的签名格式,直接以 Image.onerror 为准。
|
|
261
|
+
* 先让业务通过 onRefreshPlayInfo 更新素材;刷新后仍没有新地址,再重新抽帧。
|
|
173
262
|
*/
|
|
174
263
|
private handleThumbnailError;
|
|
264
|
+
/** 兼容时间轴元素与素材库 sketch 项,定位失败资源所属素材。 */
|
|
265
|
+
private resolveMaterialFromThumbnailError;
|
|
175
266
|
private findMaterialByKey;
|
|
176
267
|
private applyMaterialToPanel;
|
|
177
268
|
private enqueueMaterialPatch;
|
|
178
269
|
private patchMaterialRemote;
|
|
270
|
+
private flushPendingMaterialPatches;
|
|
179
271
|
private clearSpriteTimer;
|
|
180
272
|
private clearSpritePollingTimers;
|
|
273
|
+
private clearPosterTimer;
|
|
274
|
+
private clearPosterPollingTimers;
|
|
181
275
|
}
|
|
182
276
|
export declare function createAmkEditor(options: AmkEditorOptions): AmkEditor;
|
package/dist/api/client.d.ts
CHANGED
|
@@ -1,17 +1,28 @@
|
|
|
1
|
+
import type { AmkEditorGetHeaders } from '../types';
|
|
1
2
|
export type AmkApiClientOptions = {
|
|
2
3
|
endpoint: string;
|
|
4
|
+
/** 每次请求前动态获取并原样透传给客户业务代理的请求头。 */
|
|
5
|
+
getHeaders?: AmkEditorGetHeaders;
|
|
6
|
+
/** 调用 tools 接口时写入请求体的产物存储目标,例如 `tos://bucket`。 */
|
|
7
|
+
mediaOutputDestination?: string;
|
|
3
8
|
};
|
|
4
9
|
export type AmkInvokeToolParams = {
|
|
5
10
|
toolName: string;
|
|
6
11
|
params?: Record<string, unknown>;
|
|
12
|
+
/** 默认注入配置的产物存储目标;纯探测类工具应设为 false。 */
|
|
13
|
+
includeMediaOutputDestination?: boolean;
|
|
7
14
|
headers?: Record<string, string>;
|
|
8
15
|
signal?: AbortSignal;
|
|
9
16
|
};
|
|
10
17
|
export declare class AmkApiClient {
|
|
11
18
|
private readonly baseUrl;
|
|
19
|
+
private readonly getHeaders?;
|
|
20
|
+
private readonly mediaOutputDestination?;
|
|
12
21
|
constructor(options: AmkApiClientOptions);
|
|
13
22
|
getBaseUrl(): string;
|
|
14
23
|
invokeTool<T = unknown>(options: AmkInvokeToolParams): Promise<T>;
|
|
24
|
+
invokeSyncTool<T = unknown>(options: AmkInvokeToolParams): Promise<T>;
|
|
25
|
+
private mergeToolParams;
|
|
15
26
|
/**
|
|
16
27
|
* 查询异步任务:GET /api/v1/tasks/{task_id}
|
|
17
28
|
* @see https://docs.volcengine.com/docs/6448/2278532
|
|
@@ -5,6 +5,8 @@ export type PresetLibraryItem = {
|
|
|
5
5
|
name: string;
|
|
6
6
|
icon_url: string;
|
|
7
7
|
package_url: string;
|
|
8
|
+
/** 滤镜分类;无显式 categories 时 SDK 按 tag 聚合侧栏(值即分类名)。 */
|
|
9
|
+
tag?: string;
|
|
8
10
|
default?: boolean;
|
|
9
11
|
};
|
|
10
12
|
export type PresetLibrary = Partial<Record<PresetLibraryResourceKey, PresetLibraryItem[]>>;
|
package/dist/api/project.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ export type SavedAmkEditor = {
|
|
|
8
8
|
revision: number;
|
|
9
9
|
editParam: Record<string, unknown>;
|
|
10
10
|
};
|
|
11
|
+
export declare function fetchAmkProjectMaterials(client: EditingApiClient, projectId: string): Promise<MaterialItem[]>;
|
|
11
12
|
export declare function fetchAmkProject(client: EditingApiClient, projectId: string): Promise<LoadedAmkProject>;
|
|
12
13
|
export declare function updateAmkProjectName(client: EditingApiClient, projectId: string, projectName: string): Promise<void>;
|
|
13
14
|
/**
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg preserveAspectRatio="none" overflow="visible" style="display: block;" width="7.74994" height="4.24997" viewBox="0 0 7.74994 4.24997" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path id="Vector (Stroke)" d="M7.10984 0.109835C7.25628 -0.0366117 7.49366 -0.0366116 7.64011 0.109835C7.78656 0.256282 7.78656 0.493662 7.64011 0.640108L4.14011 4.14011C4.06978 4.21043 3.97443 4.24997 3.87497 4.24997C3.77552 4.24997 3.68016 4.21043 3.60983 4.14011L0.109835 0.640108C-0.0366116 0.493662 -0.0366117 0.256282 0.109835 0.109835C0.256282 -0.0366116 0.493662 -0.0366117 0.640108 0.109835L3.87497 3.3447L7.10984 0.109835Z" fill="#101013"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg preserveAspectRatio="none" overflow="visible" style="display: block;" width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path id="Vector (Stroke)" d="M1.07402e-06 8.58474V7.84615C1.07402e-06 7.59125 0.206639 7.38461 0.461539 7.38461C0.71644 7.38461 0.923078 7.59125 0.923078 7.84615V8.58474C0.923078 9.10926 0.923257 9.47494 0.946515 9.75961C0.969334 10.0389 1.012 10.1994 1.07392 10.3209C1.20667 10.5814 1.41856 10.7933 1.67909 10.9261C1.80063 10.988 1.96111 11.0307 2.24039 11.0535C2.52506 11.0767 2.89074 11.0769 3.41527 11.0769H8.58474C9.10926 11.0769 9.47494 11.0767 9.75962 11.0535C10.0389 11.0307 10.1994 10.988 10.3209 10.9261C10.5814 10.7933 10.7933 10.5814 10.9261 10.3209C10.988 10.1994 11.0307 10.0389 11.0535 9.75961C11.0767 9.47494 11.0769 9.10926 11.0769 8.58474V7.84615C11.0769 7.59125 11.2836 7.38461 11.5385 7.38461C11.7934 7.38461 12 7.59125 12 7.84615V8.58474C12 9.09402 12.0006 9.50376 11.9736 9.83473C11.9461 10.1711 11.8875 10.4664 11.7482 10.7398C11.5269 11.174 11.174 11.5269 10.7398 11.7482C10.4664 11.8875 10.1711 11.9461 9.83474 11.9736C9.50376 12.0006 9.09402 12 8.58474 12H3.41527C2.90598 12 2.49624 12.0006 2.16527 11.9736C1.82889 11.9461 1.53357 11.8875 1.26022 11.7482C0.825997 11.5269 0.47305 11.174 0.251804 10.7398C0.112532 10.4664 0.0539263 10.1711 0.0264434 9.83473C-0.000595874 9.50376 1.01767e-06 9.09402 1.07402e-06 8.58474ZM5.53846 7.84615V1.57572L3.2494 3.86478C3.06916 4.04503 2.777 4.04503 2.59676 3.86478C2.41651 3.68454 2.41651 3.39238 2.59676 3.21214L5.67368 0.135216L5.74399 0.077524C5.81925 0.0273516 5.90821 1.16544e-07 6 0C6.12241 0 6.23977 0.0486612 6.32632 0.135216L9.40324 3.21214C9.58349 3.39238 9.58349 3.68454 9.40324 3.86478C9.223 4.04503 8.93084 4.04503 8.7506 3.86478L6.46154 1.57572V7.84615C6.46154 8.10105 6.2549 8.30769 6 8.30769C5.7451 8.30769 5.53846 8.10105 5.53846 7.84615Z" fill="#101013"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg preserveAspectRatio="none" overflow="visible" style="display: block;" width="4.41019" height="5.64103" viewBox="0 0 4.41019 5.64103" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path id="Vector (Stroke)" d="M1.74355 1.57572V5.17949C1.74355 5.43439 1.95019 5.64103 2.20509 5.64103C2.45999 5.64102 2.66663 5.43439 2.66663 5.17949V1.57572L3.62236 2.53145C3.8026 2.71169 4.09476 2.71169 4.275 2.53145C4.45525 2.35121 4.45525 2.05905 4.275 1.87881L2.53141 0.135216C2.44486 0.0486612 2.3275 0 2.20509 0C2.11331 0 2.02434 0.0273516 1.94908 0.077524L1.87877 0.135216L0.135181 1.87881C-0.0450605 2.05905 -0.0450605 2.35121 0.135181 2.53145C0.315423 2.71169 0.607583 2.71169 0.787825 2.53145L1.74355 1.57572Z" fill="#101013"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg preserveAspectRatio="none" overflow="visible" style="display: block;" width="13.0093" height="9.54572" viewBox="0 0 13.0093 9.54572" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path id="Vector" d="M0.721682 6.03213C0.52041 5.42761 0.459347 4.78521 0.54312 4.15359C0.626893 3.52197 0.853304 2.9177 1.2052 2.38655C1.5571 1.85539 2.02527 1.41128 2.57422 1.08786C3.12318 0.764439 3.73855 0.570185 4.3737 0.519811C5.00886 0.469438 5.64715 0.564267 6.24022 0.797115C6.8333 1.02996 7.36561 1.39472 7.79684 1.86377C8.22806 2.33282 8.54689 2.89384 8.72918 3.50436H9.80292C10.3821 3.5043 10.9459 3.69051 11.4111 4.0355C11.8763 4.38049 12.2183 4.86596 12.3864 5.42019C12.5545 5.97443 12.5399 6.56804 12.3447 7.11334C12.1496 7.65863 11.9344 8.0263 11.119 8.57093C10.3036 9.11555 7.8181 9.03484 7.8181 9.03484" stroke="black" stroke-width="1.01333" stroke-linecap="round" stroke-linejoin="round"/>
|
|
3
|
+
</svg>
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
<svg preserveAspectRatio="none" overflow="visible" style="display: block;" width="12.9997" height="12.9998" viewBox="0 0 12.9997 12.9998" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path id="Vector (Stroke)" d="M2.2056 5.58315C2.40085 5.38809 2.71742 5.38803 2.91263 5.58315C3.10783 5.77836 3.10772 6.09491 2.91263 6.29018L1.78633 7.41649C0.737757 8.46506 0.737873 10.165 1.78633 11.2134C2.8348 12.2618 4.53519 12.2618 5.58385 11.2134L6.70885 10.0877C6.90402 9.89237 7.22053 9.89192 7.41589 10.0871C7.61124 10.2822 7.61106 10.5987 7.41589 10.7941L6.29154 11.9204H6.29089C4.85194 13.3591 2.51846 13.3598 1.0793 11.921C-0.359868 10.482 -0.359663 8.14842 1.0793 6.70946L2.2056 5.58315ZM8.39896 3.89435C8.59424 3.69931 8.91081 3.69916 9.10599 3.89435C9.30115 4.08954 9.30101 4.40611 9.10599 4.60138L4.60143 9.10594C4.40622 9.30104 4.08964 9.301 3.8944 9.10594C3.69918 8.91071 3.69925 8.59417 3.8944 8.39891L8.39896 3.89435ZM6.70951 1.07925C8.14865 -0.359805 10.4814 -0.359693 11.9204 1.07925C13.3595 2.51826 13.3595 4.85116 11.9204 6.29018L10.7948 7.41649C10.5996 7.61156 10.283 7.61163 10.0878 7.41649C9.89259 7.22128 9.89266 6.90473 10.0878 6.70946L11.2134 5.58315L11.3085 5.48289C12.2608 4.42893 12.2292 2.80199 11.2134 1.78628C10.1648 0.737765 8.46506 0.73782 7.41654 1.78628L6.29024 2.91193C6.09497 3.10719 5.77846 3.1072 5.5832 2.91193C5.38805 2.71665 5.38797 2.40012 5.5832 2.2049L6.70951 1.07925Z" fill="#101013"/>
|
|
3
|
+
</svg>
|
package/dist/export-modal.d.ts
CHANGED
|
@@ -12,7 +12,20 @@ export interface ExportModalController {
|
|
|
12
12
|
open: () => void;
|
|
13
13
|
close: () => void;
|
|
14
14
|
destroy: () => void;
|
|
15
|
+
/**
|
|
16
|
+
* Opens the modal and waits for the user to confirm or cancel.
|
|
17
|
+
* Confirmed results are returned to the caller and do not invoke `onConfirm`
|
|
18
|
+
* (callers such as Agent tools own the submit path). Header `open()` still
|
|
19
|
+
* uses `onConfirm` for the direct-export path.
|
|
20
|
+
*/
|
|
21
|
+
request: () => Promise<ExportModalRequestResult>;
|
|
15
22
|
}
|
|
23
|
+
export type ExportModalRequestResult = {
|
|
24
|
+
status: 'confirmed';
|
|
25
|
+
params: ExportVideoParams;
|
|
26
|
+
} | {
|
|
27
|
+
status: 'cancel';
|
|
28
|
+
};
|
|
16
29
|
type SelectOption<T extends string> = {
|
|
17
30
|
label: string;
|
|
18
31
|
value: T;
|
|
@@ -21,7 +34,7 @@ type SelectOption<T extends string> = {
|
|
|
21
34
|
export declare const QUALITY_TOOLTIP = "AI MediaKit \u753B\u8D28\u589E\u5F3A\u96C6\u6210\u667A\u80FD\u8D85\u5206\u3001\u63D2\u5E27\u3001\u753B\u9762\u589E\u5F3A\u3001\u81EA\u9002\u5E94\u9510\u5316\u3001\u8272\u5F69\u589E\u5F3A\u7B49 30+ \u9AD8\u8D28\u91CF\u7B97\u6CD5\uFF0C\u7ED3\u5408\u81EA\u7814\u89C6\u9891\u5185\u5BB9\u7406\u89E3\u4E0E\u667A\u80FD\u8C03\u5EA6\uFF0C\u6309\u573A\u666F\u81EA\u52A8\u62E9\u4F18\u8C03\u7528\uFF0C\u5168\u9762\u63D0\u5347\u89C6\u9891\u753B\u8D28\u3002";
|
|
22
35
|
export declare function getBaseResolutions(t: AmkI18nInstance['t']): SelectOption<ExportVideoParams['resolution']>[];
|
|
23
36
|
/** 画质增强开启后的分辨率:不含原画;大模型版不含 4K */
|
|
24
|
-
export declare function getEnhancedResolutions(
|
|
37
|
+
export declare function getEnhancedResolutions(_t: AmkI18nInstance['t'], enhancementVersion?: ExportVideoParams['enhancementVersion']): SelectOption<ExportVideoParams['resolution']>[];
|
|
25
38
|
/** 当前模式下合法分辨率;非法时回落到默认项 */
|
|
26
39
|
export declare function normalizeExportResolution(params: Pick<ExportVideoParams, 'qualityEnhancement' | 'enhancementVersion' | 'resolution'>, t?: AmkI18nInstance['t']): ExportVideoParams['resolution'];
|
|
27
40
|
export declare function getEnhancementVersions(t: AmkI18nInstance['t']): SelectOption<ExportVideoParams['enhancementVersion']>[];
|
|
@@ -41,7 +54,7 @@ export declare function createDefaultExportVideoParams(videoName: string): Expor
|
|
|
41
54
|
/** 导出帧率合法区间(含端点) */
|
|
42
55
|
export declare const EXPORT_FRAME_RATE_MIN = 15;
|
|
43
56
|
export declare const EXPORT_FRAME_RATE_MAX = 120;
|
|
44
|
-
/** 将导出帧率钳制到 15~120;非法输入回落
|
|
57
|
+
/** 将导出帧率钳制到 15~120;非法输入回落 24 */
|
|
45
58
|
export declare function normalizeExportFrameRate(frameRate: unknown): number;
|
|
46
59
|
export declare function toggleQualityEnhancement(params: ExportVideoParams, enabled: boolean): ExportVideoParams;
|
|
47
60
|
export declare function createExportModal(options: CreateExportModalOptions): ExportModalController;
|
package/dist/header.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export interface CreateAmkEditorLayoutOptions {
|
|
|
9
9
|
title: string;
|
|
10
10
|
theme?: 'light' | 'dark';
|
|
11
11
|
showHeader: boolean;
|
|
12
|
+
/** When set, append the header here instead of inside the editor root. */
|
|
13
|
+
headerMount?: HTMLElement;
|
|
12
14
|
onExport: () => void;
|
|
13
15
|
/** 传入则展示返回按钮 */
|
|
14
16
|
onBack?: () => void;
|
|
@@ -21,6 +23,7 @@ export type AmkSaveStatus = 'saving' | 'saved';
|
|
|
21
23
|
export interface AmkEditorLayout {
|
|
22
24
|
root: HTMLDivElement;
|
|
23
25
|
workspace: HTMLDivElement;
|
|
26
|
+
setTitle: (title: string) => void;
|
|
24
27
|
setSaveStatus: (status: AmkSaveStatus) => void;
|
|
25
28
|
destroy: () => void;
|
|
26
29
|
}
|
package/dist/i18n/keys.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export declare const AMK_I18N_KEYS: {
|
|
|
23
23
|
readonly import: {
|
|
24
24
|
readonly local: "amk.import.local";
|
|
25
25
|
readonly url: "amk.import.url";
|
|
26
|
+
readonly system: "amk.import.system";
|
|
27
|
+
readonly action: "amk.import.action";
|
|
26
28
|
};
|
|
27
29
|
readonly localUpload: {
|
|
28
30
|
readonly title: "amk.localUpload.title";
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ImportDropdownAction {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
onSelect: () => void;
|
|
6
|
+
}
|
|
7
|
+
export interface ImportActionsDropdownViewProps {
|
|
8
|
+
actions: ImportDropdownAction[];
|
|
9
|
+
label: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* “导入”是固定的操作入口,而非表单选择值:菜单项点击后只触发对应回调。
|
|
13
|
+
* selection="none" 同时确保组件不会维护选中态或展示勾选图标。
|
|
14
|
+
*/
|
|
15
|
+
export declare function ImportActionsDropdownView({ actions, label, }: ImportActionsDropdownViewProps): React.ReactElement;
|
package/dist/import-actions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MaterialItem } from './types';
|
|
1
|
+
import type { AmkMaterialImportType, AmkMaterialImportRequestOptions, MaterialItem, SystemMaterialItem } from './types';
|
|
2
2
|
import type { AmkI18nInstance } from './i18n';
|
|
3
3
|
interface MountImportActionsOptions {
|
|
4
4
|
/** AMKEditor 自己的浮层容器;按钮仍挂在 VeVeditor 提供的工具栏插槽中。 */
|
|
@@ -6,9 +6,19 @@ interface MountImportActionsOptions {
|
|
|
6
6
|
uploadAccept?: string;
|
|
7
7
|
onUploadMaterial?: (files: File[]) => Promise<MaterialItem[]> | MaterialItem[];
|
|
8
8
|
onUploadUrlMaterial?: (urls: string[]) => Promise<MaterialItem[]> | MaterialItem[];
|
|
9
|
-
|
|
9
|
+
onUploadFromSystem?: () => Promise<SystemMaterialItem[] | undefined | null> | SystemMaterialItem[] | undefined | null;
|
|
10
|
+
onMaterialsImported: (materials: SystemMaterialItem[]) => MaterialItem[] | Promise<MaterialItem[]>;
|
|
10
11
|
t?: AmkI18nInstance['t'];
|
|
11
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* 素材面板按钮与外部入口共用的控制器。保留可调用的 cleanup 形态,兼容已有
|
|
15
|
+
* `renderImportActions` 挂载协议;外部入口通过 trigger 复用完全相同的导入链路。
|
|
16
|
+
*/
|
|
17
|
+
export type ImportActionsController = (() => void) & {
|
|
18
|
+
hasAction: (type: AmkMaterialImportType) => boolean;
|
|
19
|
+
trigger: (type: AmkMaterialImportType, options?: AmkMaterialImportRequestOptions) => boolean;
|
|
20
|
+
destroy: () => void;
|
|
21
|
+
};
|
|
12
22
|
/** AMK 独立拥有素材导入 UI 与业务回调,VeVeditor 仅提供挂载容器和标准数据写入 API。 */
|
|
13
|
-
export declare function mountImportActions(container: HTMLElement, options: MountImportActionsOptions):
|
|
23
|
+
export declare function mountImportActions(container: HTMLElement, options: MountImportActionsOptions): ImportActionsController;
|
|
14
24
|
export {};
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,4 @@ export type { AmkApiClientOptions, AmkInvokeToolParams } from './api/client';
|
|
|
4
4
|
export type { PresetLibrary, PresetLibraryItem, PresetLibraryResourceKey, } from './api/preset-library';
|
|
5
5
|
export { AMK_I18N_KEYS, createAmkI18n, tAmk, getGlobalAmkI18n, setGlobalAmkI18n, } from './i18n';
|
|
6
6
|
export type { AmkI18nInstance, AmkI18nOptions, Locale, LocaleMessages, Messages, } from './i18n';
|
|
7
|
-
export type { AmkEditorOptions, AmkEditorConfig, AmkEditorDecodeOptions, AmkEditorExportConfig, AmkEditorHeaderConfig, AmkEditorInternalConfig, AmkProjectSnapshot, ExportVideoParams, MaterialConfig, MaterialItem, PersistExtractUrlsResult, RecommendedExtractStorageFields, Theme, VeVeditorInstance, } from './types';
|
|
7
|
+
export type { AmkEditorOptions, AmkEditorStorageConfig, AmkEditorUploadSTSCredentials, AmkEditorConfig, AmkEditorDecodeOptions, AmkEditorExportConfig, AmkEditorGetHeaders, AmkEditorHeaderConfig, AmkEditorHeaderTitleUpdateSuccess, AmkEditorInternalConfig, AmkMaterialImportType, AmkMaterialImportRequestOptions, AmkExportRequestResult, AmkProjectSnapshot, ExportVideoParams, MaterialConfig, MaterialItem, PersistExtractUrlsResult, RecommendedExtractStorageFields, SystemMaterialItem, Theme, VeVeditorInstance, } from './types';
|