@livepeer-frameworks/player-core 0.1.0 → 0.1.2

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 (294) hide show
  1. package/README.md +11 -9
  2. package/dist/cjs/core/ABRController.js +456 -0
  3. package/dist/cjs/core/ABRController.js.map +1 -0
  4. package/dist/cjs/core/CodecUtils.js +195 -0
  5. package/dist/cjs/core/CodecUtils.js.map +1 -0
  6. package/dist/cjs/core/ErrorClassifier.js +410 -0
  7. package/dist/cjs/core/ErrorClassifier.js.map +1 -0
  8. package/dist/cjs/core/EventEmitter.js +108 -0
  9. package/dist/cjs/core/EventEmitter.js.map +1 -0
  10. package/dist/cjs/core/GatewayClient.js +342 -0
  11. package/dist/cjs/core/GatewayClient.js.map +1 -0
  12. package/dist/cjs/core/InteractionController.js +606 -0
  13. package/dist/cjs/core/InteractionController.js.map +1 -0
  14. package/dist/cjs/core/LiveDurationProxy.js +186 -0
  15. package/dist/cjs/core/LiveDurationProxy.js.map +1 -0
  16. package/dist/cjs/core/MetaTrackManager.js +624 -0
  17. package/dist/cjs/core/MetaTrackManager.js.map +1 -0
  18. package/dist/cjs/core/MistReporter.js +449 -0
  19. package/dist/cjs/core/MistReporter.js.map +1 -0
  20. package/dist/cjs/core/MistSignaling.js +264 -0
  21. package/dist/cjs/core/MistSignaling.js.map +1 -0
  22. package/dist/cjs/core/PlayerController.js +2658 -0
  23. package/dist/cjs/core/PlayerController.js.map +1 -0
  24. package/dist/cjs/core/PlayerInterface.js +269 -0
  25. package/dist/cjs/core/PlayerInterface.js.map +1 -0
  26. package/dist/cjs/core/PlayerManager.js +806 -0
  27. package/dist/cjs/core/PlayerManager.js.map +1 -0
  28. package/dist/cjs/core/PlayerRegistry.js +270 -0
  29. package/dist/cjs/core/PlayerRegistry.js.map +1 -0
  30. package/dist/cjs/core/QualityMonitor.js +474 -0
  31. package/dist/cjs/core/QualityMonitor.js.map +1 -0
  32. package/dist/cjs/core/SeekingUtils.js +292 -0
  33. package/dist/cjs/core/SeekingUtils.js.map +1 -0
  34. package/dist/cjs/core/StreamStateClient.js +381 -0
  35. package/dist/cjs/core/StreamStateClient.js.map +1 -0
  36. package/dist/cjs/core/SubtitleManager.js +227 -0
  37. package/dist/cjs/core/SubtitleManager.js.map +1 -0
  38. package/dist/cjs/core/TelemetryReporter.js +258 -0
  39. package/dist/cjs/core/TelemetryReporter.js.map +1 -0
  40. package/dist/cjs/core/TimeFormat.js +176 -0
  41. package/dist/cjs/core/TimeFormat.js.map +1 -0
  42. package/dist/cjs/core/TimerManager.js +176 -0
  43. package/dist/cjs/core/TimerManager.js.map +1 -0
  44. package/dist/cjs/core/UrlUtils.js +160 -0
  45. package/dist/cjs/core/UrlUtils.js.map +1 -0
  46. package/dist/cjs/core/detector.js +293 -0
  47. package/dist/cjs/core/detector.js.map +1 -0
  48. package/dist/cjs/core/scorer.js +443 -0
  49. package/dist/cjs/core/scorer.js.map +1 -0
  50. package/dist/cjs/index.js +121 -20134
  51. package/dist/cjs/index.js.map +1 -1
  52. package/dist/cjs/lib/utils.js +11 -0
  53. package/dist/cjs/lib/utils.js.map +1 -0
  54. package/dist/cjs/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js +6 -0
  55. package/dist/cjs/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
  56. package/dist/cjs/node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.js +3042 -0
  57. package/dist/cjs/node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  58. package/dist/cjs/players/DashJsPlayer.js +638 -0
  59. package/dist/cjs/players/DashJsPlayer.js.map +1 -0
  60. package/dist/cjs/players/HlsJsPlayer.js +482 -0
  61. package/dist/cjs/players/HlsJsPlayer.js.map +1 -0
  62. package/dist/cjs/players/MewsWsPlayer/SourceBufferManager.js +522 -0
  63. package/dist/cjs/players/MewsWsPlayer/SourceBufferManager.js.map +1 -0
  64. package/dist/cjs/players/MewsWsPlayer/WebSocketManager.js +215 -0
  65. package/dist/cjs/players/MewsWsPlayer/WebSocketManager.js.map +1 -0
  66. package/dist/cjs/players/MewsWsPlayer/index.js +987 -0
  67. package/dist/cjs/players/MewsWsPlayer/index.js.map +1 -0
  68. package/dist/cjs/players/MistPlayer.js +185 -0
  69. package/dist/cjs/players/MistPlayer.js.map +1 -0
  70. package/dist/cjs/players/MistWebRTCPlayer/index.js +635 -0
  71. package/dist/cjs/players/MistWebRTCPlayer/index.js.map +1 -0
  72. package/dist/cjs/players/NativePlayer.js +762 -0
  73. package/dist/cjs/players/NativePlayer.js.map +1 -0
  74. package/dist/cjs/players/VideoJsPlayer.js +585 -0
  75. package/dist/cjs/players/VideoJsPlayer.js.map +1 -0
  76. package/dist/cjs/players/WebCodecsPlayer/JitterBuffer.js +236 -0
  77. package/dist/cjs/players/WebCodecsPlayer/JitterBuffer.js.map +1 -0
  78. package/dist/cjs/players/WebCodecsPlayer/LatencyProfiles.js +143 -0
  79. package/dist/cjs/players/WebCodecsPlayer/LatencyProfiles.js.map +1 -0
  80. package/dist/cjs/players/WebCodecsPlayer/RawChunkParser.js +96 -0
  81. package/dist/cjs/players/WebCodecsPlayer/RawChunkParser.js.map +1 -0
  82. package/dist/cjs/players/WebCodecsPlayer/SyncController.js +359 -0
  83. package/dist/cjs/players/WebCodecsPlayer/SyncController.js.map +1 -0
  84. package/dist/cjs/players/WebCodecsPlayer/WebSocketController.js +460 -0
  85. package/dist/cjs/players/WebCodecsPlayer/WebSocketController.js.map +1 -0
  86. package/dist/cjs/players/WebCodecsPlayer/index.js +1467 -0
  87. package/dist/cjs/players/WebCodecsPlayer/index.js.map +1 -0
  88. package/dist/cjs/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.js +320 -0
  89. package/dist/cjs/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.js.map +1 -0
  90. package/dist/cjs/styles/index.js +57 -0
  91. package/dist/cjs/styles/index.js.map +1 -0
  92. package/dist/cjs/vanilla/FrameWorksPlayer.js +269 -0
  93. package/dist/cjs/vanilla/FrameWorksPlayer.js.map +1 -0
  94. package/dist/cjs/vanilla.js +11 -0
  95. package/dist/cjs/vanilla.js.map +1 -0
  96. package/dist/esm/core/ABRController.js +454 -0
  97. package/dist/esm/core/ABRController.js.map +1 -0
  98. package/dist/esm/core/CodecUtils.js +193 -0
  99. package/dist/esm/core/CodecUtils.js.map +1 -0
  100. package/dist/esm/core/ErrorClassifier.js +408 -0
  101. package/dist/esm/core/ErrorClassifier.js.map +1 -0
  102. package/dist/esm/core/EventEmitter.js +106 -0
  103. package/dist/esm/core/EventEmitter.js.map +1 -0
  104. package/dist/esm/core/GatewayClient.js +340 -0
  105. package/dist/esm/core/GatewayClient.js.map +1 -0
  106. package/dist/esm/core/InteractionController.js +604 -0
  107. package/dist/esm/core/InteractionController.js.map +1 -0
  108. package/dist/esm/core/LiveDurationProxy.js +184 -0
  109. package/dist/esm/core/LiveDurationProxy.js.map +1 -0
  110. package/dist/esm/core/MetaTrackManager.js +622 -0
  111. package/dist/esm/core/MetaTrackManager.js.map +1 -0
  112. package/dist/esm/core/MistReporter.js +447 -0
  113. package/dist/esm/core/MistReporter.js.map +1 -0
  114. package/dist/esm/core/MistSignaling.js +262 -0
  115. package/dist/esm/core/MistSignaling.js.map +1 -0
  116. package/dist/esm/core/PlayerController.js +2651 -0
  117. package/dist/esm/core/PlayerController.js.map +1 -0
  118. package/dist/esm/core/PlayerInterface.js +267 -0
  119. package/dist/esm/core/PlayerInterface.js.map +1 -0
  120. package/dist/esm/core/PlayerManager.js +804 -0
  121. package/dist/esm/core/PlayerManager.js.map +1 -0
  122. package/dist/esm/core/PlayerRegistry.js +264 -0
  123. package/dist/esm/core/PlayerRegistry.js.map +1 -0
  124. package/dist/esm/core/QualityMonitor.js +471 -0
  125. package/dist/esm/core/QualityMonitor.js.map +1 -0
  126. package/dist/esm/core/SeekingUtils.js +280 -0
  127. package/dist/esm/core/SeekingUtils.js.map +1 -0
  128. package/dist/esm/core/StreamStateClient.js +379 -0
  129. package/dist/esm/core/StreamStateClient.js.map +1 -0
  130. package/dist/esm/core/SubtitleManager.js +225 -0
  131. package/dist/esm/core/SubtitleManager.js.map +1 -0
  132. package/dist/esm/core/TelemetryReporter.js +256 -0
  133. package/dist/esm/core/TelemetryReporter.js.map +1 -0
  134. package/dist/esm/core/TimeFormat.js +169 -0
  135. package/dist/esm/core/TimeFormat.js.map +1 -0
  136. package/dist/esm/core/TimerManager.js +174 -0
  137. package/dist/esm/core/TimerManager.js.map +1 -0
  138. package/dist/esm/core/UrlUtils.js +151 -0
  139. package/dist/esm/core/UrlUtils.js.map +1 -0
  140. package/dist/esm/core/detector.js +279 -0
  141. package/dist/esm/core/detector.js.map +1 -0
  142. package/dist/esm/core/scorer.js +422 -0
  143. package/dist/esm/core/scorer.js.map +1 -0
  144. package/dist/esm/index.js +26 -20043
  145. package/dist/esm/index.js.map +1 -1
  146. package/dist/esm/lib/utils.js +9 -0
  147. package/dist/esm/lib/utils.js.map +1 -0
  148. package/dist/esm/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js +4 -0
  149. package/dist/esm/node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.js.map +1 -0
  150. package/dist/esm/node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.js +3036 -0
  151. package/dist/esm/node_modules/.pnpm/tailwind-merge@3.4.0/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -0
  152. package/dist/esm/players/DashJsPlayer.js +636 -0
  153. package/dist/esm/players/DashJsPlayer.js.map +1 -0
  154. package/dist/esm/players/HlsJsPlayer.js +480 -0
  155. package/dist/esm/players/HlsJsPlayer.js.map +1 -0
  156. package/dist/esm/players/MewsWsPlayer/SourceBufferManager.js +520 -0
  157. package/dist/esm/players/MewsWsPlayer/SourceBufferManager.js.map +1 -0
  158. package/dist/esm/players/MewsWsPlayer/WebSocketManager.js +213 -0
  159. package/dist/esm/players/MewsWsPlayer/WebSocketManager.js.map +1 -0
  160. package/dist/esm/players/MewsWsPlayer/index.js +985 -0
  161. package/dist/esm/players/MewsWsPlayer/index.js.map +1 -0
  162. package/dist/esm/players/MistPlayer.js +183 -0
  163. package/dist/esm/players/MistPlayer.js.map +1 -0
  164. package/dist/esm/players/MistWebRTCPlayer/index.js +633 -0
  165. package/dist/esm/players/MistWebRTCPlayer/index.js.map +1 -0
  166. package/dist/esm/players/NativePlayer.js +759 -0
  167. package/dist/esm/players/NativePlayer.js.map +1 -0
  168. package/dist/esm/players/VideoJsPlayer.js +583 -0
  169. package/dist/esm/players/VideoJsPlayer.js.map +1 -0
  170. package/dist/esm/players/WebCodecsPlayer/JitterBuffer.js +233 -0
  171. package/dist/esm/players/WebCodecsPlayer/JitterBuffer.js.map +1 -0
  172. package/dist/esm/players/WebCodecsPlayer/LatencyProfiles.js +134 -0
  173. package/dist/esm/players/WebCodecsPlayer/LatencyProfiles.js.map +1 -0
  174. package/dist/esm/players/WebCodecsPlayer/RawChunkParser.js +91 -0
  175. package/dist/esm/players/WebCodecsPlayer/RawChunkParser.js.map +1 -0
  176. package/dist/esm/players/WebCodecsPlayer/SyncController.js +357 -0
  177. package/dist/esm/players/WebCodecsPlayer/SyncController.js.map +1 -0
  178. package/dist/esm/players/WebCodecsPlayer/WebSocketController.js +458 -0
  179. package/dist/esm/players/WebCodecsPlayer/WebSocketController.js.map +1 -0
  180. package/dist/esm/players/WebCodecsPlayer/index.js +1458 -0
  181. package/dist/esm/players/WebCodecsPlayer/index.js.map +1 -0
  182. package/dist/esm/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.js +315 -0
  183. package/dist/esm/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.js.map +1 -0
  184. package/dist/esm/styles/index.js +54 -0
  185. package/dist/esm/styles/index.js.map +1 -0
  186. package/dist/esm/vanilla/FrameWorksPlayer.js +264 -0
  187. package/dist/esm/vanilla/FrameWorksPlayer.js.map +1 -0
  188. package/dist/esm/vanilla.js +2 -0
  189. package/dist/esm/vanilla.js.map +1 -0
  190. package/dist/player.css +185 -42
  191. package/dist/types/core/ABRController.d.ts +4 -4
  192. package/dist/types/core/CodecUtils.d.ts +1 -1
  193. package/dist/types/core/ErrorClassifier.d.ts +77 -0
  194. package/dist/types/core/GatewayClient.d.ts +4 -4
  195. package/dist/types/core/MetaTrackManager.d.ts +2 -2
  196. package/dist/types/core/MistReporter.d.ts +3 -3
  197. package/dist/types/core/MistSignaling.d.ts +12 -12
  198. package/dist/types/core/PlayerController.d.ts +19 -14
  199. package/dist/types/core/PlayerInterface.d.ts +100 -2
  200. package/dist/types/core/PlayerManager.d.ts +36 -9
  201. package/dist/types/core/PlayerRegistry.d.ts +11 -11
  202. package/dist/types/core/QualityMonitor.d.ts +2 -2
  203. package/dist/types/core/SeekingUtils.d.ts +2 -2
  204. package/dist/types/core/StreamStateClient.d.ts +2 -2
  205. package/dist/types/core/TelemetryReporter.d.ts +1 -1
  206. package/dist/types/core/TimerManager.d.ts +1 -1
  207. package/dist/types/core/detector.d.ts +1 -1
  208. package/dist/types/core/index.d.ts +44 -44
  209. package/dist/types/core/scorer.d.ts +1 -1
  210. package/dist/types/core/selector.d.ts +2 -2
  211. package/dist/types/index.d.ts +35 -34
  212. package/dist/types/players/DashJsPlayer.d.ts +3 -3
  213. package/dist/types/players/HlsJsPlayer.d.ts +3 -3
  214. package/dist/types/players/MewsWsPlayer/SourceBufferManager.d.ts +1 -1
  215. package/dist/types/players/MewsWsPlayer/WebSocketManager.d.ts +1 -1
  216. package/dist/types/players/MewsWsPlayer/index.d.ts +2 -2
  217. package/dist/types/players/MewsWsPlayer/types.d.ts +15 -15
  218. package/dist/types/players/MistPlayer.d.ts +2 -2
  219. package/dist/types/players/MistWebRTCPlayer/index.d.ts +3 -3
  220. package/dist/types/players/NativePlayer.d.ts +3 -3
  221. package/dist/types/players/VideoJsPlayer.d.ts +3 -3
  222. package/dist/types/players/WebCodecsPlayer/JitterBuffer.d.ts +3 -3
  223. package/dist/types/players/WebCodecsPlayer/LatencyProfiles.d.ts +1 -1
  224. package/dist/types/players/WebCodecsPlayer/RawChunkParser.d.ts +2 -2
  225. package/dist/types/players/WebCodecsPlayer/SyncController.d.ts +2 -2
  226. package/dist/types/players/WebCodecsPlayer/WebSocketController.d.ts +3 -3
  227. package/dist/types/players/WebCodecsPlayer/index.d.ts +9 -9
  228. package/dist/types/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.d.ts +1 -1
  229. package/dist/types/players/WebCodecsPlayer/types.d.ts +49 -49
  230. package/dist/types/players/WebCodecsPlayer/worker/types.d.ts +31 -31
  231. package/dist/types/players/index.d.ts +5 -8
  232. package/dist/types/types.d.ts +15 -15
  233. package/dist/types/vanilla/FrameWorksPlayer.d.ts +2 -2
  234. package/dist/types/vanilla/index.d.ts +4 -4
  235. package/dist/workers/decoder.worker.js +129 -122
  236. package/dist/workers/decoder.worker.js.map +1 -1
  237. package/package.json +31 -15
  238. package/src/core/ABRController.ts +38 -36
  239. package/src/core/CodecUtils.ts +49 -46
  240. package/src/core/Disposable.ts +4 -4
  241. package/src/core/ErrorClassifier.ts +499 -0
  242. package/src/core/EventEmitter.ts +1 -1
  243. package/src/core/GatewayClient.ts +41 -39
  244. package/src/core/InteractionController.ts +89 -82
  245. package/src/core/LiveDurationProxy.ts +14 -15
  246. package/src/core/MetaTrackManager.ts +73 -65
  247. package/src/core/MistReporter.ts +72 -45
  248. package/src/core/MistSignaling.ts +59 -56
  249. package/src/core/PlayerController.ts +542 -384
  250. package/src/core/PlayerInterface.ts +192 -59
  251. package/src/core/PlayerManager.ts +354 -164
  252. package/src/core/PlayerRegistry.ts +238 -87
  253. package/src/core/QualityMonitor.ts +38 -31
  254. package/src/core/ScreenWakeLockManager.ts +8 -9
  255. package/src/core/SeekingUtils.ts +31 -22
  256. package/src/core/StreamStateClient.ts +74 -68
  257. package/src/core/SubtitleManager.ts +24 -22
  258. package/src/core/TelemetryReporter.ts +38 -32
  259. package/src/core/TimeFormat.ts +13 -17
  260. package/src/core/TimerManager.ts +24 -8
  261. package/src/core/UrlUtils.ts +20 -17
  262. package/src/core/detector.ts +44 -44
  263. package/src/core/index.ts +57 -48
  264. package/src/core/scorer.ts +136 -141
  265. package/src/core/selector.ts +2 -6
  266. package/src/global.d.ts +1 -1
  267. package/src/index.ts +56 -36
  268. package/src/players/DashJsPlayer.ts +164 -115
  269. package/src/players/HlsJsPlayer.ts +132 -78
  270. package/src/players/MewsWsPlayer/SourceBufferManager.ts +41 -36
  271. package/src/players/MewsWsPlayer/WebSocketManager.ts +9 -9
  272. package/src/players/MewsWsPlayer/index.ts +192 -152
  273. package/src/players/MewsWsPlayer/types.ts +21 -21
  274. package/src/players/MistPlayer.ts +45 -26
  275. package/src/players/MistWebRTCPlayer/index.ts +175 -129
  276. package/src/players/NativePlayer.ts +203 -143
  277. package/src/players/VideoJsPlayer.ts +170 -118
  278. package/src/players/WebCodecsPlayer/JitterBuffer.ts +6 -7
  279. package/src/players/WebCodecsPlayer/LatencyProfiles.ts +43 -43
  280. package/src/players/WebCodecsPlayer/RawChunkParser.ts +10 -10
  281. package/src/players/WebCodecsPlayer/SyncController.ts +45 -53
  282. package/src/players/WebCodecsPlayer/WebSocketController.ts +66 -68
  283. package/src/players/WebCodecsPlayer/index.ts +265 -223
  284. package/src/players/WebCodecsPlayer/polyfills/MediaStreamTrackGenerator.ts +12 -17
  285. package/src/players/WebCodecsPlayer/types.ts +56 -56
  286. package/src/players/WebCodecsPlayer/worker/decoder.worker.ts +238 -182
  287. package/src/players/WebCodecsPlayer/worker/types.ts +31 -31
  288. package/src/players/index.ts +5 -16
  289. package/src/styles/animations.css +2 -1
  290. package/src/styles/player.css +185 -42
  291. package/src/styles/tailwind.css +473 -159
  292. package/src/types.ts +43 -43
  293. package/src/vanilla/FrameWorksPlayer.ts +26 -14
  294. package/src/vanilla/index.ts +4 -4
