@livepeer-frameworks/player-svelte 0.1.2 → 0.2.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/LICENSE.md +24 -0
- package/README.md +6 -2
- package/dist/DevModePanel.svelte +53 -16
- package/dist/IdleScreen.svelte +36 -28
- package/dist/LoadingScreen.svelte +107 -67
- package/dist/LoadingScreen.svelte.bak +702 -0
- package/dist/Player.svelte +200 -53
- package/dist/Player.svelte.d.ts +6 -1
- package/dist/PlayerControls.svelte +114 -32
- package/dist/PlayerControls.svelte.d.ts +3 -0
- package/dist/StreamStateOverlay.svelte +33 -21
- package/dist/SubtitleRenderer.svelte +2 -2
- package/dist/controls/FullscreenButton.svelte +26 -0
- package/dist/controls/FullscreenButton.svelte.d.ts +3 -0
- package/dist/controls/LiveBadge.svelte +23 -0
- package/dist/controls/LiveBadge.svelte.d.ts +3 -0
- package/dist/controls/PlayButton.svelte +26 -0
- package/dist/controls/PlayButton.svelte.d.ts +3 -0
- package/dist/controls/SettingsMenu.svelte +208 -0
- package/dist/controls/SettingsMenu.svelte.d.ts +28 -0
- package/dist/controls/SkipButton.svelte +33 -0
- package/dist/controls/SkipButton.svelte.d.ts +7 -0
- package/dist/controls/TimeDisplay.svelte +18 -0
- package/dist/controls/TimeDisplay.svelte.d.ts +3 -0
- package/dist/controls/VolumeControl.svelte +26 -0
- package/dist/controls/VolumeControl.svelte.d.ts +3 -0
- package/dist/controls/index.d.ts +7 -0
- package/dist/controls/index.js +7 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +3 -1
- package/dist/stores/i18n.d.ts +3 -0
- package/dist/stores/i18n.js +4 -0
- package/dist/stores/index.d.ts +1 -0
- package/dist/stores/index.js +2 -0
- package/dist/stores/playerController.d.ts +2 -0
- package/dist/stores/playerController.js +4 -0
- package/package.json +19 -19
- package/src/DevModePanel.svelte +53 -16
- package/src/IdleScreen.svelte +12 -4
- package/src/LoadingScreen.svelte +90 -50
- package/src/LoadingScreen.svelte.bak +702 -0
- package/src/Player.svelte +200 -53
- package/src/PlayerControls.svelte +114 -32
- package/src/StreamStateOverlay.svelte +17 -5
- package/src/controls/FullscreenButton.svelte +26 -0
- package/src/controls/LiveBadge.svelte +23 -0
- package/src/controls/PlayButton.svelte +26 -0
- package/src/controls/SettingsMenu.svelte +208 -0
- package/src/controls/SkipButton.svelte +33 -0
- package/src/controls/TimeDisplay.svelte +18 -0
- package/src/controls/VolumeControl.svelte +26 -0
- package/src/controls/index.ts +7 -0
- package/src/index.ts +10 -0
- package/src/stores/i18n.ts +7 -0
- package/src/stores/index.ts +3 -0
- package/src/stores/playerController.ts +7 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext } from "svelte";
|
|
3
|
+
import type { Readable } from "svelte/store";
|
|
4
|
+
import { createTranslator, type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
5
|
+
import { SkipBackIcon, SkipForwardIcon } from "../icons";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
direction: "back" | "forward";
|
|
9
|
+
seconds?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let { direction, seconds = 10 }: Props = $props();
|
|
13
|
+
let pc: any = getContext("fw-player-controller");
|
|
14
|
+
const translatorCtx = getContext<Readable<TranslateFn> | undefined>("fw-translator");
|
|
15
|
+
const fallbackT = createTranslator({ locale: "en" });
|
|
16
|
+
let t: TranslateFn = $derived(translatorCtx ? $translatorCtx : fallbackT);
|
|
17
|
+
|
|
18
|
+
let label = $derived(direction === "back" ? t("skipBackward") : t("skipForward"));
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<button
|
|
22
|
+
type="button"
|
|
23
|
+
class="fw-btn-flush"
|
|
24
|
+
aria-label={label}
|
|
25
|
+
title={label}
|
|
26
|
+
onclick={() => pc?.seek((pc?.currentTime ?? 0) + (direction === "back" ? -seconds : seconds))}
|
|
27
|
+
>
|
|
28
|
+
{#if direction === "back"}
|
|
29
|
+
<SkipBackIcon size={16} />
|
|
30
|
+
{:else}
|
|
31
|
+
<SkipForwardIcon size={16} />
|
|
32
|
+
{/if}
|
|
33
|
+
</button>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext } from "svelte";
|
|
3
|
+
import { formatTimeDisplay } from "@livepeer-frameworks/player-core";
|
|
4
|
+
|
|
5
|
+
let pc: any = getContext("fw-player-controller");
|
|
6
|
+
|
|
7
|
+
let timeText = $derived(
|
|
8
|
+
formatTimeDisplay({
|
|
9
|
+
isLive: pc?.isEffectivelyLive ?? false,
|
|
10
|
+
currentTime: pc?.currentTime ?? 0,
|
|
11
|
+
duration: pc?.duration ?? NaN,
|
|
12
|
+
liveEdge: pc?.duration ?? 0,
|
|
13
|
+
seekableStart: 0,
|
|
14
|
+
})
|
|
15
|
+
);
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<span class="fw-time-display">{timeText}</span>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { getContext } from "svelte";
|
|
3
|
+
import type { Readable } from "svelte/store";
|
|
4
|
+
import { createTranslator, type TranslateFn } from "@livepeer-frameworks/player-core";
|
|
5
|
+
import { VolumeUpIcon, VolumeOffIcon } from "../icons";
|
|
6
|
+
|
|
7
|
+
let pc: any = getContext("fw-player-controller");
|
|
8
|
+
const translatorCtx = getContext<Readable<TranslateFn> | undefined>("fw-translator");
|
|
9
|
+
const fallbackT = createTranslator({ locale: "en" });
|
|
10
|
+
let t: TranslateFn = $derived(translatorCtx ? $translatorCtx : fallbackT);
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<button
|
|
14
|
+
type="button"
|
|
15
|
+
class="fw-btn-flush"
|
|
16
|
+
aria-label={pc?.isMuted ? t("unmute") : t("mute")}
|
|
17
|
+
aria-pressed={pc?.isMuted ?? false}
|
|
18
|
+
title={pc?.isMuted ? t("unmute") : t("mute")}
|
|
19
|
+
onclick={() => pc?.toggleMute()}
|
|
20
|
+
>
|
|
21
|
+
{#if pc?.isMuted}
|
|
22
|
+
<VolumeOffIcon size={16} />
|
|
23
|
+
{:else}
|
|
24
|
+
<VolumeUpIcon size={16} />
|
|
25
|
+
{/if}
|
|
26
|
+
</button>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as PlayButton } from "./PlayButton.svelte";
|
|
2
|
+
export { default as SkipButton } from "./SkipButton.svelte";
|
|
3
|
+
export { default as VolumeControl } from "./VolumeControl.svelte";
|
|
4
|
+
export { default as TimeDisplay } from "./TimeDisplay.svelte";
|
|
5
|
+
export { default as LiveBadge } from "./LiveBadge.svelte";
|
|
6
|
+
export { default as FullscreenButton } from "./FullscreenButton.svelte";
|
|
7
|
+
export { default as SettingsMenu } from "./SettingsMenu.svelte";
|
package/src/index.ts
CHANGED
|
@@ -48,6 +48,9 @@ export { default as ThumbnailOverlay } from "./ThumbnailOverlay.svelte";
|
|
|
48
48
|
export { default as StatsPanel } from "./StatsPanel.svelte";
|
|
49
49
|
export { default as DevModePanel } from "./DevModePanel.svelte";
|
|
50
50
|
|
|
51
|
+
// Composable control components
|
|
52
|
+
export * from "./controls";
|
|
53
|
+
|
|
51
54
|
// Icon components
|
|
52
55
|
export * from "./icons";
|
|
53
56
|
|
|
@@ -65,6 +68,9 @@ export {
|
|
|
65
68
|
PlayerController,
|
|
66
69
|
PlayerManager,
|
|
67
70
|
globalPlayerManager,
|
|
71
|
+
createTranslator,
|
|
72
|
+
getAvailableLocales,
|
|
73
|
+
getLocaleDisplayName,
|
|
68
74
|
} from "@livepeer-frameworks/player-core";
|
|
69
75
|
export type {
|
|
70
76
|
PlayerControllerConfig,
|
|
@@ -88,4 +94,8 @@ export type {
|
|
|
88
94
|
PlayerCombination,
|
|
89
95
|
PlayerManagerOptions,
|
|
90
96
|
PlayerManagerEvents,
|
|
97
|
+
FwLocale,
|
|
98
|
+
TranslateFn,
|
|
99
|
+
TranslationStrings,
|
|
100
|
+
I18nConfig,
|
|
91
101
|
} from "@livepeer-frameworks/player-core";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { writable, derived } from "svelte/store";
|
|
2
|
+
import { createTranslator, type FwLocale } from "@livepeer-frameworks/player-core";
|
|
3
|
+
|
|
4
|
+
export const localeStore = writable<FwLocale>("en");
|
|
5
|
+
export const translatorStore = derived(localeStore, ($locale) =>
|
|
6
|
+
createTranslator({ locale: $locale })
|
|
7
|
+
);
|
package/src/stores/index.ts
CHANGED
|
@@ -71,6 +71,9 @@ export {
|
|
|
71
71
|
type PlayerSelectionStore,
|
|
72
72
|
} from "./playerSelection";
|
|
73
73
|
|
|
74
|
+
// i18n (locale + translator)
|
|
75
|
+
export { localeStore, translatorStore } from "./i18n";
|
|
76
|
+
|
|
74
77
|
// PlayerController store (central orchestrator)
|
|
75
78
|
export {
|
|
76
79
|
createPlayerControllerStore,
|
|
@@ -106,6 +106,8 @@ export interface PlayerControllerStore extends Readable<PlayerControllerState> {
|
|
|
106
106
|
seek: (time: number) => void;
|
|
107
107
|
/** Seek by delta */
|
|
108
108
|
seekBy: (delta: number) => void;
|
|
109
|
+
/** Jump to live edge (for live streams) */
|
|
110
|
+
jumpToLive: () => void;
|
|
109
111
|
/** Set volume */
|
|
110
112
|
setVolume: (volume: number) => void;
|
|
111
113
|
/** Toggle mute */
|
|
@@ -485,6 +487,10 @@ export function createPlayerControllerStore(
|
|
|
485
487
|
controller?.seekBy(delta);
|
|
486
488
|
}
|
|
487
489
|
|
|
490
|
+
function jumpToLive(): void {
|
|
491
|
+
controller?.jumpToLive();
|
|
492
|
+
}
|
|
493
|
+
|
|
488
494
|
function setVolume(volume: number): void {
|
|
489
495
|
controller?.setVolume(volume);
|
|
490
496
|
}
|
|
@@ -579,6 +585,7 @@ export function createPlayerControllerStore(
|
|
|
579
585
|
togglePlay,
|
|
580
586
|
seek,
|
|
581
587
|
seekBy,
|
|
588
|
+
jumpToLive,
|
|
582
589
|
setVolume,
|
|
583
590
|
toggleMute,
|
|
584
591
|
toggleLoop,
|