import type { WithoutLabel } from 'alinea/core/Field';
import type { Label } from 'alinea/core/Label';
import type { Type } from 'alinea/core/Type';
import type { ListRow } from 'alinea/core/shape/ListShape';
import { type FileLink } from 'alinea/field/link/FileLink';
import { type LinkField, type LinkFieldOptions, type LinksField } from 'alinea/field/link/LinkField';
import { type EntryPickerConditions } from 'alinea/picker/entry';
import type { EntryReference } from 'alinea/picker/entry/EntryReference';
import { type UrlReference } from 'alinea/picker/url';
import { EntryLink } from './EntryLink.js';
import type { UrlLink } from './UrlLink.js';
export type Link<InferredFields> = EntryLink<InferredFields> | UrlLink<InferredFields> | FileLink<InferredFields>;
export interface LinkOptions<Definition, Row> extends LinkFieldOptions<Row>, EntryPickerConditions {
    fields?: Definition | Type<Definition>;
}
export type LinkRow = (EntryReference | UrlReference) & ListRow;
export declare function link<Fields>(label: Label, options?: WithoutLabel<LinkOptions<Fields, LinkRow>>): LinkField<LinkRow, Link<Type.Infer<Fields>>>;
export declare namespace link {
    function multiple<Fields>(label: Label, options?: WithoutLabel<LinkOptions<Fields, Array<LinkRow>>>): LinksField<LinkRow, Link<Type.Infer<Fields>>>;
}
