@videojs/html 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 (357) hide show
  1. package/cdn/audio-minimal-ui.dev.js +1 -1
  2. package/cdn/audio-minimal-ui.js +1 -1
  3. package/cdn/audio-minimal.dev.js +4 -4
  4. package/cdn/audio-minimal.dev.js.map +1 -1
  5. package/cdn/audio-minimal.js +1 -1
  6. package/cdn/audio-minimal.js.map +1 -1
  7. package/cdn/audio-player.dev.js +1 -0
  8. package/cdn/audio-player.js +1 -0
  9. package/cdn/audio-ui.dev.js +1 -1
  10. package/cdn/audio-ui.js +1 -1
  11. package/cdn/audio.dev.js +4 -4
  12. package/cdn/audio.dev.js.map +1 -1
  13. package/cdn/audio.js +1 -1
  14. package/cdn/audio.js.map +1 -1
  15. package/cdn/background.dev.js +1 -1
  16. package/cdn/background.js +1 -1
  17. package/cdn/{compounds-D1FPw7jg.js → compounds-BA8gXlmJ.js} +32 -188
  18. package/cdn/compounds-BA8gXlmJ.js.map +1 -0
  19. package/cdn/compounds-DKoFv2f8.js +8 -0
  20. package/cdn/compounds-DKoFv2f8.js.map +1 -0
  21. package/cdn/{create-player-5UrHNqBI.js → create-player-BEEc22xK.js} +18 -2
  22. package/cdn/{create-player-5UrHNqBI.js.map → create-player-BEEc22xK.js.map} +1 -1
  23. package/cdn/create-player-D5WQ_jzZ.js +2 -0
  24. package/cdn/{create-player-LjvbIxIq.js.map → create-player-D5WQ_jzZ.js.map} +1 -1
  25. package/cdn/{gesture-element-BbNy1Pjt.js → gesture-element-CxdagZOo.js} +2 -2
  26. package/cdn/{gesture-element-BbNy1Pjt.js.map → gesture-element-CxdagZOo.js.map} +1 -1
  27. package/cdn/{gesture-element-KdpjbbBD.js → gesture-element-x6kojUJk.js} +3 -3
  28. package/cdn/{gesture-element-KdpjbbBD.js.map → gesture-element-x6kojUJk.js.map} +1 -1
  29. package/cdn/i18n-CE4KxKuj.js.map +1 -1
  30. package/cdn/{i18n-DeI9j-ko.js → i18n-C_WyuIHd.js} +2 -2
  31. package/cdn/{i18n-DeI9j-ko.js.map → i18n-C_WyuIHd.js.map} +1 -1
  32. package/cdn/i18n-DyF_NfCk.js.map +1 -1
  33. package/cdn/i18n-o3_t8fxw.js +2 -0
  34. package/cdn/{i18n-R3TQ8P2f.js.map → i18n-o3_t8fxw.js.map} +1 -1
  35. package/cdn/live-audio-minimal-ui.dev.js +2 -0
  36. package/cdn/live-audio-minimal-ui.js +1 -0
  37. package/cdn/live-audio-minimal.dev.d.ts +1 -0
  38. package/cdn/live-audio-minimal.dev.js +97 -0
  39. package/cdn/live-audio-minimal.dev.js.map +1 -0
  40. package/cdn/live-audio-minimal.js +2 -0
  41. package/cdn/live-audio-minimal.js.map +1 -0
  42. package/cdn/live-audio-player.dev.d.ts +1 -0
  43. package/cdn/live-audio-player.dev.js +1 -0
  44. package/cdn/live-audio-player.js +1 -0
  45. package/cdn/live-audio-ui.dev.d.ts +1 -0
  46. package/cdn/live-audio-ui.dev.js +2 -0
  47. package/cdn/live-audio-ui.js +1 -0
  48. package/cdn/live-audio.dev.d.ts +1 -0
  49. package/cdn/live-audio.dev.js +97 -0
  50. package/cdn/live-audio.dev.js.map +1 -0
  51. package/cdn/live-audio.js +2 -0
  52. package/cdn/live-audio.js.map +1 -0
  53. package/cdn/{live-button-element-CylfQD0v.js → live-button-element-BFufqFFV.js} +3 -3
  54. package/cdn/{live-button-element-CylfQD0v.js.map → live-button-element-BFufqFFV.js.map} +1 -1
  55. package/cdn/live-button-element-CEbrR59d.js +2 -0
  56. package/cdn/{live-button-element-C-WypudK.js.map → live-button-element-CEbrR59d.js.map} +1 -1
  57. package/cdn/live-video-minimal-ui.dev.d.ts +1 -0
  58. package/cdn/live-video-minimal-ui.dev.js +2 -0
  59. package/cdn/live-video-minimal-ui.js +1 -0
  60. package/cdn/live-video-minimal.dev.js +5 -36
  61. package/cdn/live-video-minimal.dev.js.map +1 -1
  62. package/cdn/live-video-minimal.js +1 -1
  63. package/cdn/live-video-minimal.js.map +1 -1
  64. package/cdn/live-video-player.dev.d.ts +1 -0
  65. package/cdn/live-video-player.dev.js +1 -0
  66. package/cdn/live-video-player.js +1 -0
  67. package/cdn/live-video-ui.dev.d.ts +1 -0
  68. package/cdn/live-video-ui.dev.js +2 -0
  69. package/cdn/live-video-ui.js +1 -0
  70. package/cdn/live-video.dev.js +5 -38
  71. package/cdn/live-video.dev.js.map +1 -1
  72. package/cdn/live-video.js +1 -1
  73. package/cdn/live-video.js.map +1 -1
  74. package/cdn/media/hls-background-video.dev.js +1 -1
  75. package/cdn/media/hls-background-video.js +1 -1
  76. package/cdn/media/hls-background-video.js.map +1 -1
  77. package/cdn/media/mux-background-video.dev.js +1 -1
  78. package/cdn/media/mux-background-video.js +1 -1
  79. package/cdn/media/mux-background-video.js.map +1 -1
  80. package/cdn/media/mux-data.dev.js +1 -1
  81. package/cdn/media/mux-data.dev.js.map +1 -1
  82. package/cdn/media/mux-data.js +1 -1
  83. package/cdn/media/mux-data.js.map +1 -1
  84. package/cdn/{media-B4uT13xV.js → media-B4uT13xV2.js} +1 -1
  85. package/cdn/media-B4uT13xV2.js.map +1 -0
  86. package/cdn/{media-D6Xer97u.js → media-D6Xer97u2.js} +1 -1
  87. package/cdn/media-D6Xer97u2.js.map +1 -0
  88. package/cdn/minimal-ui-0eDc51VS.js +2 -0
  89. package/cdn/{minimal-ui-D3XCtSx_.js.map → minimal-ui-0eDc51VS.js.map} +1 -1
  90. package/cdn/minimal-ui-C2vRjwax.js +36 -0
  91. package/cdn/minimal-ui-C2vRjwax.js.map +1 -0
  92. package/cdn/{minimal-ui-ajeAXABk.js → minimal-ui-CLBGXvp5.js} +4 -4
  93. package/cdn/{minimal-ui-ajeAXABk.js.map → minimal-ui-CLBGXvp5.js.map} +1 -1
  94. package/cdn/minimal-ui-ClCvmIm4.js +2 -0
  95. package/cdn/minimal-ui-ClCvmIm4.js.map +1 -0
  96. package/cdn/minimal-ui-DDM48qb3.js +2 -0
  97. package/cdn/minimal-ui-DDM48qb3.js.map +1 -0
  98. package/cdn/minimal-ui-DY4C1zGt.js +23 -0
  99. package/cdn/minimal-ui-DY4C1zGt.js.map +1 -0
  100. package/cdn/{minimal-ui-KUzZkG_3.js → minimal-ui-Dk4_XLp4.js} +8 -8
  101. package/cdn/{minimal-ui-KUzZkG_3.js.map → minimal-ui-Dk4_XLp4.js.map} +1 -1
  102. package/cdn/{minimal-ui-p9QCZfCz.js → minimal-ui-JHiRECkp.js} +2 -2
  103. package/cdn/{minimal-ui-p9QCZfCz.js.map → minimal-ui-JHiRECkp.js.map} +1 -1
  104. package/cdn/{player-POHYt5tr.js → player-BGAk4zHP.js} +2 -2
  105. package/cdn/{player-POHYt5tr.js.map → player-BGAk4zHP.js.map} +1 -1
  106. package/cdn/{player-CngT-cVQ.js → player-Bb9oakYz.js} +2 -2
  107. package/cdn/{player-CngT-cVQ.js.map → player-Bb9oakYz.js.map} +1 -1
  108. package/cdn/{player-BXQMSpgR.js → player-BrlY19A2.js} +2 -2
  109. package/cdn/{player-BXQMSpgR.js.map → player-BrlY19A2.js.map} +1 -1
  110. package/cdn/{player-BuxifKSM.js → player-CQENs37B.js} +2 -2
  111. package/cdn/{player-BuxifKSM.js.map → player-CQENs37B.js.map} +1 -1
  112. package/cdn/player-DdOHaN9e.js +2 -0
  113. package/cdn/player-DdOHaN9e.js.map +1 -0
  114. package/cdn/{player-B5zkgqwT.js → player-DtcVc6sP.js} +2 -2
  115. package/cdn/{player-B5zkgqwT.js.map → player-DtcVc6sP.js.map} +1 -1
  116. package/cdn/{player-DMP2pc3L.js → player-bEUswOOg.js} +2 -2
  117. package/cdn/{player-DMP2pc3L.js.map → player-bEUswOOg.js.map} +1 -1
  118. package/cdn/player-qLOeas8M.js +18 -0
  119. package/cdn/player-qLOeas8M.js.map +1 -0
  120. package/cdn/poster-element-BA7p_OJL.js +2 -0
  121. package/cdn/{poster-element-Djlm5fwC.js.map → poster-element-BA7p_OJL.js.map} +1 -1
  122. package/cdn/{poster-element-CuCEBVr3.js → poster-element-BTynHaSW.js} +4 -3
  123. package/cdn/{poster-element-CuCEBVr3.js.map → poster-element-BTynHaSW.js.map} +1 -1
  124. package/cdn/radio-options-controller-Cz5yFvUh.js +138 -0
  125. package/cdn/radio-options-controller-Cz5yFvUh.js.map +1 -0
  126. package/cdn/radio-options-controller-hybHJkeC.js +2 -0
  127. package/cdn/radio-options-controller-hybHJkeC.js.map +1 -0
  128. package/cdn/seek-button-element-C4g3qPbc.js +2 -0
  129. package/cdn/{seek-button-element-CgaXVFPS.js.map → seek-button-element-C4g3qPbc.js.map} +1 -1
  130. package/cdn/{seek-button-element-BD2caCd5.js → seek-button-element-CirtfRSE.js} +4 -3
  131. package/cdn/seek-button-element-CirtfRSE.js.map +1 -0
  132. package/cdn/{skin-element-PDwjO4v0.js → skin-element-BF1a0EIj.js} +2 -2
  133. package/cdn/{skin-element-PDwjO4v0.js.map → skin-element-BF1a0EIj.js.map} +1 -1
  134. package/cdn/skin-element-BTt7JKoR.js +2 -0
  135. package/cdn/{skin-element-DE8OodF5.js.map → skin-element-BTt7JKoR.js.map} +1 -1
  136. package/cdn/template-BKUlUXWF.js +2 -0
  137. package/cdn/template-BKUlUXWF.js.map +1 -0
  138. package/cdn/template-ClYP_1RH.js +31 -0
  139. package/cdn/template-ClYP_1RH.js.map +1 -0
  140. package/cdn/text-element-DW2FuvdI.js +2 -0
  141. package/cdn/text-element-DW2FuvdI.js.map +1 -0
  142. package/cdn/{text-element-dyiwucQB.js → text-element-LzVNdZbp.js} +50 -2
  143. package/cdn/text-element-LzVNdZbp.js.map +1 -0
  144. package/cdn/time-slider-chapters-element-Bf4gYppH.js +2 -0
  145. package/cdn/{time-slider-chapters-element-b6oeaZtJ.js.map → time-slider-chapters-element-Bf4gYppH.js.map} +1 -1
  146. package/cdn/{time-slider-chapters-element-BTMqnBhM.js → time-slider-chapters-element-DMkTYNg3.js} +5 -3
  147. package/cdn/time-slider-chapters-element-DMkTYNg3.js.map +1 -0
  148. package/cdn/{ui-BsUcH4YJ.js → ui-BL6b1m09.js} +7 -7
  149. package/cdn/{ui-BsUcH4YJ.js.map → ui-BL6b1m09.js.map} +1 -1
  150. package/cdn/ui-BbpSrILu.js +2 -0
  151. package/cdn/{ui-DLvwCbsU.js.map → ui-BbpSrILu.js.map} +1 -1
  152. package/cdn/ui-BmCfIOl5.js +38 -0
  153. package/cdn/ui-BmCfIOl5.js.map +1 -0
  154. package/cdn/ui-Bu9GX-M_.js +28 -0
  155. package/cdn/ui-Bu9GX-M_.js.map +1 -0
  156. package/cdn/ui-CBrFrvmm.js +2 -0
  157. package/cdn/{ui-CxftD4RF.js.map → ui-CBrFrvmm.js.map} +1 -1
  158. package/cdn/{ui-CtONjPC2.js → ui-CQsP0EFA.js} +9 -9
  159. package/cdn/{ui-CtONjPC2.js.map → ui-CQsP0EFA.js.map} +1 -1
  160. package/cdn/ui-Crbp7m4I.js +2 -0
  161. package/cdn/ui-Crbp7m4I.js.map +1 -0
  162. package/cdn/ui-DRKjxVsj.js +2 -0
  163. package/cdn/ui-DRKjxVsj.js.map +1 -0
  164. package/cdn/video-minimal-ui.dev.js +1 -1
  165. package/cdn/video-minimal-ui.js +1 -1
  166. package/cdn/video-minimal.dev.js +13 -12
  167. package/cdn/video-minimal.dev.js.map +1 -1
  168. package/cdn/video-minimal.js +1 -1
  169. package/cdn/video-minimal.js.map +1 -1
  170. package/cdn/video-player.dev.d.ts +1 -0
  171. package/cdn/video-player.dev.js +1 -0
  172. package/cdn/video-player.js +1 -0
  173. package/cdn/video-ui.dev.js +1 -1
  174. package/cdn/video-ui.js +1 -1
  175. package/cdn/video.dev.js +14 -13
  176. package/cdn/video.dev.js.map +1 -1
  177. package/cdn/video.js +1 -1
  178. package/cdn/video.js.map +1 -1
  179. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  180. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  181. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  182. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  183. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  184. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  185. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  186. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  187. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  188. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  189. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  190. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  191. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  192. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  193. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  194. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  195. package/dist/default/define/audio/minimal-skin.css +39 -7
  196. package/dist/default/define/audio/skin.css +31 -7
  197. package/dist/default/define/live-audio/minimal-skin.css +39 -7
  198. package/dist/default/define/live-audio/skin.css +31 -7
  199. package/dist/default/define/live-video/minimal-skin.css +39 -7
  200. package/dist/default/define/live-video/minimal-skin.js +1 -1
  201. package/dist/default/define/live-video/minimal-skin.js.map +1 -1
  202. package/dist/default/define/live-video/minimal-skin.tailwind.js +1 -1
  203. package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -1
  204. package/dist/default/define/live-video/skin.css +31 -7
  205. package/dist/default/define/live-video/skin.js +1 -1
  206. package/dist/default/define/live-video/skin.js.map +1 -1
  207. package/dist/default/define/live-video/skin.tailwind.js +1 -1
  208. package/dist/default/define/live-video/skin.tailwind.js.map +1 -1
  209. package/dist/default/define/video/minimal-skin.css +39 -7
  210. package/dist/default/define/video/minimal-skin.js +1 -1
  211. package/dist/default/define/video/minimal-skin.js.map +1 -1
  212. package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
  213. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  214. package/dist/default/define/video/skin.css +31 -7
  215. package/dist/default/define/video/skin.js +1 -1
  216. package/dist/default/define/video/skin.js.map +1 -1
  217. package/dist/default/define/video/skin.tailwind.js +1 -1
  218. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  219. package/dist/default/i18n/provider-mixin.js +24 -0
  220. package/dist/default/i18n/provider-mixin.js.map +1 -1
  221. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js +1 -1
  222. package/dist/default/skins/dist/default/default/tailwind/components/button-group.js.map +1 -1
  223. package/dist/default/skins/dist/default/default/tailwind/components/controls.js +1 -1
  224. package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  225. package/dist/default/skins/dist/default/default/tailwind/components/menu.js +8 -7
  226. package/dist/default/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
  227. package/dist/default/skins/dist/default/default/tailwind/components/time.js +1 -1
  228. package/dist/default/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  229. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js +1 -1
  230. package/dist/default/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  231. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  232. package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  233. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js +8 -7
  234. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
  235. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +2 -2
  236. package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  237. package/dist/default/ui/slider/slider-element.js +1 -2
  238. package/dist/default/ui/slider/slider-element.js.map +1 -1
  239. package/dist/default/ui/time-slider/time-slider-element.js +1 -2
  240. package/dist/default/ui/time-slider/time-slider-element.js.map +1 -1
  241. package/dist/default/ui/volume-slider/volume-slider-element.js +1 -2
  242. package/dist/default/ui/volume-slider/volume-slider-element.js.map +1 -1
  243. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  244. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  245. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  246. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  247. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  248. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  249. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  250. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  251. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  252. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  253. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  254. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  255. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  256. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  257. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  258. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  259. package/dist/dev/define/audio/minimal-skin.css +39 -7
  260. package/dist/dev/define/audio/skin.css +31 -7
  261. package/dist/dev/define/live-audio/minimal-skin.css +39 -7
  262. package/dist/dev/define/live-audio/skin.css +31 -7
  263. package/dist/dev/define/live-video/minimal-skin.css +39 -7
  264. package/dist/dev/define/live-video/minimal-skin.js +1 -1
  265. package/dist/dev/define/live-video/minimal-skin.js.map +1 -1
  266. package/dist/dev/define/live-video/minimal-skin.tailwind.js +1 -1
  267. package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -1
  268. package/dist/dev/define/live-video/skin.css +31 -7
  269. package/dist/dev/define/live-video/skin.js +1 -1
  270. package/dist/dev/define/live-video/skin.js.map +1 -1
  271. package/dist/dev/define/live-video/skin.tailwind.js +1 -1
  272. package/dist/dev/define/live-video/skin.tailwind.js.map +1 -1
  273. package/dist/dev/define/video/minimal-skin.css +39 -7
  274. package/dist/dev/define/video/minimal-skin.js +8 -8
  275. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  276. package/dist/dev/define/video/minimal-skin.tailwind.js +12 -12
  277. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  278. package/dist/dev/define/video/skin.css +31 -7
  279. package/dist/dev/define/video/skin.js +8 -8
  280. package/dist/dev/define/video/skin.js.map +1 -1
  281. package/dist/dev/define/video/skin.tailwind.js +12 -12
  282. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  283. package/dist/dev/i18n/provider-mixin.d.ts.map +1 -1
  284. package/dist/dev/i18n/provider-mixin.js +24 -0
  285. package/dist/dev/i18n/provider-mixin.js.map +1 -1
  286. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button-group.js +1 -1
  287. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button-group.js.map +1 -1
  288. package/dist/dev/packages/skins/dist/default/default/tailwind/components/controls.js +1 -1
  289. package/dist/dev/packages/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
  290. package/dist/dev/packages/skins/dist/default/default/tailwind/components/menu.js +8 -7
  291. package/dist/dev/packages/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
  292. package/dist/dev/packages/skins/dist/default/default/tailwind/components/time.js +1 -1
  293. package/dist/dev/packages/skins/dist/default/default/tailwind/components/time.js.map +1 -1
  294. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/button-group.js +1 -1
  295. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/button-group.js.map +1 -1
  296. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
  297. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
  298. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/menu.js +8 -7
  299. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
  300. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/time.js +2 -2
  301. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
  302. package/dist/dev/ui/slider/slider-element.d.ts.map +1 -1
  303. package/dist/dev/ui/slider/slider-element.js +1 -2
  304. package/dist/dev/ui/slider/slider-element.js.map +1 -1
  305. package/dist/dev/ui/time-slider/time-slider-element.d.ts.map +1 -1
  306. package/dist/dev/ui/time-slider/time-slider-element.js +1 -2
  307. package/dist/dev/ui/time-slider/time-slider-element.js.map +1 -1
  308. package/dist/dev/ui/volume-slider/volume-slider-element.d.ts.map +1 -1
  309. package/dist/dev/ui/volume-slider/volume-slider-element.js +1 -2
  310. package/dist/dev/ui/volume-slider/volume-slider-element.js.map +1 -1
  311. package/docs/README.md +1 -1
  312. package/docs/concepts/media-sources.md +26 -2
  313. package/docs/concepts/skins.md +39 -15
  314. package/docs/how-to/customize-skins.md +7662 -48
  315. package/docs/how-to/i18n-switch-locale.md +27 -0
  316. package/docs/how-to/installation.md +4 -4
  317. package/docs/how-to/migrate-from-plyr.md +1 -5
  318. package/docs/llms.txt +7 -0
  319. package/docs/reference/cloudflare-video.md +483 -0
  320. package/docs/reference/dash-video.md +54 -0
  321. package/docs/reference/feature-metadata.md +3 -1
  322. package/docs/reference/hlsjs-video.md +626 -0
  323. package/docs/reference/native-hls-video.md +40 -0
  324. package/docs/reference/shaka-video.md +588 -0
  325. package/docs/reference/spotify-audio.md +394 -0
  326. package/docs/reference/tiktok-video.md +504 -0
  327. package/docs/reference/title.md +1 -1
  328. package/docs/reference/twitch-video.md +447 -0
  329. package/docs/reference/vimeo-video.md +1038 -0
  330. package/docs/reference/youtube-video.md +573 -0
  331. package/package.json +9 -9
  332. package/cdn/audio-headless.dev.js +0 -1
  333. package/cdn/audio-headless.js +0 -1
  334. package/cdn/compounds-CHlzbAKu.js +0 -8
  335. package/cdn/compounds-CHlzbAKu.js.map +0 -1
  336. package/cdn/compounds-D1FPw7jg.js.map +0 -1
  337. package/cdn/create-player-LjvbIxIq.js +0 -2
  338. package/cdn/i18n-R3TQ8P2f.js +0 -2
  339. package/cdn/live-button-element-C-WypudK.js +0 -2
  340. package/cdn/media-B4uT13xV.js.map +0 -1
  341. package/cdn/media-D6Xer97u.js.map +0 -1
  342. package/cdn/minimal-ui-D3XCtSx_.js +0 -2
  343. package/cdn/poster-element-Djlm5fwC.js +0 -2
  344. package/cdn/seek-button-element-BD2caCd5.js.map +0 -1
  345. package/cdn/seek-button-element-CgaXVFPS.js +0 -2
  346. package/cdn/skin-element-DE8OodF5.js +0 -2
  347. package/cdn/text-element-BJyj7nLo.js +0 -2
  348. package/cdn/text-element-BJyj7nLo.js.map +0 -1
  349. package/cdn/text-element-dyiwucQB.js.map +0 -1
  350. package/cdn/time-slider-chapters-element-BTMqnBhM.js.map +0 -1
  351. package/cdn/time-slider-chapters-element-b6oeaZtJ.js +0 -2
  352. package/cdn/ui-CxftD4RF.js +0 -2
  353. package/cdn/ui-DLvwCbsU.js +0 -2
  354. package/cdn/video-headless.dev.js +0 -1
  355. package/cdn/video-headless.js +0 -1
  356. /package/cdn/{audio-headless.dev.d.ts → audio-player.dev.d.ts} +0 -0
  357. /package/cdn/{video-headless.dev.d.ts → live-audio-minimal-ui.dev.d.ts} +0 -0
