/** * Button-state concern — all `apply*` helpers that update button icons, * aria-labels, and visual state in response to player events. * * Integration: each helper receives only the DOM refs it touches and any * scalar values it needs. No plugin instance is passed; these are pure DOM * mutations driven by event data that the plugin class hands in. */ import type { ITranslator } from '@nomercy-entertainment/nomercy-player-core'; import type { IVideoPlayer, VideoPlaylistItem } from '../../../index.js'; /** Sync the volume slider value and CSS custom property. `volume` is 0-100 (kit scale). */ export declare function applyVolume(volSlider: HTMLInputElement, applyMutedIconFn: () => void, volume: number): void; /** Toggle the muted CSS class on the volume button. */ export declare function applyMuted(volBtn: HTMLButtonElement, applyMutedIconFn: () => void, muted: boolean): void; /** Update the volume button icon and aria-label to reflect current mute + level. */ export declare function applyMutedIcon(volBtn: HTMLButtonElement, player: IVideoPlayer, translate: ITranslator['t']): void; /** * Update the speed button icon and aria-label. * Adds `is-active` when `rate` diverges from the default (1), which forces the * filled icon variant via the CSS `.btn.is-active` rule. * The aria-label appends the current rate when it is non-default so screen-reader * users know the active speed without opening the menu. */ export declare function applyRate(speedBtn: HTMLButtonElement, rate: number, translate: ITranslator['t']): void; /** * Update the quality button icon, `is-active` class, and aria-label. * `isManual` is true when the user has pinned a specific quality level (not * auto). A manual quality selection is a non-default state that should be * indicated via `is-active` — matching the pattern used by aspect, pip, and speed. * The aria-label includes the playing level when known. */ export declare function applyQualityIcon(qualityBtn: HTMLButtonElement, translate: ITranslator['t'], playingLabel?: string, isManual?: boolean): void; /** Sync the fullscreen button icon to the current fullscreen state. */ export declare function applyFullscreen(fsBtn: HTMLButtonElement): void; /** Update the theater button icon and aria-label. */ export declare function applyTheaterIcon(theaterBtn: HTMLButtonElement, active: boolean, translate: ITranslator['t']): void; /** * Toggle subtitles button between the on/off icon AND the `is-active` class * based on the active track index. An active subtitle track (index >= 0) is * non-default, so both the filled icon and `is-active` are applied together. */ export declare function applySubsIcon(subsBtn: HTMLButtonElement, activeSubtitleIdx: number | null, translate: ITranslator['t']): void; /** * Update the PiP button icon, `is-active` class, and aria-label. * PiP engaged is a non-default state, so `is-active` is added alongside the * exit-pip icon — matching the aspect-ratio and speed pattern exactly. */ export declare function applyPipIcon(pipBtn: HTMLButtonElement, active: boolean, translate: ITranslator['t']): void; /** * Update the audio button icon, `is-active` class, and aria-label. * `isNonDefault` is true when the playing track is not the manifest's default * track (index 0 / default flag). A non-default audio selection is a changed * state and should be indicated — matching the pattern used by subtitle, aspect, * pip, and speed. */ export declare function applyAudioIcon(audioBtn: HTMLButtonElement, translate: ITranslator['t'], isNonDefault?: boolean): void; /** * Update the aspect-ratio button icon and aria-label. The hover tooltip is owned by `addTooltip()`. * Adds `is-active` when the aspect diverges from the default (`'uniform'`), which forces the * filled icon variant via the CSS `.btn.is-active` rule. */ export declare function applyAspectRatioIcon(aspectRatioBtn: HTMLButtonElement, isDefault: boolean, translate: ITranslator['t']): void;