package/dist/player.css CHANGED
@@ -16,25 +16,25 @@
16
16
  */
17
17
  .fw-player-surface {
18
18
  /* Tokyo Night color palette */
19
- --tn-bg-dark: 235 21% 11%; /* #1a1b26 - Darkest (slab backgrounds) */
20
- --tn-bg: 233 23% 17%; /* #24283b - Main background */
21
- --tn-bg-highlight: 233 23% 21%; /* #292e42 - Elevated surfaces */
22
- --tn-bg-visual: 232 27% 25%; /* #33395e - Selection/active states */
19
+ --tn-bg-dark: 235 21% 11%; /* #1a1b26 - Darkest (slab backgrounds) */
20
+ --tn-bg: 233 23% 17%; /* #24283b - Main background */
21
+ --tn-bg-highlight: 233 23% 21%; /* #292e42 - Elevated surfaces */
22
+ --tn-bg-visual: 232 27% 25%; /* #33395e - Selection/active states */
23
23
 
24
24
  /* Text hierarchy */
25
- --tn-fg: 223 27% 76%; /* #a9b1d6 - Primary text */
26
- --tn-fg-bright: 220 13% 91%; /* #e2e4ea - Bright/highlighted text */
27
- --tn-fg-dark: 224 16% 53%; /* #787c99 - Secondary text (muted) */
28
- --tn-fg-gutter: 228 15% 45%; /* #5a607f - Borders, seams */
25
+ --tn-fg: 223 27% 76%; /* #a9b1d6 - Primary text */
26
+ --tn-fg-bright: 220 13% 91%; /* #e2e4ea - Bright/highlighted text */
27
+ --tn-fg-dark: 224 16% 53%; /* #787c99 - Secondary text (muted) */
28
+ --tn-fg-gutter: 228 15% 45%; /* #5a607f - Borders, seams */
29
29
 
30
30
  /* Accent colors (semantic) */
31
- --tn-blue: 218 79% 73%; /* #7aa2f7 - Primary actions */
32
- --tn-green: 95 53% 55%; /* #9ece6a - Success */
33
- --tn-red: 348 74% 64%; /* #f7768e - Destructive, live */
34
- --tn-yellow: 35 79% 64%; /* #e0af68 - Warnings */
35
- --tn-purple: 267 82% 77%; /* #bb9af7 - Secondary accent */
36
- --tn-cyan: 178 64% 63%; /* #7dcfff - Info */
37
- --tn-teal: 162 66% 62%; /* #73daca - Terminal green */
31
+ --tn-blue: 218 79% 73%; /* #7aa2f7 - Primary actions */
32
+ --tn-green: 95 53% 55%; /* #9ece6a - Success */
33
+ --tn-red: 348 74% 64%; /* #f7768e - Destructive, live */
34
+ --tn-yellow: 35 79% 64%; /* #e0af68 - Warnings */
35
+ --tn-purple: 267 82% 77%; /* #bb9af7 - Secondary accent */
36
+ --tn-cyan: 178 64% 63%; /* #7dcfff - Info */
37
+ --tn-teal: 162 66% 62%; /* #73daca - Terminal green */
38
38
 
39
39
  /* Player-internal variables (not shared with host) */
40
40
  --fw-background: var(--tn-bg);
@@ -74,7 +74,8 @@
74
74
  ANIMATIONS
75
75
  ===================================================== */
76
76
  @keyframes float {
77
- 0%, 100% {
77
+ 0%,
78
+ 100% {
78
79
  transform: translateY(0px) scale(1);
79
80
  }
80
81
  50% {
@@ -161,6 +162,7 @@
161
162
  background: var(--fw-controls-bg);
162
163
  border-top: 1px solid var(--fw-seam);
163
164
  backdrop-filter: blur(8px);
165
+ pointer-events: auto;
164
166
  }
165
167
 
166
168
  /* Control group - seamed sections within bar */
@@ -183,7 +185,9 @@
183
185
  border-radius: 0;
184
186
  background: transparent;
185
187
  color: hsl(var(--tn-fg));
186
- transition: background-color 0.15s, color 0.15s;
188
+ transition:
189
+ background-color 0.15s,
190
+ color 0.15s;
187
191
  cursor: pointer;
188
192
  border: none;
189
193
  }
@@ -201,10 +205,18 @@
201
205
  }
202
206
 
203
207
  /* Status indicators */
204
- .fw-status-online { color: hsl(var(--tn-green)); }
205
- .fw-status-offline { color: hsl(var(--tn-red)); }
206
- .fw-status-warning { color: hsl(var(--tn-yellow)); }
207
- .fw-status-info { color: hsl(var(--tn-cyan)); }
208
+ .fw-status-online {
209
+ color: hsl(var(--tn-green));
210
+ }
211
+ .fw-status-offline {
212
+ color: hsl(var(--tn-red));
213
+ }
214
+ .fw-status-warning {
215
+ color: hsl(var(--tn-yellow));
216
+ }
217
+ .fw-status-info {
218
+ color: hsl(var(--tn-cyan));
219
+ }
208
220
 
209
221
  /* =====================================================
210
222
  PLAYER CONTAINER STYLES (Slab-based)
@@ -215,7 +227,7 @@
215
227
  height: 100%;
216
228
  width: 100%;
217
229
  overflow: hidden;
218
- border-radius: 0; /* Slabs don't have rounded corners */
230
+ border-radius: 0; /* Slabs don't have rounded corners */
219
231
  background-color: hsl(var(--tn-bg-dark));
220
232
  border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
221
233
  }
