vidstack
Version:
Build awesome media experiences on the web.
38 lines (35 loc) • 1.61 kB
JavaScript
import { $$_create_walker, $$_effect, $$_attr, $$_ref, $$_create_template } from 'maverick.js/dom';
import { computed } from 'maverick.js';
import { isString } from 'maverick.js/std';
import { V as VIDEO_EXTENSIONS, c as VIDEO_TYPES, i as isHLSSrc } from '../audio/loader.js';
import { Y as canPlayHLSNatively } from '../../media-core.js';
const $$_templ = /* @__PURE__ */ $$_create_template(`<!$><video preload="none" aria-hidden="true"></video>`), $$_templ_2 = $$_templ;
class VideoProviderLoader {
_video;
canPlay(src) {
return isString(src.src) ? VIDEO_EXTENSIONS.test(src.src) || VIDEO_TYPES.has(src.type) || src.src.startsWith("blob:") && src.type === "video/object" || isHLSSrc(src) && canPlayHLSNatively() : src.type === "video/object";
}
mediaType() {
return "video";
}
async load(context) {
if (!this._video) {
throw Error(
"[vidstack] `<video>` element was not found - did you forget to include `<media-outlet>`?"
);
}
return new (await import('./provider.js')).VideoProvider(this._video, context);
}
render($store) {
const $poster = computed(() => $store.poster() && $store.controls() ? $store.poster() : null);
return (() => {
const [$$_root, $$_walker] = $$_create_walker($$_templ_2);
$$_effect(() => $$_attr($$_root, "controls", $store.controls()));
$$_effect(() => $$_attr($$_root, "crossorigin", $store.crossorigin()));
$$_effect(() => $$_attr($$_root, "poster", $poster()));
$$_ref($$_root, (el) => void (this._video = el));
return $$_root;
})();
}
}
export { VideoProviderLoader as V };