/** * Transport-state mixin — time display, duration, playing state, capability * gating, and transport-button enable/disable logic. * * Owns: setPlayingState, handleCurrentChange, applyTime, applyDuration, * _formatRemaining, applyStateVisibility, setContentHidden, * refreshCapabilityVisibility, refreshTransportEnablement, setDisabled, * safeCurrentIndex, safeQueueLength. */ import type { VideoPlaylistItem } from '../../../index.js'; import type { DesktopUiInternals } from '../internals.js'; export declare const transportStateMethods: { readonly setPlayingState: (this: DesktopUiInternals, playing: boolean) => void; readonly handleCurrentChange: (this: DesktopUiInternals, item: VideoPlaylistItem | undefined | null) => void; readonly applyTime: (this: DesktopUiInternals, seconds: number) => void; readonly applyDuration: (this: DesktopUiInternals, dur: number) => void; readonly _formatRemaining: (this: DesktopUiInternals, cur: number, dur: number) => string; /** * Display-state visibility: theater is meaningless inside fullscreen or * PiP, and PiP chrome floats over another window — navigation buttons * there act on the wrong surface. Config opt-outs always win. */ readonly applyStateVisibility: (this: DesktopUiInternals) => void; /** * Mark a button as content-gated (no relevant tracks/items) so the fit * algorithm can skip it without counting its width. * Setting `data-content-hidden="true"` causes `applyAllVisibilityRules` * to treat the button as absent from the layout. */ readonly setContentHidden: (this: DesktopUiInternals, btn: HTMLButtonElement, hidden: boolean) => void; readonly refreshCapabilityVisibility: (this: DesktopUiInternals) => void; readonly refreshTransportEnablement: (this: DesktopUiInternals) => void; readonly setDisabled: (this: DesktopUiInternals, btn: HTMLButtonElement, disabled: boolean) => void; readonly safeCurrentIndex: (this: DesktopUiInternals) => number; readonly safeQueueLength: (this: DesktopUiInternals) => number; };