@videojs/html 10.3.0 → 10.4.0

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 (272) hide show
  1. package/dist/default/define/audio/compat-skin.css +91 -38
  2. package/dist/default/define/audio/compat-skin2.js +1 -1
  3. package/dist/default/define/audio/neutral-skin.css +52 -31
  4. package/dist/default/define/audio/neutral-skin2.js +1 -1
  5. package/dist/default/define/audio/scaffold-skin.css +105 -40
  6. package/dist/default/define/audio/scaffold-skin2.js +1 -1
  7. package/dist/default/define/audio/skin.css +53 -31
  8. package/dist/default/define/audio/skin2.js +1 -1
  9. package/dist/default/define/live-audio/compat-skin.css +91 -38
  10. package/dist/default/define/live-audio/compat-skin2.js +1 -1
  11. package/dist/default/define/live-audio/neutral-skin.css +50 -29
  12. package/dist/default/define/live-audio/neutral-skin2.js +1 -1
  13. package/dist/default/define/live-audio/scaffold-skin.css +105 -40
  14. package/dist/default/define/live-audio/scaffold-skin2.js +1 -1
  15. package/dist/default/define/live-audio/skin.css +51 -29
  16. package/dist/default/define/live-audio/skin2.js +1 -1
  17. package/dist/default/define/live-video/compat-skin.css +142 -61
  18. package/dist/default/define/live-video/compat-skin2.js +1 -1
  19. package/dist/default/define/live-video/neutral-skin.css +241 -55
  20. package/dist/default/define/live-video/neutral-skin2.js +1 -1
  21. package/dist/default/define/live-video/scaffold-skin.css +159 -63
  22. package/dist/default/define/live-video/scaffold-skin2.js +1 -1
  23. package/dist/default/define/live-video/skin.css +245 -60
  24. package/dist/default/define/live-video/skin2.js +1 -1
  25. package/dist/default/define/ui/time-slider-markers.js +5 -0
  26. package/dist/default/define/video/compat-skin.css +150 -61
  27. package/dist/default/define/video/compat-skin2.js +1 -1
  28. package/dist/default/define/video/neutral-skin.css +322 -66
  29. package/dist/default/define/video/neutral-skin2.js +1 -1
  30. package/dist/default/define/video/scaffold-skin.css +168 -63
  31. package/dist/default/define/video/scaffold-skin2.js +1 -1
  32. package/dist/default/define/video/skin.css +348 -66
  33. package/dist/default/define/video/skin2.js +1 -1
  34. package/dist/default/index.js +3 -1
  35. package/dist/default/internal/skins/compat-audio/skin.css +91 -38
  36. package/dist/default/internal/skins/compat-live-audio/skin.css +91 -38
  37. package/dist/default/internal/skins/compat-live-video/skin.css +142 -61
  38. package/dist/default/internal/skins/compat-live-video/template.js +2 -0
  39. package/dist/default/internal/skins/compat-video/skin.css +150 -61
  40. package/dist/default/internal/skins/compat-video/template.js +2 -0
  41. package/dist/default/internal/skins/default-audio/skin.css +53 -31
  42. package/dist/default/internal/skins/default-live-audio/skin.css +51 -29
  43. package/dist/default/internal/skins/default-live-video/skin.css +245 -60
  44. package/dist/default/internal/skins/default-live-video/template.js +14 -0
  45. package/dist/default/internal/skins/default-video/register.js +3 -0
  46. package/dist/default/internal/skins/default-video/skin.css +348 -66
  47. package/dist/default/internal/skins/default-video/template.js +33 -5
  48. package/dist/default/internal/skins/neutral-audio/skin.css +52 -31
  49. package/dist/default/internal/skins/neutral-live-audio/skin.css +50 -29
  50. package/dist/default/internal/skins/neutral-live-video/skin.css +241 -55
  51. package/dist/default/internal/skins/neutral-live-video/template.js +14 -0
  52. package/dist/default/internal/skins/neutral-video/skin.css +322 -66
  53. package/dist/default/internal/skins/neutral-video/template.js +25 -11
  54. package/dist/default/internal/skins/scaffold-audio/skin.css +105 -40
  55. package/dist/default/internal/skins/scaffold-live-audio/skin.css +105 -40
  56. package/dist/default/internal/skins/scaffold-live-video/skin.css +159 -63
  57. package/dist/default/internal/skins/scaffold-live-video/template.js +2 -0
  58. package/dist/default/internal/skins/scaffold-video/skin.css +168 -63
  59. package/dist/default/internal/skins/scaffold-video/template.js +3 -1
  60. package/dist/default/media/background-video/adapter.js +13 -35
  61. package/dist/default/media/background-video/base.js +95 -0
  62. package/dist/default/media/background-video/template.js +13 -20
  63. package/dist/default/media/hls-background-video/adapter.js +16 -35
  64. package/dist/default/ui/captions-radio-group/element.js +14 -1
  65. package/dist/default/ui/controls/element.js +6 -3
  66. package/dist/default/ui/time-slider/markers.js +160 -0
  67. package/dist/default/version.js +1 -1
  68. package/dist/dev/define/audio/compat-skin.css +91 -38
  69. package/dist/dev/define/audio/compat-skin2.js +1 -1
  70. package/dist/dev/define/audio/compat-skin2.js.map +1 -1
  71. package/dist/dev/define/audio/neutral-skin.css +52 -31
  72. package/dist/dev/define/audio/neutral-skin2.js +1 -1
  73. package/dist/dev/define/audio/neutral-skin2.js.map +1 -1
  74. package/dist/dev/define/audio/scaffold-skin.css +105 -40
  75. package/dist/dev/define/audio/scaffold-skin2.js +1 -1
  76. package/dist/dev/define/audio/scaffold-skin2.js.map +1 -1
  77. package/dist/dev/define/audio/skin.css +53 -31
  78. package/dist/dev/define/audio/skin2.js +1 -1
  79. package/dist/dev/define/audio/skin2.js.map +1 -1
  80. package/dist/dev/define/live-audio/compat-skin.css +91 -38
  81. package/dist/dev/define/live-audio/compat-skin2.js +1 -1
  82. package/dist/dev/define/live-audio/compat-skin2.js.map +1 -1
  83. package/dist/dev/define/live-audio/neutral-skin.css +50 -29
  84. package/dist/dev/define/live-audio/neutral-skin2.js +1 -1
  85. package/dist/dev/define/live-audio/neutral-skin2.js.map +1 -1
  86. package/dist/dev/define/live-audio/scaffold-skin.css +105 -40
  87. package/dist/dev/define/live-audio/scaffold-skin2.js +1 -1
  88. package/dist/dev/define/live-audio/scaffold-skin2.js.map +1 -1
  89. package/dist/dev/define/live-audio/skin.css +51 -29
  90. package/dist/dev/define/live-audio/skin2.js +1 -1
  91. package/dist/dev/define/live-audio/skin2.js.map +1 -1
  92. package/dist/dev/define/live-video/compat-skin.css +142 -61
  93. package/dist/dev/define/live-video/compat-skin2.js +1 -1
  94. package/dist/dev/define/live-video/compat-skin2.js.map +1 -1
  95. package/dist/dev/define/live-video/neutral-skin.css +241 -55
  96. package/dist/dev/define/live-video/neutral-skin2.js +1 -1
  97. package/dist/dev/define/live-video/neutral-skin2.js.map +1 -1
  98. package/dist/dev/define/live-video/scaffold-skin.css +159 -63
  99. package/dist/dev/define/live-video/scaffold-skin2.js +1 -1
  100. package/dist/dev/define/live-video/scaffold-skin2.js.map +1 -1
  101. package/dist/dev/define/live-video/skin.css +245 -60
  102. package/dist/dev/define/live-video/skin2.js +1 -1
  103. package/dist/dev/define/live-video/skin2.js.map +1 -1
  104. package/dist/dev/define/ui/time-slider-markers.d.ts +8 -0
  105. package/dist/dev/define/ui/time-slider-markers.js +7 -0
  106. package/dist/dev/define/ui/time-slider-markers.js.map +1 -0
  107. package/dist/dev/define/video/compat-skin.css +150 -61
  108. package/dist/dev/define/video/compat-skin2.js +1 -1
  109. package/dist/dev/define/video/compat-skin2.js.map +1 -1
  110. package/dist/dev/define/video/neutral-skin.css +322 -66
  111. package/dist/dev/define/video/neutral-skin2.js +1 -1
  112. package/dist/dev/define/video/neutral-skin2.js.map +1 -1
  113. package/dist/dev/define/video/scaffold-skin.css +168 -63
  114. package/dist/dev/define/video/scaffold-skin2.js +1 -1
  115. package/dist/dev/define/video/scaffold-skin2.js.map +1 -1
  116. package/dist/dev/define/video/skin.css +348 -66
  117. package/dist/dev/define/video/skin2.js +1 -1
  118. package/dist/dev/define/video/skin2.js.map +1 -1
  119. package/dist/dev/index.d.ts +5 -4
  120. package/dist/dev/index.js +3 -1
  121. package/dist/dev/internal/skins/compat-audio/skin.css +91 -38
  122. package/dist/dev/internal/skins/compat-live-audio/skin.css +91 -38
  123. package/dist/dev/internal/skins/compat-live-video/skin.css +142 -61
  124. package/dist/dev/internal/skins/compat-live-video/template.js +2 -0
  125. package/dist/dev/internal/skins/compat-live-video/template.js.map +1 -1
  126. package/dist/dev/internal/skins/compat-video/skin.css +150 -61
  127. package/dist/dev/internal/skins/compat-video/template.js +2 -0
  128. package/dist/dev/internal/skins/compat-video/template.js.map +1 -1
  129. package/dist/dev/internal/skins/default-audio/skin.css +53 -31
  130. package/dist/dev/internal/skins/default-live-audio/skin.css +51 -29
  131. package/dist/dev/internal/skins/default-live-video/register.js.map +1 -1
  132. package/dist/dev/internal/skins/default-live-video/skin.css +245 -60
  133. package/dist/dev/internal/skins/default-live-video/template.js +14 -0
  134. package/dist/dev/internal/skins/default-live-video/template.js.map +1 -1
  135. package/dist/dev/internal/skins/default-video/register.d.ts +1 -0
  136. package/dist/dev/internal/skins/default-video/register.js +3 -0
  137. package/dist/dev/internal/skins/default-video/register.js.map +1 -1
  138. package/dist/dev/internal/skins/default-video/skin.css +348 -66
  139. package/dist/dev/internal/skins/default-video/template.js +33 -5
  140. package/dist/dev/internal/skins/default-video/template.js.map +1 -1
  141. package/dist/dev/internal/skins/neutral-audio/skin.css +52 -31
  142. package/dist/dev/internal/skins/neutral-live-audio/skin.css +50 -29
  143. package/dist/dev/internal/skins/neutral-live-video/register.js.map +1 -1
  144. package/dist/dev/internal/skins/neutral-live-video/skin.css +241 -55
  145. package/dist/dev/internal/skins/neutral-live-video/template.js +14 -0
  146. package/dist/dev/internal/skins/neutral-live-video/template.js.map +1 -1
  147. package/dist/dev/internal/skins/neutral-video/register.js.map +1 -1
  148. package/dist/dev/internal/skins/neutral-video/skin.css +322 -66
  149. package/dist/dev/internal/skins/neutral-video/template.js +25 -11
  150. package/dist/dev/internal/skins/neutral-video/template.js.map +1 -1
  151. package/dist/dev/internal/skins/scaffold-audio/skin.css +105 -40
  152. package/dist/dev/internal/skins/scaffold-live-audio/skin.css +105 -40
  153. package/dist/dev/internal/skins/scaffold-live-video/skin.css +159 -63
  154. package/dist/dev/internal/skins/scaffold-live-video/template.js +2 -0
  155. package/dist/dev/internal/skins/scaffold-live-video/template.js.map +1 -1
  156. package/dist/dev/internal/skins/scaffold-video/skin.css +168 -63
  157. package/dist/dev/internal/skins/scaffold-video/template.js +3 -1
  158. package/dist/dev/internal/skins/scaffold-video/template.js.map +1 -1
  159. package/dist/dev/media/background-video/adapter.d.ts +7 -13
  160. package/dist/dev/media/background-video/adapter.js +13 -35
  161. package/dist/dev/media/background-video/adapter.js.map +1 -1
  162. package/dist/dev/media/background-video/base.d.ts +44 -0
  163. package/dist/dev/media/background-video/base.js +97 -0
  164. package/dist/dev/media/background-video/base.js.map +1 -0
  165. package/dist/dev/media/background-video/template.d.ts +3 -0
  166. package/dist/dev/media/background-video/template.js +13 -20
  167. package/dist/dev/media/background-video/template.js.map +1 -1
  168. package/dist/dev/media/hls-background-video/adapter.d.ts +8 -18
  169. package/dist/dev/media/hls-background-video/adapter.js +16 -35
  170. package/dist/dev/media/hls-background-video/adapter.js.map +1 -1
  171. package/dist/dev/ui/captions-button/element.d.ts +2 -0
  172. package/dist/dev/ui/captions-radio-group/element.d.ts +2 -1
  173. package/dist/dev/ui/captions-radio-group/element.js +14 -1
  174. package/dist/dev/ui/captions-radio-group/element.js.map +1 -1
  175. package/dist/dev/ui/controls/element.d.ts +2 -2
  176. package/dist/dev/ui/controls/element.js +6 -3
  177. package/dist/dev/ui/controls/element.js.map +1 -1
  178. package/dist/dev/ui/time-slider/markers.d.ts +48 -0
  179. package/dist/dev/ui/time-slider/markers.js +165 -0
  180. package/dist/dev/ui/time-slider/markers.js.map +1 -0
  181. package/dist/dev/version.js +1 -1
  182. package/docs/README.md +1 -1
  183. package/docs/guides/autoplay.md +1 -1
  184. package/docs/guides/background-video.md +2 -4
  185. package/docs/guides/browser-support.md +22 -16
  186. package/docs/guides/cdn.md +9 -9
  187. package/docs/guides/customize-skins.md +3 -0
  188. package/docs/guides/installation-cdn.md +2 -2
  189. package/docs/guides/installation-shadcn.md +1 -1
  190. package/docs/guides/installation-svelte.md +2 -2
  191. package/docs/guides/installation-vue.md +2 -2
  192. package/docs/guides/installation.md +2 -2
  193. package/docs/guides/internationalization.md +5 -5
  194. package/docs/guides/keyboard-shortcuts.md +10 -0
  195. package/docs/guides/llms.txt +2 -1
  196. package/docs/guides/migrate-from-media-chrome.md +4 -4
  197. package/docs/guides/migrate-from-mux-player.md +6 -6
  198. package/docs/guides/migrate-from-plyr.md +7 -7
  199. package/docs/guides/migrate-from-video-js-8.md +6 -6
  200. package/docs/guides/migrate-from-vidstack.md +4 -4
  201. package/docs/guides/presets.md +4 -4
  202. package/docs/guides/self-hosting.md +5 -5
  203. package/docs/guides/skins.md +8 -7
  204. package/docs/guides/timed-metadata.md +318 -0
  205. package/docs/llms.txt +16 -2
  206. package/docs/reference/api/chapters-track.md +71 -0
  207. package/docs/reference/api/define-text-track.md +113 -0
  208. package/docs/reference/api/feature-text-cues.md +133 -0
  209. package/docs/reference/api/feature-text-tracks.md +11 -5
  210. package/docs/reference/api/get-active-text-cues.md +69 -0
  211. package/docs/reference/api/get-text-cues.md +69 -0
  212. package/docs/reference/api/get-text-tracks.md +41 -0
  213. package/docs/reference/api/hls-metadata-track.md +48 -0
  214. package/docs/reference/api/html-create-player.md +2 -2
  215. package/docs/reference/api/llms.txt +13 -1
  216. package/docs/reference/api/media-capabilities.md +4 -4
  217. package/docs/reference/api/player-store.md +9 -4
  218. package/docs/reference/api/preset-audio.md +3 -1
  219. package/docs/reference/api/preset-background.md +1 -1
  220. package/docs/reference/api/preset-live-audio.md +3 -1
  221. package/docs/reference/api/preset-live-video.md +2 -1
  222. package/docs/reference/api/preset-video.md +2 -1
  223. package/docs/reference/components/audio-compat-skin.md +1 -1
  224. package/docs/reference/components/audio-neutral-skin.md +1 -1
  225. package/docs/reference/components/audio-scaffold-skin.md +1 -1
  226. package/docs/reference/components/audio-skin.md +1 -1
  227. package/docs/reference/components/audio.md +19 -1
  228. package/docs/reference/components/background-video-skin.md +1 -1
  229. package/docs/reference/components/background-video.md +26 -11
  230. package/docs/reference/components/captions-radio-group.md +1 -1
  231. package/docs/reference/components/cloudflare-video.md +1 -1
  232. package/docs/reference/components/controls.md +16 -3
  233. package/docs/reference/components/dailymotion-video.md +2 -2
  234. package/docs/reference/components/dash-video.md +20 -3
  235. package/docs/reference/components/google-analytics.md +1 -1
  236. package/docs/reference/components/google-cast.md +1 -1
  237. package/docs/reference/components/hls-audio.md +56 -2
  238. package/docs/reference/components/hls-background-video.md +22 -5
  239. package/docs/reference/components/hls-video.md +99 -7
  240. package/docs/reference/components/hlsjs-video.md +52 -13
  241. package/docs/reference/components/live-audio-compat-skin.md +1 -1
  242. package/docs/reference/components/live-audio-neutral-skin.md +1 -1
  243. package/docs/reference/components/live-audio-scaffold-skin.md +1 -1
  244. package/docs/reference/components/live-audio-skin.md +1 -1
  245. package/docs/reference/components/live-video-compat-skin.md +5 -1
  246. package/docs/reference/components/live-video-neutral-skin.md +5 -1
  247. package/docs/reference/components/live-video-scaffold-skin.md +5 -1
  248. package/docs/reference/components/live-video-skin.md +5 -1
  249. package/docs/reference/components/llms.txt +2 -1
  250. package/docs/reference/components/mixcloud-audio.md +2 -2
  251. package/docs/reference/components/mux-audio.md +34 -3
  252. package/docs/reference/components/mux-background-video.md +1 -1
  253. package/docs/reference/components/mux-data.md +1 -1
  254. package/docs/reference/components/mux-video.md +17 -3
  255. package/docs/reference/components/native-hls-video.md +32 -3
  256. package/docs/reference/components/playerjs-video.md +2 -2
  257. package/docs/reference/components/shaka-video.md +2 -3
  258. package/docs/reference/components/soundcloud-audio.md +2 -2
  259. package/docs/reference/components/spotify-audio.md +2 -2
  260. package/docs/reference/components/tiktok-video.md +2 -2
  261. package/docs/reference/components/time-slider-markers.md +194 -0
  262. package/docs/reference/components/time-slider.md +14 -0
  263. package/docs/reference/components/twitch-video.md +1 -1
  264. package/docs/reference/components/video-compat-skin.md +5 -1
  265. package/docs/reference/components/video-neutral-skin.md +5 -1
  266. package/docs/reference/components/video-scaffold-skin.md +5 -1
  267. package/docs/reference/components/video-skin.md +5 -1
  268. package/docs/reference/components/video.md +19 -1
  269. package/docs/reference/components/vimeo-video.md +1 -2
  270. package/docs/reference/components/wistia-video.md +1 -1
  271. package/docs/reference/components/youtube-video.md +1 -2
  272. package/package.json +48 -48
