import { AddressTemplate } from '@wix/form-fields';
import { Checkbox } from '@wix/form-fields/headless';
import { CheckboxGroup } from '@wix/form-fields/headless';
import { DateInput } from '@wix/form-fields/headless';
import { DatePicker } from '@wix/form-fields/headless';
import { DateTimeInput } from '@wix/form-fields/headless';
import { Donation } from '@wix/form-fields/headless';
import { Dropdown } from '@wix/form-fields/headless';
import { ErrorType } from '@wix/ambassador-forms-v1-validation-result/types';
import { FileUpload } from '@wix/form-fields/headless';
import { FixedPayment } from '@wix/form-fields/headless';
import { Form } from '@wix/ambassador-forms-v4-form/types';
import { FormHandle } from '@wix/form-viewer';
import type { i18n } from '@wix/fe-essentials/i18n';
import { JSX as JSX_2 } from 'react/jsx-runtime';
import { Layout } from '@wix/form-fields';
import { LoginBar } from '@wix/form-fields/headless';
import { MultilineAddress } from '@wix/form-fields/headless';
import { NumberInput } from '@wix/form-fields/headless';
import { PaymentInput } from '@wix/form-fields/headless';
import { PhoneInput } from '@wix/form-fields/headless';
import { ProductList } from '@wix/form-fields/headless';
import { PublicAppointmentProps } from '@wix/form-fields';
import { PublicCheckboxGroupProps } from '@wix/form-fields';
import { PublicCheckboxProps } from '@wix/form-fields';
import { PublicDateInputProps } from '@wix/form-fields';
import { PublicDatePickerProps } from '@wix/form-fields';
import { PublicDateTimeInputProps } from '@wix/form-fields';
import { PublicDonationProps } from '@wix/form-fields';
import { PublicDropdownProps } from '@wix/form-fields';
import { PublicFieldsProps } from '@wix/form-fields';
import { PublicFileUploadProps } from '@wix/form-fields';
import { PublicFixedPaymentProps } from '@wix/form-fields';
import { PublicImageChoiceProps } from '@wix/form-fields';
import { PublicLoginBarProps } from '@wix/form-fields';
import { PublicMultilineAddressProps } from '@wix/form-fields';
import { PublicNumberInputProps } from '@wix/form-fields';
import { PublicPaymentInputProps } from '@wix/form-fields';
import { PublicPhoneInputProps } from '@wix/form-fields';
import { PublicProductListProps } from '@wix/form-fields';
import { PublicRadioGroupProps } from '@wix/form-fields';
import { PublicRatingInputProps } from '@wix/form-fields';
import { PublicRichTextProps } from '@wix/form-fields';
import { PublicSignatureProps } from '@wix/form-fields';
import { PublicSubmitButtonProps } from '@wix/form-fields';
import { PublicTagsProps } from '@wix/form-fields';
import { PublicTextAreaProps } from '@wix/form-fields';
import { PublicTextInputProps } from '@wix/form-fields';
import { PublicTimeInputProps } from '@wix/form-fields';
import { RadioGroup } from '@wix/form-fields/headless';
import { RatingInput } from '@wix/form-fields/headless';
import { default as React_2 } from 'react';
import { ReactElement } from 'react';
import { RichText } from '@wix/form-fields/headless';
import { FieldType as SchemaFieldType } from '@wix/form-fields';
import { Signature } from '@wix/form-fields/headless';
import { SubmitButton } from '@wix/form-fields/headless';
import { Tags } from '@wix/form-fields/headless';
import { TextArea } from '@wix/form-fields/headless';
import { TextInput } from '@wix/form-fields/headless';
import { TimeInput } from '@wix/form-fields/headless';
import { UniqueFieldSuffixContextProvider } from '@wix/form-fields';
import { useFieldProps } from '@wix/form-fields';

declare interface AppointmentSubmitData {
    startDate: string;
    endDate: string;
    timeZone: string;
}

export { Checkbox }

export { CheckboxGroup }

export declare function createI18n(locale: string): Promise<i18n>;

declare interface Currency {
    sign?: string;
    code?: string;
}
export { Currency }
export { Currency as Currency_alias_1 }

export { DateInput }

export { DatePicker }

export { DateTimeInput }

export { Donation }

export { Dropdown }

export declare const fetchLocaleDatasetTranslations: (locale: string) => Promise<Record<string, string>>;

export declare const FIELD_TYPE_MAP: Record<SchemaFieldType, FieldType>;

