feat(skin): add audio skins for HTML and React presets (#772)

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Sam Potts
2026-03-09 12:12:49 +11:00
committed by GitHub
co-authored by Claude Opus 4.6
parent 038ad8b4f5
commit d751fdabea
125 changed files with 4174 additions and 2264 deletions
+11 -8
View File
@@ -1,10 +1,12 @@
import { ReactiveElement } from '@videojs/element';
import { renderIcon } from '@videojs/icons/render';
import { SkinMixin } from '../skin-mixin';
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/buffering-indicator';
import '../ui/captions-button';
import '../ui/controls';
import '../ui/fullscreen-button';
import '../ui/mute-button';
@@ -21,7 +23,9 @@ const SEEK_TIME = 10;
function getTemplateHTML() {
return /*html*/ `
<media-container class="media-default-skin">
<media-container class="media-default-skin media-default-skin--video">
<slot name="media"></slot>
<media-buffering-indicator class="media-buffering-indicator">
<div class="media-surface">
${renderIcon('spinner', { class: 'media-icon' })}
@@ -76,13 +80,13 @@ function getTemplateHTML() {
<media-playback-rate-button class="media-button media-button--icon media-button--playback-rate">
</media-playback-rate-button>
<media-mute-button commandfor="volume-popover" class="media-button media-button--icon media-button--mute">
<media-mute-button commandfor="video-volume-popover" class="media-button media-button--icon media-button--mute">
${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' })}
</media-mute-button>
<media-popover id="volume-popover" open-on-hover delay="200" close-delay="100" side="top" class="media-surface media-popup media-popup--volume media-popup-animation">
<media-popover id="video-volume-popover" open-on-hover delay="200" close-delay="100" side="top" class="media-surface media-popup media-popup--volume media-popup-animation">
<media-volume-slider class="media-slider" orientation="vertical" thumb-alignment="edge">
<media-slider-track class="media-slider__track">
<media-slider-fill class="media-slider__fill"></media-slider-fill>
@@ -91,10 +95,10 @@ function getTemplateHTML() {
</media-volume-slider>
</media-popover>
<!--<button type="button" class="media-button media-button--icon media-button--captions" aria-label="Captions">
<media-captions-button class="media-button media-button--icon media-button--captions">
${renderIcon('captions-off', { class: 'media-icon media-icon--captions-off' })}
${renderIcon('captions-on', { class: 'media-icon media-icon--captions-on' })}
</button>-->
</media-captions-button>
<media-pip-button class="media-button media-button--icon">
${renderIcon('pip', { class: 'media-icon' })}
@@ -107,14 +111,13 @@ function getTemplateHTML() {
</media-controls>
<div class="media-overlay"></div>
<slot name="media"></slot>
</media-container>
`;
}
export class VideoSkinElement extends SkinMixin(ReactiveElement) {
static readonly tagName = 'video-skin';
static styles = createStyles(styles);
static getTemplateHTML = getTemplateHTML;
}