@livepeer-frameworks/player-svelte 0.0.3

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 (169) hide show
  1. package/dist/DevModePanel.svelte +650 -0
  2. package/dist/DevModePanel.svelte.d.ts +31 -0
  3. package/dist/DvdLogo.svelte +213 -0
  4. package/dist/DvdLogo.svelte.d.ts +7 -0
  5. package/dist/Icons.svelte +27 -0
  6. package/dist/Icons.svelte.d.ts +25 -0
  7. package/dist/IdleScreen.svelte +752 -0
  8. package/dist/IdleScreen.svelte.d.ts +11 -0
  9. package/dist/LoadingScreen.svelte +689 -0
  10. package/dist/LoadingScreen.svelte.d.ts +7 -0
  11. package/dist/Player.svelte +482 -0
  12. package/dist/Player.svelte.d.ts +26 -0
  13. package/dist/PlayerControls.svelte +739 -0
  14. package/dist/PlayerControls.svelte.d.ts +20 -0
  15. package/dist/SeekBar.svelte +274 -0
  16. package/dist/SeekBar.svelte.d.ts +25 -0
  17. package/dist/SkipIndicator.svelte +95 -0
  18. package/dist/SkipIndicator.svelte.d.ts +14 -0
  19. package/dist/SpeedIndicator.svelte +38 -0
  20. package/dist/SpeedIndicator.svelte.d.ts +8 -0
  21. package/dist/StatsPanel.svelte +155 -0
  22. package/dist/StatsPanel.svelte.d.ts +27 -0
  23. package/dist/StreamStateOverlay.svelte +266 -0
  24. package/dist/StreamStateOverlay.svelte.d.ts +18 -0
  25. package/dist/SubtitleRenderer.svelte +234 -0
  26. package/dist/SubtitleRenderer.svelte.d.ts +41 -0
  27. package/dist/ThumbnailOverlay.svelte +96 -0
  28. package/dist/ThumbnailOverlay.svelte.d.ts +11 -0
  29. package/dist/TitleOverlay.svelte +47 -0
  30. package/dist/TitleOverlay.svelte.d.ts +9 -0
  31. package/dist/assets/logomark.svg +56 -0
  32. package/dist/components/VolumeIcons.svelte +53 -0
  33. package/dist/components/VolumeIcons.svelte.d.ts +10 -0
  34. package/dist/global.d.ts +15 -0
  35. package/dist/icons/FullscreenExitIcon.svelte +33 -0
  36. package/dist/icons/FullscreenExitIcon.svelte.d.ts +8 -0
  37. package/dist/icons/FullscreenIcon.svelte +33 -0
  38. package/dist/icons/FullscreenIcon.svelte.d.ts +8 -0
  39. package/dist/icons/PauseIcon.svelte +28 -0
  40. package/dist/icons/PauseIcon.svelte.d.ts +8 -0
  41. package/dist/icons/PictureInPictureIcon.svelte +28 -0
  42. package/dist/icons/PictureInPictureIcon.svelte.d.ts +8 -0
  43. package/dist/icons/PlayIcon.svelte +27 -0
  44. package/dist/icons/PlayIcon.svelte.d.ts +8 -0
  45. package/dist/icons/SeekToLiveIcon.svelte +30 -0
  46. package/dist/icons/SeekToLiveIcon.svelte.d.ts +8 -0
  47. package/dist/icons/SettingsIcon.svelte +40 -0
  48. package/dist/icons/SettingsIcon.svelte.d.ts +8 -0
  49. package/dist/icons/SkipBackIcon.svelte +32 -0
  50. package/dist/icons/SkipBackIcon.svelte.d.ts +8 -0
  51. package/dist/icons/SkipForwardIcon.svelte +32 -0
  52. package/dist/icons/SkipForwardIcon.svelte.d.ts +8 -0
  53. package/dist/icons/StatsIcon.svelte +29 -0
  54. package/dist/icons/StatsIcon.svelte.d.ts +8 -0
  55. package/dist/icons/VolumeOffIcon.svelte +29 -0
  56. package/dist/icons/VolumeOffIcon.svelte.d.ts +8 -0
  57. package/dist/icons/VolumeUpIcon.svelte +34 -0
  58. package/dist/icons/VolumeUpIcon.svelte.d.ts +8 -0
  59. package/dist/icons/index.d.ts +17 -0
  60. package/dist/icons/index.js +17 -0
  61. package/dist/index.d.ts +50 -0
  62. package/dist/index.js +54 -0
  63. package/dist/player.css +2 -0
  64. package/dist/stores/index.d.ts +15 -0
  65. package/dist/stores/index.js +21 -0
  66. package/dist/stores/playbackQuality.d.ts +43 -0
  67. package/dist/stores/playbackQuality.js +107 -0
  68. package/dist/stores/playerContext.d.ts +73 -0
  69. package/dist/stores/playerContext.js +166 -0
  70. package/dist/stores/playerController.d.ts +178 -0
  71. package/dist/stores/playerController.js +358 -0
  72. package/dist/stores/playerSelection.d.ts +84 -0
  73. package/dist/stores/playerSelection.js +159 -0
  74. package/dist/stores/streamState.d.ts +44 -0
  75. package/dist/stores/streamState.js +314 -0
  76. package/dist/stores/viewerEndpoints.d.ts +48 -0
  77. package/dist/stores/viewerEndpoints.js +178 -0
  78. package/dist/types.d.ts +4 -0
  79. package/dist/types.js +4 -0
  80. package/dist/ui/Badge.svelte +21 -0
  81. package/dist/ui/Badge.svelte.d.ts +32 -0
  82. package/dist/ui/Button.svelte +42 -0
  83. package/dist/ui/Button.svelte.d.ts +35 -0
  84. package/dist/ui/Slider.svelte +100 -0
  85. package/dist/ui/Slider.svelte.d.ts +17 -0
  86. package/dist/ui/badge.d.ts +6 -0
  87. package/dist/ui/badge.js +10 -0
  88. package/dist/ui/button.d.ts +8 -0
  89. package/dist/ui/button.js +21 -0
  90. package/dist/ui/context-menu/ContextMenuCheckboxItem.svelte +34 -0
  91. package/dist/ui/context-menu/ContextMenuCheckboxItem.svelte.d.ts +31 -0
  92. package/dist/ui/context-menu/ContextMenuContent.svelte +17 -0
  93. package/dist/ui/context-menu/ContextMenuContent.svelte.d.ts +7 -0
  94. package/dist/ui/context-menu/ContextMenuItem.svelte +22 -0
  95. package/dist/ui/context-menu/ContextMenuItem.svelte.d.ts +8 -0
  96. package/dist/ui/context-menu/ContextMenuLabel.svelte +22 -0
  97. package/dist/ui/context-menu/ContextMenuLabel.svelte.d.ts +8 -0
  98. package/dist/ui/context-menu/ContextMenuPortal.svelte +11 -0
  99. package/dist/ui/context-menu/ContextMenuPortal.svelte.d.ts +6 -0
  100. package/dist/ui/context-menu/ContextMenuRadioItem.svelte +21 -0
  101. package/dist/ui/context-menu/ContextMenuRadioItem.svelte.d.ts +31 -0
  102. package/dist/ui/context-menu/ContextMenuSeparator.svelte +14 -0
  103. package/dist/ui/context-menu/ContextMenuSeparator.svelte.d.ts +6 -0
  104. package/dist/ui/context-menu/ContextMenuShortcut.svelte +19 -0
  105. package/dist/ui/context-menu/ContextMenuShortcut.svelte.d.ts +7 -0
  106. package/dist/ui/context-menu/ContextMenuSubContent.svelte +20 -0
  107. package/dist/ui/context-menu/ContextMenuSubContent.svelte.d.ts +7 -0
  108. package/dist/ui/context-menu/ContextMenuSubTrigger.svelte +34 -0
  109. package/dist/ui/context-menu/ContextMenuSubTrigger.svelte.d.ts +8 -0
  110. package/dist/ui/context-menu/index.d.ts +17 -0
  111. package/dist/ui/context-menu/index.js +17 -0
  112. package/package.json +51 -0
  113. package/src/DevModePanel.svelte +650 -0
  114. package/src/DvdLogo.svelte +213 -0
  115. package/src/Icons.svelte +27 -0
  116. package/src/IdleScreen.svelte +739 -0
  117. package/src/LoadingScreen.svelte +674 -0
  118. package/src/Player.svelte +483 -0
  119. package/src/PlayerControls.svelte +752 -0
  120. package/src/SeekBar.svelte +274 -0
  121. package/src/SkipIndicator.svelte +95 -0
  122. package/src/SpeedIndicator.svelte +37 -0
  123. package/src/StatsPanel.svelte +155 -0
  124. package/src/StreamStateOverlay.svelte +266 -0
  125. package/src/SubtitleRenderer.svelte +234 -0
  126. package/src/ThumbnailOverlay.svelte +96 -0
  127. package/src/TitleOverlay.svelte +47 -0
  128. package/src/assets/logomark.svg +56 -0
  129. package/src/components/VolumeIcons.svelte +53 -0
  130. package/src/global.d.ts +15 -0
  131. package/src/icons/FullscreenExitIcon.svelte +33 -0
  132. package/src/icons/FullscreenIcon.svelte +33 -0
  133. package/src/icons/PauseIcon.svelte +28 -0
  134. package/src/icons/PictureInPictureIcon.svelte +28 -0
  135. package/src/icons/PlayIcon.svelte +27 -0
  136. package/src/icons/SeekToLiveIcon.svelte +30 -0
  137. package/src/icons/SettingsIcon.svelte +40 -0
  138. package/src/icons/SkipBackIcon.svelte +32 -0
  139. package/src/icons/SkipForwardIcon.svelte +32 -0
  140. package/src/icons/StatsIcon.svelte +29 -0
  141. package/src/icons/VolumeOffIcon.svelte +29 -0
  142. package/src/icons/VolumeUpIcon.svelte +34 -0
  143. package/src/icons/index.ts +18 -0
  144. package/src/index.ts +84 -0
  145. package/src/player.css +2 -0
  146. package/src/stores/index.ts +88 -0
  147. package/src/stores/playbackQuality.ts +137 -0
  148. package/src/stores/playerContext.ts +221 -0
  149. package/src/stores/playerController.ts +568 -0
  150. package/src/stores/playerSelection.ts +216 -0
  151. package/src/stores/streamState.ts +367 -0
  152. package/src/stores/viewerEndpoints.ts +224 -0
  153. package/src/types.ts +6 -0
  154. package/src/ui/Badge.svelte +21 -0
  155. package/src/ui/Button.svelte +42 -0
  156. package/src/ui/Slider.svelte +100 -0
  157. package/src/ui/badge.ts +20 -0
  158. package/src/ui/button.ts +35 -0
  159. package/src/ui/context-menu/ContextMenuCheckboxItem.svelte +34 -0
  160. package/src/ui/context-menu/ContextMenuContent.svelte +17 -0
  161. package/src/ui/context-menu/ContextMenuItem.svelte +22 -0
  162. package/src/ui/context-menu/ContextMenuLabel.svelte +22 -0
  163. package/src/ui/context-menu/ContextMenuPortal.svelte +11 -0
  164. package/src/ui/context-menu/ContextMenuRadioItem.svelte +21 -0
  165. package/src/ui/context-menu/ContextMenuSeparator.svelte +14 -0
  166. package/src/ui/context-menu/ContextMenuShortcut.svelte +19 -0
  167. package/src/ui/context-menu/ContextMenuSubContent.svelte +20 -0
  168. package/src/ui/context-menu/ContextMenuSubTrigger.svelte +34 -0
  169. package/src/ui/context-menu/index.ts +36 -0
