alpha-video-player-js 1.1.0 → 1.2.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/README.md CHANGED
@@ -27,6 +27,32 @@ import AlphaVideoPlayerJs from 'alpha-video-player-js'
27
27
  const player = new AlphaVideoPlayerJs(config)
28
28
  ```
29
29
 
30
+ ### TypeScript 类型
31
+
32
+ 主包与框架子路径会导出下列类型,便于标注 `ref`、`getPlayer()` 返回值等。
33
+
34
+ **从 v1.2.0 起**:命令式 ref 类型统一为 **`IAlphaVideoPlayerRef`**;React 组件 props 为 **`IAlphaVideoPlayerProps`**(原 `AlphaVideoPlayerExpose` / 无 `I` 前缀的 `AlphaVideoPlayerRef`、`AlphaVideoPlayerProps` 已更名,升级时请全局替换)。
35
+
36
+ | 包路径 | 导出类型 | 说明 |
37
+ |--------|----------|------|
38
+ | `alpha-video-player-js` | `IAlphaVideoPlayer` | 核心类实例(`new` 后的类型) |
39
+ | | `IConfig`、`IOptionalConfig` | 构造 / `play()` 可选参数 |
40
+ | | `IOrientation`、`ISide` | 拼合方向与 RGB 区域位置 |
41
+ | `alpha-video-player-js/vue3`、`.../vue2` | `IAlphaVideoPlayer`、`IAlphaVideoPlayerRef` | 核心实例类型与组件 ref;**若同时用到二者,请从同一子路径导入**,避免与主包各有一份 `.d.ts` 时类型不兼容 |
42
+ | `alpha-video-player-js/react` | `IAlphaVideoPlayerProps`、`IAlphaVideoPlayerRef` | 组件 props 与 ref |
43
+
44
+ ```ts
45
+ import AlphaVideoPlayer from 'alpha-video-player-js/vue3'
46
+ import type { IAlphaVideoPlayer, IAlphaVideoPlayerRef } from 'alpha-video-player-js/vue3'
47
+
48
+ const playerRef = ref<IAlphaVideoPlayerRef | null>(null)
49
+
50
+ let core: IAlphaVideoPlayer | null = null
51
+ const onCanPlay = () => {
52
+ core = playerRef.value?.getPlayer() ?? null
53
+ }
54
+ ```
55
+
30
56
  ### 实例参数
31
57
 
32
58
  | 参数 | 含义 | 默认值 | 是否必传 |
@@ -139,8 +165,9 @@ import AlphaVideoPlayer from 'alpha-video-player-js/vue3'
139
165
  <script setup lang="ts">
140
166
  import { ref } from 'vue'
141
167
  import AlphaVideoPlayer from 'alpha-video-player-js/vue3'
168
+ import type { IAlphaVideoPlayerRef } from 'alpha-video-player-js/vue3'
142
169
 
143
- const playerRef = ref()
170
+ const playerRef = ref<IAlphaVideoPlayerRef | null>(null)
144
171
  const playbackRate = ref(1)
145
172
 
146
173
  const onReady = () => {
@@ -194,10 +221,10 @@ export default {
194
221
  ```tsx
195
222
  import { useRef } from 'react'
196
223
  import AlphaVideoPlayer from 'alpha-video-player-js/react'
197
- import type { AlphaVideoPlayerRef } from 'alpha-video-player-js/react'
224
+ import type { IAlphaVideoPlayerRef } from 'alpha-video-player-js/react'
198
225
 