@@ -24,6 +24,33 @@ Ambient switching only applies when `<media-i18n>` has no explicit `lang` attrib
24
24
 
25
25
  Mounted `<media-i18n>` providers observe `lang` on `<html>` and ancestors. No remount required.
26
26
 
27
+ ## Set text direction
28
+
29
+ `lang` identifies the content language. `dir` controls text and layout direction. Browsers do not infer one from the other, so set both when the locale applies to the whole document:
30
+
31
+ ts
32
+
33
+ ```
34
+ document.documentElement.lang = 'ar';
35
+ document.documentElement.dir = 'rtl';
36
+ ```
37
+
38
+ Set `dir` back to `ltr` when you switch to a left-to-right language. This prevents the previous direction from remaining active.
39
+
40
+ When React’s `locale` is explicit, the player applies its resolved `lang` and `dir` to the container. A `lang` or `dir` passed to that container overrides the rendered DOM boundary only; translations still come from `I18nProvider locale`.
41
+
42
+ In HTML, `<media-i18n lang>` sets the provider locale and derives its direction. An explicit `dir` on `<media-i18n>` overrides that derived direction.
43
+
44
+ Providers without an explicit locale inherit ambient document language and direction. In that case, set `lang` and `dir` on `<html>` or another ancestor:
45
+
46
+ html
47
+
48
+ ```
49
+ <html lang="ar" dir="rtl">
50
+ ```
51
+
52
+ RTL preserves playback control ordering and time-semantic media icons while mirroring menu motion and navigation chevrons. Horizontal time and volume sliders retain a physical left-to-right value scale: Left Arrow decreases the value, Right Arrow increases it, and the minimum remains on the left.
53
+
27
54
  ## Explicit provider language
