import { ArrayFieldVal, BaseBagelField, BglFormSchemaT, FieldByP, IconType, InputBagelField, Option, Path, SchemaChild, SelectBagelField, ShallowBglFormSchemaT, UploadInputProps } from '..';
import { DefaultPathsOptions, PathsOptions } from 'type-fest/source/paths';
interface InputOptions<T, P extends Path<T>> extends Partial<BaseBagelField<T, P>> {
    defaultValue?: string | number;
    autocomplete?: AutoFillField;
}
interface DateOptions<T, K extends Path<T>> extends InputOptions<T, K> {
    enableTime?: boolean;
    mode?: 'day' | 'month' | 'year';
    locale?: string;
    timezone?: string;
}
interface TextInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
    type?: 'text' | 'tel' | 'email' | 'time';
    pattern?: string;
    multiline?: boolean;
    autoheight?: boolean;
    code?: boolean;
    rows?: number | string;
    icon?: IconType;
    iconStart?: IconType;
}
interface SlctInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
    searchable?: boolean;
    multiselect?: boolean;
    clearable?: boolean;
    onSearch?: (search: string) => any;
}
interface NumFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
    max?: number;
    min?: number;
    step?: number;
    layout?: 'default' | 'vertical' | 'horizontal';
    padZero?: number;
    center?: boolean;
    useGrouping?: boolean;
}
type RichTextOptions<T, P extends Path<T>> = InputOptions<T, P>;
export declare function getBaseField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, labelOrRest?: string | Partial<BaseBagelField<T, P>>, rest?: Partial<BaseBagelField<T, P>>): BaseBagelField<T, P, PO>;
export declare function richText<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: RichTextOptions<T, P>): BaseBagelField<T, P, PO>;
export declare function txtField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: TextInputOptions<T, P>): InputBagelField<T, P, PO>;
export declare function selectField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: Option[] | (() => Option[]), config?: SlctInputOptions<T, P>): SelectBagelField<T, P, PO>;
export declare const slctField: typeof selectField;
interface CheckInputOptions<T, K extends Path<T>> extends InputOptions<T, K> {
    value?: string;
}
export declare function checkField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: CheckInputOptions<T, P>): BaseBagelField<T, P, PO>;
interface EmailInputOptions<T, P extends Path<T>> extends InputOptions<T, P> {
    autocorrect?: boolean;
    serverValidate?: boolean;
    preventFakeEmails?: boolean;
    pattern?: string;
}
export declare function emailField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: EmailInputOptions<T, P>): BaseBagelField<T, P, PO>;
export declare function dateField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: DateOptions<T, P>): BaseBagelField<T, P, PO>;
export declare function numField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: NumFieldOptions<T, P>): BaseBagelField<T, P, PO>;
export declare function frmRow<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(...children: SchemaChild<T, P, PO>[]): FieldByP<T, P, PO>;
export interface UploadOptions<T, K extends Path<T>> extends Omit<UploadInputProps, 'id'>, InputOptions<T, K> {
}
export declare function uploadField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: UploadOptions<T, P>): BaseBagelField<T, P, PO>;
interface RangeOptions<T, K extends Path<T>> extends InputOptions<T, K> {
    min?: number;
    max?: number;
    step?: number;
    rtl?: boolean;
    multiRange?: boolean;
    formatValue?: (value: number) => string;
}
export declare function rangeField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: RangeOptions<T, P>): BaseBagelField<T, P, PO>;
export declare function bglForm<T>(idOrField?: string | FieldByP<T, Path<T>>, ...schema: FieldByP<T, Path<T>>[]): {
    $el: string;
    id: string;
    attrs: {
        schema: (string | FieldByP<T, Path<T>>)[];
    };
} | {
    $el: string;
    attrs: {
        schema: (FieldByP<T, Path<T>> | undefined)[];
    };
    id?: undefined;
};
export declare function telField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: {
    [key: string]: any;
}): BaseBagelField<T, P, PO>;
export declare function colorField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id?: P, label?: string, options?: {
    [key: string]: any;
}): BaseBagelField<T, P, PO>;
export declare function findBglFieldById<T>(id: string, _schema: ShallowBglFormSchemaT<T>): FieldByP<T, Path<T>> | undefined;
export interface ArrayFieldOptions<T, K extends Path<T>> extends InputOptions<T, K> {
    delete?: boolean;
    add?: boolean;
}
export type ArrayType = 'number' | 'text';
export declare function arrField<T, P extends Path<T, PO>, PO extends PathsOptions = DefaultPathsOptions>(id: P, label: string, schemaOrType: BglFormSchemaT<ArrayFieldVal<T, P>> | ArrayType, options?: ArrayFieldOptions<T, P>): BaseBagelField<T, P, PO>;
export declare function useForm(): {
    txtField: typeof txtField;
    selectField: typeof selectField;
    checkField: typeof checkField;
    dateField: typeof dateField;
    numField: typeof numField;
    frmRow: typeof frmRow;
    uploadField: typeof uploadField;
    rangeField: typeof rangeField;
    bglForm: typeof bglForm;
    telField: typeof telField;
    colorField: typeof colorField;
    arrField: typeof arrField;
    richText: typeof richText;
    findBglFieldById: typeof findBglFieldById;
    getBaseField: typeof getBaseField;
};
export {};
//# sourceMappingURL=BagelFormUtils.d.ts.map