@@ -317,7 +329,9 @@
317
329
  overflow-y: auto;
318
330
  background: hsl(var(--tn-bg-dark));
319
331
  border: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
320
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
332
+ box-shadow:
333
+ 0 10px 15px -3px rgb(0 0 0 / 0.1),
334
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
321
335
  border-radius: 0.25rem;
322
336
  z-index: 50;
323
337
  }
@@ -358,7 +372,9 @@
358
372
  color: hsl(var(--tn-fg));
359
373
  border: none;
360
374
  cursor: pointer;
361
- transition: background-color 0.15s, color 0.15s;
375
+ transition:
376
+ background-color 0.15s,
377
+ color 0.15s;
362
378
  }
363
379
 
364
380
  .fw-settings-btn:hover {
@@ -413,7 +429,9 @@
413
429
  background: hsl(var(--tn-bg-dark));
414
430
  padding: 0;
415
431
  color: hsl(var(--tn-fg));
416
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
432
+ box-shadow:
433
+ 0 10px 15px -3px rgb(0 0 0 / 0.1),
434
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
417
435
  }
418
436
 
419
437
  .fw-context-menu-item {
@@ -426,7 +444,9 @@
426
444
  font-size: 0.875rem;
427
445
  outline: none;
428
446
  color: hsl(var(--tn-fg));
429
- transition: background-color 0.15s, color 0.15s;
447
+ transition:
448
+ background-color 0.15s,
449
+ color 0.15s;
430
450
  }
