unified-video-framework 1.4.189 → 1.4.191
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.
|
@@ -3651,25 +3651,35 @@ export class WebPlayer extends BasePlayer {
|
|
|
3651
3651
|
margin-left: 10px;
|
|
3652
3652
|
}
|
|
3653
3653
|
|
|
3654
|
-
/*
|
|
3655
|
-
.uvf-
|
|
3654
|
+
/* Top Bar Container - Contains Title (left) and Controls (right) */
|
|
3655
|
+
.uvf-top-bar {
|
|
3656
3656
|
position: absolute;
|
|
3657
3657
|
top: 0;
|
|
3658
3658
|
left: 0;
|
|
3659
3659
|
right: 0;
|
|
3660
3660
|
padding: 20px;
|
|
3661
3661
|
z-index: 7;
|
|
3662
|
+
display: flex;
|
|
3663
|
+
justify-content: space-between;
|
|
3664
|
+
align-items: flex-start;
|
|
3665
|
+
gap: 20px;
|
|
3662
3666
|
opacity: 0;
|
|
3663
3667
|
transform: translateY(-10px);
|
|
3664
3668
|
transition: all 0.3s ease;
|
|
3665
3669
|
}
|
|
3666
3670
|
|
|
3667
|
-
.uvf-player-wrapper:hover .uvf-
|
|
3668
|
-
.uvf-player-wrapper.controls-visible .uvf-
|
|
3671
|
+
.uvf-player-wrapper:hover .uvf-top-bar,
|
|
3672
|
+
.uvf-player-wrapper.controls-visible .uvf-top-bar {
|
|
3669
3673
|
opacity: 1;
|
|
3670
3674
|
transform: translateY(0);
|
|
3671
3675
|
}
|
|
3672
3676
|
|
|
3677
|
+
/* Title Bar - Left side of top bar */
|
|
3678
|
+
.uvf-title-bar {
|
|
3679
|
+
flex: 0 1 auto;
|
|
3680
|
+
max-width: 60%;
|
|
3681
|
+
}
|
|
3682
|
+
|
|
3673
3683
|
.uvf-title-content {
|
|
3674
3684
|
display: flex;
|
|
3675
3685
|
align-items: center;
|
|
@@ -3811,24 +3821,15 @@ export class WebPlayer extends BasePlayer {
|
|
|
3811
3821
|
}
|
|
3812
3822
|
}
|
|
3813
3823
|
|
|
3814
|
-
/* Top Controls -
|
|
3824
|
+
/* Top Controls - Right side of top bar */
|
|
3815
3825
|
.uvf-top-controls {
|
|
3816
3826
|
display: flex;
|
|
3817
3827
|
align-items: center;
|
|
3818
3828
|
justify-content: flex-end;
|
|
3819
3829
|
gap: 12px;
|
|
3820
|
-
|
|
3821
|
-
transform: translateY(-10px);
|
|
3822
|
-
transition: all 0.3s ease;
|
|
3830
|
+
flex-shrink: 0;
|
|
3823
3831
|
}
|
|
3824
|
-
|
|
3825
|
-
.uvf-player-wrapper:hover .uvf-top-controls,
|
|
3826
|
-
.uvf-player-wrapper.controls-visible .uvf-top-controls,
|
|
3827
|
-
.uvf-player-wrapper.uvf-casting .uvf-top-controls {
|
|
3828
|
-
opacity: 1;
|
|
3829
|
-
transform: translateY(0);
|
|
3830
|
-
}
|
|
3831
|
-
|
|
3832
|
+
|
|
3832
3833
|
.uvf-top-btn {
|
|
3833
3834
|
width: 40px;
|
|
3834
3835
|
height: 40px;
|
|
@@ -4053,9 +4054,8 @@ export class WebPlayer extends BasePlayer {
|
|
|
4053
4054
|
100% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
|
|
4054
4055
|
}
|
|
4055
4056
|
|
|
4056
|
-
/* Hide top
|
|
4057
|
-
.uvf-player-wrapper.no-cursor .uvf-
|
|
4058
|
-
.uvf-player-wrapper.no-cursor .uvf-top-controls {
|
|
4057
|
+
/* Hide top bar when no cursor */
|
|
4058
|
+
.uvf-player-wrapper.no-cursor .uvf-top-bar {
|
|
4059
4059
|
opacity: 0 !important;
|
|
4060
4060
|
transform: translateY(-10px) !important;
|
|
4061
4061
|
pointer-events: none;
|
|
@@ -4140,8 +4140,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
4140
4140
|
}
|
|
4141
4141
|
|
|
4142
4142
|
/* Ensure overlays remain visible in fullscreen with consistent spacing */
|
|
4143
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-
|
|
4144
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-top-controls,
|
|
4143
|
+
.uvf-player-wrapper.uvf-fullscreen .uvf-top-bar,
|
|
4145
4144
|
.uvf-player-wrapper.uvf-fullscreen .uvf-controls-bar,
|
|
4146
4145
|
.uvf-player-wrapper.uvf-fullscreen .uvf-top-gradient,
|
|
4147
4146
|
.uvf-player-wrapper.uvf-fullscreen .uvf-controls-gradient {
|
|
@@ -4156,19 +4155,13 @@ export class WebPlayer extends BasePlayer {
|
|
|
4156
4155
|
gap: 15px; /* Consistent gap in fullscreen */
|
|
4157
4156
|
}
|
|
4158
4157
|
|
|
4159
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-
|
|
4158
|
+
.uvf-player-wrapper.uvf-fullscreen .uvf-top-bar {
|
|
4160
4159
|
padding: 20px 30px;
|
|
4161
4160
|
}
|
|
4162
4161
|
|
|
4163
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-top-controls {
|
|
4164
|
-
gap: 10px;
|
|
4165
|
-
}
|
|
4166
|
-
|
|
4167
4162
|
/* Fullscreen hover and visibility states */
|
|
4168
|
-
.uvf-player-wrapper.uvf-fullscreen:hover .uvf-
|
|
4169
|
-
.uvf-player-wrapper.uvf-fullscreen
|
|
4170
|
-
.uvf-player-wrapper.uvf-fullscreen.controls-visible .uvf-title-bar,
|
|
4171
|
-
.uvf-player-wrapper.uvf-fullscreen.controls-visible .uvf-top-controls {
|
|
4163
|
+
.uvf-player-wrapper.uvf-fullscreen:hover .uvf-top-bar,
|
|
4164
|
+
.uvf-player-wrapper.uvf-fullscreen.controls-visible .uvf-top-bar {
|
|
4172
4165
|
opacity: 1;
|
|
4173
4166
|
transform: translateY(0);
|
|
4174
4167
|
}
|
|
@@ -4492,42 +4485,53 @@ export class WebPlayer extends BasePlayer {
|
|
|
4492
4485
|
display: none !important;
|
|
4493
4486
|
}
|
|
4494
4487
|
|
|
4495
|
-
/*
|
|
4496
|
-
.uvf-video-container .uvf-
|
|
4497
|
-
.uvf-responsive-container .uvf-video-container .uvf-
|
|
4498
|
-
display: flex !important;
|
|
4488
|
+
/* Top bar container - Mobile portrait uses separate positioning */
|
|
4489
|
+
.uvf-video-container .uvf-top-bar,
|
|
4490
|
+
.uvf-responsive-container .uvf-video-container .uvf-top-bar {
|
|
4499
4491
|
position: absolute !important;
|
|
4500
4492
|
top: 12px !important;
|
|
4501
4493
|
left: 16px !important;
|
|
4502
|
-
right:
|
|
4503
|
-
width: auto !important;
|
|
4504
|
-
max-width: 50% !important;
|
|
4505
|
-
height: auto !important;
|
|
4494
|
+
right: 16px !important;
|
|
4506
4495
|
padding: 0 !important;
|
|
4507
|
-
background: transparent !important;
|
|
4508
4496
|
z-index: 10 !important;
|
|
4509
4497
|
opacity: 0 !important;
|
|
4510
4498
|
transform: translateY(-10px) !important;
|
|
4511
4499
|
transition: opacity 0.3s ease, transform 0.3s ease !important;
|
|
4512
|
-
|
|
4513
|
-
justify-content:
|
|
4500
|
+
display: flex !important;
|
|
4501
|
+
justify-content: space-between !important;
|
|
4514
4502
|
align-items: flex-start !important;
|
|
4503
|
+
gap: 12px !important;
|
|
4515
4504
|
}
|
|
4516
4505
|
|
|
4517
|
-
/* Show
|
|
4518
|
-
.uvf-player-wrapper:hover .uvf-
|
|
4519
|
-
.uvf-player-wrapper.controls-visible .uvf-
|
|
4506
|
+
/* Show top bar when controls are visible or on hover */
|
|
4507
|
+
.uvf-player-wrapper:hover .uvf-top-bar,
|
|
4508
|
+
.uvf-player-wrapper.controls-visible .uvf-top-bar {
|
|
4520
4509
|
opacity: 1 !important;
|
|
4521
4510
|
transform: translateY(0) !important;
|
|
4522
4511
|
}
|
|
4523
4512
|
|
|
4524
|
-
/* Hide
|
|
4525
|
-
.uvf-player-wrapper.no-cursor .uvf-
|
|
4513
|
+
/* Hide top bar when controls are hidden (no-cursor class) */
|
|
4514
|
+
.uvf-player-wrapper.no-cursor .uvf-top-bar {
|
|
4526
4515
|
opacity: 0 !important;
|
|
4527
4516
|
transform: translateY(-10px) !important;
|
|
4528
4517
|
pointer-events: none !important;
|
|
4529
4518
|
}
|
|
4530
4519
|
|
|
4520
|
+
/* Title bar within top bar - mobile portrait */
|
|
4521
|
+
.uvf-video-container .uvf-top-bar .uvf-title-bar,
|
|
4522
|
+
.uvf-responsive-container .uvf-video-container .uvf-top-bar .uvf-title-bar {
|
|
4523
|
+
display: flex !important;
|
|
4524
|
+
width: auto !important;
|
|
4525
|
+
max-width: 50% !important;
|
|
4526
|
+
height: auto !important;
|
|
4527
|
+
padding: 0 !important;
|
|
4528
|
+
background: transparent !important;
|
|
4529
|
+
flex-direction: column !important;
|
|
4530
|
+
justify-content: flex-start !important;
|
|
4531
|
+
align-items: flex-start !important;
|
|
4532
|
+
position: relative !important;
|
|
4533
|
+
}
|
|
4534
|
+
|
|
4531
4535
|
/* Title content layout */
|
|
4532
4536
|
.uvf-title-bar .uvf-title-content {
|
|
4533
4537
|
display: flex !important;
|
|
@@ -4581,35 +4585,23 @@ export class WebPlayer extends BasePlayer {
|
|
|
4581
4585
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) !important;
|
|
4582
4586
|
}
|
|
4583
4587
|
|
|
4584
|
-
/* Top controls
|
|
4585
|
-
.uvf-video-container .uvf-top-controls,
|
|
4586
|
-
.uvf-responsive-container .uvf-video-container .uvf-top-controls {
|
|
4588
|
+
/* Top controls within top bar - mobile portrait */
|
|
4589
|
+
.uvf-video-container .uvf-top-bar .uvf-top-controls,
|
|
4590
|
+
.uvf-responsive-container .uvf-video-container .uvf-top-bar .uvf-top-controls {
|
|
4587
4591
|
display: flex !important;
|
|
4588
|
-
opacity: 0 !important;
|
|
4589
|
-
transform: translateY(-10px) !important;
|
|
4590
|
-
transition: opacity 0.3s ease, transform 0.3s ease !important;
|
|
4591
4592
|
gap: 12px !important;
|
|
4592
4593
|
align-items: flex-start !important;
|
|
4593
4594
|
justify-content: flex-end !important;
|
|
4594
4595
|
flex-direction: row !important;
|
|
4596
|
+
position: relative !important;
|
|
4595
4597
|
}
|
|
4596
4598
|
|
|
4597
|
-
/*
|
|
4598
|
-
.uvf-player-wrapper
|
|
4599
|
-
.uvf-player-wrapper.controls-visible .uvf-top-controls,
|
|
4600
|
-
.uvf-player-wrapper.uvf-casting .uvf-top-controls {
|
|
4599
|
+
/* Keep top bar visible when casting */
|
|
4600
|
+
.uvf-player-wrapper.uvf-casting .uvf-top-bar {
|
|
4601
4601
|
opacity: 1 !important;
|
|
4602
4602
|
transform: translateY(0) !important;
|
|
4603
4603
|
}
|
|
4604
4604
|
|
|
4605
|
-
/* Hide top controls when controls are hidden (no-cursor class) */
|
|
4606
|
-
/* Exception: Keep visible when casting */
|
|
4607
|
-
.uvf-player-wrapper.no-cursor:not(.uvf-casting) .uvf-top-controls {
|
|
4608
|
-
opacity: 0 !important;
|
|
4609
|
-
transform: translateY(-10px) !important;
|
|
4610
|
-
pointer-events: none !important;
|
|
4611
|
-
}
|
|
4612
|
-
|
|
4613
4605
|
/* Material You top buttons (cast & share) */
|
|
4614
4606
|
.uvf-top-controls .uvf-top-btn {
|
|
4615
4607
|
width: 48px !important;
|
|
@@ -4841,21 +4833,17 @@ export class WebPlayer extends BasePlayer {
|
|
|
4841
4833
|
height: 22px;
|
|
4842
4834
|
}
|
|
4843
4835
|
|
|
4844
|
-
/*
|
|
4845
|
-
.uvf-top-
|
|
4846
|
-
.uvf-video-container .uvf-top-
|
|
4847
|
-
.uvf-responsive-container .uvf-video-container .uvf-top-
|
|
4848
|
-
|
|
4836
|
+
/* Top bar for landscape - compact padding */
|
|
4837
|
+
.uvf-top-bar,
|
|
4838
|
+
.uvf-video-container .uvf-top-bar,
|
|
4839
|
+
.uvf-responsive-container .uvf-video-container .uvf-top-bar {
|
|
4840
|
+
padding: 8px 12px !important;
|
|
4841
|
+
padding-top: calc(8px + var(--uvf-safe-area-top)) !important;
|
|
4842
|
+
padding-left: calc(12px + var(--uvf-safe-area-left)) !important;
|
|
4843
|
+
padding-right: calc(12px + var(--uvf-safe-area-right)) !important;
|
|
4849
4844
|
gap: 6px !important;
|
|
4850
4845
|
}
|
|
4851
4846
|
|
|
4852
|
-
.uvf-title-bar {
|
|
4853
|
-
padding: 8px 12px;
|
|
4854
|
-
padding-top: calc(8px + var(--uvf-safe-area-top));
|
|
4855
|
-
padding-left: calc(12px + var(--uvf-safe-area-left));
|
|
4856
|
-
padding-right: calc(12px + var(--uvf-safe-area-right));
|
|
4857
|
-
}
|
|
4858
|
-
|
|
4859
4847
|
.uvf-top-btn {
|
|
4860
4848
|
width: 40px;
|
|
4861
4849
|
height: 40px;
|
|
@@ -4868,8 +4856,9 @@ export class WebPlayer extends BasePlayer {
|
|
|
4868
4856
|
height: 18px;
|
|
4869
4857
|
}
|
|
4870
4858
|
|
|
4871
|
-
|
|
4872
|
-
|
|
4859
|
+
/* Title bar within top bar - landscape */
|
|
4860
|
+
.uvf-top-bar .uvf-title-bar {
|
|
4861
|
+
padding: 0;
|
|
4873
4862
|
}
|
|
4874
4863
|
|
|
4875
4864
|
.uvf-video-title {
|
|
@@ -4901,12 +4890,11 @@ export class WebPlayer extends BasePlayer {
|
|
|
4901
4890
|
height: 16px;
|
|
4902
4891
|
}
|
|
4903
4892
|
|
|
4904
|
-
/* Top
|
|
4905
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-top-
|
|
4906
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-video-container .uvf-top-
|
|
4907
|
-
.uvf-responsive-container .uvf-player-wrapper.uvf-fullscreen .uvf-top-
|
|
4908
|
-
.uvf-responsive-container .uvf-player-wrapper.uvf-fullscreen .uvf-video-container .uvf-top-
|
|
4909
|
-
justify-content: flex-end !important;
|
|
4893
|
+
/* Top bar in fullscreen landscape */
|
|
4894
|
+
.uvf-player-wrapper.uvf-fullscreen .uvf-top-bar,
|
|
4895
|
+
.uvf-player-wrapper.uvf-fullscreen .uvf-video-container .uvf-top-bar,
|
|
4896
|
+
.uvf-responsive-container .uvf-player-wrapper.uvf-fullscreen .uvf-top-bar,
|
|
4897
|
+
.uvf-responsive-container .uvf-player-wrapper.uvf-fullscreen .uvf-video-container .uvf-top-bar {
|
|
4910
4898
|
display: flex !important;
|
|
4911
4899
|
}
|
|
4912
4900
|
}
|
|
@@ -4966,13 +4954,10 @@ export class WebPlayer extends BasePlayer {
|
|
|
4966
4954
|
height: 19px;
|
|
4967
4955
|
}
|
|
4968
4956
|
|
|
4969
|
-
|
|
4970
|
-
|
|
4971
|
-
gap: 8px;
|
|
4972
|
-
}
|
|
4973
|
-
|
|
4974
|
-
.uvf-title-bar {
|
|
4957
|
+
/* Top bar for tablet */
|
|
4958
|
+
.uvf-top-bar {
|
|
4975
4959
|
padding: 16px;
|
|
4960
|
+
gap: 12px;
|
|
4976
4961
|
}
|
|
4977
4962
|
|
|
4978
4963
|
.uvf-video-title {
|
|
@@ -5124,18 +5109,10 @@ export class WebPlayer extends BasePlayer {
|
|
|
5124
5109
|
height: 20px;
|
|
5125
5110
|
}
|
|
5126
5111
|
|
|
5127
|
-
|
|
5128
|
-
|
|
5129
|
-
top: 20px;
|
|
5130
|
-
right: 20px;
|
|
5131
|
-
display: flex;
|
|
5132
|
-
align-items: center;
|
|
5133
|
-
gap: 12px;
|
|
5134
|
-
z-index: 10;
|
|
5135
|
-
}
|
|
5136
|
-
|
|
5137
|
-
.uvf-title-bar {
|
|
5112
|
+
/* Top bar for desktop 1024px+ */
|
|
5113
|
+
.uvf-top-bar {
|
|
5138
5114
|
padding: 20px;
|
|
5115
|
+
gap: 20px;
|
|
5139
5116
|
}
|
|
5140
5117
|
|
|
5141
5118
|
.uvf-video-title {
|
|
@@ -5597,7 +5574,11 @@ export class WebPlayer extends BasePlayer {
|
|
|
5597
5574
|
controlsGradient.className = 'uvf-controls-gradient';
|
|
5598
5575
|
container.appendChild(controlsGradient);
|
|
5599
5576
|
|
|
5600
|
-
//
|
|
5577
|
+
// Combined top bar: title on left, controls on right
|
|
5578
|
+
const topBar = document.createElement('div');
|
|
5579
|
+
topBar.className = 'uvf-top-bar';
|
|
5580
|
+
|
|
5581
|
+
// Title bar (left side)
|
|
5601
5582
|
const titleBar = document.createElement('div');
|
|
5602
5583
|
titleBar.className = 'uvf-title-bar';
|
|
5603
5584
|
titleBar.innerHTML = `
|
|
@@ -5609,9 +5590,9 @@ export class WebPlayer extends BasePlayer {
|
|
|
5609
5590
|
</div>
|
|
5610
5591
|
</div>
|
|
5611
5592
|
`;
|
|
5612
|
-
|
|
5593
|
+
topBar.appendChild(titleBar);
|
|
5613
5594
|
|
|
5614
|
-
//
|
|
5595
|
+
// Top controls (right side - Cast and Share buttons)
|
|
5615
5596
|
const topControls = document.createElement('div');
|
|
5616
5597
|
topControls.className = 'uvf-top-controls';
|
|
5617
5598
|
topControls.innerHTML = `
|
|
@@ -5632,7 +5613,9 @@ export class WebPlayer extends BasePlayer {
|
|
|
5632
5613
|
</svg>
|
|
5633
5614
|
</div>
|
|
5634
5615
|
`;
|
|
5635
|
-
|
|
5616
|
+
topBar.appendChild(topControls);
|
|
5617
|
+
|
|
5618
|
+
container.appendChild(topBar);
|
|
5636
5619
|
|
|
5637
5620
|
// Add loading spinner
|
|
5638
5621
|
const loadingContainer = document.createElement('div');
|