199
226
  function App() {
200
- const playerRef = useRef<AlphaVideoPlayerRef>(null)
227
+ const playerRef = useRef<IAlphaVideoPlayerRef>(null)
201
228
 
202
229
  return (
203
230
  <AlphaVideoPlayer
@@ -55,5 +55,7 @@ declare class Render {
55
55
  setLoop(loop: boolean): void;
56
56
  setPlaybackRate(playbackRate: number): void;
57
57
  }
58
+ /** 核心类实例类型(`new Render(...)` 的实例),便于业务侧标注 ref / getPlayer() 等 */
59
+ type IAlphaVideoPlayer = InstanceType<typeof Render>;
58
60
 
59
- export { type IConfig, Render as default };
61
+ export { type IAlphaVideoPlayer, type IConfig, type IOptionalConfig, type IOrientation, type ISide, Render as default };
package/dist/react.d.ts CHANGED
@@ -57,8 +57,26 @@ declare class Render {
57
57
  setLoop(loop: boolean): void;
58
58
  setPlaybackRate(playbackRate: number): void;
59
59
  }
60
+ /** 核心类实例类型(`new Render(...)` 的实例),便于业务侧标注 ref / getPlayer() 等 */
61
+ type IAlphaVideoPlayer = InstanceType<typeof Render>;
60
62
 
61
- interface AlphaVideoPlayerProps {
63
+ /**
64
+ * Vue 2 / Vue 3 的 template ref、React 的 `useRef` 所指向的命令式 API 形状(与 `expose` / `useImperativeHandle` 一致)。
65
+ */
66
+ type IAlphaVideoPlayerRef = {
67
+ play: () => Promise<void> | undefined;
68
+ pause: () => void;
69
+ destroy: () => void;
70
+ reset: () => void;
71
+ setSrc: (src: string) => void;
72
+ setCurrentTime: (time: number) => void;
73
+ setMute: (muted: boolean) => void;
74
+ setLoop: (loop: boolean) => void;
75
+ setPlaybackRate: (rate: number) => void;
76
+ getPlayer: () => IAlphaVideoPlayer | null;
77
+ };
78
+
79
+ interface IAlphaVideoPlayerProps {
62
80
  src?: string;
63
81
  width?: number;
64
82
  height?: number;
@@ -88,18 +106,6 @@ interface AlphaVideoPlayerProps {
88
106
  className?: string;
89
107
  style?: React.CSSProperties;
90
108
  }
91
- interface AlphaVideoPlayerRef {
92
- play: () => Promise<void> | undefined;
93
- pause: () => void;
94
- destroy: () => void;
95
- reset: () => void;
96
- setSrc: (src: string) => void;
97
- setCurrentTime: (time: number) => void;
98
- setMute: (muted: boolean) => void;
99
- setLoop: (loop: boolean) => void;
100
- setPlaybackRate: (rate: number) => void;
101
- getPlayer: () => Render | null;
102
- }
103
- declare const AlphaVideoPlayer: React.ForwardRefExoticComponent<AlphaVideoPlayerProps & React.RefAttributes<AlphaVideoPlayerRef>>;
109
+ declare const AlphaVideoPlayer: React.ForwardRefExoticComponent<IAlphaVideoPlayerProps & React.RefAttributes<IAlphaVideoPlayerRef>>;
104
110
 
105
- export { type AlphaVideoPlayerProps, type AlphaVideoPlayerRef, AlphaVideoPlayer as default };
111
+ export { type IAlphaVideoPlayerProps, type IAlphaVideoPlayerRef, AlphaVideoPlayer as default };
package/dist/vue2.d.ts CHANGED
@@ -1,3 +1,79 @@
1
1
  declare const AlphaVideoPlayer: any;
2
2
 
3
- export { AlphaVideoPlayer as default };
3
+ interface IConfig {
4
+ container: HTMLElement;
5
+ width?: number;
6
+ height?: number;
7
+ src?: string;
8
+ /** 跨域视频资源;默认 anonymous */
9
+ crossOrigin?: 'anonymous' | 'use-credentials';
10
+ muted?: boolean;
11
+ loop?: boolean;
12
+ playbackRate?: number;
13
+ fps?: number;
14
+ orientation?: IOrientation;
15
+ side?: ISide;
16
+ videoFrame?: boolean;
17
+ debug?: boolean;
18
+ autoShow?: boolean;
19
+ autoClear?: boolean;
20
+ autoDestroy?: boolean;
21
+ /**
22
+ * 视频加载后按比例自适应 canvas 尺寸(默认 'contain')。
23
+ * - 'contain':自动判断,确保视频完整填入 canvas 盒子(类似 object-fit: contain)
24
+ * - 'width':固定宽度,按视频比例自动调整高度
25
+ * - 'height':固定高度,按视频比例自动调整宽度
26
+ * - false:不自适应,canvas 保持初始尺寸
27
+ */
28
+ autoResize?: 'width' | 'height' | 'contain' | false;
29
+ onInitSuccess?: () => void;
30
+ onInitError?: (e: ErrorEvent) => void;
31
+ onLoad?: () => void;
32
+ onCanPlay?: () => void;
33
+ onPlay?: () => void;
34
+ onLoop?: () => void;
35
+ onPause?: () => void;
36
+ onEnded?: () => void;
37
+ /** 媒体 error 事件或 play() 拒绝等,原样传入 */
38
+ onError?: (e: unknown) => void;
39
+ onDestroy?: () => void;
40
+ }
41
+ type IOptionalConfig = Omit<IConfig, 'container' | 'src'> & Partial<Pick<IConfig, 'container' | 'src'>>;
42
+ type IOrientation = 'landscape' | 'portrait';
43
+ type ISide = 'front' | 'back';
44
+
45
+ declare class Render {
46
+ private render;
47
+ constructor(config: IConfig);
48
+ get playing(): boolean;
49
+ get loop(): boolean;
50
+ play(config?: IOptionalConfig): Promise<void>;
51
+ pause(): void;
52
+ destroy(): void;
53
+ reset(): void;
54
+ setSrc(src: string): void;
55
+ setCurrentTime(time: number): void;
56
+ setMute(muted: boolean): void;
57
+ setLoop(loop: boolean): void;
58
+ setPlaybackRate(playbackRate: number): void;
59
+ }
60
+ /** 核心类实例类型(`new Render(...)` 的实例),便于业务侧标注 ref / getPlayer() 等 */
61
+ type IAlphaVideoPlayer = InstanceType<typeof Render>;
62
+
63
+ /**
64
+ * Vue 2 / Vue 3 的 template ref、React 的 `useRef` 所指向的命令式 API 形状(与 `expose` / `useImperativeHandle` 一致)。
65
+ */
66
+ type IAlphaVideoPlayerRef = {
67
+ play: () => Promise<void> | undefined;
68
+ pause: () => void;
69
+ destroy: () => void;
70
+ reset: () => void;
71
+ setSrc: (src: string) => void;
72
+ setCurrentTime: (time: number) => void;
73
+ setMute: (muted: boolean) => void;
74
+ setLoop: (loop: boolean) => void;
75
+ setPlaybackRate: (rate: number) => void;
76
+ getPlayer: () => IAlphaVideoPlayer | null;
77
+ };
78
+
79
+ export { type IAlphaVideoPlayer, type IAlphaVideoPlayerRef, AlphaVideoPlayer as default };
package/dist/vue3.d.ts CHANGED
@@ -1,6 +1,45 @@
1
1
  import * as vue from 'vue';
2
2
  import { PropType } from 'vue';
3
3
 
4
+ interface IConfig {
5
+ container: HTMLElement;
6
+ width?: number;
7
+ height?: number;
8
+ src?: string;
9
+ /** 跨域视频资源;默认 anonymous */
10
+ crossOrigin?: 'anonymous' | 'use-credentials';
11
+ muted?: boolean;
12
+ loop?: boolean;
13
+ playbackRate?: number;
14
+ fps?: number;
15
+ orientation?: IOrientation;
16
+ side?: ISide;
17
+ videoFrame?: boolean;
18
+ debug?: boolean;
19
+ autoShow?: boolean;
20
+ autoClear?: boolean;
21
+ autoDestroy?: boolean;
22
+ /**
23
+ * 视频加载后按比例自适应 canvas 尺寸(默认 'contain')。
24
+ * - 'contain':自动判断,确保视频完整填入 canvas 盒子(类似 object-fit: contain)
25
+ * - 'width':固定宽度,按视频比例自动调整高度
26
+ * - 'height':固定高度,按视频比例自动调整宽度
27
+ * - false:不自适应,canvas 保持初始尺寸
28
+ */
29
+ autoResize?: 'width' | 'height' | 'contain' | false;
30
+ onInitSuccess?: () => void;
31
+ onInitError?: (e: ErrorEvent) => void;
32
+ onLoad?: () => void;
33
+ onCanPlay?: () => void;
34
+ onPlay?: () => void;
35
+ onLoop?: () => void;
36
+ onPause?: () => void;
37
+ onEnded?: () => void;
38
+ /** 媒体 error 事件或 play() 拒绝等,原样传入 */
39
+ onError?: (e: unknown) => void;
40
+ onDestroy?: () => void;
41
+ }
42
+ type IOptionalConfig = Omit<IConfig, 'container' | 'src'> & Partial<Pick<IConfig, 'container' | 'src'>>;
4
43
  type IOrientation = 'landscape' | 'portrait';
5
44
  type ISide = 'front' | 'back';
6
45
 
@@ -166,4 +205,38 @@ declare const _default: vue.DefineComponent<vue.ExtractPropTypes<{
166
205
  autoResize: false | "width" | "height" | "contain";
167
206
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
168
207
 
169
- export { _default as default };
208
+ declare class Render {
209
+ private render;
210
+ constructor(config: IConfig);
211
+ get playing(): boolean;
212
+ get loop(): boolean;
213
+ play(config?: IOptionalConfig): Promise<void>;
214
+ pause(): void;
215
+ destroy(): void;
216
+ reset(): void;
217
+ setSrc(src: string): void;
218
+ setCurrentTime(time: number): void;
219
+ setMute(muted: boolean): void;
220
+ setLoop(loop: boolean): void;
221
+ setPlaybackRate(playbackRate: number): void;
222
+ }
223
+ /** 核心类实例类型(`new Render(...)` 的实例),便于业务侧标注 ref / getPlayer() 等 */
224
+ type IAlphaVideoPlayer = InstanceType<typeof Render>;
225
+
226
+ /**
227
+ * Vue 2 / Vue 3 的 template ref、React 的 `useRef` 所指向的命令式 API 形状(与 `expose` / `useImperativeHandle` 一致)。
228
+ */
229
+ type IAlphaVideoPlayerRef = {
230
+ play: () => Promise<void> | undefined;
231
+ pause: () => void;
232
+ destroy: () => void;
233
+ reset: () => void;
234
+ setSrc: (src: string) => void;
235
+ setCurrentTime: (time: number) => void;
236
+ setMute: (muted: boolean) => void;
237
+ setLoop: (loop: boolean) => void;
238
+ setPlaybackRate: (rate: number) => void;
239
+ getPlayer: () => IAlphaVideoPlayer | null;
240
+ };
241
+
242
+ export { type IAlphaVideoPlayer, type IAlphaVideoPlayerRef, _default as default };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alpha-video-player-js",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Web 视频动画特效播放 sdk",
5
5
  "main": "dist/alpha-video-player-js.js",
6
6
  "types": "dist/alpha-video-player-js.d.ts",