unified-video-framework 1.4.443 → 1.4.445

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 (121) hide show
  1. package/package.json +1 -1
  2. package/packages/core/dist/version.d.ts +1 -1
  3. package/packages/core/dist/version.js +1 -1
  4. package/packages/core/src/version.ts +1 -1
  5. package/packages/web/dist/WebPlayer.d.ts.map +1 -1
  6. package/packages/web/dist/WebPlayer.js +52 -414
  7. package/packages/web/dist/WebPlayer.js.map +1 -1
  8. package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts.map +1 -1
  9. package/packages/web/src/WebPlayer.ts +60 -464
  10. package/packages/web/src/react/types/FlashNewsTickerTypes.ts +2 -5
  11. package/packages/web/dist/WebPlayer.d.ts +0 -353
  12. package/packages/web/dist/ads/GoogleAdsManager.d.ts +0 -57
  13. package/packages/web/dist/ads/LiveStreamAdsManager.d.ts +0 -29
  14. package/packages/web/dist/ads/LiveStreamAdsManager.d.ts.map +0 -1
  15. package/packages/web/dist/ads/LiveStreamAdsManager.js +0 -168
  16. package/packages/web/dist/ads/LiveStreamAdsManager.js.map +0 -1
  17. package/packages/web/dist/chapters/ChapterManager.d.ts +0 -42
  18. package/packages/web/dist/chapters/CreditsButtonController.d.ts +0 -46
  19. package/packages/web/dist/chapters/SkipButtonController.d.ts +0 -31
  20. package/packages/web/dist/chapters/UserPreferencesManager.d.ts +0 -25
  21. package/packages/web/dist/chapters/index.d.ts +0 -12
  22. package/packages/web/dist/chapters/types/ChapterTypes.d.ts +0 -136
  23. package/packages/web/dist/drm/BunnyCDNDRMProvider.d.ts +0 -13
  24. package/packages/web/dist/drm/BunnyCDNDRMProvider.d.ts.map +0 -1
  25. package/packages/web/dist/drm/BunnyCDNDRMProvider.js +0 -65
  26. package/packages/web/dist/drm/BunnyCDNDRMProvider.js.map +0 -1
  27. package/packages/web/dist/drm/DRMManager.d.ts +0 -20
  28. package/packages/web/dist/drm/DRMManager.d.ts.map +0 -1
  29. package/packages/web/dist/drm/DRMManager.js +0 -130
  30. package/packages/web/dist/drm/DRMManager.js.map +0 -1
  31. package/packages/web/dist/drm/FairPlayDRMHandler.d.ts +0 -24
  32. package/packages/web/dist/drm/FairPlayDRMHandler.d.ts.map +0 -1
  33. package/packages/web/dist/drm/FairPlayDRMHandler.js +0 -190
  34. package/packages/web/dist/drm/FairPlayDRMHandler.js.map +0 -1
  35. package/packages/web/dist/drm/WidevineDRMHandler.d.ts +0 -21
  36. package/packages/web/dist/drm/WidevineDRMHandler.d.ts.map +0 -1
  37. package/packages/web/dist/drm/WidevineDRMHandler.js +0 -143
  38. package/packages/web/dist/drm/WidevineDRMHandler.js.map +0 -1
  39. package/packages/web/dist/drm/index.d.ts +0 -15
  40. package/packages/web/dist/drm/index.d.ts.map +0 -1
  41. package/packages/web/dist/drm/index.js +0 -13
  42. package/packages/web/dist/drm/index.js.map +0 -1
  43. package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts +0 -19
  44. package/packages/web/dist/drm/providers/BunnyNetProvider.d.ts.map +0 -1
  45. package/packages/web/dist/drm/providers/BunnyNetProvider.js +0 -112
  46. package/packages/web/dist/drm/providers/BunnyNetProvider.js.map +0 -1
  47. package/packages/web/dist/drm/providers/GenericProvider.d.ts +0 -30
  48. package/packages/web/dist/drm/providers/GenericProvider.d.ts.map +0 -1
  49. package/packages/web/dist/drm/providers/GenericProvider.js +0 -104
  50. package/packages/web/dist/drm/providers/GenericProvider.js.map +0 -1
  51. package/packages/web/dist/drm/systems/BaseDRM.d.ts +0 -18
  52. package/packages/web/dist/drm/systems/BaseDRM.d.ts.map +0 -1
  53. package/packages/web/dist/drm/systems/BaseDRM.js +0 -29
  54. package/packages/web/dist/drm/systems/BaseDRM.js.map +0 -1
  55. package/packages/web/dist/drm/systems/FairPlayDRM.d.ts +0 -32
  56. package/packages/web/dist/drm/systems/FairPlayDRM.d.ts.map +0 -1
  57. package/packages/web/dist/drm/systems/FairPlayDRM.js +0 -208
  58. package/packages/web/dist/drm/systems/FairPlayDRM.js.map +0 -1
  59. package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts +0 -9
  60. package/packages/web/dist/drm/systems/PlayReadyDRM.d.ts.map +0 -1
  61. package/packages/web/dist/drm/systems/PlayReadyDRM.js +0 -114
  62. package/packages/web/dist/drm/systems/PlayReadyDRM.js.map +0 -1
  63. package/packages/web/dist/drm/systems/WidevineDRM.d.ts +0 -9
  64. package/packages/web/dist/drm/systems/WidevineDRM.d.ts.map +0 -1
  65. package/packages/web/dist/drm/systems/WidevineDRM.js +0 -159
  66. package/packages/web/dist/drm/systems/WidevineDRM.js.map +0 -1
  67. package/packages/web/dist/drm/types/BunnyNetTypes.d.ts +0 -20
  68. package/packages/web/dist/drm/types/BunnyNetTypes.d.ts.map +0 -1
  69. package/packages/web/dist/drm/types/BunnyNetTypes.js +0 -8
  70. package/packages/web/dist/drm/types/BunnyNetTypes.js.map +0 -1
  71. package/packages/web/dist/drm/types/DRMTypes.d.ts +0 -60
  72. package/packages/web/dist/drm/types/DRMTypes.d.ts.map +0 -1
  73. package/packages/web/dist/drm/types/DRMTypes.js +0 -22
  74. package/packages/web/dist/drm/types/DRMTypes.js.map +0 -1
  75. package/packages/web/dist/drm/utils/BrowserDetector.d.ts +0 -20
  76. package/packages/web/dist/drm/utils/BrowserDetector.d.ts.map +0 -1
  77. package/packages/web/dist/drm/utils/BrowserDetector.js +0 -211
  78. package/packages/web/dist/drm/utils/BrowserDetector.js.map +0 -1
  79. package/packages/web/dist/drm/utils/CertificateManager.d.ts +0 -15
  80. package/packages/web/dist/drm/utils/CertificateManager.d.ts.map +0 -1
  81. package/packages/web/dist/drm/utils/CertificateManager.js +0 -46
  82. package/packages/web/dist/drm/utils/CertificateManager.js.map +0 -1
  83. package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts +0 -7
  84. package/packages/web/dist/drm/utils/DRMErrorHandler.d.ts.map +0 -1
  85. package/packages/web/dist/drm/utils/DRMErrorHandler.js +0 -49
  86. package/packages/web/dist/drm/utils/DRMErrorHandler.js.map +0 -1
  87. package/packages/web/dist/drm/utils/LicenseRequestHandler.d.ts +0 -15
  88. package/packages/web/dist/drm/utils/LicenseRequestHandler.d.ts.map +0 -1
  89. package/packages/web/dist/drm/utils/LicenseRequestHandler.js +0 -110
  90. package/packages/web/dist/drm/utils/LicenseRequestHandler.js.map +0 -1
  91. package/packages/web/dist/drm.d.ts +0 -4
  92. package/packages/web/dist/drm.js +0 -5
  93. package/packages/web/dist/index.d.ts +0 -7
  94. package/packages/web/dist/paywall/EmailAuthController.d.ts +0 -60
  95. package/packages/web/dist/paywall/PaywallController.d.ts +0 -74
  96. package/packages/web/dist/react/EPG.d.ts +0 -8
  97. package/packages/web/dist/react/WebPlayerView.d.ts +0 -397
  98. package/packages/web/dist/react/WebPlayerViewWithEPG.d.ts +0 -97
  99. package/packages/web/dist/react/components/ChapterProgress.d.ts +0 -22
  100. package/packages/web/dist/react/components/EPGNavigationControls.d.ts +0 -15
  101. package/packages/web/dist/react/components/EPGOverlay-improved-positioning.d.ts +0 -5
  102. package/packages/web/dist/react/components/EPGOverlay.d.ts +0 -5
  103. package/packages/web/dist/react/components/EPGProgramDetails.d.ts +0 -13
  104. package/packages/web/dist/react/components/EPGProgramGrid.d.ts +0 -19
  105. package/packages/web/dist/react/components/EPGTimelineHeader.d.ts +0 -16
  106. package/packages/web/dist/react/components/SkipButton.d.ts +0 -18
  107. package/packages/web/dist/react/components/commerce/ProductBadge.d.ts +0 -10
  108. package/packages/web/dist/react/components/commerce/ProductPanel.d.ts +0 -13
  109. package/packages/web/dist/react/examples/google-ads-example.d.ts +0 -4
  110. package/packages/web/dist/react/examples/live-stream-ads-example.d.ts +0 -8
  111. package/packages/web/dist/react/examples/live-stream-ads-example.d.ts.map +0 -1
  112. package/packages/web/dist/react/examples/live-stream-ads-example.js +0 -177
  113. package/packages/web/dist/react/examples/live-stream-ads-example.js.map +0 -1
  114. package/packages/web/dist/react/hooks/useChapters.d.ts +0 -29
  115. package/packages/web/dist/react/hooks/useCommerceSync.d.ts +0 -8
  116. package/packages/web/dist/react/types/EPGTypes.d.ts +0 -101
  117. package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts +0 -146
  118. package/packages/web/dist/react/types/VideoCommerceTypes.d.ts +0 -109
  119. package/packages/web/dist/react/utils/EPGUtils.d.ts +0 -21
  120. package/packages/web/dist/test/epg-test.d.ts +0 -3
  121. package/packages/web/dist/utils/YouTubeExtractor.d.ts +0 -38
