@ucloud-fe/react-components
Version:
UCloud react components
840 lines (779 loc) • 25.1 kB
TypeScript
import type { CSSProperties, ReactNode, Component, PureComponent, HTMLAttributes, TextareaHTMLAttributes } from 'react';
// 忽略 T 对象中 键在 K 中的所有的属性
type Override<T1, T2> = Omit<T1, keyof T2> & T2;
// base type
export type SizeType = 'sm' | 'md' | 'lg';
// ThemeProvider
interface ThemeProviderProps {
theme: any;
}
export declare class ThemeProvider extends Component<ThemeProviderProps> {}
export { default as Tree } from './lib/components/Tree';
export { default as Cascader } from './lib/components/Cascader';
export { default as Link } from './lib/components/Link';
export { default as AutoComplete } from './lib/components/AutoComplete';
export { default as Switch, SwitchProps } from './lib/components/Switch';
export { default as Tabs, TabsProps, TabPaneProps } from './lib/components/Tabs';
export { default as Input } from './lib/components/Input';
import Input from './lib/components/Input';
export { default as Checkbox, CheckboxProps } from './lib/components/Checkbox';
export { default as Menu } from './lib/components/Menu';
export { default as Collapse } from './lib/components/Collapse';
export { default as ActionList } from './lib/components/ActionList';
import ActionList from './lib/components/ActionList';
export { default as Tooltip } from './lib/components/Tooltip';
export { default as PopConfirm } from './lib/components/PopConfirm';
export { default as ConfigProvider } from './lib/components/ConfigProvider';
export { default as Icon } from './lib/components/Icon';
export { default as Select } from './lib/components/Select';
export { default as Breadcrumb } from './lib/components/Breadcrumb';
export { default as Nav } from './lib/components/Nav';
export { default as Skeleton } from './lib/components/Skeleton';
// Button
import { ButtonProps } from './lib/components/Button/Button';
export { default as Button } from './lib/components/Button';
// Box
type BoxSpacing = 'sm' | 'md' | 'lg' | number | string;
export interface BoxProps extends HTMLAttributes<HTMLDivElement> {
container?: boolean;
spacing?: BoxSpacing | [BoxSpacing, BoxSpacing?];
direction?: 'row' | 'row-reverse' | 'column' | 'column-reverse';
wrap?: 'nowrap' | 'wrap' | 'wrap-reverse';
alignItems?: 'center' | 'flex-start' | 'flex-end' | 'stretch';
alignContent?: 'center' | 'flex-start' | 'flex-end' | 'space-between' | 'space-around';
justifyContent?: 'center' | 'flex-start' | 'flex-end' | 'space-between' | 'space-around' | 'stretch';
padding?: BoxSpacing;
width?: string;
height?: string;
span?: number;
order?: number;
flex?: string;
cleanMargin?: boolean;
}
export declare class Box extends PureComponent<BoxProps> {}
// Row
export type RowType = 'flex';
export type RowAlign = 'top' | 'middle' | 'bottom';
export type RowJustify = 'start' | 'end' | 'center' | 'space-around' | 'space-between';
export interface RowProps extends HTMLAttributes<HTMLDivElement> {
type?: RowType;
align?: RowAlign;
justify?: RowJustify;
gutter?: number | [number, number];
}
export declare class Row extends Component<RowProps> {}
// Col
export interface ColProps extends HTMLAttributes<HTMLDivElement> {
span?: number;
offset?: number;
pull?: number;
push?: number;
order?: number;
}
export declare class Col extends Component<ColProps> {}
// Grid
export interface GridType {
Row: Row;
Col: Col;
}
export declare const Grid: GridType;
// Combine
export interface CombineProps extends HTMLAttributes<HTMLDivElement> {
sharedProps?: CompactSharedProps;
spacing?: 'compact' | 'smart' | 'sm' | 'md' | 'lg' | string;
}
export declare class Combine extends PureComponent<CombineProps> {}
// Compact
export interface CompactSharedProps {
[key: string]: any;
}
export interface CompactProps extends HTMLAttributes<HTMLDivElement> {
sharedProps?: CompactSharedProps;
}
export declare class Compact extends Component<CompactProps> {}
// NumberInput
export type NumberInputStyleType = 'default' | 'split' | 'pagination';
export type NumberInputProps = Override<
HTMLAttributes<HTMLInputElement>,
{
value?: number | string;
defaultValue?: number | string;
onChange?: (value: number | string) => void;
onNumberChange?: (value: number) => void;
disabled?: boolean;
readOnly?: boolean;
max?: number;
min?: number;
step?: number | string;
upHandler?: ReactNode;
downHandler?: ReactNode;
formatter?: (value: number) => number | string;
parser?: (value: string) => string;
precision?: number;
styleType?: NumberInputStyleType;
size?: SizeType;
suffix?: ReactNode;
inputStyle?: CSSProperties;
computeValidNumber?: (value: number) => number;
hideHandler?: boolean;
}
>;
export declare class NumberInput extends Component<NumberInputProps> {}
// Textarea
export type TextareaProps = TextareaHTMLAttributes<HTMLTextAreaElement>;
export declare class Textarea extends Component<TextareaProps> {}
// Radio
export type RadioStyleType = 'default' | 'button' | 'tag' | 'card' | 'text' | 'list';
export interface RadioProps {
checked?: boolean;
defaultChecked?: boolean;
disabled?: boolean;
onChange?: (checked: boolean) => void;
value?: any;
styleType?: RadioStyleType;
size?: SizeType;
title?: ReactNode;
extra?: ReactNode;
disabledLabel?: ReactNode;
}
interface RadioOption extends RadioProps {
label?: ReactNode;
}
export type RadioOptions = RadioOption[];
export interface RadioGroupProps {
value?: any;
defaultValue?: any;
onChange?: (value: any) => void;
options?: RadioOptions;
disabled?: boolean;
size?: SizeType;
styleType?: RadioStyleType;
}
declare class RadioGroup extends Component<RadioGroupProps> {}
export declare class Radio extends Component<RadioProps> {
static Group: typeof RadioGroup;
}
// Slider
export interface SliderMark {
label?: string;
step?: number;
ratio?: number;
}
export interface SliderMarks {
[key: string]: SliderMark | ReactNode;
}
interface NumberInputTipFormatterOption {
currentValue: number;
inputValue: number;
isSensitive: boolean;
locale: any;
}
export type SliderProps = Override<
HTMLAttributes<HTMLDivElement>,
{
value?: number;
defaultValue?: number;
onChange?: (value: number) => void;
onLastChange?: (value: number) => void;
disabled?: boolean;
min?: number;
max?: number;
step?: number | string;
marks?: SliderMarks;
className?: string;
style?: CSSProperties;
sliderClassName?: string;
numberInput?: NumberInputProps;
isSensitive?: boolean;
numberInputTipFormatter?: (option: NumberInputTipFormatterOption) => ReactNode;
tipFormatter?: (value: number) => ReactNode;
size?: SizeType;
}
>;
export declare class Slider extends Component<SliderProps> {}
// Upload
export interface UploadFile {
name: string;
uid: string;
size?: number;
status?: 'uploading' | 'success' | 'error';
thumbnailUrl?: string;
url?: string;
type?: string;
lastModified?: number;
lastModifiedDate?: Date;
progress?: number;
error?: Error;
}
interface UpdateProgress {
(progress: number): void;
}
type UploadListTypeOption<T> = [T, 'none' | 'dropzone' | 'thumbnail'];
export type UploadListType =
| 'none'
| 'text'
| 'list'
| 'dropzone'
| UploadListTypeOption<'list'>
| UploadListTypeOption<'dropzone'>;
export interface UploadCustomStyle {
listMaxHeight?: string;
[key: string]: any;
}
export interface UploadProps {
onChange?: (fileList: UploadFile[]) => void;
onAdd?: (fileList: UploadFile[]) => boolean;
onRemove?: (file: UploadFile, index: number) => boolean;
getRemovableOfItem?: (file: UploadFile) => boolean;
onError?: (error: Error) => void;
onPreview?: (file: UploadFile, index: number) => void;
getPreviewableOfItem?: (file: UploadFile) => boolean;
handleUpload?: <T = any>(file: UploadFile, updateProgress: UpdateProgress) => Promise<any>;
disabled?: boolean;
multiple?: boolean;
accept?: string;
maxSize?: number;
maxCount?: number;
selector?: ReactNode;
listType?: UploadListType;
defaultFileList?: (File | UploadFile)[];
fileList?: (File | UploadFile)[];
style?: CSSProperties;
customStyle?: UploadCustomStyle;
}
export declare class Upload extends Component<UploadProps> {}
// Calendar
export { default as Calendar } from './lib/components/Calendar';
// DatePicker
export { default as DatePicker } from './lib/components/DatePicker';
// ZForm
export interface FormShape {
getFieldsValue: Function;
getFieldValue: Function;
getFieldInstance: Function;
setFieldsValue: Function;
setFields: Function;
setFieldsInitialValue: Function;
getFieldDecorator: Function;
getFieldProps: Function;
getFieldsError: Function;
getFieldError: Function;
isFieldValidating: Function;
isFieldsValidating: Function;
isFieldsTouched: Function;
isFieldTouched: Function;
isSubmitting: Function;
submit: Function;
validateFields: Function;
resetFields: Function;
}
export interface ZFormProps extends FormProps {
form?: FormShape;
}
interface ControllerDecoratorOptions {
[key: string]: any;
}
export declare class ZForm extends Component<ZFormProps> {
static formDecorator?: (options: FormShape) => Function;
static controllerDecorator?: (options: ControllerDecoratorOptions) => Function;
static formShape?: FormShape;
}
// Transfer
type TransferSearch = (searchValue: string, item: any) => boolean;
interface TransferSource {
title?: ReactNode;
footer?: ReactNode;
search?: boolean | TransferSearch;
disabled?: boolean;
}
export type TransferProps = Override<
HTMLAttributes<HTMLDivElement>,
{
dataSource?: any[];
renderList?: (options: TransferProps) => ReactNode;
selectedKeys?: string[];
defaultSelectedKeys?: string[];
onChange?: (keys: string[]) => void;
disabled?: boolean;
search?: boolean | TransferSearch;
source?: TransferSource;
target?: TransferSource;
}
>;
export declare class Transfer extends PureComponent<TransferProps> {}
// TransferMenu
export interface TransferMenuProps extends TransferProps {
renderItem?: (item: any) => ReactNode;
}
export declare class TransferMenu extends PureComponent<TransferMenuProps> {}
// TransferTable
export interface TransferTableProps extends TransferProps {
columns?: Column[];
tableProps?: TableProps;
}
export declare class TransferTable extends PureComponent<TransferTableProps> {}
// EditableTable
interface EditableTableAddition extends EditableListAddition {
tip?: ReactNode;
}
interface EditableTableRowDeletion {
onDelete?: (record: any) => void;
getDisabledOfRow?: (record: any) => boolean;
fixed?: boolean;
}
export interface EditableTableProps extends TableProps {
addition?: boolean | EditableTableAddition;
rowDeletion?: boolean | EditableTableRowDeletion;
}
export declare class EditableTable extends PureComponent<EditableTableProps> {}
// EditableList
interface EditableListAddition {
onAdd?: Function;
disabled?: boolean;
}
interface EditableListRowDeletion {
onDelete?: (item: any) => void;
getDisabledOfItem?: (item: any) => boolean;
}
interface EditableListGrid {
itemCol?: ColProps;
actionCol?: ColProps;
}
export interface EditableListProps {
dataSource?: any[];
renderItem?: (item: any) => ReactNode;
grid?: EditableListGrid;
size?: SizeType;
addition?: boolean | EditableListAddition;
itemDeletion?: boolean | EditableListRowDeletion;
}
export declare class EditableList extends PureComponent<EditableListProps> {}
// Notice
export { default as Notice, NoticeProps } from './lib/components/Notice';
// Badge
export { default as Badge, BadgeProps } from './lib/components/Badge';
// Tag
export type TagStyleType =
| 'default'
| 'green'
| 'yellow'
| 'red'
| 'primary'
| 'purple'
| 'lightblue'
| 'blue'
| 'orange'
| 'cyan'
| 'success'
| 'warning'
| 'error'
| 'purple-fill'
| 'lightblue-fill'
| 'blue-fill'
| 'orange-fill'
| 'yellow-fill'
| 'cyan-fill'
| string;
export interface TagProps extends HTMLAttributes<HTMLSpanElement> {
styleType?: TagStyleType;
closable?: boolean;
onClose?: () => void;
icon?: 'circle-fill' | 'circle' | 'loading' | 'custom' | ReactNode;
disabled?: boolean;
border?: boolean;
borderType?: 'default' | 'circle';
suffix?: ReactNode;
}
export interface TagGroupProps extends HTMLAttributes<HTMLDivElement> {
children?: ReactNode;
compact?: boolean;
exposeCount?: number;
popoverProps?: PopoverProps;
}
export declare class TagIcon extends PureComponent<TagProps> {}
export declare class TagGroup extends PureComponent<TagGroupProps> {}
export declare class Tag extends PureComponent<TagProps> {
declare static Icon: typeof TagIcon;
declare static Group: typeof TagGroup;
}
// Popover
interface PopupAlign {
points?: string[];
offset?: number[];
}
export type PopoverPlacement =
| 'topLeft'
| 'top'
| 'topRight'
| 'bottomLeft'
| 'bottom'
| 'bottomRight'
| 'leftTop'
| 'left'
| 'leftBottom'
| 'rightTop'
| 'right'
| 'rightBottom';
export interface GetPopupContainer {
(): HTMLElement;
}
export interface PopoverProps extends HTMLAttributes<HTMLDivElement> {
visible?: boolean;
defaultVisible?: boolean;
onVisibleChange?: (visible: boolean) => void;
trigger?: 'hover' | 'focus' | 'click' | 'contextMenu';
alignPoint?: boolean;
placement?: PopoverPlacement;
align?: PopupAlign;
stretch?: 'with' | 'minWidth' | 'height' | 'minHeight';
popup?: ReactNode;
popupClassName?: string;
popupStyle?: CSSProperties;
zIndex?: number;
getPopupContainer?: GetPopupContainer;
forwardPopupContainer?: boolean | GetPopupContainer;
prefixCls?: string;
animation?: 'fade' | 'zoom' | 'bounce' | 'slide-up';
}
export declare class Popover extends Component<PopoverProps> {}
// Modal
interface ModalGetFooter {
(): ReactNode;
}
interface ModalCustomStyle {
[key: string]: any;
}
export interface ModalProps {
title?: ReactNode;
footer?: ReactNode | ModalGetFooter;
visible?: boolean;
size?: SizeType;
zIndex?: number;
closable?: boolean;
mask?: boolean;
maskClosable?: boolean;
keyboard?: boolean;
onClose?: Function;
onOk?: Function;
afterClose?: Function;
destroyOnClose?: boolean;
maskAnimation?: string;
animation?: string;
className?: string;
wrapClassName?: string;
customStyle?: ModalCustomStyle;
style?: CSSProperties;
bodyStyle?: CSSProperties;
maskStyle?: CSSProperties;
}
interface ModalConfirmHandle {
destroy(): void;
}
interface ModalConfirm {
(options: ModalProps, contentNode?: ReactNode): ModalConfirmHandle;
}
export declare class ModalContent extends Component<HTMLAttributes<HTMLDivElement>> {}
export declare class Modal extends Component<ModalProps> {
static confirm: ModalConfirm;
static alert: ModalConfirm;
static open: ModalConfirm;
static Content: typeof ModalContent;
}
// Drawer
export interface DrawerProps {
visible?: boolean;
mask?: boolean;
maskClosable?: boolean;
keyboard?: boolean;
onClose?: () => void;
destroyOnClose?: boolean;
placement?: 'left' | 'right' | 'top' | 'bottom';
width?: string | number;
height?: string | number;
getContainer?: () => ReactNode;
zIndex?: number;
closeHandler?: null | false;
}
export declare class Drawer extends Component<DrawerProps> {}
// Table
export interface TableScroll {
x?: number;
y?: number;
onScroll?: (e: WheelEvent) => void;
}
type RowKey = (row: any) => string;
export interface RowSelection {
fixed?: boolean;
onChange?: Function;
defaultSelectedRowKeys?: string[];
selectedRowKeys?: string[];
getDisabledOfRow?: (row: any) => boolean;
multiple?: boolean;
selectedTip?: boolean | 'button';
disabled?: boolean;
}
interface DragSorting {
fixed: boolean;
onChange: (record: any, fromIndex: number, toIndex: number) => void;
}
interface ColumnRender {
(col: any, row?: any): ReactNode;
}
export interface Column {
key?: string;
className?: string;
colSpan?: number;
title?: ReactNode;
dataIndex?: string;
width?: string | number;
fixed?: 'left' | 'right';
render?: ColumnRender;
onCellClick?: Function;
onCell?: Function;
onHeaderCell?: Function;
[key: string]: any;
}
interface DefaultColumnConfig {
[key: string]: string;
}
interface TableCustomStyle {
outerPadding?: string;
[key: string]: any;
}
interface TableOrder {
key: string;
state: 'desc' | 'asc';
}
export interface TableConditionChangeEventOrder {
order: TableOrder;
filters: { key: string; value: string }[];
searchValue: string;
}
interface ConditionChangeEvent {
(condition: TableConditionChangeEventOrder): void;
}
interface TableContextMenu {
(row: object, hide: boolean): ReactNode;
}
export interface TableProps {
pagination?: PaginationProps | null;
dataSource?: any[];
columns?: Column[];
columnPlaceholder?: boolean;
defaultColumnConfig?: DefaultColumnConfig;
onColumnConfigChange?: (config: DefaultColumnConfig) => void;
expandedRowRender?: (row: any) => ReactNode;
expandIconAsCell?: boolean;
expandIconColumnIndex?: number;
hideExpandIcon?: boolean;
defaultExpandedRowKeys?: string[];
expandedRowKeys?: string[];
defaultExpandAllRows?: boolean;
onExpandedRowsChange?: (row: any) => void;
onExpand?: Function;
onRow?: (row: any, index: number) => any;
onHeaderRow?: (row: any, index: number) => any;
rowSelection?: RowSelection | true;
dragSorting?: boolean | DragSorting;
onRowSelect?: (keys: string[]) => void;
showHeader?: boolean;
columnResizable?: boolean;
title?: () => ReactNode;
footer?: () => ReactNode;
emptyContent?: ReactNode;
errorContent?: ReactNode;
handleSearch?: (row: any, searchValue: string) => boolean;
customStyle?: TableCustomStyle;
scroll?: TableScroll;
tableLayout?: 'auto' | 'fixed';
rowKey?: string | RowKey;
zebraCrossing?: boolean;
components?: any;
defaultOrder?: TableOrder;
order?: TableOrder;
onConditionChange?: ConditionChangeEvent;
doNotHandleCondition?: boolean;
contextMenu?: TableContextMenu;
className?: string;
}
interface ColumnConfigButtonProps extends ButtonProps {
modalProps?: ModalProps;
}
declare class TableColumnConfigButton extends Component<ColumnConfigButtonProps> {}
interface TableExpandedRowContentProps extends HTMLAttributes<HTMLDivElement> {}
declare class TableExpandedRowContent extends Component<TableExpandedRowContentProps> {}
declare class HoverDisplayArea extends Component<HTMLAttributes<HTMLDivElement>> {}
export declare class Table extends Component<TableProps> {
static ColumnConfigButton: typeof TableColumnConfigButton;
static SearchInput: typeof Input['Search'];
static ActionList: typeof ActionList;
static ExpandedRowContent: typeof TableExpandedRowContent;
static HoverDisplayArea: typeof HoverDisplayArea;
static getColumnConfigFromLocalStorage: typeof Function;
static setColumnConfigToLocalStorage: typeof Function;
}
// Form
export interface FormLabelCol {
span?: number;
offset?: number;
pull?: number;
push?: number;
}
interface FormItemTip {
icon?: ReactNode;
content?: ReactNode;
}
export interface FormItemProps extends RowProps {
label?: ReactNode;
labelCol?: FormLabelCol;
controllerCol?: FormLabelCol;
help?: ReactNode;
required?: boolean;
status?: 'default' | 'success' | 'warning' | 'error' | 'loading';
shareStatus?: boolean;
tip?: ReactNode | FormItemTip;
}
export type FormGroupProps = Override<
HTMLAttributes<HTMLDivElement>,
{
title?: ReactNode;
itemProps?: FormItemProps;
}
>;
export interface FormSubAreaProps extends HTMLAttributes<HTMLFormElement> {
itemProps?: FormItemProps;
}
export interface FormProps extends HTMLAttributes<HTMLFormElement> {
size?: 'md' | 'lg';
itemProps?: FormItemProps;
}
declare class FormItem extends PureComponent<FormItemProps> {}
declare class FormGroup extends Component<FormGroupProps> {}
declare class FormSubArea extends PureComponent<FormSubAreaProps> {}
export declare class Form extends PureComponent<FormProps> {
static Item: typeof FormItem;
static Group: typeof FormGroup;
static SubArea: typeof FormSubArea;
}
// Card
export interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {
comment?: ReactNode;
}
declare class CardHeader extends Component<CardHeaderProps> {}
declare class CardContent extends Component<HTMLAttributes<HTMLDivElement>> {}
declare class CardFooter extends Component<HTMLAttributes<HTMLDivElement>> {}
declare class CardAction extends Component<HTMLAttributes<HTMLDivElement>> {}
export type CardProps = HTMLAttributes<HTMLDivElement>;
export declare class Card extends PureComponent<CardProps> {
static Header: typeof CardHeader;
static Content: typeof CardContent;
static Footer: typeof CardFooter;
static Action: typeof CardAction;
}
// Steps
interface Step {
key?: string | number;
step?: ReactNode;
title?: ReactNode;
remark?: ReactNode;
status?: 'disabled' | 'error' | 'success' | 'normal';
}
export interface StepsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
steps: Step[];
current?: string | number;
status?: 'current' | 'loading' | 'error';
direction?: 'horizontal' | 'vertical';
nowrap?: boolean;
onChange?: (current: string | number) => void;
}
export declare class Steps extends Component<StepsProps> {}
// Message
export type MessageProps = Override<
HTMLAttributes<HTMLDivElement>,
{
closable?: boolean;
title?: ReactNode;
footer?: ReactNode;
styleType?: 'default' | 'success' | 'loading' | 'warning' | 'error';
}
>;
interface MessageOption {
zIndex?: number;
style?: CSSProperties;
className?: string;
}
interface MessageHandle {
destroy(): void;
}
interface MessageMethod {
(content: ReactNode, duration?: number, onClose?: () => void, option?: MessageOption): MessageHandle;
}
interface MessageConfig {
duration?: number;
getContainer?: () => ReactNode;
top?: number;
}
export declare class Message extends Component<MessageProps> {
static message: MessageMethod;
static info: MessageMethod;
static warning: MessageMethod;
static success: MessageMethod;
static error: MessageMethod;
static loading: MessageMethod;
static config: (config: MessageConfig) => void;
}
// Pagination
interface GetPaginationShowTotal {
(total: number): string;
}
interface ShowQuickJumperObject {
goButton?: ReactNode;
}
export type PaginationProps = Override<
HTMLAttributes<HTMLUListElement>,
{
current?: number;
defaultCurrent?: number;
total?: number;
showTotal?: boolean | GetPaginationShowTotal;
pageSize?: number;
defaultPageSize?: number;
onChange?: (page: number, pageSize: number) => void;
onAdvise?: (newCurrent: number, pageSize: number) => void;
showSizeChanger?: boolean;
showLessItems?: boolean;
onPageSizeChange?: (current: number, pageSize: number) => void;
showPrevNextJumpers?: boolean;
showQuickJumper?: boolean | ShowQuickJumperObject;
showTitle?: boolean;
pageSizeOptions?: Array<number | string>;
simple?: boolean;
size?: SizeType;
}
>;
export declare class Pagination extends Component<PaginationProps> {}
// Progress
interface ProgressFormat {
(percent: number): string;
}
export interface ProgressProps extends HTMLAttributes<HTMLDivElement> {
percent?: number;
color?: 'success' | 'warn' | 'error' | string;
format?: null | ProgressFormat;
}
export declare class Progress extends Component<ProgressProps> {}
// Loading
export interface LoadingProps extends HTMLAttributes<HTMLDivElement> {
loading?: boolean;
indicator?: ReactNode;
tip?: ReactNode;
maskStyle?: CSSProperties;
maskClassName?: string;
}
export declare class Loading extends Component<LoadingProps> {}
// LocaleProvider
interface LocaleProviderProps {
children?: ReactNode;
locale?: any;
}
export declare class LocaleProvider extends Component<LocaleProviderProps> {}