@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.
Files changed (96) hide show
  1. package/dist/default/presets/audio/minimal-skin.css +56 -9
  2. package/dist/default/presets/audio/skin.css +56 -11
  3. package/dist/default/presets/video/minimal-skin.css +203 -47
  4. package/dist/default/presets/video/minimal-skin.js +23 -4
  5. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  6. package/dist/default/presets/video/minimal-skin.tailwind.js +27 -8
  7. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  8. package/dist/default/presets/video/skin.css +191 -37
  9. package/dist/default/presets/video/skin.js +20 -4
  10. package/dist/default/presets/video/skin.js.map +1 -1
  11. package/dist/default/presets/video/skin.tailwind.js +24 -8
  12. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  13. package/dist/default/skins/dist/default/default/tailwind/components/button.js +1 -1
  14. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  15. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +1 -1
  16. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  17. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +3 -3
  18. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  19. package/dist/default/skins/dist/default/default/tailwind/components/preview.js +13 -0
  20. package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  21. package/dist/default/skins/dist/default/default/tailwind/components/root.js +1 -1
  22. package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  23. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +1 -1
  24. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  25. package/dist/default/skins/dist/default/default/tailwind/components/surface.js +1 -1
  26. package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  27. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +17 -12
  28. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  29. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +1 -1
  30. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  31. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +1 -1
  32. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  33. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
  34. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  35. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
  36. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  37. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
  38. package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  39. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  40. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  41. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
  42. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  43. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +19 -13
  44. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  45. package/dist/default/ui/thumbnail/index.js +3 -0
  46. package/dist/dev/presets/audio/minimal-skin.css +56 -9
  47. package/dist/dev/presets/audio/skin.css +56 -11
  48. package/dist/dev/presets/video/minimal-skin.css +203 -47
  49. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  50. package/dist/dev/presets/video/minimal-skin.js +23 -4
  51. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  52. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  53. package/dist/dev/presets/video/minimal-skin.tailwind.js +27 -8
  54. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  55. package/dist/dev/presets/video/skin.css +191 -37
  56. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  57. package/dist/dev/presets/video/skin.js +20 -4
  58. package/dist/dev/presets/video/skin.js.map +1 -1
  59. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  60. package/dist/dev/presets/video/skin.tailwind.js +24 -8
  61. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  62. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +1 -1
  63. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  64. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +1 -1
  65. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  66. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +3 -3
  67. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  68. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js +13 -0
  69. package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
  70. package/dist/dev/skins/dist/default/default/tailwind/components/root.js +1 -1
  71. package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
  72. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +1 -1
  73. package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  74. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +1 -1
  75. package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
  76. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +17 -12
  77. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  78. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +1 -1
  79. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  80. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +1 -1
  81. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  82. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
  83. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  84. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
  85. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  86. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js +14 -0
  87. package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
  88. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  89. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  90. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
  91. package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  92. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +19 -13
  93. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  94. package/dist/dev/ui/thumbnail/index.d.ts +2 -0
  95. package/dist/dev/ui/thumbnail/index.js +3 -0
  96. package/package.json +7 -7
@@ -70,7 +70,6 @@
70
70
  .media-minimal-skin *::before,
71
71
  .media-minimal-skin *::after {
72
72
  box-sizing: border-box;
73
- margin: 0;
74
73
  }
75
74
  .media-minimal-skin img,
76
75
  .media-minimal-skin video,
@@ -299,6 +298,7 @@
299
298
  transition-timing-function: ease-out;
300
299
  cursor: pointer;
301
300
  user-select: none;
301
+ touch-action: manipulation;
302
302
 
303
303
  &:focus-visible {
304
304
  outline-color: currentColor;
@@ -407,6 +407,7 @@
407
407
  flex: 1;
408
408
  border-radius: calc(infinity * 1px);
409
409
  outline: none;
410
+ cursor: pointer;
410
411
 
411
412
  &[data-orientation="horizontal"] {
412
413
  min-width: 5rem;
@@ -536,11 +537,6 @@
536
537
  }
537
538
  }
538
539
 
539
- /* Time display within slider */
540
- .media-minimal-skin .media-slider__time-display {
541
- font-variant-numeric: tabular-nums;
542
- }
543
-
544
540
  /* ==========================================================================
545
541
  Popups & Animations
546
542
  ========================================================================== */