28
55
 
29
56
  html
@@ -18,7 +18,7 @@ bash
18
18
  ```
19
19
  npx @videojs/cli docs how-to/installation \
20
20
  --framework <html|react> \
21
- --preset <video|audio|background-video> \
21
+ --preset <video|audio|live-video|live-audio|background-video> \
22
22
  --skin <default|minimal|none> \
23
23
  --media <html5-video|html5-audio|hls|dash|mux-video|mux-audio|vimeo|background-video> \
24
24
  --source-url <url> \
@@ -28,11 +28,11 @@ npx @videojs/cli docs how-to/installation \
28
28
  Here’s what the flags mean:
29
29
 
30
30
  * *Framework*: Pick whether you’re working in React or if you’d like to use HTML custom elements. (More to come!)
31
- * *Preset*: Pick a pre-built player. The default presets work well for general website playback.
31
+ * *Preset*: Pick a pre-built player. The default presets work well for general website playback; the live presets add a Live button and drop the on-demand time displays.
32
32
  * *Skin*: Pick what your player looks like
33
- * *Media*: Pick what kind of media you have
33
+ * *Media*: Pick what kind of media you have. The `live-video` preset supports HLS and Mux video; `live-audio` supports Mux audio.
34
34
  * *Source URL*: Define where your media comes from (or omit for a sample URL)
35
- * *Install method*: How do you want to install your package? (CDN is HTML-only)
35
+ * *Install method*: How do you want to install your package? (CDN is HTML-only.)
36
36
 
37
37
  If you’re an agent, interview your user and offer to run the CLI for them, or offer them a precomposed CLI command.
38
38
 
@@ -147,11 +147,7 @@ js
147
147
  import '@videojs/html/media/vimeo-video';
148
148
  ```