431
451
 
432
452
  .fw-context-menu-item:hover,
@@ -467,7 +487,9 @@
467
487
  font-size: 0.875rem;
468
488
  outline: none;
469
489
  color: hsl(var(--tn-fg));
470
- transition: background-color 0.15s, color 0.15s;
490
+ transition:
491
+ background-color 0.15s,
492
+ color 0.15s;
471
493
  }
472
494
 
473
495
  .fw-context-menu-checkbox:hover,
@@ -496,7 +518,9 @@
496
518
  font-weight: 700;
497
519
  text-transform: uppercase;
498
520
  letter-spacing: 0.05em;
499
- transition: background-color 0.15s, color 0.15s;
521
+ transition:
522
+ background-color 0.15s,
523
+ color 0.15s;
500
524
  border: none;
501
525
  cursor: pointer;
502
526
  }
@@ -517,26 +541,27 @@
517
541
  color: white;
518
542
  }
519
543
 
520
-
521
544
  /* --- Volume Control --- */
522
545
  .fw-volume-group {
523
546
  display: flex;
524
547
  align-items: center;
525
- border-radius: 0.25rem;
526
- transition: background-color 0.2s, width 0.2s;
548
+ border-radius: 0;
549
+ transition:
550
+ background-color 0.2s,
551
+ width 0.2s;
527
552
  cursor: pointer;
528
553
  }