@@ -0,0 +1,194 @@
1
+ # media-time-slider-markers
2
+
3
+ Draws a marker on the time slider for each cue on the text tracks a filter matches, such as ad breaks
4
+
5
+ A part of the [time slider](./time-slider.md) that draws a marker for each cue on the text tracks a filter matches, such as ad breaks, quiz questions, or highlights. Its props, data attributes, and custom properties are listed with the time slider’s other parts.
6
+
7
+ ## Import
8
+
9
+ ```ts
10
+ import '@videojs/html/ui/time-slider-markers';
11
+ ```
12
+
13
+ ## Anatomy
14
+
15
+ ```html
16
+ <media-time-slider>
17
+ <media-slider-track>
18
+ <media-slider-fill></media-slider-fill>
19
+ </media-slider-track>
20
+ <media-time-slider-markers label="ads"></media-time-slider-markers>
21
+ <media-slider-thumb></media-slider-thumb>
22
+ </media-time-slider>
23
+ ```
24
+
25
+ Each marker is a `<div>`, or a clone of a `<template>` child. The template must contain exactly one HTML root element, and stays in the light DOM.
26
+
27
+ ```html
28
+ <media-time-slider-markers label="ads">
29
+ <template>
30
+ <div class="ad-marker"></div>
31
+ </template>
32
+ </media-time-slider-markers>
33
+ ```
34
+
35
+ ## Behavior
36
+
37
+ The `kind`, `label`, and `language` attributes pick the tracks whose cues are drawn. The `filter` property takes a filter object, a function, or a [track definition](../api/define-text-track.md) instead, and takes priority over the attributes. With neither, nothing is drawn.
38
+
39
+ Tracks from the media and from the app are drawn alike. While the markers are rendered, the [text cues feature](../api/feature-text-cues.md) reads the tracks they match, so tracks it skips by default work too.
40
+
41
+ A cue whose end is its start is a point, drawn as a marker with no width and `data-point`. Any other cue is a range, spanning from its start to its end and clamped to the slider. Markers sit on the same span as the slider: from `0` to the media’s duration, or to the end of its seekable range while the duration is unknown. Cues outside that span, and every cue while it’s unknown, aren’t drawn. Markers are ordered by start, then end.
42
+
43
+ ## Styling
44
+
45
+ | Attribute | Description |
46
+ | --- | --- |
47
+ | `data-active` | Present while the marker’s cue is active. |
48
+ | `data-point` | Present when the cue marks one moment rather than a span. |
49
+
50
+ Each marker also carries the slider’s data attributes, such as `data-orientation`, and its geometry through:
51
+
52
+ - `--media-slider-marker-start`
53
+ - `--media-slider-marker-end`
54
+ - `--media-slider-marker-width`, the marker’s size along the slider, `0%` for a point
55
+
56
+ Markers are unstyled. Position each one from its custom properties, and give points a visible width:
57
+
58
+ ```css
59
+ media-time-slider-markers > div {
60
+ position: absolute;
61
+ inset-block: 0;
62
+ left: var(--media-slider-marker-start);
63
+ width: var(--media-slider-marker-width);
64
+ min-width: 4px;
65
+ }
66
+
67
+ media-time-slider-markers > [data-active] {
68
+ background: orange;
69
+ }
70
+ ```
71
+
72
+ ## Accessibility
73
+
74
+ The markers render with `aria-hidden="true"`; the slider’s value is what assistive technology reads. When a marker carries meaning a viewer needs, such as an upcoming ad break, convey it another way too.
75
+
76
+ ## Examples
77
+
78
+ ### Basic usage
79
+
80
+ An app track labeled `ads` holds a point at 8 seconds and a range from 18 to 24 seconds. A marker turns orange while its cue is active.
81
+
82
+ **index.html**
83
+
84
+ ```html
85
+ <video-player class="html-time-slider-markers-basic">
86
+ <media-container class="html-time-slider-markers-basic__container">
87
+ <video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" autoplay muted playsinline loop></video>
88
+ <media-time-slider class="html-time-slider-markers-basic__slider">
89
+ <media-slider-track class="html-time-slider-markers-basic__track">
90
+ <media-slider-fill class="html-time-slider-markers-basic__fill"></media-slider-fill>
91
+ </media-slider-track>
92
+ <media-time-slider-markers label="ads" class="html-time-slider-markers-basic__markers">
93
+ <template>
94
+ <div class="html-time-slider-markers-basic__marker"></div>
95
+ </template>
96
+ </media-time-slider-markers>
97
+ <media-slider-thumb class="html-time-slider-markers-basic__thumb"></media-slider-thumb>
98
+ </media-time-slider>
99
+ </media-container>
100
+ </video-player>
101
+ ```
102
+
103
+ **index.css**
104
+
105
+ ```css
106
+ .html-time-slider-markers-basic__container {
107
+ position: relative;
108
+ }
109
+
110
+ .html-time-slider-markers-basic__container video {
111
+ width: 100%;
112
+ aspect-ratio: 16 / 9;
113
+ }
114
+
115
+ .html-time-slider-markers-basic__slider {
116
+ position: absolute;
117
+ right: 12px;
118
+ bottom: 12px;
119
+ left: 12px;
120
+ display: flex;
121
+ align-items: center;
122
+ height: 20px;
123
+ cursor: pointer;
124
+ }
125
+
126
+ .html-time-slider-markers-basic__track,
127
+ .html-time-slider-markers-basic__markers {
128
+ position: absolute;
129
+ right: 0;
130
+ left: 0;
131
+ height: 4px;
132
+ }
133
+
134
+ .html-time-slider-markers-basic__track {
135
+ overflow: hidden;
136
+ background: rgba(255, 255, 255, 0.3);
137
+ border-radius: 9999px;
138
+ }
139
+
140
+ .html-time-slider-markers-basic__fill {
141
+ position: absolute;
142
+ inset-block: 0;
143
+ left: 0;
144
+ width: var(--media-slider-fill);
145
+ background: white;
146
+ }
147
+
148
+ .html-time-slider-markers-basic__marker {
149
+ position: absolute;
150
+ inset-block: 0;
151
+ left: var(--media-slider-marker-start);
152
+ width: var(--media-slider-marker-width);
153
+ min-width: 4px;
154
+ background: #facc15;
155
+ }
156
+
157
+ .html-time-slider-markers-basic__marker[data-point] {
158
+ transform: translateX(-50%);
159
+ }
160
+
161
+ .html-time-slider-markers-basic__marker[data-active] {
162
+ background: #f97316;
163
+ }
164
+
165
+ .html-time-slider-markers-basic__thumb {
166
+ position: absolute;
167
+ left: var(--media-slider-fill);
168
+ width: 12px;
169
+ height: 12px;
170
+ background: white;
171
+ border-radius: 50%;
172
+ transform: translateX(-50%);
173
+ }
174
+ ```
175
+
176
+ **index.ts**
177
+
178
+ ```ts
179
+ import '@videojs/html/video/player';
180
+ import '@videojs/html/ui/container';
181
+ import '@videojs/html/ui/time-slider';
182
+ import '@videojs/html/ui/slider-track';
183
+ import '@videojs/html/ui/slider-fill';
184
+ import '@videojs/html/ui/slider-thumb';
185
+ import '@videojs/html/ui/time-slider-markers';
186
+
187
+ const player = document.querySelector('video-player');
188
+
189
+ player?.store.addTextTrack({
190
+ kind: 'metadata',
191
+ label: 'ads',
192
+ cues: [{ startTime: 8 }, { startTime: 18, endTime: 24 }],
193
+ });
194
+ ```
@@ -50,6 +50,8 @@ Add `<media-time-slider-chapters>` to divide the slider track into sections. Eac
50
50
 