149
149
 
150
- Note
151
-
152
- Vimeo and YouTube don’t have prebuilt CDN scripts yet, so these two need a bundler.
153
-
154
- Set the `src` to the URL for the Vimeo video, for example `https://vimeo.com/648359100`.
150
+ Set the `src` to the URL for the Vimeo video, for example `https://vimeo.com/76979871`.
155
151
 
156
152
  ### YouTube
157
153
 
package/docs/llms.txt CHANGED
@@ -94,6 +94,7 @@ API Reference for UI components for building media player interfaces.
94
94
  API Reference for media components that handle streaming protocols and media playback.
95
95
 
96
96
  - [background-video](./reference/background-video.md): Decorative background video element with automatic muting and looping
97
+ - [cloudflare-video](./reference/cloudflare-video.md): Video component that plays Cloudflare Stream videos through the Stream player
97
98
  - [dash-video](./reference/dash-video.md): DASH video element powered by dash.js for adaptive bitrate streaming
98
99
  - [hls-audio](./reference/hls-audio.md): Audio-only HLS element that plays the audio rendition of an HLS stream
99
100
  - [hls-video](./reference/hls-video.md): Lightweight HLS video element with minimal bundle size
@@ -101,6 +102,12 @@ API Reference for media components that handle streaming protocols and media pla
101
102
  - [mux-audio](./reference/mux-audio.md): Audio element for Mux-hosted HLS streams
