unified-video-framework 1.4.103 → 1.4.104
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.
|
@@ -1989,16 +1989,20 @@ export class WebPlayer extends BasePlayer {
|
|
|
1989
1989
|
width: 100%;
|
|
1990
1990
|
height: 4px;
|
|
1991
1991
|
position: relative;
|
|
1992
|
-
background: rgba(255,255,255,0.
|
|
1993
|
-
border-radius:
|
|
1992
|
+
background: rgba(255, 255, 255, 0.15);
|
|
1993
|
+
border-radius: 6px;
|
|
1994
1994
|
cursor: pointer;
|
|
1995
|
-
padding:
|
|
1995
|
+
padding: 14px 0;
|
|
1996
1996
|
overflow: visible;
|
|
1997
|
-
transition:
|
|
1997
|
+
transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
1998
|
+
backdrop-filter: blur(4px);
|
|
1998
1999
|
}
|
|
1999
2000
|
|
|
2000
2001
|
.uvf-progress-bar-wrapper:hover {
|
|
2001
|
-
height:
|
|
2002
|
+
height: 6px;
|
|
2003
|
+
background: rgba(255, 255, 255, 0.2);
|
|
2004
|
+
border-radius: 8px;
|
|
2005
|
+
transform: scaleY(1.1);
|
|
2002
2006
|
}
|
|
2003
2007
|
|
|
2004
2008
|
.uvf-progress-buffered {
|
|
@@ -2006,11 +2010,57 @@ export class WebPlayer extends BasePlayer {
|
|
|
2006
2010
|
top: 0;
|
|
2007
2011
|
left: 0;
|
|
2008
2012
|
height: 100%;
|
|
2009
|
-
background:
|
|
2010
|
-
|
|
2013
|
+
background: linear-gradient(90deg,
|
|
2014
|
+
rgba(255, 255, 255, 0.25) 0%,
|
|
2015
|
+
rgba(255, 255, 255, 0.35) 30%,
|
|
2016
|
+
rgba(255, 255, 255, 0.4) 50%,
|
|
2017
|
+
rgba(255, 255, 255, 0.35) 70%,
|
|
2018
|
+
rgba(255, 255, 255, 0.3) 100%
|
|
2019
|
+
);
|
|
2020
|
+
border-radius: 6px;
|
|
2011
2021
|
pointer-events: none;
|
|
2012
|
-
transition:
|
|
2022
|
+
transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
2013
2023
|
z-index: 1;
|
|
2024
|
+
position: relative;
|
|
2025
|
+
overflow: hidden;
|
|
2026
|
+
}
|
|
2027
|
+
|
|
2028
|
+
/* Buffered progress loading shimmer effect */
|
|
2029
|
+
.uvf-progress-buffered::before {
|
|
2030
|
+
content: '';
|
|
2031
|
+
position: absolute;
|
|
2032
|
+
top: 0;
|
|
2033
|
+
left: -100%;
|
|
2034
|
+
width: 100%;
|
|
2035
|
+
height: 100%;
|
|
2036
|
+
background: linear-gradient(90deg,
|
|
2037
|
+
transparent 0%,
|
|
2038
|
+
rgba(255, 255, 255, 0.15) 50%,
|
|
2039
|
+
transparent 100%
|
|
2040
|
+
);
|
|
2041
|
+
animation: bufferShimmer 2s infinite;
|
|
2042
|
+
border-radius: 6px;
|
|
2043
|
+
}
|
|
2044
|
+
|
|
2045
|
+
@keyframes bufferShimmer {
|
|
2046
|
+
0% { left: -100%; }
|
|
2047
|
+
100% { left: 100%; }
|
|
2048
|
+
}
|
|
2049
|
+
|
|
2050
|
+
.uvf-progress-bar-wrapper:hover .uvf-progress-buffered {
|
|
2051
|
+
border-radius: 8px;
|
|
2052
|
+
background: linear-gradient(90deg,
|
|
2053
|
+
rgba(255, 255, 255, 0.3) 0%,
|
|
2054
|
+
rgba(255, 255, 255, 0.4) 30%,
|
|
2055
|
+
rgba(255, 255, 255, 0.5) 50%,
|
|
2056
|
+
rgba(255, 255, 255, 0.4) 70%,
|
|
2057
|
+
rgba(255, 255, 255, 0.35) 100%
|
|
2058
|
+
);
|
|
2059
|
+
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
|
|
2060
|
+
}
|
|
2061
|
+
|
|
2062
|
+
.uvf-progress-bar-wrapper:hover .uvf-progress-buffered::before {
|
|
2063
|
+
border-radius: 8px;
|
|
2014
2064
|
}
|
|
2015
2065
|
|
|
2016
2066
|
.uvf-progress-filled {
|
|
@@ -2018,121 +2068,231 @@ export class WebPlayer extends BasePlayer {
|
|
|
2018
2068
|
top: 0;
|
|
2019
2069
|
left: 0;
|
|
2020
2070
|
height: 100%;
|
|
2021
|
-
background: linear-gradient(90deg,
|
|
2022
|
-
|
|
2071
|
+
background: linear-gradient(90deg,
|
|
2072
|
+
#ff4500 0%,
|
|
2073
|
+
#ff5722 25%,
|
|
2074
|
+
#ff6b35 50%,
|
|
2075
|
+
#ff7043 75%,
|
|
2076
|
+
#ff8c69 100%
|
|
2077
|
+
);
|
|
2078
|
+
border-radius: 6px;
|
|
2023
2079
|
pointer-events: none;
|
|
2024
|
-
transition:
|
|
2080
|
+
transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
2025
2081
|
z-index: 2;
|
|
2082
|
+
box-shadow: 0 0 12px rgba(255, 87, 34, 0.3);
|
|
2083
|
+
}
|
|
2084
|
+
|
|
2085
|
+
.uvf-progress-bar-wrapper:hover .uvf-progress-filled {
|
|
2086
|
+
border-radius: 8px;
|
|
2087
|
+
background: linear-gradient(90deg,
|
|
2088
|
+
#ff4500 0%,
|
|
2089
|
+
#ff5722 20%,
|
|
2090
|
+
#ff6b35 40%,
|
|
2091
|
+
#ff7043 60%,
|
|
2092
|
+
#ff8c69 80%,
|
|
2093
|
+
#ffa500 100%
|
|
2094
|
+
);
|
|
2095
|
+
box-shadow: 0 0 20px rgba(255, 87, 34, 0.5);
|
|
2026
2096
|
}
|
|
2027
2097
|
|
|
2028
2098
|
.uvf-progress-handle {
|
|
2029
2099
|
position: absolute;
|
|
2030
|
-
width:
|
|
2031
|
-
height:
|
|
2032
|
-
background:
|
|
2033
|
-
|
|
2100
|
+
width: 14px;
|
|
2101
|
+
height: 14px;
|
|
2102
|
+
background: radial-gradient(circle,
|
|
2103
|
+
rgba(255, 255, 255, 0.95) 0%,
|
|
2104
|
+
rgba(255, 255, 255, 0.9) 70%,
|
|
2105
|
+
rgba(255, 255, 255, 0.85) 100%
|
|
2106
|
+
);
|
|
2107
|
+
border: 2px solid rgba(255, 87, 34, 0.8);
|
|
2034
2108
|
border-radius: 50%;
|
|
2035
2109
|
top: 50%;
|
|
2036
|
-
transform: translate(-50%, -50%);
|
|
2110
|
+
transform: translate(-50%, -50%) scale(0);
|
|
2037
2111
|
opacity: 0;
|
|
2038
|
-
transition: all 0.
|
|
2039
|
-
box-shadow:
|
|
2112
|
+
transition: all 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2113
|
+
box-shadow:
|
|
2114
|
+
0 0 0 0 rgba(255, 87, 34, 0.4),
|
|
2115
|
+
0 4px 12px rgba(0, 0, 0, 0.25),
|
|
2116
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
|
2040
2117
|
cursor: grab;
|
|
2041
2118
|
z-index: 3;
|
|
2042
2119
|
pointer-events: all;
|
|
2120
|
+
backdrop-filter: blur(8px);
|
|
2043
2121
|
}
|
|
2044
2122
|
|
|
2045
2123
|
.uvf-progress-bar-wrapper:hover .uvf-progress-handle {
|
|
2046
2124
|
opacity: 1;
|
|
2047
2125
|
transform: translate(-50%, -50%) scale(1);
|
|
2126
|
+
box-shadow:
|
|
2127
|
+
0 0 0 4px rgba(255, 87, 34, 0.2),
|
|
2128
|
+
0 6px 20px rgba(0, 0, 0, 0.3),
|
|
2129
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.6);
|
|
2048
2130
|
}
|
|
2049
2131
|
|
|
2050
2132
|
.uvf-progress-handle:hover {
|
|
2051
|
-
transform: translate(-50%, -50%) scale(1.
|
|
2052
|
-
|
|
2133
|
+
transform: translate(-50%, -50%) scale(1.25);
|
|
2134
|
+
background: radial-gradient(circle,
|
|
2135
|
+
rgba(255, 255, 255, 1) 0%,
|
|
2136
|
+
rgba(255, 255, 255, 0.95) 70%,
|
|
2137
|
+
rgba(255, 255, 255, 0.9) 100%
|
|
2138
|
+
);
|
|
2139
|
+
border-color: rgba(255, 87, 34, 1);
|
|
2140
|
+
box-shadow:
|
|
2141
|
+
0 0 0 6px rgba(255, 87, 34, 0.3),
|
|
2142
|
+
0 8px 25px rgba(255, 87, 34, 0.4),
|
|
2143
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.8);
|
|
2053
2144
|
}
|
|
2054
2145
|
|
|
2055
2146
|
.uvf-progress-handle:active,
|
|
2056
2147
|
.uvf-progress-handle.dragging {
|
|
2057
2148
|
cursor: grabbing;
|
|
2058
|
-
transform: translate(-50%, -50%) scale(1.
|
|
2059
|
-
|
|
2149
|
+
transform: translate(-50%, -50%) scale(1.4);
|
|
2150
|
+
background: radial-gradient(circle,
|
|
2151
|
+
rgba(255, 255, 255, 1) 0%,
|
|
2152
|
+
rgba(255, 255, 255, 0.98) 50%,
|
|
2153
|
+
rgba(255, 255, 255, 0.95) 100%
|
|
2154
|
+
);
|
|
2155
|
+
border-color: #ff4500;
|
|
2156
|
+
box-shadow:
|
|
2157
|
+
0 0 0 8px rgba(255, 87, 34, 0.4),
|
|
2158
|
+
0 12px 35px rgba(255, 69, 0, 0.5),
|
|
2159
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.9);
|
|
2160
|
+
transition: all 0.2s cubic-bezier(0.25, 0.8, 0.25, 1);
|
|
2060
2161
|
}
|
|
2061
2162
|
|
|
2062
2163
|
.uvf-time-tooltip {
|
|
2063
2164
|
position: absolute;
|
|
2064
|
-
bottom:
|
|
2165
|
+
bottom: 32px;
|
|
2065
2166
|
left: 50%;
|
|
2066
|
-
transform: translateX(-50%);
|
|
2067
|
-
background:
|
|
2167
|
+
transform: translateX(-50%) translateY(8px) scale(0.9);
|
|
2168
|
+
background: linear-gradient(135deg,
|
|
2169
|
+
rgba(0, 0, 0, 0.95) 0%,
|
|
2170
|
+
rgba(20, 20, 20, 0.92) 50%,
|
|
2171
|
+
rgba(0, 0, 0, 0.98) 100%
|
|
2172
|
+
);
|
|
2068
2173
|
color: #ffffff;
|
|
2069
|
-
padding:
|
|
2070
|
-
border-radius:
|
|
2174
|
+
padding: 10px 16px;
|
|
2175
|
+
border-radius: 12px;
|
|
2071
2176
|
font-size: 13px;
|
|
2072
2177
|
font-weight: 600;
|
|
2178
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
2179
|
+
letter-spacing: 0.5px;
|
|
2073
2180
|
white-space: nowrap;
|
|
2074
2181
|
opacity: 0;
|
|
2075
|
-
transition: all 0.
|
|
2182
|
+
transition: all 0.35s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
2076
2183
|
pointer-events: none;
|
|
2077
2184
|
z-index: 4;
|
|
2078
|
-
box-shadow:
|
|
2079
|
-
|
|
2080
|
-
|
|
2185
|
+
box-shadow:
|
|
2186
|
+
0 0 0 1px rgba(255, 255, 255, 0.05),
|
|
2187
|
+
0 8px 32px rgba(0, 0, 0, 0.6),
|
|
2188
|
+
0 2px 8px rgba(0, 0, 0, 0.3),
|
|
2189
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.1);
|
|
2190
|
+
backdrop-filter: blur(20px) saturate(1.5);
|
|
2191
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
2192
|
+
min-width: 52px;
|
|
2193
|
+
text-align: center;
|
|
2081
2194
|
}
|
|
2082
2195
|
|
|
2196
|
+
/* Glass morphism tooltip arrow with multiple layers */
|
|
2083
2197
|
.uvf-time-tooltip::after {
|
|
2084
2198
|
content: '';
|
|
2085
2199
|
position: absolute;
|
|
2086
|
-
bottom: -
|
|
2200
|
+
bottom: -10px;
|
|
2087
2201
|
left: 50%;
|
|
2088
2202
|
transform: translateX(-50%);
|
|
2089
2203
|
width: 0;
|
|
2090
2204
|
height: 0;
|
|
2091
|
-
border-left:
|
|
2092
|
-
border-right:
|
|
2093
|
-
border-top:
|
|
2205
|
+
border-left: 10px solid transparent;
|
|
2206
|
+
border-right: 10px solid transparent;
|
|
2207
|
+
border-top: 10px solid rgba(0, 0, 0, 0.95);
|
|
2208
|
+
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.2));
|
|
2094
2209
|
}
|
|
2095
2210
|
|
|
2096
2211
|
.uvf-time-tooltip::before {
|
|
2097
2212
|
content: '';
|
|
2098
2213
|
position: absolute;
|
|
2099
|
-
bottom: -
|
|
2214
|
+
bottom: -11px;
|
|
2100
2215
|
left: 50%;
|
|
2101
2216
|
transform: translateX(-50%);
|
|
2102
2217
|
width: 0;
|
|
2103
2218
|
height: 0;
|
|
2104
|
-
border-left:
|
|
2105
|
-
border-right:
|
|
2106
|
-
border-top:
|
|
2219
|
+
border-left: 11px solid transparent;
|
|
2220
|
+
border-right: 11px solid transparent;
|
|
2221
|
+
border-top: 11px solid rgba(255, 255, 255, 0.08);
|
|
2107
2222
|
z-index: -1;
|
|
2108
2223
|
}
|
|
2109
2224
|
|
|
2225
|
+
/* Enhanced tooltip animations */
|
|
2110
2226
|
.uvf-progress-bar-wrapper:hover .uvf-time-tooltip {
|
|
2111
2227
|
opacity: 1;
|
|
2112
|
-
transform: translateX(-50%) translateY(-2px);
|
|
2228
|
+
transform: translateX(-50%) translateY(-2px) scale(1);
|
|
2229
|
+
}
|
|
2230
|
+
|
|
2231
|
+
/* Tooltip pulse animation on first hover */
|
|
2232
|
+
@keyframes tooltipPulse {
|
|
2233
|
+
0% { transform: translateX(-50%) translateY(-2px) scale(1); }
|
|
2234
|
+
50% { transform: translateX(-50%) translateY(-4px) scale(1.05); }
|
|
2235
|
+
100% { transform: translateX(-50%) translateY(-2px) scale(1); }
|
|
2113
2236
|
}
|
|
2114
2237
|
|
|
2115
|
-
|
|
2238
|
+
.uvf-time-tooltip.pulse {
|
|
2239
|
+
animation: tooltipPulse 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) once;
|
|
2240
|
+
}
|
|
2241
|
+
|
|
2242
|
+
/* Mobile responsive design with enhanced touch targets */
|
|
2116
2243
|
@media (max-width: 768px) {
|
|
2244
|
+
.uvf-progress-bar-wrapper {
|
|
2245
|
+
padding: 20px 0; /* Larger touch area */
|
|
2246
|
+
height: 6px; /* Slightly thicker on mobile */
|
|
2247
|
+
}
|
|
2248
|
+
|
|
2249
|
+
.uvf-progress-bar-wrapper:hover {
|
|
2250
|
+
height: 8px;
|
|
2251
|
+
}
|
|
2252
|
+
|
|
2117
2253
|
.uvf-progress-handle {
|
|
2118
|
-
width:
|
|
2119
|
-
height:
|
|
2120
|
-
|
|
2121
|
-
|
|
2254
|
+
width: 18px;
|
|
2255
|
+
height: 18px;
|
|
2256
|
+
opacity: 0.8; /* More visible on mobile for discoverability */
|
|
2257
|
+
border-width: 3px;
|
|
2258
|
+
box-shadow:
|
|
2259
|
+
0 0 0 2px rgba(255, 87, 34, 0.3),
|
|
2260
|
+
0 6px 16px rgba(0, 0, 0, 0.3),
|
|
2261
|
+
inset 0 1px 0 rgba(255, 255, 255, 0.5);
|
|
2122
2262
|
}
|
|
2123
2263
|
|
|
2124
2264
|
.uvf-progress-bar-wrapper:hover .uvf-progress-handle,
|
|
2125
2265
|
.uvf-progress-handle:active {
|
|
2126
2266
|
opacity: 1;
|
|
2267
|
+
transform: translate(-50%, -50%) scale(1);
|
|
2127
2268
|
}
|
|
2128
2269
|
|
|
2129
2270
|
.uvf-progress-handle:hover {
|
|
2130
|
-
transform:
|
|
2271
|
+
transform: translate(-50%, -50%) scale(1.15);
|
|
2272
|
+
box-shadow:
|
|
2273
|
+
0 0 0 4px rgba(255, 87, 34, 0.4),
|
|
2274
|
+
0 8px 20px rgba(255, 87, 34, 0.35),
|
|
2275
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.7);
|
|
2131
2276
|
}
|
|
2132
2277
|
|
|
2133
2278
|
.uvf-progress-handle:active,
|
|
2134
2279
|
.uvf-progress-handle.dragging {
|
|
2135
|
-
transform:
|
|
2280
|
+
transform: translate(-50%, -50%) scale(1.3);
|
|
2281
|
+
box-shadow:
|
|
2282
|
+
0 0 0 6px rgba(255, 87, 34, 0.5),
|
|
2283
|
+
0 10px 25px rgba(255, 69, 0, 0.4),
|
|
2284
|
+
inset 0 2px 0 rgba(255, 255, 255, 0.8);
|
|
2285
|
+
}
|
|
2286
|
+
}
|
|
2287
|
+
|
|
2288
|
+
/* High DPI displays optimization */
|
|
2289
|
+
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
|
|
2290
|
+
.uvf-progress-handle {
|
|
2291
|
+
background: radial-gradient(circle,
|
|
2292
|
+
rgba(255, 255, 255, 0.98) 0%,
|
|
2293
|
+
rgba(255, 255, 255, 0.92) 70%,
|
|
2294
|
+
rgba(255, 255, 255, 0.88) 100%
|
|
2295
|
+
);
|
|
2136
2296
|
}
|
|
2137
2297
|
}
|
|
2138
2298
|
/* Controls Row */
|
|
@@ -5167,6 +5327,14 @@ export class WebPlayer extends BasePlayer {
|
|
|
5167
5327
|
timeTooltip.textContent = this.formatTime(time);
|
|
5168
5328
|
timeTooltip.style.left = percent + '%';
|
|
5169
5329
|
timeTooltip.style.opacity = '1';
|
|
5330
|
+
|
|
5331
|
+
// Add pulse animation on first hover
|
|
5332
|
+
if (!timeTooltip.classList.contains('pulse') && timeTooltip.style.opacity === '1') {
|
|
5333
|
+
timeTooltip.classList.add('pulse');
|
|
5334
|
+
setTimeout(() => {
|
|
5335
|
+
timeTooltip.classList.remove('pulse');
|
|
5336
|
+
}, 600);
|
|
5337
|
+
}
|
|
5170
5338
|
}
|
|
5171
5339
|
|
|
5172
5340
|
private hideTimeTooltip(): void {
|
|
@@ -5179,6 +5347,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
5179
5347
|
private updateProgressTooltip(e: MouseEvent): void {
|
|
5180
5348
|
const progressBar = document.getElementById('uvf-progress-bar');
|
|
5181
5349
|
const timeTooltip = document.getElementById('uvf-time-tooltip');
|
|
5350
|
+
const progressHandle = document.getElementById('uvf-progress-handle');
|
|
5182
5351
|
if (!progressBar || !timeTooltip || !this.video) return;
|
|
5183
5352
|
|
|
5184
5353
|
const rect = progressBar.getBoundingClientRect();
|
|
@@ -5189,6 +5358,12 @@ export class WebPlayer extends BasePlayer {
|
|
|
5189
5358
|
timeTooltip.textContent = this.formatTime(time);
|
|
5190
5359
|
timeTooltip.style.left = percent + '%';
|
|
5191
5360
|
timeTooltip.style.opacity = '1';
|
|
5361
|
+
|
|
5362
|
+
// Add visual feedback during dragging
|
|
5363
|
+
if (progressHandle && this.isDragging) {
|
|
5364
|
+
progressHandle.style.transform = 'translate(-50%, -50%) scale(1.4)';
|
|
5365
|
+
progressHandle.classList.add('dragging');
|
|
5366
|
+
}
|
|
5192
5367
|
}
|
|
5193
5368
|
|
|
5194
5369
|
|