@give-tech/ec-player-vue 1.0.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.
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Vue Composables 导出
3
+ */
4
+ export { usePlayer, type UsePlayerReturn } from './usePlayer';
5
+ export { useControls, type UseControlsParams, type UseControlsReturn } from './useControls';
6
+ export { useEnvInfo, type UseEnvInfoReturn } from './useEnvInfo';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/composables/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * 播放器控制条逻辑
3
+ */
4
+ import { type Ref } from 'vue';
5
+ /**
6
+ * 控制条逻辑参数
7
+ */
8
+ export interface UseControlsParams {
9
+ /** 是否正在播放 */
10
+ isPlaying: Ref<boolean>;
11
+ /** 是否已加载 */
12
+ isLoaded: Ref<boolean>;
13
+ /** 当前时间(毫秒) */
14
+ currentTime: Ref<number>;
15
+ /** 总时长(毫秒) */
16
+ duration: Ref<number>;
17
+ /** 分片索引 */
18
+ segmentIndex: Ref<number>;
19
+ /** 总分片数 */
20
+ totalSegments: Ref<number>;
21
+ /** 是否为直播流 */
22
+ isLive: Ref<boolean>;
23
+ /** 跳转方法 */
24
+ seek: (time: number) => Promise<void>;
25
+ }
26
+ /**
27
+ * 控制条逻辑返回值
28
+ */
29
+ export interface UseControlsReturn {
30
+ /** 是否显示控制条 */
31
+ showControls: Ref<boolean>;
32
+ /** 进度条 hover 时间 */
33
+ hoverTime: Ref<number | null>;
34
+ /** 进度条 hover 位置 */
35
+ hoverPosition: Ref<number>;
36
+ /** 播放进度百分比 */
37
+ playProgress: Ref<number>;
38
+ /** 缓冲进度百分比 */
39
+ bufferProgress: Ref<number>;
40
+ /** 显示控制条 */
41
+ showControlsBar: () => void;
42
+ /** 隐藏控制条 */
43
+ hideControlsBar: () => void;
44
+ /** 处理进度条点击 */
45
+ handleProgressClick: (event: MouseEvent) => Promise<void>;
46
+ /** 处理进度条悬停 */
47
+ handleProgressHover: (event: MouseEvent) => void;
48
+ /** 格式化时间 */
49
+ formatTime: (ms: number) => string;
50
+ }
51
+ /**
52
+ * 控制条逻辑 Hook
53
+ */
54
+ export declare function useControls(params: UseControlsParams): UseControlsReturn;
55
+ //# sourceMappingURL=useControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControls.d.ts","sourceRoot":"","sources":["../../src/composables/useControls.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAiB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAE7C;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,aAAa;IACb,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,YAAY;IACZ,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACtB,eAAe;IACf,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,cAAc;IACd,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrB,WAAW;IACX,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,WAAW;IACX,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,aAAa;IACb,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,WAAW;IACX,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc;IACd,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1B,mBAAmB;IACnB,SAAS,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC7B,mBAAmB;IACnB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC1B,cAAc;IACd,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,cAAc;IACd,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,YAAY;IACZ,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,YAAY;IACZ,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,cAAc;IACd,mBAAmB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,cAAc;IACd,mBAAmB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAChD,YAAY;IACZ,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;CACnC;AAID;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAmGxE"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 环境信息逻辑
3
+ */
4
+ import { type Ref } from 'vue';
5
+ import { type EcEnvInfo } from '@give-tech/ec-player';
6
+ /**
7
+ * 环境信息逻辑返回值
8
+ */
9
+ export interface UseEnvInfoReturn {
10
+ /** 环境信息 */
11
+ envInfo: Ref<EcEnvInfo | null>;
12
+ /** 是否显示环境面板 */
13
+ showEnvPanel: Ref<boolean>;
14
+ /** 环境类型文本 */
15
+ envTypeText: Ref<string>;
16
+ /** 切换环境面板显示 */
17
+ toggleEnvPanel: () => void;
18
+ /** 检测环境 */
19
+ detectEnv: () => void;
20
+ }
21
+ /**
22
+ * 环境信息逻辑 Hook
23
+ */
24
+ export declare function useEnvInfo(initialShowPanel?: boolean): UseEnvInfoReturn;
25
+ //# sourceMappingURL=useEnvInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEnvInfo.d.ts","sourceRoot":"","sources":["../../src/composables/useEnvInfo.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAA4B,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACxD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAElE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW;IACX,OAAO,EAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CAAA;IAC9B,eAAe;IACf,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1B,aAAa;IACb,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,eAAe;IACf,cAAc,EAAE,MAAM,IAAI,CAAA;IAC1B,WAAW;IACX,SAAS,EAAE,MAAM,IAAI,CAAA;CACtB;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,gBAAgB,GAAE,OAAe,GAChC,gBAAgB,CAyClB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 播放器核心逻辑
3
+ */
4
+ import { type Ref } from 'vue';
5
+ import { EcPlayerCore, type EcPlayerState } from '@give-tech/ec-player';
6
+ import type { EcPlayerProps, PlayerOptions } from '../types';
7
+ /**
8
+ * 播放器逻辑返回值
9
+ */
10
+ export interface UsePlayerReturn {
11
+ /** Canvas 元素引用 */
12
+ canvasRef: Ref<HTMLCanvasElement | null>;
13
+ /** 播放器实例 */
14
+ player: Ref<EcPlayerCore | null>;
15
+ /** 响应式状态 */
16
+ state: EcPlayerState;
17
+ /** 是否正在加载 */
18
+ isLoading: Ref<boolean>;
19
+ /** 检测到的格式 */
20
+ detectedFormat: Ref<string>;
21
+ /** 是否为直播流 */
22
+ isLive: Ref<boolean>;
23
+ /** 播放 */
24
+ play: (options: {
25
+ url: string;
26
+ isLive?: boolean;
27
+ }) => Promise<void>;
28
+ /** 设置配置 */
29
+ setOptions: (options: PlayerOptions) => void;
30
+ /** 设置日志级别 */
31
+ setLogLevel: (level: number) => void;
32
+ /** 暂停 */
33
+ pause: () => void;
34
+ /** 恢复播放 */
35
+ resume: () => Promise<void>;
36
+ /** 跳转 */
37
+ seek: (time: number) => Promise<void>;
38
+ /** 获取播放器实例 */
39
+ getPlayer: () => EcPlayerCore | null;
40
+ /** 获取状态 */
41
+ getState: () => EcPlayerState;
42
+ /** 获取当前时间 */
43
+ getCurrentTime: () => number;
44
+ /** 获取总时长 */
45
+ getDuration: () => number;
46
+ /** 销毁播放器 */
47
+ destroy: () => void;
48
+ }
49
+ /**
50
+ * 播放器逻辑 Hook
51
+ */
52
+ export declare function usePlayer(props: EcPlayerProps, emit: {
53
+ (e: 'play'): void;
54
+ (e: 'pause'): void;
55
+ (e: 'loaded'): void;
56
+ (e: 'error', error: Error): void;
57
+ (e: 'state-change', state: Partial<EcPlayerState>): void;
58
+ (e: 'format-detected', format: string): void;
59
+ }): UsePlayerReturn;
60
+ //# sourceMappingURL=usePlayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePlayer.d.ts","sourceRoot":"","sources":["../../src/composables/usePlayer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAA0C,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACtE,OAAO,EACL,YAAY,EAIZ,KAAK,aAAa,EAEnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAG5D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kBAAkB;IAClB,SAAS,EAAE,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IACxC,YAAY;IACZ,MAAM,EAAE,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,CAAA;IAChC,YAAY;IACZ,KAAK,EAAE,aAAa,CAAA;IACpB,aAAa;IACb,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,aAAa;IACb,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,aAAa;IACb,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACpB,SAAS;IACT,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnE,WAAW;IACX,UAAU,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAA;IAC5C,aAAa;IACb,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,SAAS;IACT,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB,WAAW;IACX,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3B,SAAS;IACT,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,cAAc;IACd,SAAS,EAAE,MAAM,YAAY,GAAG,IAAI,CAAA;IACpC,WAAW;IACX,QAAQ,EAAE,MAAM,aAAa,CAAA;IAC7B,aAAa;IACb,cAAc,EAAE,MAAM,MAAM,CAAA;IAC5B,YAAY;IACZ,WAAW,EAAE,MAAM,MAAM,CAAA;IACzB,YAAY;IACZ,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAkBD;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE;IACJ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAClB,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;IACnB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IAChC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAA;IACxD,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7C,GACA,eAAe,CAgOjB"}
@@ -0,0 +1,290 @@
1
+
2
+ .gt-player-container[data-v-b2f99f46] {
3
+ width: 100%;
4
+ max-width: 800px;
5
+ margin: 0 auto;
6
+ }
7
+ .gt-video-wrapper[data-v-b2f99f46] {
8
+ position: relative;
9
+ background: #000;
10
+ border-radius: 4px;
11
+ overflow: hidden;
12
+ width: 100%;
13
+ }
14
+ .gt-player-canvas[data-v-b2f99f46] {
15
+ width: 100%;
16
+ height: auto;
17
+ display: block;
18
+ }
19
+
20
+ /* 加载中动画 */
21
+ .gt-loading-spinner[data-v-b2f99f46] {
22
+ position: absolute;
23
+ top: 0;
24
+ left: 0;
25
+ right: 0;
26
+ bottom: 0;
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ background: rgba(0, 0, 0, 0.5);
31
+ z-index: 10;
32
+ }
33
+ .gt-spinner[data-v-b2f99f46] {
34
+ width: 8vmin;
35
+ height: 8vmin;
36
+ border: 0.5vmin solid rgba(255, 255, 255, 0.3);
37
+ border-top-color: #fff;
38
+ border-radius: 50%;
39
+ animation: gt-spin-b2f99f46 1s linear infinite;
40
+ }
41
+ @keyframes gt-spin-b2f99f46 {
42
+ to {
43
+ transform: rotate(360deg);
44
+ }
45
+ }
46
+
47
+ /* 视频控制条 */
48
+ .gt-video-controls[data-v-b2f99f46] {
49
+ position: absolute;
50
+ bottom: 0;
51
+ left: 0;
52
+ right: 0;
53
+ padding: 10px 16px;
54
+ background: linear-gradient(transparent, rgba(0, 0, 0, 0.7));
55
+ opacity: 0;
56
+ transition: opacity 0.3s ease;
57
+ display: flex;
58
+ align-items: center;
59
+ gap: 12px;
60
+ }
61
+ .gt-flex-spacer[data-v-b2f99f46] {
62
+ flex: 1;
63
+ }
64
+ .gt-video-controls.visible[data-v-b2f99f46] {
65
+ opacity: 1;
66
+ }
67
+ .gt-control-btn[data-v-b2f99f46] {
68
+ width: 28px;
69
+ height: 28px;
70
+ border: none;
71
+ border-radius: 50%;
72
+ background: transparent;
73
+ color: white;
74
+ cursor: pointer;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ transition: all 0.2s ease;
79
+ flex-shrink: 0;
80
+ }
81
+ .gt-control-btn[data-v-b2f99f46]:hover {
82
+ background: rgba(255, 255, 255, 0.2);
83
+ }
84
+ .gt-control-btn svg[data-v-b2f99f46] {
85
+ width: 14px;
86
+ height: 14px;
87
+ }
88
+ .gt-progress-container[data-v-b2f99f46] {
89
+ flex: 1;
90
+ position: relative;
91
+ cursor: pointer;
92
+ height: 20px;
93
+ display: flex;
94
+ align-items: center;
95
+ }
96
+ .gt-progress-bar[data-v-b2f99f46] {
97
+ width: 100%;
98
+ height: 4px;
99
+ background: rgba(255, 255, 255, 0.2);
100
+ border-radius: 2px;
101
+ position: relative;
102
+ overflow: hidden;
103
+ transition: height 0.2s ease;
104
+ }
105
+ .gt-progress-container:hover .gt-progress-bar[data-v-b2f99f46] {
106
+ height: 6px;
107
+ }
108
+ .gt-progress-buffered[data-v-b2f99f46] {
109
+ position: absolute;
110
+ top: 0;
111
+ left: 0;
112
+ height: 100%;
113
+ background: rgba(255, 255, 255, 0.4);
114
+ border-radius: 2px;
115
+ transition: width 0.1s;
116
+ }
117
+ .gt-progress-played[data-v-b2f99f46] {
118
+ position: absolute;
119
+ top: 0;
120
+ left: 0;
121
+ height: 100%;
122
+ background: #ff2d55;
123
+ border-radius: 2px;
124
+ transition: width 0.1s;
125
+ }
126
+ .gt-progress-handle[data-v-b2f99f46] {
127
+ position: absolute;
128
+ right: -6px;
129
+ top: 50%;
130
+ transform: translateY(-50%);
131
+ width: 14px;
132
+ height: 14px;
133
+ background: #ff2d55;
134
+ border-radius: 50%;
135
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
136
+ opacity: 0;
137
+ transition: opacity 0.2s, transform 0.2s;
138
+ }
139
+ .gt-progress-container:hover .gt-progress-handle[data-v-b2f99f46] {
140
+ opacity: 1;
141
+ transform: translateY(-50%) scale(1.2);
142
+ }
143
+ .gt-progress-tooltip[data-v-b2f99f46] {
144
+ position: absolute;
145
+ bottom: calc(100% + 8px);
146
+ transform: translateX(-50%);
147
+ background: rgba(0, 0, 0, 0.85);
148
+ color: white;
149
+ padding: 4px 8px;
150
+ border-radius: 4px;
151
+ font-size: 11px;
152
+ white-space: nowrap;
153
+ pointer-events: none;
154
+ }
155
+ .gt-time-display[data-v-b2f99f46] {
156
+ color: white;
157
+ font-size: 12px;
158
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
159
+ white-space: nowrap;
160
+ flex-shrink: 0;
161
+ }
162
+ .gt-time-separator[data-v-b2f99f46] {
163
+ margin: 0 4px;
164
+ opacity: 0.6;
165
+ }
166
+ .gt-info-badge[data-v-b2f99f46] {
167
+ background: rgba(255, 255, 255, 0.2);
168
+ color: white;
169
+ padding: 4px 10px;
170
+ border-radius: 12px;
171
+ font-size: 11px;
172
+ font-weight: 500;
173
+ white-space: nowrap;
174
+ flex-shrink: 0;
175
+ }
176
+
177
+ /* 直播指示器 */
178
+ .gt-live-indicator[data-v-b2f99f46] {
179
+ display: flex;
180
+ align-items: center;
181
+ gap: 6px;
182
+ color: white;
183
+ font-size: 12px;
184
+ font-weight: 500;
185
+ }
186
+ .gt-live-dot[data-v-b2f99f46] {
187
+ width: 8px;
188
+ height: 8px;
189
+ background: #ff2d55;
190
+ border-radius: 50%;
191
+ animation: gt-live-pulse-b2f99f46 1.5s ease-in-out infinite;
192
+ }
193
+ .gt-live-text[data-v-b2f99f46] {
194
+ color: #ff2d55;
195
+ }
196
+ @keyframes gt-live-pulse-b2f99f46 {
197
+ 0%, 100% {
198
+ opacity: 1;
199
+ }
200
+ 50% {
201
+ opacity: 0.4;
202
+ }
203
+ }
204
+
205
+ /* 居中播放按钮 */
206
+ .gt-center-play-btn[data-v-b2f99f46] {
207
+ position: absolute;
208
+ top: 50%;
209
+ left: 50%;
210
+ transform: translate(-50%, -50%);
211
+ width: 56px;
212
+ height: 56px;
213
+ background: rgba(0, 0, 0, 0.5);
214
+ border-radius: 50%;
215
+ display: flex;
216
+ align-items: center;
217
+ justify-content: center;
218
+ cursor: pointer;
219
+ transition: all 0.2s ease;
220
+ }
221
+ .gt-center-play-btn[data-v-b2f99f46]:hover {
222
+ background: rgba(0, 0, 0, 0.7);
223
+ transform: translate(-50%, -50%) scale(1.05);
224
+ }
225
+ .gt-center-play-btn svg[data-v-b2f99f46] {
226
+ width: 24px;
227
+ height: 24px;
228
+ color: white;
229
+ margin-left: 3px;
230
+ }
231
+
232
+ /* 环境信息面板 */
233
+ .gt-env-panel[data-v-b2f99f46] {
234
+ position: absolute;
235
+ top: 12px;
236
+ left: 12px;
237
+ background: rgba(0, 0, 0, 0.8);
238
+ border-radius: 6px;
239
+ padding: 8px 10px;
240
+ font-size: 11px;
241
+ font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
242
+ min-width: 160px;
243
+ max-width: 200px;
244
+ max-height: calc(100% - 24px);
245
+ overflow-y: auto;
246
+ backdrop-filter: blur(10px);
247
+ animation: gt-env-fade-in-b2f99f46 0.15s ease;
248
+ z-index: 15;
249
+ }
250
+ .gt-env-panel[data-v-b2f99f46]::-webkit-scrollbar {
251
+ width: 4px;
252
+ }
253
+ .gt-env-panel[data-v-b2f99f46]::-webkit-scrollbar-track {
254
+ background: transparent;
255
+ }
256
+ .gt-env-panel[data-v-b2f99f46]::-webkit-scrollbar-thumb {
257
+ background: rgba(255, 255, 255, 0.3);
258
+ border-radius: 2px;
259
+ }
260
+ @keyframes gt-env-fade-in-b2f99f46 {
261
+ from { opacity: 0; transform: translateY(-4px);
262
+ }
263
+ to { opacity: 1; transform: translateY(0);
264
+ }
265
+ }
266
+ .gt-env-panel .gt-env-row[data-v-b2f99f46] {
267
+ display: flex;
268
+ justify-content: space-between;
269
+ align-items: center;
270
+ padding: 2px 0;
271
+ color: rgba(255, 255, 255, 0.7);
272
+ }
273
+ .gt-env-panel .gt-env-row span[data-v-b2f99f46]:first-child {
274
+ color: rgba(255, 255, 255, 0.5);
275
+ margin-right: 16px;
276
+ }
277
+ .gt-env-panel .gt-env-row span[data-v-b2f99f46]:last-child {
278
+ font-variant-numeric: tabular-nums;
279
+ }
280
+ .gt-env-panel .gt-env-row .ok[data-v-b2f99f46] { color: #4caf50;
281
+ }
282
+ .gt-env-panel .gt-env-row .warn[data-v-b2f99f46] { color: #ff9800;
283
+ }
284
+ .gt-env-panel .gt-env-row .err[data-v-b2f99f46] { color: #f44336;
285
+ }
286
+ .gt-env-divider[data-v-b2f99f46] {
287
+ height: 1px;
288
+ background: rgba(255, 255, 255, 0.1);
289
+ margin: 4px 0;
290
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @give-tech/ec-player-vue
3
+ *
4
+ * Vue 3 播放器组件
5
+ */
6
+ export { default as EcPlayer } from './components/EcPlayer.vue';
7
+ export type { EcPlayerProps, EcPlayerEmits, EcPlayerExpose, EnvPanelData, EcPlayerGlobalConfig, WasmPathConfig, PlayerOptions } from './types';
8
+ export { configureEcPlayer, getGlobalConfig, getWasmConfig, getMergedConfig, getMergedPlayerOptions, resolveWasmPath, DEFAULT_EC_PLAYER_PROPS, DEFAULT_PLAYER_OPTIONS, DEFAULT_WASM_CONFIG, LogLevel } from './types';
9
+ export { usePlayer, useControls, useEnvInfo, type UsePlayerReturn, type UseControlsParams, type UseControlsReturn, type UseEnvInfoReturn } from './composables';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAG/D,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,aAAa,EACd,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,mBAAmB,EACnB,QAAQ,EACT,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,SAAS,EACT,WAAW,EACX,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAA"}