import '@app/styles.css'; import '@videojs/html/video/player'; import { createHtmlSandboxState, createLatestLoader, renderMediaAttrs } from '@app/shared/html/sandbox-state'; import { loadVideoSkinTag } from '@app/shared/html/skins'; import { renderStoryboard } from '@app/shared/html/storyboard'; import { onAutoplayChange, onLoopChange, onMutedChange, onPreloadChange, onSkinChange, onSourceChange, } from '@app/shared/sandbox-listener'; import { getPosterSrc, getStoryboardSrc, SOURCES } from '@app/shared/sources'; const html = String.raw; const state = createHtmlSandboxState(); const loadLatest = createLatestLoader(); async function render() { const tag = await loadLatest(() => loadVideoSkinTag(state.skin, state.styling)); if (!tag) return; const storyboard = getStoryboardSrc(state.source); const poster = getPosterSrc(state.source); const mediaAttrs = renderMediaAttrs(state); document.getElementById('root')!.innerHTML = html` <${tag} class="aspect-video max-w-4xl mx-auto"> ${poster ? html`Video poster` : ''} `; } render(); onSkinChange((skin) => { state.skin = skin; render(); }); onSourceChange((source) => { state.source = source; render(); }); onAutoplayChange((autoplay) => { state.autoplay = autoplay; render(); }); onMutedChange((muted) => { state.muted = muted; render(); }); onLoopChange((loop) => { state.loop = loop; render(); }); onPreloadChange((preload) => { state.preload = preload; render(); });