@videojs/react 10.0.0-beta.30 → 10.0.0-beta.31

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 (130) hide show
  1. package/dist/default/i18n/context.js.map +1 -1
  2. package/dist/default/i18n/create-i18n.js +3 -1
  3. package/dist/default/i18n/create-i18n.js.map +1 -1
  4. package/dist/default/i18n/get-provider-root-props.js +4 -2
  5. package/dist/default/i18n/get-provider-root-props.js.map +1 -1
  6. package/dist/default/player/container.js +16 -7
  7. package/dist/default/player/container.js.map +1 -1
  8. package/dist/default/presets/audio/minimal-skin.css +39 -7
  9. package/dist/default/presets/audio/skin.css +31 -7
  10. package/dist/default/presets/live-audio/minimal-skin.css +39 -7
  11. package/dist/default/presets/live-audio/skin.css +31 -7
  12. package/dist/default/presets/live-video/minimal-skin.css +39 -7
  13. package/dist/default/presets/live-video/minimal-skin.js +4 -1
  14. package/dist/default/presets/live-video/minimal-skin.js.map +1 -1
  15. package/dist/default/presets/live-video/minimal-skin.tailwind.js +4 -1
  16. package/dist/default/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  17. package/dist/default/presets/live-video/skin.css +31 -7
  18. package/dist/default/presets/live-video/skin.js +4 -1
  19. package/dist/default/presets/live-video/skin.js.map +1 -1
  20. package/dist/default/presets/live-video/skin.tailwind.js +4 -1
  21. package/dist/default/presets/live-video/skin.tailwind.js.map +1 -1
  22. package/dist/default/presets/video/minimal-skin.css +39 -7
  23. package/dist/default/presets/video/minimal-skin.js +27 -11
  24. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  25. package/dist/default/presets/video/minimal-skin.tailwind.js +28 -12
  26. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  27. package/dist/default/presets/video/skin.css +31 -7
  28. package/dist/default/presets/video/skin.js +27 -11
  29. package/dist/default/presets/video/skin.js.map +1 -1
  30. package/dist/default/presets/video/skin.tailwind.js +28 -12
  31. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  32. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js +1 -1
  33. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js.map +1 -1
  34. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +1 -1
  35. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  36. package/dist/default/skins/dist/default/default/tailwind/components/menu.js +8 -7
  37. package/dist/default/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
  38. package/dist/default/skins/dist/default/default/tailwind/components/time.js +1 -1
  39. package/dist/default/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  40. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js +1 -1
  41. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  42. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  43. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  44. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js +8 -7
  45. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
  46. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +2 -2
  47. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  48. package/dist/default/ui/hooks/use-slider.js +1 -2
  49. package/dist/default/ui/hooks/use-slider.js.map +1 -1
  50. package/dist/dev/i18n/context.d.ts +3 -1
  51. package/dist/dev/i18n/context.d.ts.map +1 -1
  52. package/dist/dev/i18n/context.js.map +1 -1
  53. package/dist/dev/i18n/create-i18n.d.ts.map +1 -1
  54. package/dist/dev/i18n/create-i18n.js +3 -1
  55. package/dist/dev/i18n/create-i18n.js.map +1 -1
  56. package/dist/dev/i18n/get-provider-root-props.js +4 -2
  57. package/dist/dev/i18n/get-provider-root-props.js.map +1 -1
  58. package/dist/dev/player/container.d.ts.map +1 -1
  59. package/dist/dev/player/container.js +16 -7
  60. package/dist/dev/player/container.js.map +1 -1
  61. package/dist/dev/presets/audio/minimal-skin.css +39 -7
  62. package/dist/dev/presets/audio/skin.css +31 -7
  63. package/dist/dev/presets/live-audio/minimal-skin.css +39 -7
  64. package/dist/dev/presets/live-audio/skin.css +31 -7
  65. package/dist/dev/presets/live-video/minimal-skin.css +39 -7
  66. package/dist/dev/presets/live-video/minimal-skin.js +4 -1
  67. package/dist/dev/presets/live-video/minimal-skin.js.map +1 -1
  68. package/dist/dev/presets/live-video/minimal-skin.tailwind.js +4 -1
  69. package/dist/dev/presets/live-video/minimal-skin.tailwind.js.map +1 -1
  70. package/dist/dev/presets/live-video/skin.css +31 -7
  71. package/dist/dev/presets/live-video/skin.js +4 -1
  72. package/dist/dev/presets/live-video/skin.js.map +1 -1
  73. package/dist/dev/presets/live-video/skin.tailwind.js +4 -1
  74. package/dist/dev/presets/live-video/skin.tailwind.js.map +1 -1
  75. package/dist/dev/presets/video/minimal-skin.css +39 -7
  76. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  77. package/dist/dev/presets/video/minimal-skin.js +27 -11
  78. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  79. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  80. package/dist/dev/presets/video/minimal-skin.tailwind.js +28 -12
  81. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  82. package/dist/dev/presets/video/skin.css +31 -7
  83. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  84. package/dist/dev/presets/video/skin.js +27 -11
  85. package/dist/dev/presets/video/skin.js.map +1 -1
  86. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  87. package/dist/dev/presets/video/skin.tailwind.js +28 -12
  88. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  89. package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js +1 -1
  90. package/dist/dev/skins/dist/default/default/tailwind/components/button-group.js.map +1 -1
  91. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +1 -1
  92. package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  93. package/dist/dev/skins/dist/default/default/tailwind/components/menu.js +8 -7
  94. package/dist/dev/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
  95. package/dist/dev/skins/dist/default/default/tailwind/components/time.js +1 -1
  96. package/dist/dev/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  97. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js +1 -1
  98. package/dist/dev/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  99. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  100. package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  101. package/dist/dev/skins/dist/default/minimal/tailwind/components/menu.js +8 -7
  102. package/dist/dev/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
  103. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +2 -2
  104. package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  105. package/dist/dev/ui/hooks/use-slider.d.ts.map +1 -1
  106. package/dist/dev/ui/hooks/use-slider.js +1 -2
  107. package/dist/dev/ui/hooks/use-slider.js.map +1 -1
  108. package/docs/README.md +1 -1
  109. package/docs/concepts/media-sources.md +26 -2
  110. package/docs/concepts/skins.md +48 -16
  111. package/docs/how-to/customize-skins.md +7933 -50
  112. package/docs/how-to/i18n-switch-locale.md +27 -0
  113. package/docs/how-to/installation.md +4 -4
  114. package/docs/how-to/migrate-from-plyr.md +1 -1
  115. package/docs/llms.txt +7 -0
  116. package/docs/reference/cloudflare-video.md +223 -0
  117. package/docs/reference/dash-video.md +55 -0
  118. package/docs/reference/feature-metadata.md +3 -1
  119. package/docs/reference/hls-audio.md +27 -1
  120. package/docs/reference/hls-video.md +39 -1
  121. package/docs/reference/hlsjs-video.md +627 -0
  122. package/docs/reference/native-hls-video.md +41 -0
  123. package/docs/reference/shaka-video.md +359 -0
  124. package/docs/reference/spotify-audio.md +188 -0
  125. package/docs/reference/tiktok-video.md +280 -0
  126. package/docs/reference/title.md +1 -1
  127. package/docs/reference/twitch-video.md +211 -0
  128. package/docs/reference/vimeo-video.md +736 -0
  129. package/docs/reference/youtube-video.md +339 -0
  130. package/package.json +8 -8
