import { ReactiveElement } from '@videojs/element'; import { renderIcon } from '@videojs/icons/render'; import { button, controls, icon, iconContainer, iconFlipped, iconState, playbackRate, popup, root, seek, slider, time, tooltipState, } from '@videojs/skins/default/tailwind/audio.tailwind'; import { cn } from '@videojs/utils/style'; import { SkinMixin } from '../skin-mixin'; // 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/tooltip-group'; import '../ui/volume-slider'; const SEEK_TIME = 10; function getTemplateHTML() { return /*html*/ `
${renderIcon('restart', { class: cn(icon, iconState.play.restart) })} ${renderIcon('play', { class: cn(icon, iconState.play.play) })} ${renderIcon('pause', { class: cn(icon, iconState.play.pause) })} Replay Play Pause ${renderIcon('seek', { class: cn(icon, iconFlipped) })} ${SEEK_TIME} Seek backward ${SEEK_TIME} seconds ${renderIcon('seek', { class: icon })} ${SEEK_TIME} Seek forward ${SEEK_TIME} seconds Toggle playback rate ${renderIcon('volume-off', { class: cn(icon, iconState.mute.volumeOff) })} ${renderIcon('volume-low', { class: cn(icon, iconState.mute.volumeLow) })} ${renderIcon('volume-high', { class: cn(icon, iconState.mute.volumeHigh) })}
`; } export class AudioSkinTailwindElement extends SkinMixin(ReactiveElement) { static readonly tagName = 'audio-skin-tailwind'; static getTemplateHTML = getTemplateHTML; } customElements.define(AudioSkinTailwindElement.tagName, AudioSkinTailwindElement); declare global { interface HTMLElementTagNameMap { [AudioSkinTailwindElement.tagName]: AudioSkinTailwindElement; } }