import { ComponentOptionsMixin } from 'vue';
import { ComponentProvideOptions } from 'vue';
import { DefineComponent } from 'vue';
import { ExtractPropTypes } from 'vue';
import { PropType } from 'vue';
import { PublicProps } from 'vue';

declare type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;

declare type __VLS_Prettify<T> = {
    [K in keyof T]: T[K];
} & {};

declare type __VLS_TypePropsToRuntimeProps<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? {
        type: PropType<__VLS_NonUndefinedable<T[K]>>;
    } : {
        type: PropType<T[K]>;
        required: true;
    };
};

declare type __VLS_WithDefaults<P, D> = {
    [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
        default: D[K];
    }> : P[K];
};

declare const _default: DefineComponent<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<ImageProps>, {
srcset: undefined;
sizes: undefined;
staticPath: undefined;
provider: undefined;
radius: string;
}>>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<ImageProps>, {
srcset: undefined;
sizes: undefined;
staticPath: undefined;
provider: undefined;
radius: string;
}>>> & Readonly<{}>, {
staticPath: string;
radius: "circle" | "none" | "rounded";
srcset: string;
sizes: string;
provider: "static" | "cloudinary";
}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
export default _default;

export declare interface ImageProps {
    /**
     * The path to the image you want to embed.
     */
    src: string;
    /**
     * Native srcset attribute.
     * One or more strings separated by commas, indicating possible image sources
     * Can only be used with provider=static, otherwise it's ignored and auto-generated with `sizes` usage
     */
    srcset?: string;
    /**
     * For specifying responsive sizes
     */
    sizes?: string;
    /**
     * Where the image is served from.
     * If not provided, the provider will inherit from the Stash config `stashOptions.images.provider` (default: `static`).
     *  - `static` for relative or absolute paths
     *  - `cloudinary` for images served via Cloudinary
     */
    provider?: StashImageProviders;
    /**
     * For applying border radius
     */
    radius?: ImageRadii;
    /**
     * A custom static path the image src will be appended onto when provider=static.
     * Can be used to override the library-level default.
     */
    staticPath?: string;
}

export declare enum ImageProviders {
    Cloudinary = "cloudinary",
    Static = "static"
}

export declare type ImageRadii = `${ImageRadius}`;

export declare enum ImageRadius {
    None = "none",
    Rounded = "rounded",
    Circle = "circle"
}

export declare interface ImageSizeCondition {
    mediaQuery: string;
    screenMinWidth: number;
    size: string;
}

export declare const Screens: {
    readonly xs: 160;
    readonly sm: 338;
    readonly md: 676;
    readonly lg: 1352;
    readonly xl: 2704;
};

declare enum StashImageProvider {
    Static = "static",
    Cloudinary = "cloudinary"
}

/**
 * Image
 */
declare type StashImageProviders = `${StashImageProvider}`;

export { }
