@alifd/next
Version:
A configurable component library for web built on React.
146 lines (145 loc) • 6.66 kB
TypeScript
import React, { Component, type ReactNode, type FocusEvent, type MouseEvent, type KeyboardEvent } from 'react';
import PropTypes from 'prop-types';
import { type ClassPropsWithDefault } from '../../util';
import type { ItemProps, K2N, MenuProps, P2N } from '../types';
import type MenuItem from './item';
import type SelectableItem from './selectable-item';
export interface MenuState {
lastVisibleIndex: number | undefined;
root: Menu;
newChildren: ReactNode[];
_k2n: K2N;
_p2n: P2N;
tabbableKey: string | undefined | null;
openKeys: string[];
selectedKeys: string[];
focusedKey: string | null | undefined;
lastMode?: MenuProps['mode'];
}
export type MenuPropsWithDefaults = ClassPropsWithDefault<MenuProps, typeof Menu.defaultProps>;
export declare class Menu extends Component<MenuProps, MenuState> {
static isNextMenu: boolean;
static propTypes: {
prefix: PropTypes.Requireable<string>;
pure: PropTypes.Requireable<boolean>;
rtl: PropTypes.Requireable<boolean>;
className: PropTypes.Requireable<string>;
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
onItemClick: PropTypes.Requireable<(...args: any[]) => any>;
openKeys: PropTypes.Requireable<NonNullable<string | any[] | null | undefined>>;
defaultOpenKeys: PropTypes.Requireable<NonNullable<string | any[] | null | undefined>>;
defaultOpenAll: PropTypes.Requireable<boolean>;
onOpen: PropTypes.Requireable<(...args: any[]) => any>;
mode: PropTypes.Requireable<string>;
triggerType: PropTypes.Requireable<string>;
openMode: PropTypes.Requireable<string>;
inlineIndent: PropTypes.Requireable<number>;
inlineArrowDirection: PropTypes.Requireable<string>;
popupAutoWidth: PropTypes.Requireable<boolean>;
popupAlign: PropTypes.Requireable<string>;
popupProps: PropTypes.Requireable<object>;
popupClassName: PropTypes.Requireable<string>;
popupStyle: PropTypes.Requireable<object>;
selectedKeys: PropTypes.Requireable<NonNullable<string | any[] | null | undefined>>;
defaultSelectedKeys: PropTypes.Requireable<NonNullable<string | any[] | null | undefined>>;
onSelect: PropTypes.Requireable<(...args: any[]) => any>;
selectMode: PropTypes.Requireable<string>;
shallowSelect: PropTypes.Requireable<boolean>;
hasSelectedIcon: PropTypes.Requireable<boolean>;
labelToggleChecked: PropTypes.Requireable<boolean>;
isSelectIconRight: PropTypes.Requireable<boolean>;
direction: PropTypes.Requireable<string>;
hozAlign: PropTypes.Requireable<string>;
hozInLine: PropTypes.Requireable<boolean>;
renderMore: PropTypes.Requireable<(...args: any[]) => any>;
header: PropTypes.Requireable<PropTypes.ReactNodeLike>;
footer: PropTypes.Requireable<PropTypes.ReactNodeLike>;
footerWrapperClassName: PropTypes.Requireable<string>;
autoFocus: PropTypes.Requireable<boolean>;
focusedKey: PropTypes.Requireable<NonNullable<string | number | object | null | undefined>>;
focusable: PropTypes.Requireable<boolean>;
onItemFocus: PropTypes.Requireable<(...args: any[]) => any>;
onBlur: PropTypes.Requireable<(...args: any[]) => any>;
embeddable: PropTypes.Requireable<boolean>;
onItemKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
expandAnimation: PropTypes.Requireable<boolean>;
itemClassName: PropTypes.Requireable<string>;
icons: PropTypes.Requireable<object>;
flatenContent: PropTypes.Requireable<boolean>;
locale: PropTypes.Requireable<object>;
defaultPropsConfig: PropTypes.Requireable<object>;
errorBoundary: PropTypes.Requireable<NonNullable<boolean | object | null | undefined>>;
warning: PropTypes.Requireable<boolean>;
device: PropTypes.Requireable<string>;
popupContainer: PropTypes.Requireable<any>;
};
static defaultProps: {
prefix: string;
pure: boolean;
defaultOpenKeys: never[];
defaultOpenAll: boolean;
onOpen: () => void;
mode: string;
triggerType: string;
openMode: string;
inlineIndent: number;
inlineArrowDirection: string;
popupAutoWidth: boolean;
popupAlign: string;
popupProps: {};
defaultSelectedKeys: never[];
onSelect: () => void;
shallowSelect: boolean;
hasSelectedIcon: boolean;
isSelectIconRight: boolean;
labelToggleChecked: boolean;
direction: string;
hozAlign: string;
hozInLine: boolean;
autoFocus: boolean;
focusable: boolean;
embeddable: boolean;
onItemFocus: () => void;
onItemKeyDown: () => void;
onItemClick: () => void;
expandAnimation: boolean;
icons: {};
};
static displayName: string;
static getDerivedStateFromProps(nextProps: MenuPropsWithDefaults, prevState: MenuState): Partial<MenuState>;
readonly props: MenuPropsWithDefaults;
popupNodes: HTMLElement[];
menuNode: HTMLUListElement;
menuContent: HTMLUListElement | null;
menuHeader: HTMLLIElement | null;
menuFooter: HTMLLIElement | null;
menuItemSizes: number[];
constructor(props: MenuProps);
componentDidMount(): void;
componentDidUpdate(prevProps: MenuProps, prevState: MenuState): void;
componentWillUnmount(): void;
adjustChildrenWidth(): void;
onBlur(e: FocusEvent<HTMLUListElement>): void;
getInitOpenKeys(props: MenuPropsWithDefaults, _k2n: K2N): string[];
getUpdateChildren: () => {
newChildren: React.ReactNode[];
_k2n: K2N;
_p2n: P2N;
};
handleOpen(key: string, open: boolean, triggerType?: string, e?: Event): void;
getPath(key: string, _k2n: K2N, _p2n: P2N): {
keyPath: string[];
labelPath: ({} | null | undefined)[];
};
handleSelect(key: string, select: boolean, menuItem: SelectableItem): void;
handleItemClick(key: string, item: MenuItem, e: MouseEvent | KeyboardEvent): void;
getAvailableKey(pos: string, prev: boolean): string | null;
getParentKey(pos: string): string;
handleItemKeyDown(key: string, type: ItemProps['type'], item: MenuItem, e: KeyboardEvent): void;
menuContentRef: (ref: HTMLUListElement | null) => void;
menuHeaderRef: (ref: HTMLLIElement | null) => void;
menuFooterRef: (ref: HTMLLIElement | null) => void;
render(): React.JSX.Element;
}
declare const _default: typeof Menu;
export default _default;