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);
});
},
};