import type { EmptyObject } from '../../../../framework-types/BaseTypes';
import type { ContextHaving } from '../../../../framework-types/execution-context/Types';
import type { PrimitiveAtom } from '../../core/state/PrimitiveAtom';
import type { StateAtom } from '../../core/state/Types';
import type { CoreStateAtoms } from '../../core/Types';
import { CoreExportNames } from '../../core/Types';
import type { Transient } from '../../core/utils/StateUtils';
import type { CoreUtils } from '../../core/utils/Types';
import type { ContextWithState } from '../../Types';
import type { MediaElementReadyState } from './Types';
type DetachedVideoElementState = {
    error: PrimitiveAtom<undefined>;
    ended: PrimitiveAtom<undefined>;
    paused: PrimitiveAtom<undefined>;
    playing: PrimitiveAtom<undefined>;
    seeking: PrimitiveAtom<undefined>;
    waiting: PrimitiveAtom<undefined>;
    muted: PrimitiveAtom<undefined>;
    volume: PrimitiveAtom<undefined>;
    playbackRate: PrimitiveAtom<undefined>;
    currentTime: PrimitiveAtom<undefined>;
    duration: PrimitiveAtom<undefined>;
    readyState: PrimitiveAtom<undefined>;
    playEventTriggered: PrimitiveAtom<undefined>;
    pauseEventTriggered: PrimitiveAtom<undefined>;
    onPlayRejected: Transient<MediaError>;
};
type AttachedVideoElementState = {
    error: PrimitiveAtom<MediaError | undefined>;
    paused: PrimitiveAtom<boolean>;
    ended: PrimitiveAtom<boolean>;
    playing: PrimitiveAtom<boolean>;
    seeking: PrimitiveAtom<boolean>;
    waiting: PrimitiveAtom<boolean>;
    muted: PrimitiveAtom<boolean>;
    volume: PrimitiveAtom<number>;
    playbackRate: PrimitiveAtom<number>;
    currentTime: PrimitiveAtom<number>;
    duration: PrimitiveAtom<number>;
    readyState: PrimitiveAtom<MediaElementReadyState>;
    playEventTriggered: PrimitiveAtom<boolean>;
    pauseEventTriggered: PrimitiveAtom<boolean>;
    onPlayRejected: Transient<MediaError>;
};
type VideoElementState = DetachedVideoElementState | AttachedVideoElementState;
type Modifiers = {
    detach: (state: VideoElementState) => boolean;
};
type DetachedVideoElementStateAtom = StateAtom<DetachedVideoElementState, Modifiers>;
type AttachedVideoElementStateAtom = StateAtom<AttachedVideoElementState, Modifiers>;
export type VideoElementStateAtom = DetachedVideoElementStateAtom | AttachedVideoElementStateAtom;
type ContextT = ContextHaving<{
    [CoreExportNames.CoreStateAtoms]: CoreStateAtoms;
    [CoreExportNames.Utils]: CoreUtils;
}, EmptyObject, ContextWithState>;
export declare function createVideoElementStateAtom(context: ContextT): VideoElementStateAtom;
export declare function isAttachedVideoElementStateAtom(state: VideoElementStateAtom): state is AttachedVideoElementStateAtom;
export {};
