import { AddressCity, AddressDistrict, AddressRegionDb, AddressState, IApiPayload } from "@etsoo/appscript";
import React from "react";
import { ResponsiveStyleValue } from "./ResponsiveStyleValue";
import { RegionsRQ } from "./RegionsRQ";
import { GridSize } from "@mui/material/Grid";
/**
 * Address field
 */
export declare enum AddressField {
    Region = "region",
    State = "state",
    City = "city",
    District = "district"
}
type AddressFieldType<F extends AddressField> = F extends AddressField.Region ? [F, AddressRegionDb | null] : F extends AddressField.State ? [F, AddressState | null] : F extends AddressField.City ? [F, AddressCity | null] : [F, AddressDistrict | null];
type AddressFavorType<F extends AddressField> = F extends AddressField.Region | AddressField.State ? string : number;
/**
 * Address selector props
 */
export type AddressSelectorProps = {
    /**
     * Address API
     */
    api: {
        regions(rq: RegionsRQ, payload?: IApiPayload<AddressRegionDb[]>): Promise<AddressRegionDb[] | undefined>;
        states(regionId: string, favoredIds?: string[], payload?: IApiPayload<AddressState[]>, culture?: string): Promise<AddressState[] | undefined>;
        cities(stateId: string, favoredIds?: number[], payload?: IApiPayload<AddressCity[]>, culture?: string): Promise<AddressCity[] | undefined>;
        districts(cityId: number, favoredIds?: number[], payload?: IApiPayload<AddressDistrict[]>, culture?: string): Promise<AddressDistrict[] | undefined>;
    };
    /**
     * Break points
     */
    breakPoints?: ResponsiveStyleValue<GridSize>;
    /**
     * City
     */
    city?: number;
    /**
     * City label
     */
    cityLabel?: string;
    /**
     * District
     */
    district?: number;
    /**
     * District label
     */
    districtLabel?: string;
    /**
     * Error
     */
    error?: boolean;
    /**
     * Get favored ids
     * @param field Field
     * @returns Result
     */
    favoredIds?: <F extends AddressField>(field: F) => AddressFavorType<F>[];
    /**
     * The helper text content.
     */
    helperText?: React.ReactNode;
    /**
     * Hide the region
     */
    hideRegion?: boolean;
    /**
     * Label
     */
    label?: string;
    /**
     * Onchange hanlder
     * @param event Event
     */
    onChange?: <F extends AddressField>(event: AddressFieldType<F>) => void;
    /**
     * Country or region
     */
    region?: string;
    /**
     * Region label
     */
    regionLabel?: string;
    /**
     * Required
     */
    required?: boolean;
    /**
     * Search mode
     */
    search?: boolean;
    /**
     * State
     */
    state?: string;
    /**
     * State label
     */
    stateLabel?: string;
};
/**
 * Address selector
 * @param props Props
 */
export declare function AddressSelector(props: AddressSelectorProps): import("react/jsx-runtime").JSX.Element;
export {};
