import React from 'react';
import DateRange from '../TimeframeFilter/DateRange';
import Toggle from '../Toggle/Toggle';
import { SearchBarProps, TooltipProps, MultipleSelection, FormLabel, type NewSelectProps } from '../../module';
declare const TextInput: React.LazyExoticComponent<React.ForwardRefExoticComponent<import("../Form/TextInput").TextInputProps & React.RefAttributes<HTMLInputElement | HTMLTextAreaElement>>>;
declare const Picker: React.LazyExoticComponent<typeof import("../Picker/Picker").default>;
type FilterMenuPropsType<OptionType> = {
    /** An object containing an entry for each filter input component */
    states: FilterStatesType<OptionType>;
    /** A callback for when the form closes */
    close: () => void;
    /** A callback for when the date is reset on a date input */
    resetDate: React.ComponentProps<typeof DateRange>['resetDate'];
    /** A callback for when the form's inputs change */
    onChangeCallout?: (...params: unknown[]) => void;
    /** A boolean specifying whether the filters are still loading or not */
    loading?: boolean;
    /** A boolean specifying whether to show additional child components above or below those specified in states */
    topChildren?: boolean;
    /** A boolean specifying whether the sidedrawer with the filter form is open */
    isOpen: boolean;
    /** Anything which you would like to add in addition to Filter options- unique filter types, header/footer information, etc  */
    children?: (props: {
        isOpen?: boolean;
        close?: () => void;
    }) => React.ReactNode;
};
type FormLabelProps = React.ComponentProps<typeof FormLabel>;
type FilterStateOptionType = {
    type: 'select' | 'dates' | 'text' | 'multiple-selection' | 'toggle' | 'switch';
    stateName: string;
    rightLabel?: string;
    customClass?: string;
};
type DateRangeProps = React.ComponentProps<typeof DateRange>;
interface DatesStatePropType extends FilterStateOptionType {
    type: 'dates';
    labelText: string;
    disabled?: FormLabelProps['disabled'];
    placement?: DateRangeProps['placement'];
    defaultValue: {
        start_date: DateRangeProps['startDate'];
        end_date?: DateRangeProps['endDate'];
    };
    specifiedDay?: DateRangeProps['specifiedDay'];
    hideCustomDateSearch?: DateRangeProps['hideCustomDateSearch'];
    isOutsideRangeHandler?: DateRangeProps['isOutsideRangeHandler'];
    clearCallout?: DateRangeProps['resetDate'];
    singleDate?: DateRangeProps['singleDate'];
    showAllDates?: DateRangeProps['showAllDates'];
}
type TextInputProps = React.ComponentProps<typeof TextInput>;
interface TextStatePropType extends FilterStateOptionType {
    type: 'text';
    labelText: string;
    defaultValue?: TextInputProps['value'];
    onBlurCallout?: TextInputProps['onBlurCallout'];
    inputType?: TextInputProps['type'];
    clearCallout?: TextInputProps['clearCallout'];
    numberProps?: Pick<TextInputProps, 'min' | 'max' | 'step' | 'onlyWholeNumbers' | 'onlyPositiveNumbers'> & {
        suffix?: string;
    };
    placeholder?: TextInputProps['placeholder'];
    disabled?: TextInputProps['disabled'];
    numberFormat?: TextInputProps['numberFormat'];
    inputLabel?: TextInputProps['inputLabel'];
    labelTooltip?: TextInputProps['labelTooltip'];
    keyUp?: () => void;
    shouldClose?: boolean;
}
type PickerProps = React.ComponentProps<typeof Picker>;
interface ToggleStatePropType extends FilterStateOptionType {
    type: 'toggle';
    labelText?: string;
    options: PickerProps['options'];
    state?: PickerProps['state'];
    defaultValue?: PickerProps['selected'];
    labelTooltip?: PickerProps['labelTooltip'];
    disabled?: boolean;
}
type MultipleSelectionProps = React.ComponentProps<typeof MultipleSelection>;
interface MultipleSelectionStatePropType extends FilterStateOptionType {
    type: 'multiple-selection';
    options: Record<string, string | number>[];
    optionKeyName: string;
    labelText: string;
    loading?: MultipleSelectionProps['loading'];
    selectedOptions: MultipleSelectionProps['selectedOptions'];
    isError?: boolean;
    selectPlaceholder?: MultipleSelectionProps['selectPlaceholder'];
    searchPlaceholder?: MultipleSelectionProps['searchPlaceholder'];
    onSearchChange?: MultipleSelectionProps['onSearchChange'];
    emptyState?: MultipleSelectionProps['noListDataText'];
    labelTooltip?: MultipleSelectionProps['labelTooltip'];
    secondaryOptions?: MultipleSelectionProps['secondaryOptions'];
}
type NewSelectStatePropType<OptionType> = FilterStateOptionType & {
    type: 'select';
    options: NewSelectProps<OptionType>['options'];
    labelText: string;
    loading?: NewSelectProps<OptionType>['loading'];
    labelTooltip?: TooltipProps;
    defaultValue: NewSelectProps<OptionType>['selectedItem'];
    optionKeyName: string;
    isError?: NewSelectProps<OptionType>['error'];
    searchBar?: boolean;
    required?: boolean;
    disabled?: boolean;
    onSearchChange?: SearchBarProps['onChange'];
};
type ToggleProps = React.ComponentProps<typeof Toggle>;
interface SwitchStatePropType extends FilterStateOptionType {
    type: 'switch';
    labelText: string;
    labelTooltip: FormLabelProps['tooltip'];
    disabled?: FormLabelProps['disabled'];
    defaultValue: ToggleProps['checked'];
}
export type FilterStatesType<OptionType> = Record<string, NewSelectStatePropType<OptionType> | DatesStatePropType | TextStatePropType | ToggleStatePropType | MultipleSelectionStatePropType | SwitchStatePropType>;
export declare const FilterMenu: <OptionType>({ states, close, resetDate, onChangeCallout, loading, topChildren, isOpen, children, }: FilterMenuPropsType<OptionType>) => JSX.Element;
export {};
