@universal-web-video-player/player-svelte 0.5.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 +23 -0
- package/dist/UvpPlayer.svelte +105 -0
- package/dist/UvpPlayer.svelte.d.ts +52 -0
- package/dist/UvpPlayer.svelte.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/package.json +53 -0
- package/src/lib/UvpPlayer.svelte +105 -0
- package/src/lib/index.ts +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# @universal-web-video-player/player-svelte
|
|
2
|
+
|
|
3
|
+
Svelte wrapper for the Universal Video Player.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @universal-web-video-player/player-svelte @universal-web-video-player/player-web-component
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```svelte
|
|
14
|
+
<script>
|
|
15
|
+
import { UvpPlayer } from '@universal-web-video-player/player-svelte';
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<UvpPlayer
|
|
19
|
+
sourceUrl="https://example.com/video.mp4"
|
|
20
|
+
autoplay={true}
|
|
21
|
+
on:play={() => console.log('Playing!')}
|
|
22
|
+
/>
|
|
23
|
+
```
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount, createEventDispatcher } from 'svelte';
|
|
3
|
+
import { defineUvpPlayerElement } from '@universal-web-video-player/player-web-component';
|
|
4
|
+
import type {
|
|
5
|
+
UvpQualityOption,
|
|
6
|
+
UvpSourceItem,
|
|
7
|
+
UvpScaleMode,
|
|
8
|
+
UvpState
|
|
9
|
+
} from '@universal-web-video-player/player-core';
|
|
10
|
+
|
|
11
|
+
defineUvpPlayerElement();
|
|
12
|
+
|
|
13
|
+
export let sourceUrl: string | undefined = undefined;
|
|
14
|
+
export let sourceType: 'mp4' | 'mov' | 'hls' | 'dash' | undefined = undefined;
|
|
15
|
+
export let qualities: UvpQualityOption[] = [];
|
|
16
|
+
export let autoplay = false;
|
|
17
|
+
export let muted = false;
|
|
18
|
+
export let autoNext = false;
|
|
19
|
+
export let loop = false;
|
|
20
|
+
export let playbackRate = 1.0;
|
|
21
|
+
export let volume = 1.0;
|
|
22
|
+
export let customControls = false;
|
|
23
|
+
export let poster: string | undefined = undefined;
|
|
24
|
+
export let controls = true;
|
|
25
|
+
export let playlist: UvpSourceItem[] = [];
|
|
26
|
+
export let scaleMode: UvpScaleMode | undefined = undefined;
|
|
27
|
+
|
|
28
|
+
// Feature Flags
|
|
29
|
+
export let hideSettings = false;
|
|
30
|
+
export let hideFullscreen = false;
|
|
31
|
+
export let hidePlaylist = false;
|
|
32
|
+
export let hideVolume = false;
|
|
33
|
+
|
|
34
|
+
const dispatch = createEventDispatcher();
|
|
35
|
+
let playerElement: HTMLElement & any;
|
|
36
|
+
|
|
37
|
+
// Imperative API
|
|
38
|
+
export const play = () => playerElement?.play() ?? Promise.resolve();
|
|
39
|
+
export const pause = () => playerElement?.pause();
|
|
40
|
+
export const seek = (seconds: number) => playerElement?.seek(seconds);
|
|
41
|
+
export const next = () => playerElement?.next();
|
|
42
|
+
export const previous = () => playerElement?.previous();
|
|
43
|
+
export const seekToLive = () => playerElement?.seekToLive();
|
|
44
|
+
export const getPlayerState = () => playerElement?.getPlayerState() as UvpState;
|
|
45
|
+
|
|
46
|
+
// Direct property synchronization
|
|
47
|
+
$: if (playerElement) {
|
|
48
|
+
if (volume !== undefined) playerElement.volume = volume;
|
|
49
|
+
if (playbackRate !== undefined) playerElement.playbackRate = playbackRate;
|
|
50
|
+
if (loop !== undefined) playerElement.loop = loop;
|
|
51
|
+
if (muted !== undefined) playerElement.muted = muted;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
$: qualitiesJson = qualities.length > 0 ? JSON.stringify(qualities) : undefined;
|
|
55
|
+
$: playlistJson = playlist.length > 0 ? JSON.stringify(playlist) : undefined;
|
|
56
|
+
|
|
57
|
+
function handleEvent(event: Event) {
|
|
58
|
+
const type = event.type === 'uvp-state-change' ? 'statechange' : event.type;
|
|
59
|
+
const detail = (event as CustomEvent).detail;
|
|
60
|
+
dispatch(type, detail);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
onMount(() => {
|
|
64
|
+
const events = ['ready', 'play', 'pause', 'ended', 'qualitychange', 'error', 'uvp-state-change'];
|
|
65
|
+
events.forEach(name => {
|
|
66
|
+
playerElement.addEventListener(name, handleEvent);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
return () => {
|
|
70
|
+
events.forEach(name => {
|
|
71
|
+
playerElement.removeEventListener(name, handleEvent);
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<uvp-player
|
|
78
|
+
bind:this={playerElement}
|
|
79
|
+
source-url={sourceUrl}
|
|
80
|
+
source-type={sourceType}
|
|
81
|
+
source-qualities={qualitiesJson}
|
|
82
|
+
playlist={playlistJson}
|
|
83
|
+
poster={poster}
|
|
84
|
+
autoplay={autoplay ? '' : undefined}
|
|
85
|
+
muted={muted ? '' : undefined}
|
|
86
|
+
controls={controls === false ? 'false' : undefined}
|
|
87
|
+
auto-next={autoNext ? 'true' : undefined}
|
|
88
|
+
custom-controls={customControls ? 'true' : undefined}
|
|
89
|
+
scale-mode={scaleMode}
|
|
90
|
+
hide-settings={hideSettings ? '' : undefined}
|
|
91
|
+
hide-fullscreen={hideFullscreen ? '' : undefined}
|
|
92
|
+
hide-playlist={hidePlaylist ? '' : undefined}
|
|
93
|
+
hide-volume={hideVolume ? '' : undefined}
|
|
94
|
+
class={$$props.class}
|
|
95
|
+
>
|
|
96
|
+
<slot />
|
|
97
|
+
</uvp-player>
|
|
98
|
+
|
|
99
|
+
<style>
|
|
100
|
+
uvp-player {
|
|
101
|
+
display: block;
|
|
102
|
+
width: 100%;
|
|
103
|
+
height: 100%;
|
|
104
|
+
}
|
|
105
|
+
</style>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { UvpQualityOption, UvpSourceItem, UvpScaleMode, UvpState } from '@universal-web-video-player/player-core';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
[x: string]: any;
|
|
6
|
+
sourceUrl?: string | undefined;
|
|
7
|
+
sourceType?: "mp4" | "mov" | "hls" | "dash" | undefined;
|
|
8
|
+
qualities?: UvpQualityOption[] | undefined;
|
|
9
|
+
autoplay?: boolean | undefined;
|
|
10
|
+
muted?: boolean | undefined;
|
|
11
|
+
autoNext?: boolean | undefined;
|
|
12
|
+
loop?: boolean | undefined;
|
|
13
|
+
playbackRate?: number | undefined;
|
|
14
|
+
volume?: number | undefined;
|
|
15
|
+
customControls?: boolean | undefined;
|
|
16
|
+
poster?: string | undefined;
|
|
17
|
+
controls?: boolean | undefined;
|
|
18
|
+
playlist?: UvpSourceItem[] | undefined;
|
|
19
|
+
scaleMode?: UvpScaleMode | undefined;
|
|
20
|
+
hideSettings?: boolean | undefined;
|
|
21
|
+
hideFullscreen?: boolean | undefined;
|
|
22
|
+
hidePlaylist?: boolean | undefined;
|
|
23
|
+
hideVolume?: boolean | undefined;
|
|
24
|
+
play?: (() => any) | undefined;
|
|
25
|
+
pause?: (() => any) | undefined;
|
|
26
|
+
seek?: ((seconds: number) => any) | undefined;
|
|
27
|
+
next?: (() => any) | undefined;
|
|
28
|
+
previous?: (() => any) | undefined;
|
|
29
|
+
seekToLive?: (() => any) | undefined;
|
|
30
|
+
getPlayerState?: (() => UvpState) | undefined;
|
|
31
|
+
};
|
|
32
|
+
events: {
|
|
33
|
+
[evt: string]: CustomEvent<any>;
|
|
34
|
+
};
|
|
35
|
+
slots: {
|
|
36
|
+
default: {};
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export type UvpPlayerProps = typeof __propDef.props;
|
|
40
|
+
export type UvpPlayerEvents = typeof __propDef.events;
|
|
41
|
+
export type UvpPlayerSlots = typeof __propDef.slots;
|
|
42
|
+
export default class UvpPlayer extends SvelteComponentTyped<UvpPlayerProps, UvpPlayerEvents, UvpPlayerSlots> {
|
|
43
|
+
get play(): () => any;
|
|
44
|
+
get pause(): () => any;
|
|
45
|
+
get seek(): (seconds: number) => any;
|
|
46
|
+
get next(): () => any;
|
|
47
|
+
get previous(): () => any;
|
|
48
|
+
get seekToLive(): () => any;
|
|
49
|
+
get getPlayerState(): () => UvpState;
|
|
50
|
+
}
|
|
51
|
+
export {};
|
|
52
|
+
//# sourceMappingURL=UvpPlayer.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UvpPlayer.svelte.d.ts","sourceRoot":"","sources":["../src/lib/UvpPlayer.svelte.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AAGD,OAAO,KAAK,EACR,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,QAAQ,EACT,MAAM,yCAAyC,CAAC;AAiFnD,QAAA,MAAM,SAAS;;;oBADwjB,MAAM,GAAG,SAAS;qBAAe,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS;oBAAc,gBAAgB,EAAE;;;;;;;;iBAAiN,MAAM,GAAG,SAAS;;mBAAyC,aAAa,EAAE;oBAAc,YAAY,GAAG,SAAS;;;;;;;0BA5Cz9B,MAAM;;;;gCAImC,QAAQ;;;;;;;;CAyCK,CAAC;AACjF,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACpD,MAAM,MAAM,eAAe,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACtD,MAAM,MAAM,cAAc,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,oBAAoB,CAAC,cAAc,EAAE,eAAe,EAAE,cAAc,CAAC;IACxG,IAAI,IAAI,cAA4D;IACpE,IAAI,KAAK,cAA6D;IACtE,IAAI,IAAI,cArDc,MAAM,SAqDwC;IACpE,IAAI,IAAI,cAA4D;IACpE,IAAI,QAAQ,cAAgE;IAC5E,IAAI,UAAU,cAAkE;IAChF,IAAI,cAAc,UArD6C,QAAQ,CAqDiB;CAC3F"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as UvpPlayer } from './UvpPlayer.svelte';
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@universal-web-video-player/player-svelte",
|
|
3
|
+
"version": "0.5.0",
|
|
4
|
+
"description": "Svelte wrapper for universal video player",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"svelte": "./dist/index.js",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"src"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "svelte-package -o dist",
|
|
22
|
+
"lint": "svelte-check",
|
|
23
|
+
"typecheck": "svelte-check"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@universal-web-video-player/player-web-component": "0.5.0"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"svelte": ">=3"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@sveltejs/package": "^2.3.1",
|
|
33
|
+
"svelte": "^4.2.12",
|
|
34
|
+
"svelte-check": "^3.6.7",
|
|
35
|
+
"typescript": "~5.5.4"
|
|
36
|
+
},
|
|
37
|
+
"license": "MIT",
|
|
38
|
+
"author": "AIPXPERTS",
|
|
39
|
+
"repository": {
|
|
40
|
+
"type": "git",
|
|
41
|
+
"url": "https://github.com/aipxperts/aipxperts-video-player.git",
|
|
42
|
+
"directory": "packages/svelte"
|
|
43
|
+
},
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/aipxperts/aipxperts-video-player/issues"
|
|
46
|
+
},
|
|
47
|
+
"homepage": "https://github.com/aipxperts/aipxperts-video-player#readme",
|
|
48
|
+
"keywords": [
|
|
49
|
+
"video",
|
|
50
|
+
"player",
|
|
51
|
+
"svelte"
|
|
52
|
+
]
|
|
53
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount, createEventDispatcher } from 'svelte';
|
|
3
|
+
import { defineUvpPlayerElement } from '@universal-web-video-player/player-web-component';
|
|
4
|
+
import type {
|
|
5
|
+
UvpQualityOption,
|
|
6
|
+
UvpSourceItem,
|
|
7
|
+
UvpScaleMode,
|
|
8
|
+
UvpState
|
|
9
|
+
} from '@universal-web-video-player/player-core';
|
|
10
|
+
|
|
11
|
+
defineUvpPlayerElement();
|
|
12
|
+
|
|
13
|
+
export let sourceUrl: string | undefined = undefined;
|
|
14
|
+
export let sourceType: 'mp4' | 'mov' | 'hls' | 'dash' | undefined = undefined;
|
|
15
|
+
export let qualities: UvpQualityOption[] = [];
|
|
16
|
+
export let autoplay = false;
|
|
17
|
+
export let muted = false;
|
|
18
|
+
export let autoNext = false;
|
|
19
|
+
export let loop = false;
|
|
20
|
+
export let playbackRate = 1.0;
|
|
21
|
+
export let volume = 1.0;
|
|
22
|
+
export let customControls = false;
|
|
23
|
+
export let poster: string | undefined = undefined;
|
|
24
|
+
export let controls = true;
|
|
25
|
+
export let playlist: UvpSourceItem[] = [];
|
|
26
|
+
export let scaleMode: UvpScaleMode | undefined = undefined;
|
|
27
|
+
|
|
28
|
+
// Feature Flags
|
|
29
|
+
export let hideSettings = false;
|
|
30
|
+
export let hideFullscreen = false;
|
|
31
|
+
export let hidePlaylist = false;
|
|
32
|
+
export let hideVolume = false;
|
|
33
|
+
|
|
34
|
+
const dispatch = createEventDispatcher();
|
|
35
|
+
let playerElement: HTMLElement & any;
|
|
36
|
+
|
|
37
|
+
// Imperative API
|
|
38
|
+
export const play = () => playerElement?.play() ?? Promise.resolve();
|
|
39
|
+
export const pause = () => playerElement?.pause();
|
|
40
|
+
export const seek = (seconds: number) => playerElement?.seek(seconds);
|
|
41
|
+
export const next = () => playerElement?.next();
|
|
42
|
+
export const previous = () => playerElement?.previous();
|
|
43
|
+
export const seekToLive = () => playerElement?.seekToLive();
|
|
44
|
+
export const getPlayerState = () => playerElement?.getPlayerState() as UvpState;
|
|
45
|
+
|
|
46
|
+
// Direct property synchronization
|
|
47
|
+
$: if (playerElement) {
|
|
48
|
+
if (volume !== undefined) playerElement.volume = volume;
|
|
49
|
+
if (playbackRate !== undefined) playerElement.playbackRate = playbackRate;
|
|
50
|
+
if (loop !== undefined) playerElement.loop = loop;
|
|
51
|
+
if (muted !== undefined) playerElement.muted = muted;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
$: qualitiesJson = qualities.length > 0 ? JSON.stringify(qualities) : undefined;
|
|
55
|
+
$: playlistJson = playlist.length > 0 ? JSON.stringify(playlist) : undefined;
|
|
56
|
+
|
|
57
|
+
function handleEvent(event: Event) {
|
|
58
|
+
const type = event.type === 'uvp-state-change' ? 'statechange' : event.type;
|
|
59
|
+
const detail = (event as CustomEvent).detail;
|
|
60
|
+
dispatch(type, detail);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
onMount(() => {
|
|
64
|
+
const events = ['ready', 'play', 'pause', 'ended', 'qualitychange', 'error', 'uvp-state-change'];
|
|
65
|
+
events.forEach(name => {
|
|
66
|
+
playerElement.addEventListener(name, handleEvent);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
return () => {
|
|
70
|
+
events.forEach(name => {
|
|
71
|
+
playerElement.removeEventListener(name, handleEvent);
|
|
72
|
+
});
|
|
73
|
+
};
|
|
74
|
+
});
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<uvp-player
|
|
78
|
+
bind:this={playerElement}
|
|
79
|
+
source-url={sourceUrl}
|
|
80
|
+
source-type={sourceType}
|
|
81
|
+
source-qualities={qualitiesJson}
|
|
82
|
+
playlist={playlistJson}
|
|
83
|
+
poster={poster}
|
|
84
|
+
autoplay={autoplay ? '' : undefined}
|
|
85
|
+
muted={muted ? '' : undefined}
|
|
86
|
+
controls={controls === false ? 'false' : undefined}
|
|
87
|
+
auto-next={autoNext ? 'true' : undefined}
|
|
88
|
+
custom-controls={customControls ? 'true' : undefined}
|
|
89
|
+
scale-mode={scaleMode}
|
|
90
|
+
hide-settings={hideSettings ? '' : undefined}
|
|
91
|
+
hide-fullscreen={hideFullscreen ? '' : undefined}
|
|
92
|
+
hide-playlist={hidePlaylist ? '' : undefined}
|
|
93
|
+
hide-volume={hideVolume ? '' : undefined}
|
|
94
|
+
class={$$props.class}
|
|
95
|
+
>
|
|
96
|
+
<slot />
|
|
97
|
+
</uvp-player>
|
|
98
|
+
|
|
99
|
+
<style>
|
|
100
|
+
uvp-player {
|
|
101
|
+
display: block;
|
|
102
|
+
width: 100%;
|
|
103
|
+
height: 100%;
|
|
104
|
+
}
|
|
105
|
+
</style>
|
package/src/lib/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as UvpPlayer } from './UvpPlayer.svelte';
|