@@ -552,12 +548,12 @@
552
548
  color: inherit;
553
549
  overflow: visible;
554
550
  transition-property: transform, scale, opacity, filter;
555
- transition-duration: 200ms;
551
+ transition-duration: 150ms;
556
552
 
557
553
  &[data-starting-style],
558
554
  &[data-ending-style] {
559
555
  opacity: 0;
560
- transform: scale(0);
556
+ transform: scale(0.5);
561
557
  filter: blur(8px);
562
558
  }
563
559
 
@@ -577,6 +573,48 @@
577
573
  &[data-side="right"] {
578
574
  transform-origin: left;
579
575
  }
576
+
577
+ /* Safe area between trigger and popup */
578
+ &::before {
579
+ content: "";
580
+ position: absolute;
581
+ pointer-events: inherit;
582
+ }
583
+
584
+ &[data-side="top"]::before,
585
+ &[data-side="bottom"]::before {
586
+ width: 100%;
587
+ inset-inline: 0;
588
+ }
589
+ &[data-side="top"]::before {
590
+ top: 100%;
591
+ }
592
+ &[data-side="bottom"]::before {
593
+ bottom: 100%;
594
+ }
595
+
596
+ &[data-side="left"]::before,
597
+ &[data-side="right"]::before {
598
+ height: 100%;
599
+ inset-block: 0;
600
+ }
601
+ &[data-side="left"]::before {
602
+ left: 100%;
603
+ }
604
+ &[data-side="right"]::before {
605
+ right: 100%;
606
+ }
607
+ }
608
+
609
+ .media-minimal-skin .media-popover {
610
+ &[data-side="top"]::before,
611
+ &[data-side="bottom"]::before {
612
+ height: var(--media-popover-side-offset);
613
+ }
614
+ &[data-side="left"]::before,
615
+ &[data-side="right"]::before {
616
+ width: var(--media-popover-side-offset);
617
+ }
580
618
  }
581
619
 
582
620
  .media-minimal-skin .media-tooltip {
@@ -589,7 +627,16 @@
589
627
  0 2px 4px -2px oklch(0 0 0 / 0.1);
590
628
  font-size: 0.75rem;
591
629
  white-space: nowrap;
592
- --media-tooltip-side-offset: 0.5rem;
630
+ --media-tooltip-side-offset: 0.75rem;
631
+
632
+ &[data-side="top"]::before,
633
+ &[data-side="bottom"]::before {
634
+ height: var(--media-tooltip-side-offset);
635
+ }
636
+ &[data-side="left"]::before,
637
+ &[data-side="right"]::before {
638
+ width: var(--media-tooltip-side-offset);
639
+ }
593
640
 
594
641
  @media (prefers-reduced-transparency: reduce) {
595
642
  background-color: oklch(0 0 0 / 0.7);
@@ -70,7 +70,6 @@
70
70
  .media-default-skin *::before,
71
71
  .media-default-skin *::after {
72
72
  box-sizing: border-box;
73
- margin: 0;
74
73
  }
75
74
  .media-default-skin img,
76
75
  .media-default-skin video,
@@ -120,7 +119,7 @@
120
119
  background-color: var(--media-surface-background-color);
121
120
  backdrop-filter: var(--media-surface-backdrop-filter);
122
121
  box-shadow:
123
- inset 0 0 0 1px var(--media-surface-inner-border-color),
122
+ 0 0 0 1px var(--media-surface-outer-border-color),
124
123
  0 1px 3px 0 var(--media-surface-shadow-color),
125
124
  0 1px 2px -1px var(--media-surface-shadow-color);
126
125
 
@@ -131,7 +130,7 @@
131
130
  inset: 0;
132
131
  z-index: 10;
133
132
  border-radius: inherit;
134
- box-shadow: 0 0 0 1px var(--media-surface-outer-border-color);
133
+ box-shadow: inset 0 0 0 1px var(--media-surface-inner-border-color);
135
134
  pointer-events: none;
136
135
  }
137
136
 
@@ -316,6 +315,7 @@
316
315
  transition-timing-function: ease-out;
317
316
  cursor: pointer;
318
317
  user-select: none;
318
+ touch-action: manipulation;
319
319
 
320
320
  &:focus-visible {
321
321
  outline-color: oklch(62.3% 0.214 259.815);
@@ -425,6 +425,7 @@
425
425
  flex: 1;
426
426
  border-radius: calc(infinity * 1px);
427
427
  outline: none;
428
+ cursor: pointer;
428
429
 
429
430
  &[data-orientation="horizontal"] {
430
431
  min-width: 5rem;
@@ -557,11 +558,6 @@
557
558
  }
558
559
  }
559
560
 
560
- /* Time display within slider */
561
- .media-default-skin .media-slider__time-display {
562
- font-variant-numeric: tabular-nums;
563
- }
564
-
565
561
  /* ==========================================================================
566
562
  Popups & Tooltips
567
563
  ========================================================================== */
@@ -573,12 +569,12 @@
573
569
  color: inherit;
574
570
  overflow: visible;
575
571
  transition-property: transform, scale, opacity, filter;
576
- transition-duration: 200ms;
572
+ transition-duration: 150ms;
577
573
 
578
574
  &[data-starting-style],
579
575
  &[data-ending-style] {
580
576
  opacity: 0;
581
- transform: scale(0);
577
+ transform: scale(0.5);
582
578
  filter: blur(8px);
583
579
  }
584
580
 
@@ -598,10 +594,50 @@
598
594
  &[data-side="right"] {
599
595
  transform-origin: left;
600
596
  }
597
+
598
+ /* Safe area between trigger and popup */
599
+ &::before {
600
+ content: "";
601
+ position: absolute;
602
+ pointer-events: inherit;
603
+ }
604
+
605
+ &[data-side="top"]::before,
606
+ &[data-side="bottom"]::before {
607
+ width: 100%;
608
+ inset-inline: 0;
609
+ }
610
+ &[data-side="top"]::before {
611
+ top: 100%;
612
+ }
613
+ &[data-side="bottom"]::before {
614
+ bottom: 100%;
615
+ }
616
+
617
+ &[data-side="left"]::before,
618
+ &[data-side="right"]::before {
619
+ height: 100%;
620
+ inset-block: 0;
621
+ }
622
+ &[data-side="left"]::before {
623
+ left: 100%;
624
+ }
625
+ &[data-side="right"]::before {
626
+ right: 100%;
627
+ }
601
628
  }
