rsuite
Version:
A suite of react components
169 lines (168 loc) • 5.35 kB
TypeScript
import type { CSSProperties, ReactNode, ElementType, SyntheticEvent, FocusEventHandler } from 'react';
import type { Placement } from './placement';
import type { ToArray } from './utils';
import type { FormControlBaseProps } from './form';
import type { AnimationEventProps } from './animation';
import type { BoxProps } from '../Box';
import type { BasicSize } from './sizes';
import type { PickerHandle } from '../Picker/types';
export interface Option<T = number | string> extends Record<string, any> {
label?: string | ReactNode;
value?: T;
groupBy?: string;
parent?: Option<T>;
children?: Option<T>[];
loading?: boolean;
}
export type OptionValue = number | string | null;
export type OnChangeCallback<T, E = SyntheticEvent> = (value: T, event: E) => void;
export interface DeprecatedMenuProps {
/**
* Custom menu class name
* @deprecated Use `popupClassName` instead
*/
menuClassName?: string;
/**
* Custom menu style
* @deprecated Use `popupStyle` instead
*/
menuStyle?: CSSProperties;
/**
* Picker menu auto width
*
* @deprecated Use `popupAutoWidth` instead
*/
menuAutoWidth?: boolean;
/**
* Set the width of the menu
*
* @deprecated Use columnWidth instead
*/
menuWidth?: number;
/**
* Set the height of the menu
* @deprecated Use columnHeight instead
*/
menuHeight?: number;
/**
* Set the max height of the menu
* @deprecated Use `listboxMaxHeight` instead
*/
menuMaxHeight?: number;
/**
* Custom render menu
* @deprecated For TreePicker and CheckTreePicker, use `renderTree` instead. For Cascader and MultiCascader, use `renderColumn` instead.
*/
renderMenu?: any;
/**
* Custom render menu item
* @deprecated Use renderTreeNode or renderOption instead
*/
renderMenuItem?: any;
/**
* Custom render menu group
* @deprecated Use renderOptionGroup instead
*/
renderMenuGroup?: any;
}
export type PickerAppearance = 'default' | 'subtle';
/**
* Represents the data properties for a component.
*/
export interface DataProps<TData> {
/**
* The data of the component.
*/
data: TData[];
/**
* The key to use for setting the option value in the data.
* @default value
*/
valueKey?: string;
/**
* The key to use for displaying the options in the data.
* @default label
*/
labelKey?: string;
/**
* The key to use for setting the children in the data.
* @default children
*/
childrenKey?: string;
}
export interface PickerBaseProps<L = any> extends PopupProps, Omit<BoxProps, 'height'>, AnimationEventProps {
id?: string;
/**
* Custom Ref for the picker
*/
ref?: React.Ref<PickerHandle | undefined>;
/** Custom locale */
locale?: Partial<L>;
/** A picker can have different appearances. */
appearance?: PickerAppearance;
/** Format picker to appear inside a content block */
block?: boolean;
/** Set the padding of the container. */
containerPadding?: number;
/** Sets the rendering container */
container?: HTMLElement | (() => HTMLElement);
/** A picker can show it is currently unable to be interacted with */
disabled?: boolean;
/** You can use a custom element for this component */
toggleAs?: ElementType;
/** Placeholder text */
placeholder?: ReactNode;
/** The placement of picker */
placement?: Placement;
/** Prevent floating element overflow */
preventOverflow?: boolean;
/** Open the menu and control it */
open?: boolean;
/** Initial open menu */
defaultOpen?: boolean;
/** A picker that can clear values */
cleanable?: boolean;
/** A picker can have different sizes */
size?: BasicSize;
/** Called when Modal is displayed */
onOpen?: () => void;
/** Called when Modal is closed */
onClose?: () => void;
/**
* Called when the component is focused.
*/
onFocus?: FocusEventHandler<any>;
/**
* Called when the component is blurred.
*/
onBlur?: FocusEventHandler<any>;
/** Custom render extra footer */
renderExtraFooter?: () => ReactNode;
}
export interface FormControlPickerProps<T = any, L = any, D = Record<string, any>, I = T> extends DataProps<D>, PickerBaseProps<L>, FormControlBaseProps<T> {
/**
* Disabled items
*/
disabledItemValues?: ToArray<NonNullable<I>>;
}
export interface PopupProps {
/** Custom CSS class for the popup */
popupClassName?: string;
/** Custom inline styles for the popup */
popupStyle?: React.CSSProperties;
/** Whether the popup should automatically adjust its width */
popupAutoWidth?: boolean;
}
/**
* Properties for the Listbox component.
*/
export interface ListboxProps {
/** Maximum height of the listbox */
listboxMaxHeight?: number;
/** Custom render function for the entire listbox */
renderListbox?: (menu: React.ReactNode) => React.ReactNode;
/** Custom render function for individual options */
renderOption?: (label: React.ReactNode, item: Option) => React.ReactNode;
/** Custom render function for option groups */
renderOptionGroup?: (title: React.ReactNode, item: Option) => React.ReactNode;
}