index.d.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132
  1. import * as React from 'react';
  2. import type { MenuRef as RcMenuRef } from 'rc-menu';
  3. import { ItemGroup } from 'rc-menu';
  4. import type { ItemType, MenuItemType } from './interface';
  5. import type { MenuProps } from './menu';
  6. import type { MenuTheme } from './MenuContext';
  7. import MenuDivider from './MenuDivider';
  8. import Item from './MenuItem';
  9. import type { MenuItemProps } from './MenuItem';
  10. import SubMenu from './SubMenu';
  11. import type { SubMenuProps } from './SubMenu';
  12. export type { MenuItemGroupProps } from 'rc-menu';
  13. export type { MenuDividerProps } from './MenuDivider';
  14. export type { MenuItemProps, MenuProps, MenuTheme, SubMenuProps };
  15. export type MenuRef = {
  16. menu: RcMenuRef | null;
  17. focus: (options?: FocusOptions) => void;
  18. };
  19. type ComponentProps = MenuProps & React.RefAttributes<MenuRef>;
  20. type GenericItemType<T = unknown> = T extends infer U extends MenuItemType ? unknown extends U ? ItemType : ItemType<U> : ItemType;
  21. type GenericComponentProps<T = unknown> = Omit<ComponentProps, 'items'> & {
  22. items?: GenericItemType<T>[];
  23. };
  24. type CompoundedComponent = React.ForwardRefExoticComponent<GenericComponentProps> & {
  25. Item: typeof Item;
  26. SubMenu: typeof SubMenu;
  27. Divider: typeof MenuDivider;
  28. ItemGroup: typeof ItemGroup;
  29. };
  30. type GenericComponent = Omit<CompoundedComponent, ''> & (<T extends MenuItemType>(props: GenericComponentProps<T>) => ReturnType<CompoundedComponent>);
  31. declare const Menu: GenericComponent;
  32. export default Menu;