@@ -0,0 +1,213 @@
1
+ <!--
2
+ DvdLogo.svelte - Bouncing DVD logo animation
3
+ Port of src/components/DvdLogo.tsx
4
+ -->
5
+ <script lang="ts">
6
+ import { onMount, onDestroy } from 'svelte';
7
+
8
+ interface Props {
9
+ parentRef: HTMLElement | undefined;
10
+ scale?: number;
11
+ }
12
+
13
+ let { parentRef, scale = 0.15 }: Props = $props();
14
+
15
+ type Point = { top: number; left: number };
16
+ type Velocity = { x: number; y: number };
17
+ type Size = { width: number; height: number };
18
+
19
+ const ORIGINAL_WIDTH = 153;
20
+ const ORIGINAL_HEIGHT = 69;
21
+ const ASPECT_RATIO = ORIGINAL_WIDTH / ORIGINAL_HEIGHT;
22
+
23
+ const COLORS = [
24
+ '#7aa2f7',
25
+ '#bb9af7',
26
+ '#9ece6a',
27
+ '#73daca',
28
+ '#7dcfff',
29
+ '#f7768e',
30
+ '#e0af68',
31
+ '#2ac3de',
32
+ ];
33
+
34
+ function pickNextColor(current?: string): string {
35
+ if (COLORS.length === 0) return current ?? '#ffffff';
36
+ if (COLORS.length === 1) return COLORS[0];
37
+
38
+ let next: string;
39
+ do {
40
+ next = COLORS[Math.floor(Math.random() * COLORS.length)];
41
+ } while (next === current);
42
+
43
+ return next;
44
+ }
45
+
46
+ // State
47
+ let position = $state<Point>({ top: 0, left: 0 });
48
+ let dimensions = $state<Size>({ width: ORIGINAL_WIDTH, height: ORIGINAL_HEIGHT });
49
+ let color = $state<string>(pickNextColor());
50
+
51
+ // Refs (non-reactive mutable state for animation)
52
+ let positionRef: Point = { top: 0, left: 0 };
53
+ let dimensionsRef: Size = { width: ORIGINAL_WIDTH, height: ORIGINAL_HEIGHT };
54
+ let velocityRef: Velocity = { x: 1.8, y: 1.6 };
55
+ let animationFrame: number | null = null;
56
+ let resizeObserver: ResizeObserver | null = null;
57
+ let lastTimestamp = performance.now();
58
+
59
+ function recalculateDimensions() {
60
+ if (!parentRef) return;
61
+
62
+ const parentWidth = parentRef.clientWidth;
63
+ const parentHeight = parentRef.clientHeight;
64
+ if (parentWidth === 0 || parentHeight === 0) return;
65
+
66
+ const maxWidth = parentWidth * scale;
67
+ const maxHeight = parentHeight * scale;
68
+
69
+ let width = maxWidth;
70
+ let height = width / ASPECT_RATIO;
71
+
72
+ if (height > maxHeight) {
73
+ height = maxHeight;
74
+ width = height * ASPECT_RATIO;
75
+ }
76
+
77
+ const nextDimensions: Size = {
78
+ width: Math.max(20, width),
79
+ height: Math.max(20, height),
80
+ };
81
+
82
+ dimensionsRef = nextDimensions;
83
+ dimensions = nextDimensions;
84
+
85
+ const maxTop = Math.max(0, parentHeight - nextDimensions.height);
86
+ const maxLeft = Math.max(0, parentWidth - nextDimensions.width);
87
+
88
+ const startPosition: Point = {
89
+ top: Math.random() * maxTop,
90
+ left: Math.random() * maxLeft,
91
+ };
92
+
93
+ positionRef = startPosition;
94
+ position = startPosition;
95
+
96
+ const baseSpeed = Math.max(1.2, Math.min(nextDimensions.width, nextDimensions.height) / 70);
97
+ velocityRef = {
98
+ x: baseSpeed * (Math.random() > 0.5 ? 1 : -1),
99
+ y: baseSpeed * (Math.random() > 0.5 ? 1 : -1),
100
+ };
101
+ }
102
+
103
+ function animate(timestamp: number) {
104
+ if (!parentRef) {
105
+ animationFrame = requestAnimationFrame(animate);
106
+ return;
107
+ }
108
+
109
+ const dims = dimensionsRef;
110
+ if (dims.width === 0 || dims.height === 0) {
111
+ animationFrame = requestAnimationFrame(animate);
112
+ return;
113
+ }
114
+
115
+ const deltaMs = timestamp - lastTimestamp;
116
+ lastTimestamp = timestamp;
117
+ // Cap multiplier to prevent huge jumps on lag spikes (match React)
118
+ const speedMultiplier = Math.min(deltaMs / 16, 2);
119
+
120
+ const maxTop = parentRef.clientHeight - dims.height;
121
+ const maxLeft = parentRef.clientWidth - dims.width;
122
+
123
+ let { top, left } = positionRef;
124
+ let { x, y } = velocityRef;
125
+ let bounced = false;
126
+
127
+ top += y * speedMultiplier;
128
+ left += x * speedMultiplier;
129
+
130
+ if (top <= 0 || top >= maxTop) {
131
+ y = -y;
132
+ top = Math.max(0, Math.min(maxTop, top));
133
+ bounced = true;
134
+ }
135
+
136
+ if (left <= 0 || left >= maxLeft) {
137
+ x = -x;
138
+ left = Math.max(0, Math.min(maxLeft, left));
139
+ bounced = true;
140
+ }
141
+
142
+ velocityRef = { x, y };
143
+ positionRef = { top, left };
144
+ position = { top, left };
145
+
146
+ if (bounced) {
147
+ color = pickNextColor(color);
148
+ }
149
+
150
+ animationFrame = requestAnimationFrame(animate);
151
+ }
152
+
153
+ // Setup resize observer and animation when parentRef changes
154
+ $effect(() => {
155
+ if (!parentRef) return;
156
+
157
+ recalculateDimensions();
158
+
159
+ if (typeof ResizeObserver !== 'undefined') {
160
+ resizeObserver = new ResizeObserver(() => recalculateDimensions());
161
+ resizeObserver.observe(parentRef);
162
+ } else {
163
+ const onResize = () => recalculateDimensions();
164
+ window.addEventListener('resize', onResize);
165
+ return () => window.removeEventListener('resize', onResize);
166
+ }
167
+
168
+ return () => {
169
+ resizeObserver?.disconnect();
170
+ resizeObserver = null;
171
+ };
172
+ });
173
+
174
+ // Start animation on mount
175
+ onMount(() => {
176
+ animationFrame = requestAnimationFrame(animate);
177
+ });
178
+
179
+ // Cleanup on destroy
180
+ onDestroy(() => {
181
+ if (animationFrame) {
182
+ cancelAnimationFrame(animationFrame);
183
+ animationFrame = null;
184
+ }
185
+ resizeObserver?.disconnect();
186
+ resizeObserver = null;
187
+ });
188
+ </script>
189
+
190
+ <div
191
+ class="fw-player-dvd"
192
+ style="
193
+ position: absolute;
194
+ pointer-events: none;
195
+ user-select: none;
196
+ top: {position.top}px;
197
+ left: {position.left}px;
198
+ width: {dimensions.width}px;
199
+ height: {dimensions.height}px;
200
+ "
201
+ >
202
+ <svg
203
+ width="100%"
204
+ height="100%"
205
+ viewBox="0 0 153 69"
206
+ fill={color}
207
+ class="select-none"
208
+ >
209
+ <g>
210
+ <path d="M140.186,63.52h-1.695l-0.692,5.236h-0.847l0.77-5.236h-1.693l0.076-0.694h4.158L140.186,63.52L140.186,63.52z M146.346,68.756h-0.848v-4.545l0,0l-2.389,4.545l-1-4.545l0,0l-1.462,4.545h-0.771l1.924-5.931h0.695l0.924,4.006l2.078-4.006 h0.848V68.756L146.346,68.756z M126.027,0.063H95.352c0,0-8.129,9.592-9.654,11.434c-8.064,9.715-9.523,12.32-9.779,13.02 c0.063-0.699-0.256-3.304-3.686-13.148C71.282,8.7,68.359,0.062,68.359,0.062H57.881V0L32.35,0.063H13.169l-1.97,8.131 l14.543,0.062h3.365c9.336,0,15.055,3.747,13.467,10.354c-1.717,7.24-9.91,10.416-18.545,10.416h-3.24l4.191-17.783H10.502 L4.34,37.219h20.578c15.432,0,30.168-8.13,32.709-18.608c0.508-1.906,0.443-6.67-0.764-9.527c0-0.127-0.063-0.191-0.127-0.444 c-0.064-0.063-0.127-0.509,0.127-0.571c0.128-0.062,0.383,0.189,0.445,0.254c0.127,0.317,0.19,0.57,0.19,0.57l13.083,36.965 l33.344-37.6h14.1h3.365c9.337,0,15.055,3.747,13.528,10.354c-1.778,7.24-9.972,10.416-18.608,10.416h-3.238l4.191-17.783h-14.481 l-6.159,25.976h20.576c15.434,0,30.232-8.13,32.709-18.608C152.449,8.193,141.523,0.063,126.027,0.063L126.027,0.063z M71.091,45.981c-39.123,0-70.816,4.512-70.816,10.035c0,5.59,31.693,10.034,70.816,10.034c39.121,0,70.877-4.444,70.877-10.034 C141.968,50.493,110.212,45.981,71.091,45.981L71.091,45.981z M68.55,59.573c-8.956,0-16.196-1.523-16.196-3.365 c0-1.84,7.239-3.303,16.196-3.303c8.955,0,16.195,1.463,16.195,3.303C84.745,58.050,77.505,59.573,68.55,59.573L68.55,59.573z" />
211
+ </g>
212
+ </svg>
213
+ </div>
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ parentRef: HTMLElement | undefined;
3
+ scale?: number;
4
+ }
5
+ declare const DvdLogo: import("svelte").Component<Props, {}, "">;
6
+ type DvdLogo = ReturnType<typeof DvdLogo>;
7
+ export default DvdLogo;
@@ -0,0 +1,27 @@
1
+ <!--
2
+ Icons.svelte - Icon component library
3
+ Port of src/components/Icons.tsx
4
+
5
+ Usage:
6
+ <script>
7
+ import { PlayIcon, PauseIcon, VolumeIcon } from './Icons.svelte';
8
+ </script>
9
+
10
+ <PlayIcon size={24} />
11
+ <VolumeIcon isMuted={false} />
12
+ -->
13
+ <script context="module" lang="ts">
14
+ export interface IconProps {
15
+ size?: number;
16
+ color?: string;
17
+ class?: string;
18
+ }
19
+ </script>
20
+
21
+ <script lang="ts">
22
+ // This file exports components via context="module" script
23
+ // The default export is a placeholder - use the named exports
24
+ </script>
25
+
26
+ <!-- This component itself is not rendered - use the exported icon components below -->
27
+ <slot />
@@ -0,0 +1,25 @@
1
+ export interface IconProps {
2
+ size?: number;
3
+ color?: string;
4
+ class?: string;
5
+ }
6
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
7
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
8
+ $$bindings?: Bindings;
9
+ } & Exports;
10
+ (internal: unknown, props: {
11
+ $$events?: Events;
12
+ $$slots?: Slots;
13
+ }): Exports & {
14
+ $set?: any;
15
+ $on?: any;
16
+ };
17
+ z_$$bindings?: Bindings;
18
+ }
19
+ declare const Icons: $$__sveltets_2_IsomorphicComponent<any, {
20
+ [evt: string]: CustomEvent<any>;
21
+ }, {
22
+ default: {};
23
+ }, {}, string>;
24
+ type Icons = InstanceType<typeof Icons>;
25
+ export default Icons;