import z from "zod";
export declare const MEDIA_TYPE_DISCRIMINANTS: readonly ["image", "video", "audio", "document", "spreadsheet", "archive"];
export type MediaTypeDiscriminant = typeof MEDIA_TYPE_DISCRIMINANTS[number];
export declare const PUBLIC_DOWNLOAD_MEDIA_TYPES: readonly ["document", "spreadsheet", "archive", "audio", "video"];
export type PublicDownloadMediaType = typeof PUBLIC_DOWNLOAD_MEDIA_TYPES[number];
export declare function isMediaTypeDiscriminant(value: unknown): value is MediaTypeDiscriminant;
export declare function mediaTypeDiscriminantFromMimeType(mimeType: string): MediaTypeDiscriminant | null;
export declare const mediaSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
    purpose: z.ZodOptional<z.ZodString>;
    placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
    assetId: z.ZodOptional<z.ZodString>;
    identifier: z.ZodOptional<z.ZodString>;
    src: z.ZodOptional<z.ZodString>;
    alt: z.ZodOptional<z.ZodString>;
    filename: z.ZodOptional<z.ZodString>;
    mimeType: z.ZodOptional<z.ZodString>;
    width: z.ZodOptional<z.ZodNumber>;
    height: z.ZodOptional<z.ZodNumber>;
    storageBucket: z.ZodOptional<z.ZodString>;
    storagePath: z.ZodOptional<z.ZodString>;
    transform: z.ZodOptional<z.ZodObject<{
        aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
            aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
            rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
            hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
                radius: z.ZodOptional<z.ZodNumber>;
            }, z.core.$strip>>>;
            rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
        }, z.core.$strip>>>>>;
        rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
        hotspot: z.ZodOptional<z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
            radius: z.ZodOptional<z.ZodNumber>;
        }, z.core.$strip>>;
        rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
    }, z.core.$strip>>;
    type: z.ZodLiteral<"image">;
}, z.core.$strip>, z.ZodObject<{
    purpose: z.ZodOptional<z.ZodString>;
    placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
    assetId: z.ZodOptional<z.ZodString>;
    identifier: z.ZodOptional<z.ZodString>;
    src: z.ZodOptional<z.ZodString>;
    alt: z.ZodOptional<z.ZodString>;
    filename: z.ZodOptional<z.ZodString>;
    mimeType: z.ZodOptional<z.ZodString>;
    width: z.ZodOptional<z.ZodNumber>;
    height: z.ZodOptional<z.ZodNumber>;
    storageBucket: z.ZodOptional<z.ZodString>;
    storagePath: z.ZodOptional<z.ZodString>;
    transform: z.ZodOptional<z.ZodObject<{
        aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
            aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
            rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
            hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
                radius: z.ZodOptional<z.ZodNumber>;
            }, z.core.$strip>>>;
            rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
        }, z.core.$strip>>>>>;
        rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
        hotspot: z.ZodOptional<z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
            radius: z.ZodOptional<z.ZodNumber>;
        }, z.core.$strip>>;
        rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
    }, z.core.$strip>>;
    type: z.ZodLiteral<"video">;
}, z.core.$strip>, z.ZodObject<{
    purpose: z.ZodOptional<z.ZodString>;
    placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
    assetId: z.ZodOptional<z.ZodString>;
    identifier: z.ZodOptional<z.ZodString>;
    src: z.ZodOptional<z.ZodString>;
    alt: z.ZodOptional<z.ZodString>;
    filename: z.ZodOptional<z.ZodString>;
    mimeType: z.ZodOptional<z.ZodString>;
    width: z.ZodOptional<z.ZodNumber>;
    height: z.ZodOptional<z.ZodNumber>;
    storageBucket: z.ZodOptional<z.ZodString>;
    storagePath: z.ZodOptional<z.ZodString>;
    transform: z.ZodOptional<z.ZodObject<{
        aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
            aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
            rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
            hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
                radius: z.ZodOptional<z.ZodNumber>;
            }, z.core.$strip>>>;
            rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
        }, z.core.$strip>>>>>;
        rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
        hotspot: z.ZodOptional<z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
            radius: z.ZodOptional<z.ZodNumber>;
        }, z.core.$strip>>;
        rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
    }, z.core.$strip>>;
    type: z.ZodLiteral<"audio">;
}, z.core.$strip>, z.ZodObject<{
    purpose: z.ZodOptional<z.ZodString>;
    placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
    assetId: z.ZodOptional<z.ZodString>;
    identifier: z.ZodOptional<z.ZodString>;
    src: z.ZodOptional<z.ZodString>;
    alt: z.ZodOptional<z.ZodString>;
    filename: z.ZodOptional<z.ZodString>;
    mimeType: z.ZodOptional<z.ZodString>;
    width: z.ZodOptional<z.ZodNumber>;
    height: z.ZodOptional<z.ZodNumber>;
    storageBucket: z.ZodOptional<z.ZodString>;
    storagePath: z.ZodOptional<z.ZodString>;
    transform: z.ZodOptional<z.ZodObject<{
        aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
            aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
            rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
            hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
                radius: z.ZodOptional<z.ZodNumber>;
            }, z.core.$strip>>>;
            rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
        }, z.core.$strip>>>>>;
        rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
        hotspot: z.ZodOptional<z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
            radius: z.ZodOptional<z.ZodNumber>;
        }, z.core.$strip>>;
        rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
    }, z.core.$strip>>;
    type: z.ZodLiteral<"document">;
}, z.core.$strip>, z.ZodObject<{
    purpose: z.ZodOptional<z.ZodString>;
    placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
    assetId: z.ZodOptional<z.ZodString>;
    identifier: z.ZodOptional<z.ZodString>;
    src: z.ZodOptional<z.ZodString>;
    alt: z.ZodOptional<z.ZodString>;
    filename: z.ZodOptional<z.ZodString>;
    mimeType: z.ZodOptional<z.ZodString>;
    width: z.ZodOptional<z.ZodNumber>;
    height: z.ZodOptional<z.ZodNumber>;
    storageBucket: z.ZodOptional<z.ZodString>;
    storagePath: z.ZodOptional<z.ZodString>;
    transform: z.ZodOptional<z.ZodObject<{
        aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
            aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
            rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
            hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
                radius: z.ZodOptional<z.ZodNumber>;
            }, z.core.$strip>>>;
            rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
        }, z.core.$strip>>>>>;
        rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
        hotspot: z.ZodOptional<z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
            radius: z.ZodOptional<z.ZodNumber>;
        }, z.core.$strip>>;
        rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
    }, z.core.$strip>>;
    type: z.ZodLiteral<"spreadsheet">;
}, z.core.$strip>, z.ZodObject<{
    purpose: z.ZodOptional<z.ZodString>;
    placeholder: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
    assetId: z.ZodOptional<z.ZodString>;
    identifier: z.ZodOptional<z.ZodString>;
    src: z.ZodOptional<z.ZodString>;
    alt: z.ZodOptional<z.ZodString>;
    filename: z.ZodOptional<z.ZodString>;
    mimeType: z.ZodOptional<z.ZodString>;
    width: z.ZodOptional<z.ZodNumber>;
    height: z.ZodOptional<z.ZodNumber>;
    storageBucket: z.ZodOptional<z.ZodString>;
    storagePath: z.ZodOptional<z.ZodString>;
    transform: z.ZodOptional<z.ZodObject<{
        aspectCrops: z.ZodOptional<z.ZodPipe<z.ZodTransform<object | undefined, unknown>, z.ZodRecord<z.ZodString, z.ZodCatch<z.ZodObject<{
            aspect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodString>>;
            rect: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>>;
            hotspot: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodObject<{
                x: z.ZodNumber;
                y: z.ZodNumber;
                radius: z.ZodOptional<z.ZodNumber>;
            }, z.core.$strip>>>;
            rotation: z.ZodPipe<z.ZodTransform<{} | undefined, unknown>, z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>>;
        }, z.core.$strip>>>>>;
        rect: z.ZodOptional<z.ZodTuple<[z.ZodNumber, z.ZodNumber, z.ZodNumber, z.ZodNumber], null>>;
        hotspot: z.ZodOptional<z.ZodObject<{
            x: z.ZodNumber;
            y: z.ZodNumber;
            radius: z.ZodOptional<z.ZodNumber>;
        }, z.core.$strip>>;
        rotation: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<90>, z.ZodLiteral<180>, z.ZodLiteral<270>]>>;
    }, z.core.$strip>>;
    type: z.ZodLiteral<"archive">;
}, z.core.$strip>], "type">;
export type Media = z.infer<typeof mediaSchema>;
export type MediaOfType<TType extends MediaTypeDiscriminant> = Extract<Media, {
    type: TType;
}>;
export type ImageMedia = MediaOfType<"image">;
export type VideoMedia = MediaOfType<"video">;
export type AudioMedia = MediaOfType<"audio">;
export type DocumentMedia = MediaOfType<"document">;
export type SpreadsheetMedia = MediaOfType<"spreadsheet">;
export type ArchiveMedia = MediaOfType<"archive">;
export type PublicDownloadMedia = MediaOfType<PublicDownloadMediaType>;