529
554
 
530
555
  .fw-volume-group--expanded {
531
- background: rgb(255 255 255 / 0.1);
556
+ background: hsl(var(--tn-bg-visual) / 0.5);
532
557
  }
533
558
 
534
559
  .fw-volume-group:hover {
535
- background: rgb(255 255 255 / 0.05);
560
+ background: hsl(var(--tn-bg-visual) / 0.5);
536
561
  }
537
562
 
538
563
  .fw-volume-group--expanded:hover {
539
- background: rgb(255 255 255 / 0.1);
564
+ background: hsl(var(--tn-bg-visual) / 0.5);
540
565
  }
541
566
 
542
567
  .fw-volume-group--disabled {
@@ -565,7 +590,9 @@
565
590
  display: flex;
566
591
  align-items: center;
567
592
  overflow: hidden;
568
- transition: width 0.2s ease-out, opacity 0.2s ease-out;
593
+ transition:
594
+ width 0.2s ease-out,
595
+ opacity 0.2s ease-out;
569
596
  }
570
597
 
571
598
  .fw-volume-slider-wrapper--collapsed {
@@ -579,6 +606,108 @@
579
606
  opacity: 1;
580
607
  }
581
608
 
609
+ /* --- Slider Component (shared by React/Svelte) --- */
610
+ .fw-slider {
611
+ position: relative;
612
+ display: flex;
613
+ width: 100%;
614
+ height: 1.25rem;
615
+ touch-action: none;
616
+ user-select: none;
617
+ align-items: center;
618
+ cursor: pointer;
619
+ }
620
+
621
+ .fw-slider--vertical {
622
+ flex-direction: column;
623
+ width: 1.25rem;
624
+ height: 100%;
625
+ }
626
+
627
+ .fw-slider-track {
628
+ position: absolute;
629
+ left: 0;
630
+ right: 0;
631
+ height: 4px;
632
+ border-radius: 9999px;
633
+ background: hsl(var(--tn-fg-gutter) / 0.4);
634
+ overflow: hidden;
635
+ transition: height 0.15s ease;
636
+ }
637
+
638
+ .fw-slider:hover .fw-slider-track {
639
+ height: 6px;
640
+ }
641
+
642
+ .fw-slider--vertical .fw-slider-track {
643
+ top: 0;
644
+ bottom: 0;
645
+ left: 50%;
646
+ right: auto;
647
+ width: 4px;
648
+ height: auto;
649
+ transform: translateX(-50%);
650
+ }
651
+
652
+ .fw-slider--vertical:hover .fw-slider-track {
653
+ width: 6px;
654
+ height: auto;
655
+ }
656
+
657
+ .fw-slider-range {
658
+ position: absolute;
659
+ height: 100%;
660
+ border-radius: 9999px;
661
+ background: hsl(var(--tn-fg));
662
+ }
663
+
664
+ .fw-slider-range--accent {
665
+ background: hsl(var(--tn-cyan));
666
+ }
667
+
668
+ .fw-slider--vertical .fw-slider-range {
669
+ width: 100%;
670
+ height: auto;
671
+ bottom: 0;
672
+ }
673
+
674
+ .fw-slider-thumb {
675
+ display: block;
676
+ width: 10px;
677
+ height: 10px;
678
+ border-radius: 50%;
679
+ background: hsl(var(--tn-fg));
680
+ border: none;
681
+ box-shadow: 0 2px 4px rgb(0 0 0 / 0.3);
682
+ cursor: pointer;
683
+ transition:
684
+ width 0.15s ease,
685
+ height 0.15s ease,
686
+ box-shadow 0.15s ease;
687
+ }
688
+
689
+ .fw-slider:hover .fw-slider-thumb {
690
+ width: 14px;
691
+ height: 14px;
692
+ }
693
+
694
+ .fw-slider-thumb:focus {
695
+ outline: none;
696
+ }
697
+
698
+ .fw-slider-thumb:focus-visible {
699
+ box-shadow: 0 0 0 2px hsl(var(--tn-fg) / 0.5);
700
+ }
701
+
702
+ .fw-slider-thumb--accent {
703
+ background: hsl(var(--tn-cyan));
704
+ }
705
+
706
+ .fw-slider-thumb[data-disabled] {
707
+ pointer-events: none;
708
+ opacity: 0.5;
709
+ }
710
+
582
711
  /* --- Time Display --- */
