import React, { ReactNode, CSSProperties, MouseEvent, KeyboardEvent } from 'react'; import PropTypes from 'prop-types'; import { BasicCascaderInnerData, BasicCascaderProps, BasicTriggerRenderProps, BasicScrollPanelProps, CascaderAdapter, CascaderType } from '@douyinfe/semi-foundation/lib/es/cascader/foundation'; import '@douyinfe/semi-foundation/lib/es/cascader/cascader.css'; import { ContextValue } from '../configProvider/context'; import BaseComponent, { ValidateStatus } from '../_base/baseComponent'; import Input from '../input/index'; import { PopoverProps } from '../popover/index'; import { CascaderData, Entities, Entity, Data, FilterRenderProps } from './item'; import { Position } from '../tooltip/index'; export type { CascaderType, ShowNextType } from '@douyinfe/semi-foundation/lib/es/cascader/foundation'; export type { CascaderData, Entity, Data, CascaderItemProps, FilterRenderProps } from './item'; export interface ScrollPanelProps extends BasicScrollPanelProps { activeNode: CascaderData; } export interface TriggerRenderProps extends BasicTriggerRenderProps { componentProps: CascaderProps; onClear: (e: React.MouseEvent) => void; } export type SimpleValueType = string | number | CascaderData; export type Value = SimpleValueType | Array | Array>; export interface CascaderProps extends BasicCascaderProps { 'aria-describedby'?: React.AriaAttributes['aria-describedby']; 'aria-errormessage'?: React.AriaAttributes['aria-errormessage']; 'aria-invalid'?: React.AriaAttributes['aria-invalid']; 'aria-labelledby'?: React.AriaAttributes['aria-labelledby']; 'aria-required'?: React.AriaAttributes['aria-required']; 'aria-label'?: React.AriaAttributes['aria-label']; arrowIcon?: ReactNode; clearIcon?: ReactNode; expandIcon?: ReactNode; defaultValue?: Value; dropdownStyle?: CSSProperties; dropdownMargin?: PopoverProps['margin']; emptyContent?: ReactNode; motion?: boolean; filterTreeNode?: ((inputValue: string, treeNodeString: string, data?: CascaderData) => boolean) | boolean; filterSorter?: (first: CascaderData, second: CascaderData, inputValue: string) => number; filterRender?: (props: FilterRenderProps) => ReactNode; treeData?: Array; restTagsPopoverProps?: PopoverProps; children?: React.ReactNode; value?: Value; prefix?: ReactNode; suffix?: ReactNode; id?: string; insetLabel?: ReactNode; insetLabelId?: string; style?: CSSProperties; bottomSlot?: ReactNode; topSlot?: ReactNode; triggerRender?: (props: TriggerRenderProps) => ReactNode; onListScroll?: (e: React.UIEvent, panel: ScrollPanelProps) => void; loadData?: (selectOptions: CascaderData[]) => Promise; onLoad?: (newLoadedKeys: Set, data: CascaderData) => void; onChange?: (value: Value) => void; onExceed?: (checkedItem: Entity[]) => void; displayRender?: (selected: Array | Entity, idx?: number) => ReactNode; onBlur?: (e: MouseEvent) => void; onFocus?: (e: MouseEvent) => void; validateStatus?: ValidateStatus; position?: Position; searchPosition?: string; } export interface CascaderState extends BasicCascaderInnerData { keyEntities: Entities; prevProps: CascaderProps; treeData?: Array; } declare class Cascader extends BaseComponent { static __SemiComponentName__: string; static contextType: React.Context; static propTypes: { 'aria-labelledby': PropTypes.Requireable; 'aria-invalid': PropTypes.Requireable; 'aria-errormessage': PropTypes.Requireable; 'aria-describedby': PropTypes.Requireable; 'aria-required': PropTypes.Requireable; 'aria-label': PropTypes.Requireable; arrowIcon: PropTypes.Requireable; borderless: PropTypes.Requireable; clearIcon: PropTypes.Requireable; changeOnSelect: PropTypes.Requireable; defaultValue: PropTypes.Requireable>; disabled: PropTypes.Requireable; dropdownClassName: PropTypes.Requireable; dropdownStyle: PropTypes.Requireable; dropdownMargin: PropTypes.Requireable>; emptyContent: PropTypes.Requireable; motion: PropTypes.Requireable; filterTreeNode: PropTypes.Requireable any)>>; filterLeafOnly: PropTypes.Requireable; placeholder: PropTypes.Requireable; searchPlaceholder: PropTypes.Requireable; size: PropTypes.Requireable; style: PropTypes.Requireable; className: PropTypes.Requireable; treeData: PropTypes.Requireable>; label: PropTypes.Requireable; }>[]>; treeNodeFilterProp: PropTypes.Requireable; suffix: PropTypes.Requireable; prefix: PropTypes.Requireable; insetLabel: PropTypes.Requireable; insetLabelId: PropTypes.Requireable; id: PropTypes.Requireable; displayProp: PropTypes.Requireable; displayRender: PropTypes.Requireable<(...args: any[]) => any>; onChange: PropTypes.Requireable<(...args: any[]) => any>; onSearch: PropTypes.Requireable<(...args: any[]) => any>; onSelect: PropTypes.Requireable<(...args: any[]) => any>; onBlur: PropTypes.Requireable<(...args: any[]) => any>; onFocus: PropTypes.Requireable<(...args: any[]) => any>; children: PropTypes.Requireable; getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>; zIndex: PropTypes.Requireable; value: PropTypes.Requireable>; validateStatus: PropTypes.Requireable<"default" | "error" | "warning" | "success">; showNext: PropTypes.Requireable<"hover" | "click">; stopPropagation: PropTypes.Requireable>; showClear: PropTypes.Requireable; defaultOpen: PropTypes.Requireable; autoAdjustOverflow: PropTypes.Requireable; onDropdownVisibleChange: PropTypes.Requireable<(...args: any[]) => any>; triggerRender: PropTypes.Requireable<(...args: any[]) => any>; onListScroll: PropTypes.Requireable<(...args: any[]) => any>; onChangeWithObject: PropTypes.Requireable; bottomSlot: PropTypes.Requireable; topSlot: PropTypes.Requireable; multiple: PropTypes.Requireable; autoMergeValue: PropTypes.Requireable; maxTagCount: PropTypes.Requireable; showRestTagsPopover: PropTypes.Requireable; restTagsPopoverProps: PropTypes.Requireable; max: PropTypes.Requireable; separator: PropTypes.Requireable; onExceed: PropTypes.Requireable<(...args: any[]) => any>; onClear: PropTypes.Requireable<(...args: any[]) => any>; loadData: PropTypes.Requireable<(...args: any[]) => any>; onLoad: PropTypes.Requireable<(...args: any[]) => any>; loadedKeys: PropTypes.Requireable; disableStrictly: PropTypes.Requireable; leafOnly: PropTypes.Requireable; enableLeafClick: PropTypes.Requireable; clickToSelect: PropTypes.Requireable; preventScroll: PropTypes.Requireable; position: PropTypes.Requireable; searchPosition: PropTypes.Requireable; remote: PropTypes.Requireable; }; static defaultProps: any; options: any; isEmpty: boolean; inputRef: React.RefObject; triggerRef: React.RefObject; optionsRef: React.RefObject; optionContainerEl: React.RefObject; clickOutsideHandler: any; mergeType: string; context: ContextValue; loadingKeysRef: React.RefObject | null>; loadedKeysRef: React.RefObject | null>; constructor(props: CascaderProps); get adapter(): CascaderAdapter; static getDerivedStateFromProps(props: CascaderProps, prevState: CascaderState): Partial; componentDidMount(): void; componentWillUnmount(): void; componentDidUpdate(prevProps: CascaderProps): void; search: (value: string) => void; handleInputChange: (value: string) => void; handleTagRemoveInTrigger: (pos: string) => void; handleTagClose: (tagChildren: React.ReactNode, e: React.MouseEvent, tagKey: string | number) => void; renderTagItem: (nodeKey: string, idx: number) => string | number | boolean | Iterable | React.JSX.Element; onRemoveInTagInput: (v: string) => void; renderTagInput(): React.JSX.Element; renderInput(): React.JSX.Element; handleItemClick: (e: MouseEvent | KeyboardEvent, item: Entity | Data) => void; handleItemHover: (e: MouseEvent, item: Entity) => void; onItemCheckboxClick: (item: Entity | Data) => void; handleListScroll: (e: React.UIEvent, ind: number) => void; close(): void; open(): void; focus(): void; blur(): void; renderContent: () => React.JSX.Element; renderPlusN: (hiddenTag: Array) => React.JSX.Element; renderMultipleTags: () => React.JSX.Element; renderDisplayText: () => ReactNode; renderSelectContent: () => React.JSX.Element; renderSuffix: () => React.JSX.Element; renderPrefix: () => React.JSX.Element; renderCustomTrigger: () => React.JSX.Element; handleMouseOver: () => void; handleMouseLeave: () => void; handleClear: (e: MouseEvent) => void; /** * A11y: simulate clear button click */ handleClearEnterPress: (e: KeyboardEvent) => void; showClearBtn: () => boolean; renderClearBtn: () => React.JSX.Element; renderArrow: () => React.JSX.Element; renderSelection: () => React.JSX.Element; render(): React.JSX.Element; } export default Cascader;