51
51
  The required template must contain exactly one HTML root element. It remains in the light DOM and is cloned for each normalized chapter range. When no chapter cues are available, it is cloned once as a full-width, cue-less range.
52
52
 
53
+ To draw a marker for each cue on a text track, such as an ad break, add the markers element, documented on its own page as [media-time-slider-markers](./time-slider-markers.md).
54
+
53
55
  ## Behavior
54
56
 
55
57
  Displays and controls the current playback position. Dragging the slider seeks the media. The fill level reflects `currentTime / duration` as a percentage, and the buffer level shows how much media has been buffered.
@@ -483,6 +485,18 @@ Clones a light-DOM template once per normalized chapter range.
483
485
 
484
486
  The required template must contain exactly one HTML root element. When no chapter cues are available, the template is cloned once for a full-duration range.
485
487
 
488
+ ### media-time-slider-markers
489
+
490
+ Draws a marker on the time slider for each cue on the text tracks a filter matches, such as ad breaks. Pick tracks with the `kind`, `label`, and `language` attributes, or with the `filter` property; with neither, nothing is drawn. The store reads the matching tracks while the element is connected, so tracks it doesn't read by default work too.
491
+
492
+ Each marker clones the light-DOM template, which must contain exactly one HTML root element, or is a `<div>` without one. Markers are decorative: the slider's own value is what assistive technology reads.
493
+
494
+ #### Data attributes
495
+
496
+ | Attribute | Description |
497
+ | --- | --- |
498
+ | `data-seeking` | Present when a seek operation is in progress. |
499
+
486
500
  ### media-slider-buffer