102
103
  - [mux-video](./reference/mux-video.md): Video element for Mux-hosted HLS streams
103
104
  - [native-hls-video](./reference/native-hls-video.md): HLS video element using the browser's built-in HLS support
105
+ - [shaka-video](./reference/shaka-video.md): Video element powered by Shaka Player for DASH, HLS, and progressive playback with DRM
106
+ - [spotify-audio](./reference/spotify-audio.md): Audio component that plays Spotify tracks, episodes, playlists, and shows through the Spotify embed
107
+ - [tiktok-video](./reference/tiktok-video.md): Video component that plays TikTok videos through the TikTok embed player
108
+ - [twitch-video](./reference/twitch-video.md): Video component that plays Twitch videos and live channels through the Twitch embed player
109
+ - [vimeo-video](./reference/vimeo-video.md): Video component that plays Vimeo videos and live events through the Vimeo player
110
+ - [youtube-video](./reference/youtube-video.md): Video component that plays YouTube videos and playlists through the YouTube IFrame player
104
111
 
105
112
  ### Player Features
106
113
 
@@ -0,0 +1,483 @@
1
+ # cloudflare-video
2
+
3
+ Video component that plays Cloudflare Stream videos through the Stream player
4
+
5
+ Video component that plays [Cloudflare Stream](https://developers.cloudflare.com/stream/) videos through the Stream player embed. Cloudflare’s own chrome stays hidden by default, so it drops into a [player skin](../concepts/skins.md) like any other media component; set `controls` to use Cloudflare’s UI instead.
6
+
7
+ ## Load a source
8
+
9
+ `src` takes a raw 32-character video UID, any `cloudflarestream.com` or `videodelivery.net` URL, or a signed token. Watch, embed, iframe, manifest, and thumbnail URLs all carry the UID in the same position, and a signed token stands in for the UID wherever one appears.
10
+
11
+ html
12
+
13
+ ```
14
+ <cloudflare-video src="https://watch.videodelivery.net/bfbd585059e33391d67b0f1d15fe6ea4"></cloudflare-video>
15
+ ```
16
+
17
+ ## Signed playback
18
+
19
+ For [signed URLs](https://developers.cloudflare.com/stream/viewing-videos/securing-your-stream/), pass the signed token wherever the UID would go: as the whole `src`, or inside a Stream URL. Keep your customer subdomain when your URLs name one. Cloudflare serves signed and access-controlled videos only from `customer-<code>.cloudflarestream.com`, so the element preserves that origin instead of collapsing it onto the shared host.
20
+
21
+ ## Behavior
22
+
23
+ A few things work differently from a native `<video>` element, because the Stream embed doesn’t expose them:
24
+
25
+ * The embed owns text tracks: `textTracks` stays empty, and `engine.cloudflare.defaultTextTrack` picks the track to show.
26
+ * Picture-in-picture is unavailable, and the player reports it as unsupported.
27
+ * Fullscreen targets the iframe, so Cloudflare’s own chrome shows in fullscreen.
28
+ * `playsInline` has no effect: the Stream embed always plays inline.
29
+
30
+ ## Examples
31
+
32
+ ### Basic Usage
33
+
34
+ index.html
35
+
36
+ index.css
37
+
38
+ index.ts
39
+
40
+ ```
41
+ <cloudflare-video
42
+ class="cloudflare-video"
43
+ src="https://watch.videodelivery.net/bfbd585059e33391d67b0f1d15fe6ea4"
44
+ controls
45
+ ></cloudflare-video>
46
+ ```
47
+ ```
48
+ .cloudflare-video {
49
+ width: 100%;
50
+ aspect-ratio: 16 / 9;
51
+ }
52
+ ```
53
+ ```
54
+ import '@videojs/html/media/cloudflare-video';
55
+ ```
56
+
57
+ ## API Reference
58
+
59
+ ### Attributes
60
+
61
+ These attributes configure the embedded media adapter:
62
+
63
+ Attribute
64
+
65
+ Type
66
+
67
+ Default
68
+
69
+ Details
70
+
71
+ `autoplay`
72
+
73
+ `boolean`
74
+
75
+ `—`
76
+
77
+ `controls`
78
+
79
+ `boolean`
80
+
81
+ `—`
82
+
83
+ `loop`
84
+
85
+ `boolean`
86
+
87
+ `—`
88
+
89
+ `muted`
90
+
91
+ `boolean`
92
+
93
+ `—`
94
+
95
+ `playsinline`
96
+
97
+ `boolean`
98
+
99
+ `—`
100
+
101
+ `poster`
102
+
103
+ `string`
104
+
105
+ `—`
106
+
107
+ `preload`
108
+
109
+ `MediaPreloadType`
110
+
111
+ `—`
112
+
113
+ `src`
114
+
115
+ `string`
116
+
117
+ `—`
118
+
119
+ ### Properties
120
+
121
+ Property
122
+
123
+ Type
124
+
125
+ Default
126
+
127
+ Details
128
+
129
+ `autoplay`
130
+
131
+ `boolean`
132
+
133
+ `—`
134
+
135
+ `buffered`
136
+
137
+ `TimeRangeLike`
138
+
139
+ `—`
140
+
141
+
142
+
143
+ Description
144
+
145
+ Read-only.
146
+
147
+ `controls`
148
+
149
+ `boolean`
150
+
151
+ `—`
152
+
153
+ `currentSrc`
154
+
155
+ `string`
156
+
157
+ `—`
158
+
159
+
160
+
161
+ Description
162
+
163
+ Read-only.
164
+
165
+ `currentTime`
166
+
167
+ `number`
168
+
169
+ `—`
170
+
171
+ `defaultMuted`
172
+
173
+ `boolean`
174
+
175
+ `—`
176
+
177
+ `duration`
178
+
179
+ `number`
180
+
181
+ `—`
182
+
183
+
184
+
185
+ Description
186
+
187
+ Read-only.
188
+
189
+ `ended`
190
+
191
+ `boolean`
192
+
193
+ `—`
194
+
195
+
196
+
197
+ Description
198
+
199
+ Read-only.
200
+
201
+ `engine`
202
+
203
+ `CloudflareStreamPlayerApi | null`
204
+
205
+ `—`
206
+
207
+
208
+
209
+ Description
210
+
211
+ Read-only. Underlying Stream SDK player instance (null until the SDK loads).
212
+
213
+ `error`
214
+
215
+ `MediaError | null`
216
+
217
+ `—`
218
+
219
+
220
+
221
+ Description
222
+
223
+ Read-only.
224
+
225
+ `isFullscreen`
226
+
227
+ `boolean`
228
+
229
+ `—`
230
+
231
+
232
+
233
+ Description
234
+
235
+ Read-only.
236
+
237
+ `loop`
238
+
239
+ `boolean`
240
+
241
+ `—`
242
+
243
+ `muted`
244
+
245
+ `boolean`
246
+
247
+ `—`
248
+
249
+ `paused`
250
+
251
+ `boolean`
252
+
253
+ `—`
254
+
255
+
256
+
257
+ Description
258
+
259
+ Read-only.
260
+
261
+ `playbackRate`
262
+
263
+ `number`
264
+
265
+ `—`
266
+
267
+ `playsInline`
268
+
269
+ `boolean`
270
+
271
+ `—`
272
+
273
+ `poster`
274
+
275
+ `string`
276
+
277
+ `—`
278
+
279
+ `preload`
280
+
281
+ `MediaPreloadType`
282
+
283
+ `—`
284
+
285
+ `readyState`
286
+
287
+ `number`
288
+
289
+ `—`
290
+
291
+
292
+
293
+ Description
294
+
295
+ Read-only.
296
+
297
+ `seekable`
298
+
299
+ `TimeRangeLike`
300
+
301
+ `—`
302
+
303
+
304
+
305
+ Description
306
+
307
+ Read-only.
308
+
309
+ `seeking`
310
+
311
+ `boolean`
312
+
313
+ `—`
314
+
315
+
316
+
317
+ Description
318
+
319
+ Read-only.
320
+
321
+ `source`
322
+
323
+ `CloudflareSource | null`
324
+
325
+ `—`
326
+
327
+
328
+
329
+ Description
330
+
331
+ Structured source: `src` plus embed parameters under `engine.cloudflare`. Replacing it re-derives `src`.
332
+
333
+ `src`
334
+
335
+ `string`
336
+
337
+ `—`
338
+
339
+ `textTracks`
340
+
341
+ `TextTrackListLike`
342
+
343
+ `—`
344
+
345
+
346
+
347
+ Description
348
+
349
+ Read-only. Always empty: the SDK exposes no track API, and the embed owns the track picked by `defaultTextTrack`.
350
+
351
+ `videoHeight`
352
+
353
+ `number`
354
+
355
+ `—`
356
+
357
+
358
+
359
+ Description
360
+
361
+ Read-only.
362
+
363
+ `videoWidth`
364
+
365
+ `number`
366
+
367
+ `—`
368
+
369
+
370
+
371
+ Description
372
+
373
+ Read-only.
374
+
375
+ `volume`
376
+
377
+ `number`
378
+
379
+ `—`
380
+
381
+ ### Engine options
382
+
383
+ #### `source.engine.cloudflare`
384
+
385
+ Pass [Stream player parameters](https://developers.cloudflare.com/stream/viewing-videos/using-the-stream-player/) under `source.engine.cloudflare`, spelled exactly as Cloudflare spells them, plus anything Cloudflare adds next. They’re serialized onto the embed URL untouched, and the embed reads them once, when its URL is built. [Media Sources](../concepts/media-sources.md) covers how engine options fit into a structured source.
386
+
387
+ `controls`, `autoplay`, `loop`, `muted`, `preload`, and `poster` come from the props of the same name, so they have no `engine.cloudflare` spelling.
388
+
389
+ ts
390
+
391
+ ```
392
+ const video = document.querySelector('cloudflare-video');
393
+ video.source = {
394
+ src: 'bfbd585059e33391d67b0f1d15fe6ea4',
395
+ engine: { cloudflare: { primaryColor: '#f03e3e', startTime: '5m30s' } },
396
+ };
397
+ ```
398
+
399
+ Option
400
+
401
+ Type
402
+
403
+ Details
404
+
405
+ `ad-url`
406
+
407
+ `string`
408
+
409
+
410
+
411
+ Description
412
+
413
+ VAST tag to play as a pre-roll ad. Reported through the `stream-ad*` events.
414
+
415
+ `defaultTextTrack`
416
+
417
+ `string`
418
+
419
+
420
+
421
+ Description
422
+
423
+ BCP 47 language of the text track to show by default (`'en'`, `'de'`).
424
+
425
+ `letterboxColor`
426
+
427
+ `string`
428
+
429
+
430
+
431
+ Description
432
+
433
+ Any CSS color for the letterbox bars around a video that does not fill the player.
434
+
435
+ `primaryColor`
436
+
437
+ `string`
438
+
439
+
440
+
441
+ Description
442
+
443
+ Any CSS color for the progress bar and other player accents.
444
+
445
+ `referrerPolicy`
446
+
447
+ `ReferrerPolicy`
448
+
449
+
450
+
451
+ Description
452
+
453
+ `referrerpolicy` for the embed iframe. Not a Cloudflare player parameter.
454
+
455
+ `startTime`
456
+
457
+ `string | number`
458
+
459
+
460
+
461
+ Description
462
+
463
+ Where playback starts, in seconds or as a time string (`'5m30s'`).
464
+
465
+ ### Methods
466
+
467
+ Supports these media methods: `exitFullscreen``load``pause``play``requestFullscreen`
468
+
469
+ ### Events
470
+
471
+ Implements these standard media events through the embedded player: `durationchange``emptied``error``loadedmetadata``loadstart``volumechange`
472
+
473
+ Also emits these Video.js-specific events:
474
+
475
+ Event
476
+
477
+ Description
478
+
479
+ `loadcomplete`
480
+
481
+ `sourcechange`
482
+
483
+ Fired when \`source\` changes, either directly or by resolving a new \`src\`. Read \`source\` for the new value.
@@ -218,6 +218,60 @@ Read-only.
218
218
 
219
219
  Also exposes these properties from the native media API. 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``loop``muted``paused``playbackRate``played``playsInline``poster``preload``readyState``remote``seekable``seeking``textTracks``title``videoHeight``videoWidth``volume`
220
220
 
221
+ ### Engine options
222
+
223
+ #### `source.engine.dashJs`
224
+
225
+ Pass dash.js’s own settings here. They’re handed to dash.js untouched, so every option in its [settings reference](https://cdn.dashjs.org/latest/jsdoc/module-Settings.html) works. Replacing the object resets any settings applied before it. [Media Sources](../concepts/media-sources.md) covers how engine options fit into a structured source.
226
+
227
+ Each of the three below is a group of dash.js settings rather than a single value, and dash.js documents what’s inside them.
228
+
229
+ ts
230
+
231
+ ```
232
+ const video = document.querySelector('dash-video');
233
+ video.source = {
234
+ src: 'https://example.com/manifest.mpd',
235
+ engine: { dashJs: { streaming: { buffer: { fastSwitchEnabled: true } } } },
236
+ };
237
+ ```
238
+
239
+ Option
240
+
241
+ Type
242
+
243
+ Details
244
+
245
+ `debug`
246
+
247
+ `object`
248
+
249
+
250
+
251
+ Type
252
+
253
+ `{ logLevel?: LogLevel; dispatchEvent?: boolean; }`
254
+
255
+ `errors`
256
+
257
+ `object`
258
+
259
+
260
+
261
+ Type
262
+
263
+ `{ recoverAttempts?: { mediaErrorDecode?: number; }; }`
264
+
265
+ `streaming`
266
+
267
+ `object`
268
+
269
+
270
+
271
+ Type
272
+
273
+ `{ abandonLoadTimeout?: number; wallclockTimeUpdateInterval?: number; manifestUpdateRetryInterval?: number; liveUpdateTimeThresholdInMilliseconds?: number; cacheInitSegments?: boolean; ... 40 more ...; dvbReporting?: { ...; }; }`
274
+
221
275
  ### Methods
222
276
 
223
277
  Supports these media methods. See [HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement) for details: `addTextTrack``canPlayType``exitFullscreen``exitPictureInPicture``load``pause``play``requestFullscreen``requestPictureInPicture`
@@ -86,6 +86,8 @@ The resolved poster URL, independent of the media element's own `poster`. Set it
86
86
 
87
87
  ### Selector
88
88
 
89
+ To just show the name of what is playing, drop in the [Title component](./title.md) — it reads this feature for you. Reach for the selector when building your own UI.
90
+
89
91
  Pass `selectMetadata` to [`PlayerController`](./player-controller.md) to subscribe to metadata state. Returns `undefined` if the metadata feature is not configured.
90
92
 
91
93
  content-title.ts
@@ -138,4 +140,4 @@ The media tier comes from media that reports content data and announces changes
138
140
 
139
141
  `poster` is the feature’s own resolved value, not the media element’s `poster` attribute. Setting one does not set the other.
140
142
 
141
- A low-resolution stand-in to show while the poster loads is not part of this feature. The [poster](./poster.md) renders an `<img>` you control, so give it a `background-image` and that shows until the poster itself paints over it.
143
+ A low-resolution stand-in to show while the poster loads is not part of this feature. The [poster](./poster.md) renders an `<img>` you control, so give it a `background-image` and that shows until the poster itself paints over it. [Add a poster placeholder](../how-to/add-a-poster-placeholder.md) walks through that technique for each framework.