diff --git a/packages/html/src/media/container-element.ts b/packages/html/src/media/container-element.ts
index a7da0d48..286fc15f 100644
--- a/packages/html/src/media/container-element.ts
+++ b/packages/html/src/media/container-element.ts
@@ -1,8 +1,8 @@
-import { containerAttachContext, playerContext } from '../player/context';
+import { containerContext, playerContext } from '../player/context';
import { createContainerMixin } from '../store/container-mixin';
import { MediaElement } from '../ui/media-element';
-const ContainerMixin = createContainerMixin({ playerContext, containerAttachContext });
+const ContainerMixin = createContainerMixin({ playerContext, containerContext });
export class MediaContainerElement extends ContainerMixin(MediaElement) {
static readonly tagName = 'media-container';
diff --git a/packages/html/src/player/context.ts b/packages/html/src/player/context.ts
index 16dcb726..883415c9 100644
--- a/packages/html/src/player/context.ts
+++ b/packages/html/src/player/context.ts
@@ -5,7 +5,7 @@ import { type Context, createContext } from '@videojs/element/context';
// Player Context
// ----------------------------------------
-export const PLAYER_CONTEXT_KEY = Symbol('@videojs/player');
+export const PLAYER_CONTEXT_KEY = Symbol.for('@videojs/player');
export type PlayerContextValue = Store;
@@ -22,23 +22,33 @@ export type PlayerContext = Context<
export const playerContext = createContext(PLAYER_CONTEXT_KEY);
// ----------------------------------------
-// Attach Contexts
+// Media Context
// ----------------------------------------
-export const MEDIA_ATTACH_KEY = Symbol('@videojs/media-attach');
+export const MEDIA_CONTEXT_KEY = Symbol.for('@videojs/media');
-export type MediaAttachValue = (media: Media | null) => void;
+export interface MediaContextValue {
+ media: Media | null;
+ setMedia: (media: Media | null) => void;
+}
-export type MediaAttachContext = Context;
+export type MediaContext = Context;
-export const mediaAttachContext = createContext(MEDIA_ATTACH_KEY);
+export const mediaContext = createContext(MEDIA_CONTEXT_KEY);
-export const CONTAINER_ATTACH_KEY = Symbol('@videojs/container-attach');
+// ----------------------------------------
+// Container Context
+// ----------------------------------------
-export type ContainerAttachValue = (container: MediaContainer | null) => void;
+export const CONTAINER_CONTEXT_KEY = Symbol.for('@videojs/container');
-export type ContainerAttachContext = Context;
+export interface ContainerContextValue {
+ container: MediaContainer | null;
+ setContainer: (container: MediaContainer | null) => void;
+}
-export const containerAttachContext = createContext(
- CONTAINER_ATTACH_KEY
+export type ContainerContext = Context;
+
+export const containerContext = createContext(
+ CONTAINER_CONTEXT_KEY
);
diff --git a/packages/html/src/player/create-player.ts b/packages/html/src/player/create-player.ts
index 4ffa6aa4..481bdccd 100644
--- a/packages/html/src/player/create-player.ts
+++ b/packages/html/src/player/create-player.ts
@@ -11,7 +11,7 @@ import { combine, createStore } from '@videojs/store';
import { type ContainerMixin, createContainerMixin } from '../store/container-mixin';
import { createProviderMixin, type ProviderMixin } from '../store/provider-mixin';
-import { containerAttachContext, mediaAttachContext, type PlayerContext, playerContext } from './context';
+import { containerContext, mediaContext, type PlayerContext, playerContext } from './context';
import { PlayerController } from './player-controller';
export interface CreatePlayerConfig {
@@ -89,14 +89,14 @@ export function createPlayer(config: CreatePlayerConfig): Cr
const ProviderMixin = createProviderMixin({
playerContext,
- mediaAttachContext,
- containerAttachContext,
+ mediaContext,
+ containerContext,
factory: create,
});
const ContainerMixin = createContainerMixin({
playerContext,
- containerAttachContext,
+ containerContext,
});
return {
diff --git a/packages/html/src/store/container-mixin.ts b/packages/html/src/store/container-mixin.ts
index 34123fdf..d85eef41 100644
--- a/packages/html/src/store/container-mixin.ts
+++ b/packages/html/src/store/container-mixin.ts
@@ -1,12 +1,12 @@
import type { MediaContainer, PlayerStore } from '@videojs/core/dom';
import { ContextConsumer } from '@videojs/element/context';
import type { MediaElementConstructor } from '@/ui/media-element';
-import type { ContainerAttachContext, PlayerContext } from '../player/context';
+import type { ContainerContext, PlayerContext } from '../player/context';
import type { PlayerConsumer, PlayerConsumerConstructor } from './types';
export interface ContainerMixinConfig {
playerContext: PlayerContext;
- containerAttachContext: ContainerAttachContext;
+ containerContext: ContainerContext;
}
export type ContainerMixin = (
@@ -15,9 +15,9 @@ export type ContainerMixin = (
config: ContainerMixinConfig
@@ -39,9 +39,9 @@ export function createContainerMixin(
});
new ContextConsumer(this, {
- context: config.containerAttachContext,
+ context: config.containerContext,
callback: (value) => {
- this.#setContainer = value ?? null;
+ this.#setContainer = value?.setContainer ?? null;
if (this.isConnected) this.#setContainer?.(this);
},
subscribe: true,
diff --git a/packages/html/src/store/media-attach-mixin.ts b/packages/html/src/store/media-attach-mixin.ts
index 86bb657b..eb3c9c87 100644
--- a/packages/html/src/store/media-attach-mixin.ts
+++ b/packages/html/src/store/media-attach-mixin.ts
@@ -2,20 +2,20 @@ import type { Media } from '@videojs/core/dom';
import { ContextEvent } from '@videojs/element/context';
import type { CustomElement } from '@videojs/utils/dom';
import type { AnyConstructor, Constructor } from '@videojs/utils/types';
-import { type MediaAttachContext, mediaAttachContext } from '../player/context';
+import { type MediaContext, mediaContext } from '../player/context';
export type MediaAttachMixin = >(BaseClass: Class) => Class;
/**
- * Create a mixin that consumes `mediaAttachContext` and registers the
+ * Create a mixin that consumes `mediaContext` and registers the
* element as the media with the provider.
*
* Uses the raw context-request protocol so it works with any
* `HTMLElement` subclass — no `ReactiveControllerHost` required.
*
- * @param context - The media attach context to consume.
+ * @param context - The media context to consume.
*/
-export function createMediaAttachMixin(context: MediaAttachContext): MediaAttachMixin {
+export function createMediaAttachMixin(context: MediaContext): MediaAttachMixin {
return >(BaseClass: Class) => {
class MediaAttachElement extends (BaseClass as unknown as Constructor) {
#setMedia: ((media: Media | null) => void) | null = null;
@@ -34,7 +34,7 @@ export function createMediaAttachMixin(context: MediaAttachContext): MediaAttach
this,
(value, unsubscribe) => {
if (unsubscribe) this.#unsubscribe = unsubscribe;
- this.#setMedia = value ?? null;
+ this.#setMedia = value?.setMedia ?? null;
if (this.isConnected) {
this.#setMedia?.(this.getMediaTarget());
}
@@ -57,4 +57,4 @@ export function createMediaAttachMixin(context: MediaAttachContext): MediaAttach
};
}
-export const MediaAttachMixin = createMediaAttachMixin(mediaAttachContext);
+export const MediaAttachMixin = createMediaAttachMixin(mediaContext);
diff --git a/packages/html/src/store/provider-mixin.ts b/packages/html/src/store/provider-mixin.ts
index 02c69676..bf7c629d 100644
--- a/packages/html/src/store/provider-mixin.ts
+++ b/packages/html/src/store/provider-mixin.ts
@@ -2,13 +2,13 @@ import type { Media, MediaContainer, PlayerStore, PlayerTarget } from '@videojs/
import { ContextProvider } from '@videojs/element/context';
import { isNull } from '@videojs/utils/predicate';
import type { MediaElementConstructor } from '@/ui/media-element';
-import type { ContainerAttachContext, MediaAttachContext, PlayerContext } from '../player/context';
+import type { ContainerContext, MediaContext, PlayerContext } from '../player/context';
import type { PlayerProvider, PlayerProviderConstructor } from './types';
export interface ProviderMixinConfig {
playerContext: PlayerContext;
- mediaAttachContext: MediaAttachContext;
- containerAttachContext: ContainerAttachContext;
+ mediaContext: MediaContext;
+ containerContext: ContainerContext;
factory: () => Store;
}
@@ -20,9 +20,9 @@ export type ProviderMixin = `/`