487
501
 
488
502
  Displays the buffered range on the slider track.
@@ -17,7 +17,7 @@ import '@videojs/html/media/twitch-video';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.3.0/media/twitch-video.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.4.0/media/twitch-video.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -13,7 +13,7 @@ import '@videojs/html/video/compat-skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.3.0/video-compat.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.4.0/video-compat.js"></script>
17
17
  ```
18
18
 
19
19
  ## Anatomy
@@ -40,6 +40,10 @@ The skin renders a storyboard preview image while scrubbing the time slider. An
40
40
 
41
41
  See [Show timeline thumbnail previews](../../guides/thumbnails.md) for complete examples.
42
42
 
43
+ ## Controls before playback
44
+
45
+ Before playback starts, the skin shows only the large center play button. The other controls appear once playback starts or the media begins to autoplay. Set `--media-controls-before-start: visible` to show them from the start. See [Customize skins](../../guides/customize-skins.md#set-the-skins-styles).
46
+
43
47
  ## Styling
44
48
 
45
49
  Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
@@ -13,7 +13,7 @@ import '@videojs/html/video/neutral-skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.3.0/video-neutral.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.4.0/video-neutral.js"></script>
17
17
  ```
18
18
 
19
19
  ## Anatomy
@@ -40,6 +40,10 @@ The skin renders a storyboard preview image while scrubbing the time slider. An
40
40
 
