import { ReactiveElement } from '@videojs/element'; import { renderIcon } from '@videojs/icons/render'; import { createStyles, SkinMixin } from '../skin-mixin'; import styles from './skin.css?inline'; // Side-effect imports: register all custom elements used in the template. import '../media/container'; import '../ui/mute-button'; import '../ui/play-button'; import '../ui/playback-rate-button'; import '../ui/popover'; import '../ui/seek-button'; import '../ui/time'; import '../ui/time-slider'; import '../ui/tooltip'; import '../ui/volume-slider'; const SEEK_TIME = 10; function getTemplateHTML() { return /*html*/ `
${renderIcon('restart', { class: 'media-icon media-icon--restart' })} ${renderIcon('play', { class: 'media-icon media-icon--play' })} ${renderIcon('pause', { class: 'media-icon media-icon--pause' })} Replay Play Pause ${renderIcon('seek', { class: 'media-icon media-icon--seek media-icon--flipped' })} ${SEEK_TIME} Seek backward ${SEEK_TIME} seconds ${renderIcon('seek', { class: 'media-icon media-icon--seek' })} ${SEEK_TIME} Seek forward ${SEEK_TIME} seconds 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' })}
`; } export class AudioSkinElement extends SkinMixin(ReactiveElement) { static readonly tagName = 'audio-skin'; static styles = createStyles(styles); static getTemplateHTML = getTemplateHTML; } customElements.define(AudioSkinElement.tagName, AudioSkinElement); declare global { interface HTMLElementTagNameMap { [AudioSkinElement.tagName]: AudioSkinElement; } }