@douyinfe/semi-ui
Version:
A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.
92 lines (91 loc) • 3.5 kB
TypeScript
import BaseComponent, { BaseProps } from '../_base/baseComponent';
import React from 'react';
import PropTypes from 'prop-types';
import '@douyinfe/semi-foundation/lib/es/navigation/navigation.css';
import SubNavFoundation, { SubNavAdapter } from '@douyinfe/semi-foundation/lib/es/navigation/subNavFoundation';
import { NavContextType } from './nav-context';
export interface SubNavProps extends BaseProps {
disabled?: boolean;
dropdownStyle?: React.CSSProperties;
icon?: React.ReactNode;
indent?: boolean | number;
isCollapsed?: boolean;
isOpen?: boolean;
itemKey?: string | number;
level?: number;
maxHeight?: number;
onMouseEnter?: React.MouseEventHandler<HTMLLIElement>;
onMouseLeave?: React.MouseEventHandler<HTMLLIElement>;
text?: React.ReactNode;
expandIcon?: React.ReactNode;
}
export interface SubNavState {
isHovered: boolean;
}
export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
static contextType: React.Context<NavContextType>;
static propTypes: {
/**
* Unique identification
*/
itemKey: PropTypes.Requireable<NonNullable<string | number>>;
/**
* Copywriting
*/
text: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
/**
* Whether child navigation is expanded
*/
isOpen: PropTypes.Requireable<boolean>;
/**
* Whether it is in the state of being stowed to the sidebar
*/
isCollapsed: PropTypes.Requireable<boolean>;
/**
* Whether to keep the left Icon placeholder
*/
indent: PropTypes.Requireable<NonNullable<number | boolean>>;
/**
* Nested child elements
*/
children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
style: PropTypes.Requireable<object>;
/**
* Icon name on the left
*/
icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
/**
* Maximum height (for animation)
*/
maxHeight: PropTypes.Requireable<number>;
onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
disabled: PropTypes.Requireable<boolean>;
level: PropTypes.Requireable<number>;
};
static defaultProps: {
level: number;
indent: boolean;
isCollapsed: boolean;
isOpen: boolean;
maxHeight: number;
disabled: boolean;
};
titleRef: React.RefObject<HTMLDivElement>;
itemRef: React.RefObject<HTMLLIElement>;
foundation: SubNavFoundation;
context: NavContextType;
constructor(props: SubNavProps);
setItemRef: (ref: HTMLLIElement | React.RefObject<HTMLLIElement>) => void;
setTitleRef: (ref: HTMLDivElement | React.RefObject<HTMLDivElement>) => void;
_invokeContextFunc(funcName: string, ...args: any[]): any;
get adapter(): SubNavAdapter<SubNavProps, SubNavState>;
handleClick: (e: React.MouseEvent) => void;
handleKeyPress: (e: React.KeyboardEvent) => void;
handleDropdownVisible: (visible: boolean) => void;
renderIcon(icon: React.ReactNode, pos: string, withTransition?: boolean, isToggleIcon?: boolean, key?: number | string): React.JSX.Element;
renderTitleDiv(): React.JSX.Element;
renderSubUl(): React.JSX.Element;
wrapDropdown(elem?: React.ReactNode): React.ReactNode;
render(): React.JSX.Element;
}