prismcast 1.6.0 → 1.8.0

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 (229) hide show
  1. package/dist/app.js +9 -8
  2. package/dist/app.js.map +1 -1
  3. package/dist/browser/cdp.js +1 -1
  4. package/dist/browser/cdp.js.map +1 -1
  5. package/dist/browser/channelSelection.d.ts +10 -34
  6. package/dist/browser/channelSelection.js +19 -96
  7. package/dist/browser/channelSelection.js.map +1 -1
  8. package/dist/browser/display.d.ts +19 -0
  9. package/dist/browser/display.js +16 -11
  10. package/dist/browser/display.js.map +1 -1
  11. package/dist/browser/index.d.ts +9 -46
  12. package/dist/browser/index.js +136 -191
  13. package/dist/browser/index.js.map +1 -1
  14. package/dist/browser/login.d.ts +65 -0
  15. package/dist/browser/login.js +196 -0
  16. package/dist/browser/login.js.map +1 -0
  17. package/dist/browser/precaching.js +12 -0
  18. package/dist/browser/precaching.js.map +1 -1
  19. package/dist/browser/tuning/comcastPolymer.d.ts +23 -0
  20. package/dist/browser/tuning/comcastPolymer.js +655 -0
  21. package/dist/browser/tuning/comcastPolymer.js.map +1 -0
  22. package/dist/browser/tuning/cox.d.ts +2 -0
  23. package/dist/browser/tuning/cox.js +14 -0
  24. package/dist/browser/tuning/cox.js.map +1 -0
  25. package/dist/browser/tuning/directv.js +1 -1
  26. package/dist/browser/tuning/directv.js.map +1 -1
  27. package/dist/browser/tuning/fox.js +2 -2
  28. package/dist/browser/tuning/fox.js.map +1 -1
  29. package/dist/browser/tuning/hbo.js +1 -1
  30. package/dist/browser/tuning/hbo.js.map +1 -1
  31. package/dist/browser/tuning/hulu.js +1 -1
  32. package/dist/browser/tuning/hulu.js.map +1 -1
  33. package/dist/browser/tuning/shared.d.ts +46 -0
  34. package/dist/browser/tuning/shared.js +100 -0
  35. package/dist/browser/tuning/shared.js.map +1 -0
  36. package/dist/browser/tuning/sling.js +1 -1
  37. package/dist/browser/tuning/sling.js.map +1 -1
  38. package/dist/browser/tuning/spectrum.js +1 -1
  39. package/dist/browser/tuning/spectrum.js.map +1 -1
  40. package/dist/browser/tuning/thumbnailRow.js +1 -1
  41. package/dist/browser/tuning/thumbnailRow.js.map +1 -1
  42. package/dist/browser/tuning/tileClick.js +1 -1
  43. package/dist/browser/tuning/tileClick.js.map +1 -1
  44. package/dist/browser/tuning/xfinity.js +10 -603
  45. package/dist/browser/tuning/xfinity.js.map +1 -1
  46. package/dist/browser/tuning/youtubeTv.js +1 -1
  47. package/dist/browser/tuning/youtubeTv.js.map +1 -1
  48. package/dist/browser/video.d.ts +18 -0
  49. package/dist/browser/video.js +69 -107
  50. package/dist/browser/video.js.map +1 -1
  51. package/dist/channels/index.d.ts +4 -2
  52. package/dist/channels/index.js +2261 -800
  53. package/dist/channels/index.js.map +1 -1
  54. package/dist/config/health.js +30 -17
  55. package/dist/config/health.js.map +1 -1
  56. package/dist/config/index.js +37 -63
  57. package/dist/config/index.js.map +1 -1
  58. package/dist/config/profiles.js +10 -10
  59. package/dist/config/profiles.js.map +1 -1
  60. package/dist/config/providerPacks.js +4 -1
  61. package/dist/config/providerPacks.js.map +1 -1
  62. package/dist/config/providers.d.ts +12 -5
  63. package/dist/config/providers.js +133 -104
  64. package/dist/config/providers.js.map +1 -1
  65. package/dist/config/sites.js +15 -9
  66. package/dist/config/sites.js.map +1 -1
  67. package/dist/config/userChannels.d.ts +108 -7
  68. package/dist/config/userChannels.js +374 -44
  69. package/dist/config/userChannels.js.map +1 -1
  70. package/dist/config/userConfig.d.ts +3 -1
  71. package/dist/config/userConfig.js +31 -19
  72. package/dist/config/userConfig.js.map +1 -1
  73. package/dist/config/userProfiles.js +27 -39
  74. package/dist/config/userProfiles.js.map +1 -1
  75. package/dist/hdhr/channelMap.d.ts +1 -1
  76. package/dist/hdhr/channelMap.js +4 -4
  77. package/dist/hdhr/channelMap.js.map +1 -1
  78. package/dist/hdhr/discover.js +7 -15
  79. package/dist/hdhr/discover.js.map +1 -1
  80. package/dist/index.js +9 -15
  81. package/dist/index.js.map +1 -1
  82. package/dist/native/index.d.ts +3 -0
  83. package/dist/native/index.js +16 -25
  84. package/dist/native/index.js.map +1 -1
  85. package/dist/native/probe.d.ts +4 -3
  86. package/dist/native/probe.js +36 -12
  87. package/dist/native/probe.js.map +1 -1
  88. package/dist/native/proxy.d.ts +2 -0
  89. package/dist/native/proxy.js +369 -326
  90. package/dist/native/proxy.js.map +1 -1
  91. package/dist/routes/assets.js +26 -48
  92. package/dist/routes/assets.js.map +1 -1
  93. package/dist/routes/channels.js +5 -11
  94. package/dist/routes/channels.js.map +1 -1
  95. package/dist/routes/components.d.ts +43 -8
  96. package/dist/routes/components.js +122 -19
  97. package/dist/routes/components.js.map +1 -1
  98. package/dist/routes/config/channels/index.d.ts +2 -2
  99. package/dist/routes/config/channels/index.js +1 -1
  100. package/dist/routes/config/channels/index.js.map +1 -1
  101. package/dist/routes/config/channels/routes.js +749 -71
  102. package/dist/routes/config/channels/routes.js.map +1 -1
  103. package/dist/routes/config/channels/table.d.ts +93 -2
  104. package/dist/routes/config/channels/table.js +594 -104
  105. package/dist/routes/config/channels/table.js.map +1 -1
  106. package/dist/routes/config/index.d.ts +1 -1
  107. package/dist/routes/config/index.js +1 -1
  108. package/dist/routes/config/index.js.map +1 -1
  109. package/dist/routes/config/providers.d.ts +6 -6
  110. package/dist/routes/config/providers.js +76 -102
  111. package/dist/routes/config/providers.js.map +1 -1
  112. package/dist/routes/config/settings.js +57 -36
  113. package/dist/routes/config/settings.js.map +1 -1
  114. package/dist/routes/icons.d.ts +16 -0
  115. package/dist/routes/icons.js +44 -0
  116. package/dist/routes/icons.js.map +1 -0
  117. package/dist/routes/index.d.ts +0 -16
  118. package/dist/routes/index.js +0 -17
  119. package/dist/routes/index.js.map +1 -1
  120. package/dist/routes/playlist.d.ts +6 -4
  121. package/dist/routes/playlist.js +68 -27
  122. package/dist/routes/playlist.js.map +1 -1
  123. package/dist/routes/providers.js +106 -3
  124. package/dist/routes/providers.js.map +1 -1
  125. package/dist/routes/root/content.js +96 -40
  126. package/dist/routes/root/content.js.map +1 -1
  127. package/dist/routes/root/index.js +2 -1
  128. package/dist/routes/root/index.js.map +1 -1
  129. package/dist/routes/root/scripts/channels.js +955 -310
  130. package/dist/routes/root/scripts/channels.js.map +1 -1
  131. package/dist/routes/root/scripts/config.js +695 -569
  132. package/dist/routes/root/scripts/config.js.map +1 -1
  133. package/dist/routes/root/scripts/index.d.ts +1 -0
  134. package/dist/routes/root/scripts/index.js +1 -0
  135. package/dist/routes/root/scripts/index.js.map +1 -1
  136. package/dist/routes/root/scripts/shared.d.ts +6 -0
  137. package/dist/routes/root/scripts/shared.js +437 -0
  138. package/dist/routes/root/scripts/shared.js.map +1 -0
  139. package/dist/routes/root/scripts/status.js +33 -24
  140. package/dist/routes/root/scripts/status.js.map +1 -1
  141. package/dist/routes/root/styles.js +157 -11
  142. package/dist/routes/root/styles.js.map +1 -1
  143. package/dist/routes/ui.d.ts +1 -1
  144. package/dist/routes/ui.js +1 -1
  145. package/dist/routes/ui.js.map +1 -1
  146. package/dist/service/commands.js +4 -35
  147. package/dist/service/commands.js.map +1 -1
  148. package/dist/streaming/codec.d.ts +20 -0
  149. package/dist/streaming/codec.js +68 -0
  150. package/dist/streaming/codec.js.map +1 -0
  151. package/dist/streaming/fmp4Segmenter.d.ts +2 -0
  152. package/dist/streaming/fmp4Segmenter.js +7 -4
  153. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  154. package/dist/streaming/hls.js +274 -188
  155. package/dist/streaming/hls.js.map +1 -1
  156. package/dist/streaming/hlsResume.d.ts +9 -3
  157. package/dist/streaming/hlsResume.js +15 -8
  158. package/dist/streaming/hlsResume.js.map +1 -1
  159. package/dist/streaming/hlsSegments.d.ts +1 -2
  160. package/dist/streaming/hlsSegments.js +48 -46
  161. package/dist/streaming/hlsSegments.js.map +1 -1
  162. package/dist/streaming/lifecycle.js +8 -12
  163. package/dist/streaming/lifecycle.js.map +1 -1
  164. package/dist/streaming/monitor.js +625 -585
  165. package/dist/streaming/monitor.js.map +1 -1
  166. package/dist/streaming/mpegts.js +1 -1
  167. package/dist/streaming/mpegts.js.map +1 -1
  168. package/dist/streaming/preroll.d.ts +41 -20
  169. package/dist/streaming/preroll.js +157 -76
  170. package/dist/streaming/preroll.js.map +1 -1
  171. package/dist/streaming/recovery.d.ts +0 -6
  172. package/dist/streaming/recovery.js +0 -8
  173. package/dist/streaming/recovery.js.map +1 -1
  174. package/dist/streaming/registry.d.ts +36 -9
  175. package/dist/streaming/registry.js +6 -9
  176. package/dist/streaming/registry.js.map +1 -1
  177. package/dist/streaming/setup.d.ts +3 -3
  178. package/dist/streaming/setup.js +38 -22
  179. package/dist/streaming/setup.js.map +1 -1
  180. package/dist/streaming/showInfo.d.ts +7 -6
  181. package/dist/streaming/showInfo.js +156 -36
  182. package/dist/streaming/showInfo.js.map +1 -1
  183. package/dist/streaming/statusEmitter.d.ts +14 -2
  184. package/dist/streaming/statusEmitter.js +22 -4
  185. package/dist/streaming/statusEmitter.js.map +1 -1
  186. package/dist/types/channels.d.ts +34 -0
  187. package/dist/types/config.d.ts +3 -2
  188. package/dist/types/index.d.ts +3 -2
  189. package/dist/types/index.js +1 -0
  190. package/dist/types/index.js.map +1 -1
  191. package/dist/types/profiles.d.ts +8 -3
  192. package/dist/types/selection.d.ts +1 -0
  193. package/dist/types/shared.d.ts +1 -1
  194. package/dist/types/streaming.d.ts +7 -15
  195. package/dist/types/streaming.js +5 -1
  196. package/dist/types/streaming.js.map +1 -1
  197. package/dist/upgrade/commands.js +1 -16
  198. package/dist/upgrade/commands.js.map +1 -1
  199. package/dist/utils/cliOutput.d.ts +10 -0
  200. package/dist/utils/cliOutput.js +17 -0
  201. package/dist/utils/cliOutput.js.map +1 -0
  202. package/dist/utils/debugFilter.d.ts +0 -5
  203. package/dist/utils/debugFilter.js +5 -11
  204. package/dist/utils/debugFilter.js.map +1 -1
  205. package/dist/utils/delay.d.ts +12 -0
  206. package/dist/utils/delay.js +20 -0
  207. package/dist/utils/delay.js.map +1 -1
  208. package/dist/utils/evaluate.js +6 -11
  209. package/dist/utils/evaluate.js.map +1 -1
  210. package/dist/utils/ffmpeg.d.ts +13 -5
  211. package/dist/utils/ffmpeg.js +32 -11
  212. package/dist/utils/ffmpeg.js.map +1 -1
  213. package/dist/utils/format.d.ts +20 -3
  214. package/dist/utils/format.js +32 -6
  215. package/dist/utils/format.js.map +1 -1
  216. package/dist/utils/index.d.ts +2 -0
  217. package/dist/utils/index.js +2 -0
  218. package/dist/utils/index.js.map +1 -1
  219. package/dist/utils/logEmitter.js +1 -1
  220. package/dist/utils/logEmitter.js.map +1 -1
  221. package/dist/utils/retry.d.ts +15 -9
  222. package/dist/utils/retry.js +8 -26
  223. package/dist/utils/retry.js.map +1 -1
  224. package/dist/utils/timing.d.ts +5 -0
  225. package/dist/utils/timing.js +13 -0
  226. package/dist/utils/timing.js.map +1 -0
  227. package/dist/utils/version.js +2 -2
  228. package/dist/utils/version.js.map +1 -1
  229. package/package.json +5 -5
