@videojs/html 10.0.0-beta.27 → 10.0.0-beta.28

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 (393) hide show
  1. package/cdn/audio-headless.dev.js +1 -1
  2. package/cdn/audio-headless.js +1 -1
  3. package/cdn/audio-minimal-ui.dev.js +1 -1
  4. package/cdn/audio-minimal-ui.js +1 -1
  5. package/cdn/audio-minimal.dev.js +4 -4
  6. package/cdn/audio-minimal.dev.js.map +1 -1
  7. package/cdn/audio-minimal.js +1 -1
  8. package/cdn/audio-minimal.js.map +1 -1
  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-video-WKumpp49.js +59 -0
  16. package/cdn/background-video-WKumpp49.js.map +1 -0
  17. package/cdn/background-video-YHY_3-lX.js +2 -0
  18. package/cdn/background-video-YHY_3-lX.js.map +1 -0
  19. package/cdn/background.dev.js +3 -56
  20. package/cdn/background.dev.js.map +1 -1
  21. package/cdn/background.js +1 -1
  22. package/cdn/background.js.map +1 -1
  23. package/cdn/bn-CcLIScl6.js +108 -0
  24. package/cdn/bn-CcLIScl6.js.map +1 -0
  25. package/cdn/bn-KcCmQhYd.js +2 -0
  26. package/cdn/bn-KcCmQhYd.js.map +1 -0
  27. package/cdn/compounds-BEO1d3ZM.js +8 -0
  28. package/cdn/compounds-BEO1d3ZM.js.map +1 -0
  29. package/cdn/{compounds-CCvdpvge.js → compounds-nk9RJtBK.js} +8 -15
  30. package/cdn/compounds-nk9RJtBK.js.map +1 -0
  31. package/cdn/container-element-Dd0ZCdhK.js +14 -0
  32. package/cdn/container-element-Dd0ZCdhK.js.map +1 -0
  33. package/cdn/container-element-HHK_KZOE.js +376 -0
  34. package/cdn/container-element-HHK_KZOE.js.map +1 -0
  35. package/cdn/{create-player-BHFyOnWi.js → create-player-DK9WOywd.js} +19 -379
  36. package/cdn/create-player-DK9WOywd.js.map +1 -0
  37. package/cdn/create-player-hSdQMP5p.js +2 -0
  38. package/cdn/create-player-hSdQMP5p.js.map +1 -0
  39. package/cdn/embed-params-D2e8u0d4.js +2 -0
  40. package/cdn/embed-params-D2e8u0d4.js.map +1 -0
  41. package/cdn/embed-params-W6T88S8x.js +39 -0
  42. package/cdn/embed-params-W6T88S8x.js.map +1 -0
  43. package/cdn/{gesture-element-CG-Sx_5t.js → gesture-element-6Ld1YwIL.js} +3 -3
  44. package/cdn/{gesture-element-CG-Sx_5t.js.map → gesture-element-6Ld1YwIL.js.map} +1 -1
  45. package/cdn/gesture-element-BC48ucj9.js +2 -0
  46. package/cdn/{gesture-element-BNfMI8eh.js.map → gesture-element-BC48ucj9.js.map} +1 -1
  47. package/cdn/{hls-js-g1zdcyvE.js → hls-js-BEuVm0u9.js} +3 -2
  48. package/cdn/{hls-js-g1zdcyvE.js.map → hls-js-BEuVm0u9.js.map} +1 -1
  49. package/cdn/hls-js-C4P_b2tT.js +2 -0
  50. package/cdn/{hls-js-6lW7L4th.js.map → hls-js-C4P_b2tT.js.map} +1 -1
  51. package/cdn/hls-js-CATW7NBm.js +2 -0
  52. package/cdn/{hls-js-DCQzjzB5.js.map → hls-js-CATW7NBm.js.map} +1 -1
  53. package/cdn/{hls-js-Cwj8UBx9.js → hls-js-WCNy9MVh.js} +3 -2
  54. package/cdn/{hls-js-Cwj8UBx9.js.map → hls-js-WCNy9MVh.js.map} +1 -1
  55. package/cdn/i18n-CE4KxKuj.js +2 -0
  56. package/cdn/i18n-CE4KxKuj.js.map +1 -0
  57. package/cdn/{i18n-Mtlmj1AA.js → i18n-Ch4t6EjV.js} +2 -2
  58. package/cdn/{i18n-Mtlmj1AA.js.map → i18n-Ch4t6EjV.js.map} +1 -1
  59. package/cdn/i18n-Dc7WM2xd.js +2 -0
  60. package/cdn/{i18n-DfKGl5Rh.js.map → i18n-Dc7WM2xd.js.map} +1 -1
  61. package/cdn/i18n-DyF_NfCk.js +157 -0
  62. package/cdn/i18n-DyF_NfCk.js.map +1 -0
  63. package/cdn/i18n.dev.js +3 -152
  64. package/cdn/i18n.dev.js.map +1 -1
  65. package/cdn/i18n.js +1 -1
  66. package/cdn/i18n.js.map +1 -1
  67. package/cdn/{live-button-element-B_y-ZJBy.js → live-button-element-Bae44kBN.js} +5 -4
  68. package/cdn/live-button-element-Bae44kBN.js.map +1 -0
  69. package/cdn/live-button-element-DaHgnYdw.js +2 -0
  70. package/cdn/{live-button-element-CWfkQUoy.js.map → live-button-element-DaHgnYdw.js.map} +1 -1
  71. package/cdn/live-video-minimal.dev.js +8 -8
  72. package/cdn/live-video-minimal.dev.js.map +1 -1
  73. package/cdn/live-video-minimal.js +1 -1
  74. package/cdn/live-video-minimal.js.map +1 -1
  75. package/cdn/live-video.dev.js +9 -9
  76. package/cdn/live-video.dev.js.map +1 -1
  77. package/cdn/live-video.js +1 -1
  78. package/cdn/live-video.js.map +1 -1
  79. package/cdn/locales/bn.dev.js +1 -1
  80. package/cdn/locales/bn.js +1 -1
  81. package/cdn/media/background-video.dev.d.ts +1 -0
  82. package/cdn/media/background-video.dev.js +3 -0
  83. package/cdn/media/background-video.js +1 -0
  84. package/cdn/media/cloudflare-video.dev.d.ts +1 -0
  85. package/cdn/media/cloudflare-video.dev.js +668 -0
  86. package/cdn/media/cloudflare-video.dev.js.map +1 -0
  87. package/cdn/media/cloudflare-video.js +2 -0
  88. package/cdn/media/cloudflare-video.js.map +1 -0
  89. package/cdn/media/container.dev.d.ts +1 -0
  90. package/cdn/media/container.dev.js +8 -0
  91. package/cdn/media/container.dev.js.map +1 -0
  92. package/cdn/media/container.js +2 -0
  93. package/cdn/media/container.js.map +1 -0
  94. package/cdn/media/dash-video.dev.js +2 -1
  95. package/cdn/media/dash-video.js +2 -2
  96. package/cdn/media/dash-video.js.map +1 -1
  97. package/cdn/media/google-cast.dev.js +2 -31
  98. package/cdn/media/google-cast.dev.js.map +1 -1
  99. package/cdn/media/google-cast.js +3 -3
  100. package/cdn/media/google-cast.js.map +1 -1
  101. package/cdn/media/hls-audio.dev.js +1 -0
  102. package/cdn/media/hls-audio.js +1 -1
  103. package/cdn/media/hls-audio.js.map +1 -1
  104. package/cdn/media/hls-background-video.dev.js +2 -1
  105. package/cdn/media/hls-background-video.js +1 -1
  106. package/cdn/media/hls-background-video.js.map +1 -1
  107. package/cdn/media/hls-video.dev.js +2 -1
  108. package/cdn/media/hls-video.js +1 -1
  109. package/cdn/media/hls-video.js.map +1 -1
  110. package/cdn/media/hlsjs-video.dev.js +2 -1
  111. package/cdn/media/hlsjs-video.js +1 -1
  112. package/cdn/media/hlsjs-video.js.map +1 -1
  113. package/cdn/media/mux-audio/hls-js.dev.js +3 -1
  114. package/cdn/media/mux-audio/hls-js.js +1 -1
  115. package/cdn/media/mux-audio/spf.dev.js +1 -0
  116. package/cdn/media/mux-audio/spf.js +1 -1
  117. package/cdn/media/mux-audio/spf.js.map +1 -1
  118. package/cdn/media/mux-audio.dev.js +3 -1
  119. package/cdn/media/mux-audio.js +1 -1
  120. package/cdn/media/mux-background-video.dev.js +2 -1
  121. package/cdn/media/mux-background-video.js +1 -1
  122. package/cdn/media/mux-background-video.js.map +1 -1
  123. package/cdn/media/mux-data.dev.js +2 -1
  124. package/cdn/media/mux-data.dev.js.map +1 -1
  125. package/cdn/media/mux-data.js +2 -2
  126. package/cdn/media/mux-data.js.map +1 -1
  127. package/cdn/media/mux-video/hls-js.dev.js +3 -1
  128. package/cdn/media/mux-video/hls-js.js +1 -1
  129. package/cdn/media/mux-video/spf.dev.js +2 -1
  130. package/cdn/media/mux-video/spf.js +1 -1
  131. package/cdn/media/mux-video/spf.js.map +1 -1
  132. package/cdn/media/mux-video.dev.js +3 -1
  133. package/cdn/media/mux-video.js +1 -1
  134. package/cdn/media/native-hls-video.dev.js +1 -0
  135. package/cdn/media/native-hls-video.js +1 -1
  136. package/cdn/media/native-hls-video.js.map +1 -1
  137. package/cdn/media/spotify-audio.dev.d.ts +1 -0
  138. package/cdn/media/spotify-audio.dev.js +605 -0
  139. package/cdn/media/spotify-audio.dev.js.map +1 -0
  140. package/cdn/media/spotify-audio.js +2 -0
  141. package/cdn/media/spotify-audio.js.map +1 -0
  142. package/cdn/media/tiktok-video.dev.d.ts +1 -0
  143. package/cdn/media/tiktok-video.dev.js +636 -0
  144. package/cdn/media/tiktok-video.dev.js.map +1 -0
  145. package/cdn/media/tiktok-video.js +2 -0
  146. package/cdn/media/tiktok-video.js.map +1 -0
  147. package/cdn/media/twitch-video.dev.d.ts +1 -0
  148. package/cdn/media/twitch-video.dev.js +627 -0
  149. package/cdn/media/twitch-video.dev.js.map +1 -0
  150. package/cdn/media/twitch-video.js +2 -0
  151. package/cdn/media/twitch-video.js.map +1 -0
  152. package/cdn/media/vimeo-video.dev.d.ts +1 -0
  153. package/cdn/media/vimeo-video.dev.js +2989 -0
  154. package/cdn/media/vimeo-video.dev.js.map +1 -0
  155. package/cdn/media/vimeo-video.js +16 -0
  156. package/cdn/media/vimeo-video.js.map +1 -0
  157. package/cdn/media/youtube-video.dev.d.ts +1 -0
  158. package/cdn/media/youtube-video.dev.js +713 -0
  159. package/cdn/media/youtube-video.dev.js.map +1 -0
  160. package/cdn/media/youtube-video.js +2 -0
  161. package/cdn/media/youtube-video.js.map +1 -0
  162. package/cdn/{media-Cp3acYc8.js → media-BavrGKqa.js} +274 -5
  163. package/cdn/media-BavrGKqa.js.map +1 -0
  164. package/cdn/media-Bmablv4g.js +2 -0
  165. package/cdn/media-Bmablv4g.js.map +1 -0
  166. package/cdn/{media-B_gQXwri.js → media-COIe3uI5.js} +12 -3
  167. package/cdn/media-COIe3uI5.js.map +1 -0
  168. package/cdn/{media-CbWsJJhU.js → media-CPVSKLdk.js} +2 -2
  169. package/cdn/{media-CbWsJJhU.js.map → media-CPVSKLdk.js.map} +1 -1
  170. package/cdn/media-CanBm0Jh.js +41 -0
  171. package/cdn/media-CanBm0Jh.js.map +1 -0
  172. package/cdn/{media-Dq4zmIJa2.js → media-Dq4zmIJa.js} +1 -1
  173. package/cdn/media-Dq4zmIJa.js.map +1 -0
  174. package/cdn/{media-DRo3n8tM.js → media-oa3nyL2o.js} +3 -3
  175. package/cdn/{media-DRo3n8tM.js.map → media-oa3nyL2o.js.map} +1 -1
  176. package/cdn/media-played-ranges-CM2zeOGr.js +2 -0
  177. package/cdn/media-played-ranges-CM2zeOGr.js.map +1 -0
  178. package/cdn/media-played-ranges-Yd9acuMt.js +156 -0
  179. package/cdn/media-played-ranges-Yd9acuMt.js.map +1 -0
  180. package/cdn/{media-suYcjCG22.js → media-suYcjCG2.js} +1 -1
  181. package/cdn/media-suYcjCG2.js.map +1 -0
  182. package/cdn/minimal-ui-8iRZf_72.js +2 -0
  183. package/cdn/{minimal-ui-AFk6Ut5f.js.map → minimal-ui-8iRZf_72.js.map} +1 -1
  184. package/cdn/{minimal-ui--JsmpU2q.js → minimal-ui-BpHxIo4z.js} +5 -5
  185. package/cdn/{minimal-ui--JsmpU2q.js.map → minimal-ui-BpHxIo4z.js.map} +1 -1
  186. package/cdn/{minimal-ui-Bxcpf5Mb.js → minimal-ui-CRKvUmB8.js} +9 -9
  187. package/cdn/{minimal-ui-Bxcpf5Mb.js.map → minimal-ui-CRKvUmB8.js.map} +1 -1
  188. package/cdn/minimal-ui-Et2Wcn7r.js +2 -0
  189. package/cdn/{minimal-ui-BVKu9LWj.js.map → minimal-ui-Et2Wcn7r.js.map} +1 -1
  190. package/cdn/mixin-BqN0V06a.js +2 -0
  191. package/cdn/{mixin-DiB7dIef.js.map → mixin-BqN0V06a.js.map} +1 -1
  192. package/cdn/{mixin-CkNZwQXF.js → mixin-C193v40v.js} +67 -67
  193. package/cdn/mixin-C193v40v.js.map +1 -0
  194. package/cdn/noop-BxkeRIz9.js +6 -0
  195. package/cdn/noop-BxkeRIz9.js.map +1 -0
  196. package/cdn/noop-Ch0IHcOP.js +2 -0
  197. package/cdn/noop-Ch0IHcOP.js.map +1 -0
  198. package/cdn/{player-D4fdOLLk.js → player-B2oraRyD.js} +3 -2
  199. package/cdn/{player-D4fdOLLk.js.map → player-B2oraRyD.js.map} +1 -1
  200. package/cdn/player-BRQLp5bX.js +2 -0
  201. package/cdn/{player-srq1RGTj.js.map → player-BRQLp5bX.js.map} +1 -1
  202. package/cdn/player-BloX4l6F.js +2 -0
  203. package/cdn/{player-iIewo8Y9.js.map → player-BloX4l6F.js.map} +1 -1
  204. package/cdn/{player-B0qnepD5.js → player-CKTAtwit.js} +3 -2
  205. package/cdn/{player-B0qnepD5.js.map → player-CKTAtwit.js.map} +1 -1
  206. package/cdn/{player-C4ix6TQq.js → player-DM9rUXg-.js} +3 -2
  207. package/cdn/{player-C4ix6TQq.js.map → player-DM9rUXg-.js.map} +1 -1
  208. package/cdn/player-rCFqzWrA.js +2 -0
  209. package/cdn/{player-B0ccW5-n.js.map → player-rCFqzWrA.js.map} +1 -1
  210. package/cdn/{poster-element-BP1Ypgbf.js → poster-element-BGr1VQJB.js} +16 -4
  211. package/cdn/poster-element-BGr1VQJB.js.map +1 -0
  212. package/cdn/poster-element-DBmgOyep.js +2 -0
  213. package/cdn/poster-element-DBmgOyep.js.map +1 -0
  214. package/cdn/script-D3ZkiqwO.js +2 -0
  215. package/cdn/script-D3ZkiqwO.js.map +1 -0
  216. package/cdn/script-erPJaaTz.js +33 -0
  217. package/cdn/script-erPJaaTz.js.map +1 -0
  218. package/cdn/seek-button-element-FlgBVoGM.js +2 -0
  219. package/cdn/seek-button-element-FlgBVoGM.js.map +1 -0
  220. package/cdn/{seek-button-element-TErrbilI.js → seek-button-element-XMTLIxZj.js} +6 -5
  221. package/cdn/seek-button-element-XMTLIxZj.js.map +1 -0
  222. package/cdn/{skin-element-wPSb4AAs.js → skin-element-DL-Kqa5f.js} +2 -2
  223. package/cdn/{skin-element-wPSb4AAs.js.map → skin-element-DL-Kqa5f.js.map} +1 -1
  224. package/cdn/{skin-element-1_MG2zgS.js → skin-element-DNytI-uu.js} +2 -2
  225. package/cdn/{skin-element-1_MG2zgS.js.map → skin-element-DNytI-uu.js.map} +1 -1
  226. package/cdn/{text-element-DTB9_2HX.js → text-element-D88ArbZz.js} +3 -3
  227. package/cdn/{text-element-DTB9_2HX.js.map → text-element-D88ArbZz.js.map} +1 -1
  228. package/cdn/text-element-DeWBNKXb.js +2 -0
  229. package/cdn/{text-element-Bsyglab8.js.map → text-element-DeWBNKXb.js.map} +1 -1
  230. package/cdn/{time-slider-chapters-element-DPgaLdBt.js → time-slider-chapters-element-DJ0abZXI.js} +5 -4
  231. package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +1 -0
  232. package/cdn/time-slider-chapters-element-DW8YyJn8.js +2 -0
  233. package/cdn/{time-slider-chapters-element-MdlcovBu.js.map → time-slider-chapters-element-DW8YyJn8.js.map} +1 -1
  234. package/cdn/{translate-text-DP0CzUCC.js → translate-text-BWvoW5-r.js} +2 -7
  235. package/cdn/translate-text-BWvoW5-r.js.map +1 -0
  236. package/cdn/translate-text-TzSgu_oe.js +2 -0
  237. package/cdn/translate-text-TzSgu_oe.js.map +1 -0
  238. package/cdn/{ui-D0AokGxw.js → ui-BU3_2gDQ.js} +8 -8
  239. package/cdn/{ui-D0AokGxw.js.map → ui-BU3_2gDQ.js.map} +1 -1
  240. package/cdn/{ui-p36Szn71.js → ui-BsaWWE4y.js} +10 -10
  241. package/cdn/{ui-p36Szn71.js.map → ui-BsaWWE4y.js.map} +1 -1
  242. package/cdn/ui-C0isALTQ.js +2 -0
  243. package/cdn/{ui-CecDxhTX.js.map → ui-C0isALTQ.js.map} +1 -1
  244. package/cdn/ui-DVpkE1MN.js +2 -0
  245. package/cdn/{ui-ChWM6Xz2.js.map → ui-DVpkE1MN.js.map} +1 -1
  246. package/cdn/video-headless.dev.js +1 -1
  247. package/cdn/video-headless.js +1 -1
  248. package/cdn/video-minimal-ui.dev.js +1 -1
  249. package/cdn/video-minimal-ui.js +1 -1
  250. package/cdn/video-minimal.dev.js +4 -4
  251. package/cdn/video-minimal.dev.js.map +1 -1
  252. package/cdn/video-minimal.js +1 -1
  253. package/cdn/video-minimal.js.map +1 -1
  254. package/cdn/video-ui.dev.js +1 -1
  255. package/cdn/video-ui.js +1 -1
  256. package/cdn/video.dev.js +5 -5
  257. package/cdn/video.dev.js.map +1 -1
  258. package/cdn/video.js +1 -1
  259. package/cdn/video.js.map +1 -1
  260. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  261. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  262. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  263. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  264. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  265. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  266. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  267. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  268. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  269. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  270. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  271. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  272. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  273. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  274. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  275. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  276. package/dist/default/define/audio/minimal-skin.css +16 -19
  277. package/dist/default/define/audio/skin.css +27 -30
  278. package/dist/default/define/live-audio/minimal-skin.css +16 -19
  279. package/dist/default/define/live-audio/skin.css +27 -30
  280. package/dist/default/define/live-video/minimal-skin.css +20 -19
  281. package/dist/default/define/live-video/skin.css +31 -30
  282. package/dist/default/define/video/minimal-skin.css +20 -19
  283. package/dist/default/define/video/skin.css +31 -30
  284. package/dist/default/media/tiktok-video/media.js +3 -2
  285. package/dist/default/media/tiktok-video/media.js.map +1 -1
  286. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +6 -6
  287. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  288. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +1 -1
  289. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  290. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +4 -4
  291. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  292. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -1
  293. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  294. package/dist/default/ui/playback-rate-button/playback-rate-button-element.js +1 -2
  295. package/dist/default/ui/playback-rate-button/playback-rate-button-element.js.map +1 -1
  296. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  297. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  298. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  299. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  300. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  301. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  302. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  303. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  304. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  305. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  306. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  307. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  308. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  309. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  310. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  311. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  312. package/dist/dev/define/audio/minimal-skin.css +16 -19
  313. package/dist/dev/define/audio/skin.css +27 -30
  314. package/dist/dev/define/live-audio/minimal-skin.css +16 -19
  315. package/dist/dev/define/live-audio/skin.css +27 -30
  316. package/dist/dev/define/live-video/minimal-skin.css +20 -19
  317. package/dist/dev/define/live-video/skin.css +31 -30
  318. package/dist/dev/define/video/minimal-skin.css +20 -19
  319. package/dist/dev/define/video/skin.css +31 -30
  320. package/dist/dev/media/tiktok-video/media.d.ts.map +1 -1
  321. package/dist/dev/media/tiktok-video/media.js +10 -7
  322. package/dist/dev/media/tiktok-video/media.js.map +1 -1
  323. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js +6 -6
  324. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  325. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +1 -1
  326. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  327. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js +4 -4
  328. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  329. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -1
  330. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  331. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts.map +1 -1
  332. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js +1 -2
  333. package/dist/dev/ui/playback-rate-button/playback-rate-button-element.js.map +1 -1
  334. package/docs/README.md +1 -1
  335. package/docs/concepts/features.md +2 -2
  336. package/docs/concepts/media-sources.md +79 -1
  337. package/docs/concepts/skins.md +31 -30
  338. package/docs/how-to/build-your-own-component.md +1 -1
  339. package/docs/how-to/customize-skins.md +94 -98
  340. package/docs/how-to/migrate-from-media-chrome.md +359 -0
  341. package/docs/how-to/migrate-from-mux-player.md +535 -0
  342. package/docs/how-to/migrate-from-plyr.md +394 -0
  343. package/docs/how-to/migrate-from-video-js-8.md +594 -0
  344. package/docs/llms.txt +9 -0
  345. package/docs/reference/feature-volume.md +3 -1
  346. package/docs/reference/mute-button.md +34 -0
  347. package/docs/reference/volume-slider.md +1 -1
  348. package/package.json +10 -9
  349. package/cdn/bn-DdelKD_n.js +0 -108
  350. package/cdn/bn-DdelKD_n.js.map +0 -1
  351. package/cdn/bn-YS8ruMcO.js +0 -2
  352. package/cdn/bn-YS8ruMcO.js.map +0 -1
  353. package/cdn/compounds-CCvdpvge.js.map +0 -1
  354. package/cdn/compounds-CJ6SbYAh.js +0 -8
  355. package/cdn/compounds-CJ6SbYAh.js.map +0 -1
  356. package/cdn/create-player-BHFyOnWi.js.map +0 -1
  357. package/cdn/create-player-CbpxjDaZ.js +0 -14
  358. package/cdn/create-player-CbpxjDaZ.js.map +0 -1
  359. package/cdn/gesture-element-BNfMI8eh.js +0 -2
  360. package/cdn/hls-js-6lW7L4th.js +0 -2
  361. package/cdn/hls-js-DCQzjzB5.js +0 -2
  362. package/cdn/i18n-DfKGl5Rh.js +0 -2
  363. package/cdn/live-button-element-B_y-ZJBy.js.map +0 -1
  364. package/cdn/live-button-element-CWfkQUoy.js +0 -2
  365. package/cdn/media-5ODYtX1-.js +0 -2
  366. package/cdn/media-5ODYtX1-.js.map +0 -1
  367. package/cdn/media-B_gQXwri.js.map +0 -1
  368. package/cdn/media-CPWNSZFX.js +0 -41
  369. package/cdn/media-CPWNSZFX.js.map +0 -1
  370. package/cdn/media-Cp3acYc8.js.map +0 -1
  371. package/cdn/media-Dq4zmIJa2.js.map +0 -1
  372. package/cdn/media-suYcjCG22.js.map +0 -1
  373. package/cdn/minimal-ui-AFk6Ut5f.js +0 -2
  374. package/cdn/minimal-ui-BVKu9LWj.js +0 -2
  375. package/cdn/mixin-CkNZwQXF.js.map +0 -1
  376. package/cdn/mixin-DiB7dIef.js +0 -2
  377. package/cdn/player-B0ccW5-n.js +0 -2
  378. package/cdn/player-iIewo8Y9.js +0 -2
  379. package/cdn/player-srq1RGTj.js +0 -2
  380. package/cdn/poster-element-BP1Ypgbf.js.map +0 -1
  381. package/cdn/poster-element-S-rr412t.js +0 -2
  382. package/cdn/poster-element-S-rr412t.js.map +0 -1
  383. package/cdn/seek-button-element-DxLmm58Y.js +0 -2
  384. package/cdn/seek-button-element-DxLmm58Y.js.map +0 -1
  385. package/cdn/seek-button-element-TErrbilI.js.map +0 -1
  386. package/cdn/text-element-Bsyglab8.js +0 -2
  387. package/cdn/time-slider-chapters-element-DPgaLdBt.js.map +0 -1
  388. package/cdn/time-slider-chapters-element-MdlcovBu.js +0 -2
  389. package/cdn/translate-text-BPMWpzFm.js +0 -2
  390. package/cdn/translate-text-BPMWpzFm.js.map +0 -1
  391. package/cdn/translate-text-DP0CzUCC.js.map +0 -1
  392. package/cdn/ui-CecDxhTX.js +0 -2
  393. package/cdn/ui-ChWM6Xz2.js +0 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiktok-video.dev.js","names":["#target","#listen","#beginLoad","#createPlayer","#attachId","#messages","#playRequested","#loadComplete","#resetState","#src","#source","#readyState","#snapshotProps","#loaded","#srcUnsupported","#error","#post","#bootstrap","#hasSource","#paused","#ended","#seeking","#takeOver","#currentTime","#parkPosition","#afterLoad","#settleSeek","#duration","#muted","#autoplay","#defaultMuted","#loop","#controls","#playsInline","#preload","#poster","#isFullscreen","#onMessage","#isStale","#onLoaded","#onStateChange","#onCurrentTime","#onPlayerError","#onError","#nextMuted","#playFired","#park"],"sources":["../../../media/dist/dev/dom/tiktok/props.js","../../../media/dist/dev/dom/tiktok/source.js","../../../media/dist/dev/dom/tiktok/player-api.js","../../../media/dist/dev/dom/tiktok/media.js","../../src/media/tiktok-video/media.ts","../../src/define/media/tiktok-video.ts"],"sourcesContent":["//#region src/dom/tiktok/props.ts\nconst tiktokMediaDefaultProps = {\n\tsrc: \"\",\n\tautoplay: false,\n\tdefaultMuted: false,\n\tmuted: false,\n\tloop: false,\n\tcontrols: false,\n\tplaysInline: true,\n\tpreload: \"metadata\",\n\tposter: \"\",\n\tsource: null\n};\n//#endregion\nexport { tiktokMediaDefaultProps };\n\n//# sourceMappingURL=props.js.map","import { serializeEmbedParams } from \"../utils/embed-params.js\";\n//#region src/dom/tiktok/source.ts\n/** Extract a TikTok video id from a raw numeric id or any recognized URL. */\nfunction parseTikTokVideoId(src) {\n\treturn parseTikTokSource(src)?.id ?? null;\n}\n/**\n* Parse a TikTok source string. Recognizes raw numeric ids, `player/v1/` embed\n* URLs, `share/video/` links, and the `@user/video/` URLs the app hands out.\n*/\nfunction parseTikTokSource(src) {\n\tif (!src) return null;\n\tif (MATCH_ID.test(src)) return { id: src };\n\tconst id = MATCH_SRC.exec(src)?.[1];\n\treturn id ? { id } : null;\n}\n/**\n* Whether the embed has to carry an `autoplay` nobody asked for. TikTok builds its player lazily: without one it\n* creates no media element, never reports `onPlayerReady`, and drops every command silently, until something is\n* clicked inside the frame — which a frame under a player skin never gets. The host parks the player as soon as it\n* is up, so this buys one that answers commands, not a video that plays.\n*/\nfunction shouldBootstrapTikTokEmbed(props = {}) {\n\treturn !props.autoplay && props.preload !== \"none\" && props.controls !== true;\n}\n/** Build the iframe `src` URL for a TikTok embed from the given props. */\nfunction buildTikTokIframeSrc(src, props = {}) {\n\tconst parsed = parseTikTokSource(src);\n\tif (!parsed) return \"\";\n\tconst { referrerPolicy: _referrerPolicy, ...tiktok } = props.source?.engine?.tiktok ?? {};\n\tconst params = {\n\t\tcontrols: props.controls === true ? null : 0,\n\t\tautoplay: props.autoplay || shouldBootstrapTikTokEmbed(props) || null,\n\t\tmuted: props.defaultMuted || null,\n\t\tloop: props.loop || null,\n\t\trel: 0,\n\t\t...tiktok\n\t};\n\treturn `${EMBED_BASE}/${parsed.id}?${serializeEmbedParams(params)}`;\n}\nconst EMBED_BASE = \"https://www.tiktok.com/player/v1\";\nconst MATCH_ID = /^\\d+$/;\nconst MATCH_SRC = /tiktok\\.com\\/(?:player\\/v1\\/|share\\/video\\/|@[^/]+\\/video\\/)(\\d+)/;\n//#endregion\nexport { buildTikTokIframeSrc, parseTikTokSource, parseTikTokVideoId, shouldBootstrapTikTokEmbed };\n\n//# sourceMappingURL=source.js.map","import { isNumber, isObject, isString } from \"@videojs/utils/predicate\";\n//#region src/dom/tiktok/player-api.ts\n/** Marker every player message carries, whichever way it travels. */\nconst PLAYER_MESSAGE_KEY = \"x-tiktok-player\";\nconst ERROR_AUTOPLAY = 3002;\nconst ERROR_NETWORK_CATEGORY = 2e3;\nconst ERROR_PLAYER_CATEGORY = 3e3;\nconst ERROR_CATEGORY_END = 4e3;\n/** Whether a `message` event's data is one of the embed's; every frame posts here, so the marker tells them apart. */\nfunction isTikTokPlayerMessage(data) {\n\tif (!isObject(data)) return false;\n\tconst message = data;\n\treturn !!message[\"x-tiktok-player\"] && isString(message.type);\n}\n/** Whether a value is the pair `onCurrentTime` reports. */\nfunction isTikTokCurrentTime(value) {\n\treturn isObject(value) && isNumber(value.currentTime);\n}\n/** Whether a value is the payload `onPlayerError` reports. */\nfunction isTikTokPlayerError(value) {\n\treturn isObject(value) && isNumber(value.errorCode);\n}\n/** Build a command message. A command without a value must not carry one at all. */\nfunction createTikTokPlayerCommand(type, value) {\n\treturn {\n\t\t[PLAYER_MESSAGE_KEY]: true,\n\t\ttype,\n\t\t...isNumber(value) && { value }\n\t};\n}\n//#endregion\nexport { ERROR_AUTOPLAY, ERROR_CATEGORY_END, ERROR_NETWORK_CATEGORY, ERROR_PLAYER_CATEGORY, createTikTokPlayerCommand, isTikTokCurrentTime, isTikTokPlayerError, isTikTokPlayerMessage };\n\n//# sourceMappingURL=player-api.js.map","import { EMPTY_TEXT_TRACKS, EMPTY_TIME_RANGES } from \"../../core/constants.js\";\nimport { MediaError } from \"../../core/media-error.js\";\nimport { createTimeRange } from \"../utils/time-ranges.js\";\nimport { MediaPlayedRangesMixin } from \"../media-played-ranges/media-played-ranges.js\";\nimport { createTikTokPlayerCommand, isTikTokCurrentTime, isTikTokPlayerError, isTikTokPlayerMessage } from \"./player-api.js\";\nimport { tiktokMediaDefaultProps } from \"./props.js\";\nimport { buildTikTokIframeSrc, shouldBootstrapTikTokEmbed } from \"./source.js\";\nimport { isNumber, isUndefined } from \"@videojs/utils/predicate\";\nimport { deepEqual } from \"@videojs/utils/object\";\nimport { createPublicPromise, tryCall } from \"@videojs/utils/function\";\n//#region src/dom/tiktok/media.ts\nconst TikTokMediaBase = MediaPlayedRangesMixin(EventTarget);\n/**\n* @fires sourcechange - Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value.\n*/\nvar TikTokMedia = class extends TikTokMediaBase {\n\t#target = null;\n\t#loadComplete = createPublicPromise();\n\t#messages = null;\n\t#attachId = 0;\n\t#src = tiktokMediaDefaultProps.src;\n\t#autoplay = tiktokMediaDefaultProps.autoplay;\n\t#defaultMuted = tiktokMediaDefaultProps.defaultMuted;\n\t#loop = tiktokMediaDefaultProps.loop;\n\t#controls = tiktokMediaDefaultProps.controls;\n\t#playsInline = tiktokMediaDefaultProps.playsInline;\n\t#preload = tiktokMediaDefaultProps.preload;\n\t#poster = tiktokMediaDefaultProps.poster;\n\t#source = tiktokMediaDefaultProps.source;\n\t#paused = true;\n\t#ended = false;\n\t#seeking = false;\n\t#loaded = false;\n\t#srcUnsupported = false;\n\t#playRequested = false;\n\t#bootstrap = \"off\";\n\t#parkPosition = 0;\n\t#playFired = false;\n\t#currentTime = 0;\n\t#duration = NaN;\n\t#muted = false;\n\t#readyState = READY_STATE_HAVE_NOTHING;\n\t#error = null;\n\t#isFullscreen = false;\n\tstatic PLAYER_SOFTWARE_NAME = \"tiktok-video\";\n\t/** The embed's window. TikTok publishes no player object; commands are posted to the frame. Null until rendered. */\n\tget engine() {\n\t\treturn this.#target?.contentWindow ?? null;\n\t}\n\tget target() {\n\t\treturn this.#target;\n\t}\n\t/** Bind the iframe hosting the embed. The embed follows once a `src` resolves, which may be after attach. */\n\tattach(target) {\n\t\tif (!target || this.#target === target) return;\n\t\tif (this.#target) this.detach();\n\t\tthis.#target = target;\n\t\tthis.#listen(target);\n\t\tthis.#beginLoad();\n\t\tthis.#createPlayer();\n\t}\n\tdetach() {\n\t\tif (!this.#target) return;\n\t\tthis.#attachId++;\n\t\tthis.#messages?.abort();\n\t\tthis.#messages = null;\n\t\tthis.#target = null;\n\t\tthis.#playRequested = false;\n\t\tthis.#loadComplete.resolve();\n\t\tthis.#resetState();\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t\tsuper.destroy();\n\t}\n\tget src() {\n\t\treturn this.#src;\n\t}\n\t/** TikTok URL or id. Setting it re-derives `source`, carrying its player parameters over. */\n\tset src(value) {\n\t\tconst { engine } = this.#source ?? {};\n\t\tconst next = {\n\t\t\t...engine && { engine },\n\t\t\t...value && { src: value }\n\t\t};\n\t\tthis.source = Object.keys(next).length > 0 ? next : null;\n\t}\n\tget currentSrc() {\n\t\treturn this.#target?.getAttribute(\"src\") ?? \"\";\n\t}\n\tget readyState() {\n\t\treturn this.#readyState;\n\t}\n\t/** Rebuild the embed for the current source; rewriting the iframe URL is the only load the protocol allows. */\n\tasync load() {\n\t\tif (!this.#target) return;\n\t\tconst load = this.#beginLoad();\n\t\tawait Promise.resolve();\n\t\tif (load !== this.#loadComplete) return;\n\t\tconst target = this.#target;\n\t\tif (!target) return;\n\t\tconst embedSrc = this.#src ? buildTikTokIframeSrc(this.#src, this.#snapshotProps()) : \"\";\n\t\tif (embedSrc && target.getAttribute(\"src\") === embedSrc) {\n\t\t\tif (this.#loaded) load.resolve();\n\t\t\treturn;\n\t\t}\n\t\tthis.#resetState();\n\t\tthis.dispatchEvent(new Event(\"emptied\"));\n\t\tif (!this.#src) {\n\t\t\tload.resolve();\n\t\t\ttarget.removeAttribute(\"src\");\n\t\t\treturn;\n\t\t}\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\tif (!embedSrc) {\n\t\t\tthis.#srcUnsupported = true;\n\t\t\tthis.#error = new MediaError(`Unrecognized TikTok source: ${this.#src}`, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);\n\t\t\tthis.dispatchEvent(new Event(\"error\"));\n\t\t\tload.resolve();\n\t\t\tthis.#post(\"pause\");\n\t\t\treturn;\n\t\t}\n\t\tthis.#bootstrap = shouldBootstrapTikTokEmbed(this.#snapshotProps()) ? \"parking\" : \"off\";\n\t\ttarget.src = embedSrc;\n\t}\n\t#beginLoad() {\n\t\tthis.#loadComplete.resolve();\n\t\tthis.#loadComplete = createPublicPromise();\n\t\treturn this.#loadComplete;\n\t}\n\tget #hasSource() {\n\t\treturn !!this.#src && !this.#srcUnsupported;\n\t}\n\tget paused() {\n\t\treturn this.#paused;\n\t}\n\tget ended() {\n\t\treturn this.#ended;\n\t}\n\tget seeking() {\n\t\treturn this.#seeking;\n\t}\n\tasync play() {\n\t\tif (!this.#hasSource) return;\n\t\tthis.#playRequested = true;\n\t\tif (this.#bootstrap === \"parking\") return;\n\t\tthis.#takeOver();\n\t\tthis.#post(\"play\");\n\t}\n\tpause() {\n\t\tthis.#playRequested = false;\n\t\tthis.#post(\"pause\");\n\t}\n\tget currentTime() {\n\t\treturn this.#currentTime;\n\t}\n\tset currentTime(value) {\n\t\tif (this.#currentTime === value) return;\n\t\tif (this.#bootstrap !== \"off\") this.#parkPosition = value;\n\t\tthis.#seeking = true;\n\t\tthis.#currentTime = value;\n\t\tthis.dispatchEvent(new Event(\"seeking\"));\n\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t\tthis.#afterLoad(() => {\n\t\t\tthis.#post(\"seekTo\", value);\n\t\t\tif (this.#bootstrap === \"parked\") this.#settleSeek();\n\t\t});\n\t}\n\tget duration() {\n\t\treturn this.#duration;\n\t}\n\tget muted() {\n\t\treturn this.#muted;\n\t}\n\tset muted(value) {\n\t\tif (this.#muted === value) return;\n\t\tthis.#muted = value;\n\t\tthis.#afterLoad(() => this.#post(value ? \"mute\" : \"unMute\"));\n\t}\n\tget autoplay() {\n\t\treturn this.#autoplay;\n\t}\n\tset autoplay(value) {\n\t\tthis.#autoplay = value;\n\t}\n\tget defaultMuted() {\n\t\treturn this.#defaultMuted;\n\t}\n\tset defaultMuted(value) {\n\t\tthis.#defaultMuted = value;\n\t\tif (!this.#loaded) this.#muted = value;\n\t}\n\tget loop() {\n\t\treturn this.#loop;\n\t}\n\tset loop(value) {\n\t\tthis.#loop = value;\n\t}\n\tget controls() {\n\t\treturn this.#controls;\n\t}\n\tset controls(value) {\n\t\tthis.#controls = value;\n\t}\n\tget playsInline() {\n\t\treturn this.#playsInline;\n\t}\n\tset playsInline(value) {\n\t\tthis.#playsInline = value;\n\t}\n\tget preload() {\n\t\treturn this.#preload;\n\t}\n\tset preload(value) {\n\t\tthis.#preload = value;\n\t}\n\tget poster() {\n\t\treturn this.#poster;\n\t}\n\tset poster(value) {\n\t\tthis.#poster = value;\n\t}\n\t/** TikTok URL or id in `src`, player params under `engine.tiktok`. Re-derives `src`; equal sources skip reload. */\n\tget source() {\n\t\treturn this.#source;\n\t}\n\tset source(value) {\n\t\tconst source = value ?? null;\n\t\tif (source === this.#source) return;\n\t\tconst src = source?.src ?? \"\";\n\t\tconst srcChanged = this.#src !== src;\n\t\tconst engineChanged = !deepEqual(this.#source?.engine?.tiktok ?? null, source?.engine?.tiktok ?? null);\n\t\tthis.#source = source;\n\t\tthis.#src = src;\n\t\tif (srcChanged || engineChanged) this.load();\n\t\tthis.dispatchEvent(new Event(\"sourcechange\"));\n\t}\n\tget buffered() {\n\t\treturn this.#currentTime > 0 ? createTimeRange(0, this.#currentTime) : EMPTY_TIME_RANGES;\n\t}\n\tget seekable() {\n\t\treturn this.#duration > 0 && Number.isFinite(this.#duration) ? createTimeRange(0, this.#duration) : EMPTY_TIME_RANGES;\n\t}\n\tget error() {\n\t\treturn this.#error;\n\t}\n\t/** Always empty: `closed_caption` is the embed's only say over captions. */\n\tget textTracks() {\n\t\treturn EMPTY_TEXT_TRACKS;\n\t}\n\tget isFullscreen() {\n\t\treturn this.#isFullscreen;\n\t}\n\tasync requestFullscreen() {\n\t\tif (!this.#target?.requestFullscreen) return;\n\t\tawait this.#target.requestFullscreen();\n\t\tthis.#isFullscreen = true;\n\t}\n\tasync exitFullscreen() {\n\t\tconst doc = globalThis.document;\n\t\tif (doc?.fullscreenElement && doc.fullscreenElement === this.#target) await doc.exitFullscreen();\n\t\tthis.#isFullscreen = false;\n\t}\n\t#createPlayer() {\n\t\tconst target = this.#target;\n\t\tif (!target) return false;\n\t\tconst props = this.#snapshotProps();\n\t\tif (target.getAttribute(\"src\")) {\n\t\t\tthis.#bootstrap = shouldBootstrapTikTokEmbed(props) ? \"parking\" : \"off\";\n\t\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\t\treturn true;\n\t\t}\n\t\tconst initialSrc = buildTikTokIframeSrc(this.#src, props);\n\t\tif (!initialSrc) {\n\t\t\tthis.#loadComplete.resolve();\n\t\t\treturn false;\n\t\t}\n\t\tthis.#bootstrap = shouldBootstrapTikTokEmbed(props) ? \"parking\" : \"off\";\n\t\ttarget.src = initialSrc;\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\treturn true;\n\t}\n\t#listen(target) {\n\t\tconst win = globalThis.window;\n\t\tif (isUndefined(win)) return;\n\t\tconst attachId = this.#attachId;\n\t\tthis.#messages = new AbortController();\n\t\twin.addEventListener(\"message\", (event) => this.#onMessage(event, target, attachId), { signal: this.#messages.signal });\n\t}\n\t#onMessage(event, target, attachId) {\n\t\tif (this.#isStale(attachId)) return;\n\t\tconst frame = target.contentWindow;\n\t\tif (!frame || event.source !== frame) return;\n\t\tconst message = event.data;\n\t\tif (!isTikTokPlayerMessage(message)) return;\n\t\tif (this.#srcUnsupported) return;\n\t\tif (this.#hasSource) this.#onLoaded();\n\t\tswitch (message.type) {\n\t\t\tcase \"onPlayerReady\": break;\n\t\t\tcase \"onStateChange\":\n\t\t\t\tif (isNumber(message.value)) this.#onStateChange(message.value);\n\t\t\t\tbreak;\n\t\t\tcase \"onCurrentTime\":\n\t\t\t\tif (isTikTokCurrentTime(message.value)) this.#onCurrentTime(message.value.currentTime, message.value.duration);\n\t\t\t\tbreak;\n\t\t\tcase \"onVolumeChange\": break;\n\t\t\tcase \"onMute\":\n\t\t\t\tif (this.#bootstrap !== \"off\") break;\n\t\t\t\tthis.#muted = !!message.value;\n\t\t\t\tthis.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t\tbreak;\n\t\t\tcase \"onPlayerError\":\n\t\t\t\tif (isTikTokPlayerError(message.value)) this.#onPlayerError(message.value);\n\t\t\t\tbreak;\n\t\t\tcase \"onError\":\n\t\t\t\tthis.#onError(\"TikTok player error; visit https://developers.tiktok.com/doc/embed-player for what the embed supports.\", isMediaErrorCode(message.value) ? message.value : MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn(`Unhandled TikTok player message: ${message.type}`);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t#isStale(attachId) {\n\t\treturn attachId !== this.#attachId;\n\t}\n\t#afterLoad(fn) {\n\t\tthis.#loadComplete.then(() => {\n\t\t\tif (!this.#target) return;\n\t\t\ttryCall(fn);\n\t\t}, () => {});\n\t}\n\t#post(type, value) {\n\t\tconst frame = this.#target?.contentWindow;\n\t\tif (!frame) return;\n\t\tframe.postMessage(createTikTokPlayerCommand(type, value), \"*\");\n\t}\n\tget #nextMuted() {\n\t\treturn this.#defaultMuted || this.#muted;\n\t}\n\t#snapshotProps() {\n\t\treturn {\n\t\t\tautoplay: this.#autoplay,\n\t\t\tdefaultMuted: this.#nextMuted,\n\t\t\tloop: this.#loop,\n\t\t\tcontrols: this.#controls,\n\t\t\tpreload: this.#preload,\n\t\t\tsource: this.#source\n\t\t};\n\t}\n\t#resetState() {\n\t\tthis.#currentTime = 0;\n\t\tthis.#duration = NaN;\n\t\tthis.#muted = this.#nextMuted;\n\t\tthis.#paused = !this.#autoplay;\n\t\tthis.#ended = false;\n\t\tthis.#readyState = READY_STATE_HAVE_NOTHING;\n\t\tthis.#seeking = false;\n\t\tthis.#loaded = false;\n\t\tthis.#srcUnsupported = false;\n\t\tthis.#playFired = false;\n\t\tthis.#bootstrap = \"off\";\n\t\tthis.#parkPosition = 0;\n\t\tthis.#error = null;\n\t\tthis.#isFullscreen = false;\n\t}\n\t#onLoaded() {\n\t\tif (this.#loaded) return;\n\t\tthis.#loaded = true;\n\t\tthis.#readyState = READY_STATE_HAVE_METADATA;\n\t\tif (this.#muted) this.#post(\"mute\");\n\t\tif (this.#bootstrap === \"parking\") {\n\t\t\tthis.#post(\"pause\");\n\t\t\tthis.#post(\"seekTo\", this.#parkPosition);\n\t\t} else if (this.#playRequested) {\n\t\t\tthis.#playRequested = false;\n\t\t\tthis.#post(\"play\");\n\t\t}\n\t\tfor (const type of [\"loadedmetadata\", \"loadcomplete\"]) this.dispatchEvent(new Event(type));\n\t\tthis.#loadComplete.resolve();\n\t}\n\t#park() {\n\t\tif (this.#bootstrap === \"parked\") return;\n\t\tthis.#bootstrap = \"parked\";\n\t\tthis.#currentTime = this.#parkPosition;\n\t\tthis.#paused = true;\n\t\tthis.#playFired = false;\n\t\tif (!this.#muted) this.#post(\"unMute\");\n\t\tthis.#settleSeek();\n\t\tif (this.#playRequested) {\n\t\t\tthis.#playRequested = false;\n\t\t\tthis.#takeOver();\n\t\t\tthis.#post(\"play\");\n\t\t}\n\t}\n\t#takeOver() {\n\t\tif (this.#bootstrap === \"parked\") this.#bootstrap = \"off\";\n\t}\n\t#settleSeek() {\n\t\tif (!this.#seeking) return;\n\t\tthis.#seeking = false;\n\t\tthis.dispatchEvent(new Event(\"seeked\"));\n\t}\n\t#onPlayerError({ errorCode, errorType }) {\n\t\tif (errorCode === 3002) {\n\t\t\tconsole.warn(\"The TikTok embed refused to play: the browser blocked it. A cross-origin embed needs its own user activation, or a muted video, before it will start.\");\n\t\t\treturn;\n\t\t}\n\t\tconst named = errorType ? ` (${errorType})` : \"\";\n\t\tthis.#onError(`TikTok player error ${errorCode}${named}; visit https://developers.tiktok.com/doc/embed-player for what the embed supports.`, toMediaErrorCode(errorCode));\n\t}\n\t#onError(message, code) {\n\t\tthis.#error = new MediaError(message, code);\n\t\tthis.dispatchEvent(new Event(\"error\"));\n\t\tthis.#loadComplete.resolve();\n\t}\n\t#onStateChange(state) {\n\t\tconst emit = (type) => this.dispatchEvent(new Event(type));\n\t\tif (this.#bootstrap !== \"off\") {\n\t\t\tif (state === 1 || state === 3) this.#post(\"pause\");\n\t\t\telse if (state === 2 || state === 0) this.#park();\n\t\t\treturn;\n\t\t}\n\t\tif (state === 1 || state === 3) {\n\t\t\tif (!this.#playFired) {\n\t\t\t\tthis.#playFired = true;\n\t\t\t\tthis.#paused = false;\n\t\t\t\tthis.#ended = false;\n\t\t\t\temit(\"play\");\n\t\t\t}\n\t\t}\n\t\tif (state === 3) emit(\"waiting\");\n\t\telse if (state === 1) {\n\t\t\tthis.#readyState = READY_STATE_HAVE_FUTURE_DATA;\n\t\t\tthis.#paused = false;\n\t\t\temit(\"playing\");\n\t\t} else if (state === 2) {\n\t\t\tthis.#playFired = false;\n\t\t\tthis.#paused = true;\n\t\t\temit(\"pause\");\n\t\t} else if (state === 0) {\n\t\t\tthis.#playFired = false;\n\t\t\tthis.#paused = true;\n\t\t\temit(\"pause\");\n\t\t\tthis.#ended = true;\n\t\t\temit(\"ended\");\n\t\t\tif (this.#loop) this.play();\n\t\t} else if (state === -1) {\n\t\t\tthis.#playFired = false;\n\t\t\tthis.#paused = true;\n\t\t}\n\t}\n\t#onCurrentTime(currentTime, duration) {\n\t\tif (this.#bootstrap === \"off\") {\n\t\t\tif (currentTime !== this.#currentTime) {\n\t\t\t\tthis.#currentTime = currentTime;\n\t\t\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t\t\t}\n\t\t\tif (this.#seeking) {\n\t\t\t\tthis.#seeking = false;\n\t\t\t\tthis.dispatchEvent(new Event(\"seeked\"));\n\t\t\t}\n\t\t}\n\t\tif (isNumber(duration) && duration > 0 && duration !== this.#duration) {\n\t\t\tthis.#duration = duration;\n\t\t\tthis.dispatchEvent(new Event(\"durationchange\"));\n\t\t}\n\t}\n};\n/** Read a TikTok player error code as a `MediaError` one; TikTok groups codes by category, so the category is read. */\nfunction toMediaErrorCode(errorCode) {\n\tif (errorCode >= 2e3 && errorCode < 3e3) return MediaError.MEDIA_ERR_NETWORK;\n\tif (errorCode >= 3e3 && errorCode < 4e3) return MediaError.MEDIA_ERR_DECODE;\n\treturn MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;\n}\n/** Whether a reported value is one of the codes a `MediaError` can carry. */\nfunction isMediaErrorCode(value) {\n\treturn isNumber(value) && value >= MediaError.MEDIA_ERR_ABORTED && value <= MediaError.MEDIA_ERR_ENCRYPTED;\n}\nconst READY_STATE_HAVE_NOTHING = 0;\nconst READY_STATE_HAVE_METADATA = 1;\nconst READY_STATE_HAVE_FUTURE_DATA = 3;\n//#endregion\nexport { TikTokMedia };\n\n//# sourceMappingURL=media.js.map","import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport type { TikTokMediaProps } from '@videojs/media/dom/tiktok';\nimport { buildTikTokIframeSrc, TikTokMedia } from '@videojs/media/dom/tiktok';\nimport { escapeHtml } from '@videojs/utils/string';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\n\nclass TikTokCustomMediaElement extends CustomMediaElement('iframe', TikTokMedia) {\n static override getTemplateHTML = (attrs: Record<string, string>): string => {\n const initialSrc = buildTikTokIframeSrc(attrs.src ?? '', templateAttrsToEmbedProps(attrs));\n const srcAttr = initialSrc ? ` src=\"${escapeHtml(initialSrc)}\"` : '';\n return /*html*/ `\n <style>\n :host {\n display: inline-block;\n /* TikTok videos are portrait, and the player refuses to draw its chrome\n below 325x578, so that is where this host starts rather than the\n 300x150 the landscape embeds use. */\n min-width: 325px;\n min-height: 578px;\n position: relative;\n }\n iframe {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n /* A cross-origin frame swallows every pointer event, so the skin above it\n never sees the hover that reveals the controls. Kept out of hit-testing\n except where the host leaves TikTok's player dormant, which is the same\n pair of cases shouldBootstrapTikTokEmbed opts out of: then the frame's\n own controls are the only thing that can still start it. */\n :host(:not([controls]):not([preload=\"none\"])) {\n pointer-events: none;\n }\n </style>\n <iframe\n part=\"iframe\"\n title=\"TikTok video player\"\n ${srcAttr}\n allow=\"accelerometer; fullscreen; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n frameborder=\"0\"\n width=\"100%\"\n height=\"100%\"\n referrerpolicy=\"${escapeHtml(attrs.referrerpolicy ?? '')}\"\n ></iframe>\n `;\n };\n}\n\n// Only the props the embed URL is built from. `preload` is not a TikTok parameter, but it decides whether the URL\n// carries a bootstrap autoplay, and a URL differing from the host's would have it rebuild the frame on mount.\nfunction templateAttrsToEmbedProps(attrs: Record<string, string>): Partial<TikTokMediaProps> {\n return {\n autoplay: attrs.autoplay !== undefined,\n defaultMuted: attrs.muted !== undefined,\n loop: attrs.loop !== undefined,\n controls: attrs.controls !== undefined,\n preload: attrs.preload as TikTokMediaProps['preload'],\n };\n}\n\nexport class TikTokVideo extends MediaAttachMixin(TikTokCustomMediaElement) {}\n","import { TikTokVideo } from '../../media/tiktok-video';\nimport { safeDefine } from '../safe-define';\n\nexport class TikTokVideoElement extends TikTokVideo {\n static readonly tagName = 'tiktok-video';\n}\n\nsafeDefine(TikTokVideoElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TikTokVideoElement.tagName]: TikTokVideoElement;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{l as e,o as t,s as n,u as r}from"../predicate-LbFu-fPH.js";import{t as i}from"../deep-equal-CcwdHo6t.js";import{t as a}from"../custom-media-element-8pSkwn42.js";import{a as o}from"../attributes-CwICYz98.js";import{i as s}from"../context-C2rsoDxk.js";import{n as c,r as l,t as u}from"../media-played-ranges-CM2zeOGr.js";import{n as d,t as f}from"../embed-params-D2e8u0d4.js";import{n as p,r as m}from"../constants-B4LD5zrj.js";import{t as h}from"../media-error-CtsbOTR1.js";import{t as g}from"../media-attach-mixin-Igi3-1UG.js";const _={src:``,autoplay:!1,defaultMuted:!1,muted:!1,loop:!1,controls:!1,playsInline:!0,preload:`metadata`,poster:``,source:null};function v(e){if(!e)return null;if(S.test(e))return{id:e};let t=C.exec(e)?.[1];return t?{id:t}:null}function y(e={}){return!e.autoplay&&e.preload!==`none`&&e.controls!==!0}function b(e,t={}){let n=v(e);if(!n)return``;let{referrerPolicy:r,...i}=t.source?.engine?.tiktok??{},a={controls:t.controls===!0?null:0,autoplay:t.autoplay||y(t)||null,muted:t.defaultMuted||null,loop:t.loop||null,rel:0,...i};return`${x}/${n.id}?${f(a)}`}const x=`https://www.tiktok.com/player/v1`,S=/^\d+$/,C=/tiktok\.com\/(?:player\/v1\/|share\/video\/|@[^/]+\/video\/)(\d+)/;function w(t){if(!n(t))return!1;let r=t;return!!r[`x-tiktok-player`]&&e(r.type)}function T(e){return n(e)&&t(e.currentTime)}function E(e){return n(e)&&t(e.errorCode)}function D(e,n){return{"x-tiktok-player":!0,type:e,...t(n)&&{value:n}}}const O=u(EventTarget);var k=class extends O{#e=null;#t=l();#n=null;#r=0;#i=_.src;#a=_.autoplay;#o=_.defaultMuted;#s=_.loop;#c=_.controls;#l=_.playsInline;#u=_.preload;#d=_.poster;#f=_.source;#p=!0;#m=!1;#h=!1;#g=!1;#_=!1;#v=!1;#y=`off`;#b=0;#x=!1;#S=0;#C=NaN;#w=!1;#T=M;#E=null;#D=!1;static PLAYER_SOFTWARE_NAME=`tiktok-video`;get engine(){return this.#e?.contentWindow??null}get target(){return this.#e}attach(e){!e||this.#e===e||(this.#e&&this.detach(),this.#e=e,this.#j(e),this.#O(),this.#A())}detach(){this.#e&&(this.#r++,this.#n?.abort(),this.#n=null,this.#e=null,this.#v=!1,this.#t.resolve(),this.#R())}destroy(){this.detach(),super.destroy()}get src(){return this.#i}set src(e){let{engine:t}=this.#f??{},n={...t&&{engine:t},...e&&{src:e}};this.source=Object.keys(n).length>0?n:null}get currentSrc(){return this.#e?.getAttribute(`src`)??``}get readyState(){return this.#T}async load(){if(!this.#e)return;let e=this.#O();if(await Promise.resolve(),e!==this.#t)return;let t=this.#e;if(!t)return;let n=this.#i?b(this.#i,this.#L()):``;if(n&&t.getAttribute(`src`)===n){this.#g&&e.resolve();return}if(this.#R(),this.dispatchEvent(new Event(`emptied`)),!this.#i){e.resolve(),t.removeAttribute(`src`);return}if(this.dispatchEvent(new Event(`loadstart`)),!n){this.#_=!0,this.#E=new h(`Unrecognized TikTok source: ${this.#i}`,h.MEDIA_ERR_SRC_NOT_SUPPORTED),this.dispatchEvent(new Event(`error`)),e.resolve(),this.#F(`pause`);return}this.#y=y(this.#L())?`parking`:`off`,t.src=n}#O(){return this.#t.resolve(),this.#t=l(),this.#t}get#k(){return!!this.#i&&!this.#_}get paused(){return this.#p}get ended(){return this.#m}get seeking(){return this.#h}async play(){this.#k&&(this.#v=!0,this.#y!==`parking`&&(this.#V(),this.#F(`play`)))}pause(){this.#v=!1,this.#F(`pause`)}get currentTime(){return this.#S}set currentTime(e){this.#S!==e&&(this.#y!==`off`&&(this.#b=e),this.#h=!0,this.#S=e,this.dispatchEvent(new Event(`seeking`)),this.dispatchEvent(new Event(`timeupdate`)),this.#P(()=>{this.#F(`seekTo`,e),this.#y===`parked`&&this.#H()}))}get duration(){return this.#C}get muted(){return this.#w}set muted(e){this.#w!==e&&(this.#w=e,this.#P(()=>this.#F(e?`mute`:`unMute`)))}get autoplay(){return this.#a}set autoplay(e){this.#a=e}get defaultMuted(){return this.#o}set defaultMuted(e){this.#o=e,this.#g||(this.#w=e)}get loop(){return this.#s}set loop(e){this.#s=e}get controls(){return this.#c}set controls(e){this.#c=e}get playsInline(){return this.#l}set playsInline(e){this.#l=e}get preload(){return this.#u}set preload(e){this.#u=e}get poster(){return this.#d}set poster(e){this.#d=e}get source(){return this.#f}set source(e){let t=e??null;if(t===this.#f)return;let n=t?.src??``,r=this.#i!==n,a=!i(this.#f?.engine?.tiktok??null,t?.engine?.tiktok??null);this.#f=t,this.#i=n,(r||a)&&this.load(),this.dispatchEvent(new Event(`sourcechange`))}get buffered(){return this.#S>0?c(0,this.#S):m}get seekable(){return this.#C>0&&Number.isFinite(this.#C)?c(0,this.#C):m}get error(){return this.#E}get textTracks(){return p}get isFullscreen(){return this.#D}async requestFullscreen(){this.#e?.requestFullscreen&&(await this.#e.requestFullscreen(),this.#D=!0)}async exitFullscreen(){let e=globalThis.document;e?.fullscreenElement&&e.fullscreenElement===this.#e&&await e.exitFullscreen(),this.#D=!1}#A(){let e=this.#e;if(!e)return!1;let t=this.#L();if(e.getAttribute(`src`))return this.#y=y(t)?`parking`:`off`,this.dispatchEvent(new Event(`loadstart`)),!0;let n=b(this.#i,t);return n?(this.#y=y(t)?`parking`:`off`,e.src=n,this.dispatchEvent(new Event(`loadstart`)),!0):(this.#t.resolve(),!1)}#j(e){let t=globalThis.window;if(r(t))return;let n=this.#r;this.#n=new AbortController,t.addEventListener(`message`,t=>this.#M(t,e,n),{signal:this.#n.signal})}#M(e,n,r){if(this.#N(r))return;let i=n.contentWindow;if(!i||e.source!==i)return;let a=e.data;if(w(a)&&!this.#_)switch(this.#k&&this.#z(),a.type){case`onPlayerReady`:break;case`onStateChange`:t(a.value)&&this.#G(a.value);break;case`onCurrentTime`:T(a.value)&&this.#K(a.value.currentTime,a.value.duration);break;case`onVolumeChange`:break;case`onMute`:if(this.#y!==`off`)break;this.#w=!!a.value,this.dispatchEvent(new Event(`volumechange`));break;case`onPlayerError`:E(a.value)&&this.#U(a.value);break;case`onError`:this.#W(`TikTok player error; visit https://developers.tiktok.com/doc/embed-player for what the embed supports.`,j(a.value)?a.value:h.MEDIA_ERR_SRC_NOT_SUPPORTED);break;default:break}}#N(e){return e!==this.#r}#P(e){this.#t.then(()=>{this.#e&&d(e)},()=>{})}#F(e,t){let n=this.#e?.contentWindow;n&&n.postMessage(D(e,t),`*`)}get#I(){return this.#o||this.#w}#L(){return{autoplay:this.#a,defaultMuted:this.#I,loop:this.#s,controls:this.#c,preload:this.#u,source:this.#f}}#R(){this.#S=0,this.#C=NaN,this.#w=this.#I,this.#p=!this.#a,this.#m=!1,this.#T=M,this.#h=!1,this.#g=!1,this.#_=!1,this.#x=!1,this.#y=`off`,this.#b=0,this.#E=null,this.#D=!1}#z(){if(!this.#g){this.#g=!0,this.#T=N,this.#w&&this.#F(`mute`),this.#y===`parking`?(this.#F(`pause`),this.#F(`seekTo`,this.#b)):this.#v&&(this.#v=!1,this.#F(`play`));for(let e of[`loadedmetadata`,`loadcomplete`])this.dispatchEvent(new Event(e));this.#t.resolve()}}#B(){this.#y!==`parked`&&(this.#y=`parked`,this.#S=this.#b,this.#p=!0,this.#x=!1,this.#w||this.#F(`unMute`),this.#H(),this.#v&&(this.#v=!1,this.#V(),this.#F(`play`)))}#V(){this.#y===`parked`&&(this.#y=`off`)}#H(){this.#h&&(this.#h=!1,this.dispatchEvent(new Event(`seeked`)))}#U({errorCode:e,errorType:t}){if(e===3002)return;let n=t?` (${t})`:``;this.#W(`TikTok player error ${e}${n}; visit https://developers.tiktok.com/doc/embed-player for what the embed supports.`,A(e))}#W(e,t){this.#E=new h(e,t),this.dispatchEvent(new Event(`error`)),this.#t.resolve()}#G(e){let t=e=>this.dispatchEvent(new Event(e));if(this.#y!==`off`){e===1||e===3?this.#F(`pause`):(e===2||e===0)&&this.#B();return}(e===1||e===3)&&(this.#x||(this.#x=!0,this.#p=!1,this.#m=!1,t(`play`))),e===3?t(`waiting`):e===1?(this.#T=P,this.#p=!1,t(`playing`)):e===2?(this.#x=!1,this.#p=!0,t(`pause`)):e===0?(this.#x=!1,this.#p=!0,t(`pause`),this.#m=!0,t(`ended`),this.#s&&this.play()):e===-1&&(this.#x=!1,this.#p=!0)}#K(e,n){this.#y===`off`&&(e!==this.#S&&(this.#S=e,this.dispatchEvent(new Event(`timeupdate`))),this.#h&&(this.#h=!1,this.dispatchEvent(new Event(`seeked`)))),t(n)&&n>0&&n!==this.#C&&(this.#C=n,this.dispatchEvent(new Event(`durationchange`)))}};function A(e){return e>=2e3&&e<3e3?h.MEDIA_ERR_NETWORK:e>=3e3&&e<4e3?h.MEDIA_ERR_DECODE:h.MEDIA_ERR_SRC_NOT_SUPPORTED}function j(e){return t(e)&&e>=h.MEDIA_ERR_ABORTED&&e<=h.MEDIA_ERR_ENCRYPTED}const M=0,N=1,P=3;var F=class extends a(`iframe`,k){static{this.getTemplateHTML=e=>{let t=b(e.src??``,I(e));return`<style> :host { display: inline-block; /* TikTok videos are portrait, and the player refuses to draw its chrome below 325x578, so that is where this host starts rather than the 300x150 the landscape embeds use. */ min-width: 325px; min-height: 578px; position: relative; } iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; } /* A cross-origin frame swallows every pointer event, so the skin above it never sees the hover that reveals the controls. Kept out of hit-testing except where the host leaves TikTok's player dormant, which is the same pair of cases shouldBootstrapTikTokEmbed opts out of: then the frame's own controls are the only thing that can still start it. */ :host(:not([controls]):not([preload="none"])) { pointer-events: none; } </style><iframe part="iframe" title="TikTok video player" ${t?` src="${o(t)}"`:``} allow="accelerometer; fullscreen; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen frameborder="0" width="100%" height="100%" referrerpolicy="${o(e.referrerpolicy??``)}" ></iframe>`}}};function I(e){return{autoplay:e.autoplay!==void 0,defaultMuted:e.muted!==void 0,loop:e.loop!==void 0,controls:e.controls!==void 0,preload:e.preload}}var L=class extends g(F){},R=class extends L{static{this.tagName=`tiktok-video`}};s(R);export{R as TikTokVideoElement};
