import type MarkdownIt from 'markdown-it';
import type { Ref, UnwrapNestedRefs } from 'vue';
import type { OARequest } from '../lib/codeSamples/request';
import type { OperationSlot, ParsedOperation } from '../types';
export type BodyViewType = 'schema' | 'contentType' | 'autogenerated';
export type JsonRendererType = 'vue-json-pretty' | 'shiki' | string;
export type ResponseCodeSelectorType = 'tabs' | 'select';
export type OperationColsType = 1 | 2;
export type OperationBadges = 'deprecated' | 'operationId';
export type PlaygroundJsonEditorMode = 'text' | 'tree' | 'table';
export type Languages = 'es' | 'en' | 'ja' | 'pt-BR' | 'zh' | string;
export type Messages = Record<Languages, Record<string, string>>;
export interface ThemeConfig {
    highlighterTheme?: {
        light?: any;
        dark?: any;
    };
}
export interface PathConfig {
    showBaseURL?: Ref<boolean>;
}
export interface RequestConfig {
    defaultView?: Ref<BodyViewType>;
}
export interface JsonViewerConfig {
    deep?: Ref<number>;
    renderer?: Ref<JsonRendererType>;
}
export interface SchemaViewerConfig {
    deep?: Ref<number>;
}
export interface HeadingLevels {
    h1?: number;
    h2?: number;
    h3?: number;
    h4?: number;
    h5?: number;
    h6?: number;
}
export interface ResponseConfig {
    responseCodeSelector?: Ref<ResponseCodeSelectorType>;
    maxTabs?: Ref<number>;
    body?: {
        defaultView?: Ref<BodyViewType>;
    };
}
export type PlaygroundExampleBehavior = 'placeholder' | 'value' | 'ignore';
export interface PlaygroundConfig {
    jsonEditor?: {
        mode?: Ref<PlaygroundJsonEditorMode>;
        mainMenuBar?: Ref<boolean>;
        navigationBar?: Ref<boolean>;
        statusBar?: Ref<boolean>;
    };
    examples?: {
        behavior?: Ref<PlaygroundExampleBehavior>;
        playgroundExampleBehavior?: Ref<PlaygroundExampleBehavior>;
    };
}
export interface SecurityConfig {
    defaultScheme?: Ref<string | null>;
}
export interface OperationConfig {
    badges?: Ref<OperationBadges[]>;
    slots?: Ref<OperationSlot[]>;
    /** @deprecated Use server.getServers instead */
    getServers?: GetServersFunction | null;
    hiddenSlots?: Ref<OperationSlot[]>;
    cols?: Ref<OperationColsType>;
    defaultBaseUrl?: string;
}
export interface AvailableLocale {
    code: string;
    label: string;
}
export interface I18nConfig {
    locale?: Ref<Languages>;
    fallbackLocale?: Ref<Languages>;
    messages?: Messages;
    availableLocales?: AvailableLocale[];
}
export interface SpecConfig {
    groupByTags?: Ref<boolean>;
    collapsePaths?: Ref<boolean>;
    showPathsSummary?: Ref<boolean>;
    avoidCirculars?: Ref<boolean>;
    lazyRendering?: Ref<boolean>;
    defaultTag?: string;
    defaultTagDescription?: string;
    wrapExamples?: boolean;
    disableDownload?: Ref<boolean>;
}
export interface ServerConfig {
    allowCustomServer?: boolean;
    getServers?: GetServersFunction | null;
}
export interface StorageConfig {
    prefix?: string;
    persistAuth?: boolean;
}
export interface OperationLinkConfig {
    linkPrefix?: string;
    transformHref?: (href: string) => string;
}
export interface MarkdownConfig {
    operationLink?: OperationLinkConfig | false;
    externalLinksNewTab?: boolean;
    config?: (md: MarkdownIt) => MarkdownIt | undefined;
}
export interface UseThemeConfig {
    theme?: Partial<ThemeConfig>;
    path?: Partial<PathConfig>;
    requestBody?: Partial<RequestConfig>;
    jsonViewer?: Partial<JsonViewerConfig>;
    schemaViewer?: Partial<SchemaViewerConfig>;
    headingLevels?: Partial<HeadingLevels>;
    response?: Partial<ResponseConfig>;
    playground?: Partial<PlaygroundConfig>;
    security?: Partial<SecurityConfig>;
    operation?: Partial<OperationConfig>;
    i18n?: Partial<I18nConfig>;
    spec?: Partial<SpecConfig>;
    codeSamples?: Partial<CodeSamplesConfig>;
    linksPrefixes?: Partial<LinksPrefixesConfig>;
    server?: Partial<ServerConfig>;
    storage?: Partial<StorageConfig>;
    markdown?: Partial<MarkdownConfig>;
}
export interface CodeSamplesConfig {
    defaultLang: string;
    availableLanguages: LanguageConfig[];
    generator: GeneratorFunction;
    defaultHeaders: Record<string, string>;
}
export interface LinksPrefixesConfig {
    tags: string;
    operations: string;
}
export interface LanguageConfig {
    /** Unique identifier and Shiki highlighter language (e.g., 'curl', 'javascript', 'php') */
    lang: string;
    /** Display name shown in the UI */
    label: string;
    /** Target language for @scalar/snippetz code generation (e.g., 'js', 'shell', 'python') */
    target?: string;
    /** HTTP client for the target language (e.g., 'fetch', 'axios', 'curl') */
    client?: string;
    /** Icon identifier for vitepress-plugin-group-icons */
    icon?: string;
    /** Shiki language for syntax highlighting (defaults to 'plain') */
    highlighter?: string;
}
export type PartialUseThemeConfig = Partial<UnwrapNestedRefs<UseThemeConfig>>;
type GeneratorFunction = (langConfig: LanguageConfig, request: OARequest) => Promise<string>;
type GetServersFunction = ({ method, path, operation }: {
    method: string;
    path: string;
    operation: ParsedOperation;
}) => string[] | null;
export declare const DEFAULT_OPERATION_SLOTS: OperationSlot[];
export declare const DEFAULT_BASE_URL = "http://localhost";
export declare const DEFAULT_STORAGE_PREFIX = "--oa";
export declare const DEFAULT_STORAGE_PERSIST_AUTH = true;
export declare const availableLanguages: LanguageConfig[];
export declare function useTheme(initialConfig?: PartialUseThemeConfig): {
    isDark: import("@vueuse/core").UseDarkReturn;
    schemaConfig: Partial<RequestConfig> | undefined;
    reset: () => void;
    getState: () => {
        theme?: {
            highlighterTheme?: {
                light?: any;
                dark?: any;
            } | undefined;
        } | undefined;
        path?: {
            showBaseURL?: boolean | undefined;
        } | undefined;
        requestBody?: {
            defaultView?: BodyViewType | undefined;
        } | undefined;
        jsonViewer?: {
            deep?: number | undefined;
            renderer?: string | undefined;
        } | undefined;
        schemaViewer?: {
            deep?: number | undefined;
        } | undefined;
        headingLevels?: {
            h1?: number | undefined;
            h2?: number | undefined;
            h3?: number | undefined;
            h4?: number | undefined;
            h5?: number | undefined;
            h6?: number | undefined;
        } | undefined;
        response?: {
            responseCodeSelector?: ResponseCodeSelectorType | undefined;
            maxTabs?: number | undefined;
            body?: {
                defaultView?: BodyViewType | undefined;
            } | undefined;
        } | undefined;
        playground?: {
            jsonEditor?: {
                mode?: PlaygroundJsonEditorMode | undefined;
                mainMenuBar?: boolean | undefined;
                navigationBar?: boolean | undefined;
                statusBar?: boolean | undefined;
            } | undefined;
            examples?: {
                behavior?: PlaygroundExampleBehavior | undefined;
                playgroundExampleBehavior?: PlaygroundExampleBehavior | undefined;
            } | undefined;
        } | undefined;
        security?: {
            defaultScheme?: string | null | undefined;
        } | undefined;
        operation?: {
            badges?: OperationBadges[] | undefined;
            slots?: OperationSlot[] | undefined;
            getServers?: {} | null | undefined;
            hiddenSlots?: OperationSlot[] | undefined;
            cols?: OperationColsType | undefined;
            defaultBaseUrl?: string | undefined;
        } | undefined;
        i18n?: {
            locale?: string | undefined;
            fallbackLocale?: string | undefined;
            messages?: {
                [x: string]: {
                    [x: string]: string;
                };
            } | undefined;
            availableLocales?: {
                code: string;
                label: string;
            }[] | undefined;
        } | undefined;
        spec?: {
            groupByTags?: boolean | undefined;
            collapsePaths?: boolean | undefined;
            showPathsSummary?: boolean | undefined;
            avoidCirculars?: boolean | undefined;
            lazyRendering?: boolean | undefined;
            defaultTag?: string | undefined;
            defaultTagDescription?: string | undefined;
            wrapExamples?: boolean | undefined;
            disableDownload?: boolean | undefined;
        } | undefined;
        codeSamples?: {
            defaultLang?: string | undefined;
            availableLanguages?: {
                lang: string;
                label: string;
                target?: string
                /** HTTP client for the target language (e.g., 'fetch', 'axios', 'curl') */
                 | undefined;
                client?: string
                /** Icon identifier for vitepress-plugin-group-icons */
                 | undefined;
                icon?: string
                /** Shiki language for syntax highlighting (defaults to 'plain') */
                 | undefined;
                highlighter?: string | undefined;
            }[] | undefined;
            generator?: {} | undefined;
            defaultHeaders?: {
                [x: string]: string;
            } | undefined;
        } | undefined;
        linksPrefixes?: {
            tags?: string | undefined;
            operations?: string | undefined;
        } | undefined;
        server?: {
            allowCustomServer?: boolean | undefined;
            getServers?: {} | null | undefined;
        } | undefined;
        storage?: {
            prefix?: string | undefined;
            persistAuth?: boolean | undefined;
        } | undefined;
        markdown?: {
            operationLink?: false | {
                linkPrefix?: string | undefined;
                transformHref?: {} | undefined;
            } | undefined;
            externalLinksNewTab?: boolean | undefined;
            config?: {} | undefined;
        } | undefined;
    };
    getLocale: () => Languages;
    setLocale: (value: Languages) => void;
    getHighlighterTheme: () => {
        light?: any;
        dark?: any;
    } | undefined;
    /** @deprecated Use `getRequestBodyDefaultView` instead. */
    getSchemaDefaultView: () => BodyViewType | undefined;
    getRequestBodyDefaultView: () => BodyViewType | undefined;
    /** @deprecated Use `setRequestBodyDefaultView` instead. */
    setSchemaDefaultView: (value: BodyViewType) => void;
    setRequestBodyDefaultView: (value: BodyViewType) => void;
    getShowBaseURL: () => boolean | undefined;
    setShowBaseURL: (value: boolean) => void;
    getJsonViewerDeep: () => number | undefined;
    setJsonViewerDeep: (value: number) => void;
    getJsonViewerRenderer: () => JsonRendererType;
    setJsonViewerRenderer: (value: JsonRendererType) => void;
    getSchemaViewerDeep: () => number | undefined;
    setSchemaViewerDeep: (value: number) => void;
    getHeadingLevels: () => Partial<HeadingLevels> | undefined;
    getHeadingLevel: (level: keyof HeadingLevels) => `h${1 | 2 | 3 | 4 | 5 | 6}`;
    setHeadingLevels: (levels: Partial<UnwrapNestedRefs<HeadingLevels>>) => void;
    getResponseCodeSelector: () => ResponseCodeSelectorType | undefined;
    setResponseCodeSelector: (value: ResponseCodeSelectorType) => void;
    getResponseCodeMaxTabs: () => number | undefined;
    setResponseCodeMaxTabs: (value: number) => void;
    getResponseBodyDefaultView: () => BodyViewType | undefined;
    setResponseBodyDefaultView: (value: BodyViewType) => void;
    getPlaygroundJsonEditorMode: () => PlaygroundJsonEditorMode | undefined;
    setPlaygroundJsonEditorMode: (value: PlaygroundJsonEditorMode) => void;
    getPlaygroundJsonEditorMainMenuBar: () => boolean | undefined;
    setPlaygroundJsonEditorMainMenuBar: (value: boolean) => void;
    getPlaygroundJsonEditorNavigationBar: () => boolean | undefined;
    setPlaygroundJsonEditorNavigationBar: (value: boolean) => void;
    getPlaygroundJsonEditorStatusBar: () => boolean | undefined;
    setPlaygroundJsonEditorStatusBar: (value: boolean) => void;
    getPlaygroundExamplesBehavior: () => PlaygroundExampleBehavior;
    setPlaygroundExamplesBehavior: (value: PlaygroundExampleBehavior) => void;
    getPlaygroundXExampleBehavior: () => PlaygroundExampleBehavior;
    setPlaygroundXExampleBehavior: (value: PlaygroundExampleBehavior) => void;
    getSecurityDefaultScheme: () => string | null | undefined;
    setSecurityDefaultScheme: (value: string | null) => void;
    getOperationBadges: () => OperationBadges[];
    setOperationBadges: (value: OperationBadges[]) => void;
    getOperationSlots: () => OperationSlot[] | undefined;
    setOperationSlots: (value: OperationSlot[]) => void;
    getOperationHiddenSlots: () => OperationSlot[] | undefined;
    setOperationHiddenSlots: (value: OperationSlot[]) => void;
    getOperationCols: () => OperationColsType | undefined;
    setOperationCols: (value: OperationColsType) => void;
    getOperationDefaultBaseUrl: () => string;
    getOperationServers: () => GetServersFunction | null;
    getI18nConfig: () => I18nConfig;
    setI18nConfig: (config: Partial<UnwrapNestedRefs<I18nConfig>>) => void;
    getSpecConfig: () => Partial<SpecConfig> | undefined;
    getWrapExamples: () => boolean | undefined;
    getSpecDisableDownload: () => boolean | undefined;
    setSpecConfig: (config: Partial<UnwrapNestedRefs<SpecConfig>>) => void;
    getCodeSamplesDefaultLang: () => string;
    getCodeSamplesAvailableLanguages: (filter?: Array<string>) => LanguageConfig[];
    getCodeSamplesGenerator: () => GeneratorFunction;
    getCodeSamplesDefaultHeaders: () => Record<string, string>;
    setCodeSamplesConfig: (config: Partial<UnwrapNestedRefs<CodeSamplesConfig>>) => void;
    getLinksPrefixesConfig: () => Partial<LinksPrefixesConfig> | undefined;
    setLinksPrefixesConfig: (config: Partial<UnwrapNestedRefs<LinksPrefixesConfig>>) => void;
    getTagsLinkPrefix: () => string | undefined;
    getOperationsLinkPrefix: () => string | undefined;
    getServerConfig: () => ServerConfig;
    setServerConfig: (config: Partial<UnwrapNestedRefs<ServerConfig>>) => void;
    getServerAllowCustomServer: () => boolean;
    getMarkdownConfig: () => MarkdownConfig;
    getExternalLinksNewTab: () => boolean;
    setMarkdownConfig: (config: Partial<UnwrapNestedRefs<MarkdownConfig>>) => void;
    getOperationLinkConfig: () => OperationLinkConfig | false | undefined;
    getStoragePrefix: () => string;
    getStoragePersistAuth: () => boolean;
    setStorageConfig: (config: Partial<StorageConfig>) => void;
};
export {};
