import type { BuildInPlacements } from '@rc-component/trigger/lib/interface'; import type { BaseSelectPropsWithoutPrivate, BaseSelectRef } from 'rc-select'; import type { Placement } from 'rc-select/lib/BaseSelect'; import * as React from 'react'; import { SHOW_CHILD, SHOW_PARENT } from './utils/commonUtil'; export interface ShowSearchType { filter?: (inputValue: string, options: OptionType[], fieldNames: FieldNames) => boolean; render?: (inputValue: string, path: OptionType[], prefixCls: string, fieldNames: FieldNames) => React.ReactNode; sort?: (a: OptionType[], b: OptionType[], inputValue: string, fieldNames: FieldNames) => number; matchInputWidth?: boolean; limit?: number | false; } export interface FieldNames { label?: string; value?: string; children?: string; } export interface InternalFieldNames extends Required { key: string; } export type SingleValueType = (string | number)[]; export type ValueType = SingleValueType | SingleValueType[]; export type ShowCheckedStrategy = typeof SHOW_PARENT | typeof SHOW_CHILD; export interface BaseOptionType { disabled?: boolean; [name: string]: any; } export interface DefaultOptionType extends BaseOptionType { label: React.ReactNode; value?: string | number | null; children?: DefaultOptionType[]; disableCheckbox?: boolean; } interface BaseCascaderProps extends Omit { id?: string; prefixCls?: string; fieldNames?: FieldNames; children?: React.ReactElement; value?: ValueType; defaultValue?: ValueType; changeOnSelect?: boolean; displayRender?: (label: string[], selectedOptions?: OptionType[]) => React.ReactNode; checkable?: boolean | React.ReactNode; showCheckedStrategy?: ShowCheckedStrategy; autoClearSearchValue?: boolean; showSearch?: boolean | ShowSearchType; searchValue?: string; onSearch?: (value: string) => void; expandTrigger?: 'hover' | 'click'; options?: OptionType[]; /** @private Internal usage. Do not use in your production. */ dropdownPrefixCls?: string; loadData?: (selectOptions: OptionType[]) => void; /** @deprecated Use `open` instead */ popupVisible?: boolean; /** @deprecated Use `dropdownClassName` instead */ popupClassName?: string; dropdownClassName?: string; dropdownMenuColumnStyle?: React.CSSProperties; /** @deprecated Use `placement` instead */ popupPlacement?: Placement; placement?: Placement; builtinPlacements?: BuildInPlacements; /** @deprecated Use `onDropdownVisibleChange` instead */ onPopupVisibleChange?: (open: boolean) => void; onDropdownVisibleChange?: (open: boolean) => void; expandIcon?: React.ReactNode; loadingIcon?: React.ReactNode; } type OnSingleChange = (value: SingleValueType, selectOptions: OptionType[]) => void; type OnMultipleChange = (value: SingleValueType[], selectOptions: OptionType[][]) => void; export interface SingleCascaderProps extends BaseCascaderProps { checkable?: false; onChange?: OnSingleChange; } export interface MultipleCascaderProps extends BaseCascaderProps { checkable: true | React.ReactNode; onChange?: OnMultipleChange; } export type CascaderProps = SingleCascaderProps | MultipleCascaderProps; export type InternalCascaderProps = Omit | MultipleCascaderProps, 'onChange'> & { onChange?: (value: SingleValueType | SingleValueType[], selectOptions: OptionType[] | OptionType[][]) => void; }; export type CascaderRef = Omit; declare const Cascader: ((props: React.PropsWithChildren> & { ref?: React.Ref; }) => React.ReactElement) & { displayName?: string; SHOW_PARENT: typeof SHOW_PARENT; SHOW_CHILD: typeof SHOW_CHILD; }; export default Cascader;