import { LogLevel } from '../../../../framework-types/effects/LoggerEffect';
import type { ContextHaving } from '../../../../framework-types/execution-context/Types';
import type { PlaybackConfig } from '../../../bundles/Types';
import type { EmptyObject } from '../../../Types';
import type { Constants, LoadControl } from '../../core/Constants';
import type { ArrayAtom } from '../../core/state/ArrayStateAtom';
import type { PrimitiveAtom } from '../../core/state/PrimitiveAtom';
import type { CoreStateAtoms } from '../../core/Types';
import { CoreExportNames } from '../../core/Types';
import type { CoreUtils } from '../../core/utils/Types';
import type { SelectionGroupAtom } from '../../stream-data-structure/selection-group/SelectionGroupAtom';
import type { TrackAtom } from '../../stream-data-structure/track/TrackAtom';
import type { ContextWithState } from '../../Types';
import type { PlaybackAtom } from './PlaybackAtom';
import type { PlaybackConfigAtom } from './PlaybackConfigAtom';
import type { SourceConfig, SourceConfigAtom } from './SourceConfigAtom';
import type { StartupOptionsAtom } from './StartupOptionsAtom';
import type { VideoElementAtom } from './VideoElementAtom';
export type ActiveTracksAtom = ArrayAtom<TrackAtom>;
export type ActiveSelectionGroupsAtom = ArrayAtom<SelectionGroupAtom>;
export type SourceState = {
    logLevel: PrimitiveAtom<LogLevel>;
    video: VideoElementAtom;
    container: PrimitiveAtom<HTMLElement | undefined>;
    sourceConfig: SourceConfigAtom;
    startupConfig: StartupOptionsAtom;
    playbackConfig: PlaybackConfigAtom;
    loadControl: PrimitiveAtom<LoadControl>;
    playback: PlaybackAtom;
};
export type SourceContext = ContextHaving<{
    [CoreExportNames.Utils]: CoreUtils;
    [CoreExportNames.CoreStateAtoms]: CoreStateAtoms;
    [CoreExportNames.Constants]: Constants;
}, EmptyObject, ContextWithState>;
export type SourceStateAtom = ReturnType<typeof createSourceStateAtom>;
export type CreateSourceStateAtom = typeof createSourceStateAtom;
export type SourceOptions = {
    loadControl: LoadControl;
    playback: PlaybackConfig;
};
export declare const createSourceStateAtom: (context: SourceContext, config: SourceConfig, options: SourceOptions) => import("../../core/state/Types").StateAtom<SourceState, {
    forceVideoElementUpdate: () => true;
}>;