2
+ //# sourceMappingURL=tiktok-video.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiktok-video.js","names":["#target","#listen","#beginLoad","#createPlayer","#attachId","#messages","#playRequested","#loadComplete","#resetState","#src","#source","#readyState","#snapshotProps","#loaded","#srcUnsupported","#error","#post","#bootstrap","#hasSource","#paused","#ended","#seeking","#takeOver","#currentTime","#parkPosition","#afterLoad","#settleSeek","#duration","#muted","#autoplay","#defaultMuted","#loop","#controls","#playsInline","#preload","#poster","#isFullscreen","#onMessage","#isStale","#onLoaded","#onStateChange","#onCurrentTime","#onPlayerError","#onError","#nextMuted","#playFired","#park"],"sources":["../../../media/dist/default/dom/tiktok/props.js","../../../media/dist/default/dom/tiktok/source.js","../../../media/dist/default/dom/tiktok/player-api.js","../../../media/dist/default/dom/tiktok/media.js","../../src/media/tiktok-video/media.ts","../../src/define/media/tiktok-video.ts"],"sourcesContent":["//#region src/dom/tiktok/props.ts\nconst tiktokMediaDefaultProps = {\n\tsrc: \"\",\n\tautoplay: false,\n\tdefaultMuted: false,\n\tmuted: false,\n\tloop: false,\n\tcontrols: false,\n\tplaysInline: true,\n\tpreload: \"metadata\",\n\tposter: \"\",\n\tsource: null\n};\n//#endregion\nexport { tiktokMediaDefaultProps };\n\n//# sourceMappingURL=props.js.map","import { serializeEmbedParams } from \"../utils/embed-params.js\";\n//#region src/dom/tiktok/source.ts\n/** Extract a TikTok video id from a raw numeric id or any recognized URL. */\nfunction parseTikTokVideoId(src) {\n\treturn parseTikTokSource(src)?.id ?? null;\n}\n/**\n* Parse a TikTok source string. Recognizes raw numeric ids, `player/v1/` embed\n* URLs, `share/video/` links, and the `@user/video/` URLs the app hands out.\n*/\nfunction parseTikTokSource(src) {\n\tif (!src) return null;\n\tif (MATCH_ID.test(src)) return { id: src };\n\tconst id = MATCH_SRC.exec(src)?.[1];\n\treturn id ? { id } : null;\n}\n/**\n* Whether the embed has to carry an `autoplay` nobody asked for. TikTok builds its player lazily: without one it\n* creates no media element, never reports `onPlayerReady`, and drops every command silently, until something is\n* clicked inside the frame — which a frame under a player skin never gets. The host parks the player as soon as it\n* is up, so this buys one that answers commands, not a video that plays.\n*/\nfunction shouldBootstrapTikTokEmbed(props = {}) {\n\treturn !props.autoplay && props.preload !== \"none\" && props.controls !== true;\n}\n/** Build the iframe `src` URL for a TikTok embed from the given props. */\nfunction buildTikTokIframeSrc(src, props = {}) {\n\tconst parsed = parseTikTokSource(src);\n\tif (!parsed) return \"\";\n\tconst { referrerPolicy: _referrerPolicy, ...tiktok } = props.source?.engine?.tiktok ?? {};\n\tconst params = {\n\t\tcontrols: props.controls === true ? null : 0,\n\t\tautoplay: props.autoplay || shouldBootstrapTikTokEmbed(props) || null,\n\t\tmuted: props.defaultMuted || null,\n\t\tloop: props.loop || null,\n\t\trel: 0,\n\t\t...tiktok\n\t};\n\treturn `${EMBED_BASE}/${parsed.id}?${serializeEmbedParams(params)}`;\n}\nconst EMBED_BASE = \"https://www.tiktok.com/player/v1\";\nconst MATCH_ID = /^\\d+$/;\nconst MATCH_SRC = /tiktok\\.com\\/(?:player\\/v1\\/|share\\/video\\/|@[^/]+\\/video\\/)(\\d+)/;\n//#endregion\nexport { buildTikTokIframeSrc, parseTikTokSource, parseTikTokVideoId, shouldBootstrapTikTokEmbed };\n\n//# sourceMappingURL=source.js.map","import { isNumber, isObject, isString } from \"@videojs/utils/predicate\";\n//#region src/dom/tiktok/player-api.ts\n/** Marker every player message carries, whichever way it travels. */\nconst PLAYER_MESSAGE_KEY = \"x-tiktok-player\";\nconst ERROR_AUTOPLAY = 3002;\nconst ERROR_NETWORK_CATEGORY = 2e3;\nconst ERROR_PLAYER_CATEGORY = 3e3;\nconst ERROR_CATEGORY_END = 4e3;\n/** Whether a `message` event's data is one of the embed's; every frame posts here, so the marker tells them apart. */\nfunction isTikTokPlayerMessage(data) {\n\tif (!isObject(data)) return false;\n\tconst message = data;\n\treturn !!message[\"x-tiktok-player\"] && isString(message.type);\n}\n/** Whether a value is the pair `onCurrentTime` reports. */\nfunction isTikTokCurrentTime(value) {\n\treturn isObject(value) && isNumber(value.currentTime);\n}\n/** Whether a value is the payload `onPlayerError` reports. */\nfunction isTikTokPlayerError(value) {\n\treturn isObject(value) && isNumber(value.errorCode);\n}\n/** Build a command message. A command without a value must not carry one at all. */\nfunction createTikTokPlayerCommand(type, value) {\n\treturn {\n\t\t[PLAYER_MESSAGE_KEY]: true,\n\t\ttype,\n\t\t...isNumber(value) && { value }\n\t};\n}\n//#endregion\nexport { ERROR_AUTOPLAY, ERROR_CATEGORY_END, ERROR_NETWORK_CATEGORY, ERROR_PLAYER_CATEGORY, createTikTokPlayerCommand, isTikTokCurrentTime, isTikTokPlayerError, isTikTokPlayerMessage };\n\n//# sourceMappingURL=player-api.js.map","import { EMPTY_TEXT_TRACKS, EMPTY_TIME_RANGES } from \"../../core/constants.js\";\nimport { MediaError } from \"../../core/media-error.js\";\nimport { createTimeRange } from \"../utils/time-ranges.js\";\nimport { MediaPlayedRangesMixin } from \"../media-played-ranges/media-played-ranges.js\";\nimport { createTikTokPlayerCommand, isTikTokCurrentTime, isTikTokPlayerError, isTikTokPlayerMessage } from \"./player-api.js\";\nimport { tiktokMediaDefaultProps } from \"./props.js\";\nimport { buildTikTokIframeSrc, shouldBootstrapTikTokEmbed } from \"./source.js\";\nimport { isNumber, isUndefined } from \"@videojs/utils/predicate\";\nimport { deepEqual } from \"@videojs/utils/object\";\nimport { createPublicPromise, tryCall } from \"@videojs/utils/function\";\n//#region src/dom/tiktok/media.ts\nconst TikTokMediaBase = MediaPlayedRangesMixin(EventTarget);\n/**\n* @fires sourcechange - Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value.\n*/\nvar TikTokMedia = class extends TikTokMediaBase {\n\t#target = null;\n\t#loadComplete = createPublicPromise();\n\t#messages = null;\n\t#attachId = 0;\n\t#src = tiktokMediaDefaultProps.src;\n\t#autoplay = tiktokMediaDefaultProps.autoplay;\n\t#defaultMuted = tiktokMediaDefaultProps.defaultMuted;\n\t#loop = tiktokMediaDefaultProps.loop;\n\t#controls = tiktokMediaDefaultProps.controls;\n\t#playsInline = tiktokMediaDefaultProps.playsInline;\n\t#preload = tiktokMediaDefaultProps.preload;\n\t#poster = tiktokMediaDefaultProps.poster;\n\t#source = tiktokMediaDefaultProps.source;\n\t#paused = true;\n\t#ended = false;\n\t#seeking = false;\n\t#loaded = false;\n\t#srcUnsupported = false;\n\t#playRequested = false;\n\t#bootstrap = \"off\";\n\t#parkPosition = 0;\n\t#playFired = false;\n\t#currentTime = 0;\n\t#duration = NaN;\n\t#muted = false;\n\t#readyState = READY_STATE_HAVE_NOTHING;\n\t#error = null;\n\t#isFullscreen = false;\n\tstatic PLAYER_SOFTWARE_NAME = \"tiktok-video\";\n\t/** The embed's window. TikTok publishes no player object; commands are posted to the frame. Null until rendered. */\n\tget engine() {\n\t\treturn this.#target?.contentWindow ?? null;\n\t}\n\tget target() {\n\t\treturn this.#target;\n\t}\n\t/** Bind the iframe hosting the embed. The embed follows once a `src` resolves, which may be after attach. */\n\tattach(target) {\n\t\tif (!target || this.#target === target) return;\n\t\tif (this.#target) this.detach();\n\t\tthis.#target = target;\n\t\tthis.#listen(target);\n\t\tthis.#beginLoad();\n\t\tthis.#createPlayer();\n\t}\n\tdetach() {\n\t\tif (!this.#target) return;\n\t\tthis.#attachId++;\n\t\tthis.#messages?.abort();\n\t\tthis.#messages = null;\n\t\tthis.#target = null;\n\t\tthis.#playRequested = false;\n\t\tthis.#loadComplete.resolve();\n\t\tthis.#resetState();\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t\tsuper.destroy();\n\t}\n\tget src() {\n\t\treturn this.#src;\n\t}\n\t/** TikTok URL or id. Setting it re-derives `source`, carrying its player parameters over. */\n\tset src(value) {\n\t\tconst { engine } = this.#source ?? {};\n\t\tconst next = {\n\t\t\t...engine && { engine },\n\t\t\t...value && { src: value }\n\t\t};\n\t\tthis.source = Object.keys(next).length > 0 ? next : null;\n\t}\n\tget currentSrc() {\n\t\treturn this.#target?.getAttribute(\"src\") ?? \"\";\n\t}\n\tget readyState() {\n\t\treturn this.#readyState;\n\t}\n\t/** Rebuild the embed for the current source; rewriting the iframe URL is the only load the protocol allows. */\n\tasync load() {\n\t\tif (!this.#target) return;\n\t\tconst load = this.#beginLoad();\n\t\tawait Promise.resolve();\n\t\tif (load !== this.#loadComplete) return;\n\t\tconst target = this.#target;\n\t\tif (!target) return;\n\t\tconst embedSrc = this.#src ? buildTikTokIframeSrc(this.#src, this.#snapshotProps()) : \"\";\n\t\tif (embedSrc && target.getAttribute(\"src\") === embedSrc) {\n\t\t\tif (this.#loaded) load.resolve();\n\t\t\treturn;\n\t\t}\n\t\tthis.#resetState();\n\t\tthis.dispatchEvent(new Event(\"emptied\"));\n\t\tif (!this.#src) {\n\t\t\tload.resolve();\n\t\t\ttarget.removeAttribute(\"src\");\n\t\t\treturn;\n\t\t}\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\tif (!embedSrc) {\n\t\t\tthis.#srcUnsupported = true;\n\t\t\tthis.#error = new MediaError(`Unrecognized TikTok source: ${this.#src}`, MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);\n\t\t\tthis.dispatchEvent(new Event(\"error\"));\n\t\t\tload.resolve();\n\t\t\tthis.#post(\"pause\");\n\t\t\treturn;\n\t\t}\n\t\tthis.#bootstrap = shouldBootstrapTikTokEmbed(this.#snapshotProps()) ? \"parking\" : \"off\";\n\t\ttarget.src = embedSrc;\n\t}\n\t#beginLoad() {\n\t\tthis.#loadComplete.resolve();\n\t\tthis.#loadComplete = createPublicPromise();\n\t\treturn this.#loadComplete;\n\t}\n\tget #hasSource() {\n\t\treturn !!this.#src && !this.#srcUnsupported;\n\t}\n\tget paused() {\n\t\treturn this.#paused;\n\t}\n\tget ended() {\n\t\treturn this.#ended;\n\t}\n\tget seeking() {\n\t\treturn this.#seeking;\n\t}\n\tasync play() {\n\t\tif (!this.#hasSource) return;\n\t\tthis.#playRequested = true;\n\t\tif (this.#bootstrap === \"parking\") return;\n\t\tthis.#takeOver();\n\t\tthis.#post(\"play\");\n\t}\n\tpause() {\n\t\tthis.#playRequested = false;\n\t\tthis.#post(\"pause\");\n\t}\n\tget currentTime() {\n\t\treturn this.#currentTime;\n\t}\n\tset currentTime(value) {\n\t\tif (this.#currentTime === value) return;\n\t\tif (this.#bootstrap !== \"off\") this.#parkPosition = value;\n\t\tthis.#seeking = true;\n\t\tthis.#currentTime = value;\n\t\tthis.dispatchEvent(new Event(\"seeking\"));\n\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t\tthis.#afterLoad(() => {\n\t\t\tthis.#post(\"seekTo\", value);\n\t\t\tif (this.#bootstrap === \"parked\") this.#settleSeek();\n\t\t});\n\t}\n\tget duration() {\n\t\treturn this.#duration;\n\t}\n\tget muted() {\n\t\treturn this.#muted;\n\t}\n\tset muted(value) {\n\t\tif (this.#muted === value) return;\n\t\tthis.#muted = value;\n\t\tthis.#afterLoad(() => this.#post(value ? \"mute\" : \"unMute\"));\n\t}\n\tget autoplay() {\n\t\treturn this.#autoplay;\n\t}\n\tset autoplay(value) {\n\t\tthis.#autoplay = value;\n\t}\n\tget defaultMuted() {\n\t\treturn this.#defaultMuted;\n\t}\n\tset defaultMuted(value) {\n\t\tthis.#defaultMuted = value;\n\t\tif (!this.#loaded) this.#muted = value;\n\t}\n\tget loop() {\n\t\treturn this.#loop;\n\t}\n\tset loop(value) {\n\t\tthis.#loop = value;\n\t}\n\tget controls() {\n\t\treturn this.#controls;\n\t}\n\tset controls(value) {\n\t\tthis.#controls = value;\n\t}\n\tget playsInline() {\n\t\treturn this.#playsInline;\n\t}\n\tset playsInline(value) {\n\t\tthis.#playsInline = value;\n\t}\n\tget preload() {\n\t\treturn this.#preload;\n\t}\n\tset preload(value) {\n\t\tthis.#preload = value;\n\t}\n\tget poster() {\n\t\treturn this.#poster;\n\t}\n\tset poster(value) {\n\t\tthis.#poster = value;\n\t}\n\t/** TikTok URL or id in `src`, player params under `engine.tiktok`. Re-derives `src`; equal sources skip reload. */\n\tget source() {\n\t\treturn this.#source;\n\t}\n\tset source(value) {\n\t\tconst source = value ?? null;\n\t\tif (source === this.#source) return;\n\t\tconst src = source?.src ?? \"\";\n\t\tconst srcChanged = this.#src !== src;\n\t\tconst engineChanged = !deepEqual(this.#source?.engine?.tiktok ?? null, source?.engine?.tiktok ?? null);\n\t\tthis.#source = source;\n\t\tthis.#src = src;\n\t\tif (srcChanged || engineChanged) this.load();\n\t\tthis.dispatchEvent(new Event(\"sourcechange\"));\n\t}\n\tget buffered() {\n\t\treturn this.#currentTime > 0 ? createTimeRange(0, this.#currentTime) : EMPTY_TIME_RANGES;\n\t}\n\tget seekable() {\n\t\treturn this.#duration > 0 && Number.isFinite(this.#duration) ? createTimeRange(0, this.#duration) : EMPTY_TIME_RANGES;\n\t}\n\tget error() {\n\t\treturn this.#error;\n\t}\n\t/** Always empty: `closed_caption` is the embed's only say over captions. */\n\tget textTracks() {\n\t\treturn EMPTY_TEXT_TRACKS;\n\t}\n\tget isFullscreen() {\n\t\treturn this.#isFullscreen;\n\t}\n\tasync requestFullscreen() {\n\t\tif (!this.#target?.requestFullscreen) return;\n\t\tawait this.#target.requestFullscreen();\n\t\tthis.#isFullscreen = true;\n\t}\n\tasync exitFullscreen() {\n\t\tconst doc = globalThis.document;\n\t\tif (doc?.fullscreenElement && doc.fullscreenElement === this.#target) await doc.exitFullscreen();\n\t\tthis.#isFullscreen = false;\n\t}\n\t#createPlayer() {\n\t\tconst target = this.#target;\n\t\tif (!target) return false;\n\t\tconst props = this.#snapshotProps();\n\t\tif (target.getAttribute(\"src\")) {\n\t\t\tthis.#bootstrap = shouldBootstrapTikTokEmbed(props) ? \"parking\" : \"off\";\n\t\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\t\treturn true;\n\t\t}\n\t\tconst initialSrc = buildTikTokIframeSrc(this.#src, props);\n\t\tif (!initialSrc) {\n\t\t\tthis.#loadComplete.resolve();\n\t\t\treturn false;\n\t\t}\n\t\tthis.#bootstrap = shouldBootstrapTikTokEmbed(props) ? \"parking\" : \"off\";\n\t\ttarget.src = initialSrc;\n\t\tthis.dispatchEvent(new Event(\"loadstart\"));\n\t\treturn true;\n\t}\n\t#listen(target) {\n\t\tconst win = globalThis.window;\n\t\tif (isUndefined(win)) return;\n\t\tconst attachId = this.#attachId;\n\t\tthis.#messages = new AbortController();\n\t\twin.addEventListener(\"message\", (event) => this.#onMessage(event, target, attachId), { signal: this.#messages.signal });\n\t}\n\t#onMessage(event, target, attachId) {\n\t\tif (this.#isStale(attachId)) return;\n\t\tconst frame = target.contentWindow;\n\t\tif (!frame || event.source !== frame) return;\n\t\tconst message = event.data;\n\t\tif (!isTikTokPlayerMessage(message)) return;\n\t\tif (this.#srcUnsupported) return;\n\t\tif (this.#hasSource) this.#onLoaded();\n\t\tswitch (message.type) {\n\t\t\tcase \"onPlayerReady\": break;\n\t\t\tcase \"onStateChange\":\n\t\t\t\tif (isNumber(message.value)) this.#onStateChange(message.value);\n\t\t\t\tbreak;\n\t\t\tcase \"onCurrentTime\":\n\t\t\t\tif (isTikTokCurrentTime(message.value)) this.#onCurrentTime(message.value.currentTime, message.value.duration);\n\t\t\t\tbreak;\n\t\t\tcase \"onVolumeChange\": break;\n\t\t\tcase \"onMute\":\n\t\t\t\tif (this.#bootstrap !== \"off\") break;\n\t\t\t\tthis.#muted = !!message.value;\n\t\t\t\tthis.dispatchEvent(new Event(\"volumechange\"));\n\t\t\t\tbreak;\n\t\t\tcase \"onPlayerError\":\n\t\t\t\tif (isTikTokPlayerError(message.value)) this.#onPlayerError(message.value);\n\t\t\t\tbreak;\n\t\t\tcase \"onError\":\n\t\t\t\tthis.#onError(\"TikTok player error; visit https://developers.tiktok.com/doc/embed-player for what the embed supports.\", isMediaErrorCode(message.value) ? message.value : MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED);\n\t\t\t\tbreak;\n\t\t\tdefault: break;\n\t\t}\n\t}\n\t#isStale(attachId) {\n\t\treturn attachId !== this.#attachId;\n\t}\n\t#afterLoad(fn) {\n\t\tthis.#loadComplete.then(() => {\n\t\t\tif (!this.#target) return;\n\t\t\ttryCall(fn);\n\t\t}, () => {});\n\t}\n\t#post(type, value) {\n\t\tconst frame = this.#target?.contentWindow;\n\t\tif (!frame) return;\n\t\tframe.postMessage(createTikTokPlayerCommand(type, value), \"*\");\n\t}\n\tget #nextMuted() {\n\t\treturn this.#defaultMuted || this.#muted;\n\t}\n\t#snapshotProps() {\n\t\treturn {\n\t\t\tautoplay: this.#autoplay,\n\t\t\tdefaultMuted: this.#nextMuted,\n\t\t\tloop: this.#loop,\n\t\t\tcontrols: this.#controls,\n\t\t\tpreload: this.#preload,\n\t\t\tsource: this.#source\n\t\t};\n\t}\n\t#resetState() {\n\t\tthis.#currentTime = 0;\n\t\tthis.#duration = NaN;\n\t\tthis.#muted = this.#nextMuted;\n\t\tthis.#paused = !this.#autoplay;\n\t\tthis.#ended = false;\n\t\tthis.#readyState = READY_STATE_HAVE_NOTHING;\n\t\tthis.#seeking = false;\n\t\tthis.#loaded = false;\n\t\tthis.#srcUnsupported = false;\n\t\tthis.#playFired = false;\n\t\tthis.#bootstrap = \"off\";\n\t\tthis.#parkPosition = 0;\n\t\tthis.#error = null;\n\t\tthis.#isFullscreen = false;\n\t}\n\t#onLoaded() {\n\t\tif (this.#loaded) return;\n\t\tthis.#loaded = true;\n\t\tthis.#readyState = READY_STATE_HAVE_METADATA;\n\t\tif (this.#muted) this.#post(\"mute\");\n\t\tif (this.#bootstrap === \"parking\") {\n\t\t\tthis.#post(\"pause\");\n\t\t\tthis.#post(\"seekTo\", this.#parkPosition);\n\t\t} else if (this.#playRequested) {\n\t\t\tthis.#playRequested = false;\n\t\t\tthis.#post(\"play\");\n\t\t}\n\t\tfor (const type of [\"loadedmetadata\", \"loadcomplete\"]) this.dispatchEvent(new Event(type));\n\t\tthis.#loadComplete.resolve();\n\t}\n\t#park() {\n\t\tif (this.#bootstrap === \"parked\") return;\n\t\tthis.#bootstrap = \"parked\";\n\t\tthis.#currentTime = this.#parkPosition;\n\t\tthis.#paused = true;\n\t\tthis.#playFired = false;\n\t\tif (!this.#muted) this.#post(\"unMute\");\n\t\tthis.#settleSeek();\n\t\tif (this.#playRequested) {\n\t\t\tthis.#playRequested = false;\n\t\t\tthis.#takeOver();\n\t\t\tthis.#post(\"play\");\n\t\t}\n\t}\n\t#takeOver() {\n\t\tif (this.#bootstrap === \"parked\") this.#bootstrap = \"off\";\n\t}\n\t#settleSeek() {\n\t\tif (!this.#seeking) return;\n\t\tthis.#seeking = false;\n\t\tthis.dispatchEvent(new Event(\"seeked\"));\n\t}\n\t#onPlayerError({ errorCode, errorType }) {\n\t\tif (errorCode === 3002) return;\n\t\tconst named = errorType ? ` (${errorType})` : \"\";\n\t\tthis.#onError(`TikTok player error ${errorCode}${named}; visit https://developers.tiktok.com/doc/embed-player for what the embed supports.`, toMediaErrorCode(errorCode));\n\t}\n\t#onError(message, code) {\n\t\tthis.#error = new MediaError(message, code);\n\t\tthis.dispatchEvent(new Event(\"error\"));\n\t\tthis.#loadComplete.resolve();\n\t}\n\t#onStateChange(state) {\n\t\tconst emit = (type) => this.dispatchEvent(new Event(type));\n\t\tif (this.#bootstrap !== \"off\") {\n\t\t\tif (state === 1 || state === 3) this.#post(\"pause\");\n\t\t\telse if (state === 2 || state === 0) this.#park();\n\t\t\treturn;\n\t\t}\n\t\tif (state === 1 || state === 3) {\n\t\t\tif (!this.#playFired) {\n\t\t\t\tthis.#playFired = true;\n\t\t\t\tthis.#paused = false;\n\t\t\t\tthis.#ended = false;\n\t\t\t\temit(\"play\");\n\t\t\t}\n\t\t}\n\t\tif (state === 3) emit(\"waiting\");\n\t\telse if (state === 1) {\n\t\t\tthis.#readyState = READY_STATE_HAVE_FUTURE_DATA;\n\t\t\tthis.#paused = false;\n\t\t\temit(\"playing\");\n\t\t} else if (state === 2) {\n\t\t\tthis.#playFired = false;\n\t\t\tthis.#paused = true;\n\t\t\temit(\"pause\");\n\t\t} else if (state === 0) {\n\t\t\tthis.#playFired = false;\n\t\t\tthis.#paused = true;\n\t\t\temit(\"pause\");\n\t\t\tthis.#ended = true;\n\t\t\temit(\"ended\");\n\t\t\tif (this.#loop) this.play();\n\t\t} else if (state === -1) {\n\t\t\tthis.#playFired = false;\n\t\t\tthis.#paused = true;\n\t\t}\n\t}\n\t#onCurrentTime(currentTime, duration) {\n\t\tif (this.#bootstrap === \"off\") {\n\t\t\tif (currentTime !== this.#currentTime) {\n\t\t\t\tthis.#currentTime = currentTime;\n\t\t\t\tthis.dispatchEvent(new Event(\"timeupdate\"));\n\t\t\t}\n\t\t\tif (this.#seeking) {\n\t\t\t\tthis.#seeking = false;\n\t\t\t\tthis.dispatchEvent(new Event(\"seeked\"));\n\t\t\t}\n\t\t}\n\t\tif (isNumber(duration) && duration > 0 && duration !== this.#duration) {\n\t\t\tthis.#duration = duration;\n\t\t\tthis.dispatchEvent(new Event(\"durationchange\"));\n\t\t}\n\t}\n};\n/** Read a TikTok player error code as a `MediaError` one; TikTok groups codes by category, so the category is read. */\nfunction toMediaErrorCode(errorCode) {\n\tif (errorCode >= 2e3 && errorCode < 3e3) return MediaError.MEDIA_ERR_NETWORK;\n\tif (errorCode >= 3e3 && errorCode < 4e3) return MediaError.MEDIA_ERR_DECODE;\n\treturn MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED;\n}\n/** Whether a reported value is one of the codes a `MediaError` can carry. */\nfunction isMediaErrorCode(value) {\n\treturn isNumber(value) && value >= MediaError.MEDIA_ERR_ABORTED && value <= MediaError.MEDIA_ERR_ENCRYPTED;\n}\nconst READY_STATE_HAVE_NOTHING = 0;\nconst READY_STATE_HAVE_METADATA = 1;\nconst READY_STATE_HAVE_FUTURE_DATA = 3;\n//#endregion\nexport { TikTokMedia };\n\n//# sourceMappingURL=media.js.map","import { CustomMediaElement } from '@videojs/media/dom/custom-media-element';\nimport type { TikTokMediaProps } from '@videojs/media/dom/tiktok';\nimport { buildTikTokIframeSrc, TikTokMedia } from '@videojs/media/dom/tiktok';\nimport { escapeHtml } from '@videojs/utils/string';\nimport { MediaAttachMixin } from '../../store/media-attach-mixin';\n\nclass TikTokCustomMediaElement extends CustomMediaElement('iframe', TikTokMedia) {\n static override getTemplateHTML = (attrs: Record<string, string>): string => {\n const initialSrc = buildTikTokIframeSrc(attrs.src ?? '', templateAttrsToEmbedProps(attrs));\n const srcAttr = initialSrc ? ` src=\"${escapeHtml(initialSrc)}\"` : '';\n return /*html*/ `\n <style>\n :host {\n display: inline-block;\n /* TikTok videos are portrait, and the player refuses to draw its chrome\n below 325x578, so that is where this host starts rather than the\n 300x150 the landscape embeds use. */\n min-width: 325px;\n min-height: 578px;\n position: relative;\n }\n iframe {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n border: 0;\n }\n /* A cross-origin frame swallows every pointer event, so the skin above it\n never sees the hover that reveals the controls. Kept out of hit-testing\n except where the host leaves TikTok's player dormant, which is the same\n pair of cases shouldBootstrapTikTokEmbed opts out of: then the frame's\n own controls are the only thing that can still start it. */\n :host(:not([controls]):not([preload=\"none\"])) {\n pointer-events: none;\n }\n </style>\n <iframe\n part=\"iframe\"\n title=\"TikTok video player\"\n ${srcAttr}\n allow=\"accelerometer; fullscreen; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n allowfullscreen\n frameborder=\"0\"\n width=\"100%\"\n height=\"100%\"\n referrerpolicy=\"${escapeHtml(attrs.referrerpolicy ?? '')}\"\n ></iframe>\n `;\n };\n}\n\n// Only the props the embed URL is built from. `preload` is not a TikTok parameter, but it decides whether the URL\n// carries a bootstrap autoplay, and a URL differing from the host's would have it rebuild the frame on mount.\nfunction templateAttrsToEmbedProps(attrs: Record<string, string>): Partial<TikTokMediaProps> {\n return {\n autoplay: attrs.autoplay !== undefined,\n defaultMuted: attrs.muted !== undefined,\n loop: attrs.loop !== undefined,\n controls: attrs.controls !== undefined,\n preload: attrs.preload as TikTokMediaProps['preload'],\n };\n}\n\nexport class TikTokVideo extends MediaAttachMixin(TikTokCustomMediaElement) {}\n","import { TikTokVideo } from '../../media/tiktok-video';\nimport { safeDefine } from '../safe-define';\n\nexport class TikTokVideoElement extends TikTokVideo {\n static readonly tagName = 'tiktok-video';\n}\n\nsafeDefine(TikTokVideoElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TikTokVideoElement.tagName]: TikTokVideoElement;\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};