602
629
 
603
630
  .media-default-skin .media-popover {
604
631
  --media-popover-side-offset: 0.5rem;
632
+
633
+ &[data-side="top"]::before,
634
+ &[data-side="bottom"]::before {
635
+ height: var(--media-popover-side-offset);
636
+ }
637
+ &[data-side="left"]::before,
638
+ &[data-side="right"]::before {
639
+ width: var(--media-popover-side-offset);
640
+ }
605
641
  }
606
642
  .media-default-skin .media-popover--volume {
607
643
  padding: 0.625rem 0.25rem;
@@ -613,7 +649,16 @@
613
649
  border-radius: calc(infinity * 1px);
614
650
  font-size: 0.75rem;
615
651
  white-space: nowrap;
616
- --media-tooltip-side-offset: 0.5rem;
652
+ --media-tooltip-side-offset: 0.75rem;
653
+
654
+ &[data-side="top"]::before,
655
+ &[data-side="bottom"]::before {
656
+ height: var(--media-tooltip-side-offset);
657
+ }
658
+ &[data-side="left"]::before,
659
+ &[data-side="right"]::before {
660
+ width: var(--media-tooltip-side-offset);
661
+ }
617
662
  }
618
663
 
619
664
 
@@ -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, 0.75rem);
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
- border-radius: inherit;
172
- object-fit: cover;
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 > img {
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 (prefers-reduced-motion: reduce) {
212
- transition-duration: 100ms;
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
- transition-duration: 150ms;
220
- transition-delay: 0ms;
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: 200ms;
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.5rem;
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 150ms ease-out;
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 (prefers-reduced-motion: reduce) {
806
- scale: 1;
807
- transform: translateY(0);
808
- filter: blur(0);
809
- transition-duration: 100ms;
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
+
@@ -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: [/* @__PURE__ */ jsxs(SliderTrack, {
180
- className: "media-slider__track",
181
- children: [/* @__PURE__ */ jsx(SliderFill, { className: "media-slider__fill" }), /* @__PURE__ */ jsx(SliderBuffer, { className: "media-slider__buffer" })]
182
- }), /* @__PURE__ */ jsx(SliderThumb, { className: "media-slider__thumb" })]
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", {