import type { UIVariantIdentifier } from './UIManager'; import type { AdControlBarConfig } from './components/ads/AdControlBar'; import type { AdCounterLabelConfig } from './components/ads/AdCounterLabel'; import type { AdSkipButtonConfig } from './components/ads/AdSkipButton'; import type { ButtonConfig } from './components/buttons/Button'; import type { CloseButtonConfig } from './components/buttons/CloseButton'; import type { PlaybackToggleButtonConfig } from './components/buttons/PlaybackToggleButton'; import type { QuickSeekButtonConfig } from './components/buttons/QuickSeekButton'; import type { ToggleButtonConfig } from './components/buttons/ToggleButton'; import type { VolumeControlButtonConfig } from './components/buttons/VolumeControlButton'; import type { ComponentConfig } from './components/Component'; import type { ContainerConfig } from './components/Container'; import type { ContextMenuConfig } from './components/contextmenu/ContextMenu'; import type { InteractiveContextMenuItemConfig } from './components/contextmenu/InteractiveContextMenuItem'; import type { PlayerContextMenuConfig } from './components/contextmenu/PlayerContextMenu'; import type { ControlBarConfig } from './components/ControlBar'; import type { LabelConfig } from './components/labels/Label'; import type { MetadataLabelConfig } from './components/labels/MetadataLabel'; import type { PlaybackTimeLabelConfig } from './components/labels/PlaybackTimeLabel'; import type { AudioTrackListBoxConfig } from './components/lists/AudioTrackListBox'; import type { ListBoxConfig } from './components/lists/ListBox'; import type { ListSelectorConfig } from './components/lists/ListSelector'; import type { SubtitleListBoxConfig } from './components/lists/SubtitleListBox'; import type { BufferingOverlayConfig } from './components/overlays/BufferingOverlay'; import type { ClickOverlayConfig } from './components/overlays/ClickOverlay'; import type { DismissClickOverlayConfig } from './components/overlays/DismissClickOverlay'; import type { ErrorMessageOverlayConfig } from './components/overlays/ErrorMessageOverlay'; import type { PlaybackToggleOverlayConfig } from './components/overlays/PlaybackToggleOverlay'; import type { SubtitleOverlayConfig } from './components/overlays/SubtitleOverlay'; import type { TouchControlOverlayConfig } from './components/overlays/TouchControlOverlay'; import type { PlayerInsightsPanelConfig } from './components/panels/player-insights/PlayerInsightsPanel'; import type { RecommendationItemConfig } from './components/RecommendationItem'; import type { SeekBarConfig } from './components/seekbar/SeekBar'; import type { SeekBarLabelConfig } from './components/seekbar/SeekBarLabel'; import type { VolumeSliderConfig } from './components/seekbar/VolumeSlider'; import type { DynamicSettingsPanelItemConfig } from './components/settings/DynamicSettingsPanelItem'; import type { SettingsPanelConfig } from './components/settings/SettingsPanel'; import type { SettingsPanelItemConfig } from './components/settings/SettingsPanelItem'; import type { SettingsPanelPageConfig } from './components/settings/SettingsPanelPage'; import type { SettingsPanelPageNavigatorConfig } from './components/settings/SettingsPanelPageNavigatorButton'; import type { SettingsPanelSelectOptionConfig } from './components/settings/SettingsPanelSelectOption'; import type { SettingsPanelSeparatorConfig } from './components/settings/SettingsPanelSeparator'; import type { SettingsToggleButtonConfig } from './components/settings/SettingsToggleButton'; import type { SubtitleSettingSelectBoxConfig } from './components/settings/subtitlesettings/SubtitleSettingSelectBox'; import type { SubtitleSettingsPanelPageConfig } from './components/settings/subtitlesettings/SubtitleSettingsPanelPage'; import type { TitleBarConfig } from './components/TitleBar'; import type { UIContainerConfig } from './components/UIContainer'; import type { WatermarkConfig } from './components/Watermark'; import type { ToggleSettingsPanelItem } from './components/settings/ToggleSettingsPanelItem'; /** * Component config overrides keyed by public component class name, optionally scoped by UI variant. * * Use UI variant keys to scope overrides to one layout. Use component class names to configure all instances of a * component. Base component keys also apply to subclasses, and more specific component keys override base component * config. * * Config precedence, from lowest to highest: * 1. Component superclass config * 2. Component default config * 3. Constructor config from the {@link UIFactory} * 4. Top-level base component config, e.g. `ToggleButton` * 5. Top-level specific component config, e.g. `FullscreenToggleButton` * 6. Variant-specific base component config, e.g. `main.ToggleButton` * 7. Variant-specific component config, e.g. `main.FullscreenToggleButton` * * @example * ```ts * const componentConfigOverrides: UIComponentConfigOverrides = { * // Scoped by UI variants * main: { * // Any component class name can be used here. * FullscreenToggleButton: { * // Component specific config * }, * }, * smallScreen: { * // Variant-specific config overrides top-level component config. * SeekBar: { * // Component specific config * }, * }, * * // Any component class name can also be configured globally. * ToggleButton: { * // Component specific config * }, * SeekBar: { * // Component specific config * }, * }; * ``` * * @category Configs */ export interface UIComponentConfigOverrides extends UIComponentConfigMap { /** * Component config overrides for the empty UI variant. * * @category UI variants */ [UIVariantIdentifier.empty]?: UIComponentConfigMap; /** * Component config overrides for the ads UI variant. * * @category UI variants */ [UIVariantIdentifier.ads]?: UIComponentConfigMap; /** * Component config overrides for the small-screen UI variant. * * @category UI variants */ [UIVariantIdentifier.smallScreen]?: UIComponentConfigMap; /** * Component config overrides for the small-screen ads UI variant. * * @category UI variants */ [UIVariantIdentifier.smallScreenAds]?: UIComponentConfigMap; /** * Component config overrides for the TV UI variant. * * @category UI variants */ [UIVariantIdentifier.tv]?: UIComponentConfigMap; /** * Component config overrides for the TV ads UI variant. * * @category UI variants */ [UIVariantIdentifier.tvAds]?: UIComponentConfigMap; /** * Component config overrides for the main UI variant. * * @category UI variants */ [UIVariantIdentifier.main]?: UIComponentConfigMap; /** * Component config overrides for the subtitle UI variant. * * @category UI variants */ [UIVariantIdentifier.subtitle]?: UIComponentConfigMap; /** * Component config overrides for the castReceiver UI variant. * * @category UI variants */ [UIVariantIdentifier.castReceiver]?: UIComponentConfigMap; } /** * Component config overrides keyed by public component class name. * * Each property matches a public component class name. The value type is the component-specific constructor config. * * @category Configs */ export interface UIComponentConfigMap { /** * @category Components */ AdClickOverlay?: Partial; /** * @category Components */ AdControlBar?: Partial; /** * @category Components */ AdCounterLabel?: Partial; /** * @category Components */ AdMessageLabel?: Partial; /** * @category Components */ AdSkipButton?: Partial; /** * @category Components */ AdStatusOverlay?: Partial; /** * @category Components */ AirPlayToggleButton?: Partial; /** * @category Components */ AudioQualitySelectBox?: Partial; /** * @category Components */ AudioTrackListBox?: Partial; /** * @category Components */ AudioTrackSelectBox?: Partial; /** * @category Components */ BackgroundColorSelectBox?: Partial; /** * @category Components */ BackgroundOpacitySelectBox?: Partial; /** * @category Components */ BufferingOverlay?: Partial; /** * @category Components */ Button?: Partial; /** * @category Components */ CastStatusOverlay?: Partial; /** * @category Components */ CastToggleButton?: Partial; /** * @category Components */ CastUIContainer?: Partial; /** * @category Components */ CharacterEdgeColorSelectBox?: Partial; /** * @category Components */ CharacterEdgeSelectBox?: Partial; /** * @category Components */ ClickOverlay?: Partial; /** * @category Components */ CloseButton?: Partial; /** * @category Components */ Component?: Partial; /** * @category Components */ Container?: Partial; /** * @category Components */ ContextMenu?: Partial; /** * @category Components */ ControlBar?: Partial; /** * @category Components */ DismissClickOverlay?: Partial; /** * @category Components */ DynamicSettingsPanelItem?: Partial; /** * @category Components */ EcoModeContainer?: Partial; /** * @category Components */ EcoModeToggleButton?: Partial; /** * @category Components */ ErrorMessageOverlay?: Partial; /** * @category Components */ FontColorSelectBox?: Partial; /** * @category Components */ FontFamilySelectBox?: Partial; /** * @category Components */ FontOpacitySelectBox?: Partial; /** * @category Components */ FontSizeSelectBox?: Partial; /** * @category Components */ FontStyleSelectBox?: Partial; /** * @category Components */ FullscreenToggleButton?: Partial; /** * @category Components */ HugePlaybackToggleButton?: Partial; /** * @category Components */ HugeReplayButton?: Partial; /** * @category Components */ Icon?: Partial; /** * @category Components */ InteractiveContextMenuItem?: Partial; /** * @category Components */ InteractiveSettingsPanelItem?: Partial; /** * @category Components */ ItemSelectionList?: Partial; /** * @category Components */ Label?: Partial; /** * @category Components */ ListBox?: Partial; /** * @category Components */ ListSelector?: Partial; /** * @category Components */ MetadataLabel?: Partial; /** * @category Components */ PictureInPictureToggleButton?: Partial; /** * @category Components */ PersistentPreferencesToggleButton?: Partial; /** * @category Components */ PlayerContextMenu?: Partial; /** * @category Components */ PlaybackSpeedSelectBox?: Partial; /** * @category Components */ PlaybackTimeLabel?: Partial; /** * @category Components */ PlaybackToggleButton?: Partial; /** * @category Components */ PlaybackToggleOverlay?: Partial; /** * @category Components */ PlayerInsightsPanel?: Partial; /** * @category Components */ QuickSeekButton?: Partial; /** * @category Components */ RecommendationItem?: Partial; /** * @category Components */ RecommendationOverlay?: Partial; /** * @category Components */ ReplayButton?: Partial; /** * @category Components */ SeekBar?: Partial; /** * @category Components */ SeekBarLabel?: Partial; /** * @category Components */ SelectBox?: Partial; /** * @category Components */ SettingsPanel?: Partial; /** * @category Components */ SettingsPanelItem?: Partial; /** * @category Components */ SettingsPanelPage?: Partial; /** * @category Components */ SettingsPanelPageBackButton?: Partial; /** * @category Components */ SettingsPanelPageNavigatorButton?: Partial; /** * @category Components */ SettingsPanelPageOpenButton?: Partial; /** * @category Components */ SettingsPanelSelectOption?: Partial; /** * @category Components */ SettingsPanelSeparator?: Partial; /** * @category Components */ SettingsToggleButton?: Partial; /** * @category Components */ SmallCenteredPlaybackToggleButton?: Partial; /** * @category Components */ Spacer?: Partial; /** * @category Components */ SubtitleListBox?: Partial; /** * @category Components */ SubtitleOverlay?: Partial; /** * @category Components */ SubtitleSelectBox?: Partial; /** * @category Components */ SubtitleSettingSelectBox?: Partial; /** * @category Components */ SubtitleSettingsPanelPage?: Partial; /** * @category Components */ SubtitleSettingsResetButton?: Partial; /** * @category Components */ TitleBar?: Partial; /** * @category Components */ ToggleButton?: Partial; /** * @category Components */ ToggleSettingsPanelItem?: Partial; /** * @category Components */ TouchControlOverlay?: Partial; /** * @category Components */ TvNoiseCanvas?: Partial; /** * @category Components */ UIContainer?: Partial; /** * @category Components */ VideoQualitySelectBox?: Partial; /** * @category Components */ VolumeControlButton?: Partial; /** * @category Components */ VolumeSlider?: Partial; /** * @category Components */ VolumeToggleButton?: Partial; /** * @category Components */ VRToggleButton?: Partial; /** * @category Components */ Watermark?: Partial; /** * @category Components */ WindowColorSelectBox?: Partial; /** * @category Components */ WindowOpacitySelectBox?: Partial; }