import BaseComponent, { BaseProps } from '../_base/baseComponent'; import React, { ReactElement, ReactNode } from 'react'; import PropTypes from 'prop-types'; import NavigationFoundation, { NavigationAdapter } from '@douyinfe/semi-foundation/lib/cjs/navigation/foundation'; import SubNav, { SubNavProps } from './SubNav'; import Item, { NavItemProps, ItemKey } from './Item'; import Footer, { NavFooterProps } from './Footer'; import Header, { NavHeaderProps } from './Header'; import '@douyinfe/semi-foundation/lib/cjs/navigation/navigation.css'; import { DropdownProps } from '../dropdown'; export type { CollapseButtonProps } from './CollapseButton'; export type { NavFooterProps } from './Footer'; export type { NavHeaderProps } from './Header'; export type { NavItemProps, ItemKey } from './Item'; export type { SubNavProps } from './SubNav'; export type Mode = 'vertical' | 'horizontal'; export interface OnSelectedData { itemKey: ItemKey; selectedKeys: React.ReactText[]; selectedItems: (NavItemProps | SubNavProps)[]; domEvent: React.MouseEvent; isOpen: boolean; } export interface SubNavPropsWithItems extends SubNavProps { items?: (SubNavPropsWithItems | string)[]; } export interface NavItemPropsWithItems extends NavItemProps { items?: (NavItemPropsWithItems | string)[]; } export type NavItems = (string | SubNavPropsWithItems | NavItemPropsWithItems)[]; export interface NavProps extends BaseProps { bodyStyle?: React.CSSProperties; children?: React.ReactNode; defaultIsCollapsed?: boolean; defaultOpenKeys?: React.ReactText[]; defaultSelectedKeys?: React.ReactText[]; subDropdownProps?: DropdownProps; expandIcon?: React.ReactNode; footer?: React.ReactNode | NavFooterProps; header?: React.ReactNode | NavHeaderProps; isCollapsed?: boolean; items?: NavItems; limitIndent?: boolean; mode?: Mode; multiple?: boolean; openKeys?: React.ReactText[]; prefixCls?: string; selectedKeys?: React.ReactText[]; subNavCloseDelay?: number; subNavMotion?: boolean; subNavOpenDelay?: number; toggleIconPosition?: string; tooltipHideDelay?: number; tooltipShowDelay?: number; getPopupContainer?: () => HTMLElement; onClick?: (data: { itemKey?: ItemKey; domEvent?: MouseEvent; isOpen?: boolean; }) => void; onCollapseChange?: (isCollapse: boolean) => void; onDeselect?: (data?: any) => void; onOpenChange?: (data: { itemKey?: ItemKey; openKeys?: ItemKey[]; domEvent?: MouseEvent; isOpen?: boolean; }) => void; onSelect?: (data: OnSelectedData) => void; renderWrapper?: ({ itemElement, isSubNav, isInSubNav, props }: { itemElement: ReactElement; isInSubNav: boolean; isSubNav: boolean; props: NavItemProps | SubNavProps; }) => ReactNode; } export interface NavState { isCollapsed: boolean; openKeys: ItemKey[]; items: any[]; itemKeysMap: { [itemKey: string]: ItemKey[]; }; selectedKeys: ItemKey[]; } declare class Nav extends BaseComponent { static Sub: typeof SubNav; static Item: typeof Item; static Header: typeof Header; static Footer: typeof Footer; static propTypes: { collapseIcon: PropTypes.Requireable; defaultOpenKeys: PropTypes.Requireable[]>; openKeys: PropTypes.Requireable[]>; defaultSelectedKeys: PropTypes.Requireable[]>; expandIcon: PropTypes.Requireable; selectedKeys: PropTypes.Requireable[]>; mode: PropTypes.Requireable; onSelect: PropTypes.Requireable<(...args: any[]) => any>; onClick: PropTypes.Requireable<(...args: any[]) => any>; onOpenChange: PropTypes.Requireable<(...args: any[]) => any>; items: PropTypes.Requireable; isCollapsed: PropTypes.Requireable; defaultIsCollapsed: PropTypes.Requireable; onCollapseChange: PropTypes.Requireable<(...args: any[]) => any>; multiple: PropTypes.Requireable; onDeselect: PropTypes.Requireable<(...args: any[]) => any>; subNavMotion: PropTypes.Requireable>; subNavCloseDelay: PropTypes.Requireable; subNavOpenDelay: PropTypes.Requireable; tooltipShowDelay: PropTypes.Requireable; tooltipHideDelay: PropTypes.Requireable; children: PropTypes.Requireable; style: PropTypes.Requireable; bodyStyle: PropTypes.Requireable; className: PropTypes.Requireable; toggleIconPosition: PropTypes.Requireable; prefixCls: PropTypes.Requireable; header: PropTypes.Requireable>; footer: PropTypes.Requireable>; limitIndent: PropTypes.Requireable; getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>; }; static __SemiComponentName__: string; static defaultProps: any; itemsChanged: boolean; foundation: NavigationFoundation; constructor(props: NavProps); static getDerivedStateFromProps(props: NavProps, state: NavState): Partial; componentDidMount(): void; componentDidUpdate(prevProps: NavProps): void; get adapter(): NavigationAdapter; /** * Render navigation items recursively * * @param {NavItem[]} items * @returns {JSX.Element} */ renderItems(items?: (SubNavPropsWithItems | NavItemPropsWithItems)[], level?: number): React.JSX.Element; onCollapseChange: () => void; render(): React.JSX.Element; } export default Nav;