@@ -51,16 +51,6 @@ export function generateStatusScript() {
51
51
  " return url;",
52
52
  " }",
53
53
  "}",
54
- // Build channel display HTML with an optional logo image. When a logo URL is available, renders an img element with an onerror fallback that hides the
55
- // image and reveals a text span. The logoClass and textClass parameters allow callers to apply context-specific sizing.
56
- "function channelDisplayHtml(logoUrl, name, logoClass, textClass) {",
57
- " if(logoUrl) {",
58
- " return '<img src=\"' + logoUrl + '\" class=\"' + logoClass + '\" alt=\"' + name + '\" title=\"' + name + '\" ' +",
59
- " 'onerror=\"this.style.display=\\'none\\';this.nextElementSibling.style.display=\\'inline\\'\">' +",
60
- " '<span class=\"' + textClass + '\" style=\"display:none\">' + name + '</span>';",
61
- " }",
62
- " return '<span class=\"' + textClass + '\">' + name + '</span>';",
63
- "}",
64
54
  // Get row background color based on health status. Uses CSS variables for theme support.
65
55
  "function getRowTint(health) {",
66
56
  " var tints = {",
@@ -123,11 +113,12 @@ export function generateStatusScript() {
123
113
  " var color = healthColorVars[s.health] || 'var(--text-muted)';",
124
114
  " var name = s.channel || s.providerName || getDomain(s.url);",
125
115
  " var dur = Math.floor((now - new Date(s.startTime).getTime()) / 1000);",
116
+ " var hwBadge = s.hardwareAccelerated ? ' <span title=\"Hardware accelerated\">\\u26A1</span>' : '';",
126
117
  " var showSuffix = s.showName ? ' <span class=\"stream-popover-show\">' + s.showName + '</span>' : '';",
127
118
  " html += '<div class=\"stream-popover-row\">';",
128
119
  " html += '<span class=\"status-dot\" style=\"color: ' + color + ';\">&#9679;</span>';",
129
120
  " html += channelDisplayHtml(s.logoUrl, name, 'stream-popover-logo', 'stream-popover-channel');",
130
- " html += showSuffix;",
121
+ " html += hwBadge + showSuffix;",
131
122
  " html += '<span class=\"stream-popover-duration\">' + formatDuration(dur) + '</span>';",
132
123
  " html += '</div>';",
133
124
  " }",
@@ -205,7 +196,13 @@ export function generateStatusScript() {
205
196
  " var channelDisplay = channelDisplayHtml(s.logoUrl, channelText, 'channel-logo', 'channel-text');",
206
197
  " html += '<tr class=\"stream-row\" data-id=\"' + id + '\" onclick=\"toggleStreamDetails(' + id + ')\" style=\"background-color: ' + rowTint + ';\">';",
207
198
  " html += '<td class=\"chevron\">' + chevron + '</td>';",
208
- " var nativeBadge = s.streamingMode === 'native' ? ' <span class=\"native-badge\" title=\"Native HLS\">Native</span>' : '';",
199
+ " var hwIcon = s.hardwareAccelerated ? '\\u26A1 ' : '';",
200
+ " var nativeBadge = '';",
201
+ " if (s.streamingMode === 'native') {",
202
+ " nativeBadge = ' <span class=\"native-badge\" title=\"Native HLS\">Native</span>';",
203
+ " } else if (s.hardwareAccelerated) {",
204
+ " nativeBadge = ' <span class=\"native-badge\" title=\"Hardware accelerated\">' + hwIcon + (s.captureCodec || '') + '</span>';",
205
+ " }",
209
206
  " var durationSpan = '<span class=\"stream-duration\" id=\"duration-' + id + '\">\\u00b7 ' + formatDuration(s.duration) + '</span>';",
210
207
  " html += '<td class=\"stream-info\">' + channelDisplay + nativeBadge + ' ' + durationSpan + '</td>';",
211
208
  " var showDisplay = s.showName ? s.showName : '';",
@@ -227,6 +224,21 @@ export function generateStatusScript() {
227
224
  " html += '<div class=\"details-started\"><strong>Started:</strong> ' + formatTime(s.startTime) + clientSuffix + '</div>';",
228
225
  " html += '</div>';",
229
226
  " html += '<div class=\"details-metrics\">';",
227
+ " var codecLabel = s.captureCodec ? (s.hardwareAccelerated ? '\\u26A1 ' + s.captureCodec : s.captureCodec) :",
228
+ " (s.streamingMode === 'native' ? 'Native HLS' : 'Unknown');",
229
+ " var modeLabel = s.streamingMode === 'native' ? 'Native HLS' : 'Capture';",
230
+ " var qualitySuffix = '';",
231
+ " if (s.streamingMode === 'native') {",
232
+ " var qParts = [];",
233
+ " if (s.nativeBandwidth > 0) { qParts.push((s.nativeBandwidth / 1000000).toFixed(1) + 'Mbps'); }",
234
+ " if (s.nativeResolution) {",
235
+ " var resLabels = { '1080': '1080p', '2160': '4K', '360': '360p', '480': '480p', '720': '720p' };",
236
+ " var h = s.nativeResolution.split('x')[1];",
237
+ " qParts.push(resLabels[h] || s.nativeResolution);",
238
+ " }",
239
+ " if (qParts.length > 0) { qualitySuffix = ' - ' + qParts.join(' '); }",
240
+ " }",
241
+ " html += '<div class=\"details-codec\"><strong>Codec:</strong> ' + codecLabel + ' (' + modeLabel + ')' + qualitySuffix + '</div>';",
230
242
  " html += '<div class=\"details-issue\"><strong>Last issue:</strong> ' + formatLastIssue(s) + '</div>';",
231
243
  " html += '<div class=\"details-recovery\"><strong>Recovery:</strong> ' + formatAutoRecovery(s) + '</div>';",
232
244
  " html += '<div class=\"details-memory\"><strong>Memory:</strong> ' + formatBytes(s.memoryBytes) + '</div>';",
@@ -363,6 +375,10 @@ export function generateStatusScript() {
363
375
  " updateChannelHealth(event.channelKey, event.status, event.timestamp, event.domain);",
364
376
  " if(event.status === 'success') { updateDomainAuth(event.domain, event.timestamp); }",
365
377
  " });",
378
+ // Channel table updates from the server (e.g., logo population after startup). Applies the patch via the shared applyChannelPatch function.
379
+ " on('channelUpdate', function(e) {",
380
+ " if(window.applyChannelPatch) { applyChannelPatch(JSON.parse(e.data)); }",
381
+ " });",
366
382
  " statusEventSource.onerror = function() {",
367
383
  " document.getElementById('system-health').innerHTML = '<span class=\"status-dot\" style=\"color: var(--stream-stalled);\">&#9679;</span> Updates paused';",
368
384
  " };",
@@ -390,18 +406,11 @@ export function generateStatusScript() {
390
406
  " hiddenSince = 0;",
391
407
  " }",
392
408
  "});",
393
- // Copy playlist URL function for Overview tab Quick Start section.
409
+ // Copy playlist URL function for Overview tab Quick Start section. Delegates to the shared copyToClipboard utility for consistent clipboard handling
410
+ // across all contexts (HTTPS Clipboard API with execCommand fallback for plain HTTP).
394
411
  "window.copyOverviewPlaylistUrl = function() {",
395
412
  " var urlEl = document.getElementById('overview-playlist-url');",
396
- " if (urlEl) {",
397
- " navigator.clipboard.writeText(urlEl.textContent).then(function() {",
398
- " var feedback = document.getElementById('overview-copy-feedback');",
399
- " if (feedback) {",
400
- " feedback.style.display = 'inline';",
401
- " setTimeout(function() { feedback.style.display = 'none'; }, 2000);",
402
- " }",
403
- " });",
404
- " }",
413
+ " if(urlEl) { copyToClipboard(urlEl.textContent, 'Playlist URL copied to clipboard.'); }",
405
414
  "};",
406
415
  // JS-based tooltips for devices where the primary input can't hover (iPadOS). Safari on iPadOS doesn't show native title tooltips, so we use
407
416
  // a single <div> appended to <body> and positioned via getBoundingClientRect(). This is immune to overflow containers and stacking contexts.
@@ -419,8 +428,8 @@ export function generateStatusScript() {
419
428
  " var rect = btn.getBoundingClientRect();",
420
429
  " tip.textContent = label;",
421
430
  " tip.classList.add('visible');",
422
- " tip.style.top = (rect.bottom + 6) + 'px';",
423
- " tip.style.left = (rect.left + rect.width / 2) + 'px';",
431
+ " tip.style.top = (rect.bottom + 6 + (window.scrollY || 0)) + 'px';",
432
+ " tip.style.left = (rect.left + rect.width / 2 + (window.scrollX || 0)) + 'px';",
424
433
  " tip.style.transform = 'translateX(-50%)';",
425
434
  " }, true);",
426
435
  " document.addEventListener('mouseleave', function(e) {",
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/routes/root/scripts/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/routes/root/scripts/status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,oBAAoB;IAElC,OAAO;QACL,UAAU;QACV,+BAA+B;QAC/B,sBAAsB;QACtB,wBAAwB;QACxB,2BAA2B;QAC3B,0IAA0I;QAC1I,qEAAqE;QAErE,4CAA4C;QAC5C,oCAAoC;QACpC,2CAA2C;QAC3C,sFAAsF;QACtF,uCAAuC;QACvC,8CAA8C;QAC9C,8BAA8B;QAC9B,GAAG;QAEH,yCAAyC;QACzC,+BAA+B;QAC/B,kCAAkC;QAClC,0CAA0C;QAC1C,kEAAkE;QAClE,gDAAgD;QAChD,GAAG;QAEH,gFAAgF;QAChF,kCAAkC;QAClC,mCAAmC;QACnC,yBAAyB;QACzB,gCAAgC;QAChC,oCAAoC;QACpC,yCAAyC;QACzC,uBAAuB;QACvB,+BAA+B;QAC/B,iFAAiF;QACjF,qDAAqD;QACrD,wGAAwG;QACxG,gFAAgF;QAChF,KAAK;QACL,mBAAmB;QACnB,GAAG;QAEH,qIAAqI;QACrI,2BAA2B;QAC3B,SAAS;QACT,mDAAmD;QACnD,4EAA4E;QAC5E,iBAAiB;QACjB,iBAAiB;QACjB,KAAK;QACL,GAAG;QAEH,yFAAyF;QACzF,+BAA+B;QAC/B,iBAAiB;QACjB,6BAA6B;QAC7B,gDAAgD;QAChD,4CAA4C;QAC5C,kDAAkD;QAClD,uCAAuC;QACvC,MAAM;QACN,0CAA0C;QAC1C,GAAG;QAEH,4HAA4H;QAC5H,iEAAiE;QACjE,0CAA0C;QAC1C,mBAAmB;QACnB,oDAAoD;QACpD,6DAA6D;QAC7D,yDAAyD;QACzD,qDAAqD;QACrD,uCAAuC;QACvC,uDAAuD;QACvD,0DAA0D;QAC1D,2DAA2D;QAC3D,wDAAwD;QACxD,oCAAoC;QACpC,KAAK;QACL,4BAA4B;QAC5B,oIAAoI;QACpI,2EAA2E;QAC3E,GAAG;QAEH,oIAAoI;QACpI,iCAAiC;QACjC,2BAA2B;QAC3B,4DAA4D;QAC5D,2DAA2D;QAC3D,sCAAsC;QACtC,+GAA+G;QAC/G,YAAY;QACZ,6HAA6H;QAC7H,KAAK;QACL,2CAA2C;QAC3C,yCAAyC;QACzC,sBAAsB;QACtB,yCAAyC;QACzC,6CAA6C;QAC7C,mEAAmE;QACnE,mDAAmD;QACnD,YAAY;QACZ,+DAA+D;QAC/D,0CAA0C;QAC1C,KAAK;QACL,GAAG;QAEH,8GAA8G;QAC9G,4CAA4C;QAC5C,sCAAsC;QACtC,kBAAkB;QAClB,yBAAyB;QACzB,yCAAyC;QACzC,iCAAiC;QACjC,mEAAmE;QACnE,iEAAiE;QACjE,2EAA2E;QAC3E,wGAAwG;QACxG,0GAA0G;QAC1G,mDAAmD;QACnD,0FAA0F;QAC1F,mGAAmG;QACnG,mCAAmC;QACnC,2FAA2F;QAC3F,uBAAuB;QACvB,KAAK;QACL,0BAA0B;QAC1B,GAAG;QAEH,+GAA+G;QAC/G,kCAAkC;QAClC,8DAA8D;QAC9D,yDAAyD;QACzD,sCAAsC;QACtC,0BAA0B;QAC1B,oCAAoC;QACpC,aAAa;QACb,KAAK;QACL,oCAAoC;QACpC,GAAG;QAEH,4CAA4C;QAC5C,2CAA2C;QAC3C,sCAAsC;QACtC,gCAAgC;QAChC,8DAA8D;QAC9D,qBAAqB;QACrB,iDAAiD;QACjD,qBAAqB;QACrB,iBAAiB;QACjB,sCAAsC;QACtC,iCAAiC;QACjC,KAAK;QACL,IAAI;QAEJ,iCAAiC;QACjC,+BAA+B;QAC/B,gEAAgE;QAChE,wFAAwF;QACxF,sEAAsE;QACtE,6EAA6E;QAC7E,kDAAkD;QAClD,GAAG;QAEH,yCAAyC;QACzC,kCAAkC;QAClC,sCAAsC;QACtC,wCAAwC;QACxC,yCAAyC;QACzC,qEAAqE;QACrE,oGAAoG;QACpG,eAAe;QACf,GAAG;QAEH,mDAAmD;QACnD,6BAA6B;QAC7B,+CAA+C;QAC/C,uDAAuD;QACvD,mBAAmB;QACnB,gDAAgD;QAChD,2BAA2B;QAC3B,6DAA6D;QAC7D,KAAK;QACL,4BAA4B;QAC5B,GAAG;QAEH,4BAA4B;QAC5B,iCAAiC;QACjC,yDAAyD;QACzD,uBAAuB;QACvB,4CAA4C;QAC5C,iCAAiC;QACjC,gGAAgG;QAChG,aAAa;QACb,KAAK;QACL,kBAAkB;QAClB,gDAAgD;QAChD,4BAA4B;QAC5B,6BAA6B;QAC7B,2CAA2C;QAC3C,uDAAuD;QACvD,yCAAyC;QACzC,wEAAwE;QACxE,sGAAsG;QACtG,0JAA0J;QAC1J,2DAA2D;QAC3D,2DAA2D;QAC3D,2BAA2B;QAC3B,yCAAyC;QACzC,yFAAyF;QACzF,yCAAyC;QACzC,oIAAoI;QACpI,OAAO;QACP,wIAAwI;QACxI,yGAAyG;QACzG,qDAAqD;QACrD,mEAAmE;QACnE,+BAA+B;QAC/B,8BAA8B;QAC9B,mFAAmF;QACnF,uHAAuH;QACvH,OAAO;QACP,uHAAuH;QACvH,sBAAsB;QACtB,uBAAuB;QACvB,uEAAuE;QACvE,qCAAqC;QACrC,kDAAkD;QAClD,iDAAiD;QACjD,iEAAiE;QACjE,oFAAoF;QACpF,gIAAgI;QAChI,yBAAyB;QACzB,kDAAkD;QAClD,kHAAkH;QAClH,oEAAoE;QACpE,gFAAgF;QAChF,+BAA+B;QAC/B,2CAA2C;QAC3C,0BAA0B;QAC1B,wGAAwG;QACxG,mCAAmC;QACnC,2GAA2G;QAC3G,qDAAqD;QACrD,4DAA4D;QAC5D,WAAW;QACX,8EAA8E;QAC9E,SAAS;QACT,yIAAyI;QACzI,6GAA6G;QAC7G,iHAAiH;QACjH,kHAAkH;QAClH,yBAAyB;QACzB,yBAAyB;QACzB,6BAA6B;QAC7B,OAAO;QACP,KAAK;QACL,2BAA2B;QAC3B,GAAG;QAEH,yBAAyB;QACzB,oCAAoC;QACpC,+CAA+C;QAC/C,yBAAyB;QACzB,GAAG;QAEH,kKAAkK;QAClK,sEAAsE;QACtE,8BAA8B;QAC9B,yBAAyB;QACzB,4CAA4C;QAC5C,gDAAgD;QAChD,4BAA4B;QAC5B,6BAA6B;QAC7B,mFAAmF;QACnF,yDAAyD;QACzD,wEAAwE;QACxE,KAAK;QACL,0BAA0B;QAC1B,GAAG;QAEH,4IAA4I;QAC5I,uCAAuC;QACvC,sBAAsB;QAEtB,uJAAuJ;QACvJ,8BAA8B;QAC9B,uDAAuD;QACvD,2CAA2C;QAC3C,2CAA2C;QAC3C,2FAA2F;QAC3F,yCAAyC;QACzC,iFAAiF;QACjF,sCAAsC;QACtC,0DAA0D;QAC1D,GAAG;QACH,uEAAuE;QACvE,mEAAmE;QACnE,wBAAwB;QAExB,+JAA+J;QAC/J,oJAAoJ;QACpJ,gBAAgB;QAChB,0DAA0D;QAC1D,sFAAsF;QACtF,KAAK;QACL,qDAAqD;QACrD,yBAAyB;QACzB,6DAA6D;QAC7D,sEAAsE;QACtE,yEAAyE;QACzE,8FAA8F;QAC9F,GAAG;QACH,gDAAgD;QAChD,oGAAoG;QACpG,6CAA6C;QAC7C,iDAAiD;QACjD,gEAAgE;QAChE,KAAK;QACL,GAAG;QACH,sCAAsC;QACtC,YAAY;QACZ,+BAA+B;QAC/B,qCAAqC;QACrC,4EAA4E;QAC5E,KAAK;QACL,8BAA8B;QAC9B,+CAA+C;QAC/C,KAAK;QACL,GAAG;QAEH,4HAA4H;QAC5H,+BAA+B;QAC/B,wDAAwD;QACxD,2DAA2D;QAC3D,qCAAqC;QAErC,2IAA2I;QAC3I,0IAA0I;QAC1I,qFAAqF;QACrF,iCAAiC;QACjC,6DAA6D;QAC7D,yCAAyC;QACzC,mCAAmC;QACnC,SAAS;QACT,KAAK;QACL,oBAAoB;QACpB,gCAAgC;QAChC,oCAAoC;QACpC,+BAA+B;QAC/B,sBAAsB;QACtB,qDAAqD;QACrD,yDAAyD;QACzD,OAAO;QACP,2BAA2B;QAC3B,2BAA2B;QAC3B,4BAA4B;QAC5B,2DAA2D;QAC3D,OAAO;QACP,mCAAmC;QACnC,iCAAiC;QACjC,2BAA2B;QAC3B,2BAA2B;QAC3B,4BAA4B;QAC5B,OAAO;QACP,qCAAqC;QACrC,oCAAoC;QACpC,iCAAiC;QACjC,sCAAsC;QACtC,2BAA2B;QAC3B,4BAA4B;QAC5B,4DAA4D;QAC5D,oCAAoC;QACpC,OAAO;QACP,OAAO;QACP,2CAA2C;QAC3C,iCAAiC;QACjC,6BAA6B;QAC7B,6BAA6B;QAC7B,6BAA6B;QAC7B,8BAA8B;QAC9B,OAAO;QACP,OAAO;QACP,2CAA2C;QAC3C,sCAAsC;QACtC,2BAA2B;QAC3B,OAAO;QACP,qCAAqC;QACrC,qCAAqC;QACrC,yFAAyF;QACzF,yFAAyF;QACzF,OAAO;QAEP,4IAA4I;QAC5I,qCAAqC;QACrC,6EAA6E;QAC7E,OAAO;QACP,4CAA4C;QAC5C,8JAA8J;QAC9J,MAAM;QACN,GAAG;QAEH,0CAA0C;QAC1C,qBAAqB;QACrB,qCAAqC;QAErC,wHAAwH;QACxH,0BAA0B;QAC1B,0EAA0E;QAC1E,YAAY;QAEZ,6IAA6I;QAC7I,sGAAsG;QACtG,4DAA4D;QAC5D,yBAAyB;QACzB,+BAA+B;QAC/B,0EAA0E;QAC1E,sBAAsB;QACtB,yBAAyB;QACzB,gEAAgE;QAChE,qBAAqB;QACrB,mIAAmI;QACnI,OAAO;QACP,YAAY;QACZ,sBAAsB;QACtB,KAAK;QACL,KAAK;QAEL,qJAAqJ;QACrJ,sFAAsF;QACtF,+CAA+C;QAC/C,iEAAiE;QACjE,0FAA0F;QAC1F,IAAI;QAEJ,6IAA6I;QAC7I,6IAA6I;QAC7I,uIAAuI;QACvI,eAAe;QACf,2DAA2D;QAC3D,4CAA4C;QAC5C,uCAAuC;QACvC,mCAAmC;QACnC,yDAAyD;QACzD,0DAA0D;QAC1D,sBAAsB;QACtB,8EAA8E;QAC9E,wBAAwB;QACxB,6CAA6C;QAC7C,8BAA8B;QAC9B,mCAAmC;QACnC,uEAAuE;QACvE,mFAAmF;QACnF,+CAA+C;QAC/C,aAAa;QACb,yDAAyD;QACzD,0DAA0D;QAC1D,sBAAsB;QACtB,gHAAgH;QAChH,8BAA8B;QAC9B,sCAAsC;QACtC,aAAa;QACb,OAAO;QAEP,WAAW;KACZ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -25,7 +25,7 @@ export function generateLandingPageStyles() {
25
25
  "#stream-count.clickable { cursor: pointer; }",
26
26
  "#stream-count.clickable:hover { color: var(--text-primary); }",
27
27
  ".stream-popover .dropdown-menu { right: 0; left: auto; min-width: 220px; }",
28
- ".stream-popover-row { display: flex; align-items: center; gap: 8px; padding: 6px 12px; font-size: 13px; white-space: nowrap; }",
28
+ ".stream-popover-row { display: flex; align-items: center; gap: 8px; padding: 6px 12px; font-size: 13px; white-space: nowrap; cursor: default; user-select: none; }",
29
29
  ".stream-popover-logo { height: 18px; width: auto; max-width: 80px; vertical-align: middle; }",
30
30
  ".stream-popover-channel { color: var(--text-primary); }",
31
31
  ".stream-popover-show { color: var(--text-muted); }",
@@ -58,6 +58,7 @@ export function generateLandingPageStyles() {
58
58
  "width: 640px; max-width: 90vw; max-height: 85vh; display: flex; flex-direction: column; overflow: hidden; }",
59
59
  ".wizard-header { display: flex; justify-content: space-between; align-items: center; padding: 16px 20px; ",
60
60
  "border-bottom: 1px solid var(--border-default); }",
61
+ ".wizard-header-wrap { flex-wrap: wrap; align-items: flex-start; }",
61
62
  ".wizard-header h3 { margin: 0; font-size: 18px; color: var(--text-heading); }",
62
63
  ".wizard-close { background: none; border: none; font-size: 20px; cursor: pointer; color: var(--text-muted); padding: 4px 8px; }",
63
64
  ".wizard-close:hover { color: var(--text-primary); }",
@@ -75,7 +76,8 @@ export function generateLandingPageStyles() {
75
76
  ".wizard-step.clickable:not(.completed) .step-circle:hover { border-color: var(--interactive-primary); color: var(--interactive-primary); }",
76
77
  // Wizard content area.
77
78
  ".wizard-content { padding: 20px; overflow-y: auto; flex: 1; min-height: 300px; }",
78
- ".wizard-content label { display: block; margin-bottom: 6px; font-weight: 500; color: var(--text-primary); font-size: 14px; }",
79
+ ".wizard-content-compact { min-height: 0; }",
80
+ ".wizard-content .wizard-label { display: block; margin-bottom: 6px; font-weight: 500; color: var(--text-primary); font-size: 14px; }",
79
81
  ".wizard-content input[type=\"text\"], .wizard-content textarea { width: 100%; padding: 8px 10px; border: 1px solid var(--border-default); ",
80
82
  "border-radius: var(--radius-md); font-size: 14px; font-family: inherit; background: var(--surface-overlay); color: var(--text-primary); ",
81
83
  "box-sizing: border-box; }",
@@ -121,8 +123,32 @@ export function generateLandingPageStyles() {
121
123
  ".wizard-domain-row .field-group:last-child { margin-bottom: 0; }",
122
124
  ".wizard-add-domain { background: none; border: none; color: var(--interactive-primary); cursor: pointer; font-size: 13px; padding: 4px 0; }",
123
125
  ".wizard-add-domain:hover { text-decoration: underline; }",
124
- // Export and import modal styles: body area, profile list items, section header, and option labels.
125
- ".export-modal-body { padding: 20px; overflow-y: auto; font-size: 14px; }",
126
+ // Shared wizard description and hint text. The description sits inside the header (below the title, above the border) providing modal-level context.
127
+ // Hints are used for contextual guidance within individual steps.
128
+ ".wizard-description { width: 100%; font-size: 13px; color: var(--text-secondary); margin-top: 6px; }",
129
+ ".wizard-hint { font-size: 13px; color: var(--text-secondary); margin: 0 0 10px 0; }",
130
+ // Provider picker grid and cards. Used by Browse Channels step 1 and Setup Wizard step 1 for selecting providers.
131
+ ".wizard-provider-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 10px; }",
132
+ ".wizard-provider-card { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border: 1px solid var(--border-default); ",
133
+ "border-radius: var(--radius-md); cursor: pointer; transition: all 0.15s; font-size: 14px; font-weight: 500; color: var(--text-primary); ",
134
+ "white-space: nowrap; }",
135
+ ".wizard-provider-card:hover { background: var(--surface-hover); border-color: var(--interactive-primary); }",
136
+ "label.wizard-provider-card { cursor: pointer; }",
137
+ ".setup-provider-cb { margin-right: 8px; flex-shrink: 0; }",
138
+ // Spinner shown while discovering channels or performing async operations within a wizard step.
139
+ ".wizard-spinner { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 40px 20px; color: var(--text-secondary); font-size: 14px; }",
140
+ ".wizard-spinner::before { content: ''; width: 24px; height: 24px; border: 2px solid var(--border-default); border-top-color: var(--interactive-primary); ",
141
+ "border-radius: 50%; animation: spin 0.8s linear infinite; }",
142
+ // Empty state within wizard content when no results are found or an error prevents content display.
143
+ ".wizard-empty { text-align: center; padding: 40px 20px; color: var(--text-secondary); font-size: 14px; }",
144
+ ".wizard-empty-title { font-size: 15px; font-weight: 600; color: var(--text-primary); margin: 0 0 6px 0; }",
145
+ // Setup wizard step content styles. Centered layout for auth prompts and summary steps.
146
+ ".wizard-step-centered { text-align: center; padding: 20px 0; }",
147
+ ".wizard-step-centered-compact { text-align: center; padding: 12px 0 0; }",
148
+ ".wizard-step-provider-name { font-size: 15px; font-weight: 500; margin-bottom: 4px; }",
149
+ ".wizard-step-provider-count { font-size: 13px; color: var(--text-muted); margin-bottom: 16px; }",
150
+ ".wizard-step-summary { font-size: 14px; color: var(--text-secondary); }",
151
+ // Export and import modal styles: profile list items, section header, and option labels.
126
152
  ".export-section-header { margin-bottom: 12px; font-weight: 500; }",
127
153
  ".export-option-label { display: flex; align-items: center; gap: 8px; cursor: pointer; }",
128
154
  ".export-profile-item { display: flex; align-items: center; gap: 10px; padding: 8px 10px; margin-bottom: 4px; ",
@@ -192,7 +218,8 @@ export function generateLandingPageStyles() {
192
218
  "border-radius: var(--radius-lg); overflow: auto; }",
193
219
  ".channel-table { width: 100%; border-collapse: separate; border-spacing: 0; table-layout: auto; min-width: 650px; margin: 0; }",
194
220
  ".channel-table th, .channel-table td { padding: 10px 12px; text-align: left; border: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }",
195
- ".channel-table th { background: var(--table-header-bg); font-weight: 600; font-size: 13px; border-bottom: 1px solid var(--border-default); }",
221
+ ".channel-table th { padding-top: 2px; padding-bottom: 2px; background: var(--table-header-bg); font-weight: 600; font-size: 13px; " +
222
+ "border-bottom: 1px solid var(--border-default); }",
196
223
  ".channel-table tbody tr:nth-child(even):not(.user-channel) { background: var(--table-row-even); }",
197
224
  ".channel-table tr:hover { background: var(--table-row-hover); }",
198
225
  ".channel-table .col-key { min-width: 170px; }",
@@ -201,6 +228,10 @@ export function generateLandingPageStyles() {
201
228
  ".channel-table .col-actions, .channel-table td:last-child { min-width: 168px; white-space: nowrap; overflow: visible; }",
202
229
  ".provider-select { width: 100%; padding: 2px 4px; font-size: 12px; border: 1px solid var(--form-input-border); ",
203
230
  "border-radius: 3px; background: var(--form-input-bg); color: var(--text-primary); }",
231
+ // Channel name cell with optional logo. The cell content is a span that may be replaced by channelDisplayHtml on page load when a logo URL is available.
232
+ ".channel-name-cell { display: inline-flex; align-items: center; gap: 6px; }",
233
+ ".channel-table-logo { height: 18px; width: auto; max-width: 60px; flex-shrink: 0; }",
234
+ ".channel-table-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }",
204
235
  // Optional column width, alignment, and visibility rules. Generated from OPTIONAL_COLUMNS to keep a single source of truth for column metadata.
205
236
  ...OPTIONAL_COLUMNS.flatMap((col) => [
206
237
  ".channel-table ." + col.cssClass + " { min-width: " + col.width + (col.align === "center" ? "; text-align: center" : "") + "; }",
@@ -234,18 +265,71 @@ export function generateLandingPageStyles() {
234
265
  ".channel-table tr.channel-unavailable td { color: var(--text-tertiary); }",
235
266
  ".channel-table tr.channel-unavailable.channel-disabled { opacity: 0.5; }",
236
267
  ".channel-table.hide-disabled tr.channel-unavailable { display: none; }",
268
+ // Tag pills — rounded labels for tag display in the channel table, tag manager modal, and edit form. The pill shape provides clear visual identity and
269
+ // scannability across all surfaces where tags appear.
270
+ ".tag-badge { display: inline-block; padding: 1px 7px; margin: 1px 2px; font-size: 11px; border-radius: 10px; " +
271
+ "background: var(--surface-elevated); border: 1px solid var(--border-default); color: var(--text-secondary); font-weight: 500; }",
272
+ ".tag-badge-deleted { opacity: 0.5; text-decoration: line-through; }",
273
+ // Tag checkbox grid in the channel edit form. Each tag is a pill-styled checkbox label.
274
+ ".tag-checkbox-grid { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }",
275
+ ".tag-checkbox-label { cursor: pointer; display: inline-flex; align-items: center; gap: 3px; }",
276
+ ".tag-checkbox-label input { margin: 0; }",
277
+ ".tag-checkbox-label .tag-badge { cursor: pointer; }",
278
+ // Inline tag edit portal — shared dropdown portaled to <body> via JS. The td has the dropdown class so the document click handler recognizes it as a dropdown
279
+ // context. The display override preserves table-cell layout (the .dropdown class defaults to display: inline-block for div-based dropdowns).
280
+ "td.dropdown { display: table-cell; }",
281
+ ".inline-tag-menu { min-width: 140px; }",
282
+ ".tag-editable { cursor: pointer; }",
283
+ ".tag-editable:hover { background: var(--surface-hover); }",
284
+ ".tag-rename-input { font-size: 11px; padding: 1px 4px; border: 1px solid var(--interactive-primary); border-radius: 10px; " +
285
+ "outline: none; width: 120px; }",
286
+ // Tag manager modal — list of tags with add/delete/restore actions. Hint and error styling use shared wizard classes.
287
+ ".tag-manager-add { display: flex; gap: 8px; margin-bottom: 8px; }",
288
+ ".tag-manager-add input { flex: 1; padding: 4px 8px; font-size: 13px; border: 1px solid var(--form-input-border); border-radius: 4px; }",
289
+ ".tag-manager-list { display: flex; flex-direction: column; gap: 4px; }",
290
+ ".tag-manager-item { display: flex; align-items: center; gap: 8px; padding: 4px 0; }",
291
+ ".tag-manager-item .btn-icon { margin-left: auto; }",
292
+ ".tag-manager-section-label { font-size: 11px; text-transform: uppercase; color: var(--text-tertiary); margin-top: 12px; margin-bottom: 4px; " +
293
+ "letter-spacing: 0.5px; }",
294
+ ".tag-annotation { font-size: 10px; color: var(--text-tertiary); }",
295
+ // Tag column filter. Rows hidden by the tag filter are completely removed from view. This is a transient client-side filter, not a persistent setting.
296
+ ".channel-table tr.tag-filtered { display: none; }",
297
+ // Tag filter dropdown button in the column header. Sized to sit inline with the column label.
298
+ ".btn-tag-filter { padding: 0 3px; margin-left: 4px; vertical-align: middle; opacity: 0.6; }",
299
+ ".btn-tag-filter svg { width: 12px; height: 12px; }",
300
+ ".btn-tag-filter:hover { opacity: 1; }",
301
+ // Playlist hint icon. Appears next to the tag filter funnel when the filter is active, providing the corresponding playlist URL for Channels DVR.
302
+ ".btn-playlist-hint { padding: 0 3px; margin-left: 2px; vertical-align: middle; opacity: 0.6; color: var(--accent); }",
303
+ ".btn-playlist-hint svg { width: 12px; height: 12px; }",
304
+ ".btn-playlist-hint:hover { opacity: 1; }",
305
+ ".playlist-hint-content { padding: 10px 14px; max-width: 420px; }",
306
+ ".playlist-hint-content p { margin: 0 0 8px; font-size: 12px; color: var(--text-secondary); line-height: 1.4; }",
307
+ ".playlist-hint-url { display: flex; align-items: center; gap: 8px; }",
308
+ ".playlist-hint-url code { flex: 1; font-size: 12px; padding: 5px 8px; background: var(--surface-sunken); border: 1px solid var(--border-default); " +
309
+ "border-radius: var(--radius-sm); word-break: break-all; color: var(--text-primary); }",
310
+ // Quick Actions tag section label.
311
+ ".quick-action-section-label { font-size: 11px; text-transform: uppercase; color: var(--text-tertiary); padding: 4px 12px 2px; letter-spacing: 0.5px; }",
312
+ // Inline editable cells. Cursor and hover indicate clickability. The inline input replaces the cell content during editing.
313
+ ".editable-cell { cursor: pointer; }",
314
+ ".editable-cell input.inline-edit { width: 100%; padding: 2px 4px; font-size: 13px; border: 1px solid var(--interactive-primary); " +
315
+ "border-radius: 3px; outline: none; background: var(--form-input-bg); color: var(--text-primary); box-sizing: border-box; }",
237
316
  ".no-provider-label { color: var(--text-tertiary); font-size: 12px; }",
238
317
  ".text-muted { color: var(--text-muted); }",
239
318
  // Provider filter toolbar layout.
240
319
  ".provider-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 10px; }",
241
320
  ".provider-toolbar .toolbar-group { display: flex; align-items: center; gap: 6px; }",
242
- ".provider-toolbar .toolbar-label { font-size: 13px; color: var(--text-secondary); white-space: nowrap; }",
243
321
  // Provider dropdown multi-select.
244
322
  ".provider-dropdown-menu { min-width: 200px; max-height: 70vh; overflow-y: auto; }",
245
323
  ".provider-option { display: flex; align-items: center; gap: 6px; padding: 5px 12px; font-size: 13px; cursor: pointer; color: var(--text-primary); }",
246
324
  ".provider-option:hover { background: var(--surface-sunken); }",
247
325
  ".provider-option input[type=\"checkbox\"] { margin: 0; }",
248
326
  ".quick-action-count { margin-left: auto; font-size: 12px; color: var(--text-secondary); }",
327
+ // Bulk assign row in Quick Actions dropdown. Compact label + select on one line.
328
+ ".bulk-assign-row { display: flex; align-items: center; gap: 8px; padding: 6px 12px; font-size: 13px; color: var(--text-primary); }",
329
+ ".bulk-assign-select { flex: 1; padding: 2px 4px; font-size: 12px; border: 1px solid var(--form-input-border); border-radius: 3px; ",
330
+ "background: var(--form-input-bg); color: var(--text-primary); }",
331
+ ".auto-number-input { width: 60px; padding: 2px 4px; font-size: 12px; border: 1px solid var(--form-input-border); border-radius: 3px; " +
332
+ "background: var(--form-input-bg); color: var(--text-primary); text-align: center; }",
249
333
  // Provider chips.
250
334
  ".provider-chips { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }",
251
335
  ".provider-chip { display: inline-flex; align-items: center; gap: 4px; background: var(--surface-elevated); border: 1px solid var(--border-default); ",
@@ -283,13 +367,15 @@ export function generateLandingPageStyles() {
283
367
  // JS tooltip styling. The tooltip element is appended to <body> and positioned via getBoundingClientRect() so it's immune to overflow and stacking contexts.
284
368
  // Only activated when the primary input can't hover (hover: none), targeting iPadOS where Safari doesn't show native title tooltips. On pure-touch
285
369
  // devices without a trackpad, the JS loads but mouseenter never fires so the tooltip stays hidden. Desktop (hover: hover) skips initialization entirely.
286
- ".btn-icon-tooltip { position: fixed; padding: 4px 8px; border-radius: var(--radius-sm); background: var(--surface-overlay); color: var(--text-primary); ",
370
+ ".btn-icon-tooltip { position: absolute; padding: 4px 8px; border-radius: var(--radius-sm); background: var(--surface-overlay); color: var(--text-primary); ",
287
371
  "font-size: 12px; white-space: nowrap; pointer-events: none; opacity: 0; transition: opacity 0.5s; z-index: 10000; ",
288
372
  "box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15); }",
289
373
  ".btn-icon-tooltip.visible { opacity: 1; transition: opacity 0.1s; }",
290
- // Channel toolbar with operation buttons.
374
+ // Channel toolbar with dropdown menus. Each dropdown button has an inline SVG icon + label + chevron.
291
375
  ".channel-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 10px; margin-bottom: 10px; }",
292
376
  ".channel-toolbar .toolbar-group { display: flex; align-items: center; gap: 6px; }",
377
+ ".toolbar-dropdown-btn { display: inline-flex; align-items: center; gap: 5px; }",
378
+ ".toolbar-dropdown-btn svg { flex-shrink: 0; vertical-align: middle; }",
293
379
  ".channel-summary { text-align: center; font-size: 12px; color: var(--text-secondary); margin-bottom: 8px; }",
294
380
  // Dropdown menu used by the Import button in the channel toolbar.
295
381
  ".dropdown { position: relative; display: inline-block; }",
@@ -299,14 +385,21 @@ export function generateLandingPageStyles() {
299
385
  ".dropdown-menu.show { display: block; }",
300
386
  ".dropdown-item { padding: 6px 12px; font-size: 13px; cursor: pointer; color: var(--text-primary); }",
301
387
  ".dropdown-item:hover { background: var(--surface-sunken); }",
388
+ ".dropdown-item-icon { display: flex; align-items: center; gap: 6px; }",
389
+ ".dropdown-item-icon svg { flex-shrink: 0; }",
302
390
  ".dropdown-option { display: block; padding: 2px 12px 6px 24px; font-size: 12px; color: var(--text-secondary); cursor: pointer; user-select: none; }",
303
391
  ".dropdown-divider { height: 1px; margin: 4px 0; background: var(--border-default); }",
304
- // Channel form styles. Inputs use full width; selects use width classes from ui.ts for consistency with settings forms.
392
+ // Channel form styles. The colspan cell override restores normal white-space wrapping inside edit forms. Without this, the table-wide white-space: nowrap
393
+ // (needed for data cells to truncate with ellipsis) forces form hint text onto a single line, expanding the fit-content table wrapper to the full text width.
394
+ ".channel-table td[colspan] { white-space: normal; width: 1px; }",
305
395
  ".channel-form { background: var(--form-bg); border: 1px solid var(--border-default); border-radius: var(--radius-lg); padding: 20px; margin-bottom: 20px; }",
306
396
  ".channel-form h3 { margin-top: 0; margin-bottom: 15px; color: var(--text-heading-secondary); }",
307
397
  ".channel-form .form-row { margin-bottom: 4px; }",
308
398
  ".channel-form .form-row:last-child { margin-bottom: 0; }",
309
399
  ".channel-form .form-input { width: 100%; box-sizing: border-box; }",
400
+ ".channel-form .form-row-checkbox { display: flex; align-items: center; gap: 8px; margin-top: 12px; }",
401
+ ".channel-form .form-row-checkbox label { margin: 0; cursor: pointer; }",
402
+ ".channel-form .form-row-checkbox input[type=\"checkbox\"] { margin: 0; cursor: pointer; }",
310
403
  // Advanced toggle styles.
311
404
  ".advanced-toggle { color: var(--interactive-primary); cursor: pointer; font-size: 13px; margin-top: 5px; margin-bottom: 15px; }",
312
405
  ".advanced-toggle:hover { text-decoration: underline; }",
@@ -415,7 +508,6 @@ export function generateLandingPageStyles() {
415
508
  ".btn-copy-inline { background: var(--surface-elevated); border: 1px solid var(--border-default); padding: 2px 8px; font-size: 12px; ",
416
509
  "border-radius: var(--radius-sm); cursor: pointer; color: var(--text-secondary); margin-left: 6px; vertical-align: middle; }",
417
510
  ".btn-copy-inline:hover { background: var(--surface-hover); color: var(--text-primary); }",
418
- ".copy-feedback-inline { color: var(--stream-healthy); font-size: 12px; margin-left: 8px; display: none; }",
419
511
  // Version display styles.
420
512
  ".version-container { display: inline-flex; align-items: center; gap: 6px; }",
421
513
  ".version { font-size: 13px; color: var(--text-muted); font-weight: 400; text-decoration: none; transition: color 0.2s; }",
@@ -438,7 +530,61 @@ export function generateLandingPageStyles() {
438
530
  ".changelog-list { margin: 0 0 20px 0; padding: 0 0 0 20px; color: var(--text-secondary); font-size: 14px; line-height: 1.6; }",
439
531
  ".changelog-list li { margin-bottom: 8px; }",
440
532
  ".changelog-list li:last-child { margin-bottom: 0; }",
441
- ".changelog-modal-buttons { display: flex; gap: 12px; justify-content: flex-end; }"
533
+ ".changelog-modal-buttons { display: flex; gap: 12px; justify-content: flex-end; }",
534
+ // Browse Channels modal styles. Channel-list-specific styles remain browse-prefixed. Shared modal styles (description, hint, provider grid, spinner, empty
535
+ // state) are in the wizard section above as wizard-* classes.
536
+ // Provider display container. Inline-flex with center alignment ensures the icon and text are vertically centered regardless of image height.
537
+ ".provider-display { display: inline-flex; align-items: center; gap: 6px; }",
538
+ // Provider pills for the add channel form. A horizontal row of selectable provider buttons. The active pill has a highlighted border.
539
+ ".provider-pills { display: flex; flex-wrap: wrap; gap: 6px; }",
540
+ ".provider-pill { display: inline-flex; align-items: center; padding: 4px 10px; border: 1px solid var(--border-default); border-radius: var(--radius-md); ",
541
+ "background: var(--surface-overlay); cursor: pointer; font-size: 12px; color: var(--text-primary); transition: all 0.15s; }",
542
+ ".provider-pill:hover { border-color: var(--interactive-primary); background: var(--surface-hover); }",
543
+ ".provider-pill.active { border-color: var(--interactive-primary); background: var(--interactive-primary); color: #fff; }",
544
+ ".provider-pill.active .provider-display { color: #fff; }",
545
+ ".provider-pill.active .provider-icon, .provider-pill.active .provider-icon-sm { filter: brightness(0) invert(1); }",
546
+ // Provider icon styles. Two sizes: standard (20px, used in provider cards and filter dropdown) and small (14px, used in chips).
547
+ ".provider-icon { height: 20px; width: 20px; border-radius: var(--radius-sm); flex-shrink: 0; object-fit: contain; }",
548
+ ".provider-icon-sm { height: 14px; width: 14px; border-radius: 2px; flex-shrink: 0; object-fit: contain; vertical-align: middle; margin-right: 4px; }",
549
+ // Checkbox state legend. Compact horizontal row explaining the three visual states, shown between the toolbar and the channel list.
550
+ ".browse-legend { display: flex; align-items: center; gap: 16px; padding: 4px 0 8px; font-size: 11px; color: var(--text-muted); }",
551
+ ".browse-legend-item { display: inline-flex; align-items: center; gap: 4px; white-space: nowrap; }",
552
+ ".browse-legend-item input[type=\"checkbox\"] { margin: 0; pointer-events: none; }",
553
+ // Toolbar above the channel list with select-all and search filter.
554
+ ".browse-toolbar { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; }",
555
+ ".browse-select-all { display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 500; color: var(--text-primary); ",
556
+ "cursor: pointer; white-space: nowrap; flex-shrink: 0; }",
557
+ ".browse-search { flex: 1; padding: 6px 10px; border: 1px solid var(--border-default); border-radius: var(--radius-md); font-size: 13px; ",
558
+ "background: var(--surface-overlay); color: var(--text-primary); font-family: inherit; outline: none; }",
559
+ ".browse-search:focus { border-color: var(--interactive-primary); }",
560
+ ".browse-search::placeholder { color: var(--text-muted); }",
561
+ // Channel list container. Scrollable area with a maximum height so the modal does not grow unbounded.
562
+ ".browse-channel-list { max-height: 50vh; overflow-y: auto; border: 1px solid var(--border-default); border-radius: var(--radius-md); }",
563
+ // Individual channel row. Scoped under .browse-channel-list for specificity (0,2,0) to beat .wizard-content label (0,1,1) which sets display:block on
564
+ // all labels inside the wizard content area. The name takes all remaining space (flex: 1) and truncates with ellipsis, keeping the metadata pinned right.
565
+ ".browse-channel-list .browse-channel-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; font-size: 13px; ",
566
+ "color: var(--text-primary); cursor: pointer; transition: background 0.15s; border-bottom: 1px solid var(--border-light, var(--border-default)); ",
567
+ "margin-bottom: 0; }",
568
+ ".browse-channel-list .browse-channel-item:last-child { border-bottom: none; }",
569
+ ".browse-channel-list .browse-channel-item:hover { background: var(--table-row-hover); }",
570
+ ".browse-channel-item input[type=\"checkbox\"] { flex-shrink: 0; cursor: pointer; }",
571
+ ".browse-channel-item .browse-channel-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 500; ",
572
+ "display: flex; align-items: center; gap: 6px; }",
573
+ ".browse-channel-logo { height: 20px; width: auto; max-width: 60px; flex-shrink: 0; }",
574
+ ".browse-channel-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }",
575
+ // Right-side metadata container. Holds the state label and tier badge. flex-shrink: 0 ensures it never collapses, keeping it visible alongside the
576
+ // truncating channel name.
577
+ ".browse-channel-meta { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }",
578
+ // State label showing the current provider or source for existing channels.
579
+ ".browse-state-label { font-size: 11px; color: var(--text-muted); white-space: nowrap; }",
580
+ // Tier badge for subscription tier labeling (e.g., free channels on Sling). Positioned in the metadata area on the far right.
581
+ ".browse-tier-badge { font-size: 10px; font-weight: 600; padding: 1px 5px; border-radius: var(--radius-sm); flex-shrink: 0; ",
582
+ "text-transform: uppercase; letter-spacing: 0.5px; }",
583
+ ".browse-tier-badge.tier-free { color: var(--badge-flag-text); background: var(--badge-flag-bg); }",
584
+ // Affiliate subtitle shown inline after the channel name.
585
+ ".browse-affiliate { font-size: 11px; color: var(--text-muted); font-weight: 400; }",
586
+ // Channel count display in the modal header area.
587
+ ".browse-header-count { font-size: 13px; color: var(--text-muted); font-weight: 400; }"
442
588
  ].join("\n");
443
589
  }
444
590
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/routes/root/styles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/routes/root/styles.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { generateAlert, generateBadge, generateButton, generateCodeBlock, generatePanelHeader, generateSection, generateSelect, generateSimpleAlert, generateStatusIndicator, generateTextInput } from "./components.js";
1
+ export { generateAlert, generateBadge, generateButton, generatePanelHeader, generateSection, generateSelect, generateSimpleAlert, generateStatusIndicator, generateTextInput } from "./components.js";
2
2
  export type { AlertType, BadgeVariant, ButtonOptions, ButtonSize, ButtonVariant, SelectOption, SelectOptions, TextInputOptions } from "./components.js";
3
3
  /**
4
4
  * Options for configuring the tab script behavior.
package/dist/routes/ui.js CHANGED
@@ -7,7 +7,7 @@ import { generateThemeStyles } from "./theme.js";
7
7
  * configuration page by extracting common CSS and JavaScript patterns. All styles use CSS custom properties from theme.ts for automatic dark mode support.
8
8
  */
9
9
  // Re-export components for convenience.
10
- export { generateAlert, generateBadge, generateButton, generateCodeBlock, generatePanelHeader, generateSection, generateSelect, generateSimpleAlert, generateStatusIndicator, generateTextInput } from "./components.js";
10
+ export { generateAlert, generateBadge, generateButton, generatePanelHeader, generateSection, generateSelect, generateSimpleAlert, generateStatusIndicator, generateTextInput } from "./components.js";
11
11
  /**
12
12
  * Generates the base CSS styles shared across PrismCast pages. These styles provide consistent typography, layout, and basic component styling using CSS custom
13
13
  * properties for theme support.
@@ -1 +1 @@
1
- {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/routes/ui.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/routes/ui.ts"],"names":[],"mappings":"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"}
@@ -5,27 +5,13 @@
5
5
  import { DEFAULTS, loadUserConfig } from "../config/userConfig.js";
6
6
  import { SERVICE_NAME, getNodeExecutablePath, getPlatform, getPrismCastEntryPoint, getServiceFilePath } from "../utils/platform.js";
7
7
  import { collectServiceEnvironment, detectStalePaths, getServiceGenerator, getServicePaths } from "./generators.js";
8
+ import { print, printError } from "../utils/cliOutput.js";
9
+ import { formatDuration } from "../utils/format.js";
8
10
  import { getDataDir } from "../config/paths.js";
9
11
  import path from "node:path";
10
12
  /* These handlers implement the `prismcast service` subcommands for installing, uninstalling, and checking the status of PrismCast as a system service. Each handler
11
13
  * prints its output directly to the console and exits with an appropriate status code.
12
14
  */
13
- /**
14
- * Prints a message to stdout.
15
- * @param message - The message to print.
16
- */
17
- function print(message) {
18
- // eslint-disable-next-line no-console
19
- console.log(message);
20
- }
21
- /**
22
- * Prints an error message to stderr.
23
- * @param message - The error message to print.
24
- */
25
- function printError(message) {
26
- // eslint-disable-next-line no-console
27
- console.error(message);
28
- }
29
15
  /**
30
16
  * Prints a stale path warning block to stderr. Called by handleStatus() when the service file references paths that no longer exist on disk.
31
17
  */
@@ -44,24 +30,6 @@ function printStalePathWarning() {
44
30
  }
45
31
  printError("Run 'prismcast service restart' to update the service file.");
46
32
  }
47
- /**
48
- * Formats a duration in seconds to a human-readable string.
49
- * @param seconds - The duration in seconds.
50
- * @returns Formatted duration (e.g., "45s", "2m 15s", "1h 23m").
51
- */
52
- function formatDuration(seconds) {
53
- if (seconds < 60) {
54
- return String(seconds) + "s";
55
- }
56
- if (seconds < 3600) {
57
- const minutes = Math.floor(seconds / 60);
58
- const secs = seconds % 60;
59
- return secs > 0 ? String(minutes) + "m " + String(secs) + "s" : String(minutes) + "m";
60
- }
61
- const hours = Math.floor(seconds / 3600);
62
- const minutes = Math.floor((seconds % 3600) / 60);
63
- return minutes > 0 ? String(hours) + "h " + String(minutes) + "m" : String(hours) + "h";
64
- }
65
33
  /**
66
34
  * Fetches active stream information from the running server.
67
35
  * @param port - The server port to connect to.
@@ -418,7 +386,8 @@ export async function handleStatus() {
418
386
  name = "Stream " + String(stream.id);
419
387
  }
420
388
  }
421
- print(" • " + name + " (" + formatDuration(stream.duration) + ")");
389
+ const suffix = stream.showName ? " - " + stream.showName : "";
390
+ print(" • " + name + " (" + formatDuration(stream.duration, "s") + ")" + suffix);
422
391
  }
423
392
  }
424
393
  }