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 = `/`