import { ListRow } from 'alinea/core';
import { WithoutLabel } from 'alinea/core/Field';
import { Label } from 'alinea/core/Label';
import { Type } from 'alinea/core/Type';
import { LinkFieldOptions } from 'alinea/input/link/LinkField';
import { EntryPickerOptions } from 'alinea/picker/entry';
import { EntryReference, FileReference, ImageReference } from 'alinea/picker/entry/EntryReference';
import { UrlPickerOptions, UrlReference } from 'alinea/picker/url';
export declare function imagePicker<Fields>(multiple: boolean, options: Omit<EntryPickerOptions<Fields>, 'hint' | 'selection'>): import("alinea/core").Picker<ImageReference & ({ [K_1 in keyof Fields as Fields[K_1] extends import("../../core/pages").Expr<any> ? K_1 : never]: Fields[K_1] extends import("../../core/pages").Expr<infer T_1> ? T_1 : never; } extends infer T ? { [K in keyof T]: { [K_1 in keyof Fields as Fields[K_1] extends import("../../core/pages").Expr<any> ? K_1 : never]: Fields[K_1] extends import("../../core/pages").Expr<infer T_1> ? T_1 : never; }[K]; } : never), EntryPickerOptions<Fields>>;
export declare function filePicker<Fields>(multiple: boolean, options: Omit<EntryPickerOptions<Fields>, 'hint' | 'selection'>): import("alinea/core").Picker<FileReference & ({ [K_1 in keyof Fields as Fields[K_1] extends import("../../core/pages").Expr<any> ? K_1 : never]: Fields[K_1] extends import("../../core/pages").Expr<infer T_1> ? T_1 : never; } extends infer T ? { [K in keyof T]: { [K_1 in keyof Fields as Fields[K_1] extends import("../../core/pages").Expr<any> ? K_1 : never]: Fields[K_1] extends import("../../core/pages").Expr<infer T_1> ? T_1 : never; }[K]; } : never), EntryPickerOptions<Fields>>;
type LinkData<Fields> = (EntryReference & Type.Infer<Fields>) | (UrlReference & Type.Infer<Fields>) | (FileReference & Type.Infer<Fields>);
export interface LinkOptions<Fields, Row> extends LinkFieldOptions<Row> {
    fields?: Type<Fields>;
}
export declare function link<Fields>(label: Label, options?: WithoutLabel<LinkOptions<Fields, LinkData<Fields>>>): import("alinea/input/link/LinkField").LinkField<LinkData<Fields>>;
export declare namespace link {
    type Link<Fields> = (EntryReference & Type.Infer<Fields> & ListRow) | (UrlReference & Type.Infer<Fields> & ListRow);
    export function multiple<Fields>(label: Label, options?: WithoutLabel<LinkOptions<Fields, Array<Link<Fields>>>>): import("alinea/input/link/LinkField").LinksField<Link<Fields>>;
    export {};
}
export declare namespace link {
    type Link<Fields> = EntryReference & Type.Infer<Fields>;
    interface EntryOptions<Fields> extends LinkFieldOptions<Link<Fields>>, Omit<EntryPickerOptions<Fields>, 'label' | 'hint' | 'selection'> {
    }
    export function entry<Fields>(label: Label, options?: WithoutLabel<EntryOptions<Fields>>): import("alinea/input/link/LinkField").LinkField<Link<Fields>>;
    export {};
}
export declare namespace link.entry {
    type Link<Fields> = EntryReference & Type.Infer<Fields> & ListRow;
    interface EntryOptions<Fields> extends LinkFieldOptions<Array<Link<Fields>>>, Omit<EntryPickerOptions<Fields>, 'label' | 'hint' | 'selection'> {
    }
    export function multiple<Fields>(label: Label, options?: WithoutLabel<EntryOptions<Fields>>): import("alinea/input/link/LinkField").LinksField<Link<Fields>>;
    export {};
}
export declare namespace link {
    type Link<Fields> = UrlReference & Type.Infer<Fields>;
    export interface UrlOptions<Fields> extends LinkFieldOptions<Link<Fields>>, UrlPickerOptions<Fields> {
    }
    export function url<Fields>(label: Label, options?: WithoutLabel<UrlOptions<Fields>>): import("alinea/input/link/LinkField").LinkField<Link<Fields>>;
    export {};
}
export declare namespace link.url {
    type Link<Fields> = UrlReference & Type.Infer<Fields> & ListRow;
    export interface UrlOptions<Fields> extends LinkFieldOptions<Array<Link<Fields>>>, UrlPickerOptions<Fields> {
    }
    export function multiple<Fields>(label: Label, options?: WithoutLabel<UrlOptions<Fields>>): import("alinea/input/link/LinkField").LinksField<Link<Fields>>;
    export {};
}
export declare namespace link {
    type Link<Fields> = ImageReference & Type.Infer<Fields>;
    export interface ImageOptions<Fields> extends LinkFieldOptions<Link<Fields>>, Omit<EntryPickerOptions<Fields>, 'label' | 'hint' | 'selection'> {
    }
    export function image<Fields>(label: Label, options?: WithoutLabel<ImageOptions<Fields>>): import("alinea/input/link/LinkField").LinkField<Link<Fields>>;
    export {};
}
export declare namespace link.image {
    type Link<Fields> = ImageReference & Type.Infer<Fields> & ListRow;
    export interface ImagesOptions<Fields> extends LinkFieldOptions<Array<Link<Fields>>>, Omit<EntryPickerOptions<Fields>, 'label' | 'hint' | 'selection'> {
    }
    export function multiple<Fields>(label: Label, options?: WithoutLabel<ImagesOptions<Fields>>): import("alinea/input/link/LinkField").LinksField<Link<Fields>>;
    export {};
}
export declare namespace link {
    type Link<Fields> = FileReference & Type.Infer<Fields>;
    export interface FileOptions<Fields> extends LinkFieldOptions<Link<Fields>>, Omit<EntryPickerOptions<Fields>, 'label' | 'hint' | 'selection'> {
    }
    export function file<Fields>(label: Label, options?: WithoutLabel<FileOptions<Fields>>): import("alinea/input/link/LinkField").LinkField<Link<Fields>>;
    export {};
}
export declare namespace link.file {
    type Link<Fields> = FileReference & Type.Infer<Fields> & ListRow;
    export interface FilesOptions<Fields> extends LinkFieldOptions<Array<Link<Fields>>>, Omit<EntryPickerOptions<Fields>, 'label' | 'hint' | 'selection'> {
    }
    export function multiple<Fields>(label: Label, options?: WithoutLabel<FilesOptions<Fields>>): import("alinea/input/link/LinkField").LinksField<Link<Fields>>;
    export {};
}
export {};
