@videojs/react 10.0.0-beta.5 → 10.0.0-beta.6
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/dist/default/presets/audio/minimal-skin.css +56 -9
- package/dist/default/presets/audio/skin.css +56 -11
- package/dist/default/presets/audio/skin.tailwind.js +1 -1
- package/dist/default/presets/video/minimal-skin.css +169 -25
- package/dist/default/presets/video/minimal-skin.js +23 -4
- package/dist/default/presets/video/minimal-skin.js.map +1 -1
- package/dist/default/presets/video/minimal-skin.tailwind.js +28 -9
- package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/video/skin.css +159 -21
- package/dist/default/presets/video/skin.js +21 -5
- package/dist/default/presets/video/skin.js.map +1 -1
- package/dist/default/presets/video/skin.tailwind.js +26 -10
- package/dist/default/presets/video/skin.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/popup.js +3 -3
- package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/preview.js +13 -0
- package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
- package/dist/default/skins/dist/default/default/tailwind/components/root.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/surface.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +16 -11
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
- package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +18 -12
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/ui/thumbnail/index.js +3 -0
- package/dist/dev/presets/audio/minimal-skin.css +56 -9
- package/dist/dev/presets/audio/skin.css +56 -11
- package/dist/dev/presets/video/minimal-skin.css +169 -25
- package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.js +23 -4
- package/dist/dev/presets/video/minimal-skin.js.map +1 -1
- package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.tailwind.js +27 -8
- package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/presets/video/skin.css +159 -21
- package/dist/dev/presets/video/skin.d.ts.map +1 -1
- package/dist/dev/presets/video/skin.js +20 -4
- package/dist/dev/presets/video/skin.js.map +1 -1
- package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/video/skin.tailwind.js +24 -8
- package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +3 -3
- package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +13 -0
- package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
- package/dist/dev/skins/dist/default/default/tailwind/components/root.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +16 -11
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
- package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +18 -12
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/ui/thumbnail/index.d.ts +2 -0
- package/dist/dev/ui/thumbnail/index.js +3 -0
- package/package.json +7 -7
|
@@ -100,7 +100,6 @@
|
|
|
100
100
|
.media-default-skin *::before,
|
|
101
101
|
.media-default-skin *::after {
|
|
102
102
|
box-sizing: border-box;
|
|
103
|
-
margin: 0;
|
|
104
103
|
}
|
|
105
104
|
.media-default-skin img,
|
|
106
105
|
.media-default-skin video,
|
|
@@ -150,7 +149,7 @@
|
|
|
150
149
|
background-color: var(--media-surface-background-color);
|
|
151
150
|
backdrop-filter: var(--media-surface-backdrop-filter);
|
|
152
151
|
box-shadow:
|
|
153
|
-
|
|
152
|
+
0 0 0 1px var(--media-surface-outer-border-color),
|
|
154
153
|
0 1px 3px 0 var(--media-surface-shadow-color),
|
|
155
154
|
0 1px 2px -1px var(--media-surface-shadow-color);
|
|
156
155
|
|
|
@@ -161,7 +160,7 @@
|
|
|
161
160
|
inset: 0;
|
|
162
161
|
z-index: 10;
|
|
163
162
|
border-radius: inherit;
|
|
164
|
-
box-shadow: 0 0 0 1px var(--media-surface-
|
|
163
|
+
box-shadow: inset 0 0 0 1px var(--media-surface-inner-border-color);
|
|
165
164
|
pointer-events: none;
|
|
166
165
|
}
|
|
167
166
|
|
|
@@ -183,9 +182,11 @@
|
|
|
183
182
|
display: block;
|
|
184
183
|
width: 100%;
|
|
185
184
|
height: 100%;
|
|
185
|
+
object-fit: var(--media-object-fit, contain);
|
|
186
|
+
object-position: var(--media-object-position, center);
|
|
186
187
|
}
|
|
187
188
|
.media-default-skin ::slotted(video) {
|
|
188
|
-
border-radius: var(--media-border-radius
|
|
189
|
+
border-radius: var(--media-video-border-radius);
|
|
189
190
|
}
|
|
190
191
|
.media-default-skin video {
|
|
191
192
|
border-radius: inherit;
|
|
@@ -200,10 +201,11 @@
|
|
|
200
201
|
inset: 0;
|
|
201
202
|
width: 100%;
|
|
202
203
|
height: 100%;
|
|
203
|
-
|
|
204
|
-
object-
|
|
204
|
+
object-fit: var(--media-object-fit, contain);
|
|
205
|
+
object-position: var(--media-object-position, center);
|
|
205
206
|
transition: opacity 0.25s;
|
|
206
207
|
pointer-events: none;
|
|
208
|
+
border-radius: inherit;
|
|
207
209
|
|
|
208
210
|
&:not([data-visible]) {
|
|
209
211
|
opacity: 0;
|
|
@@ -214,14 +216,10 @@
|
|
|
214
216
|
Fullscreen
|
|
215
217
|
========================================================================== */
|
|
216
218
|
|
|
217
|
-
.media-default-skin:fullscreen video,
|
|
218
219
|
.media-default-skin:fullscreen ::slotted(video),
|
|
219
|
-
.media-default-skin:fullscreen
|
|
220
|
+
.media-default-skin:fullscreen video {
|
|
220
221
|
object-fit: contain;
|
|
221
222
|
}
|
|
222
|
-
.media-default-skin:fullscreen ::slotted(video) {
|
|
223
|
-
border-radius: 0;
|
|
224
|
-
}
|
|
225
223
|
|
|
226
224
|
/* ==========================================================================
|
|
227
225
|
Overlay / Scrim
|
|
@@ -434,6 +432,7 @@
|
|
|
434
432
|
transition-timing-function: ease-out;
|
|
435
433
|
cursor: pointer;
|
|
436
434
|
user-select: none;
|
|
435
|
+
touch-action: manipulation;
|
|
437
436
|
|
|
438
437
|
&:focus-visible {
|
|
439
438
|
outline-color: oklch(62.3% 0.214 259.815);
|
|
@@ -531,6 +530,63 @@
|
|
|
531
530
|
scale: -1 1;
|
|
532
531
|
}
|
|
533
532
|
|
|
533
|
+
/* ==========================================================================
|
|
534
|
+
Media preview
|
|
535
|
+
========================================================================== */
|
|
536
|
+
.media-default-skin .media-preview {
|
|
537
|
+
background-color: oklch(0 0 0 / 0.9);
|
|
538
|
+
border-radius: 0.75rem;
|
|
539
|
+
|
|
540
|
+
& .media-preview__thumbnail {
|
|
541
|
+
display: block;
|
|
542
|
+
position: relative;
|
|
543
|
+
border-radius: inherit;
|
|
544
|
+
overflow: clip;
|
|
545
|
+
|
|
546
|
+
&::after {
|
|
547
|
+
content: "";
|
|
548
|
+
position: absolute;
|
|
549
|
+
inset: 0;
|
|
550
|
+
border-radius: inherit;
|
|
551
|
+
background-image: linear-gradient(to top, oklch(0 0 0 / 0.8), oklch(0 0 0 / 0.3), oklch(0 0 0 / 0));
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
& .media-preview__timestamp {
|
|
556
|
+
position: absolute;
|
|
557
|
+
bottom: 0.5rem;
|
|
558
|
+
inset-inline: 0;
|
|
559
|
+
text-align: center;
|
|
560
|
+
font-variant-numeric: tabular-nums;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
& .media-overlay {
|
|
564
|
+
opacity: 1;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
& .media-preview__spinner {
|
|
568
|
+
position: absolute;
|
|
569
|
+
top: 50%;
|
|
570
|
+
left: 50%;
|
|
571
|
+
transform: translate(-50%, -50%);
|
|
572
|
+
opacity: 0;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
& .media-preview__thumbnail,
|
|
576
|
+
& .media-preview__spinner {
|
|
577
|
+
transition: opacity 150ms ease-out;
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
&:has(.media-preview__thumbnail[data-loading]) {
|
|
581
|
+
& .media-preview__thumbnail {
|
|
582
|
+
opacity: 0;
|
|
583
|
+
}
|
|
584
|
+
& .media-preview__spinner {
|
|
585
|
+
opacity: 1;
|
|
586
|
+
}
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
|
|
534
590
|
/* ==========================================================================
|
|
535
591
|
Slider
|
|
536
592
|
========================================================================== */
|
|
@@ -543,6 +599,7 @@
|
|
|
543
599
|
flex: 1;
|
|
544
600
|
border-radius: calc(infinity * 1px);
|
|
545
601
|
outline: none;
|
|
602
|
+
cursor: pointer;
|
|
546
603
|
|
|
547
604
|
&[data-orientation="horizontal"] {
|
|
548
605
|
min-width: 5rem;
|
|
@@ -675,11 +732,6 @@
|
|
|
675
732
|
}
|
|
676
733
|
}
|
|
677
734
|
|
|
678
|
-
/* Time display within slider */
|
|
679
|
-
.media-default-skin .media-slider__time-display {
|
|
680
|
-
font-variant-numeric: tabular-nums;
|
|
681
|
-
}
|
|
682
|
-
|
|
683
735
|
/* ==========================================================================
|
|
684
736
|
Popups & Tooltips
|
|
685
737
|
========================================================================== */
|
|
@@ -691,12 +743,12 @@
|
|
|
691
743
|
color: inherit;
|
|
692
744
|
overflow: visible;
|
|
693
745
|
transition-property: transform, scale, opacity, filter;
|
|
694
|
-
transition-duration:
|
|
746
|
+
transition-duration: 150ms;
|
|
695
747
|
|
|
696
748
|
&[data-starting-style],
|
|
697
749
|
&[data-ending-style] {
|
|
698
750
|
opacity: 0;
|
|
699
|
-
transform: scale(0);
|
|
751
|
+
transform: scale(0.5);
|
|
700
752
|
filter: blur(8px);
|
|
701
753
|
}
|
|
702
754
|
|
|
@@ -716,10 +768,50 @@
|
|
|
716
768
|
&[data-side="right"] {
|
|
717
769
|
transform-origin: left;
|
|
718
770
|
}
|
|
771
|
+
|
|
772
|
+
/* Safe area between trigger and popup */
|
|
773
|
+
&::before {
|
|
774
|
+
content: "";
|
|
775
|
+
position: absolute;
|
|
776
|
+
pointer-events: inherit;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
&[data-side="top"]::before,
|
|
780
|
+
&[data-side="bottom"]::before {
|
|
781
|
+
width: 100%;
|
|
782
|
+
inset-inline: 0;
|
|
783
|
+
}
|
|
784
|
+
&[data-side="top"]::before {
|
|
785
|
+
top: 100%;
|
|
786
|
+
}
|
|
787
|
+
&[data-side="bottom"]::before {
|
|
788
|
+
bottom: 100%;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
&[data-side="left"]::before,
|
|
792
|
+
&[data-side="right"]::before {
|
|
793
|
+
height: 100%;
|
|
794
|
+
inset-block: 0;
|
|
795
|
+
}
|
|
796
|
+
&[data-side="left"]::before {
|
|
797
|
+
left: 100%;
|
|
798
|
+
}
|
|
799
|
+
&[data-side="right"]::before {
|
|
800
|
+
right: 100%;
|
|
801
|
+
}
|
|
719
802
|
}
|
|
720
803
|
|
|
721
804
|
.media-default-skin .media-popover {
|
|
722
805
|
--media-popover-side-offset: 0.5rem;
|
|
806
|
+
|
|
807
|
+
&[data-side="top"]::before,
|
|
808
|
+
&[data-side="bottom"]::before {
|
|
809
|
+
height: var(--media-popover-side-offset);
|
|
810
|
+
}
|
|
811
|
+
&[data-side="left"]::before,
|
|
812
|
+
&[data-side="right"]::before {
|
|
813
|
+
width: var(--media-popover-side-offset);
|
|
814
|
+
}
|
|
723
815
|
}
|
|
724
816
|
.media-default-skin .media-popover--volume {
|
|
725
817
|
padding: 0.625rem 0.25rem;
|
|
@@ -731,7 +823,16 @@
|
|
|
731
823
|
border-radius: calc(infinity * 1px);
|
|
732
824
|
font-size: 0.75rem;
|
|
733
825
|
white-space: nowrap;
|
|
734
|
-
--media-tooltip-side-offset: 0.
|
|
826
|
+
--media-tooltip-side-offset: 0.75rem;
|
|
827
|
+
|
|
828
|
+
&[data-side="top"]::before,
|
|
829
|
+
&[data-side="bottom"]::before {
|
|
830
|
+
height: var(--media-tooltip-side-offset);
|
|
831
|
+
}
|
|
832
|
+
&[data-side="left"]::before,
|
|
833
|
+
&[data-side="right"]::before {
|
|
834
|
+
width: var(--media-tooltip-side-offset);
|
|
835
|
+
}
|
|
735
836
|
}
|
|
736
837
|
|
|
737
838
|
/* ==========================================================================
|
|
@@ -739,6 +840,7 @@
|
|
|
739
840
|
========================================================================== */
|
|
740
841
|
|
|
741
842
|
.media-default-skin {
|
|
843
|
+
--media-caption-track-duration: 150ms;
|
|
742
844
|
--media-caption-track-delay: 600ms;
|
|
743
845
|
--media-caption-track-y: -0.5rem;
|
|
744
846
|
|
|
@@ -746,11 +848,15 @@
|
|
|
746
848
|
--media-caption-track-delay: 25ms;
|
|
747
849
|
--media-caption-track-y: -3.5rem;
|
|
748
850
|
}
|
|
851
|
+
|
|
852
|
+
@media (prefers-reduced-motion: reduce) {
|
|
853
|
+
--media-caption-track-duration: 50ms;
|
|
854
|
+
}
|
|
749
855
|
}
|
|
750
856
|
|
|
751
857
|
.media-default-skin video::-webkit-media-text-track-container {
|
|
752
858
|
/* NOTE: The delay must account for the controls delay/duration */
|
|
753
|
-
transition: transform
|
|
859
|
+
transition: transform var(--media-caption-track-duration) ease-out;
|
|
754
860
|
transition-delay: var(--media-caption-track-delay);
|
|
755
861
|
transform: translateY(var(--media-caption-track-y)) scale(0.98);
|
|
756
862
|
z-index: 1;
|
|
@@ -776,6 +882,7 @@
|
|
|
776
882
|
--media-surface-outer-border-color: oklch(0 0 0 / 0.1);
|
|
777
883
|
--media-surface-shadow-color: oklch(0 0 0 / 0.15);
|
|
778
884
|
--media-surface-backdrop-filter: blur(16px) saturate(1.5);
|
|
885
|
+
--media-video-border-radius: var(--media-border-radius, 2rem);
|
|
779
886
|
|
|
780
887
|
@media (prefers-color-scheme: dark) {
|
|
781
888
|
--media-border-color: oklch(1 0 0 / 0.1);
|
|
@@ -793,7 +900,7 @@
|
|
|
793
900
|
}
|
|
794
901
|
|
|
795
902
|
&:fullscreen {
|
|
796
|
-
border-radius: 0;
|
|
903
|
+
--media-border-radius: 0;
|
|
797
904
|
}
|
|
798
905
|
}
|
|
799
906
|
|
|
@@ -840,6 +947,11 @@
|
|
|
840
947
|
}
|
|
841
948
|
}
|
|
842
949
|
|
|
950
|
+
/* Hide cursor when controls are hidden in fullscreen */
|
|
951
|
+
.media-default-skin--video:fullscreen:has(.media-controls:not([data-visible])) {
|
|
952
|
+
cursor: none;
|
|
953
|
+
}
|
|
954
|
+
|
|
843
955
|
/* ==========================================================================
|
|
844
956
|
Sliders
|
|
845
957
|
========================================================================== */
|
|
@@ -849,3 +961,29 @@
|
|
|
849
961
|
box-shadow: 0 0 0 1px oklch(0 0 0 / 0.05);
|
|
850
962
|
}
|
|
851
963
|
|
|
964
|
+
.media-default-skin .media-slider__preview {
|
|
965
|
+
position: absolute;
|
|
966
|
+
left: var(--media-slider-pointer);
|
|
967
|
+
bottom: calc(100% + 1.2rem);
|
|
968
|
+
translate: -50%;
|
|
969
|
+
opacity: 0;
|
|
970
|
+
scale: 0.8;
|
|
971
|
+
filter: blur(8px);
|
|
972
|
+
transition-property: scale, opacity, filter;
|
|
973
|
+
transition-duration: 150ms;
|
|
974
|
+
transform-origin: bottom;
|
|
975
|
+
|
|
976
|
+
& .media-preview__thumbnail {
|
|
977
|
+
max-width: 11rem;
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
&:has(.media-preview__thumbnail[data-loading]) {
|
|
981
|
+
max-height: 6rem;
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
.media-default-skin .media-slider[data-pointing] .media-slider__preview:has([role="img"]:not([data-hidden])) {
|
|
985
|
+
opacity: 1;
|
|
986
|
+
scale: 1;
|
|
987
|
+
filter: blur(0);
|
|
988
|
+
}
|
|
989
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skin.d.ts","names":[],"sources":["../../../../src/presets/video/skin.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"skin.d.ts","names":[],"sources":["../../../../src/presets/video/skin.tsx"],"mappings":";;;;KAsCY,cAAA,GAAiB,aAAA;AAAA,iBAsCb,SAAA,CAAU,KAAA,EAAO,cAAA,GAAiB,SAAA"}
|
|
@@ -14,7 +14,9 @@ import { SeekButton } from "../../ui/seek-button/seek-button.js";
|
|
|
14
14
|
import { SliderBuffer } from "../../ui/slider/slider-buffer.js";
|
|
15
15
|
import { SliderFill } from "../../ui/slider/slider-fill.js";
|
|
16
16
|
import { SliderThumb } from "../../ui/slider/slider-thumb.js";
|
|
17
|
+
import { SliderThumbnail } from "../../ui/slider/slider-thumbnail.js";
|
|
17
18
|
import { SliderTrack } from "../../ui/slider/slider-track.js";
|
|
19
|
+
import { SliderValue } from "../../ui/slider/slider-value.js";
|
|
18
20
|
import { Group } from "../../ui/time/time-group.js";
|
|
19
21
|
import { Value } from "../../ui/time/time-value.js";
|
|
20
22
|
import { TimeSliderRoot } from "../../ui/time-slider/time-slider-root.js";
|
|
@@ -165,10 +167,24 @@ function VideoSkin(props) {
|
|
|
165
167
|
}),
|
|
166
168
|
/* @__PURE__ */ jsxs(TimeSliderRoot, {
|
|
167
169
|
className: "media-slider",
|
|
168
|
-
children: [
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
170
|
+
children: [
|
|
171
|
+
/* @__PURE__ */ jsxs(SliderTrack, {
|
|
172
|
+
className: "media-slider__track",
|
|
173
|
+
children: [/* @__PURE__ */ jsx(SliderFill, { className: "media-slider__fill" }), /* @__PURE__ */ jsx(SliderBuffer, { className: "media-slider__buffer" })]
|
|
174
|
+
}),
|
|
175
|
+
/* @__PURE__ */ jsx(SliderThumb, { className: "media-slider__thumb" }),
|
|
176
|
+
/* @__PURE__ */ jsxs("div", {
|
|
177
|
+
className: "media-surface media-preview media-slider__preview",
|
|
178
|
+
children: [
|
|
179
|
+
/* @__PURE__ */ jsx(SliderThumbnail, { className: "media-preview__thumbnail" }),
|
|
180
|
+
/* @__PURE__ */ jsx(SliderValue, {
|
|
181
|
+
type: "pointer",
|
|
182
|
+
className: "media-preview__timestamp"
|
|
183
|
+
}),
|
|
184
|
+
/* @__PURE__ */ jsx(SpinnerIcon, { className: "media-preview__spinner media-icon" })
|
|
185
|
+
]
|
|
186
|
+
})
|
|
187
|
+
]
|
|
172
188
|
}),
|
|
173
189
|
/* @__PURE__ */ jsx(Value, {
|
|
174
190
|
type: "duration",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skin.js","names":["Controls.Root","Tooltip.Provider","Tooltip.Root","Tooltip.Trigger","Tooltip.Popup","Time.Group","Time.Value","TimeSlider.Root","TimeSlider.Track","TimeSlider.Fill","TimeSlider.Buffer","TimeSlider.Thumb","Popover.Root","Popover.Trigger","Popover.Popup","VolumeSlider.Root","VolumeSlider.Track","VolumeSlider.Fill","VolumeSlider.Thumb"],"sources":["../../../../src/presets/video/skin.tsx"],"sourcesContent":["import {\n CaptionsOffIcon,\n CaptionsOnIcon,\n FullscreenEnterIcon,\n FullscreenExitIcon,\n PauseIcon,\n PipIcon,\n PlayIcon,\n RestartIcon,\n SeekIcon,\n SpinnerIcon,\n VolumeHighIcon,\n VolumeLowIcon,\n VolumeOffIcon,\n} from '@videojs/icons/react';\nimport { cn } from '@videojs/utils/style';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\nimport { Container, usePlayer } from '@/player/context';\nimport { BufferingIndicator } from '@/ui/buffering-indicator';\nimport { CaptionsButton } from '@/ui/captions-button';\nimport { Controls } from '@/ui/controls';\nimport { FullscreenButton } from '@/ui/fullscreen-button';\nimport { MuteButton } from '@/ui/mute-button';\nimport { PiPButton } from '@/ui/pip-button';\nimport { PlayButton } from '@/ui/play-button';\nimport { PlaybackRateButton } from '@/ui/playback-rate-button';\nimport { Popover } from '@/ui/popover';\nimport { SeekButton } from '@/ui/seek-button';\nimport { Time } from '@/ui/time';\nimport { TimeSlider } from '@/ui/time-slider';\nimport { Tooltip } from '@/ui/tooltip';\nimport { VolumeSlider } from '@/ui/volume-slider';\nimport type { BaseSkinProps } from '../types';\nimport { ErrorDialog } from './error-dialog';\n\nconst SEEK_TIME = 10;\n\nexport type VideoSkinProps = BaseSkinProps;\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'>>(function Button({ className, ...props }, ref) {\n return <button ref={ref} type=\"button\" className={cn('media-button', className)} {...props} />;\n});\n\nconst errorClasses = {\n root: 'media-error',\n dialog: 'media-error__dialog media-surface',\n content: 'media-error__content',\n title: 'media-error__title',\n description: 'media-error__description',\n actions: 'media-error__actions',\n close: 'media-button',\n};\n\nfunction PlayLabel(): ReactNode {\n const paused = usePlayer((s) => Boolean(s.paused));\n const ended = usePlayer((s) => Boolean(s.ended));\n if (ended) return <>Replay</>;\n return paused ? <>Play</> : <>Pause</>;\n}\n\nfunction CaptionsLabel(): ReactNode {\n const active = usePlayer((s) => Boolean(s.subtitlesShowing));\n return active ? <>Disable captions</> : <>Enable captions</>;\n}\n\nfunction PiPLabel(): ReactNode {\n const pip = usePlayer((s) => Boolean(s.pip));\n return pip ? <>Exit picture-in-picture</> : <>Enter picture-in-picture</>;\n}\n\nfunction FullscreenLabel(): ReactNode {\n const fullscreen = usePlayer((s) => Boolean(s.fullscreen));\n return fullscreen ? <>Exit fullscreen</> : <>Enter fullscreen</>;\n}\n\nexport function VideoSkin(props: VideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn('media-default-skin media-default-skin--video', className)} {...rest}>\n {children}\n\n <BufferingIndicator\n render={(props) => (\n <div {...props} className=\"media-buffering-indicator\">\n <div className=\"media-surface\">\n <SpinnerIcon className=\"media-icon\" />\n </div>\n </div>\n )}\n />\n\n <ErrorDialog classes={errorClasses} />\n\n <Controls.Root className=\"media-surface media-controls\">\n <Tooltip.Provider>\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PlayButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--play\">\n <RestartIcon className=\"media-icon media-icon--restart\" />\n <PlayIcon className=\"media-icon media-icon--play\" />\n <PauseIcon className=\"media-icon media-icon--pause\" />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">\n <PlayLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--seek\">\n <span className=\"media-icon__container\">\n <SeekIcon className=\"media-icon media-icon--seek media-icon--flipped\" />\n <span className=\"media-icon__label\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">Seek backward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--seek\">\n <span className=\"media-icon__container\">\n <SeekIcon className=\"media-icon media-icon--seek\" />\n <span className=\"media-icon__label\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">Seek forward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n\n <Time.Group className=\"media-time\">\n <Time.Value type=\"current\" className=\"media-time__value\" />\n <TimeSlider.Root className=\"media-slider\">\n <TimeSlider.Track className=\"media-slider__track\">\n <TimeSlider.Fill className=\"media-slider__fill\" />\n <TimeSlider.Buffer className=\"media-slider__buffer\" />\n </TimeSlider.Track>\n <TimeSlider.Thumb className=\"media-slider__thumb\" />\n </TimeSlider.Root>\n <Time.Value type=\"duration\" className=\"media-time__value\" />\n </Time.Group>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PlaybackRateButton\n render={(props) => <Button {...props} className=\"media-button--icon media-button--playback-rate\" />}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">Toggle playback rate</Tooltip.Popup>\n </Tooltip.Root>\n\n <Popover.Root openOnHover delay={200} closeDelay={100} side=\"top\">\n <Popover.Trigger\n render={\n <MuteButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--mute\">\n <VolumeOffIcon className=\"media-icon media-icon--volume-off\" />\n <VolumeLowIcon className=\"media-icon media-icon--volume-low\" />\n <VolumeHighIcon className=\"media-icon media-icon--volume-high\" />\n </Button>\n )}\n />\n }\n />\n <Popover.Popup className=\"media-surface media-popover media-popover--volume\">\n <VolumeSlider.Root className=\"media-slider\" orientation=\"vertical\" thumbAlignment=\"edge\">\n <VolumeSlider.Track className=\"media-slider__track\">\n <VolumeSlider.Fill className=\"media-slider__fill\" />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb className=\"media-slider__thumb media-slider__thumb--persistent\" />\n </VolumeSlider.Root>\n </Popover.Popup>\n </Popover.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <CaptionsButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--captions\">\n <CaptionsOffIcon className=\"media-icon media-icon--captions-off\" />\n <CaptionsOnIcon className=\"media-icon media-icon--captions-on\" />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">\n <CaptionsLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PiPButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon\">\n <PipIcon className=\"media-icon\" />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">\n <PiPLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <FullscreenButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--fullscreen\">\n <FullscreenEnterIcon className=\"media-icon media-icon--fullscreen-enter\" />\n <FullscreenExitIcon className=\"media-icon media-icon--fullscreen-exit\" />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">\n <FullscreenLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n </Tooltip.Provider>\n </Controls.Root>\n\n <div className=\"media-overlay\" />\n </Container>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skin.js","names":["Controls.Root","Tooltip.Provider","Tooltip.Root","Tooltip.Trigger","Tooltip.Popup","Time.Group","Time.Value","TimeSlider.Root","TimeSlider.Track","TimeSlider.Fill","TimeSlider.Buffer","TimeSlider.Thumb","Slider.Thumbnail","TimeSlider.Value","Popover.Root","Popover.Trigger","Popover.Popup","VolumeSlider.Root","VolumeSlider.Track","VolumeSlider.Fill","VolumeSlider.Thumb"],"sources":["../../../../src/presets/video/skin.tsx"],"sourcesContent":["import {\n CaptionsOffIcon,\n CaptionsOnIcon,\n FullscreenEnterIcon,\n FullscreenExitIcon,\n PauseIcon,\n PipIcon,\n PlayIcon,\n RestartIcon,\n SeekIcon,\n SpinnerIcon,\n VolumeHighIcon,\n VolumeLowIcon,\n VolumeOffIcon,\n} from '@videojs/icons/react';\nimport { cn } from '@videojs/utils/style';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\nimport { Container, usePlayer } from '@/player/context';\nimport { BufferingIndicator } from '@/ui/buffering-indicator';\nimport { CaptionsButton } from '@/ui/captions-button';\nimport { Controls } from '@/ui/controls';\nimport { FullscreenButton } from '@/ui/fullscreen-button';\nimport { MuteButton } from '@/ui/mute-button';\nimport { PiPButton } from '@/ui/pip-button';\nimport { PlayButton } from '@/ui/play-button';\nimport { PlaybackRateButton } from '@/ui/playback-rate-button';\nimport { Popover } from '@/ui/popover';\nimport { SeekButton } from '@/ui/seek-button';\nimport { Slider } from '@/ui/slider';\nimport { Time } from '@/ui/time';\nimport { TimeSlider } from '@/ui/time-slider';\nimport { Tooltip } from '@/ui/tooltip';\nimport { VolumeSlider } from '@/ui/volume-slider';\nimport type { BaseSkinProps } from '../types';\nimport { ErrorDialog } from './error-dialog';\n\nconst SEEK_TIME = 10;\n\nexport type VideoSkinProps = BaseSkinProps;\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'>>(function Button({ className, ...props }, ref) {\n return <button ref={ref} type=\"button\" className={cn('media-button', className)} {...props} />;\n});\n\nconst errorClasses = {\n root: 'media-error',\n dialog: 'media-error__dialog media-surface',\n content: 'media-error__content',\n title: 'media-error__title',\n description: 'media-error__description',\n actions: 'media-error__actions',\n close: 'media-button',\n};\n\nfunction PlayLabel(): ReactNode {\n const paused = usePlayer((s) => Boolean(s.paused));\n const ended = usePlayer((s) => Boolean(s.ended));\n if (ended) return <>Replay</>;\n return paused ? <>Play</> : <>Pause</>;\n}\n\nfunction CaptionsLabel(): ReactNode {\n const active = usePlayer((s) => Boolean(s.subtitlesShowing));\n return active ? <>Disable captions</> : <>Enable captions</>;\n}\n\nfunction PiPLabel(): ReactNode {\n const pip = usePlayer((s) => Boolean(s.pip));\n return pip ? <>Exit picture-in-picture</> : <>Enter picture-in-picture</>;\n}\n\nfunction FullscreenLabel(): ReactNode {\n const fullscreen = usePlayer((s) => Boolean(s.fullscreen));\n return fullscreen ? <>Exit fullscreen</> : <>Enter fullscreen</>;\n}\n\nexport function VideoSkin(props: VideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn('media-default-skin media-default-skin--video', className)} {...rest}>\n {children}\n\n <BufferingIndicator\n render={(props) => (\n <div {...props} className=\"media-buffering-indicator\">\n <div className=\"media-surface\">\n <SpinnerIcon className=\"media-icon\" />\n </div>\n </div>\n )}\n />\n\n <ErrorDialog classes={errorClasses} />\n\n <Controls.Root className=\"media-surface media-controls\">\n <Tooltip.Provider>\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PlayButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--play\">\n <RestartIcon className=\"media-icon media-icon--restart\" />\n <PlayIcon className=\"media-icon media-icon--play\" />\n <PauseIcon className=\"media-icon media-icon--pause\" />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">\n <PlayLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--seek\">\n <span className=\"media-icon__container\">\n <SeekIcon className=\"media-icon media-icon--seek media-icon--flipped\" />\n <span className=\"media-icon__label\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">Seek backward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--seek\">\n <span className=\"media-icon__container\">\n <SeekIcon className=\"media-icon media-icon--seek\" />\n <span className=\"media-icon__label\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">Seek forward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n\n <Time.Group className=\"media-time\">\n <Time.Value type=\"current\" className=\"media-time__value\" />\n <TimeSlider.Root className=\"media-slider\">\n <TimeSlider.Track className=\"media-slider__track\">\n <TimeSlider.Fill className=\"media-slider__fill\" />\n <TimeSlider.Buffer className=\"media-slider__buffer\" />\n </TimeSlider.Track>\n <TimeSlider.Thumb className=\"media-slider__thumb\" />\n\n <div className=\"media-surface media-preview media-slider__preview\">\n <Slider.Thumbnail className=\"media-preview__thumbnail\" />\n <TimeSlider.Value type=\"pointer\" className=\"media-preview__timestamp\" />\n <SpinnerIcon className=\"media-preview__spinner media-icon\" />\n </div>\n </TimeSlider.Root>\n <Time.Value type=\"duration\" className=\"media-time__value\" />\n </Time.Group>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PlaybackRateButton\n render={(props) => <Button {...props} className=\"media-button--icon media-button--playback-rate\" />}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">Toggle playback rate</Tooltip.Popup>\n </Tooltip.Root>\n\n <Popover.Root openOnHover delay={200} closeDelay={100} side=\"top\">\n <Popover.Trigger\n render={\n <MuteButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--mute\">\n <VolumeOffIcon className=\"media-icon media-icon--volume-off\" />\n <VolumeLowIcon className=\"media-icon media-icon--volume-low\" />\n <VolumeHighIcon className=\"media-icon media-icon--volume-high\" />\n </Button>\n )}\n />\n }\n />\n <Popover.Popup className=\"media-surface media-popover media-popover--volume\">\n <VolumeSlider.Root className=\"media-slider\" orientation=\"vertical\" thumbAlignment=\"edge\">\n <VolumeSlider.Track className=\"media-slider__track\">\n <VolumeSlider.Fill className=\"media-slider__fill\" />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb className=\"media-slider__thumb media-slider__thumb--persistent\" />\n </VolumeSlider.Root>\n </Popover.Popup>\n </Popover.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <CaptionsButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--captions\">\n <CaptionsOffIcon className=\"media-icon media-icon--captions-off\" />\n <CaptionsOnIcon className=\"media-icon media-icon--captions-on\" />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">\n <CaptionsLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PiPButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon\">\n <PipIcon className=\"media-icon\" />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">\n <PiPLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <FullscreenButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--fullscreen\">\n <FullscreenEnterIcon className=\"media-icon media-icon--fullscreen-enter\" />\n <FullscreenExitIcon className=\"media-icon media-icon--fullscreen-exit\" />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className=\"media-surface media-tooltip\">\n <FullscreenLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n </Tooltip.Provider>\n </Controls.Root>\n\n <div className=\"media-overlay\" />\n </Container>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skin.tailwind.d.ts","names":[],"sources":["../../../../src/presets/video/skin.tailwind.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"skin.tailwind.d.ts","names":[],"sources":["../../../../src/presets/video/skin.tailwind.tsx"],"mappings":";;;;iBA+IgB,iBAAA,CAAkB,KAAA,EAAO,cAAA,GAAiB,SAAA"}
|
|
@@ -14,7 +14,9 @@ import { SeekButton } from "../../ui/seek-button/seek-button.js";
|
|
|
14
14
|
import { SliderBuffer } from "../../ui/slider/slider-buffer.js";
|
|
15
15
|
import { SliderFill as SliderFill$1 } from "../../ui/slider/slider-fill.js";
|
|
16
16
|
import { SliderThumb as SliderThumb$1 } from "../../ui/slider/slider-thumb.js";
|
|
17
|
+
import { SliderThumbnail } from "../../ui/slider/slider-thumbnail.js";
|
|
17
18
|
import { SliderTrack as SliderTrack$1 } from "../../ui/slider/slider-track.js";
|
|
19
|
+
import { SliderValue } from "../../ui/slider/slider-value.js";
|
|
18
20
|
import { Group } from "../../ui/time/time-group.js";
|
|
19
21
|
import { Value } from "../../ui/time/time-value.js";
|
|
20
22
|
import { TimeSliderRoot } from "../../ui/time-slider/time-slider-root.js";
|
|
@@ -44,7 +46,7 @@ import VolumeLowIcon from "../../icons/dist/react/default/volume-low.js";
|
|
|
44
46
|
import VolumeOffIcon from "../../icons/dist/react/default/volume-off.js";
|
|
45
47
|
import { ErrorDialog } from "./error-dialog.js";
|
|
46
48
|
import { overlay } from "../../skins/dist/default/default/tailwind/components/overlay.js";
|
|
47
|
-
import { bufferingIndicator, controls, error, popup, root, slider } from "../../skins/dist/default/default/tailwind/video.tailwind.js";
|
|
49
|
+
import { bufferingIndicator, controls, error, popup, preview, root, slider } from "../../skins/dist/default/default/tailwind/video.tailwind.js";
|
|
48
50
|
import { forwardRef } from "react";
|
|
49
51
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
50
52
|
import { cn } from "@videojs/utils/style";
|
|
@@ -205,13 +207,27 @@ function VideoSkinTailwind(props) {
|
|
|
205
207
|
}),
|
|
206
208
|
/* @__PURE__ */ jsxs(TimeSliderRoot, {
|
|
207
209
|
render: (props) => /* @__PURE__ */ jsx(SliderRoot, { ...props }),
|
|
208
|
-
children: [
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
210
|
+
children: [
|
|
211
|
+
/* @__PURE__ */ jsxs(SliderTrack$1, {
|
|
212
|
+
render: (props) => /* @__PURE__ */ jsx(SliderTrack, { ...props }),
|
|
213
|
+
children: [/* @__PURE__ */ jsx(SliderFill$1, { render: (props) => /* @__PURE__ */ jsx(SliderFill, { ...props }) }), /* @__PURE__ */ jsx(SliderBuffer, { render: (props) => /* @__PURE__ */ jsx(SliderFill, {
|
|
214
|
+
type: "buffer",
|
|
215
|
+
...props
|
|
216
|
+
}) })]
|
|
217
|
+
}),
|
|
218
|
+
/* @__PURE__ */ jsx(SliderThumb$1, { render: (props) => /* @__PURE__ */ jsx(SliderThumb, { ...props }) }),
|
|
219
|
+
/* @__PURE__ */ jsxs("div", {
|
|
220
|
+
className: preview.root,
|
|
221
|
+
children: [
|
|
222
|
+
/* @__PURE__ */ jsx(SliderThumbnail, { className: preview.thumbnail }),
|
|
223
|
+
/* @__PURE__ */ jsx(SliderValue, {
|
|
224
|
+
type: "pointer",
|
|
225
|
+
className: preview.timestamp
|
|
226
|
+
}),
|
|
227
|
+
/* @__PURE__ */ jsx(SpinnerIcon, { className: cn(icon, preview.spinner) })
|
|
228
|
+
]
|
|
229
|
+
})
|
|
230
|
+
]
|
|
215
231
|
}),
|
|
216
232
|
/* @__PURE__ */ jsx(Value, {
|
|
217
233
|
type: "duration",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skin.tailwind.js","names":["Controls.Root","Tooltip.Provider","Tooltip.Root","Tooltip.Trigger","Tooltip.Popup","Time.Group","Time.Value","TimeSlider.Root","TimeSlider.Track","TimeSlider.Fill","TimeSlider.Buffer","TimeSlider.Thumb","Popover.Root","Popover.Trigger","Popover.Popup","VolumeSlider.Root","VolumeSlider.Track","VolumeSlider.Fill","VolumeSlider.Thumb"],"sources":["../../../../src/presets/video/skin.tailwind.tsx"],"sourcesContent":["import {\n CaptionsOffIcon,\n CaptionsOnIcon,\n FullscreenEnterIcon,\n FullscreenExitIcon,\n PauseIcon,\n PipIcon,\n PlayIcon,\n RestartIcon,\n SeekIcon,\n SpinnerIcon,\n VolumeHighIcon,\n VolumeLowIcon,\n VolumeOffIcon,\n} from '@videojs/icons/react';\nimport {\n bufferingIndicator,\n button,\n controls,\n error,\n icon,\n iconContainer,\n iconFlipped,\n iconState,\n overlay,\n playbackRate,\n popup,\n root,\n seek,\n slider,\n time,\n} from '@videojs/skins/default/tailwind/video.tailwind';\nimport { cn } from '@videojs/utils/style';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\nimport { Container, usePlayer } from '@/player/context';\nimport { BufferingIndicator } from '@/ui/buffering-indicator';\nimport { CaptionsButton } from '@/ui/captions-button';\nimport { Controls } from '@/ui/controls';\nimport { FullscreenButton } from '@/ui/fullscreen-button';\nimport { MuteButton } from '@/ui/mute-button';\nimport { PiPButton } from '@/ui/pip-button';\nimport { PlayButton } from '@/ui/play-button';\nimport { PlaybackRateButton } from '@/ui/playback-rate-button';\nimport { Popover } from '@/ui/popover';\nimport { SeekButton } from '@/ui/seek-button';\nimport { Time } from '@/ui/time';\nimport { TimeSlider } from '@/ui/time-slider';\nimport { Tooltip } from '@/ui/tooltip';\nimport { VolumeSlider } from '@/ui/volume-slider';\nimport { ErrorDialog } from './error-dialog';\nimport type { VideoSkinProps } from './skin';\n\nconst SEEK_TIME = 10;\n\n/* --------------------------------------- Components ---------------------------------------- */\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'> & { variant?: 'icon' }>(function Button(\n { className, variant, ...props },\n ref\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(button.base, variant === 'icon' ? button.icon : button.default, className)}\n {...props}\n />\n );\n});\n\nconst SliderRoot = forwardRef<HTMLDivElement, ComponentProps<'div'>>(function SliderRoot({ className, ...props }, ref) {\n return <div ref={ref} className={cn(slider.root, className)} {...props} />;\n});\n\nconst SliderTrack = forwardRef<HTMLDivElement, ComponentProps<'div'>>(function SliderTrack(\n { className, ...props },\n ref\n) {\n return <div ref={ref} className={cn(slider.track, className)} {...props} />;\n});\n\nconst SliderFill = forwardRef<HTMLDivElement, ComponentProps<'div'> & { type?: 'fill' | 'buffer' }>(function SliderFill(\n { type = 'fill', className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cn(slider.fill.base, type === 'fill' ? slider.fill.fill : slider.fill.buffer, className)}\n {...props}\n />\n );\n});\n\nconst SliderThumb = forwardRef<HTMLDivElement, ComponentProps<'div'> & { persistent?: boolean }>(function SliderThumb(\n { persistent, className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cn(slider.thumb.base, persistent ? slider.thumb.persistent : slider.thumb.interactive, className)}\n {...props}\n />\n );\n});\n\nconst errorClasses = {\n root: error.root,\n dialog: error.dialog,\n content: error.content,\n title: error.title,\n description: error.description,\n actions: error.actions,\n close: cn(button.base, button.default),\n};\n\nfunction PlayLabel(): ReactNode {\n const paused = usePlayer((s) => Boolean(s.paused));\n const ended = usePlayer((s) => Boolean(s.ended));\n if (ended) return <>Replay</>;\n return paused ? <>Play</> : <>Pause</>;\n}\n\nfunction CaptionsLabel(): ReactNode {\n const active = usePlayer((s) => Boolean(s.subtitlesShowing));\n return active ? <>Disable captions</> : <>Enable captions</>;\n}\n\nfunction PiPLabel(): ReactNode {\n const pip = usePlayer((s) => Boolean(s.pip));\n return pip ? <>Exit picture-in-picture</> : <>Enter picture-in-picture</>;\n}\n\nfunction FullscreenLabel(): ReactNode {\n const fullscreen = usePlayer((s) => Boolean(s.fullscreen));\n return fullscreen ? <>Exit fullscreen</> : <>Enter fullscreen</>;\n}\n\n/* ------------------------------------------ Skin ------------------------------------------- */\n\nexport function VideoSkinTailwind(props: VideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn(root(false), className)} {...rest}>\n {children}\n\n <BufferingIndicator\n render={(props) => (\n <div {...props} className={bufferingIndicator.root}>\n <div className={bufferingIndicator.container}>\n <SpinnerIcon className={icon} />\n </div>\n </div>\n )}\n />\n\n <ErrorDialog classes={errorClasses} />\n\n <Controls.Root\n data-controls=\"\" // Used as a hook for Tailwind has-[] styles\n className={controls}\n >\n <Tooltip.Provider>\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PlayButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.play.button}>\n <RestartIcon className={cn(icon, iconState.play.restart)} />\n <PlayIcon className={cn(icon, iconState.play.play)} />\n <PauseIcon className={cn(icon, iconState.play.pause)} />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>\n <PlayLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className={seek.button}>\n <span className={iconContainer}>\n <SeekIcon className={cn(icon, iconFlipped)} />\n <span className={cn(seek.label, seek.labelBackward)}>{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>Seek backward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className={seek.button}>\n <span className={iconContainer}>\n <SeekIcon className={icon} />\n <span className={cn(seek.label, seek.labelForward)}>{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>Seek forward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n\n <Time.Group className={time.group}>\n <Time.Value type=\"current\" className={time.current} />\n <TimeSlider.Root render={(props) => <SliderRoot {...props} />}>\n <TimeSlider.Track render={(props) => <SliderTrack {...props} />}>\n <TimeSlider.Fill render={(props) => <SliderFill {...props} />} />\n <TimeSlider.Buffer render={(props) => <SliderFill type=\"buffer\" {...props} />} />\n </TimeSlider.Track>\n <TimeSlider.Thumb render={(props) => <SliderThumb {...props} />} />\n </TimeSlider.Root>\n <Time.Value type=\"duration\" className={time.duration} />\n </Time.Group>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PlaybackRateButton\n render={(props) => <Button variant=\"icon\" {...props} className={playbackRate.button} />}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>Toggle playback rate</Tooltip.Popup>\n </Tooltip.Root>\n\n <Popover.Root openOnHover delay={200} closeDelay={100} side=\"top\">\n <Popover.Trigger\n render={\n <MuteButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.mute.button}>\n <VolumeOffIcon className={cn(icon, iconState.mute.volumeOff)} />\n <VolumeLowIcon className={cn(icon, iconState.mute.volumeLow)} />\n <VolumeHighIcon className={cn(icon, iconState.mute.volumeHigh)} />\n </Button>\n )}\n />\n }\n />\n <Popover.Popup className={cn(popup.popover, popup.volume)}>\n <VolumeSlider.Root\n orientation=\"vertical\"\n thumbAlignment=\"edge\"\n render={(props) => <SliderRoot {...props} />}\n >\n <VolumeSlider.Track render={(props) => <SliderTrack {...props} />}>\n <VolumeSlider.Fill render={(props) => <SliderFill {...props} />} />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb render={(props) => <SliderThumb persistent {...props} />} />\n </VolumeSlider.Root>\n </Popover.Popup>\n </Popover.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <CaptionsButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.captions.button}>\n <CaptionsOffIcon className={cn(icon, iconState.captions.off)} />\n <CaptionsOnIcon className={cn(icon, iconState.captions.on)} />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>\n <CaptionsLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PiPButton\n render={(props) => (\n <Button variant=\"icon\" {...props}>\n <PipIcon className={icon} />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>\n <PiPLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <FullscreenButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.fullscreen.button}>\n <FullscreenEnterIcon className={cn(icon, iconState.fullscreen.enter)} />\n <FullscreenExitIcon className={cn(icon, iconState.fullscreen.exit)} />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>\n <FullscreenLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n </Tooltip.Provider>\n </Controls.Root>\n\n <div className={overlay} />\n </Container>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDA,MAAM,YAAY;AAIlB,MAAM,SAAS,WAA+E,SAAS,OACrG,EAAE,WAAW,SAAS,GAAG,SACzB,KACA;AACA,QACE,oBAAC;EACM;EACL,MAAK;EACL,WAAW,GAAG,OAAO,MAAM,YAAY,SAAS,OAAO,OAAO,OAAO,SAAS,UAAU;EACxF,GAAI;GACJ;EAEJ;AAEF,MAAM,aAAa,WAAkD,SAAS,WAAW,EAAE,WAAW,GAAG,SAAS,KAAK;AACrH,QAAO,oBAAC;EAAS;EAAK,WAAW,GAAG,OAAO,MAAM,UAAU;EAAE,GAAI;GAAS;EAC1E;AAEF,MAAM,cAAc,WAAkD,SAAS,YAC7E,EAAE,WAAW,GAAG,SAChB,KACA;AACA,QAAO,oBAAC;EAAS;EAAK,WAAW,GAAG,OAAO,OAAO,UAAU;EAAE,GAAI;GAAS;EAC3E;AAEF,MAAM,aAAa,WAAiF,SAAS,WAC3G,EAAE,OAAO,QAAQ,WAAW,GAAG,SAC/B,KACA;AACA,QACE,oBAAC;EACM;EACL,WAAW,GAAG,OAAO,KAAK,MAAM,SAAS,SAAS,OAAO,KAAK,OAAO,OAAO,KAAK,QAAQ,UAAU;EACnG,GAAI;GACJ;EAEJ;AAEF,MAAM,cAAc,WAA6E,SAAS,YACxG,EAAE,YAAY,WAAW,GAAG,SAC5B,KACA;AACA,QACE,oBAAC;EACM;EACL,WAAW,GAAG,OAAO,MAAM,MAAM,aAAa,OAAO,MAAM,aAAa,OAAO,MAAM,aAAa,UAAU;EAC5G,GAAI;GACJ;EAEJ;AAEF,MAAM,eAAe;CACnB,MAAM,MAAM;CACZ,QAAQ,MAAM;CACd,SAAS,MAAM;CACf,OAAO,MAAM;CACb,aAAa,MAAM;CACnB,SAAS,MAAM;CACf,OAAO,GAAG,OAAO,MAAM,OAAO,QAAQ;CACvC;AAED,SAAS,YAAuB;CAC9B,MAAM,SAAS,WAAW,MAAM,QAAQ,EAAE,OAAO,CAAC;AAElD,KADc,WAAW,MAAM,QAAQ,EAAE,MAAM,CAAC,CACrC,QAAO,0CAAE,WAAS;AAC7B,QAAO,SAAS,0CAAE,SAAO,GAAG,0CAAE,UAAQ;;AAGxC,SAAS,gBAA2B;AAElC,QADe,WAAW,MAAM,QAAQ,EAAE,iBAAiB,CAAC,GAC5C,0CAAE,qBAAmB,GAAG,0CAAE,oBAAkB;;AAG9D,SAAS,WAAsB;AAE7B,QADY,WAAW,MAAM,QAAQ,EAAE,IAAI,CAAC,GAC/B,0CAAE,4BAA0B,GAAG,0CAAE,6BAA2B;;AAG3E,SAAS,kBAA6B;AAEpC,QADmB,WAAW,MAAM,QAAQ,EAAE,WAAW,CAAC,GACtC,0CAAE,oBAAkB,GAAG,0CAAE,qBAAmB;;AAKlE,SAAgB,kBAAkB,OAAkC;CAClE,MAAM,EAAE,UAAU,WAAW,GAAG,SAAS;AAEzC,QACE,qBAAC;EAAU,WAAW,GAAG,KAAK,MAAM,EAAE,UAAU;EAAE,GAAI;;GACnD;GAED,oBAAC,sBACC,SAAS,UACP,oBAAC;IAAI,GAAI;IAAO,WAAW,mBAAmB;cAC5C,oBAAC;KAAI,WAAW,mBAAmB;eACjC,oBAAC,eAAY,WAAW,OAAQ;MAC5B;KACF,GAER;GAEF,oBAAC,eAAY,SAAS,eAAgB;GAEtC,oBAACA;IACC,iBAAc;IACd,WAAW;cAEX,qBAACC;KACC,qBAACC;MAAa,MAAK;iBACjB,oBAACC,kBACC,QACE,oBAAC,cACC,SAAS,UACP,qBAAC;OAAO,SAAQ;OAAO,GAAI;OAAO,WAAW,UAAU,KAAK;;QAC1D,oBAAC,eAAY,WAAW,GAAG,MAAM,UAAU,KAAK,QAAQ,GAAI;QAC5D,oBAAC,YAAS,WAAW,GAAG,MAAM,UAAU,KAAK,KAAK,GAAI;QACtD,oBAAC,aAAU,WAAW,GAAG,MAAM,UAAU,KAAK,MAAM,GAAI;;QACjD,GAEX,GAEJ,EACF,oBAACC;OAAc,WAAW,GAAG,MAAM,QAAQ;iBACzC,oBAAC,cAAY;QACC;OACH;KAEf,qBAACF;MAAa,MAAK;iBACjB,oBAACC,kBACC,QACE,oBAAC;OACC,SAAS,CAAC;OACV,SAAS,UACP,oBAAC;QAAO,SAAQ;QAAO,GAAI;QAAO,WAAW,KAAK;kBAChD,qBAAC;SAAK,WAAW;oBACf,oBAAC,YAAS,WAAW,GAAG,MAAM,YAAY,GAAI,EAC9C,oBAAC;UAAK,WAAW,GAAG,KAAK,OAAO,KAAK,cAAc;oBAAG;WAAiB;UAClE;SACA;QAEX,GAEJ,EACF,qBAACC;OAAc,WAAW,GAAG,MAAM,QAAQ;;QAAE;QAAe;QAAU;;QAAwB;OACjF;KAEf,qBAACF;MAAa,MAAK;iBACjB,oBAACC,kBACC,QACE,oBAAC;OACC,SAAS;OACT,SAAS,UACP,oBAAC;QAAO,SAAQ;QAAO,GAAI;QAAO,WAAW,KAAK;kBAChD,qBAAC;SAAK,WAAW;oBACf,oBAAC,YAAS,WAAW,OAAQ,EAC7B,oBAAC;UAAK,WAAW,GAAG,KAAK,OAAO,KAAK,aAAa;oBAAG;WAAiB;UACjE;SACA;QAEX,GAEJ,EACF,qBAACC;OAAc,WAAW,GAAG,MAAM,QAAQ;;QAAE;QAAc;QAAU;;QAAwB;OAChF;KAEf,qBAACC;MAAW,WAAW,KAAK;;OAC1B,oBAACC;QAAW,MAAK;QAAU,WAAW,KAAK;SAAW;OACtD,qBAACC;QAAgB,SAAS,UAAU,oBAAC,cAAW,GAAI,QAAS;mBAC3D,qBAACC;SAAiB,SAAS,UAAU,oBAAC,eAAY,GAAI,QAAS;oBAC7D,oBAACC,gBAAgB,SAAS,UAAU,oBAAC,cAAW,GAAI,QAAS,GAAI,EACjE,oBAACC,gBAAkB,SAAS,UAAU,oBAAC;UAAW,MAAK;UAAS,GAAI;WAAS,GAAI;UAChE,EACnB,oBAACC,iBAAiB,SAAS,UAAU,oBAAC,eAAY,GAAI,QAAS,GAAI;SACnD;OAClB,oBAACL;QAAW,MAAK;QAAW,WAAW,KAAK;SAAY;;OAC7C;KAEb,qBAACJ;MAAa,MAAK;iBACjB,oBAACC,kBACC,QACE,oBAAC,sBACC,SAAS,UAAU,oBAAC;OAAO,SAAQ;OAAO,GAAI;OAAO,WAAW,aAAa;QAAU,GACvF,GAEJ,EACF,oBAACC;OAAc,WAAW,GAAG,MAAM,QAAQ;iBAAE;QAAoC;OACpE;KAEf,qBAACQ;MAAa;MAAY,OAAO;MAAK,YAAY;MAAK,MAAK;iBAC1D,oBAACC,kBACC,QACE,oBAAC,cACC,SAAS,UACP,qBAAC;OAAO,SAAQ;OAAO,GAAI;OAAO,WAAW,UAAU,KAAK;;QAC1D,oBAAC,iBAAc,WAAW,GAAG,MAAM,UAAU,KAAK,UAAU,GAAI;QAChE,oBAAC,iBAAc,WAAW,GAAG,MAAM,UAAU,KAAK,UAAU,GAAI;QAChE,oBAAC,kBAAe,WAAW,GAAG,MAAM,UAAU,KAAK,WAAW,GAAI;;QAC3D,GAEX,GAEJ,EACF,oBAACC;OAAc,WAAW,GAAG,MAAM,SAAS,MAAM,OAAO;iBACvD,qBAACC;QACC,aAAY;QACZ,gBAAe;QACf,SAAS,UAAU,oBAAC,cAAW,GAAI,QAAS;mBAE5C,oBAACC;SAAmB,SAAS,UAAU,oBAAC,eAAY,GAAI,QAAS;mBAC/D,oBAACC,gBAAkB,SAAS,UAAU,oBAAC,cAAW,GAAI,QAAS,GAAI;UAChD,EACrB,oBAACC,iBAAmB,SAAS,UAAU,oBAAC;SAAY;SAAW,GAAI;UAAS,GAAI;SAC9D;QACN;OACH;KAEf,qBAAChB;MAAa,MAAK;iBACjB,oBAACC,kBACC,QACE,oBAAC,kBACC,SAAS,UACP,qBAAC;OAAO,SAAQ;OAAO,GAAI;OAAO,WAAW,UAAU,SAAS;kBAC9D,oBAAC,mBAAgB,WAAW,GAAG,MAAM,UAAU,SAAS,IAAI,GAAI,EAChE,oBAAC,kBAAe,WAAW,GAAG,MAAM,UAAU,SAAS,GAAG,GAAI;QACvD,GAEX,GAEJ,EACF,oBAACC;OAAc,WAAW,GAAG,MAAM,QAAQ;iBACzC,oBAAC,kBAAgB;QACH;OACH;KAEf,qBAACF;MAAa,MAAK;iBACjB,oBAACC,kBACC,QACE,oBAAC,aACC,SAAS,UACP,oBAAC;OAAO,SAAQ;OAAO,GAAI;iBACzB,oBAAC,WAAQ,WAAW,OAAQ;QACrB,GAEX,GAEJ,EACF,oBAACC;OAAc,WAAW,GAAG,MAAM,QAAQ;iBACzC,oBAAC,aAAW;QACE;OACH;KAEf,qBAACF;MAAa,MAAK;iBACjB,oBAACC,kBACC,QACE,oBAAC,oBACC,SAAS,UACP,qBAAC;OAAO,SAAQ;OAAO,GAAI;OAAO,WAAW,UAAU,WAAW;kBAChE,oBAAC,uBAAoB,WAAW,GAAG,MAAM,UAAU,WAAW,MAAM,GAAI,EACxE,oBAAC,sBAAmB,WAAW,GAAG,MAAM,UAAU,WAAW,KAAK,GAAI;QAC/D,GAEX,GAEJ,EACF,oBAACC;OAAc,WAAW,GAAG,MAAM,QAAQ;iBACzC,oBAAC,oBAAkB;QACL;OACH;QACE;KACL;GAEhB,oBAAC,SAAI,WAAW,UAAW;;GACjB"}
|
|
1
|
+
{"version":3,"file":"skin.tailwind.js","names":["Controls.Root","Tooltip.Provider","Tooltip.Root","Tooltip.Trigger","Tooltip.Popup","Time.Group","Time.Value","TimeSlider.Root","TimeSlider.Track","TimeSlider.Fill","TimeSlider.Buffer","TimeSlider.Thumb","Slider.Thumbnail","TimeSlider.Value","Popover.Root","Popover.Trigger","Popover.Popup","VolumeSlider.Root","VolumeSlider.Track","VolumeSlider.Fill","VolumeSlider.Thumb"],"sources":["../../../../src/presets/video/skin.tailwind.tsx"],"sourcesContent":["import {\n CaptionsOffIcon,\n CaptionsOnIcon,\n FullscreenEnterIcon,\n FullscreenExitIcon,\n PauseIcon,\n PipIcon,\n PlayIcon,\n RestartIcon,\n SeekIcon,\n SpinnerIcon,\n VolumeHighIcon,\n VolumeLowIcon,\n VolumeOffIcon,\n} from '@videojs/icons/react';\nimport {\n bufferingIndicator,\n button,\n controls,\n error,\n icon,\n iconContainer,\n iconFlipped,\n iconState,\n overlay,\n playbackRate,\n popup,\n preview,\n root,\n seek,\n slider,\n time,\n} from '@videojs/skins/default/tailwind/video.tailwind';\nimport { cn } from '@videojs/utils/style';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\nimport { Container, usePlayer } from '@/player/context';\nimport { BufferingIndicator } from '@/ui/buffering-indicator';\nimport { CaptionsButton } from '@/ui/captions-button';\nimport { Controls } from '@/ui/controls';\nimport { FullscreenButton } from '@/ui/fullscreen-button';\nimport { MuteButton } from '@/ui/mute-button';\nimport { PiPButton } from '@/ui/pip-button';\nimport { PlayButton } from '@/ui/play-button';\nimport { PlaybackRateButton } from '@/ui/playback-rate-button';\nimport { Popover } from '@/ui/popover';\nimport { SeekButton } from '@/ui/seek-button';\nimport { Slider } from '@/ui/slider';\nimport { Time } from '@/ui/time';\nimport { TimeSlider } from '@/ui/time-slider';\nimport { Tooltip } from '@/ui/tooltip';\nimport { VolumeSlider } from '@/ui/volume-slider';\nimport { ErrorDialog } from './error-dialog';\nimport type { VideoSkinProps } from './skin';\n\nconst SEEK_TIME = 10;\n\n/* --------------------------------------- Components ---------------------------------------- */\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'> & { variant?: 'icon' }>(function Button(\n { className, variant, ...props },\n ref\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(button.base, variant === 'icon' ? button.icon : button.default, className)}\n {...props}\n />\n );\n});\n\nconst SliderRoot = forwardRef<HTMLDivElement, ComponentProps<'div'>>(function SliderRoot({ className, ...props }, ref) {\n return <div ref={ref} className={cn(slider.root, className)} {...props} />;\n});\n\nconst SliderTrack = forwardRef<HTMLDivElement, ComponentProps<'div'>>(function SliderTrack(\n { className, ...props },\n ref\n) {\n return <div ref={ref} className={cn(slider.track, className)} {...props} />;\n});\n\nconst SliderFill = forwardRef<HTMLDivElement, ComponentProps<'div'> & { type?: 'fill' | 'buffer' }>(function SliderFill(\n { type = 'fill', className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cn(slider.fill.base, type === 'fill' ? slider.fill.fill : slider.fill.buffer, className)}\n {...props}\n />\n );\n});\n\nconst SliderThumb = forwardRef<HTMLDivElement, ComponentProps<'div'> & { persistent?: boolean }>(function SliderThumb(\n { persistent, className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cn(slider.thumb.base, persistent ? slider.thumb.persistent : slider.thumb.interactive, className)}\n {...props}\n />\n );\n});\n\nconst errorClasses = {\n root: error.root,\n dialog: error.dialog,\n content: error.content,\n title: error.title,\n description: error.description,\n actions: error.actions,\n close: cn(button.base, button.default),\n};\n\nfunction PlayLabel(): ReactNode {\n const paused = usePlayer((s) => Boolean(s.paused));\n const ended = usePlayer((s) => Boolean(s.ended));\n if (ended) return <>Replay</>;\n return paused ? <>Play</> : <>Pause</>;\n}\n\nfunction CaptionsLabel(): ReactNode {\n const active = usePlayer((s) => Boolean(s.subtitlesShowing));\n return active ? <>Disable captions</> : <>Enable captions</>;\n}\n\nfunction PiPLabel(): ReactNode {\n const pip = usePlayer((s) => Boolean(s.pip));\n return pip ? <>Exit picture-in-picture</> : <>Enter picture-in-picture</>;\n}\n\nfunction FullscreenLabel(): ReactNode {\n const fullscreen = usePlayer((s) => Boolean(s.fullscreen));\n return fullscreen ? <>Exit fullscreen</> : <>Enter fullscreen</>;\n}\n\n/* ------------------------------------------ Skin ------------------------------------------- */\n\nexport function VideoSkinTailwind(props: VideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn(root(false), className)} {...rest}>\n {children}\n\n <BufferingIndicator\n render={(props) => (\n <div {...props} className={bufferingIndicator.root}>\n <div className={bufferingIndicator.container}>\n <SpinnerIcon className={icon} />\n </div>\n </div>\n )}\n />\n\n <ErrorDialog classes={errorClasses} />\n\n <Controls.Root\n data-controls=\"\" // Used as a hook for Tailwind has-[] styles\n className={controls}\n >\n <Tooltip.Provider>\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PlayButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.play.button}>\n <RestartIcon className={cn(icon, iconState.play.restart)} />\n <PlayIcon className={cn(icon, iconState.play.play)} />\n <PauseIcon className={cn(icon, iconState.play.pause)} />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>\n <PlayLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className={seek.button}>\n <span className={iconContainer}>\n <SeekIcon className={cn(icon, iconFlipped)} />\n <span className={cn(seek.label, seek.labelBackward)}>{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>Seek backward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className={seek.button}>\n <span className={iconContainer}>\n <SeekIcon className={icon} />\n <span className={cn(seek.label, seek.labelForward)}>{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>Seek forward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n\n <Time.Group className={time.group}>\n <Time.Value type=\"current\" className={time.current} />\n <TimeSlider.Root render={(props) => <SliderRoot {...props} />}>\n <TimeSlider.Track render={(props) => <SliderTrack {...props} />}>\n <TimeSlider.Fill render={(props) => <SliderFill {...props} />} />\n <TimeSlider.Buffer render={(props) => <SliderFill type=\"buffer\" {...props} />} />\n </TimeSlider.Track>\n <TimeSlider.Thumb render={(props) => <SliderThumb {...props} />} />\n <div className={preview.root}>\n <Slider.Thumbnail className={preview.thumbnail} />\n <TimeSlider.Value type=\"pointer\" className={preview.timestamp} />\n <SpinnerIcon className={cn(icon, preview.spinner)} />\n </div>\n </TimeSlider.Root>\n <Time.Value type=\"duration\" className={time.duration} />\n </Time.Group>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PlaybackRateButton\n render={(props) => <Button variant=\"icon\" {...props} className={playbackRate.button} />}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>Toggle playback rate</Tooltip.Popup>\n </Tooltip.Root>\n\n <Popover.Root openOnHover delay={200} closeDelay={100} side=\"top\">\n <Popover.Trigger\n render={\n <MuteButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.mute.button}>\n <VolumeOffIcon className={cn(icon, iconState.mute.volumeOff)} />\n <VolumeLowIcon className={cn(icon, iconState.mute.volumeLow)} />\n <VolumeHighIcon className={cn(icon, iconState.mute.volumeHigh)} />\n </Button>\n )}\n />\n }\n />\n <Popover.Popup className={cn(popup.popover, popup.volume)}>\n <VolumeSlider.Root\n orientation=\"vertical\"\n thumbAlignment=\"edge\"\n render={(props) => <SliderRoot {...props} />}\n >\n <VolumeSlider.Track render={(props) => <SliderTrack {...props} />}>\n <VolumeSlider.Fill render={(props) => <SliderFill {...props} />} />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb render={(props) => <SliderThumb persistent {...props} />} />\n </VolumeSlider.Root>\n </Popover.Popup>\n </Popover.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <CaptionsButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.captions.button}>\n <CaptionsOffIcon className={cn(icon, iconState.captions.off)} />\n <CaptionsOnIcon className={cn(icon, iconState.captions.on)} />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>\n <CaptionsLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <PiPButton\n render={(props) => (\n <Button variant=\"icon\" {...props}>\n <PipIcon className={icon} />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>\n <PiPLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n\n <Tooltip.Root side=\"top\">\n <Tooltip.Trigger\n render={\n <FullscreenButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.fullscreen.button}>\n <FullscreenEnterIcon className={cn(icon, iconState.fullscreen.enter)} />\n <FullscreenExitIcon className={cn(icon, iconState.fullscreen.exit)} />\n </Button>\n )}\n />\n }\n />\n <Tooltip.Popup className={cn(popup.tooltip)}>\n <FullscreenLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n </Tooltip.Provider>\n </Controls.Root>\n\n <div className={overlay} />\n </Container>\n );\n}\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { cn } from "@videojs/utils/style";
|
|
|
2
2
|
|
|
3
3
|
//#region ../skins/dist/default/default/tailwind/components/button.js
|
|
4
4
|
const button = {
|
|
5
|
-
base: cn("items-center justify-center shrink-0 border-none cursor-pointer select-none text-center", "font-medium", "outline-2 outline-transparent -outline-offset-2", "transition-[background-color,color,outline-offset,scale] duration-150 ease-out", "disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale", "focus-visible:outline-blue-500 focus-visible:outline-offset-2", "data-[availability=unavailable]:hidden"),
|
|
5
|
+
base: cn("items-center justify-center shrink-0 border-none cursor-pointer select-none text-center touch-manipulation", "font-medium", "outline-2 outline-transparent -outline-offset-2", "transition-[background-color,color,outline-offset,scale] duration-150 ease-out", "disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale", "focus-visible:outline-blue-500 focus-visible:outline-offset-2", "data-[availability=unavailable]:hidden"),
|
|
6
6
|
icon: cn("grid w-[2.125rem] aspect-square bg-transparent rounded-full", "text-inherit text-shadow-inherit", "hover:bg-current/10 hover:no-underline", "focus-visible:bg-current/10", "aria-expanded:bg-current/10", "active:scale-90"),
|
|
7
7
|
default: cn("flex py-2 px-4 bg-white rounded-full", "text-black")
|
|
8
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","names":[],"sources":["../../../../../../../../../skins/dist/default/default/tailwind/components/button.js"],"sourcesContent":["import { cn } from \"@videojs/utils/style\";\n\n//#region src/default/tailwind/components/button.ts\nconst button = {\n\tbase: cn(\"items-center justify-center shrink-0 border-none cursor-pointer select-none text-center\", \"font-medium\", \"outline-2 outline-transparent -outline-offset-2\", \"transition-[background-color,color,outline-offset,scale] duration-150 ease-out\", \"disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale\", \"focus-visible:outline-blue-500 focus-visible:outline-offset-2\", \"data-[availability=unavailable]:hidden\"),\n\ticon: cn(\"grid w-[2.125rem] aspect-square bg-transparent rounded-full\", \"text-inherit text-shadow-inherit\", \"hover:bg-current/10 hover:no-underline\", \"focus-visible:bg-current/10\", \"aria-expanded:bg-current/10\", \"active:scale-90\"),\n\tdefault: cn(\"flex py-2 px-4 bg-white rounded-full\", \"text-black\")\n};\n\n//#endregion\nexport { button };\n//# sourceMappingURL=button.js.map"],"mappings":";;;AAGA,MAAM,SAAS;CACd,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"button.js","names":[],"sources":["../../../../../../../../../skins/dist/default/default/tailwind/components/button.js"],"sourcesContent":["import { cn } from \"@videojs/utils/style\";\n\n//#region src/default/tailwind/components/button.ts\nconst button = {\n\tbase: cn(\"items-center justify-center shrink-0 border-none cursor-pointer select-none text-center touch-manipulation\", \"font-medium\", \"outline-2 outline-transparent -outline-offset-2\", \"transition-[background-color,color,outline-offset,scale] duration-150 ease-out\", \"disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale\", \"focus-visible:outline-blue-500 focus-visible:outline-offset-2\", \"data-[availability=unavailable]:hidden\"),\n\ticon: cn(\"grid w-[2.125rem] aspect-square bg-transparent rounded-full\", \"text-inherit text-shadow-inherit\", \"hover:bg-current/10 hover:no-underline\", \"focus-visible:bg-current/10\", \"aria-expanded:bg-current/10\", \"active:scale-90\"),\n\tdefault: cn(\"flex py-2 px-4 bg-white rounded-full\", \"text-black\")\n};\n\n//#endregion\nexport { button };\n//# sourceMappingURL=button.js.map"],"mappings":";;;AAGA,MAAM,SAAS;CACd,MAAM,GAAG,8GAA8G,eAAe,mDAAmD,kFAAkF,sEAAsE,iEAAiE,yCAAyC;CAC3b,MAAM,GAAG,+DAA+D,oCAAoC,0CAA0C,+BAA+B,+BAA+B,kBAAkB;CACtO,SAAS,GAAG,wCAAwC,aAAa;CACjE"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { cn } from "@videojs/utils/style";
|
|
2
2
|
|
|
3
3
|
//#region ../skins/dist/default/default/tailwind/components/popup.js
|
|
4
|
-
const base = cn("m-0 border-0 text-inherit overflow-visible", "transition-[transform,scale,opacity,filter] duration-
|
|
4
|
+
const base = cn("m-0 border-0 text-inherit overflow-visible", "transition-[transform,scale,opacity,filter] duration-150", "data-starting-style:opacity-0 data-starting-style:scale-50 data-starting-style:blur-sm", "data-ending-style:opacity-0 data-ending-style:scale-50 data-ending-style:blur-sm", "data-instant:duration-0", "data-[side=top]:origin-bottom data-[side=bottom]:origin-top data-[side=left]:origin-right data-[side=right]:origin-left", "before:absolute before:pointer-events-[inherit]", "data-[side=top]:before:left-0 data-[side=top]:before:right-0 data-[side=top]:before:top-full", "data-[side=bottom]:before:left-0 data-[side=bottom]:before:right-0 data-[side=bottom]:before:bottom-full", "data-[side=left]:before:top-0 data-[side=left]:before:bottom-0 data-[side=left]:before:left-full", "data-[side=right]:before:top-0 data-[side=right]:before:bottom-0 data-[side=right]:before:right-full");
|
|
5
5
|
const popup = {
|
|
6
|
-
popover: cn(base, "[--media-popover-side-offset:0.5rem]"),
|
|
7
|
-
tooltip: cn(base, "py-1 px-2.5 rounded-full text-[0.75rem] whitespace-nowrap", "[--media-tooltip-side-offset:0.
|
|
6
|
+
popover: cn(base, "[--media-popover-side-offset:0.5rem]", "data-[side=top]:before:h-(--media-popover-side-offset) data-[side=bottom]:before:h-(--media-popover-side-offset)", "data-[side=left]:before:w-(--media-popover-side-offset) data-[side=right]:before:w-(--media-popover-side-offset)"),
|
|
7
|
+
tooltip: cn(base, "py-1 px-2.5 rounded-full text-[0.75rem] whitespace-nowrap", "[--media-tooltip-side-offset:0.75rem]", "data-[side=top]:before:h-(--media-tooltip-side-offset) data-[side=bottom]:before:h-(--media-tooltip-side-offset)", "data-[side=left]:before:w-(--media-tooltip-side-offset) data-[side=right]:before:w-(--media-tooltip-side-offset)"),
|
|
8
8
|
volume: "py-2.5 px-1 rounded-full"
|
|
9
9
|
};
|
|
10
10
|
|