package/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @videojs/react documentation
2
2
 
3
- Bundled markdown documentation for `@videojs/react` v10.0.0-beta.30.
3
+ Bundled markdown documentation for `@videojs/react` v10.0.0-beta.31.
4
4
 
5
5
  Start at [`./llms.txt`](./llms.txt) — it's the structured index of every page in this directory.
6
6
 
@@ -138,16 +138,40 @@ options for the browser’s own HLS support (today, [DRM](#licensing-one-engine-
138
138
 
139
139
  `engine.vimeo`
140
140
 
141
- `VimeoVideo`
141
+ [VimeoVideo](../reference/vimeo-video.md)
142
142
 
143
143
  [Vimeo embed parameters](https://developer.vimeo.com/player/sdk/embed)
144
144
 
145
145
  `engine.youtube`
146
146
 
147
- `YouTubeVideo`
147
+ [YouTubeVideo](../reference/youtube-video.md)
148
148
 
149
149
  [YouTube player parameters](https://developer.chrome.com/docs/youtube/iframe_api_reference#Parameters)
150
150
 
151
+ `engine.cloudflare`
152
+
153
+ [CloudflareVideo](../reference/cloudflare-video.md)
154
+
155
+ [Stream player parameters](https://developers.cloudflare.com/stream/viewing-videos/using-the-stream-player/)
156
+
157
+ `engine.spotify`
158
+
159
+ [SpotifyAudio](../reference/spotify-audio.md)
160
+
161
+ [Spotify embed options](https://developer.spotify.com/documentation/embeds)
162
+
163
+ `engine.tiktok`
164
+
165
+ [TikTokVideo](../reference/tiktok-video.md)
166
+
167
+ [TikTok player parameters](https://developers.tiktok.com/doc/embed-player)
168
+
169
+ `engine.twitch`
170
+
171
+ [TwitchVideo](../reference/twitch-video.md)
172
+
173
+ [Twitch embed parameters](https://dev.twitch.tv/docs/embed/video-and-clips/)
174
+
151
175
  Naming the engine rather than using one generic key matters where an element has more than one to choose from. `HlsJsVideo` plays through hls.js or through the browser depending on the platform and `preferPlayback`, and only one of them runs — so a single source can describe both paths without either engine reading the other’s options.
152
176
 
153
177
  hls.js reads its options when the engine is constructed, so changing them tears down the engine and builds a new one:
@@ -118,7 +118,9 @@ function SettingsMenu(): ReactNode {
118
118
  <QualityIcon className="media-icon" />
119
119
  <span>{t(qualityText)}</span>
120
120
  <span className="media-menu__hint">
121
- <span className="media-menu__hint-label">{quality.selectedLabel}</span>
121
+ <bdi dir="auto" className="media-menu__hint-label">
122
+ {quality.selectedLabel}
123
+ </bdi>
122
124
  <MenuChevron />
123
125
  </span>
124
126
  </div>
@@ -135,10 +137,10 @@ function SettingsMenu(): ReactNode {
135
137
  aria-label={t(qualityText)}
136
138
  renderItem={(props, item) => (
137
139
  <Menu.RadioItem {...props} className="media-menu__item">
138
- <span>
140
+ <bdi dir="auto">
139
141
  {item.label}
140
142
  {item.tier ? <sup className="media-menu__tier">{item.tier}</sup> : null}
141
- </span>
143
+ </bdi>
142
144
  {item.badge ? <span className="media-badge">{item.badge}</span> : null}
143
145
  <Menu.ItemIndicator checked={item.checked} forceMount className="media-menu__indicator">
144
146
  <CheckIcon className="media-icon" />
@@ -159,7 +161,9 @@ function SettingsMenu(): ReactNode {
159
161
  <SpeechIcon className="media-icon" />
160
162
  <span>{t(audioText)}</span>
161
163
  <span className="media-menu__hint">
162
- <span className="media-menu__hint-label">{audioTrack.selectedLabel}</span>
164
+ <bdi dir="auto" className="media-menu__hint-label">
165
+ {audioTrack.selectedLabel}
166
+ </bdi>
163
167
  <MenuChevron />
164
168
  </span>
165
169
  </div>
@@ -176,7 +180,7 @@ function SettingsMenu(): ReactNode {
176
180
  aria-label={t(audioText)}
177
181
  renderItem={(props, item) => (
178
182
  <Menu.RadioItem {...props} className="media-menu__item">
179
- <span>{item.label}</span>
183
+ <bdi dir="auto">{item.label}</bdi>
180
184
  <Menu.ItemIndicator checked={item.checked} forceMount className="media-menu__indicator">
181
185
  <CheckIcon className="media-icon" />
182
186
  </Menu.ItemIndicator>
@@ -196,7 +200,9 @@ function SettingsMenu(): ReactNode {
196
200
  <SpeedIcon className="media-icon" />
197
201
  <span>{t(speedText)}</span>
198
202
  <span className="media-menu__hint">
199
- <span className="media-menu__hint-label">{playbackRate.selectedLabel}</span>
203
+ <bdi dir="auto" className="media-menu__hint-label">
204
+ {playbackRate.selectedLabel}
205
+ </bdi>
200
206
  <MenuChevron />
201
207
  </span>
202
208
  </div>
@@ -213,7 +219,7 @@ function SettingsMenu(): ReactNode {
213
219
  aria-label={t(playbackRateText)}
214
220
  renderItem={(props, item) => (
215
221
  <Menu.RadioItem {...props} className="media-menu__item">
216
- <span>{item.label}</span>
222
+ <bdi dir="auto">{item.label}</bdi>
217
223
  <Menu.ItemIndicator checked={item.checked} forceMount className="media-menu__indicator">
218
224
  <CheckIcon className="media-icon" />
219
225
  </Menu.ItemIndicator>
@@ -233,7 +239,9 @@ function SettingsMenu(): ReactNode {
233
239
  <CaptionsOffIcon className="media-icon" />
234
240
  <span>{t(captionsText)}</span>
235
241
  <span className="media-menu__hint">
236
- <span className="media-menu__hint-label">{captions.selectedLabel}</span>
242
+ <bdi dir="auto" className="media-menu__hint-label">
243
+ {captions.selectedLabel}
244
+ </bdi>
237
245
  <MenuChevron />
238
246
  </span>
239
247
  </div>
@@ -250,7 +258,7 @@ function SettingsMenu(): ReactNode {
250
258
  aria-label={t(captionsText)}
251
259
  renderItem={(props, item) => (
252
260
  <Menu.RadioItem {...props} className="media-menu__item">
253
- <span>{item.label}</span>
261
+ <bdi dir="auto">{item.label}</bdi>
254
262
  <Menu.ItemIndicator checked={item.checked} forceMount className="media-menu__indicator">
255
263
  <CheckIcon className="media-icon" />
256
264
  </Menu.ItemIndicator>
@@ -853,6 +861,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
853
861
  container: media-controls / inline-size;
854
862
  text-shadow: 0 1px 0 var(--shadow-current-color);
855
863
  border-radius: calc(Infinity * 1px);
864
+
865
+ &:dir(rtl) {
866
+ flex-direction: row-reverse;
867
+ }
856
868
  }
857
869
 
858
870
  .media-default-skin .media-time-controls {
@@ -862,6 +874,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
862
874
  align-items: center;
863
875
  container: media-time-controls / inline-size;
864
876
 
877
+ &:dir(rtl) {
878
+ flex-direction: row-reverse;
879
+ }
880
+
865
881
  > .media-time:last-child {
866
882
  @container media-time-controls (width < 16rem) {
867
883
  display: none;
@@ -1066,6 +1082,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
1066
1082
  display: flex;
1067
1083
  gap: 1px;
1068
1084
  align-items: center;
1085
+
1086
+ &:dir(rtl) {
1087
+ flex-direction: row-reverse;
1088
+ }
1069
1089
  }
1070
1090
 
1071
1091
  .media-default-skin .media-badge {
@@ -1088,10 +1108,15 @@ export const { Player } = createPlayer({ features: videoFeatures });
1088
1108
  width: var(--media-icon-size);
1089
1109
  height: var(--media-icon-size);
1090
1110
  }
1091
- .media-default-skin .media-icon--flipped {
1111
+ .media-default-skin .media-icon--flipped,
1112
+ .media-default-skin:dir(rtl) .media-menu__chevron {
1092
1113
  scale: -1 1;
1093
1114
  }
1094
1115
 
1116
+ .media-default-skin:dir(rtl) .media-menu__chevron.media-icon--flipped {
1117
+ scale: 1 1;
1118
+ }
1119
+
1095
1120
  .media-default-skin media-poster,
1096
1121
  .media-default-skin > img {
1097
1122
  position: absolute;
@@ -1732,6 +1757,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
1732
1757
  filter: blur(8px);
1733
1758
  translate: 100% 0;
1734
1759
  }
1760
+
1761
+ &:dir(rtl):where([data-starting-style], [data-ending-style]) {
1762
+ translate: -100% 0;
1763
+ }
1735
1764
  }
1736
1765
 
1737
1766
  .media-menu__separator {
@@ -1774,7 +1803,7 @@ export const { Player } = createPlayer({ features: videoFeatures });
1774
1803
  gap: calc(var(--spacing) * 1.5);
1775
1804
  align-items: center;
1776
1805
  padding: calc(var(--spacing) * 1.5) calc(var(--spacing) * 2);
1777
- text-align: left;
1806
+ text-align: start;
1778
1807
  text-shadow: 0 1px 0 var(--shadow-current-color);
1779
1808
  cursor: pointer;
1780
1809
  user-select: none;
@@ -1818,8 +1847,7 @@ export const { Player } = createPlayer({ features: videoFeatures });
1818
1847
 
1819
1848
  .media-menu__indicator {
1820
1849
  flex-shrink: 0;
1821
- margin-right: calc(var(--spacing) * -1);
1822
- margin-left: auto;
1850
+ margin-inline: auto calc(var(--spacing) * -1);
1823
1851
  opacity: 0;
1824
1852
 
1825
1853
  .media-icon {
@@ -1856,8 +1884,8 @@ export const { Player } = createPlayer({ features: videoFeatures });
1856
1884
  }
1857
1885
 
1858
1886
  .media-menu__tier {
1887
+ padding-inline-start: calc(var(--spacing) * 0.5);
1859
1888
  padding-top: 1px;
1860
- padding-left: calc(var(--spacing) * 0.5);
1861
1889
  font-size: var(--font-size-tiny);
1862
1890
  font-weight: 600;
1863
1891
  line-height: 1;
@@ -1874,8 +1902,8 @@ export const { Player } = createPlayer({ features: videoFeatures });
1874
1902
  gap: calc(var(--spacing) * 1);
1875
1903
  align-items: center;
1876
1904
  min-width: 0;
1877
- padding-left: calc(var(--spacing) * 2);
1878
- margin-left: auto;
1905
+ padding-inline-start: calc(var(--spacing) * 2);
1906
+ margin-inline-start: auto;
1879
1907
  color: oklch(from currentColor l c h / 0.65);
1880
1908
  }
1881
1909
 
@@ -1915,6 +1943,10 @@ export const { Player } = createPlayer({ features: videoFeatures });
1915
1943
  translate: -100% 0;
1916
1944
  }
1917
1945
 
1946
+ &:dir(rtl)[data-submenu-expanded="true"] > :not([data-submenu]) {
1947
+ translate: 100% 0;
1948
+ }
1949
+
1918
1950
  /* WebKit can restart the covered-content transition while the
1919
1951
  anchor-positioned highlight remains active. */
1920
1952
  &[data-submenu-expanded] > :not([data-submenu])::before {