import type { ExactVideoQuality, Seconds, IAppTracerOptions } from '@vkontakte/videoplayer-shared';
import type { IOptionalTuningConfig as ICoreConfig } from '@vkontakte/videoplayer-core';
import { InterfaceLanguage, ErrorCategory } from '@vkontakte/videoplayer-shared';
import type { RecursivePartial } from '@vkontakte/videoplayer-shared';
import type { IOptionalConfig as IStatisticsConfig } from '@vkontakte/videoplayer-statistics';
import type { Milliseconds } from '@vkontakte/videoplayer-shared';
type ForceOrRelay = boolean | undefined;
export declare enum LogoType {
    VK = "vk",
    VK_VIDEO = "vk_video",
    APP_STORE = "app_store",
    PLAY_MARKET = "play_market",
    VK_VIDEO_MOBILE = "vk_video_mobile"
}
/**
 * Определяет, когда показывать заголовок видео.
 * fullscreen - только в фулскрине(дефолтное поведение)
 * with-controls - показывается везде, когда контролы видны
 * never - не показывать
 * always - показыватьв всегда
 */
export type TitleShowBehaviour = 'fullscreen' | 'with-controls' | 'never' | 'always';
export interface IUIConfig {
    isMobile: ForceOrRelay;
    disableInvisibleComponentsTimeout: Milliseconds;
    debugLog: boolean | {
        tag?: string;
        colors?: string[];
    };
    devNullLog: boolean;
    isSmoothVideoRotate: boolean;
    showSupport: boolean;
    supportLink: string;
    showLogo: ForceOrRelay;
    logoLink: string;
    logoType: LogoType;
    defaultLanguage: InterfaceLanguage;
    downloadVKLanguages: boolean;
    updateBuiltinLanguages: boolean;
    ads: {
        enable: ForceOrRelay;
        loadTimeout: Milliseconds;
        initTimeout: Milliseconds;
        runtimeTimeout: Milliseconds;
        slot?: number;
        /** @deprecated, Вместо этого используйте paramsOverride: { preview } */
        preview?: number;
        paramsOverride?: Record<string, unknown>;
        isMobileGoToSiteButton: boolean;
        useAdmanFromNPM: boolean;
        volumeMultiplier: number;
        isVsidOriginal: boolean;
    };
    /**
     * Если нет ранее сохранённого значения громкости будет использовано это
     */
    volumeDefault: number;
    volumeMinRestore: number;
    loaderDelay: Milliseconds;
    allowChangingFullscreenTarget: boolean;
    minSubtitlesFontSize: number;
    autoSubtitlesTimeout: Milliseconds;
    trafficSavingLimit: ExactVideoQuality;
    highQualityLimit: ExactVideoQuality;
    episodeMinWidthPc: number;
    controls: {
        showOnStartupAtAutoplay: boolean;
        hideTimeout: Milliseconds;
        hideTimeoutMobile: Milliseconds;
        hideTimeoutInitial: Milliseconds;
        hideTimeoutFullscreen: Milliseconds;
        hideTimeoutCursor: Milliseconds;
        hideTimeoutTooltips: Milliseconds;
        collapseMobileUnmute: Milliseconds;
        hide360IconTimeout: Milliseconds;
        volumeBarTimeout: Milliseconds;
        hideHotKeyHelpers: Milliseconds;
        playbackRateMin: number;
        playbackRateMax: number;
        playbackRateStep: number;
        seekStepKeyboard: Milliseconds;
        seekStepMobile: Milliseconds;
        seekStepFrame: Milliseconds;
        volumeStepKeyboard: number;
        volumeStepWheel: number;
    };
    hideThumbTimerAfterTouch: boolean;
    preventPauseOnVideoClick: boolean;
    sentry: {
        dsn: string;
        sampleRate: number;
        whiteErrorCategoryList: ErrorCategory[];
        blackErrorCategoryList: ErrorCategory[];
        whiteErrorIdList: string[];
        blackErrorIdList: string[];
    };
    features: {
        autoplay: boolean;
        statistics: boolean;
        thinStatistics: boolean;
        sentry: boolean;
        preload: boolean;
        subtitles: boolean;
        timelinePreview: boolean;
        episodes: boolean;
        fullscreen: boolean;
        mediaSession: boolean;
        /**
         * @deprecated Использовать slotsApi.
         */
        annotations: boolean;
        /**
         * @deprecated Использовать slotsApi.
         */
        annotationsInside: boolean;
        slots: boolean;
        download: boolean;
        pip: boolean;
        dpip: boolean;
        liveRewind: boolean;
        playbackRate: boolean;
        trafficSaving: boolean;
        episodesClustering: boolean;
        copyVideoLink: boolean;
        videoRotate: boolean;
        tracer: boolean;
        apptracer: IAppTracerOptions;
        interactiveGraph: boolean;
        interactiveResponsiveUi?: boolean;
        seekToInteractive: boolean;
        interactiveLastFrame: boolean;
        interactiveTextPermanent: boolean;
        interactiveHideTime: boolean;
        interactivePlayPrevChapter: boolean;
        interactiveTimeIndicator: boolean;
        interactiveTimeOpenUri: boolean;
        interactiveAreaControlShadow: boolean;
        interactiveControlsExpectTimeBlinkAnimation: boolean;
        interactiveControlsTapPlace: boolean;
        interactiveControlsFillAnimation: boolean;
        interactiveControlsHideAnimation: boolean;
        interactiveHistoryEndChapterFix: boolean;
        thumbTimer: boolean;
        hotKeyMapModal: boolean;
        hotKeyHelpers: boolean;
        saveDebugInfoToFile: boolean;
        saveTraceInfoToFile: boolean;
        additionalButtons: boolean;
        additionalButtonsDesktopControlPanelRight: boolean;
        additionalSettingsMenuItems: boolean;
        additionalContextMenuItems: boolean;
        contextMenuButton: boolean;
        audioLanguages: boolean;
        saveRate: boolean;
        fullscreenInternalTargetPlayerContainer: boolean;
        endScreen: boolean;
        autoplayNext: boolean;
        nextPrevButtons: boolean;
        previewNoEmptySpace: boolean;
        exposeInternalsToGlobal: boolean;
        qualityDetailsSubMenuEnabled: boolean;
        forceAutoQualityWhenSevereStallHappens: boolean;
        showSlowVideoNotification: boolean;
        maxCountShowSlowVideoNotification: number;
        timeoutShowSlowVideoNotification: number;
        forcePlayerDisplayBlock: boolean;
        /**
         * Отображать ли анимацию смены статуса проигрывания.
         */
        playbackStatusShow: boolean;
        /**
         * Отображать ли анимацию при переключении видео на следующее или предыдущее.
         */
        playbackStatusNextVideoShow: boolean;
        /**
         * Включает ранее выбранный язык субтитров при запуске видео
         */
        initSubtitles: boolean;
        /**
         * При запуске предыдущего/следующего видео из MediaSession
         * вместо переключения на видео из конфига будут вызываться соответствубщие колбэки
         */
        useCallbackForMediaSessionNextPrevClick: boolean;
        /**
         * Фикс производительности отрисовки.
         */
        usePerformanceFix: boolean;
        /**
         * Включает восстановление выбранных настроек видео,
         * например, звуковой дорожки и субтитров
         */
        userVideoPrefs: boolean;
        /**
         * сохраняет выбранные состояния плеера в localStorage только от user actions
         */
        savePreferredStatesOnUserActionOnly: boolean;
        /**
         * Если включен то за зацикливание одного видео будет отвечать флаг loop
         */
        useLoopSetting: boolean;
        doubleForwardAvailable: boolean;
        /**
         * Включает возможность точной перемотки.
        */
        useRichSeek: boolean;
        /**
         * Выключает показ thumb перед запуском видео, если включен autoplay
         */
        disableThumbUnstartedOnAutoplay: boolean;
    };
    /**
     * Отключает вызов колбэка uiInfo.onPlayerSizeChanged при ресайзе обычного pip
     */
    disablePiPResizeHandling: boolean;
    interactive: {
        historyMaxLength: number;
        noInteractionEventTimeout: number;
    };
    view: {
        timelineSliderColor: string | null;
        timelineSliderHandleColor: string | null;
        timelineSliderFilledColor: string | null;
        timelineSliderLoadedColor: string | null;
        volumeSliderColor: string | null;
        volumeSliderHandleColor: string | null;
        volumeSliderFilledColor: string | null;
        controlsTimeColor: string | null;
        timelineSliderHandleActiveLiveColor: string | null;
        timelineSliderFilledActiveLiveColor: string | null;
        buttonColor: string | null;
        buttonToggleOnColor: string | null;
        focusedColor: string | null;
        font: string | null;
        focusedOutlineWidth: string | null;
        focusedOutlineRadius: string | null;
        controlsDesktopPaddingHorizontal: string | null;
        timelinePaddingHorizontal: string | null;
        settingsBackgroundColor: string | null;
        controlsGradientHeight: string | null;
        controlsGradient: string | null;
    };
    /** уникальный идентификатор пользователя для сохранения настроек */
    userSalt: string;
    /**
     * Время, которое нужно зажимать горячую клавишу, чтобы включилось х2 ускорение.
     */
    doubleForwardActivationTime: number;
    playbackStatusAnimationDuration: number;
    /**
     * Продолжительность анимации для переключения видео.
     */
    playbackStatusNextVideoAnimationDuration: number;
    /**
     * Определяет подходящую длительность видео, после которой можно использовать точную перемотку.
     * Передаются секунды.
     */
    suitableDurationForUsingRichSeek: Seconds;
    titleShowBehaviour: TitleShowBehaviour;
    /**
     * Отключаем слоты по идентификаторам.
     */
    disabledSlotIds: string[];
    /**
     * Отключаем внешне переданные кнопки по идентификаторам.
     */
    disabledAdditionalButtonIds: string[];
}
export declare const defaultConfig: IUIConfig;
export type IOptionalUIConfig = RecursivePartial<IUIConfig>;
export declare const fillDefault: (partial: IOptionalUIConfig) => IUIConfig;
export interface ISDKConfig {
    ui: RecursivePartial<IUIConfig>;
    core: ICoreConfig;
    statistics: IStatisticsConfig;
    meta?: string[];
}
export declare const setConfig: (config: IUIConfig) => IUIConfig;
export declare const getConfig: () => IUIConfig;
export {};
