diff --git a/packages/html/html/src/media-container.ts b/packages/html/html/src/media-container.ts index 4b1ca416..90aed0b4 100644 --- a/packages/html/html/src/media-container.ts +++ b/packages/html/html/src/media-container.ts @@ -19,6 +19,7 @@ export class MediaContainer extends ConsumerMixin(HTMLElement) { mediaStore: (mediaStore: any) => { this._mediaStore = mediaStore; this._handleMediaSlotChange(); + this._registerContainerStateOwner(); }, }; @@ -38,6 +39,26 @@ export class MediaContainer extends ConsumerMixin(HTMLElement) { this._mediaSlot.addEventListener('slotchange', this._handleMediaSlotChange); } + connectedCallback() { + super.connectedCallback?.(); + this._registerContainerStateOwner(); + } + + disconnectedCallback() { + super.disconnectedCallback?.(); + this._unregisterContainerStateOwner(); + } + + _registerContainerStateOwner = () => { + if (!this._mediaStore) return; + this._mediaStore.dispatch({ type: 'containerstateownerchangerequest', detail: this }); + }; + + _unregisterContainerStateOwner = () => { + if (!this._mediaStore) return; + this._mediaStore.dispatch({ type: 'containerstateownerchangerequest', detail: null }); + }; + _handleMediaSlotChange = () => { const media = this._mediaSlot.assignedElements({ flatten: true })[0]; this._mediaStore.dispatch({ type: 'mediastateownerchangerequest', detail: media }); diff --git a/packages/html/html/src/skins/media-skin-default.ts b/packages/html/html/src/skins/media-skin-default.ts index e58a32d5..71e8fcd6 100644 --- a/packages/html/html/src/skins/media-skin-default.ts +++ b/packages/html/html/src/skins/media-skin-default.ts @@ -5,6 +5,7 @@ import '../components/media-play-button'; import '../components/media-mute-button'; import '../components/media-volume-range'; import '../components/media-time-range'; +import '../components/media-fullscreen-button'; import '@vjs-10/html-icons'; export function getTemplateHTML() { @@ -60,6 +61,12 @@ export function getTemplateHTML() { display: inline-block; } + /* Media Fullscreen Button UI/Styles */ + media-fullscreen-button:not([data-fullscreen]) .fullscreen-enter-icon, + media-fullscreen-button[data-fullscreen] .fullscreen-exit-icon { + display: inline-block; + } + /* One way to define the "default visible" icon (CJP) */ media-mute-button:not([data-volume-level]) .volume-low-icon, media-mute-button[data-volume-level=high] .volume-high-icon, @@ -98,6 +105,10 @@ export function getTemplateHTML() { + + + + diff --git a/packages/html/html/src/utils/component-factory.ts b/packages/html/html/src/utils/component-factory.ts index 774c14de..5e9230bc 100644 --- a/packages/html/html/src/utils/component-factory.ts +++ b/packages/html/html/src/utils/component-factory.ts @@ -52,7 +52,7 @@ export const toConnectedHTMLComponent = ( // @ts-ignore - Element property access const props = propsHook(state ?? {}, this); // @ts-ignore - this._update(props, state); + this._update(props, state, mediaStore); }); }, };