import Vue, { VNodeData, VNodeChildren, VNode, PropType } from "vue";
import * as tsx from "vue-tsx-support";
import type { IComponentValidationEnabled, IValidator } from "./validation/IComponentValidationEnabled";
import { ConfirmDialogResponse, ConfirmDialogOptions } from "./confirmdialog/IVueConfirmDialog";
import { ITheming } from "./theming";
import * as models from "../models";
import { RecordPropsDefinition } from "vue/types/options";
import { PropsForOutside, RequiredPropNames, _TsxComponentV3 } from "vue-tsx-support";
import { CompositionComponentOptions } from "vue-tsx-support/lib/vca";
type VuetifyThemeItem = string | number | {
    base: string | number;
    lighten5: string | number;
    lighten4: string | number;
    lighten3: string | number;
    lighten2: string | number;
    lighten1: string | number;
    darken1: string | number;
    darken2: string | number;
    darken3: string | number;
    darken4: string | number;
};
interface VuetifyTheme {
    [name: string]: VuetifyThemeItem;
    primary: VuetifyThemeItem;
    accent: VuetifyThemeItem;
    secondary: VuetifyThemeItem;
    info: VuetifyThemeItem;
    warning: VuetifyThemeItem;
    error: VuetifyThemeItem;
    success: VuetifyThemeItem;
}
type InheritanceTheme = {
    id: string;
};
export interface VSlot {
    [name: string]: (ref?: any) => Array<JSX.Element>;
}
export interface IVueComponentBase<Props = VueComponentBaseProps, EventsWithOn = VueComponentBaseEvents, ScopedSlotArgs = {}> extends tsx.Component<Props, EventsWithOn, ScopedSlotArgs> {
    theming: ITheming;
    breakpoint: models.Breakpoint;
    theme: VuetifyTheme;
    $confirm: {
        open: (options?: ConfirmDialogOptions) => Promise<ConfirmDialogResponse>;
    };
    createElementByManifestId(componentManifestId: models.GuidValue, elementName?: string, data?: VNodeData, children?: VNodeChildren, onComponentCreated?: (instance: any) => void): VNode;
}
export interface VueComponentBaseProps {
    themeTargetId?: string | models.GuidValue;
    themeDefinitionId?: string | models.GuidValue;
    themeDefinition?: object;
    onComponentCreated?: (instance: any) => void;
    color?: string;
    useValidator?: IValidator;
    key?: string;
}
export interface VueComponentBaseEvents {
}
export declare function defineProps<T>(props: RecordPropsDefinition<T>): RecordPropsDefinition<T>;
export declare function definePropFunctionType<T>(): PropType<T>;
export declare function definePropObjectType<T>(): PropType<T>;
export declare class VueComponentBase<Props = VueComponentBaseProps, EventsWithOn = VueComponentBaseEvents, ScopedSlotArgs = {}> extends tsx.Component<Props, EventsWithOn, ScopedSlotArgs> implements IVueComponentBase<Props, EventsWithOn, ScopedSlotArgs>, IComponentValidationEnabled {
    inheritanceTheme?: InheritanceTheme;
    themeTargetId?: string;
    themeDefinitionId?: string;
    themeDefinition?: models.ThemeDefinition;
    onComponentCreated?: (instance: any) => void;
    useValidator: IValidator;
    private omniaCurrentTheming;
    private validations;
    constructor();
    get theming(): ITheming;
    get breakpoint(): models.Breakpoint;
    get theme(): VuetifyTheme;
    $confirm: {
        open: (options?: ConfirmDialogOptions) => Promise<ConfirmDialogResponse>;
    };
    resetInheritanceTheming(): void;
    setThemeDefinition(themingDefinition: models.ThemeDefinition): void;
    mounted(): void;
    transformVSlot(slot: VSlot): {
        scopedSlots: any;
    };
    getValidationField(childs: Vue[]): void;
    addValidation(validation: any): void;
    clearValidation(): void;
    validate(): boolean;
    /**
    * Create Vnode from manifets id.
    * @param elementName that use to fallback in the case old data migration have not valid componentManifestId
    */
    createElementByManifestId(componentManifestId: models.GuidValue, elementName?: string, data?: VNodeData, children?: VNodeChildren, onComponentCreated?: (instance: any) => void): VNode;
    getElementNameByManifestId(manifestId: models.GuidValue): string;
}
export declare function getVuetifyAppClasses(): string;
export interface VueComponentConnectProps {
    content: () => JSX.Element;
}
export declare function defineVueComponent<Props, PropsDef extends RecordPropsDefinition<Props> = RecordPropsDefinition<Props>, PrefixedEvents = any, ScopedSlots = any, On = any, RequiredProps extends keyof Props = RequiredPropNames<PropsDef> & keyof Props>(options: CompositionComponentOptions<Props, PropsDef, PrefixedEvents, ScopedSlots, On>): _TsxComponentV3<Vue, {}, PropsForOutside<Props, RequiredProps>, PrefixedEvents, On, ScopedSlots>;
export declare const VueComponentConnect: tsx._TsxComponentV3<Vue, {}, tsx.PropsForOutside<{
    content: () => JSX.Element;
}, "content">, any, any, any>;
export {};
