diff --git a/packages/html/package.json b/packages/html/package.json index 0ab06d0c..905bc83a 100644 --- a/packages/html/package.json +++ b/packages/html/package.json @@ -89,6 +89,8 @@ "dependencies": { "@videojs/core": "workspace:*", "@videojs/element": "workspace:*", + "@videojs/icons": "workspace:*", + "@videojs/skins": "workspace:*", "@videojs/store": "workspace:*", "@videojs/utils": "workspace:*" }, diff --git a/packages/html/src/define/audio/minimal-skin.css b/packages/html/src/define/audio/minimal-skin.css new file mode 100644 index 00000000..76c1d426 --- /dev/null +++ b/packages/html/src/define/audio/minimal-skin.css @@ -0,0 +1,11 @@ +.media-minimal-skin { + color: var(--media-color, red); +} + +audio-player { + display: contents; +} + +audio-minimal-skin { + display: contents; +} diff --git a/packages/html/src/define/audio/minimal-skin.ts b/packages/html/src/define/audio/minimal-skin.ts new file mode 100644 index 00000000..a720a6c9 --- /dev/null +++ b/packages/html/src/define/audio/minimal-skin.ts @@ -0,0 +1,26 @@ +import { ReactiveElement } from '@videojs/element'; + +function getTemplateHTML() { + return /*html*/ `
`; +} + +export class MinimalAudioSkinElement extends ReactiveElement { + static readonly tagName = 'audio-minimal-skin'; + static getTemplateHTML = getTemplateHTML; + + constructor() { + super(); + const children = [...this.childNodes]; + this.innerHTML = getTemplateHTML(); + const container = this.firstElementChild; + if (container) for (const child of children) container.append(child); + } +} + +customElements.define(MinimalAudioSkinElement.tagName, MinimalAudioSkinElement); + +declare global { + interface HTMLElementTagNameMap { + [MinimalAudioSkinElement.tagName]: MinimalAudioSkinElement; + } +} diff --git a/packages/html/src/define/audio/skin.css b/packages/html/src/define/audio/skin.css new file mode 100644 index 00000000..83042de2 --- /dev/null +++ b/packages/html/src/define/audio/skin.css @@ -0,0 +1,9 @@ +@import "@videojs/skins/audio/default.css"; + +audio-player { + display: contents; +} + +audio-skin { + display: contents; +} diff --git a/packages/html/src/define/audio/skin.ts b/packages/html/src/define/audio/skin.ts index 2367e2e4..17feef2d 100644 --- a/packages/html/src/define/audio/skin.ts +++ b/packages/html/src/define/audio/skin.ts @@ -1 +1,26 @@ -// TODO: Implement AudioSkinElement and then register it here +import { ReactiveElement } from '@videojs/element'; + +function getTemplateHTML() { + return /*html*/ ``; +} + +export class AudioSkinElement extends ReactiveElement { + static readonly tagName = 'audio-skin'; + static getTemplateHTML = getTemplateHTML; + + constructor() { + super(); + const children = [...this.childNodes]; + this.innerHTML = getTemplateHTML(); + const container = this.firstElementChild; + if (container) for (const child of children) container.append(child); + } +} + +customElements.define(AudioSkinElement.tagName, AudioSkinElement); + +declare global { + interface HTMLElementTagNameMap { + [AudioSkinElement.tagName]: AudioSkinElement; + } +} diff --git a/packages/html/src/define/skin-mixin.ts b/packages/html/src/define/skin-mixin.ts new file mode 100644 index 00000000..662ed068 --- /dev/null +++ b/packages/html/src/define/skin-mixin.ts @@ -0,0 +1,46 @@ +import type { ReactiveElement } from '@videojs/element'; +import type { Constructor } from '@videojs/utils/types'; + +/** + * Mixin for skin elements that renders the template from a static + * `getTemplateHTML` method and resolves `Something went wrong.
+An error occurred while trying to play the video. Please try again.
+Something went wrong.
+An error occurred while trying to play the video. Please try again.
+Something went wrong.
+An error occurred while trying to play the video. Please try again.
+