import { renderIcon } from '@videojs/icons/render'; import { createShadowStyle, createTemplate } from '@videojs/utils/dom'; import { safeDefine } from '../safe-define'; import { SkinElement } from '../skin-element'; import styles from './skin.css?inline'; // Side-effect imports: register all custom elements used in the template. import '../media/container'; import '../ui/buffering-indicator'; import '../ui/captions-button'; import '../ui/error-dialog'; import '../ui/controls'; import '../ui/fullscreen-button'; import '../ui/mute-button'; import '../ui/pip-button'; import '../ui/play-button'; import '../ui/playback-rate-button'; import '../ui/popover'; import '../ui/poster'; import '../ui/seek-button'; import '../ui/time'; import '../ui/time-slider'; import '../ui/tooltip'; import '../ui/tooltip-group'; import '../ui/volume-slider'; const SEEK_TIME = 10; function getTemplateHTML() { return /*html*/ `
${renderIcon('spinner', { class: 'media-icon' })}
Something went wrong.
OK
${renderIcon('restart', { class: 'media-icon media-icon--restart' })} ${renderIcon('play', { class: 'media-icon media-icon--play' })} ${renderIcon('pause', { class: 'media-icon media-icon--pause' })} ${renderIcon('seek', { class: 'media-icon media-icon--flipped' })} ${SEEK_TIME} Seek backward ${SEEK_TIME} seconds ${renderIcon('seek', { class: 'media-icon' })} ${SEEK_TIME} Seek forward ${SEEK_TIME} seconds
${renderIcon('spinner', { class: 'media-preview__spinner media-icon' })}
Toggle playback rate ${renderIcon('volume-off', { class: 'media-icon media-icon--volume-off' })} ${renderIcon('volume-low', { class: 'media-icon media-icon--volume-low' })} ${renderIcon('volume-high', { class: 'media-icon media-icon--volume-high' })} ${renderIcon('captions-off', { class: 'media-icon media-icon--captions-off' })} ${renderIcon('captions-on', { class: 'media-icon media-icon--captions-on' })} ${renderIcon('pip-enter', { class: 'media-icon media-icon--pip-enter' })} ${renderIcon('pip-exit', { class: 'media-icon media-icon--pip-exit' })} ${renderIcon('fullscreen-enter', { class: 'media-icon media-icon--fullscreen-enter' })} ${renderIcon('fullscreen-exit', { class: 'media-icon media-icon--fullscreen-exit' })}
`; } export class VideoSkinElement extends SkinElement { static readonly tagName = 'video-skin'; static styles = createShadowStyle(styles); static template = createTemplate(getTemplateHTML()); } safeDefine(VideoSkinElement); declare global { interface HTMLElementTagNameMap { [VideoSkinElement.tagName]: VideoSkinElement; } }