webwallgl 1.1.0 → 1.3.16
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.en.md +192 -4
- package/README.md +192 -4
- package/package.json +1 -1
- package/types.d.ts +256 -19
- package/webwallgl.d.ts +78 -17
- package/webwallgl.global.js +35622 -10201
- package/webwallgl.global.js.map +1 -1
- package/webwallgl.global.min.js +544 -195
- package/webwallgl.global.min.js.map +1 -1
- package/webwallgl.min.mjs +544 -195
- package/webwallgl.min.mjs.map +1 -1
- package/webwallgl.mjs +35583 -10162
- package/webwallgl.mjs.map +1 -1
package/types.d.ts
CHANGED
|
@@ -26,15 +26,42 @@ export type Source = {
|
|
|
26
26
|
webEntry?(signal?: AbortSignal): Promise<{
|
|
27
27
|
url: string;
|
|
28
28
|
} | null>;
|
|
29
|
+
/**
|
|
30
|
+
* 媒体壁纸(video / gif / image)的资源 URL。`project.type` 为这三者之一时
|
|
31
|
+
* 由 mount 调用;省略则回退到 `{httpSource 基址}/{project.file}`。
|
|
32
|
+
*
|
|
33
|
+
* 与 `webEntry` 分开而不是复用同一个方法:`webEntry` 的语义是「HTML 文档入口」
|
|
34
|
+
* (交给 iframe 加载并注入 shim),媒体是「一个可直接喂给 <video>/<img> 的资源」,
|
|
35
|
+
* 两者的消费方与失败模式都不同。`webEntry` 在 1.0.0 已公开,也不宜改语义。
|
|
36
|
+
*
|
|
37
|
+
* `type` 可选,用于纠正 project.json 里缺失或不准的类型;不给则以 project.type 为准。
|
|
38
|
+
*/
|
|
39
|
+
mediaEntry?(signal?: AbortSignal): Promise<{
|
|
40
|
+
url: string;
|
|
41
|
+
type?: string;
|
|
42
|
+
} | null>;
|
|
29
43
|
/**
|
|
30
44
|
* 缓存键。相同键的 scene.pkg 命中库内缓存,避免重复解析上百 MB 的包
|
|
31
45
|
* (暂停恢复、改属性都不该重新走一遍解析)。省略则不参与缓存。
|
|
32
46
|
*/
|
|
33
47
|
readonly key?: string;
|
|
48
|
+
/**
|
|
49
|
+
* 释放本来源占用的资源。实例 destroy() / 换源时调用一次。
|
|
50
|
+
*
|
|
51
|
+
* 目前只有 `mediaSource(File)` 需要:本地文件走 `URL.createObjectURL`,
|
|
52
|
+
* 不 revoke 就是每换一次壁纸泄漏一个几十 MB 的 blob。
|
|
53
|
+
*/
|
|
54
|
+
dispose?(): void;
|
|
34
55
|
};
|
|
35
56
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
57
|
+
* 指针状态提供者(**当前未接线**)。
|
|
58
|
+
*
|
|
59
|
+
* 默认指针来自 canvas 自身的 pointer 事件,由 mountScene 按 `cfg.canvas` 建立,
|
|
60
|
+
* 与本接口无关。要从外部喂指针(桌面壁纸窗口在 underlay 层收不到鼠标)请用
|
|
61
|
+
* `SceneInstance.pushPointer(u, v, buttons)` —— 那是引擎实际消费的推模式通道。
|
|
62
|
+
*
|
|
63
|
+
* 本接口保留是为了不破坏 1.0.0 已公开的类型;注意 `rightDown` 即便接线也不会
|
|
64
|
+
* 生效:引擎的指针状态只消费按键位掩码的 bit0(左键),全库无壁纸读右键。
|
|
38
65
|
*/
|
|
39
66
|
export type PointerSource = {
|
|
40
67
|
/** 归一化坐标 0..1,相对 canvas 左上角;y 向下 */
|
|
@@ -49,6 +76,17 @@ export type PointerSource = {
|
|
|
49
76
|
* 音频频谱提供者(音频响应壁纸用)。返回当前快照,不推进状态 ——
|
|
50
77
|
* 推进由库的渲染循环按场景时间驱动,保证同一时刻取到同一份数据。
|
|
51
78
|
* 默认是内置的确定性模拟源(无需麦克风权限,离线可复现)。
|
|
79
|
+
*
|
|
80
|
+
* **拉模式**:渲染循环每帧调一次 `snapshot()`。宿主每帧推 128 个浮点要走
|
|
81
|
+
* 跨语言桥的字符串拼接与 JS 解析,60fps 下开销可观;让渲染器主动拉,
|
|
82
|
+
* 宿主用同步原生桥直接返回即可。
|
|
83
|
+
*
|
|
84
|
+
* 契约:`left`/`right` 各 **64 段**、值域 **0..1**(已归一化)。段数不足 64
|
|
85
|
+
* 会补零,多于 64 会截断。32/16 段降采样与 level/silent 由库自行派生,
|
|
86
|
+
* 消费方(shader uniform、粒子、文字脚本)不区分数据来源。
|
|
87
|
+
*
|
|
88
|
+
* **scene 与 web 壁纸都生效**:网页壁纸经 iframe shim 的音频泵收到同一份数据
|
|
89
|
+
* (泵逐帧选源,所以 mount() 之后再 setAudio 也能生效)。
|
|
52
90
|
*/
|
|
53
91
|
export type AudioSource = {
|
|
54
92
|
/** 左右声道各 64 段频谱,值域 0..1 */
|
|
@@ -57,20 +95,141 @@ export type AudioSource = {
|
|
|
57
95
|
right: Float32Array | number[];
|
|
58
96
|
};
|
|
59
97
|
};
|
|
98
|
+
/** WE 播放态:0=停止 1=播放 2=暂停(与 MediaPlaybackEvent 枚举一致) */
|
|
99
|
+
export type MediaPlaybackState = 0 | 1 | 2;
|
|
100
|
+
/**
|
|
101
|
+
* 媒体配色的三元组。**必须是带链式方法的实例,不能是普通数组或对象**:
|
|
102
|
+
* 真实语料里的脚本会写 `event.primaryColor.subtract(old).multiply(t).add(old)`,
|
|
103
|
+
* 给数组会 TypeError 熔断整个脚本(症状是「换歌后整层不见了」)。
|
|
104
|
+
* 用 `createMediaSource()` 构造快照可自动保证类型正确。
|
|
105
|
+
*/
|
|
106
|
+
export type MediaColor = {
|
|
107
|
+
x: number;
|
|
108
|
+
y: number;
|
|
109
|
+
z: number;
|
|
110
|
+
add(o: MediaColor): MediaColor;
|
|
111
|
+
subtract(o: MediaColor): MediaColor;
|
|
112
|
+
multiply(k: number | MediaColor): MediaColor;
|
|
113
|
+
};
|
|
114
|
+
/** 系统媒体快照。字段名与 WE 的 media* 回调载荷一致 */
|
|
115
|
+
export type MediaSnapshot = {
|
|
116
|
+
/** 有没有正在播放的媒体会话;false 时其余字段无意义 */
|
|
117
|
+
hasMedia: boolean;
|
|
118
|
+
state: MediaPlaybackState;
|
|
119
|
+
title: string;
|
|
120
|
+
artist: string;
|
|
121
|
+
album: string;
|
|
122
|
+
albumArtist: string;
|
|
123
|
+
/** 播放进度与总时长,单位**秒**(不是 0..1 比例) */
|
|
124
|
+
position: number;
|
|
125
|
+
duration: number;
|
|
126
|
+
hasThumbnail: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* 真实封面图(data URL 或同源 URL)。宿主能拿到系统封面时给这里,
|
|
129
|
+
* 网页壁纸的 `mediaThumbnailChanged(e)` 会直接收到它作为 `e.thumbnail`。
|
|
130
|
+
*
|
|
131
|
+
* 留空时库用 primary/secondary 生成一张渐变占位图 —— 保证语料里
|
|
132
|
+
* `img.src = e.thumbnail` 那类写法不会拿到空串,但显示的不是真专辑封面。
|
|
133
|
+
*
|
|
134
|
+
* 注意场景(WebGL)壁纸不消费图片本体,其脚本只读 `e.hasThumbnail` 与取色,
|
|
135
|
+
* 所以这个字段只对网页壁纸有效。
|
|
136
|
+
*/
|
|
137
|
+
thumbnail?: string;
|
|
138
|
+
/** 封面取色。见 MediaColor 的类型约束 */
|
|
139
|
+
primaryColor: MediaColor;
|
|
140
|
+
secondaryColor: MediaColor;
|
|
141
|
+
tertiaryColor: MediaColor;
|
|
142
|
+
textColor: MediaColor;
|
|
143
|
+
highContrastColor: MediaColor;
|
|
144
|
+
/** 播放列表内的曲目序号(换歌检测用) */
|
|
145
|
+
trackIndex: number;
|
|
146
|
+
/** 歌词行:[秒, 文本][],按时间升序 */
|
|
147
|
+
lyrics: Array<[number, string]>;
|
|
148
|
+
/** 当前歌词行与其下标(由 position 定位,库不重算) */
|
|
149
|
+
lyricLine: string;
|
|
150
|
+
lyricIndex: number;
|
|
151
|
+
};
|
|
60
152
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
153
|
+
* 系统媒体源("正在播放"类壁纸用)。默认是内置模拟源。
|
|
154
|
+
*
|
|
155
|
+
* **scene 与 web 壁纸共用同一个实例**:宿主装一次,两类壁纸看到同一份 Now Playing。
|
|
156
|
+
* 库每帧调 `update(tSec)` 推进、读 `snapshot` 取值,并自动 diff 出 WE 的
|
|
157
|
+
* mediaStatusChanged / mediaPropertiesChanged / mediaPlaybackChanged /
|
|
158
|
+
* mediaThumbnailChanged 四个回调派发给壁纸脚本。
|
|
159
|
+
*
|
|
160
|
+
* 五个控制方法是**反向控制**:壁纸里的"上一曲/下一曲/播放暂停"按钮会调到这里,
|
|
161
|
+
* 由你转发给真实播放器。库只负责调用并在之后立刻重新派发一次事件。
|
|
162
|
+
*
|
|
163
|
+
* 自己实现全部字段很繁琐,用 `createMediaSource(partial)` 只给已知字段即可。
|
|
63
164
|
*/
|
|
64
165
|
export type MediaSource = {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
166
|
+
/** 每帧由渲染循环推进(tSec 为场景时间,秒)。无状态的实现可留空函数 */
|
|
167
|
+
update?(tSec: number): void;
|
|
168
|
+
readonly snapshot: MediaSnapshot;
|
|
169
|
+
skipNext?(): void;
|
|
170
|
+
skipPrevious?(): void;
|
|
171
|
+
play?(): void;
|
|
172
|
+
pause?(): void;
|
|
173
|
+
playPause?(): void;
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* `createMediaSource(init, controls)` 的 init:宿主通常拿得到的那部分字段,
|
|
177
|
+
* 其余(配色、歌词行、trackIndex)由库补默认值。
|
|
178
|
+
*
|
|
179
|
+
* 类型本体放在这里而不是 api/media-source.ts,是因为只有本文件会被
|
|
180
|
+
* tsconfig.lib-types.json 编成发布的 types.d.ts —— 定义在别处的话
|
|
181
|
+
* 消费方 `import { createMediaSource } from "webwallgl"` 摸不到入参类型。
|
|
182
|
+
*/
|
|
183
|
+
export type MediaSourceInit = {
|
|
184
|
+
hasMedia?: boolean;
|
|
185
|
+
/** 0=停止 1=播放 2=暂停;也接受布尔 playing(true→1、false→2) */
|
|
186
|
+
state?: MediaPlaybackState;
|
|
187
|
+
playing?: boolean;
|
|
188
|
+
title?: string;
|
|
189
|
+
artist?: string;
|
|
190
|
+
album?: string;
|
|
191
|
+
albumArtist?: string;
|
|
192
|
+
/** 秒 */
|
|
193
|
+
position?: number;
|
|
194
|
+
duration?: number;
|
|
195
|
+
hasThumbnail?: boolean;
|
|
196
|
+
/**
|
|
197
|
+
* 真实封面图(data URL 或同源 URL)。给了就直接透给网页壁纸的
|
|
198
|
+
* `mediaThumbnailChanged(e).thumbnail`;不给则库生成渐变占位图。
|
|
199
|
+
* 传了非空值时 hasThumbnail 自动视为 true
|
|
200
|
+
*/
|
|
201
|
+
thumbnail?: string;
|
|
202
|
+
primaryColor?: MediaColorInit;
|
|
203
|
+
secondaryColor?: MediaColorInit;
|
|
204
|
+
tertiaryColor?: MediaColorInit;
|
|
205
|
+
textColor?: MediaColorInit;
|
|
206
|
+
highContrastColor?: MediaColorInit;
|
|
207
|
+
trackIndex?: number;
|
|
208
|
+
/** [秒, 文本] 按时间升序;库按 position 定位当前行 */
|
|
209
|
+
lyrics?: Array<[number, string]>;
|
|
210
|
+
};
|
|
211
|
+
/** `mediaColor()` 与配色字段接受的形态 */
|
|
212
|
+
export type MediaColorInit = number | number[] | {
|
|
213
|
+
x: number;
|
|
214
|
+
y: number;
|
|
215
|
+
z: number;
|
|
216
|
+
} | MediaColor;
|
|
217
|
+
/** `createMediaSource(init, controls)` 的 controls:宿主转发给真实播放器 */
|
|
218
|
+
export type MediaSourceControls = {
|
|
219
|
+
skipNext?(): void;
|
|
220
|
+
skipPrevious?(): void;
|
|
221
|
+
play?(): void;
|
|
222
|
+
pause?(): void;
|
|
223
|
+
playPause?(): void;
|
|
224
|
+
};
|
|
225
|
+
/** 壁纸侧可用的媒体控制面(SceneInstance.media) */
|
|
226
|
+
export type MediaControl = {
|
|
227
|
+
readonly snapshot: MediaSnapshot;
|
|
228
|
+
skipNext(): MediaSnapshot;
|
|
229
|
+
skipPrevious(): MediaSnapshot;
|
|
230
|
+
play(): MediaSnapshot;
|
|
231
|
+
pause(): MediaSnapshot;
|
|
232
|
+
playPause(): MediaSnapshot;
|
|
74
233
|
};
|
|
75
234
|
/** 渲染开关。调试用,默认全开;对应旧 types.ts 的 SKIP_* 常量取反 */
|
|
76
235
|
export type FeatureFlags = {
|
|
@@ -125,13 +284,19 @@ export type MountOptions = {
|
|
|
125
284
|
autoplay?: boolean;
|
|
126
285
|
/** 用户属性覆盖值(键为 project.json 里的属性名) */
|
|
127
286
|
properties?: Record<string, PropertyValue>;
|
|
128
|
-
/**
|
|
287
|
+
/** 指针源。**当前未接线**,见 PointerSource 说明;外部喂指针请用 pushPointer() */
|
|
129
288
|
pointer?: PointerSource | null;
|
|
130
|
-
/**
|
|
289
|
+
/**
|
|
290
|
+
* 音频频谱源。默认内置确定性模拟;null = 禁用(频谱恒为 0)。
|
|
291
|
+
* 挂载后可用 `SceneInstance.setAudio()` 再换(SSE 等异步数据源常在挂载后才就绪)。
|
|
292
|
+
*/
|
|
131
293
|
audio?: AudioSource | null;
|
|
132
|
-
/**
|
|
294
|
+
/**
|
|
295
|
+
* 系统媒体源(Now Playing)。默认内置模拟;null = 禁用。
|
|
296
|
+
* scene 与 web 壁纸共用同一个实例;挂载后可用 `setMedia()` 再换。
|
|
297
|
+
*/
|
|
133
298
|
media?: MediaSource | null;
|
|
134
|
-
/**
|
|
299
|
+
/** 渲染开关(调试用)。**当前未接线** */
|
|
135
300
|
features?: Partial<FeatureFlags>;
|
|
136
301
|
/** 诊断回调。替代旧的 GET /diag 上报 */
|
|
137
302
|
onDiagnostic?: SceneEvents["diagnostic"];
|
|
@@ -163,14 +328,86 @@ export type SceneInstance = {
|
|
|
163
328
|
setProperties(props: Record<string, PropertyValue>): void;
|
|
164
329
|
/** 当前生效的属性值(扁平化后的 name → value) */
|
|
165
330
|
getProperties(): Record<string, PropertyValue>;
|
|
331
|
+
/**
|
|
332
|
+
* 换音频频谱源。传 null 回落内置模拟源。
|
|
333
|
+
*
|
|
334
|
+
* 与挂载选项 `audio` 等价,但可在任何时刻调用 —— 宿主的频谱通道
|
|
335
|
+
* (SSE / 原生桥 / WebAudio)常常在 mount() 之后才就绪。
|
|
336
|
+
* **换场景不清空**:装一次对之后所有场景生效。
|
|
337
|
+
*
|
|
338
|
+
* scene 与 web 壁纸都生效(网页侧经 iframe shim 的音频泵拿到同一份数据)。
|
|
339
|
+
*/
|
|
340
|
+
setAudio(src: AudioSource | null): void;
|
|
341
|
+
/**
|
|
342
|
+
* 换系统媒体源(Now Playing)。传 null 回落内置模拟源。
|
|
343
|
+
*
|
|
344
|
+
* 与 `setAudio` 同纪律:**换场景不清空**,装一次对之后所有场景生效。
|
|
345
|
+
* scene 与 web 壁纸吃同一个实例。
|
|
346
|
+
*/
|
|
347
|
+
setMedia(src: MediaSource | null): void;
|
|
348
|
+
/**
|
|
349
|
+
* 媒体控制面:读当前快照,以及壁纸侧同款的播放控制。
|
|
350
|
+
*
|
|
351
|
+
* 调用控制方法会转发给当前 media 源并**立即重新派发一次事件**,
|
|
352
|
+
* 壁纸里的歌名/封面/进度会同帧更新,不必等下一轮 diff。
|
|
353
|
+
*/
|
|
354
|
+
readonly media: MediaControl;
|
|
355
|
+
/**
|
|
356
|
+
* 外部指针注入:把宿主轮询到的鼠标位置推进壁纸。
|
|
357
|
+
*
|
|
358
|
+
* 用于窗口收不到鼠标事件的场景 —— 桌面壁纸叠在桌面 underlay 层,
|
|
359
|
+
* macOS 下 Finder 的桌面窗口会吃掉事件,且没有「向下透传」的窗口属性。
|
|
360
|
+
*
|
|
361
|
+
* @param u 归一化横坐标 0..1(相对画布左缘)
|
|
362
|
+
* @param v 归一化纵坐标 0..1(相对画布上缘,y 向下)
|
|
363
|
+
* @param buttons 按键位掩码,同 MouseEvent.buttons;只有 bit0(左键)被消费
|
|
364
|
+
* @param mods 修饰键位掩码:bit0 ctrl / bit1 shift / bit2 alt / bit3 meta。
|
|
365
|
+
* 省略等于 0。只有 web 壁纸消费(合成事件的 ctrlKey 等字段)
|
|
366
|
+
*
|
|
367
|
+
* 与 canvas 自身的 DOM 指针监听并存,谁后写谁赢。scene 与 web 壁纸都生效,
|
|
368
|
+
* 媒体壁纸(video/gif/image)没有指针概念,调用静默无效。
|
|
369
|
+
*/
|
|
370
|
+
pushPointer(u: number, v: number, buttons?: number, mods?: number): void;
|
|
371
|
+
/**
|
|
372
|
+
* 外部指针离开本窗口(鼠标移到了别的显示器)。
|
|
373
|
+
*
|
|
374
|
+
* **只清按键,保留最后位置** —— 清掉位置会让 xray 开窗跳到相机外、
|
|
375
|
+
* 视差弹回中心,画面明显抽一下。语义与 DOM 的 mouseleave 一致。
|
|
376
|
+
*/
|
|
377
|
+
pointerLeave(): void;
|
|
378
|
+
/**
|
|
379
|
+
* 外部滚轮注入:把宿主捕获的滚轮 / 触摸板手势推进壁纸。
|
|
380
|
+
*
|
|
381
|
+
* **只有 web 壁纸生效。** scene 壁纸静默无效不是遗漏:WE 的场景脚本沙箱
|
|
382
|
+
* 不暴露任何滚轮 API,实测 194 张场景壁纸零消费(场景包里的 `scroll`
|
|
383
|
+
* 全都是纹理滚动 shader 的 `g_ScrollSpeed`,与鼠标无关)。
|
|
384
|
+
*
|
|
385
|
+
* @param dx 横向滚动量,正 = 内容向右(与 WheelEvent.deltaX 同向同量级)
|
|
386
|
+
* @param dy 纵向滚动量,正 = 内容向下(与 WheelEvent.deltaY 同向;
|
|
387
|
+
* macOS 原生 NSEvent.scrollingDeltaY 是**反向**的,宿主需取反)
|
|
388
|
+
* @param mode 同 WheelEvent.deltaMode:0 像素 / 1 行 / 2 页。触摸板恒为 0
|
|
389
|
+
* @param mods 修饰键位掩码,bit0 ctrl。**触摸板双指捏合应映射成 ctrl + 滚轮**
|
|
390
|
+
* —— 浏览器就是这样把 macOS 的 magnify 手势喂给网页的,
|
|
391
|
+
* OrbitControls / pano2vr 一族都靠 `event.ctrlKey` 区分缩放与滚动
|
|
392
|
+
*
|
|
393
|
+
* 位置沿用最后一次 `pushPointer()` 的坐标(滚轮事件本身不带位置)。
|
|
394
|
+
*/
|
|
395
|
+
pushWheel(dx: number, dy: number, mode?: number, mods?: number): void;
|
|
166
396
|
/** 换场景,复用同一 canvas 与 WebGL 上下文 */
|
|
167
397
|
load(source: Source): Promise<void>;
|
|
168
398
|
/** 释放 GL/视频/音频资源,保留配置(显示器睡眠等场景) */
|
|
169
399
|
release(): void;
|
|
170
400
|
/** 用保留的配置重建 */
|
|
171
401
|
restore(): void;
|
|
172
|
-
/**
|
|
173
|
-
|
|
402
|
+
/**
|
|
403
|
+
* 彻底销毁:解绑事件监听、释放全部资源,之后不可再用。
|
|
404
|
+
* `releasePkgCache: true` 连带淘汰本实例 source 的 scene.pkg 解析缓存 ——
|
|
405
|
+
* 缓存默认跨实例保留(同壁纸重挂不重新下载),宿主"销毁即放弃"的语义
|
|
406
|
+
* (如桌面壁纸逐张切换)需要显式声明,否则旧包会压在缓存里不落内存。
|
|
407
|
+
*/
|
|
408
|
+
destroy(opts?: {
|
|
409
|
+
releasePkgCache?: boolean;
|
|
410
|
+
}): void;
|
|
174
411
|
readonly stats: FrameStats;
|
|
175
412
|
readonly info: SceneInfo | null;
|
|
176
413
|
/** 事件订阅,返回取消函数 */
|
package/webwallgl.d.ts
CHANGED
|
@@ -2,25 +2,66 @@
|
|
|
2
2
|
//
|
|
3
3
|
// ⚠️ 维护约束:函数签名是**手写的契约面**,全部类型来自 api/types.ts
|
|
4
4
|
// (tsc 自动生成到 dist/lib/types,构建时由 build:lib 拷贝拼接)。
|
|
5
|
-
// 改 api/
|
|
6
|
-
// 类型本体(MountOptions/SceneInstance/Source
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
5
|
+
// 改 api/index.ts 的**导出清单**或 mount/source/media-source 的**函数签名**时
|
|
6
|
+
// 必须同步本文件 —— 类型本体(MountOptions/SceneInstance/Source/MediaSourceInit
|
|
7
|
+
// 等)改 api/types.ts 即可自动带出。
|
|
8
|
+
//
|
|
9
|
+
// 只在 types.ts 里定义类型:别处(如 media-source.ts)定义的类型不进
|
|
10
|
+
// tsconfig.lib-types.json 的编译范围,本文件 import 它会解析失败。
|
|
11
|
+
//
|
|
12
|
+
// 漏声明一个运行时导出的后果不是"类型弱一点",而是消费方 import 直接
|
|
13
|
+
// TS2305 编译不过(verify-arch 会比对 api/index.ts 与本文件的导出清单)。
|
|
14
|
+
//
|
|
15
|
+
// ⚠️ 必须 import 后再 export,不能写成 `export { type X } from "./types"`:
|
|
16
|
+
// 后者只做转发导出,**不把名字引入本文件作用域**,下面的函数签名会引用到
|
|
17
|
+
// 未定义标识符(tsc 报 TS2304 × 7)。消费方普遍开着 skipLibCheck,报错被吞掉,
|
|
18
|
+
// 症状是所有导出静默退化成 any —— 库看起来"能用",实则零类型检查。
|
|
19
|
+
import type {
|
|
20
|
+
Fit,
|
|
21
|
+
Source,
|
|
22
|
+
MountOptions,
|
|
23
|
+
SceneInstance,
|
|
24
|
+
SceneInfo,
|
|
25
|
+
SceneEvents,
|
|
26
|
+
FrameStats,
|
|
27
|
+
PropertyValue,
|
|
28
|
+
FeatureFlags,
|
|
29
|
+
PointerSource,
|
|
30
|
+
AudioSource,
|
|
31
|
+
MediaSource,
|
|
32
|
+
MediaSnapshot,
|
|
33
|
+
MediaColor,
|
|
34
|
+
MediaColorInit,
|
|
35
|
+
MediaControl,
|
|
36
|
+
MediaPlaybackState,
|
|
37
|
+
MediaSourceInit,
|
|
38
|
+
MediaSourceControls,
|
|
39
|
+
DiagnosticLevel,
|
|
22
40
|
} from "./types";
|
|
23
41
|
|
|
42
|
+
export type {
|
|
43
|
+
Fit,
|
|
44
|
+
Source,
|
|
45
|
+
MountOptions,
|
|
46
|
+
SceneInstance,
|
|
47
|
+
SceneInfo,
|
|
48
|
+
SceneEvents,
|
|
49
|
+
FrameStats,
|
|
50
|
+
PropertyValue,
|
|
51
|
+
FeatureFlags,
|
|
52
|
+
PointerSource,
|
|
53
|
+
AudioSource,
|
|
54
|
+
MediaSource,
|
|
55
|
+
MediaSnapshot,
|
|
56
|
+
MediaColor,
|
|
57
|
+
MediaColorInit,
|
|
58
|
+
MediaControl,
|
|
59
|
+
MediaPlaybackState,
|
|
60
|
+
MediaSourceInit,
|
|
61
|
+
MediaSourceControls,
|
|
62
|
+
DiagnosticLevel,
|
|
63
|
+
};
|
|
64
|
+
|
|
24
65
|
export declare function mount(
|
|
25
66
|
el: HTMLElement,
|
|
26
67
|
options: MountOptions,
|
|
@@ -40,3 +81,23 @@ export declare function bytesSource(
|
|
|
40
81
|
project?: unknown,
|
|
41
82
|
key?: string,
|
|
42
83
|
): Source;
|
|
84
|
+
|
|
85
|
+
export declare function mediaSource(
|
|
86
|
+
urlOrFile: string | File | Blob,
|
|
87
|
+
options?: { type?: "video" | "gif" | "image"; key?: string },
|
|
88
|
+
): Source;
|
|
89
|
+
|
|
90
|
+
export declare function sniffMediaType(
|
|
91
|
+
url: string,
|
|
92
|
+
): "video" | "gif" | "image" | null;
|
|
93
|
+
|
|
94
|
+
export declare function createMediaSource(
|
|
95
|
+
init?: MediaSourceInit,
|
|
96
|
+
controls?: MediaSourceControls,
|
|
97
|
+
): MediaSource & { set(patch: MediaSourceInit): void };
|
|
98
|
+
|
|
99
|
+
export declare function mediaColor(
|
|
100
|
+
r: MediaColorInit,
|
|
101
|
+
g?: number,
|
|
102
|
+
b?: number,
|
|
103
|
+
): MediaColor;
|