@livepeer-frameworks/player-svelte 0.1.3 → 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.
Files changed (50) hide show
  1. package/dist/DevModePanel.svelte +14 -15
  2. package/dist/IdleScreen.svelte +12 -4
  3. package/dist/LoadingScreen.svelte +90 -50
  4. package/dist/LoadingScreen.svelte.bak +702 -0
  5. package/dist/Player.svelte +200 -53
  6. package/dist/Player.svelte.d.ts +6 -1
  7. package/dist/PlayerControls.svelte +109 -32
  8. package/dist/PlayerControls.svelte.d.ts +3 -0
  9. package/dist/StreamStateOverlay.svelte +17 -5
  10. package/dist/controls/FullscreenButton.svelte +26 -0
  11. package/dist/controls/FullscreenButton.svelte.d.ts +3 -0
  12. package/dist/controls/LiveBadge.svelte +23 -0
  13. package/dist/controls/LiveBadge.svelte.d.ts +3 -0
  14. package/dist/controls/PlayButton.svelte +26 -0
  15. package/dist/controls/PlayButton.svelte.d.ts +3 -0
  16. package/dist/controls/SettingsMenu.svelte +208 -0
  17. package/dist/controls/SettingsMenu.svelte.d.ts +28 -0
  18. package/dist/controls/SkipButton.svelte +33 -0
  19. package/dist/controls/SkipButton.svelte.d.ts +7 -0
  20. package/dist/controls/TimeDisplay.svelte +18 -0
  21. package/dist/controls/TimeDisplay.svelte.d.ts +3 -0
  22. package/dist/controls/VolumeControl.svelte +26 -0
  23. package/dist/controls/VolumeControl.svelte.d.ts +3 -0
  24. package/dist/controls/index.d.ts +7 -0
  25. package/dist/controls/index.js +7 -0
  26. package/dist/index.d.ts +3 -2
  27. package/dist/index.js +3 -1
  28. package/dist/stores/i18n.d.ts +3 -0
  29. package/dist/stores/i18n.js +4 -0
  30. package/dist/stores/index.d.ts +1 -0
  31. package/dist/stores/index.js +2 -0
  32. package/package.json +8 -8
  33. package/src/DevModePanel.svelte +14 -15
  34. package/src/IdleScreen.svelte +12 -4
  35. package/src/LoadingScreen.svelte +90 -50
  36. package/src/LoadingScreen.svelte.bak +702 -0
  37. package/src/Player.svelte +200 -53
  38. package/src/PlayerControls.svelte +109 -32
  39. package/src/StreamStateOverlay.svelte +17 -5
  40. package/src/controls/FullscreenButton.svelte +26 -0
  41. package/src/controls/LiveBadge.svelte +23 -0
  42. package/src/controls/PlayButton.svelte +26 -0
  43. package/src/controls/SettingsMenu.svelte +208 -0
  44. package/src/controls/SkipButton.svelte +33 -0
  45. package/src/controls/TimeDisplay.svelte +18 -0
  46. package/src/controls/VolumeControl.svelte +26 -0
  47. package/src/controls/index.ts +7 -0
  48. package/src/index.ts +10 -0
  49. package/src/stores/i18n.ts +7 -0
  50. package/src/stores/index.ts +3 -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
+ );
@@ -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,