unified-video-framework 1.4.436 → 1.4.438
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.
- package/package.json +1 -1
- package/packages/web/dist/WebPlayer.d.ts +8 -0
- package/packages/web/dist/WebPlayer.d.ts.map +1 -1
- package/packages/web/dist/WebPlayer.js +306 -10
- package/packages/web/dist/WebPlayer.js.map +1 -1
- package/packages/web/dist/drm/systems/WidevineDRM.js +70 -6
- package/packages/web/dist/index.d.ts +1 -0
- package/packages/web/dist/index.d.ts.map +1 -1
- package/packages/web/dist/index.js.map +1 -1
- package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts +20 -0
- package/packages/web/dist/react/types/FlashNewsTickerTypes.d.ts.map +1 -1
- package/packages/web/src/WebPlayer.ts +368 -12
- package/packages/web/src/index.ts +11 -0
- package/packages/web/src/react/types/FlashNewsTickerTypes.ts +77 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "unified-video-framework",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.438",
|
|
4
4
|
"description": "Cross-platform video player framework supporting iOS, Android, Web, Smart TVs (Samsung/LG), Roku, and more",
|
|
5
5
|
"main": "packages/core/dist/index.js",
|
|
6
6
|
"types": "packages/core/dist/index.d.ts",
|
|
@@ -94,6 +94,8 @@ export declare class WebPlayer extends BasePlayer {
|
|
|
94
94
|
private currentRetryAttempt;
|
|
95
95
|
private lastFailedUrl;
|
|
96
96
|
private isFallbackPosterMode;
|
|
97
|
+
private hlsErrorRetryCount;
|
|
98
|
+
private readonly MAX_HLS_ERROR_RETRIES;
|
|
97
99
|
private lastDuration;
|
|
98
100
|
private isDetectedAsLive;
|
|
99
101
|
private debugLog;
|
|
@@ -162,6 +164,12 @@ export declare class WebPlayer extends BasePlayer {
|
|
|
162
164
|
setPlaybackRate(rate: number): void;
|
|
163
165
|
setFlashNewsTicker(config: FlashNewsTickerConfig): void;
|
|
164
166
|
private createTickerElement;
|
|
167
|
+
private createSimpleTickerElement;
|
|
168
|
+
private createBroadcastTickerElement;
|
|
169
|
+
private getBroadcastThemeColors;
|
|
170
|
+
private createGlobeElement;
|
|
171
|
+
private createLiveBadgeElement;
|
|
172
|
+
private ensureTickerAnimations;
|
|
165
173
|
private calculateTickerDuration;
|
|
166
174
|
setAutoQuality(enabled: boolean): void;
|
|
167
175
|
enterFullscreen(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebPlayer.d.ts","sourceRoot":"","sources":["../src/WebPlayer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAOL,OAAO,EACP,cAAc,EACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EAEb,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"WebPlayer.d.ts","sourceRoot":"","sources":["../src/WebPlayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,6 +97,8 @@ export class WebPlayer extends BasePlayer {
|
|
|
97
97
|
this.currentRetryAttempt = 0;
|
|
98
98
|
this.lastFailedUrl = '';
|
|
99
99
|
this.isFallbackPosterMode = false;
|
|
100
|
+
this.hlsErrorRetryCount = 0;
|
|
101
|
+
this.MAX_HLS_ERROR_RETRIES = 3;
|
|
100
102
|
this.lastDuration = 0;
|
|
101
103
|
this.isDetectedAsLive = false;
|
|
102
104
|
this.autoplayAttempted = false;
|
|
@@ -531,6 +533,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
531
533
|
this.currentRetryAttempt = 0;
|
|
532
534
|
this.lastFailedUrl = '';
|
|
533
535
|
this.isFallbackPosterMode = false;
|
|
536
|
+
this.hlsErrorRetryCount = 0;
|
|
534
537
|
await this.cleanup();
|
|
535
538
|
if (!this.video) {
|
|
536
539
|
throw new Error('Video element not initialized');
|
|
@@ -828,6 +831,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
828
831
|
this.hls.loadSource(url);
|
|
829
832
|
this.hls.attachMedia(this.video);
|
|
830
833
|
this.hls.on(window.Hls.Events.MANIFEST_PARSED, (event, data) => {
|
|
834
|
+
this.hlsErrorRetryCount = 0;
|
|
831
835
|
this.qualities = data.levels.map((level, index) => ({
|
|
832
836
|
height: level.height,
|
|
833
837
|
width: level.width || 0,
|
|
@@ -861,27 +865,85 @@ export class WebPlayer extends BasePlayer {
|
|
|
861
865
|
throw new Error('HLS is not supported in this browser');
|
|
862
866
|
}
|
|
863
867
|
}
|
|
864
|
-
handleHLSError(data) {
|
|
868
|
+
async handleHLSError(data) {
|
|
865
869
|
const Hls = window.Hls;
|
|
870
|
+
this.debugLog(`🔴 HLS Error: type=${data.type}, details=${data.details}, fatal=${data.fatal}`);
|
|
871
|
+
if (this.hlsErrorRetryCount >= this.MAX_HLS_ERROR_RETRIES) {
|
|
872
|
+
this.debugLog(`🔴 HLS max retries (${this.MAX_HLS_ERROR_RETRIES}) exceeded, triggering fallback`);
|
|
873
|
+
this.hls?.destroy();
|
|
874
|
+
this.hls = null;
|
|
875
|
+
const fallbackLoaded = await this.tryFallbackSource({
|
|
876
|
+
code: 'HLS_ERROR',
|
|
877
|
+
message: data.details,
|
|
878
|
+
type: data.type,
|
|
879
|
+
fatal: true,
|
|
880
|
+
details: data
|
|
881
|
+
});
|
|
882
|
+
if (!fallbackLoaded) {
|
|
883
|
+
this.handleError({
|
|
884
|
+
code: 'HLS_ERROR',
|
|
885
|
+
message: `HLS stream failed after ${this.MAX_HLS_ERROR_RETRIES} retries: ${data.details}`,
|
|
886
|
+
type: 'media',
|
|
887
|
+
fatal: true,
|
|
888
|
+
details: data
|
|
889
|
+
});
|
|
890
|
+
}
|
|
891
|
+
return;
|
|
892
|
+
}
|
|
866
893
|
switch (data.type) {
|
|
867
894
|
case Hls.ErrorTypes.NETWORK_ERROR:
|
|
868
|
-
|
|
869
|
-
this.
|
|
895
|
+
this.hlsErrorRetryCount++;
|
|
896
|
+
this.debugLog(`🔴 Fatal network error (attempt ${this.hlsErrorRetryCount}/${this.MAX_HLS_ERROR_RETRIES}), trying to recover`);
|
|
897
|
+
if (data.details === 'manifestLoadError' || data.details === 'manifestParsingError') {
|
|
898
|
+
this.debugLog(`🔴 Manifest error detected (${data.details}), skipping recovery - triggering fallback`);
|
|
899
|
+
this.hls?.destroy();
|
|
900
|
+
this.hls = null;
|
|
901
|
+
const fallbackLoaded = await this.tryFallbackSource({
|
|
902
|
+
code: 'HLS_MANIFEST_ERROR',
|
|
903
|
+
message: data.details,
|
|
904
|
+
type: 'network',
|
|
905
|
+
fatal: true,
|
|
906
|
+
details: data
|
|
907
|
+
});
|
|
908
|
+
if (!fallbackLoaded) {
|
|
909
|
+
this.handleError({
|
|
910
|
+
code: 'HLS_MANIFEST_ERROR',
|
|
911
|
+
message: `Failed to load HLS manifest: ${data.details}`,
|
|
912
|
+
type: 'media',
|
|
913
|
+
fatal: true,
|
|
914
|
+
details: data
|
|
915
|
+
});
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
else {
|
|
919
|
+
this.hls?.startLoad();
|
|
920
|
+
}
|
|
870
921
|
break;
|
|
871
922
|
case Hls.ErrorTypes.MEDIA_ERROR:
|
|
872
|
-
|
|
873
|
-
this.
|
|
923
|
+
this.hlsErrorRetryCount++;
|
|
924
|
+
this.debugLog(`🔴 Fatal media error (attempt ${this.hlsErrorRetryCount}/${this.MAX_HLS_ERROR_RETRIES}), trying to recover`);
|
|
925
|
+
this.hls?.recoverMediaError();
|
|
874
926
|
break;
|
|
875
927
|
default:
|
|
876
|
-
|
|
877
|
-
this.
|
|
928
|
+
this.debugLog(`🔴 Fatal unrecoverable HLS error: ${data.details}`);
|
|
929
|
+
this.hls?.destroy();
|
|
930
|
+
this.hls = null;
|
|
931
|
+
const fallbackLoaded = await this.tryFallbackSource({
|
|
878
932
|
code: 'HLS_ERROR',
|
|
879
933
|
message: data.details,
|
|
880
934
|
type: 'media',
|
|
881
935
|
fatal: true,
|
|
882
936
|
details: data
|
|
883
937
|
});
|
|
884
|
-
|
|
938
|
+
if (!fallbackLoaded) {
|
|
939
|
+
this.handleError({
|
|
940
|
+
code: 'HLS_ERROR',
|
|
941
|
+
message: data.details,
|
|
942
|
+
type: 'media',
|
|
943
|
+
fatal: true,
|
|
944
|
+
details: data
|
|
945
|
+
});
|
|
946
|
+
}
|
|
885
947
|
break;
|
|
886
948
|
}
|
|
887
949
|
}
|
|
@@ -1876,8 +1938,14 @@ export class WebPlayer extends BasePlayer {
|
|
|
1876
1938
|
}
|
|
1877
1939
|
}
|
|
1878
1940
|
createTickerElement(config, position) {
|
|
1941
|
+
if (config.styleVariant === 'broadcast') {
|
|
1942
|
+
return this.createBroadcastTickerElement(config, position);
|
|
1943
|
+
}
|
|
1944
|
+
return this.createSimpleTickerElement(config, position);
|
|
1945
|
+
}
|
|
1946
|
+
createSimpleTickerElement(config, position) {
|
|
1879
1947
|
const ticker = document.createElement('div');
|
|
1880
|
-
ticker.className = `uvf-flash-ticker ticker-${position}`;
|
|
1948
|
+
ticker.className = `uvf-flash-ticker ticker-${position} ticker-simple`;
|
|
1881
1949
|
const bottomOffset = config.bottomOffset || 0;
|
|
1882
1950
|
const topOffset = config.topOffset || 0;
|
|
1883
1951
|
const height = config.height || 40;
|
|
@@ -1952,6 +2020,223 @@ export class WebPlayer extends BasePlayer {
|
|
|
1952
2020
|
renderItems();
|
|
1953
2021
|
}
|
|
1954
2022
|
ticker.appendChild(track);
|
|
2023
|
+
this.ensureTickerAnimations();
|
|
2024
|
+
return ticker;
|
|
2025
|
+
}
|
|
2026
|
+
createBroadcastTickerElement(config, position) {
|
|
2027
|
+
const broadcastStyle = config.broadcastStyle || {};
|
|
2028
|
+
const theme = broadcastStyle.theme || 'breaking-red';
|
|
2029
|
+
const themeColors = this.getBroadcastThemeColors(theme, broadcastStyle);
|
|
2030
|
+
const ticker = document.createElement('div');
|
|
2031
|
+
ticker.className = `uvf-flash-ticker ticker-${position} ticker-broadcast`;
|
|
2032
|
+
const bottomOffset = config.bottomOffset || 0;
|
|
2033
|
+
const topOffset = config.topOffset || 0;
|
|
2034
|
+
const headerHeight = broadcastStyle.headerHeight || 28;
|
|
2035
|
+
const bodyHeight = config.height || 36;
|
|
2036
|
+
const totalHeight = headerHeight + bodyHeight;
|
|
2037
|
+
ticker.style.cssText = `
|
|
2038
|
+
position: absolute;
|
|
2039
|
+
left: 0;
|
|
2040
|
+
right: 0;
|
|
2041
|
+
height: ${totalHeight}px;
|
|
2042
|
+
${position === 'top' ? `top: ${topOffset}px;` : `bottom: ${bottomOffset}px;`}
|
|
2043
|
+
overflow: hidden;
|
|
2044
|
+
pointer-events: none;
|
|
2045
|
+
display: flex;
|
|
2046
|
+
flex-direction: column;
|
|
2047
|
+
`;
|
|
2048
|
+
const header = document.createElement('div');
|
|
2049
|
+
header.className = 'uvf-ticker-header';
|
|
2050
|
+
header.style.cssText = `
|
|
2051
|
+
display: flex;
|
|
2052
|
+
align-items: center;
|
|
2053
|
+
height: ${headerHeight}px;
|
|
2054
|
+
background: ${themeColors.headerBg};
|
|
2055
|
+
padding: 0 12px;
|
|
2056
|
+
position: relative;
|
|
2057
|
+
`;
|
|
2058
|
+
if (broadcastStyle.showGlobe !== false) {
|
|
2059
|
+
const globe = this.createGlobeElement(broadcastStyle.animateGlobe !== false);
|
|
2060
|
+
header.appendChild(globe);
|
|
2061
|
+
}
|
|
2062
|
+
const headerText = document.createElement('span');
|
|
2063
|
+
headerText.className = 'uvf-ticker-header-text';
|
|
2064
|
+
headerText.textContent = broadcastStyle.headerText || 'BREAKING NEWS';
|
|
2065
|
+
headerText.style.cssText = `
|
|
2066
|
+
color: ${broadcastStyle.headerTextColor || '#ffffff'};
|
|
2067
|
+
font-size: ${broadcastStyle.headerFontSize || 16}px;
|
|
2068
|
+
font-weight: 800;
|
|
2069
|
+
text-transform: uppercase;
|
|
2070
|
+
letter-spacing: 1px;
|
|
2071
|
+
margin-left: ${broadcastStyle.showGlobe !== false ? '8px' : '0'};
|
|
2072
|
+
text-shadow: 1px 1px 2px rgba(0,0,0,0.3);
|
|
2073
|
+
`;
|
|
2074
|
+
header.appendChild(headerText);
|
|
2075
|
+
if (broadcastStyle.showLiveBadge !== false) {
|
|
2076
|
+
const liveBadge = this.createLiveBadgeElement(broadcastStyle.pulseLiveBadge !== false);
|
|
2077
|
+
header.appendChild(liveBadge);
|
|
2078
|
+
}
|
|
2079
|
+
const body = document.createElement('div');
|
|
2080
|
+
body.className = 'uvf-ticker-body';
|
|
2081
|
+
body.style.cssText = `
|
|
2082
|
+
display: flex;
|
|
2083
|
+
align-items: center;
|
|
2084
|
+
height: ${bodyHeight}px;
|
|
2085
|
+
background: ${themeColors.bodyBg};
|
|
2086
|
+
overflow: hidden;
|
|
2087
|
+
position: relative;
|
|
2088
|
+
`;
|
|
2089
|
+
const track = document.createElement('div');
|
|
2090
|
+
track.className = 'uvf-ticker-track';
|
|
2091
|
+
const duration = this.calculateTickerDuration(config);
|
|
2092
|
+
track.style.cssText = `
|
|
2093
|
+
display: flex;
|
|
2094
|
+
white-space: nowrap;
|
|
2095
|
+
animation: ticker-scroll ${duration}s linear infinite;
|
|
2096
|
+
will-change: transform;
|
|
2097
|
+
padding-left: 100%;
|
|
2098
|
+
`;
|
|
2099
|
+
const containerWidth = this.container?.offsetWidth || 1920;
|
|
2100
|
+
const baseFontSize = config.fontSize || 14;
|
|
2101
|
+
let responsiveFontSize = baseFontSize;
|
|
2102
|
+
if (containerWidth < 768) {
|
|
2103
|
+
responsiveFontSize = Math.max(baseFontSize * 0.8, 12);
|
|
2104
|
+
}
|
|
2105
|
+
else if (containerWidth < 1280) {
|
|
2106
|
+
responsiveFontSize = Math.max(baseFontSize * 0.9, 13);
|
|
2107
|
+
}
|
|
2108
|
+
const renderItems = () => {
|
|
2109
|
+
if (!config.items)
|
|
2110
|
+
return;
|
|
2111
|
+
config.items.forEach((item) => {
|
|
2112
|
+
const span = document.createElement('span');
|
|
2113
|
+
if (item.html) {
|
|
2114
|
+
span.innerHTML = item.html;
|
|
2115
|
+
}
|
|
2116
|
+
else {
|
|
2117
|
+
span.textContent = item.text;
|
|
2118
|
+
}
|
|
2119
|
+
span.style.cssText = `
|
|
2120
|
+
color: ${config.textColor || '#ffffff'};
|
|
2121
|
+
font-size: ${responsiveFontSize}px;
|
|
2122
|
+
font-weight: ${config.fontWeight || 600};
|
|
2123
|
+
margin-right: ${config.gap || 100}px;
|
|
2124
|
+
display: inline-flex;
|
|
2125
|
+
align-items: center;
|
|
2126
|
+
`;
|
|
2127
|
+
track.appendChild(span);
|
|
2128
|
+
if (config.separator) {
|
|
2129
|
+
const sep = document.createElement('span');
|
|
2130
|
+
sep.textContent = config.separator;
|
|
2131
|
+
sep.style.cssText = `
|
|
2132
|
+
color: ${config.textColor || '#ffffff'};
|
|
2133
|
+
font-size: ${responsiveFontSize}px;
|
|
2134
|
+
opacity: 0.5;
|
|
2135
|
+
margin: 0 8px;
|
|
2136
|
+
`;
|
|
2137
|
+
track.appendChild(sep);
|
|
2138
|
+
}
|
|
2139
|
+
});
|
|
2140
|
+
};
|
|
2141
|
+
for (let i = 0; i < 10; i++) {
|
|
2142
|
+
renderItems();
|
|
2143
|
+
}
|
|
2144
|
+
body.appendChild(track);
|
|
2145
|
+
ticker.appendChild(header);
|
|
2146
|
+
ticker.appendChild(body);
|
|
2147
|
+
this.ensureTickerAnimations();
|
|
2148
|
+
return ticker;
|
|
2149
|
+
}
|
|
2150
|
+
getBroadcastThemeColors(theme, broadcastStyle) {
|
|
2151
|
+
switch (theme) {
|
|
2152
|
+
case 'breaking-red':
|
|
2153
|
+
return {
|
|
2154
|
+
headerBg: 'linear-gradient(90deg, #cc0000 0%, #ff0000 50%, #cc0000 100%)',
|
|
2155
|
+
bodyBg: 'linear-gradient(90deg, #1a237e 0%, #283593 50%, #1a237e 100%)'
|
|
2156
|
+
};
|
|
2157
|
+
case 'breaking-blue':
|
|
2158
|
+
return {
|
|
2159
|
+
headerBg: 'linear-gradient(90deg, #0d47a1 0%, #1565c0 50%, #0d47a1 100%)',
|
|
2160
|
+
bodyBg: 'linear-gradient(90deg, #1a1a2e 0%, #16213e 50%, #1a1a2e 100%)'
|
|
2161
|
+
};
|
|
2162
|
+
case 'alert-red':
|
|
2163
|
+
return {
|
|
2164
|
+
headerBg: 'linear-gradient(90deg, #b71c1c 0%, #d32f2f 50%, #b71c1c 100%)',
|
|
2165
|
+
bodyBg: 'linear-gradient(90deg, #7f0000 0%, #9a0000 50%, #7f0000 100%)'
|
|
2166
|
+
};
|
|
2167
|
+
case 'news-blue':
|
|
2168
|
+
return {
|
|
2169
|
+
headerBg: 'linear-gradient(90deg, #01579b 0%, #0277bd 50%, #01579b 100%)',
|
|
2170
|
+
bodyBg: 'linear-gradient(90deg, #002171 0%, #003c8f 50%, #002171 100%)'
|
|
2171
|
+
};
|
|
2172
|
+
case 'custom':
|
|
2173
|
+
return {
|
|
2174
|
+
headerBg: broadcastStyle.headerColor || '#cc0000',
|
|
2175
|
+
bodyBg: broadcastStyle.bodyColor || '#1a237e'
|
|
2176
|
+
};
|
|
2177
|
+
default:
|
|
2178
|
+
return {
|
|
2179
|
+
headerBg: 'linear-gradient(90deg, #cc0000 0%, #ff0000 50%, #cc0000 100%)',
|
|
2180
|
+
bodyBg: 'linear-gradient(90deg, #1a237e 0%, #283593 50%, #1a237e 100%)'
|
|
2181
|
+
};
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
2184
|
+
createGlobeElement(animate) {
|
|
2185
|
+
const globeContainer = document.createElement('div');
|
|
2186
|
+
globeContainer.className = 'uvf-ticker-globe';
|
|
2187
|
+
globeContainer.style.cssText = `
|
|
2188
|
+
width: 24px;
|
|
2189
|
+
height: 24px;
|
|
2190
|
+
position: relative;
|
|
2191
|
+
flex-shrink: 0;
|
|
2192
|
+
`;
|
|
2193
|
+
globeContainer.innerHTML = `
|
|
2194
|
+
<svg viewBox="0 0 24 24" fill="none" style="width: 100%; height: 100%; ${animate ? 'animation: globe-rotate 8s linear infinite;' : ''}">
|
|
2195
|
+
<circle cx="12" cy="12" r="10" stroke="#ffffff" stroke-width="1.5" fill="none"/>
|
|
2196
|
+
<ellipse cx="12" cy="12" rx="10" ry="4" stroke="#ffffff" stroke-width="1" fill="none"/>
|
|
2197
|
+
<ellipse cx="12" cy="12" rx="4" ry="10" stroke="#ffffff" stroke-width="1" fill="none"/>
|
|
2198
|
+
<line x1="2" y1="12" x2="22" y2="12" stroke="#ffffff" stroke-width="0.5"/>
|
|
2199
|
+
<line x1="12" y1="2" x2="12" y2="22" stroke="#ffffff" stroke-width="0.5"/>
|
|
2200
|
+
<path d="M4 8 Q12 6 20 8" stroke="#ffffff" stroke-width="0.5" fill="none"/>
|
|
2201
|
+
<path d="M4 16 Q12 18 20 16" stroke="#ffffff" stroke-width="0.5" fill="none"/>
|
|
2202
|
+
</svg>
|
|
2203
|
+
`;
|
|
2204
|
+
return globeContainer;
|
|
2205
|
+
}
|
|
2206
|
+
createLiveBadgeElement(pulse) {
|
|
2207
|
+
const badge = document.createElement('div');
|
|
2208
|
+
badge.className = 'uvf-ticker-live-badge';
|
|
2209
|
+
badge.style.cssText = `
|
|
2210
|
+
display: flex;
|
|
2211
|
+
align-items: center;
|
|
2212
|
+
margin-left: auto;
|
|
2213
|
+
padding: 2px 8px;
|
|
2214
|
+
background: #ff0000;
|
|
2215
|
+
border-radius: 3px;
|
|
2216
|
+
${pulse ? 'animation: live-pulse 1.5s ease-in-out infinite;' : ''}
|
|
2217
|
+
`;
|
|
2218
|
+
const dot = document.createElement('span');
|
|
2219
|
+
dot.style.cssText = `
|
|
2220
|
+
width: 8px;
|
|
2221
|
+
height: 8px;
|
|
2222
|
+
background: #ffffff;
|
|
2223
|
+
border-radius: 50%;
|
|
2224
|
+
margin-right: 4px;
|
|
2225
|
+
${pulse ? 'animation: dot-blink 1s ease-in-out infinite;' : ''}
|
|
2226
|
+
`;
|
|
2227
|
+
badge.appendChild(dot);
|
|
2228
|
+
const text = document.createElement('span');
|
|
2229
|
+
text.textContent = 'LIVE';
|
|
2230
|
+
text.style.cssText = `
|
|
2231
|
+
color: #ffffff;
|
|
2232
|
+
font-size: 11px;
|
|
2233
|
+
font-weight: 800;
|
|
2234
|
+
letter-spacing: 0.5px;
|
|
2235
|
+
`;
|
|
2236
|
+
badge.appendChild(text);
|
|
2237
|
+
return badge;
|
|
2238
|
+
}
|
|
2239
|
+
ensureTickerAnimations() {
|
|
1955
2240
|
if (!document.querySelector('#uvf-ticker-animation')) {
|
|
1956
2241
|
const style = document.createElement('style');
|
|
1957
2242
|
style.id = 'uvf-ticker-animation';
|
|
@@ -1960,10 +2245,21 @@ export class WebPlayer extends BasePlayer {
|
|
|
1960
2245
|
0% { transform: translateX(0%); }
|
|
1961
2246
|
100% { transform: translateX(-100%); }
|
|
1962
2247
|
}
|
|
2248
|
+
@keyframes globe-rotate {
|
|
2249
|
+
0% { transform: rotate(0deg); }
|
|
2250
|
+
100% { transform: rotate(360deg); }
|
|
2251
|
+
}
|
|
2252
|
+
@keyframes live-pulse {
|
|
2253
|
+
0%, 100% { opacity: 1; transform: scale(1); }
|
|
2254
|
+
50% { opacity: 0.85; transform: scale(1.02); }
|
|
2255
|
+
}
|
|
2256
|
+
@keyframes dot-blink {
|
|
2257
|
+
0%, 100% { opacity: 1; }
|
|
2258
|
+
50% { opacity: 0.3; }
|
|
2259
|
+
}
|
|
1963
2260
|
`;
|
|
1964
2261
|
document.head.appendChild(style);
|
|
1965
2262
|
}
|
|
1966
|
-
return ticker;
|
|
1967
2263
|
}
|
|
1968
2264
|
calculateTickerDuration(config) {
|
|
1969
2265
|
const speed = config.speed || 50;
|