583
712
  .fw-time-display {
584
713
  font-family: ui-monospace, monospace;
@@ -676,7 +805,9 @@
676
805
  background: hsl(var(--tn-blue));
677
806
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
678
807
  transform: translate(-50%, -50%);
679
- transition: opacity 0.15s ease, transform 0.15s ease;
808
+ transition:
809
+ opacity 0.15s ease,
810
+ transform 0.15s ease;
680
811
  opacity: 0;
681
812
  pointer-events: none;
682
813
  }
@@ -949,7 +1080,9 @@
949
1080
  border: none;
950
1081
  color: hsl(var(--tn-fg-dark));
951
1082
  cursor: pointer;
952
- transition: background-color 0.15s ease, color 0.15s ease;
1083
+ transition:
1084
+ background-color 0.15s ease,
1085
+ color 0.15s ease;
953
1086
  }
954
1087
 
955
1088
  .fw-error-close:hover {
@@ -980,7 +1113,9 @@
980
1113
  background: transparent;
981
1114
  border: none;
982
1115
  cursor: pointer;
983
- transition: background-color 0.15s ease, color 0.15s ease;
1116
+ transition:
1117
+ background-color 0.15s ease,
1118
+ color 0.15s ease;
984
1119
  }
985
1120
 
986
1121
  .fw-error-btn:hover {
@@ -1076,7 +1211,9 @@
1076
1211
  border-right: 1px solid hsl(var(--tn-fg-gutter) / 0.3);
1077
1212
  color: hsl(var(--tn-fg-dark));
1078
1213
  cursor: pointer;
1079
- transition: background-color 0.15s, color 0.15s;
1214
+ transition:
1215
+ background-color 0.15s,
1216
+ color 0.15s;
1080
1217
  }
1081
1218
 
1082
1219
  .fw-dev-tab:hover {
@@ -1183,7 +1320,9 @@
1183
1320
  border: none;
1184
1321
  color: hsl(var(--tn-fg-dark));
1185
1322
  cursor: pointer;
1186
- transition: background-color 0.15s, color 0.15s;
1323
+ transition:
1324
+ background-color 0.15s,
1325
+ color 0.15s;
1187
1326
  }
1188
1327
 
1189
1328
  .fw-dev-mode-btn:hover {
@@ -1211,7 +1350,9 @@
1211
1350
  color: hsl(var(--tn-fg));
1212
1351
  font-size: 0.75rem;
1213
1352
  cursor: pointer;
1214
- transition: background-color 0.15s, color 0.15s;
1353
+ transition:
1354
+ background-color 0.15s,
1355
+ color 0.15s;
1215
1356
  }
1216
1357
 
