@videojs/react 10.0.0-beta.4 → 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/video/minimal-skin.css +203 -47
- 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 +27 -8
- package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/video/skin.css +191 -37
- package/dist/default/presets/video/skin.js +20 -4
- package/dist/default/presets/video/skin.js.map +1 -1
- package/dist/default/presets/video/skin.tailwind.js +24 -8
- 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/overlay.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/overlay.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 +17 -12
- 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/overlay.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.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 +19 -13
- 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 +203 -47
- 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 +191 -37
- 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/overlay.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/overlay.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 +17 -12
- 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/overlay.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.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 +19 -13
- 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-minimal-skin *::before,
|
|
101
101
|
.media-minimal-skin *::after {
|
|
102
102
|
box-sizing: border-box;
|
|
103
|
-
margin: 0;
|
|
104
103
|
}
|
|
105
104
|
.media-minimal-skin img,
|
|
106
105
|
.media-minimal-skin video,
|
|
@@ -151,9 +150,11 @@
|
|
|
151
150
|
display: block;
|
|
152
151
|
width: 100%;
|
|
153
152
|
height: 100%;
|
|
153
|
+
object-fit: var(--media-object-fit, contain);
|
|
154
|
+
object-position: var(--media-object-position, center);
|
|
154
155
|
}
|
|
155
156
|
.media-minimal-skin ::slotted(video) {
|
|
156
|
-
border-radius: var(--media-border-radius
|
|
157
|
+
border-radius: var(--media-video-border-radius);
|
|
157
158
|
}
|
|
158
159
|
.media-minimal-skin video {
|
|
159
160
|
border-radius: inherit;
|
|
@@ -168,10 +169,11 @@
|
|
|
168
169
|
inset: 0;
|
|
169
170
|
width: 100%;
|
|
170
171
|
height: 100%;
|
|
171
|
-
|
|
172
|
-
object-
|
|
172
|
+
object-fit: var(--media-object-fit, contain);
|
|
173
|
+
object-position: var(--media-object-position, center);
|
|
173
174
|
transition: opacity 0.25s;
|
|
174
175
|
pointer-events: none;
|
|
176
|
+
border-radius: inherit;
|
|
175
177
|
|
|
176
178
|
&:not([data-visible]) {
|
|
177
179
|
opacity: 0;
|
|
@@ -182,14 +184,10 @@
|
|
|
182
184
|
Fullscreen
|
|
183
185
|
========================================================================== */
|
|
184
186
|
|
|
185
|
-
.media-minimal-skin:fullscreen video,
|
|
186
187
|
.media-minimal-skin:fullscreen ::slotted(video),
|
|
187
|
-
.media-minimal-skin
|
|
188
|
+
.media-minimal-skin:fullscreen video {
|
|
188
189
|
object-fit: contain;
|
|
189
190
|
}
|
|
190
|
-
.media-minimal-skin:fullscreen ::slotted(video) {
|
|
191
|
-
border-radius: 0;
|
|
192
|
-
}
|
|
193
191
|
|
|
194
192
|
/* ==========================================================================
|
|
195
193
|
Overlay / Scrim
|
|
@@ -202,22 +200,28 @@
|
|
|
202
200
|
background-image: linear-gradient(to top, oklch(0 0 0 / 0.7), oklch(0 0 0 / 0.5) 7.5rem, oklch(0 0 0 / 0));
|
|
203
201
|
backdrop-filter: blur(0) saturate(1.5);
|
|
204
202
|
opacity: 0;
|
|
205
|
-
transition-property: opacity, backdrop-filter;
|
|
206
|
-
transition-duration: 500ms;
|
|
207
|
-
transition-delay: 500ms;
|
|
208
|
-
transition-timing-function: ease-out;
|
|
209
203
|
pointer-events: none;
|
|
210
204
|
|
|
211
|
-
@media (
|
|
212
|
-
transition-
|
|
205
|
+
@media (pointer: fine) {
|
|
206
|
+
transition-property: opacity, backdrop-filter;
|
|
207
|
+
transition-duration: 500ms;
|
|
208
|
+
transition-delay: 500ms;
|
|
209
|
+
transition-timing-function: ease-out;
|
|
210
|
+
|
|
211
|
+
@media (prefers-reduced-motion: reduce) {
|
|
212
|
+
transition-duration: 100ms;
|
|
213
|
+
}
|
|
213
214
|
}
|
|
214
215
|
}
|
|
215
216
|
|
|
216
217
|
.media-minimal-skin .media-controls[data-visible] ~ .media-overlay,
|
|
217
218
|
.media-minimal-skin .media-error[data-open] ~ .media-overlay {
|
|
218
219
|
opacity: 1;
|
|
219
|
-
|
|
220
|
-
|
|
220
|
+
|
|
221
|
+
@media (pointer: fine) {
|
|
222
|
+
transition-duration: 150ms;
|
|
223
|
+
transition-delay: 0ms;
|
|
224
|
+
}
|
|
221
225
|
}
|
|
222
226
|
|
|
223
227
|
.media-minimal-skin .media-error[data-open] ~ .media-overlay {
|
|
@@ -411,6 +415,7 @@
|
|
|
411
415
|
transition-timing-function: ease-out;
|
|
412
416
|
cursor: pointer;
|
|
413
417
|
user-select: none;
|
|
418
|
+
touch-action: manipulation;
|
|
414
419
|
|
|
415
420
|
&:focus-visible {
|
|
416
421
|
outline-color: currentColor;
|
|
@@ -507,6 +512,54 @@
|
|
|
507
512
|
scale: -1 1;
|
|
508
513
|
}
|
|
509
514
|
|
|
515
|
+
/* ==========================================================================
|
|
516
|
+
Media preview
|
|
517
|
+
========================================================================== */
|
|
518
|
+
.media-minimal-skin .media-preview {
|
|
519
|
+
& .media-preview__thumbnail-wrapper {
|
|
520
|
+
position: relative;
|
|
521
|
+
border-radius: 0.5rem;
|
|
522
|
+
background-color: oklch(0 0 0 / 0.9);
|
|
523
|
+
}
|
|
524
|
+
& .media-preview__thumbnail {
|
|
525
|
+
display: block;
|
|
526
|
+
border-radius: inherit;
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
& .media-preview__timestamp {
|
|
530
|
+
display: block;
|
|
531
|
+
font-variant-numeric: tabular-nums;
|
|
532
|
+
text-align: center;
|
|
533
|
+
margin-top: 0.5rem;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
& .media-overlay {
|
|
537
|
+
opacity: 1;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
& .media-preview__spinner {
|
|
541
|
+
position: absolute;
|
|
542
|
+
top: 50%;
|
|
543
|
+
left: 50%;
|
|
544
|
+
transform: translate(-50%, -50%);
|
|
545
|
+
opacity: 0;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
& .media-preview__thumbnail,
|
|
549
|
+
& .media-preview__spinner {
|
|
550
|
+
transition: opacity 150ms ease-out;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
&:has(.media-preview__thumbnail[data-loading]) {
|
|
554
|
+
& .media-preview__thumbnail {
|
|
555
|
+
opacity: 0;
|
|
556
|
+
}
|
|
557
|
+
& .media-preview__spinner {
|
|
558
|
+
opacity: 1;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
|
|
510
563
|
/* ==========================================================================
|
|
511
564
|
Slider
|
|
512
565
|
========================================================================== */
|
|
@@ -519,6 +572,7 @@
|
|
|
519
572
|
flex: 1;
|
|
520
573
|
border-radius: calc(infinity * 1px);
|
|
521
574
|
outline: none;
|
|
575
|
+
cursor: pointer;
|
|
522
576
|
|
|
523
577
|
&[data-orientation="horizontal"] {
|
|
524
578
|
min-width: 5rem;
|
|
@@ -648,11 +702,6 @@
|
|
|
648
702
|
}
|
|
649
703
|
}
|
|
650
704
|
|
|
651
|
-
/* Time display within slider */
|
|
652
|
-
.media-minimal-skin .media-slider__time-display {
|
|
653
|
-
font-variant-numeric: tabular-nums;
|
|
654
|
-
}
|
|
655
|
-
|
|
656
705
|
/* ==========================================================================
|
|
657
706
|
Popups & Animations
|
|
658
707
|
========================================================================== */
|
|
@@ -664,12 +713,12 @@
|
|
|
664
713
|
color: inherit;
|
|
665
714
|
overflow: visible;
|
|
666
715
|
transition-property: transform, scale, opacity, filter;
|
|
667
|
-
transition-duration:
|
|
716
|
+
transition-duration: 150ms;
|
|
668
717
|
|
|
669
718
|
&[data-starting-style],
|
|
670
719
|
&[data-ending-style] {
|
|
671
720
|
opacity: 0;
|
|
672
|
-
transform: scale(0);
|
|
721
|
+
transform: scale(0.5);
|
|
673
722
|
filter: blur(8px);
|
|
674
723
|
}
|
|
675
724
|
|
|
@@ -689,6 +738,48 @@
|
|
|
689
738
|
&[data-side="right"] {
|
|
690
739
|
transform-origin: left;
|
|
691
740
|
}
|
|
741
|
+
|
|
742
|
+
/* Safe area between trigger and popup */
|
|
743
|
+
&::before {
|
|
744
|
+
content: "";
|
|
745
|
+
position: absolute;
|
|
746
|
+
pointer-events: inherit;
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
&[data-side="top"]::before,
|
|
750
|
+
&[data-side="bottom"]::before {
|
|
751
|
+
width: 100%;
|
|
752
|
+
inset-inline: 0;
|
|
753
|
+
}
|
|
754
|
+
&[data-side="top"]::before {
|
|
755
|
+
top: 100%;
|
|
756
|
+
}
|
|
757
|
+
&[data-side="bottom"]::before {
|
|
758
|
+
bottom: 100%;
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
&[data-side="left"]::before,
|
|
762
|
+
&[data-side="right"]::before {
|
|
763
|
+
height: 100%;
|
|
764
|
+
inset-block: 0;
|
|
765
|
+
}
|
|
766
|
+
&[data-side="left"]::before {
|
|
767
|
+
left: 100%;
|
|
768
|
+
}
|
|
769
|
+
&[data-side="right"]::before {
|
|
770
|
+
right: 100%;
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
.media-minimal-skin .media-popover {
|
|
775
|
+
&[data-side="top"]::before,
|
|
776
|
+
&[data-side="bottom"]::before {
|
|
777
|
+
height: var(--media-popover-side-offset);
|
|
778
|
+
}
|
|
779
|
+
&[data-side="left"]::before,
|
|
780
|
+
&[data-side="right"]::before {
|
|
781
|
+
width: var(--media-popover-side-offset);
|
|
782
|
+
}
|
|
692
783
|
}
|
|
693
784
|
|
|
694
785
|
.media-minimal-skin .media-tooltip {
|
|
@@ -701,7 +792,16 @@
|
|
|
701
792
|
0 2px 4px -2px oklch(0 0 0 / 0.1);
|
|
702
793
|
font-size: 0.75rem;
|
|
703
794
|
white-space: nowrap;
|
|
704
|
-
--media-tooltip-side-offset: 0.
|
|
795
|
+
--media-tooltip-side-offset: 0.75rem;
|
|
796
|
+
|
|
797
|
+
&[data-side="top"]::before,
|
|
798
|
+
&[data-side="bottom"]::before {
|
|
799
|
+
height: var(--media-tooltip-side-offset);
|
|
800
|
+
}
|
|
801
|
+
&[data-side="left"]::before,
|
|
802
|
+
&[data-side="right"]::before {
|
|
803
|
+
width: var(--media-tooltip-side-offset);
|
|
804
|
+
}
|
|
705
805
|
|
|
706
806
|
@media (prefers-reduced-transparency: reduce) {
|
|
707
807
|
background-color: oklch(0 0 0 / 0.7);
|
|
@@ -717,6 +817,7 @@
|
|
|
717
817
|
========================================================================== */
|
|
718
818
|
|
|
719
819
|
.media-minimal-skin {
|
|
820
|
+
--media-caption-track-duration: 150ms;
|
|
720
821
|
--media-caption-track-delay: 600ms;
|
|
721
822
|
--media-caption-track-y: -0.5rem;
|
|
722
823
|
|
|
@@ -724,23 +825,21 @@
|
|
|
724
825
|
--media-caption-track-delay: 25ms;
|
|
725
826
|
--media-caption-track-y: -3rem;
|
|
726
827
|
}
|
|
828
|
+
|
|
829
|
+
@media (prefers-reduced-motion: reduce) {
|
|
830
|
+
--media-caption-track-duration: 50ms;
|
|
831
|
+
}
|
|
727
832
|
}
|
|
728
833
|
|
|
729
834
|
.media-minimal-skin video::-webkit-media-text-track-container {
|
|
730
835
|
/* NOTE: The delay must account for the controls delay/duration */
|
|
731
|
-
transition: transform
|
|
836
|
+
transition: transform var(--media-caption-track-duration) ease-out;
|
|
732
837
|
transition-delay: var(--media-caption-track-delay);
|
|
733
838
|
transform: translateY(var(--media-caption-track-y)) scale(0.98);
|
|
734
839
|
z-index: 1;
|
|
735
840
|
font-family: inherit;
|
|
736
841
|
}
|
|
737
842
|
|
|
738
|
-
@media (prefers-reduced-motion: reduce) {
|
|
739
|
-
.media-minimal-skin video::-webkit-media-text-track-container {
|
|
740
|
-
transition-duration: 50ms;
|
|
741
|
-
}
|
|
742
|
-
}
|
|
743
|
-
|
|
744
843
|
|
|
745
844
|
/* ==========================================================================
|
|
746
845
|
Root
|
|
@@ -749,6 +848,7 @@
|
|
|
749
848
|
.media-minimal-skin--video {
|
|
750
849
|
background: oklch(0 0 0);
|
|
751
850
|
--media-border-color: oklch(0 0 0 / 0.15);
|
|
851
|
+
--media-video-border-radius: var(--media-border-radius, 0.75rem);
|
|
752
852
|
|
|
753
853
|
@media (prefers-color-scheme: dark) {
|
|
754
854
|
--media-border-color: oklch(1 0 0 / 0.15);
|
|
@@ -767,7 +867,7 @@
|
|
|
767
867
|
|
|
768
868
|
/* Fullscreen */
|
|
769
869
|
&:fullscreen {
|
|
770
|
-
border-radius: 0;
|
|
870
|
+
--media-border-radius: 0;
|
|
771
871
|
}
|
|
772
872
|
}
|
|
773
873
|
|
|
@@ -782,13 +882,16 @@
|
|
|
782
882
|
z-index: 10;
|
|
783
883
|
gap: 0.5rem;
|
|
784
884
|
padding: 2rem 0.375rem 0.375rem 0.375rem;
|
|
785
|
-
will-change: transform, filter, opacity;
|
|
786
|
-
transition-property: transform, filter, opacity;
|
|
787
|
-
transition-duration: 75ms;
|
|
788
|
-
transition-delay: 0ms;
|
|
789
|
-
transition-timing-function: ease-out;
|
|
790
885
|
color: oklch(1 0 0);
|
|
791
886
|
|
|
887
|
+
@media (pointer: fine) {
|
|
888
|
+
will-change: transform, filter, opacity;
|
|
889
|
+
transition-property: transform, filter, opacity;
|
|
890
|
+
transition-duration: 75ms;
|
|
891
|
+
transition-delay: 0ms;
|
|
892
|
+
transition-timing-function: ease-out;
|
|
893
|
+
}
|
|
894
|
+
|
|
792
895
|
@container media-root (width > 40rem) {
|
|
793
896
|
gap: 0.875rem;
|
|
794
897
|
padding: 2.5rem 0.75rem 0.75rem 0.75rem;
|
|
@@ -796,21 +899,29 @@
|
|
|
796
899
|
|
|
797
900
|
&:not([data-visible]) {
|
|
798
901
|
opacity: 0;
|
|
799
|
-
transform: translateY(100%);
|
|
800
|
-
filter: blur(8px);
|
|
801
|
-
transition-duration: 500ms;
|
|
802
|
-
transition-delay: 500ms;
|
|
803
902
|
pointer-events: none;
|
|
804
903
|
|
|
805
|
-
@media (
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
transition-
|
|
904
|
+
@media (pointer: fine) {
|
|
905
|
+
transform: translateY(100%);
|
|
906
|
+
filter: blur(8px);
|
|
907
|
+
transition-duration: 500ms;
|
|
908
|
+
transition-delay: 500ms;
|
|
909
|
+
|
|
910
|
+
@media (prefers-reduced-motion: reduce) {
|
|
911
|
+
scale: 1;
|
|
912
|
+
transform: translateY(0);
|
|
913
|
+
filter: blur(0);
|
|
914
|
+
transition-duration: 100ms;
|
|
915
|
+
}
|
|
810
916
|
}
|
|
811
917
|
}
|
|
812
918
|
}
|
|
813
919
|
|
|
920
|
+
/* Hide cursor when controls are hidden in fullscreen */
|
|
921
|
+
.media-minimal-skin--video:fullscreen:has(.media-controls:not([data-visible])) {
|
|
922
|
+
cursor: none;
|
|
923
|
+
}
|
|
924
|
+
|
|
814
925
|
/* ==========================================================================
|
|
815
926
|
Sliders
|
|
816
927
|
========================================================================== */
|
|
@@ -829,3 +940,48 @@
|
|
|
829
940
|
padding: 0.25rem;
|
|
830
941
|
}
|
|
831
942
|
|
|
943
|
+
/* ==========================================================================
|
|
944
|
+
Slider preview
|
|
945
|
+
========================================================================== */
|
|
946
|
+
|
|
947
|
+
.media-minimal-skin .media-slider__preview {
|
|
948
|
+
position: absolute;
|
|
949
|
+
left: var(--media-slider-pointer);
|
|
950
|
+
bottom: calc(100% + 0.5rem);
|
|
951
|
+
translate: -50%;
|
|
952
|
+
opacity: 0;
|
|
953
|
+
scale: 0.8;
|
|
954
|
+
filter: blur(8px);
|
|
955
|
+
transition-property: scale, opacity, filter;
|
|
956
|
+
transition-duration: 150ms;
|
|
957
|
+
transform-origin: bottom;
|
|
958
|
+
|
|
959
|
+
& .media-preview__thumbnail-wrapper {
|
|
960
|
+
position: relative;
|
|
961
|
+
|
|
962
|
+
&::after {
|
|
963
|
+
content: "";
|
|
964
|
+
position: absolute;
|
|
965
|
+
inset: 0;
|
|
966
|
+
border-radius: inherit;
|
|
967
|
+
box-shadow:
|
|
968
|
+
0 0 0 1px oklch(0 0 0 / 0.05),
|
|
969
|
+
0 1px 3px 0 oklch(0 0 0 / 0.2),
|
|
970
|
+
0 1px 2px -1px oklch(0 0 0 / 0.2);
|
|
971
|
+
}
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
& .media-preview__thumbnail {
|
|
975
|
+
max-width: 11rem;
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
&:has(.media-preview__thumbnail[data-loading]) {
|
|
979
|
+
max-height: 6rem;
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
.media-minimal-skin .media-slider[data-pointing] .media-slider__preview:has([role="img"]:not([data-hidden])) {
|
|
983
|
+
opacity: 1;
|
|
984
|
+
scale: 1;
|
|
985
|
+
filter: blur(0);
|
|
986
|
+
}
|
|
987
|
+
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimal-skin.d.ts","names":[],"sources":["../../../../src/presets/video/minimal-skin.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"minimal-skin.d.ts","names":[],"sources":["../../../../src/presets/video/minimal-skin.tsx"],"mappings":";;;;KAsCY,qBAAA,GAAwB,aAAA;AAAA,iBAsCpB,gBAAA,CAAiB,KAAA,EAAO,qBAAA,GAAwB,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 { Separator } from "../../ui/time/time-separator.js";
|
|
20
22
|
import { Value } from "../../ui/time/time-value.js";
|
|
@@ -176,10 +178,27 @@ function MinimalVideoSkin(props) {
|
|
|
176
178
|
]
|
|
177
179
|
}), /* @__PURE__ */ jsxs(TimeSliderRoot, {
|
|
178
180
|
className: "media-slider",
|
|
179
|
-
children: [
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
181
|
+
children: [
|
|
182
|
+
/* @__PURE__ */ jsxs(SliderTrack, {
|
|
183
|
+
className: "media-slider__track",
|
|
184
|
+
children: [/* @__PURE__ */ jsx(SliderFill, { className: "media-slider__fill" }), /* @__PURE__ */ jsx(SliderBuffer, { className: "media-slider__buffer" })]
|
|
185
|
+
}),
|
|
186
|
+
/* @__PURE__ */ jsx(SliderThumb, { className: "media-slider__thumb" }),
|
|
187
|
+
/* @__PURE__ */ jsxs("div", {
|
|
188
|
+
className: "media-preview media-slider__preview",
|
|
189
|
+
children: [
|
|
190
|
+
/* @__PURE__ */ jsx("div", {
|
|
191
|
+
className: "media-preview__thumbnail-wrapper",
|
|
192
|
+
children: /* @__PURE__ */ jsx(SliderThumbnail, { className: "media-preview__thumbnail" })
|
|
193
|
+
}),
|
|
194
|
+
/* @__PURE__ */ jsx(SliderValue, {
|
|
195
|
+
type: "pointer",
|
|
196
|
+
className: "media-preview__timestamp"
|
|
197
|
+
}),
|
|
198
|
+
/* @__PURE__ */ jsx(SpinnerIcon, { className: "media-preview__spinner media-icon" })
|
|
199
|
+
]
|
|
200
|
+
})
|
|
201
|
+
]
|
|
183
202
|
})]
|
|
184
203
|
}),
|
|
185
204
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"minimal-skin.js","names":["Controls.Root","Tooltip.Provider","Tooltip.Root","Tooltip.Trigger","Tooltip.Popup","Time.Group","Time.Value","Time.Separator","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/minimal-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/minimal';\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 MinimalVideoSkinProps = 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',\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 MinimalVideoSkin(props: MinimalVideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn('media-minimal-skin media-minimal-skin--video', className)} {...rest}>\n {children}\n\n <BufferingIndicator\n render={(props) => (\n <div {...props} className=\"media-buffering-indicator\">\n <SpinnerIcon className=\"media-icon\" />\n </div>\n )}\n />\n\n <ErrorDialog classes={errorClasses} />\n\n <Controls.Root className=\"media-controls\">\n <Tooltip.Provider>\n <div className=\"media-button-group\">\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-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-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-tooltip\">Seek forward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n </div>\n\n <div className=\"media-time-controls\">\n <Time.Group className=\"media-time\">\n <Time.Value type=\"current\" className=\"media-time__value media-time__value--current\" />\n <Time.Separator className=\"media-time__separator\" />\n <Time.Value type=\"duration\" className=\"media-time__value media-time__value--duration\" />\n </Time.Group>\n\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 </div>\n\n <div className=\"media-button-group\">\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-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-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-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-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-tooltip\">\n <FullscreenLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n </div>\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":"minimal-skin.js","names":["Controls.Root","Tooltip.Provider","Tooltip.Root","Tooltip.Trigger","Tooltip.Popup","Time.Group","Time.Value","Time.Separator","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/minimal-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/minimal';\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 MinimalVideoSkinProps = 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',\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 MinimalVideoSkin(props: MinimalVideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn('media-minimal-skin media-minimal-skin--video', className)} {...rest}>\n {children}\n\n <BufferingIndicator\n render={(props) => (\n <div {...props} className=\"media-buffering-indicator\">\n <SpinnerIcon className=\"media-icon\" />\n </div>\n )}\n />\n\n <ErrorDialog classes={errorClasses} />\n\n <Controls.Root className=\"media-controls\">\n <Tooltip.Provider>\n <div className=\"media-button-group\">\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-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-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-tooltip\">Seek forward {SEEK_TIME} seconds</Tooltip.Popup>\n </Tooltip.Root>\n </div>\n\n <div className=\"media-time-controls\">\n <Time.Group className=\"media-time\">\n <Time.Value type=\"current\" className=\"media-time__value media-time__value--current\" />\n <Time.Separator className=\"media-time__separator\" />\n <Time.Value type=\"duration\" className=\"media-time__value media-time__value--duration\" />\n </Time.Group>\n\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-preview media-slider__preview\">\n <div className=\"media-preview__thumbnail-wrapper\">\n <Slider.Thumbnail className=\"media-preview__thumbnail\" />\n </div>\n <TimeSlider.Value type=\"pointer\" className=\"media-preview__timestamp\" />\n <SpinnerIcon className=\"media-preview__spinner media-icon\" />\n </div>\n </TimeSlider.Root>\n </div>\n\n <div className=\"media-button-group\">\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-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-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-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-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-tooltip\">\n <FullscreenLabel />\n </Tooltip.Popup>\n </Tooltip.Root>\n </div>\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":"minimal-skin.tailwind.d.ts","names":[],"sources":["../../../../src/presets/video/minimal-skin.tailwind.tsx"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"minimal-skin.tailwind.d.ts","names":[],"sources":["../../../../src/presets/video/minimal-skin.tailwind.tsx"],"mappings":";;;;iBA+IgB,wBAAA,CAAyB,KAAA,EAAO,qBAAA,GAAwB,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 { Separator } from "../../ui/time/time-separator.js";
|
|
20
22
|
import { Value } from "../../ui/time/time-value.js";
|
|
@@ -48,7 +50,7 @@ import { seek } from "../../skins/dist/default/minimal/tailwind/components/seek.
|
|
|
48
50
|
import { time } from "../../skins/dist/default/minimal/tailwind/components/time.js";
|
|
49
51
|
import { ErrorDialog } from "./error-dialog.js";
|
|
50
52
|
import { overlay } from "../../skins/dist/default/minimal/tailwind/components/overlay.js";
|
|
51
|
-
import { controls, popup, root, slider } from "../../skins/dist/default/minimal/tailwind/video.tailwind.js";
|
|
53
|
+
import { controls, popup, preview, root, slider } from "../../skins/dist/default/minimal/tailwind/video.tailwind.js";
|
|
52
54
|
import { forwardRef } from "react";
|
|
53
55
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
54
56
|
import { cn } from "@videojs/utils/style";
|
|
@@ -218,13 +220,30 @@ function MinimalVideoSkinTailwind(props) {
|
|
|
218
220
|
]
|
|
219
221
|
}), /* @__PURE__ */ jsxs(TimeSliderRoot, {
|
|
220
222
|
render: (props) => /* @__PURE__ */ jsx(SliderRoot, { ...props }),
|
|
221
|
-
children: [
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
223
|
+
children: [
|
|
224
|
+
/* @__PURE__ */ jsxs(SliderTrack$1, {
|
|
225
|
+
render: (props) => /* @__PURE__ */ jsx(SliderTrack, { ...props }),
|
|
226
|
+
children: [/* @__PURE__ */ jsx(SliderFill$1, { render: (props) => /* @__PURE__ */ jsx(SliderFill, { ...props }) }), /* @__PURE__ */ jsx(SliderBuffer, { render: (props) => /* @__PURE__ */ jsx(SliderFill, {
|
|
227
|
+
type: "buffer",
|
|
228
|
+
...props
|
|
229
|
+
}) })]
|
|
230
|
+
}),
|
|
231
|
+
/* @__PURE__ */ jsx(SliderThumb$1, { render: (props) => /* @__PURE__ */ jsx(SliderThumb, { ...props }) }),
|
|
232
|
+
/* @__PURE__ */ jsxs("div", {
|
|
233
|
+
className: preview.root,
|
|
234
|
+
children: [
|
|
235
|
+
/* @__PURE__ */ jsx("div", {
|
|
236
|
+
className: preview.thumbnailWrapper,
|
|
237
|
+
children: /* @__PURE__ */ jsx(SliderThumbnail, { className: preview.thumbnail })
|
|
238
|
+
}),
|
|
239
|
+
/* @__PURE__ */ jsx(SliderValue, {
|
|
240
|
+
type: "pointer",
|
|
241
|
+
className: preview.timestamp
|
|
242
|
+
}),
|
|
243
|
+
/* @__PURE__ */ jsx(SpinnerIcon, { className: cn(icon, preview.spinner) })
|
|
244
|
+
]
|
|
245
|
+
})
|
|
246
|
+
]
|
|
228
247
|
})]
|
|
229
248
|
}),
|
|
230
249
|
/* @__PURE__ */ jsxs("div", {
|