@@ -1 +1 @@
1
- {"version":3,"file":"FlashNewsTickerTypes.d.ts","sourceRoot":"","sources":["../../../src/react/types/FlashNewsTickerTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FlashNewsTickerTypes.d.ts","sourceRoot":"","sources":["../../../src/react/types/FlashNewsTickerTypes.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,WAAW,CAAC;AASxD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;AAWrF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAQ7F,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAK3D,MAAM,MAAM,cAAc,GACtB,cAAc,GACd,eAAe,GACf,WAAW,GACX,WAAW,GACX,QAAQ,CAAC;AAKb,MAAM,WAAW,aAAa;IAE5B,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAG3B,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAOlB,cAAc,CAAC,EAAE,OAAO,CAAC;IAOzB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAG1B,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,gBAAgB;IAE/B,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAKD,MAAM,WAAW,oBAAoB;IAEnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,OAAO,CAAC,EAAE,aAAa,CAAC;IAGxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAG9B,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAKD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,CAAC;AAKlF,MAAM,WAAW,sBAAsB;IAErC,eAAe,CAAC,EAAE;QAEhB,IAAI,CAAC,EAAE,aAAa,CAAC;QAErB,QAAQ,CAAC,EAAE,OAAO,CAAC;QAEnB,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,KAAK,CAAC,EAAE,MAAM,CAAC;QAEf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAKD,MAAM,WAAW,iBAAiB;IAEhC,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IAGpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAG5B,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAKD,MAAM,WAAW,oBAAoB;IAEnC,KAAK,CAAC,EAAE,cAAc,CAAC;IAGvB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAGhC,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAGpB,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,cAAc,CAAC,EAAE,OAAO,CAAC;IAGzB,cAAc,CAAC,EAAE,oBAAoB,CAAC;IAGtC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAG1C,qBAAqB,CAAC,EAAE,kBAAkB,CAAC;IAG3C,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAKD,MAAM,WAAW,mBAAmB;IAElC,EAAE,EAAE,MAAM,CAAC;IAGX,IAAI,EAAE,MAAM,CAAC;IAOb,IAAI,CAAC,EAAE,MAAM,CAAC;IAMd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,OAAO,CAAC,EAAE,MAAM,CAAC;IAMjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAMlB,SAAS,CAAC,EAAE,OAAO,CAAC;IAMpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,cAAc,CAAC,EAAE,kBAAkB,CAAC;IAMpC,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAKD,MAAM,WAAW,mBAAmB;IAElC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAK7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAK7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAGlC,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAKD,MAAM,WAAW,qBAAqB;IAEpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAGlB,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAG9B,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAOrC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAGlC,cAAc,CAAC,EAAE,oBAAoB,CAAC;IAGtC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAGhC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAGhC,YAAY,CAAC,EAAE,mBAAmB,CAAC;IAKnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAK7B,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,GAAG,CAAC,EAAE,MAAM,CAAC;IAGb,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,SAAS,CAAC,EAAE,MAAM,CAAC;IAUnB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,YAAY,GAAG,QAAQ,CAAC;IAGrE,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,cAAc,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAKvC,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAKD,MAAM,WAAW,kBAAkB;IAEjC,IAAI,EAAE,MAAM,IAAI,CAAC;IAGjB,IAAI,EAAE,MAAM,IAAI,CAAC;IAGjB,SAAS,EAAE,MAAM,OAAO,CAAC;IAGzB,WAAW,EAAE,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAC;IAGpD,OAAO,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAG7C,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAGrC,UAAU,EAAE,MAAM,IAAI,CAAC;IAGvB,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IAG/D,KAAK,EAAE,MAAM,IAAI,CAAC;IAGlB,MAAM,EAAE,MAAM,IAAI,CAAC;IAGnB,QAAQ,EAAE,MAAM,OAAO,CAAC;CACzB"}
@@ -2577,9 +2577,6 @@ export class WebPlayer extends BasePlayer {
2577
2577
 
2578
2578
  // Route to specific broadcast layouts
2579
2579
  if (variant === 'broadcast1') return this.createBroadcast1Element(config, position);
2580
- if (variant === 'broadcast2') return this.createBroadcast2Element(config, position);
2581
- if (variant === 'broadcast3') return this.createBroadcast3Element(config, position);
2582
- if (variant === 'broadcast4') return this.createBroadcast4Element(config, position);
2583
2580
 
2584
2581
  // Route to specific broadcast style if configured (older style)
2585
2582
  if (config.styleVariant === 'broadcast' || variant === 'breaking' || variant === 'live') {
@@ -2888,325 +2885,13 @@ export class WebPlayer extends BasePlayer {
2888
2885
  const ticker = document.createElement('div');
2889
2886
  ticker.className = `uvf-ticker-broadcast1 ticker-${position}`;
2890
2887
 
2891
- const height = config.height || 70;
2888
+ const height = config.height || 90;
2892
2889
  const bottomOffset = config.bottomOffset || 0;
2893
2890
  const topOffset = config.topOffset || 10;
2894
2891
 
2895
- ticker.style.cssText = `
2896
- position: absolute;
2897
- left: 10%;
2898
- right: 10%;
2899
- height: ${height}px;
2900
- ${position === 'top' ? `top: ${topOffset}px;` : `bottom: ${bottomOffset}px;`}
2901
- display: flex;
2902
- font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
2903
- z-index: 100;
2904
- pointer-events: none;
2905
- filter: drop-shadow(0 10px 15px rgba(0,0,0,0.5));
2906
- `;
2907
-
2908
- // 1. Globe Block (Left)
2909
- const globeBlock = document.createElement('div');
2910
- globeBlock.style.cssText = `
2911
- width: ${height * 1.3}px;
2912
- height: ${height}px;
2913
- background: linear-gradient(135deg, #e74c3c 0%, #c0392b 50%, #962d22 100%);
2914
- display: flex;
2915
- align-items: center;
2916
- justify-content: center;
2917
- flex-shrink: 0;
2918
- clip-path: polygon(0% 0%, 78% 0%, 100% 100%, 0% 100%);
2919
- z-index: 30;
2920
- position: relative;
2921
- overflow: hidden;
2922
- `;
2923
-
2924
- // Glossy Overlay for Globe Block
2925
- const glossyGlobe = document.createElement('div');
2926
- glossyGlobe.style.cssText = `
2927
- position: absolute;
2928
- top: 0; left: 0; right: 0; height: 40%;
2929
- background: linear-gradient(180deg, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 100%);
2930
- pointer-events: none;
2931
- `;
2932
- globeBlock.appendChild(glossyGlobe);
2933
-
2934
- const globe = this.createGlobeElement(true);
2935
- globe.style.width = '42%';
2936
- globe.style.height = '42%';
2937
- globe.style.marginRight = '18%';
2938
- globeBlock.appendChild(globe);
2939
- ticker.appendChild(globeBlock);
2940
-
2941
- // 2. Right Content (Dual Bars)
2942
- const content = document.createElement('div');
2943
- content.style.cssText = `
2944
- flex-grow: 1;
2945
- display: flex;
2946
- flex-direction: column;
2947
- margin-left: -${height * 0.35}px;
2948
- z-index: 10;
2949
- `;
2950
-
2951
- // Row 1: Top Blue Bar (Headline)
2952
- const topBar = document.createElement('div');
2953
- topBar.style.cssText = `
2954
- height: 55%;
2955
- background: linear-gradient(90deg, #1e3c72 0%, #2a5298 50%, #1e3c72 100%);
2956
- clip-path: polygon(4% 0, 100% 0, 98.5% 100%, 0% 100%);
2957
- display: flex;
2958
- align-items: center;
2959
- padding: 0 40px 0 65px;
2960
- color: white;
2961
- position: relative;
2962
- overflow: hidden;
2963
- border-bottom: 2px solid rgba(255,255,255,0.15);
2964
- `;
2965
-
2966
- const glossyTop = document.createElement('div');
2967
- glossyTop.style.cssText = `
2968
- position: absolute;
2969
- top: 0; left: 0; right: 0; height: 35%;
2970
- background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
2971
- `;
2972
- topBar.appendChild(glossyTop);
2973
-
2974
- const breakingText = document.createElement('span');
2975
- breakingText.textContent = 'BREAKING NEWS';
2976
- breakingText.style.cssText = `
2977
- font-weight: 900;
2978
- font-style: italic;
2979
- font-size: ${height * 0.2}px;
2980
- margin-right: 25px;
2981
- white-space: nowrap;
2982
- color: #fff;
2983
- text-shadow: 0 0 12px rgba(255,255,255,0.6);
2984
- letter-spacing: 0.5px;
2985
- `;
2986
- topBar.appendChild(breakingText);
2987
-
2988
- const headlineText = document.createElement('span');
2989
- headlineText.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONSECTETUER';
2990
- headlineText.style.cssText = `
2991
- font-weight: 800;
2992
- font-size: ${height * 0.26}px;
2993
- white-space: nowrap;
2994
- overflow: hidden;
2995
- text-overflow: ellipsis;
2996
- text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
2997
- `;
2998
- topBar.appendChild(headlineText);
2999
- content.appendChild(topBar);
3000
-
3001
- // Row 2: Bottom Black Bar (Scrolling Items)
3002
- const bottomBar = document.createElement('div');
3003
- bottomBar.style.cssText = `
3004
- height: 45%;
3005
- background: linear-gradient(90deg, #0a0a0a 0%, #1a1a1a 50%, #0a0a0a 100%);
3006
- display: flex;
3007
- align-items: center;
3008
- clip-path: polygon(1.5% 0, 100% 0, 100% 100%, 0% 100%);
3009
- border-top: 1px solid rgba(255,255,255,0.08);
3010
- `;
3011
-
3012
- const liveBadge = document.createElement('div');
3013
- liveBadge.textContent = 'LIVE';
3014
- liveBadge.style.cssText = `
3015
- background: linear-gradient(180deg, #f1c40f 0%, #d4ac0d 100%);
3016
- color: #000;
3017
- font-weight: 900;
3018
- font-size: ${height * 0.16}px;
3019
- padding: 2px 14px;
3020
- margin-left: 55px;
3021
- clip-path: polygon(0 0, 88% 0, 100% 100%, 0 100%);
3022
- box-shadow: 2px 2px 5px rgba(0,0,0,0.3);
3023
- `;
3024
- bottomBar.appendChild(liveBadge);
3025
-
3026
- const trackContainer = document.createElement('div');
3027
- trackContainer.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center;`;
3028
- const track = this.createSeamlessScrollingTrack(config.items || [], config);
3029
- track.style.fontSize = `${height * 0.18}px`;
3030
- track.style.color = '#fff';
3031
- track.style.fontWeight = '700';
3032
- track.style.textShadow = '1px 1px 2px rgba(0,0,0,0.8)';
3033
- trackContainer.appendChild(track);
3034
- bottomBar.appendChild(trackContainer);
3035
-
3036
- content.appendChild(bottomBar);
3037
- ticker.appendChild(content);
3038
-
3039
- this.ensureTickerAnimations();
3040
- return ticker;
3041
- }
3042
-
3043
- private createBroadcast2Element(config: FlashNewsTickerConfig, position: 'top' | 'bottom'): HTMLDivElement {
3044
- const ticker = document.createElement('div');
3045
- ticker.className = `uvf-ticker-broadcast2 ticker-${position}`;
3046
-
3047
- const height = config.height || 75;
3048
- const bottomOffset = config.bottomOffset || 0;
3049
-
3050
- ticker.style.cssText = `
3051
- position: absolute;
3052
- left: 5%;
3053
- right: 5%;
3054
- bottom: ${bottomOffset}px;
3055
- height: ${height}px;
3056
- display: flex;
3057
- align-items: flex-end;
3058
- font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
3059
- z-index: 100;
3060
- pointer-events: none;
3061
- filter: drop-shadow(0 8px 12px rgba(0,0,0,0.4));
3062
- `;
3063
-
3064
- // Globe Wrapper
3065
- const globeWrapper = document.createElement('div');
3066
- globeWrapper.style.cssText = `
3067
- width: ${height * 0.8}px;
3068
- height: ${height * 0.8}px;
3069
- position: relative;
3070
- z-index: 40;
3071
- margin-right: 12px;
3072
- flex-shrink: 0;
3073
- `;
3074
-
3075
- const globeContainer = document.createElement('div');
3076
- globeContainer.style.cssText = `
3077
- width: 100%;
3078
- height: 100%;
3079
- background: radial-gradient(circle at 30% 30%, #e74c3c 0%, #c1392b 60%, #962d22 100%);
3080
- border-radius: 50%;
3081
- display: flex;
3082
- align-items: center;
3083
- justify-content: center;
3084
- box-shadow: inset -5px -5px 15px rgba(0,0,0,0.5), 0 0 25px rgba(0,0,0,0.6);
3085
- border: 3px solid #fff;
3086
- overflow: hidden;
3087
- `;
3088
-
3089
- const glossyGlobeEffect = document.createElement('div');
3090
- glossyGlobeEffect.style.cssText = `
3091
- position: absolute;
3092
- top: 10%; left: 15%; width: 40%; height: 30%;
3093
- background: rgba(255,255,255,0.3);
3094
- border-radius: 50%;
3095
- filter: blur(4px);
3096
- pointer-events: none;
3097
- `;
3098
- globeContainer.appendChild(glossyGlobeEffect);
3099
-
3100
- const globe = this.createGlobeElement(true);
3101
- globe.style.width = '75%';
3102
- globe.style.height = '75%';
3103
- globeContainer.appendChild(globe);
3104
- globeWrapper.appendChild(globeContainer);
3105
- ticker.appendChild(globeWrapper);
3106
-
3107
- const content = document.createElement('div');
3108
- content.style.cssText = `flex-grow: 1; display: flex; flex-direction: column; z-index: 20;`;
3109
-
3110
- // Row 1: Yellow/Red Header
3111
- const row1 = document.createElement('div');
3112
- row1.style.cssText = `display: flex; height: 50%; position: relative; overflow: hidden;`;
3113
-
3114
- const badge = document.createElement('div');
3115
- badge.textContent = 'BREAKING NEWS';
3116
- badge.style.cssText = `
3117
- background: linear-gradient(180deg, #f1c40f 0%, #d4ac0d 100%);
3118
- color: #000;
3119
- font-weight: 900;
3120
- padding: 0 30px;
3121
- display: flex;
3122
- align-items: center;
3123
- clip-path: polygon(0 0, 88% 0, 100% 100%, 0 100%);
3124
- font-size: ${height * 0.2}px;
3125
- position: relative;
3126
- z-index: 5;
3127
- text-shadow: 0 1px 1px rgba(255,255,255,0.3);
3128
- `;
3129
- row1.appendChild(badge);
3130
-
3131
- const headline = document.createElement('div');
3132
- headline.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONSECTETUER';
3133
- headline.style.cssText = `
3134
- background: linear-gradient(90deg, #e74c3c 0%, #c1392b 50%, #e74c3c 100%);
3135
- color: white;
3136
- font-weight: 800;
3137
- padding: 0 45px;
3138
- display: flex;
3139
- align-items: center;
3140
- flex-grow: 1;
3141
- margin-left: -25px;
3142
- clip-path: polygon(5% 0, 100% 0, 96% 100%, 0 100%);
3143
- font-size: ${height * 0.23}px;
3144
- text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
3145
- border-bottom: 3px solid rgba(255,255,255,0.15);
3146
- `;
3147
-
3148
- const glossyHeader = document.createElement('div');
3149
- glossyHeader.style.cssText = `
3150
- position: absolute;
3151
- top: 0; left: 0; right: 0; height: 40%;
3152
- background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
3153
- `;
3154
- headline.appendChild(glossyHeader);
3155
-
3156
- row1.appendChild(headline);
3157
- content.appendChild(row1);
3158
-
3159
- // Row 2: Blue Ticker (Semi-transparent with Pro Blur)
3160
- const row2 = document.createElement('div');
3161
- row2.style.cssText = `
3162
- height: 42%;
3163
- background: rgba(30, 60, 114, 0.85);
3164
- display: flex;
3165
- align-items: center;
3166
- margin-top: 5px;
3167
- clip-path: polygon(1.5% 0, 100% 0, 100% 100%, 2.5% 100%);
3168
- backdrop-filter: blur(12px);
3169
- border: 1px solid rgba(255,255,255,0.1);
3170
- box-shadow: inset 0 0 10px rgba(0,0,0,0.3);
3171
- `;
3172
-
3173
- const live = document.createElement('div');
3174
- live.textContent = 'LIVE';
3175
- live.style.cssText = `
3176
- background: #fff;
3177
- color: #1e3c72;
3178
- font-weight: 950;
3179
- padding: 2px 18px;
3180
- margin-left: 35px;
3181
- margin-right: 20px;
3182
- font-size: ${height * 0.16}px;
3183
- box-shadow: 2px 2px 8px rgba(0,0,0,0.3);
3184
- letter-spacing: 1px;
3185
- `;
3186
- row2.appendChild(live);
3187
-
3188
- const trackCont = document.createElement('div');
3189
- trackCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
3190
- const track = this.createSeamlessScrollingTrack(config.items || [], config);
3191
- track.style.fontSize = `${height * 0.17}px`;
3192
- track.style.fontWeight = '700';
3193
- track.style.textShadow = '1px 1px 3px rgba(0,0,0,0.9)';
3194
- trackCont.appendChild(track);
3195
- row2.appendChild(trackCont);
3196
- content.appendChild(row2);
3197
-
3198
- ticker.appendChild(content);
3199
- this.ensureTickerAnimations();
3200
- return ticker;
3201
- }
3202
-
3203
- private createBroadcast3Element(config: FlashNewsTickerConfig, position: 'top' | 'bottom'): HTMLDivElement {
3204
- const ticker = document.createElement('div');
3205
- ticker.className = `uvf-ticker-broadcast3 ticker-${position}`;
3206
-
3207
- const height = config.height || 60;
3208
- const bottomOffset = config.bottomOffset || 0;
3209
- const topOffset = config.topOffset || 10;
2892
+ // Store state for cycling
2893
+ this.tickerConfig = config;
2894
+ this.tickerCurrentItemIndex = 0;
3210
2895
 
3211
2896
  ticker.style.cssText = `
3212
2897
  position: absolute;
@@ -3219,11 +2904,12 @@ export class WebPlayer extends BasePlayer {
3219
2904
  font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
3220
2905
  z-index: 100;
3221
2906
  pointer-events: none;
2907
+ filter: drop-shadow(0 8px 15px rgba(0,0,0,0.4));
3222
2908
  `;
3223
2909
 
3224
2910
  // Row 1: Split Red/Blue
3225
2911
  const row1 = document.createElement('div');
3226
- row1.style.cssText = `display: flex; height: 55%;`;
2912
+ row1.style.cssText = `display: flex; height: 62%; position: relative; overflow: hidden;`;
3227
2913
 
3228
2914
  const b1 = document.createElement('div');
3229
2915
  b1.textContent = 'BREAKING NEWS';
@@ -3231,40 +2917,67 @@ export class WebPlayer extends BasePlayer {
3231
2917
  background: #c0392b;
3232
2918
  color: white;
3233
2919
  font-weight: 900;
3234
- padding: 0 20px;
2920
+ padding: 0 25px;
3235
2921
  display: flex;
3236
2922
  align-items: center;
3237
- clip-path: polygon(0 0, 95% 0, 100% 100%, 0 100%);
3238
- font-size: ${height * 0.22}px;
2923
+ clip-path: polygon(0 0, 92% 0, 100% 100%, 0 100%);
2924
+ font-size: ${height * 0.18}px;
2925
+ z-index: 2;
3239
2926
  `;
3240
2927
  row1.appendChild(b1);
3241
2928
 
3242
2929
  const b2 = document.createElement('div');
3243
- b2.textContent = config.headline || 'LOREM IPSUM DOLOR SIT AMET, CONS';
2930
+ b2.className = 'uvf-ticker-headline-line';
2931
+ this.tickerHeadlineElement = b2;
3244
2932
  b2.style.cssText = `
3245
2933
  background: #2980b9;
3246
2934
  color: white;
3247
- font-weight: 700;
3248
- padding: 0 30px;
2935
+ padding: 0 40px;
3249
2936
  display: flex;
3250
2937
  align-items: center;
3251
2938
  flex-grow: 1;
3252
- margin-left: -10px;
3253
- clip-path: polygon(2% 0, 100% 0, 98% 100%, 0 100%);
3254
- font-size: ${height * 0.25}px;
2939
+ margin-left: -15px;
2940
+ clip-path: polygon(3% 0, 100% 0, 97% 100%, 0 100%);
2941
+ position: relative;
3255
2942
  `;
2943
+
2944
+ const headlineText = document.createElement('div');
2945
+ headlineText.className = 'uvf-ticker-headline-text';
2946
+ headlineText.style.cssText = `
2947
+ font-weight: 800;
2948
+ font-size: ${height * 0.22}px;
2949
+ line-height: 1.2;
2950
+ width: 100%;
2951
+ display: -webkit-box;
2952
+ -webkit-line-clamp: 2;
2953
+ -webkit-box-orient: vertical;
2954
+ overflow: hidden;
2955
+ text-overflow: ellipsis;
2956
+ text-shadow: 1px 1px 3px rgba(0,0,0,0.5);
2957
+ `;
2958
+
2959
+ const firstItem = config.items?.[0];
2960
+ if (firstItem) {
2961
+ headlineText.textContent = firstItem.headline || firstItem.text;
2962
+ }
2963
+
2964
+ b2.appendChild(headlineText);
3256
2965
  row1.appendChild(b2);
3257
2966
  ticker.appendChild(row1);
3258
2967
 
3259
2968
  // Row 2: Black scrolling
3260
2969
  const row2 = document.createElement('div');
2970
+ row2.className = 'uvf-ticker-detail-line';
2971
+ this.tickerDetailElement = row2;
3261
2972
  row2.style.cssText = `
3262
- height: 35%;
2973
+ height: 33%;
3263
2974
  background: #111;
3264
2975
  display: flex;
3265
2976
  align-items: center;
3266
- margin-top: 2px;
2977
+ margin-top: 3px;
3267
2978
  clip-path: polygon(1% 0, 99% 0, 100% 100%, 0 100%);
2979
+ position: relative;
2980
+ overflow: hidden;
3268
2981
  `;
3269
2982
 
3270
2983
  const lbadge = document.createElement('div');
@@ -3272,155 +2985,38 @@ export class WebPlayer extends BasePlayer {
3272
2985
  lbadge.style.cssText = `
3273
2986
  background: #f1c40f;
3274
2987
  color: black;
3275
- font-weight: 900;
3276
- padding: 0 10px;
3277
- margin: 0 15px;
3278
- font-size: ${height * 0.15}px;
3279
- clip-path: polygon(0 0, 90% 0, 100% 100%, 0 100%);
2988
+ font-weight: 950;
2989
+ padding: 0 15px;
2990
+ margin: 0 20px;
2991
+ font-size: ${height * 0.14}px;
2992
+ clip-path: polygon(0 0, 85% 0, 100% 100%, 0 100%);
2993
+ z-index: 2;
3280
2994
  `;
3281
2995
  row2.appendChild(lbadge);
3282
2996
 
3283
2997
  const tCont = document.createElement('div');
3284
2998
  tCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
2999
+
3000
+ // Use standard scrolling track class for compatibility
3285
3001
  const track = this.createSeamlessScrollingTrack(config.items || [], config);
3286
- track.style.fontSize = `${height * 0.16}px`;
3002
+ track.className = 'uvf-ticker-track'; // Change class for compatibility with updateItemContent
3003
+ track.style.fontSize = `${height * 0.15}px`;
3004
+ track.style.fontWeight = '600';
3287
3005
  tCont.appendChild(track);
3288
3006
  row2.appendChild(tCont);
3289
3007
  ticker.appendChild(row2);
3290
3008
 
3291
3009
  this.ensureTickerAnimations();
3292
- return ticker;
3293
- }
3294
-
3295
- private createBroadcast4Element(config: FlashNewsTickerConfig, position: 'top' | 'bottom'): HTMLDivElement {
3296
- const ticker = document.createElement('div');
3297
- ticker.className = `uvf-ticker-broadcast4 ticker-${position}`;
3298
-
3299
- const height = config.height || 65;
3300
- const bottomOffset = config.bottomOffset || 0;
3301
-
3302
- ticker.style.cssText = `
3303
- position: absolute;
3304
- left: 15%;
3305
- right: 15%;
3306
- bottom: ${bottomOffset}px;
3307
- height: ${height}px;
3308
- display: flex;
3309
- align-items: flex-end;
3310
- font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
3311
- z-index: 100;
3312
- pointer-events: none;
3313
- filter: drop-shadow(0 12px 20px rgba(0,0,0,0.6));
3314
- `;
3315
-
3316
- // Large Blue Box (Pro Upgrade)
3317
- const newsBox = document.createElement('div');
3318
- newsBox.style.cssText = `
3319
- width: ${height * 1.8}px;
3320
- height: 100%;
3321
- background: linear-gradient(135deg, #1e3c72 0%, #2a5298 50%, #1e3c72 100%);
3322
- display: flex;
3323
- flex-direction: column;
3324
- justify-content: center;
3325
- align-items: center;
3326
- position: relative;
3327
- clip-path: polygon(0 0, 100% 0, 82% 100%, 0 100%);
3328
- flex-shrink: 0;
3329
- z-index: 40;
3330
- border-right: 2px solid rgba(255,255,255,0.2);
3331
- `;
3332
3010
 
3333
- const glossyNews = document.createElement('div');
3334
- glossyNews.style.cssText = `
3335
- position: absolute;
3336
- top: 0; left: 0; right: 0; height: 40%;
3337
- background: linear-gradient(180deg, rgba(255,255,255,0.15) 0%, rgba(255,255,255,0) 100%);
3338
- `;
3339
- newsBox.appendChild(glossyNews);
3340
-
3341
- const bt = document.createElement('div');
3342
- bt.style.cssText = `display: flex; gap: 6px; margin-bottom: 2px; width: 100%; justify-content: center; padding-right: 18%; position: relative; z-index: 2;`;
3343
-
3344
- const b1 = document.createElement('span');
3345
- b1.textContent = 'BREAKING';
3346
- b1.style.cssText = `
3347
- background: #c0392b;
3348
- font-size: ${height * 0.14}px;
3349
- font-weight: 900;
3350
- padding: 2px 8px;
3351
- border-radius: 2px;
3352
- color: white;
3353
- box-shadow: 0 0 10px rgba(192, 57, 43, 0.8);
3354
- `;
3355
- bt.appendChild(b1);
3356
-
3357
- const b2 = document.createElement('span');
3358
- b2.textContent = 'LIVE';
3359
- b2.style.cssText = `
3360
- background: #f1c40f;
3361
- font-size: ${height * 0.14}px;
3362
- font-weight: 900;
3363
- padding: 2px 8px;
3364
- border-radius: 2px;
3365
- color: black;
3366
- box-shadow: 0 0 10px rgba(241, 196, 15, 0.6);
3367
- `;
3368
- bt.appendChild(b2);
3369
- newsBox.appendChild(bt);
3370
-
3371
- const nt = document.createElement('div');
3372
- nt.textContent = 'NEWS';
3373
- nt.style.cssText = `
3374
- font-size: ${height * 0.5}px;
3375
- font-weight: 900;
3376
- color: white;
3377
- letter-spacing: 6px;
3378
- padding-right: 18%;
3379
- line-height: 1;
3380
- text-shadow: 3px 3px 6px rgba(0,0,0,0.6);
3381
- `;
3382
- newsBox.appendChild(nt);
3383
- ticker.appendChild(newsBox);
3384
-
3385
- // Red Scrolling Bar (Pro Upgrade)
3386
- const redBar = document.createElement('div');
3387
- redBar.style.cssText = `
3388
- flex-grow: 1;
3389
- height: 52%;
3390
- background: linear-gradient(90deg, #c0392b 0%, #e74c3c 50%, #c0392b 100%);
3391
- margin-left: -${height * 0.3}px;
3392
- display: flex;
3393
- align-items: center;
3394
- padding-left: ${height * 0.45}px;
3395
- padding-right: 30px;
3396
- clip-path: polygon(6% 0, 100% 0, 100% 100%, 0 100%);
3397
- z-index: 20;
3398
- border-top: 1px solid rgba(255,255,255,0.1);
3399
- box-shadow: inset 0 0 15px rgba(0,0,0,0.4);
3400
- `;
3401
-
3402
- const glossyRed = document.createElement('div');
3403
- glossyRed.style.cssText = `
3404
- position: absolute;
3405
- top: 0; left: 0; right: 0; height: 35%;
3406
- background: linear-gradient(180deg, rgba(255,255,255,0.2) 0%, rgba(255,255,255,0) 100%);
3407
- `;
3408
- redBar.appendChild(glossyRed);
3409
-
3410
- const tCont = document.createElement('div');
3411
- tCont.style.cssText = `flex-grow: 1; overflow: hidden; height: 100%; display: flex; align-items: center; color: white;`;
3412
- const track = this.createSeamlessScrollingTrack(config.items || [], config);
3413
- track.style.fontSize = `${height * 0.24}px`;
3414
- track.style.fontWeight = '800';
3415
- track.style.textShadow = '2px 2px 4px rgba(0,0,0,0.7)';
3416
- tCont.appendChild(track);
3417
- redBar.appendChild(tCont);
3418
- ticker.appendChild(redBar);
3011
+ // Start cycling if enabled or if we want the "flow"
3012
+ if (config.items && config.items.length > 1) {
3013
+ this.startItemCycling();
3014
+ }
3419
3015
 
3420
- this.ensureTickerAnimations();
3421
3016
  return ticker;
3422
3017
  }
3423
3018
 
3019
+
3424
3020
  private createSeamlessScrollingTrack(items: FlashNewsTickerItem[], config: FlashNewsTickerConfig): HTMLDivElement {
3425
3021
  const track = document.createElement('div');
3426
3022
  track.className = 'uvf-ticker-track-seamless';
@@ -434,13 +434,10 @@ export interface FlashNewsTickerConfig {
434
434
  * - 'standard': Original simple scrolling ticker
435
435
  * - 'breaking': Red badge + gradient (TV style)
436
436
  * - 'live': Yellow/Black badge + gradient (TV style)
437
- * - 'broadcast1': Blue/Red/Black dual-bar layout with globe
438
- * - 'broadcast2': Yellow/Red/Blue dual-bar layout with globe
439
- * - 'broadcast3': Triple-segment single bar (Red/Blue/Black)
440
- * - 'broadcast4': Blue box "NEWS" + Red scrolling bar
437
+ * - 'broadcast1': Triple-segment single bar (Red/Blue/Black)
441
438
  * - 'custom': User-defined colors and badges
442
439
  */
443
- variant?: 'standard' | 'breaking' | 'live' | 'broadcast1' | 'broadcast2' | 'broadcast3' | 'broadcast4' | 'custom';
440
+ variant?: 'standard' | 'breaking' | 'live' | 'broadcast1' | 'custom';
444
441
 
445
442
  /** Fixed badge text (e.g. "BREAKING NEWS") */
446
443
  badgeText?: string;