1217
1358
  .fw-dev-action-btn:last-child {
@@ -1378,7 +1519,9 @@
1378
1519
  z-index: 50;
1379
1520
  background: hsl(var(--tn-bg-dark));
1380
1521
  border: 1px solid hsl(var(--tn-fg-gutter));
1381
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
1522
+ box-shadow:
1523
+ 0 4px 6px -1px rgb(0 0 0 / 0.1),
1524
+ 0 2px 4px -2px rgb(0 0 0 / 0.1);
1382
1525
  padding: 0.5rem;
1383
1526
  font-size: 10px;
1384
1527
  white-space: nowrap;
@@ -1,11 +1,11 @@
1
- import type { ABRMode, ABROptions, PlaybackQuality, QualityLevel } from '../types';
1
+ import type { ABRMode, ABROptions, PlaybackQuality, QualityLevel } from "../types";
2
2
  export interface ABRControllerConfig {
3
3
  /** ABR options */
4
4
  options?: Partial<ABROptions>;
5
5
  /** Callback to get available qualities */
6
6
  getQualities: () => QualityLevel[];
7
7
  /** Callback to select a quality */
8
- selectQuality: (id: string | 'auto') => void;
8
+ selectQuality: (id: string | "auto") => void;
9
9
  /** Callback to get current quality */
10
10
  getCurrentQuality?: () => QualityLevel | null;
11
11
  /** Callback to get bandwidth estimate (bits per second) - typically from player stats */
@@ -13,7 +13,7 @@ export interface ABRControllerConfig {
13
13
  /** Debug logging */
14
14
  debug?: boolean;
15
15
  }
16
- export type ABRDecision = 'upgrade' | 'downgrade' | 'maintain' | 'none';
16
+ export type ABRDecision = "upgrade" | "downgrade" | "maintain" | "none";
17
17
  /**
18
18
  * ABRController - Adaptive Bitrate Controller
19
19
  *
@@ -138,7 +138,7 @@ export declare class ABRController {
138
138
  /**
139
139
  * Manually set quality (switches to manual mode temporarily)
140
140
  */
141
- setQuality(id: string | 'auto'): void;
141
+ setQuality(id: string | "auto"): void;
142
142
  /**
143
143
  * Get current ABR mode
144
144
  */
@@ -45,7 +45,7 @@ export declare function isCodecSupported(codecString: string, containerType?: st
45
45
  * @param type - Track type to filter ('video' or 'audio')
46
46
  * @returns Best supported track or null
47
47
  */
48
- export declare function getBestSupportedTrack(tracks: TrackInfo[], type: 'video' | 'audio'): TrackInfo | null;
48
+ export declare function getBestSupportedTrack(tracks: TrackInfo[], type: "video" | "audio"): TrackInfo | null;
49
49
  declare const _default: {
50
50
  translateCodec: typeof translateCodec;
51
51
  isCodecSupported: typeof isCodecSupported;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * ErrorClassifier - Centralized error classification and recovery orchestration
3
+ *
4
+ * Implements a 4-tier error handling system:
5
+ * - Tier 1 (TRANSIENT): Silent retry with exponential backoff
6
+ * - Tier 2 (RECOVERABLE): Protocol/player swap with toast notification
7
+ * - Tier 3 (DEGRADED): Quality drop with informational toast
8
+ * - Tier 4 (FATAL): Blocking error modal
9
+ */
10
+ import { ErrorCode, type ClassifiedError, type ErrorHandlingEvents } from "./PlayerInterface";
11
+ type EventListener<K extends keyof ErrorHandlingEvents> = (data: ErrorHandlingEvents[K]) => void;
12
+ export type RecoveryAction = {
13
+ type: "retry";
14
+ delayMs: number;
15
+ } | {
16
+ type: "swap";
17
+ reason: string;
18
+ } | {
19
+ type: "toast";
20
+ message: string;
21
+ } | {
22
+ type: "fatal";
23
+ error: ClassifiedError;
24
+ };
25
+ export interface ErrorClassifierOptions {
26
+ /** Number of alternative player/protocol combos available */
27
+ alternativesCount?: number;
28
+ /** Enable debug logging */
29
+ debug?: boolean;
30
+ }
31
+ /**
32
+ * Centralized error classifier that tracks retry state and determines recovery actions.
33
+ */
34
+ export declare class ErrorClassifier {
35
+ private retryCounts;
36
+ private lastErrorTime;
37
+ private alternativesRemaining;
38
+ private listeners;
39
+ private debug;
40
+ private lastQualityToastTime;
41
+ private static readonly QUALITY_TOAST_DEBOUNCE_MS;
42
+ constructor(options?: ErrorClassifierOptions);
43
+ /**
44
+ * Update the count of remaining alternatives (called after a swap attempt)
45
+ */
46
+ setAlternativesRemaining(count: number): void;
47
+ /**
48
+ * Reset retry counts (call when playback successfully resumes)
49
+ */
50
+ reset(): void;
51
+ /**
52
+ * Classify a raw error and determine the appropriate recovery action.
53
+ *
54
+ * @param code - Error code identifying the error type
55
+ * @param originalError - Original error object or message
56
+ * @returns The recovery action to take
57
+ */
58
+ classify(code: ErrorCode, originalError?: Error | string): RecoveryAction;
59
+ classifyWithDetails(code: ErrorCode, message: string, details?: ClassifiedError["details"], originalError?: Error | string): RecoveryAction;
60
+ /**
61
+ * Notify classifier that a protocol swap occurred (for event emission)
62
+ */
63
+ notifyProtocolSwap(fromPlayer: string, toPlayer: string, fromProtocol: string, toProtocol: string, reason: string): void;
64
+ /**
65
+ * Calculate exponential backoff delay with jitter
66
+ */
67
+ private calculateBackoff;
68
+ /**
69
+ * Map common error patterns to error codes
70
+ */
71
+ static mapErrorToCode(error: Error | string): ErrorCode;
72
+ on<K extends keyof ErrorHandlingEvents>(event: K, listener: EventListener<K>): void;
73
+ off<K extends keyof ErrorHandlingEvents>(event: K, listener: EventListener<K>): void;
74
+ private emit;
75
+ private log;
76
+ }
77
+ export {};
@@ -4,9 +4,9 @@
4
4
  * Framework-agnostic client for resolving viewer endpoints from the Gateway GraphQL API.
5
5
  * Extracted from useViewerEndpoints.ts for use in headless core.
6
6
  */
7
- import { TypedEventEmitter } from './EventEmitter';
8
- import type { ContentEndpoints, ContentType } from '../types';
9
- export type GatewayStatus = 'idle' | 'loading' | 'ready' | 'error';
7
+ import { TypedEventEmitter } from "./EventEmitter";
8
+ import type { ContentEndpoints, ContentType } from "../types";
9
+ export type GatewayStatus = "idle" | "loading" | "ready" | "error";
10
10
  export interface GatewayClientConfig {
11
11
  /** Gateway GraphQL endpoint URL */
12
12
  gatewayUrl: string;
@@ -32,7 +32,7 @@ export interface GatewayClientEvents {
32
32
  endpoints: ContentEndpoints;
33
33
  };
34
34
  }
35
- type CircuitBreakerState = 'closed' | 'open' | 'half-open';
35
+ type CircuitBreakerState = "closed" | "open" | "half-open";
36
36
  /**
37
37
  * Client for resolving viewer endpoints from the Gateway GraphQL API.
38
38
  *
@@ -1,4 +1,4 @@
1
- import type { MetaTrackEvent } from '../types';
1
+ import type { MetaTrackEvent } from "../types";
2
2
  export interface MetaTrackSubscription {
3
3
  trackId: string;
4
4
  callback: (event: MetaTrackEvent) => void;
@@ -19,7 +19,7 @@ export interface MetaTrackManagerConfig {
19
19
  /** Fast-forward interval in seconds for catching up (default: 5) */
20
20
  fastForwardInterval?: number;
21
21
  }
22
- type ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting';
22
+ type ConnectionState = "disconnected" | "connecting" | "connected" | "reconnecting";
23
23
  /**
24
24
  * MetaTrackManager - Handles real-time metadata subscriptions via MistServer WebSocket
25
25
  *
@@ -20,7 +20,7 @@ export interface MistReporterStats {
20
20
  lastError: string | null;
21
21
  firstPlayback: number | null;
22
22
  playbackScore: number;
23
- autoplay: 'success' | 'muted' | 'failed' | null;
23
+ autoplay: "success" | "muted" | "failed" | null;
24
24
  videoHeight: number | null;
25
25
  videoWidth: number | null;
26
26
  playerHeight: number | null;
@@ -97,7 +97,7 @@ export declare class MistReporter {
97
97
  /**
98
98
  * Increment a counter stat
99
99
  */
100
- add(key: 'nWaiting' | 'nStalled' | 'nError', amount?: number): void;
100
+ add(key: "nWaiting" | "nStalled" | "nError", amount?: number): void;
101
101
  /**
102
102
  * Initialize reporting for a video element
103
103
  */
@@ -113,7 +113,7 @@ export declare class MistReporter {
113
113
  /**
114
114
  * Update autoplay status
115
115
  */
116
- setAutoplayStatus(status: 'success' | 'muted' | 'failed'): void;
116
+ setAutoplayStatus(status: "success" | "muted" | "failed"): void;
117
117
  /**
118
118
  * Update current tracks
119
119
  */
@@ -17,7 +17,7 @@
17
17
  * - tracks: Select tracks { video: string, audio: string }
18
18
  * - set_speed: Set playback rate { play_rate: number | "auto" }
19
19
  */
20
- import { TypedEventEmitter } from './EventEmitter';
20
+ import { TypedEventEmitter } from "./EventEmitter";
21
21
  export interface MistSignalingConfig {
22
22
  /** WebSocket URL (will convert http to ws) */
23
23
  url: string;
@@ -42,35 +42,35 @@ export interface MistTimeUpdate {
42
42
  }
43
43
  export interface MistSignalingEvents {
44
44
  /** Connection established */
45
- 'connected': void;
45
+ connected: void;
46
46
  /** Connection closed */
47
- 'disconnected': {
47
+ disconnected: {
48
48
  code: number;
49
49
  };
50
50
  /** SDP answer received */
51
- 'answer_sdp': {
51
+ answer_sdp: {
52
52
  result: boolean;
53
53
  answer_sdp: string;
54
54
  };
55
55
  /** Time/track update */
56
- 'time_update': MistTimeUpdate;
56
+ time_update: MistTimeUpdate;
57
57
  /** Seek completed */
58
- 'seeked': {
58
+ seeked: {
59
59
  live_point?: boolean;
60
60
  };
61
61
  /** Playback speed changed */
62
- 'speed_changed': {
62
+ speed_changed: {
63
63
  play_rate: number;
64
64
  play_rate_curr: number;
65
65
  };
66
66
  /** Stream ended */
67
- 'stopped': void;
67
+ stopped: void;
68
68
  /** Error occurred */
69
- 'error': {
69
+ error: {
70
70
  message: string;
71
71
  };
72
72
  }
73
- export type MistSignalingState = 'connecting' | 'connected' | 'disconnected' | 'closed';
73
+ export type MistSignalingState = "connecting" | "connected" | "disconnected" | "closed";
74
74
  /**
75
75
  * MistSignaling handles WebSocket communication with MistServer for WebRTC
76
76
  */
@@ -113,7 +113,7 @@ export declare class MistSignaling extends TypedEventEmitter<MistSignalingEvents
113
113
  /**
114
114
  * Seek to position (in seconds or "live")
115
115
  */
116
- seek(time: number | 'live'): Promise<string>;
116
+ seek(time: number | "live"): Promise<string>;
117
117
  /**
118
118
  * Pause playback (hold)
119
119
  */
@@ -135,7 +135,7 @@ export declare class MistSignaling extends TypedEventEmitter<MistSignalingEvents
135
135
  * Set playback speed
136
136
  * @param rate - Playback rate (1.0 normal, "auto" for live catch-up)
137
137
  */
138
- setSpeed(rate: number | 'auto'): boolean;
138
+ setSpeed(rate: number | "auto"): boolean;
139
139
  /**
140
140
  * Close the connection
141
141
  */