declare type FieldMap = {
    TEXT_INPUT: React.ComponentType<PublicTextInputProps>;
    TEXT_AREA: React.ComponentType<PublicTextAreaProps>;
    PHONE_INPUT: React.ComponentType<PublicPhoneInputProps>;
    MULTILINE_ADDRESS: React.ComponentType<PublicMultilineAddressProps>;
    DATE_INPUT: React.ComponentType<PublicDateInputProps>;
    DATE_PICKER: React.ComponentType<PublicDatePickerProps>;
    DATE_TIME_INPUT: React.ComponentType<PublicDateTimeInputProps>;
    FILE_UPLOAD: React.ComponentType<PublicFileUploadProps>;
    NUMBER_INPUT: React.ComponentType<PublicNumberInputProps>;
    CHECKBOX: React.ComponentType<PublicCheckboxProps>;
    SIGNATURE: React.ComponentType<PublicSignatureProps>;
    RATING_INPUT: React.ComponentType<PublicRatingInputProps>;
    RADIO_GROUP: React.ComponentType<PublicRadioGroupProps>;
    CHECKBOX_GROUP: React.ComponentType<PublicCheckboxGroupProps>;
    DROPDOWN: React.ComponentType<PublicDropdownProps>;
    TAGS: React.ComponentType<PublicTagsProps>;
    TIME_INPUT: React.ComponentType<PublicTimeInputProps>;
    TEXT: React.ComponentType<PublicRichTextProps>;
    SUBMIT_BUTTON: React.ComponentType<PublicSubmitButtonProps>;
    PRODUCT_LIST: React.ComponentType<PublicProductListProps>;
    FIXED_PAYMENT: React.ComponentType<PublicFixedPaymentProps>;
    PAYMENT_INPUT: React.ComponentType<PublicPaymentInputProps>;
    DONATION: React.ComponentType<PublicDonationProps>;
    APPOINTMENT: React.ComponentType<PublicAppointmentProps>;
    IMAGE_CHOICE: React.ComponentType<PublicImageChoiceProps>;
    LOGIN_BAR: React.ComponentType<PublicLoginBarProps>;
};
export { FieldMap }
export { FieldMap as FieldMap_alias_1 }

export declare type FieldType = 'TEXT_INPUT' | 'TEXT_AREA' | 'PHONE_INPUT' | 'MULTILINE_ADDRESS' | 'DATE_INPUT' | 'DATE_PICKER' | 'DATE_TIME_INPUT' | 'TIME_INPUT' | 'FILE_UPLOAD' | 'NUMBER_INPUT' | 'CHECKBOX' | 'SIGNATURE' | 'RATING_INPUT' | 'RADIO_GROUP' | 'CHECKBOX_GROUP' | 'DROPDOWN' | 'TAGS' | 'SUBMIT_BUTTON' | 'PRODUCT_LIST' | 'FIXED_PAYMENT' | 'PAYMENT_INPUT' | 'DONATION' | 'APPOINTMENT' | 'IMAGE_CHOICE' | 'TEXT' | 'LOGIN_BAR';

export declare interface FileDescriptor {
    id?: string;
    displayName?: string;
    url?: string;
    isPrivate: boolean;
}

export { FileUpload }

export { FixedPayment }

export declare const FORM_VIEWER_NAMESPACE = "form-viewer";

declare interface FormError {
    errorPath: string;
    errorType: ErrorType;
    errorMessage: string;
    params?: object;
    useCustomErrorMessage?: boolean;
}
export { FormError }
export { FormError as FormError_alias_1 }

declare const FormProvider: ({ children, currency, locale, addressTemplates, regionalFormat, }: FormProviderProps) => JSX_2.Element | null;
export { FormProvider }
export { FormProvider as FormProvider_alias_1 }

export declare interface FormProviderProps {
    children: React_2.ReactNode;
    currency: Currency;
    locale: string;
    regionalFormat?: string;
    addressTemplates?: AddressTemplate[];
}

declare type FormValues = {
    [target: string]: PossibleValues;
};
export { FormValues }
export { FormValues as FormValues_alias_1 }

export { LoginBar }

export declare const mapFieldTypes: (fields: FieldMap, typeMap: Record<SchemaFieldType, FieldType>) => Record<string, React_2.ComponentType<any>>;

export { MultilineAddress }

declare interface MultilineAddressSubmission {
    country?: string;
    subdivision?: string;
    city?: string;
    postalCode?: string;
    streetNumber?: string;
    streetName?: string;
    addressLine?: string;
    addressLine2?: string;
}

/**
 * Normalizes object schema by removing underscore prefixes and converting keys to camelCase
 * @param obj - The object to normalize
 * @returns The object with all nested keys normalized
 */
export declare function normalizeSchema<T = unknown>(obj: T): T;

export { NumberInput }

export declare type OnChange = (values: FormValues) => void;

export { PaymentInput }

export { PhoneInput }

declare type PossibleValues = ValueType | {
    [target: string]: ValueType;
} | FormValues[];

export { ProductList }

declare type ProductListValue = ProductValue[];

declare type ProductValue = {
    productId: string;
    price: string | number;
    quantity: number;
};

export { PublicAppointmentProps as AppointmentProps }
export { PublicAppointmentProps as AppointmentProps_alias_1 }

export { PublicCheckboxGroupProps as CheckboxGroupProps }
export { PublicCheckboxGroupProps as CheckboxGroupProps_alias_1 }

