unified-video-framework 1.4.188 → 1.4.190
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,29 +3821,13 @@ 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
|
-
position: absolute;
|
|
3817
|
-
top: 20px;
|
|
3818
|
-
right: 0;
|
|
3819
|
-
left: 0;
|
|
3820
|
-
z-index: 10;
|
|
3821
3826
|
display: flex;
|
|
3822
3827
|
align-items: center;
|
|
3823
3828
|
justify-content: flex-end;
|
|
3824
3829
|
gap: 12px;
|
|
3825
|
-
|
|
3826
|
-
padding-left: 20px;
|
|
3827
|
-
opacity: 0;
|
|
3828
|
-
transform: translateY(-10px);
|
|
3829
|
-
transition: all 0.3s ease;
|
|
3830
|
-
}
|
|
3831
|
-
|
|
3832
|
-
.uvf-player-wrapper:hover .uvf-top-controls,
|
|
3833
|
-
.uvf-player-wrapper.controls-visible .uvf-top-controls,
|
|
3834
|
-
.uvf-player-wrapper.uvf-casting .uvf-top-controls {
|
|
3835
|
-
opacity: 1;
|
|
3836
|
-
transform: translateY(0);
|
|
3830
|
+
flex-shrink: 0;
|
|
3837
3831
|
}
|
|
3838
3832
|
|
|
3839
3833
|
.uvf-top-btn {
|
|
@@ -4060,9 +4054,8 @@ export class WebPlayer extends BasePlayer {
|
|
|
4060
4054
|
100% { opacity: 0; transform: translate(-50%, -50%) scale(0.8); }
|
|
4061
4055
|
}
|
|
4062
4056
|
|
|
4063
|
-
/* Hide top
|
|
4064
|
-
.uvf-player-wrapper.no-cursor .uvf-
|
|
4065
|
-
.uvf-player-wrapper.no-cursor .uvf-top-controls {
|
|
4057
|
+
/* Hide top bar when no cursor */
|
|
4058
|
+
.uvf-player-wrapper.no-cursor .uvf-top-bar {
|
|
4066
4059
|
opacity: 0 !important;
|
|
4067
4060
|
transform: translateY(-10px) !important;
|
|
4068
4061
|
pointer-events: none;
|
|
@@ -4147,8 +4140,7 @@ export class WebPlayer extends BasePlayer {
|
|
|
4147
4140
|
}
|
|
4148
4141
|
|
|
4149
4142
|
/* Ensure overlays remain visible in fullscreen with consistent spacing */
|
|
4150
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-
|
|
4151
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-top-controls,
|
|
4143
|
+
.uvf-player-wrapper.uvf-fullscreen .uvf-top-bar,
|
|
4152
4144
|
.uvf-player-wrapper.uvf-fullscreen .uvf-controls-bar,
|
|
4153
4145
|
.uvf-player-wrapper.uvf-fullscreen .uvf-top-gradient,
|
|
4154
4146
|
.uvf-player-wrapper.uvf-fullscreen .uvf-controls-gradient {
|
|
@@ -4163,22 +4155,13 @@ export class WebPlayer extends BasePlayer {
|
|
|
4163
4155
|
gap: 15px; /* Consistent gap in fullscreen */
|
|
4164
4156
|
}
|
|
4165
4157
|
|
|
4166
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-
|
|
4158
|
+
.uvf-player-wrapper.uvf-fullscreen .uvf-top-bar {
|
|
4167
4159
|
padding: 20px 30px;
|
|
4168
4160
|
}
|
|
4169
4161
|
|
|
4170
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-top-controls {
|
|
4171
|
-
top: 20px;
|
|
4172
|
-
padding-right: 30px;
|
|
4173
|
-
padding-left: 30px;
|
|
4174
|
-
gap: 10px;
|
|
4175
|
-
}
|
|
4176
|
-
|
|
4177
4162
|
/* Fullscreen hover and visibility states */
|
|
4178
|
-
.uvf-player-wrapper.uvf-fullscreen:hover .uvf-
|
|
4179
|
-
.uvf-player-wrapper.uvf-fullscreen
|
|
4180
|
-
.uvf-player-wrapper.uvf-fullscreen.controls-visible .uvf-title-bar,
|
|
4181
|
-
.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 {
|
|
4182
4165
|
opacity: 1;
|
|
4183
4166
|
transform: translateY(0);
|
|
4184
4167
|
}
|
|
@@ -4502,42 +4485,53 @@ export class WebPlayer extends BasePlayer {
|
|
|
4502
4485
|
display: none !important;
|
|
4503
4486
|
}
|
|
4504
4487
|
|
|
4505
|
-
/*
|
|
4506
|
-
.uvf-video-container .uvf-
|
|
4507
|
-
.uvf-responsive-container .uvf-video-container .uvf-
|
|
4508
|
-
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 {
|
|
4509
4491
|
position: absolute !important;
|
|
4510
4492
|
top: 12px !important;
|
|
4511
4493
|
left: 16px !important;
|
|
4512
|
-
right:
|
|
4513
|
-
width: auto !important;
|
|
4514
|
-
max-width: 50% !important;
|
|
4515
|
-
height: auto !important;
|
|
4494
|
+
right: 16px !important;
|
|
4516
4495
|
padding: 0 !important;
|
|
4517
|
-
background: transparent !important;
|
|
4518
4496
|
z-index: 10 !important;
|
|
4519
4497
|
opacity: 0 !important;
|
|
4520
4498
|
transform: translateY(-10px) !important;
|
|
4521
4499
|
transition: opacity 0.3s ease, transform 0.3s ease !important;
|
|
4522
|
-
|
|
4523
|
-
justify-content:
|
|
4500
|
+
display: flex !important;
|
|
4501
|
+
justify-content: space-between !important;
|
|
4524
4502
|
align-items: flex-start !important;
|
|
4503
|
+
gap: 12px !important;
|
|
4525
4504
|
}
|
|
4526
4505
|
|
|
4527
|
-
/* Show
|
|
4528
|
-
.uvf-player-wrapper:hover .uvf-
|
|
4529
|
-
.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 {
|
|
4530
4509
|
opacity: 1 !important;
|
|
4531
4510
|
transform: translateY(0) !important;
|
|
4532
4511
|
}
|
|
4533
4512
|
|
|
4534
|
-
/* Hide
|
|
4535
|
-
.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 {
|
|
4536
4515
|
opacity: 0 !important;
|
|
4537
4516
|
transform: translateY(-10px) !important;
|
|
4538
4517
|
pointer-events: none !important;
|
|
4539
4518
|
}
|
|
4540
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
|
+
|
|
4541
4535
|
/* Title content layout */
|
|
4542
4536
|
.uvf-title-bar .uvf-title-content {
|
|
4543
4537
|
display: flex !important;
|
|
@@ -4591,45 +4585,23 @@ export class WebPlayer extends BasePlayer {
|
|
|
4591
4585
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) !important;
|
|
4592
4586
|
}
|
|
4593
4587
|
|
|
4594
|
-
/* Top controls
|
|
4595
|
-
.uvf-video-container .uvf-top-controls,
|
|
4596
|
-
.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 {
|
|
4597
4591
|
display: flex !important;
|
|
4598
|
-
position: absolute !important;
|
|
4599
|
-
top: 12px !important;
|
|
4600
|
-
left: 0 !important;
|
|
4601
|
-
right: 0 !important;
|
|
4602
|
-
width: 100% !important;
|
|
4603
|
-
height: auto !important;
|
|
4604
|
-
padding-left: 16px !important;
|
|
4605
|
-
padding-right: 16px !important;
|
|
4606
|
-
background: transparent !important;
|
|
4607
|
-
z-index: 10 !important;
|
|
4608
|
-
opacity: 0 !important;
|
|
4609
|
-
transform: translateY(-10px) !important;
|
|
4610
|
-
transition: opacity 0.3s ease, transform 0.3s ease !important;
|
|
4611
4592
|
gap: 12px !important;
|
|
4612
4593
|
align-items: flex-start !important;
|
|
4613
4594
|
justify-content: flex-end !important;
|
|
4614
4595
|
flex-direction: row !important;
|
|
4596
|
+
position: relative !important;
|
|
4615
4597
|
}
|
|
4616
4598
|
|
|
4617
|
-
/*
|
|
4618
|
-
.uvf-player-wrapper
|
|
4619
|
-
.uvf-player-wrapper.controls-visible .uvf-top-controls,
|
|
4620
|
-
.uvf-player-wrapper.uvf-casting .uvf-top-controls {
|
|
4599
|
+
/* Keep top bar visible when casting */
|
|
4600
|
+
.uvf-player-wrapper.uvf-casting .uvf-top-bar {
|
|
4621
4601
|
opacity: 1 !important;
|
|
4622
4602
|
transform: translateY(0) !important;
|
|
4623
4603
|
}
|
|
4624
4604
|
|
|
4625
|
-
/* Hide top controls when controls are hidden (no-cursor class) */
|
|
4626
|
-
/* Exception: Keep visible when casting */
|
|
4627
|
-
.uvf-player-wrapper.no-cursor:not(.uvf-casting) .uvf-top-controls {
|
|
4628
|
-
opacity: 0 !important;
|
|
4629
|
-
transform: translateY(-10px) !important;
|
|
4630
|
-
pointer-events: none !important;
|
|
4631
|
-
}
|
|
4632
|
-
|
|
4633
4605
|
/* Material You top buttons (cast & share) */
|
|
4634
4606
|
.uvf-top-controls .uvf-top-btn {
|
|
4635
4607
|
width: 48px !important;
|
|
@@ -4861,27 +4833,17 @@ export class WebPlayer extends BasePlayer {
|
|
|
4861
4833
|
height: 22px;
|
|
4862
4834
|
}
|
|
4863
4835
|
|
|
4864
|
-
/*
|
|
4865
|
-
.uvf-top-
|
|
4866
|
-
.uvf-video-container .uvf-top-
|
|
4867
|
-
.uvf-responsive-container .uvf-video-container .uvf-top-
|
|
4868
|
-
|
|
4869
|
-
top: calc(8px + var(--uvf-safe-area-top)) !important;
|
|
4870
|
-
left: 0 !important;
|
|
4871
|
-
right: 0 !important;
|
|
4872
|
-
padding-right: calc(12px + var(--uvf-safe-area-right)) !important;
|
|
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;
|
|
4873
4842
|
padding-left: calc(12px + var(--uvf-safe-area-left)) !important;
|
|
4874
|
-
|
|
4843
|
+
padding-right: calc(12px + var(--uvf-safe-area-right)) !important;
|
|
4875
4844
|
gap: 6px !important;
|
|
4876
4845
|
}
|
|
4877
4846
|
|
|
4878
|
-
.uvf-title-bar {
|
|
4879
|
-
padding: 8px 12px;
|
|
4880
|
-
padding-top: calc(8px + var(--uvf-safe-area-top));
|
|
4881
|
-
padding-left: calc(12px + var(--uvf-safe-area-left));
|
|
4882
|
-
padding-right: calc(12px + var(--uvf-safe-area-right));
|
|
4883
|
-
}
|
|
4884
|
-
|
|
4885
4847
|
.uvf-top-btn {
|
|
4886
4848
|
width: 40px;
|
|
4887
4849
|
height: 40px;
|
|
@@ -4894,8 +4856,9 @@ export class WebPlayer extends BasePlayer {
|
|
|
4894
4856
|
height: 18px;
|
|
4895
4857
|
}
|
|
4896
4858
|
|
|
4897
|
-
|
|
4898
|
-
|
|
4859
|
+
/* Title bar within top bar - landscape */
|
|
4860
|
+
.uvf-top-bar .uvf-title-bar {
|
|
4861
|
+
padding: 0;
|
|
4899
4862
|
}
|
|
4900
4863
|
|
|
4901
4864
|
.uvf-video-title {
|
|
@@ -4927,40 +4890,16 @@ export class WebPlayer extends BasePlayer {
|
|
|
4927
4890
|
height: 16px;
|
|
4928
4891
|
}
|
|
4929
4892
|
|
|
4930
|
-
/*
|
|
4931
|
-
|
|
4932
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-top-
|
|
4933
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-
|
|
4934
|
-
.uvf-responsive-container .uvf-player-wrapper.uvf-fullscreen .uvf-top-
|
|
4935
|
-
.uvf-responsive-container .uvf-player-wrapper.uvf-fullscreen .uvf-video-container .uvf-top-controls {
|
|
4936
|
-
position: absolute !important;
|
|
4937
|
-
top: calc(8px + var(--uvf-safe-area-top)) !important;
|
|
4938
|
-
left: 0 !important;
|
|
4939
|
-
right: 0 !important;
|
|
4940
|
-
padding-right: calc(12px + var(--uvf-safe-area-right)) !important;
|
|
4941
|
-
padding-left: calc(12px + var(--uvf-safe-area-left)) !important;
|
|
4942
|
-
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 {
|
|
4943
4898
|
display: flex !important;
|
|
4944
4899
|
}
|
|
4945
4900
|
}
|
|
4946
4901
|
}
|
|
4947
4902
|
|
|
4948
|
-
/* Universal fullscreen landscape fix: covers large phones/phablets/tablets */
|
|
4949
|
-
@media screen and (orientation: landscape) {
|
|
4950
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-top-controls,
|
|
4951
|
-
.uvf-player-wrapper.uvf-fullscreen .uvf-video-container .uvf-top-controls,
|
|
4952
|
-
.uvf-responsive-container .uvf-player-wrapper.uvf-fullscreen .uvf-top-controls,
|
|
4953
|
-
.uvf-responsive-container .uvf-player-wrapper.uvf-fullscreen .uvf-video-container .uvf-top-controls {
|
|
4954
|
-
position: absolute !important;
|
|
4955
|
-
top: calc(8px + var(--uvf-safe-area-top)) !important;
|
|
4956
|
-
left: 0 !important;
|
|
4957
|
-
right: 0 !important;
|
|
4958
|
-
padding-right: calc(12px + var(--uvf-safe-area-right)) !important;
|
|
4959
|
-
padding-left: calc(12px + var(--uvf-safe-area-left)) !important;
|
|
4960
|
-
justify-content: flex-end !important;
|
|
4961
|
-
display: flex !important;
|
|
4962
|
-
}
|
|
4963
|
-
}
|
|
4964
4903
|
|
|
4965
4904
|
/* Tablet devices - Enhanced UX with desktop features */
|
|
4966
4905
|
@media screen and (min-width: 768px) and (max-width: 1023px) {
|
|
@@ -5015,15 +4954,14 @@ export class WebPlayer extends BasePlayer {
|
|
|
5015
4954
|
height: 19px;
|
|
5016
4955
|
}
|
|
5017
4956
|
|
|
5018
|
-
|
|
5019
|
-
|
|
5020
|
-
padding
|
|
5021
|
-
|
|
5022
|
-
gap: 8px;
|
|
4957
|
+
/* Top bar for tablet */
|
|
4958
|
+
.uvf-top-bar {
|
|
4959
|
+
padding: 16px;
|
|
4960
|
+
gap: 12px;
|
|
5023
4961
|
}
|
|
5024
4962
|
|
|
5025
|
-
.uvf-
|
|
5026
|
-
|
|
4963
|
+
.uvf-top-controls {
|
|
4964
|
+
gap: 8px;
|
|
5027
4965
|
}
|
|
5028
4966
|
|
|
5029
4967
|
.uvf-video-title {
|
|
@@ -5175,18 +5113,14 @@ export class WebPlayer extends BasePlayer {
|
|
|
5175
5113
|
height: 20px;
|
|
5176
5114
|
}
|
|
5177
5115
|
|
|
5178
|
-
|
|
5179
|
-
|
|
5180
|
-
|
|
5181
|
-
|
|
5182
|
-
display: flex;
|
|
5183
|
-
align-items: center;
|
|
5184
|
-
gap: 12px;
|
|
5185
|
-
z-index: 10;
|
|
5116
|
+
/* Top bar for desktop 1024px+ */
|
|
5117
|
+
.uvf-top-bar {
|
|
5118
|
+
padding: 20px;
|
|
5119
|
+
gap: 20px;
|
|
5186
5120
|
}
|
|
5187
5121
|
|
|
5188
|
-
.uvf-
|
|
5189
|
-
|
|
5122
|
+
.uvf-top-controls {
|
|
5123
|
+
gap: 12px;
|
|
5190
5124
|
}
|
|
5191
5125
|
|
|
5192
5126
|
.uvf-video-title {
|
|
@@ -5648,7 +5582,11 @@ export class WebPlayer extends BasePlayer {
|
|
|
5648
5582
|
controlsGradient.className = 'uvf-controls-gradient';
|
|
5649
5583
|
container.appendChild(controlsGradient);
|
|
5650
5584
|
|
|
5651
|
-
//
|
|
5585
|
+
// Combined top bar: title on left, controls on right
|
|
5586
|
+
const topBar = document.createElement('div');
|
|
5587
|
+
topBar.className = 'uvf-top-bar';
|
|
5588
|
+
|
|
5589
|
+
// Title bar (left side)
|
|
5652
5590
|
const titleBar = document.createElement('div');
|
|
5653
5591
|
titleBar.className = 'uvf-title-bar';
|
|
5654
5592
|
titleBar.innerHTML = `
|
|
@@ -5660,9 +5598,9 @@ export class WebPlayer extends BasePlayer {
|
|
|
5660
5598
|
</div>
|
|
5661
5599
|
</div>
|
|
5662
5600
|
`;
|
|
5663
|
-
|
|
5601
|
+
topBar.appendChild(titleBar);
|
|
5664
5602
|
|
|
5665
|
-
//
|
|
5603
|
+
// Top controls (right side - Cast and Share buttons)
|
|
5666
5604
|
const topControls = document.createElement('div');
|
|
5667
5605
|
topControls.className = 'uvf-top-controls';
|
|
5668
5606
|
topControls.innerHTML = `
|
|
@@ -5683,7 +5621,9 @@ export class WebPlayer extends BasePlayer {
|
|
|
5683
5621
|
</svg>
|
|
5684
5622
|
</div>
|
|
5685
5623
|
`;
|
|
5686
|
-
|
|
5624
|
+
topBar.appendChild(topControls);
|
|
5625
|
+
|
|
5626
|
+
container.appendChild(topBar);
|
|
5687
5627
|
|
|
5688
5628
|
// Add loading spinner
|
|
5689
5629
|
const loadingContainer = document.createElement('div');
|