unified-video-framework 1.4.103 → 1.4.105

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.
@@ -1987,18 +1987,22 @@ export class WebPlayer extends BasePlayer {
1987
1987
 
1988
1988
  .uvf-progress-bar-wrapper {
1989
1989
  width: 100%;
1990
- height: 4px;
1990
+ height: 2px;
1991
1991
  position: relative;
1992
- background: rgba(255,255,255,0.2);
1993
- border-radius: 2px;
1992
+ background: rgba(255, 255, 255, 0.15);
1993
+ border-radius: 4px;
1994
1994
  cursor: pointer;
1995
- padding: 12px 0;
1995
+ padding: 6px 0;
1996
1996
  overflow: visible;
1997
- transition: height 0.2s ease;
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: 5px;
2002
+ height: 4px;
2003
+ background: rgba(255, 255, 255, 0.2);
2004
+ border-radius: 6px;
2005
+ transform: scaleY(1.1);
2002
2006
  }
2003
2007
 
2004
2008
  .uvf-progress-buffered {
@@ -2006,11 +2010,56 @@ export class WebPlayer extends BasePlayer {
2006
2010
  top: 0;
2007
2011
  left: 0;
2008
2012
  height: 100%;
2009
- background: rgba(255,255,255,0.4);
2010
- border-radius: 2px;
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: 4px;
2011
2021
  pointer-events: none;
2012
- transition: width 0.2s ease;
2022
+ transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
2013
2023
  z-index: 1;
2024
+ overflow: hidden;
2025
+ }
2026
+
2027
+ /* Buffered progress loading shimmer effect */
2028
+ .uvf-progress-buffered::before {
2029
+ content: '';
2030
+ position: absolute;
2031
+ top: 0;
2032
+ left: -100%;
2033
+ width: 100%;
2034
+ height: 100%;
2035
+ background: linear-gradient(90deg,
2036
+ transparent 0%,
2037
+ rgba(255, 255, 255, 0.15) 50%,
2038
+ transparent 100%
2039
+ );
2040
+ animation: bufferShimmer 2s infinite;
2041
+ border-radius: 6px;
2042
+ }
2043
+
2044
+ @keyframes bufferShimmer {
2045
+ 0% { left: -100%; }
2046
+ 100% { left: 100%; }
2047
+ }
2048
+
2049
+ .uvf-progress-bar-wrapper:hover .uvf-progress-buffered {
2050
+ border-radius: 6px;
2051
+ background: linear-gradient(90deg,
2052
+ rgba(255, 255, 255, 0.3) 0%,
2053
+ rgba(255, 255, 255, 0.4) 30%,
2054
+ rgba(255, 255, 255, 0.5) 50%,
2055
+ rgba(255, 255, 255, 0.4) 70%,
2056
+ rgba(255, 255, 255, 0.35) 100%
2057
+ );
2058
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
2059
+ }
2060
+
2061
+ .uvf-progress-bar-wrapper:hover .uvf-progress-buffered::before {
2062
+ border-radius: 6px;
2014
2063
  }
2015
2064
 
2016
2065
  .uvf-progress-filled {
@@ -2018,121 +2067,232 @@ export class WebPlayer extends BasePlayer {
2018
2067
  top: 0;
2019
2068
  left: 0;
2020
2069
  height: 100%;
2021
- background: linear-gradient(90deg, #ff5722, #ff7043);
2022
- border-radius: 2px;
2070
+ background: linear-gradient(90deg,
2071
+ #ff4500 0%,
2072
+ #ff5722 25%,
2073
+ #ff6b35 50%,
2074
+ #ff7043 75%,
2075
+ #ff8c69 100%
2076
+ );
2077
+ border-radius: 4px;
2023
2078
  pointer-events: none;
2024
- transition: width 0.2s ease;
2079
+ transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
2025
2080
  z-index: 2;
2081
+ box-shadow: 0 0 12px rgba(255, 87, 34, 0.3);
2082
+ }
2083
+
2084
+ .uvf-progress-bar-wrapper:hover .uvf-progress-filled {
2085
+ border-radius: 6px;
2086
+ background: linear-gradient(90deg,
2087
+ #ff4500 0%,
2088
+ #ff5722 20%,
2089
+ #ff6b35 40%,
2090
+ #ff7043 60%,
2091
+ #ff8c69 80%,
2092
+ #ffa500 100%
2093
+ );
2094
+ box-shadow: 0 0 20px rgba(255, 87, 34, 0.5);
2026
2095
  }
2027
2096
 
2028
2097
  .uvf-progress-handle {
2029
2098
  position: absolute;
2030
2099
  width: 12px;
2031
2100
  height: 12px;
2032
- background: #ffffff;
2033
- border: 2px solid #ff5722;
2101
+ background: radial-gradient(circle,
2102
+ rgba(255, 255, 255, 0.95) 0%,
2103
+ rgba(255, 255, 255, 0.9) 70%,
2104
+ rgba(255, 255, 255, 0.85) 100%
2105
+ );
2106
+ border: 2px solid rgba(255, 87, 34, 0.8);
2034
2107
  border-radius: 50%;
2035
2108
  top: 50%;
2036
- transform: translate(-50%, -50%);
2109
+ left: 0%;
2110
+ transform: translate(-50%, -50%) scale(0);
2037
2111
  opacity: 0;
2038
- transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
2039
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
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.15);
2052
- box-shadow: 0 3px 12px rgba(255, 87, 34, 0.4);
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.3);
2059
- box-shadow: 0 4px 16px rgba(255, 87, 34, 0.6);
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: 24px;
2165
+ bottom: 32px;
2065
2166
  left: 50%;
2066
- transform: translateX(-50%);
2067
- background: rgba(0, 0, 0, 0.95);
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: 8px 14px;
2070
- border-radius: 8px;
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.25s cubic-bezier(0.4, 0, 0.2, 1);
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: 0 6px 20px rgba(0, 0, 0, 0.4);
2079
- backdrop-filter: blur(12px);
2080
- border: 1px solid rgba(255, 255, 255, 0.1);
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: -8px;
2200
+ bottom: -10px;
2087
2201
  left: 50%;
2088
2202
  transform: translateX(-50%);
2089
2203
  width: 0;
2090
2204
  height: 0;
2091
- border-left: 8px solid transparent;
2092
- border-right: 8px solid transparent;
2093
- border-top: 8px solid rgba(0, 0, 0, 0.95);
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: -9px;
2214
+ bottom: -11px;
2100
2215
  left: 50%;
2101
2216
  transform: translateX(-50%);
2102
2217
  width: 0;
2103
2218
  height: 0;
2104
- border-left: 9px solid transparent;
2105
- border-right: 9px solid transparent;
2106
- border-top: 9px solid rgba(255, 255, 255, 0.1);
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
- /* Mobile responsive handle sizing */
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: 3px; /* Slightly thicker on mobile */
2247
+ }
2248
+
2249
+ .uvf-progress-bar-wrapper:hover {
2250
+ height: 5px;
2251
+ }
2252
+
2117
2253
  .uvf-progress-handle {
2118
- width: 16px;
2119
- height: 16px;
2120
- margin-left: -8px;
2121
- opacity: 0.7; /* Slightly visible always on mobile */
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: translateY(-50%) scale(1.1);
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: translateY(-50%) scale(1.25);
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 */
@@ -3133,7 +3293,7 @@ export class WebPlayer extends BasePlayer {
3133
3293
 
3134
3294
  /* Enhanced progress bar for touch */
3135
3295
  .uvf-progress-bar-wrapper {
3136
- height: 8px;
3296
+ height: 3px;
3137
3297
  margin-bottom: 12px;
3138
3298
  border-radius: 4px;
3139
3299
  background: rgba(255,255,255,0.15);
@@ -3320,7 +3480,7 @@ export class WebPlayer extends BasePlayer {
3320
3480
 
3321
3481
  /* Compact progress bar for landscape */
3322
3482
  .uvf-progress-bar-wrapper {
3323
- height: 6px;
3483
+ height: 3px;
3324
3484
  margin-bottom: 8px;
3325
3485
  }
3326
3486
 
@@ -3446,7 +3606,7 @@ export class WebPlayer extends BasePlayer {
3446
3606
 
3447
3607
  /* Tablet progress bar */
3448
3608
  .uvf-progress-bar-wrapper {
3449
- height: 7px;
3609
+ height: 3px;
3450
3610
  }
3451
3611
 
3452
3612
  .uvf-progress-handle {
@@ -3785,7 +3945,7 @@ export class WebPlayer extends BasePlayer {
3785
3945
  }
3786
3946
 
3787
3947
  .uvf-progress-bar-wrapper {
3788
- height: 8px;
3948
+ height: 3px;
3789
3949
  cursor: pointer;
3790
3950
  }
3791
3951
 
@@ -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