export { PublicCheckboxProps as CheckboxProps }
export { PublicCheckboxProps as CheckboxProps_alias_1 }

export { PublicDateInputProps as DateInputProps }
export { PublicDateInputProps as DateInputProps_alias_1 }

export { PublicDatePickerProps as DatePickerProps }
export { PublicDatePickerProps as DatePickerProps_alias_1 }

export { PublicDateTimeInputProps as DateTimeInputProps }
export { PublicDateTimeInputProps as DateTimeInputProps_alias_1 }

export { PublicDonationProps as DonationProps }
export { PublicDonationProps as DonationProps_alias_1 }

export { PublicDropdownProps as DropdownProps }
export { PublicDropdownProps as DropdownProps_alias_1 }

export { PublicFieldsProps as FieldsProps }
export { PublicFieldsProps as FieldsProps_alias_1 }

export { PublicFileUploadProps as FileUploadProps }
export { PublicFileUploadProps as FileUploadProps_alias_1 }

export { PublicFixedPaymentProps as FixedPaymentProps }
export { PublicFixedPaymentProps as FixedPaymentProps_alias_1 }

export { PublicImageChoiceProps as ImageChoiceProps }
export { PublicImageChoiceProps as ImageChoiceProps_alias_1 }

export { PublicLoginBarProps as LoginBarProps }
export { PublicLoginBarProps as LoginBarProps_alias_1 }

export { PublicMultilineAddressProps as MultilineAddressProps }
export { PublicMultilineAddressProps as MultilineAddressProps_alias_1 }

export { PublicNumberInputProps as NumberInputProps }
export { PublicNumberInputProps as NumberInputProps_alias_1 }

export { PublicPaymentInputProps as PaymentInputProps }
export { PublicPaymentInputProps as PaymentInputProps_alias_1 }

export { PublicPhoneInputProps as PhoneInputProps }
export { PublicPhoneInputProps as PhoneInputProps_alias_1 }

export { PublicProductListProps as ProductListProps }
export { PublicProductListProps as ProductListProps_alias_1 }

export { PublicRadioGroupProps as RadioGroupProps }
export { PublicRadioGroupProps as RadioGroupProps_alias_1 }

export { PublicRatingInputProps as RatingInputProps }
export { PublicRatingInputProps as RatingInputProps_alias_1 }

export { PublicRichTextProps as RichTextProps }
export { PublicRichTextProps as RichTextProps_alias_1 }

export { PublicSignatureProps as SignatureProps }
export { PublicSignatureProps as SignatureProps_alias_1 }

export { PublicSubmitButtonProps as SubmitButtonProps }
export { PublicSubmitButtonProps as SubmitButtonProps_alias_1 }

export { PublicTagsProps as TagsProps }
export { PublicTagsProps as TagsProps_alias_1 }

export { PublicTextAreaProps as TextAreaProps }
export { PublicTextAreaProps as TextAreaProps_alias_1 }

export { PublicTextInputProps as TextInputProps }
export { PublicTextInputProps as TextInputProps_alias_1 }

export { PublicTimeInputProps as TimeInputProps }
export { PublicTimeInputProps as TimeInputProps_alias_1 }

export { RadioGroup }

export { RatingInput }

export { RichText }

export { SchemaFieldType }

export { Signature }

export { SubmitButton }

export { Tags }

export { TextArea }

export { TextInput }

export { TimeInput }

export { UniqueFieldSuffixContextProvider }

export declare type UploadFile = (params: UploadFileParams) => Promise<FileDescriptor>;

export declare interface UploadFileParams {
    file: File;
    formId: string;
    uploadTarget: string;
}

export { useFieldProps }

declare const useForm: ({ form: unformattedForm, values, onChange, errors, onValidate, submitForm, uploadFile, forwardedRef, fieldMap: fields, addressTemplates, }: UseFormProps) => UseFormReturn;
export { useForm }
export { useForm as useForm_alias_1 }

declare type UseFormProps = {
    form: Form;
    values: FormValues;
    onChange: OnChange;
    errors: FormError[];
    onValidate: (errors: FormError[]) => void;
    submitForm: () => void;
    uploadFile?: UploadFile;
    fieldMap: FieldMap;
    forwardedRef?: React.ForwardedRef<FormHandle>;
    addressTemplates?: AddressTemplate[];
};
export { UseFormProps }
export { UseFormProps as UseFormProps_alias_1 }

declare type UseFormReturn = {
    columnCount: number;
    fieldElements: ReactElement[][];
    fieldsLayout: Record<string, Layout>;
} | null;

declare type ValueType = string | number | boolean | string[] | null | undefined | VatIDValue | ProductListValue | WixFile[] | MultilineAddressSubmission | AppointmentSubmitData;

declare type VatIDValue = {
    id: string;
    type?: string;
};

declare interface WixFile {
    fileId: string;
    displayName: string;
    url?: string;
    fileType: string;
}

export { }
