@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,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 />