41
41
  See [Show timeline thumbnail previews](../../guides/thumbnails.md) for complete examples.
42
42
 
43
+ ## Controls before playback
44
+
45
+ Before playback starts, the skin shows only the large center play button. The other controls appear once playback starts or the media begins to autoplay. Set `--media-controls-before-start: visible` to show them from the start. See [Customize skins](../../guides/customize-skins.md#set-the-skins-styles).
46
+
43
47
  ## Styling
44
48
 
45
49
  Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
@@ -13,7 +13,7 @@ import '@videojs/html/video/scaffold-skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.3.0/video-scaffold.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.4.0/video-scaffold.js"></script>
17
17
  ```
18
18
 
19
19
  ## Usage
@@ -40,6 +40,10 @@ The skin renders a storyboard preview image while scrubbing the time slider. An
40
40
 
41
41
  See [Show timeline thumbnail previews](../../guides/thumbnails.md) for complete examples.
42
42
 
43
+ ## Controls before playback
44
+
45
+ Before playback starts, the skin shows only the large center play button. The other controls appear once playback starts or the media begins to autoplay. Set `--media-controls-before-start: visible` to show them from the start. See [Customize skins](../../guides/customize-skins.md#set-the-skins-styles).
46
+
43
47
  ## Styling
44
48
 
45
49
  Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
@@ -13,7 +13,7 @@ import '@videojs/html/video/skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.3.0/video.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.4.0/video.js"></script>
17
17
  ```
18
18
 
19
19
  ## Anatomy
@@ -40,6 +40,10 @@ The skin renders a storyboard preview image while scrubbing the time slider. An
40
40
 
41
41
  See [Show timeline thumbnail previews](../../guides/thumbnails.md) for complete examples.
42
42
 
43
+ ## Controls before playback
44
+
45
+ Before playback starts, the skin shows only the large center play button. The other controls appear once playback starts or the media begins to autoplay. Set `--media-controls-before-start: visible` to show them from the start. See [Customize skins](../../guides/customize-skins.md#set-the-skins-styles).
46
+
43
47
  ## Styling
44
48
 
45
49
  Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
@@ -74,4 +74,22 @@ This native video uses a child source, captions track, and browser controls whil
74
74
  ```ts
75
75
  import '@videojs/html/video/player';
76
76
  import '@videojs/html/ui/container';
77
- ```
77
+ ```
78
+
79
+ ## API Reference
80
+
81
+ ### Attributes
82
+
83
+ Accepts the standard `<video>` attributes. See the [MDN `<video>` reference](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/video): `autoplay`, `controls`, `controlslist`, `crossorigin`, `disablepictureinpicture`, `disableremoteplayback`, `height`, `loop`, `muted`, `playsinline`, `poster`, `preload`, `src`, `width`.
84
+
85
+ ### Properties
86
+
87
+ Exposes the native media properties. See [`HTMLVideoElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement) for details: `autoplay`, `buffered`, `controls`, `crossOrigin`, `currentSrc`, `currentTime`, `defaultMuted`, `defaultPlaybackRate`, `disablePictureInPicture`, `disableRemotePlayback`, `duration`, `ended`, `error`, `height`, `loop`, `mediaKeys`, `muted`, `networkState`, `paused`, `playbackRate`, `played`, `playsInline`, `poster`, `preload`, `preservesPitch`, `readyState`, `remote`, `seekable`, `seeking`, `sinkId`, `src`, `srcObject`, `textTracks`, `videoHeight`, `videoWidth`, `volume`, `width`.
88
+
89
+ ### Methods
90
+
91
+ Supports the native media methods. See [`HTMLVideoElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement) for details: `addTextTrack`, `cancelVideoFrameCallback`, `canPlayType`, `fastSeek`, `getVideoPlaybackQuality`, `load`, `pause`, `play`, `requestPictureInPicture`, `requestVideoFrameCallback`, `setMediaKeys`, `setSinkId`.
92
+
93
+ ### Events
94
+
95
+ Fires the standard media events: `abort`, `canplay`, `canplaythrough`, `durationchange`, `emptied`, `encrypted`, `ended`, `enterpictureinpicture`, `error`, `leavepictureinpicture`, `loadeddata`, `loadedmetadata`, `loadstart`, `pause`, `play`, `playing`, `progress`, `ratechange`, `resize`, `seeked`, `seeking`, `stalled`, `suspend`, `timeupdate`, `volumechange`, `waiting`, `waitingforkey`.
@@ -17,7 +17,7 @@ import '@videojs/html/media/vimeo-video';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.3.0/media/vimeo-video.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.4.0/media/vimeo-video.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -119,7 +119,6 @@ These attributes configure the embedded media adapter:
119
119
  | `muted` | `boolean` | `false` | |
120
120
  | `paused` | `boolean` | — | Read-only. |
121
121
  | `playbackRate` | `number` | — | |
122
- | `playbackRateRange` | `{ min: number; max: number }` | — | Read-only. Vimeo plays any rate up to 2, rejects faster ones, and never settles a request slower than the browser allows. |
123
122
  | `played` | `{ length: number; start(index: number): number; end(index: number): number }` | — | Read-only. |
124
123
  | `playsInline` | `boolean` | `true` | |
125
124
  | `poster` | `string` | `''` | |
@@ -21,7 +21,7 @@ import '@videojs/html/media/wistia-video';
21
21
  Or load it from the [CDN](../../guides/cdn.md):
22
22
 
23
23
  ```html
24
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.3.0/media/wistia-video.js"></script>
24
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.4.0/media/wistia-video.js"></script>
25
25
  ```
26
26
 
27
27
  ## Load a source
@@ -17,7 +17,7 @@ import '@videojs/html/media/youtube-video';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.3.0/media/youtube-video.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.4.0/media/youtube-video.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -98,7 +98,6 @@ These attributes configure the embedded media adapter:
98
98
  | `muted` | `boolean` | `false` | |
99
99
  | `paused` | `boolean` | — | Read-only. |
100
100
  | `playbackRate` | `number` | — | |
101
- | `playbackRateRange` | `{ min: number; max: number }` | — | Read-only. YouTube plays any rate from 0.25 to 2, rounded down to a step of 0.05, though `getAvailablePlaybackRates` lists only quarter steps. |
102
101
  | `played` | `{ length: number; start(index: number): number; end(index: number): number }` | — | Read-only. |
103
102
  | `playsInline` | `boolean` | `true` | |
104
103
  | `poster` | `string` | `''` | |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@videojs/html",
3
- "version": "10.3.0",
3
+ "version": "10.4.0",
4
4
  "description": "Video.js 10 for HTML, Vue, and Svelte: player custom elements and skins for video and audio",
5
5
  "keywords": [
6
6
  "audio",
@@ -164,59 +164,59 @@
164
164
  "access": "public"
165
165
  },
166
166
  "dependencies": {
167
- "@videojs/core": "10.3.0",
168
- "@videojs/element": "10.3.0",
169
- "@videojs/media": "10.3.0",
170
- "@videojs/native-hls-video": "10.3.0",
171
- "@videojs/spf": "10.3.0",
172
- "@videojs/store": "10.3.0",
173
- "@videojs/utils": "10.3.0"
167
+ "@videojs/core": "10.4.0",
168
+ "@videojs/element": "10.4.0",
169
+ "@videojs/media": "10.4.0",
170
+ "@videojs/native-hls-video": "10.4.0",
171
+ "@videojs/spf": "10.4.0",
172
+ "@videojs/store": "10.4.0",
173
+ "@videojs/utils": "10.4.0"
174
174
  },
175
175
  "devDependencies": {
176
- "@videojs/cloudflare-video": "10.3.0",
177
- "@videojs/dailymotion-video": "10.3.0",
178
- "@videojs/dash-video": "10.3.0",
179
- "@videojs/google-analytics": "10.3.0",
180
- "@videojs/google-cast": "10.3.0",
181
- "@videojs/hlsjs-video": "10.3.0",
182
- "@videojs/icons": "10.3.0",
183
- "@videojs/mixcloud-audio": "10.3.0",
184
- "@videojs/mux-audio": "10.3.0",
185
- "@videojs/mux-data": "10.3.0",
186
- "@videojs/mux-video": "10.3.0",
187
- "@videojs/playerjs-video": "10.3.0",
188
- "@videojs/shaka-video": "10.3.0",
189
- "@videojs/skins": "10.3.0",
190
- "@videojs/soundcloud-audio": "10.3.0",
191
- "@videojs/spotify-audio": "10.3.0",
192
- "@videojs/tiktok-video": "10.3.0",
193
- "@videojs/twitch-video": "10.3.0",
194
- "@videojs/vimeo-video": "10.3.0",
195
- "@videojs/wistia-video": "10.3.0",
196
- "@videojs/youtube-video": "10.3.0",
176
+ "@videojs/cloudflare-video": "10.4.0",
177
+ "@videojs/dailymotion-video": "10.4.0",
178
+ "@videojs/dash-video": "10.4.0",
179
+ "@videojs/google-analytics": "10.4.0",
180
+ "@videojs/google-cast": "10.4.0",
181
+ "@videojs/hlsjs-video": "10.4.0",
182
+ "@videojs/icons": "10.4.0",
183
+ "@videojs/mixcloud-audio": "10.4.0",
184
+ "@videojs/mux-audio": "10.4.0",
185
+ "@videojs/mux-data": "10.4.0",
186
+ "@videojs/mux-video": "10.4.0",
187
+ "@videojs/playerjs-video": "10.4.0",
188
+ "@videojs/shaka-video": "10.4.0",
189
+ "@videojs/skins": "10.4.0",
190
+ "@videojs/soundcloud-audio": "10.4.0",
191
+ "@videojs/spotify-audio": "10.4.0",
192
+ "@videojs/tiktok-video": "10.4.0",
193
+ "@videojs/twitch-video": "10.4.0",
194
+ "@videojs/vimeo-video": "10.4.0",
195
+ "@videojs/wistia-video": "10.4.0",
196
+ "@videojs/youtube-video": "10.4.0",
197
197
  "happy-dom": "^20.11.1",
198
198
  "vite-plus": "1.1.0"
199
199
  },
200
200
  "peerDependencies": {
201
- "@videojs/cloudflare-video": "10.3.0",
202
- "@videojs/dailymotion-video": "10.3.0",
203
- "@videojs/dash-video": "10.3.0",
204
- "@videojs/google-analytics": "10.3.0",
205
- "@videojs/google-cast": "10.3.0",
206
- "@videojs/hlsjs-video": "10.3.0",
207
- "@videojs/mixcloud-audio": "10.3.0",
208
- "@videojs/mux-audio": "10.3.0",
209
- "@videojs/mux-data": "10.3.0",
210
- "@videojs/mux-video": "10.3.0",
211
- "@videojs/playerjs-video": "10.3.0",
212
- "@videojs/shaka-video": "10.3.0",
213
- "@videojs/soundcloud-audio": "10.3.0",
214
- "@videojs/spotify-audio": "10.3.0",
215
- "@videojs/tiktok-video": "10.3.0",
216
- "@videojs/twitch-video": "10.3.0",
217
- "@videojs/vimeo-video": "10.3.0",
218
- "@videojs/wistia-video": "10.3.0",
219
- "@videojs/youtube-video": "10.3.0"
201
+ "@videojs/cloudflare-video": "10.4.0",
202
+ "@videojs/dailymotion-video": "10.4.0",
203
+ "@videojs/dash-video": "10.4.0",
204
+ "@videojs/google-analytics": "10.4.0",
205
+ "@videojs/google-cast": "10.4.0",
206
+ "@videojs/hlsjs-video": "10.4.0",
207
+ "@videojs/mixcloud-audio": "10.4.0",
208
+ "@videojs/mux-audio": "10.4.0",
209
+ "@videojs/mux-data": "10.4.0",
210
+ "@videojs/mux-video": "10.4.0",
211
+ "@videojs/playerjs-video": "10.4.0",
212
+ "@videojs/shaka-video": "10.4.0",
213
+ "@videojs/soundcloud-audio": "10.4.0",
214
+ "@videojs/spotify-audio": "10.4.0",
215
+ "@videojs/tiktok-video": "10.4.0",
216
+ "@videojs/twitch-video": "10.4.0",
217
+ "@videojs/vimeo-video": "10.4.0",
218
+ "@videojs/wistia-video": "10.4.0",
219
+ "@videojs/youtube-video": "10.4.0"
220
220
  },
221
221
  "peerDependenciesMeta": {
222
222
  "@videojs/cloudflare-video": {