f1d853352b0e28ab5842a4719aed7b8583f7f9140427490c82a5df3f09941bc38fa751eecb673a3c728ee8a555e808c8e272e590f9573cf1bddfffc23c291c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import type { Ref } from 'vue';
  2. import type { RouteLocationRaw } from 'vue-router';
  3. import type { MenuProps } from './menu';
  4. export interface MenuItemRegistered {
  5. index: string;
  6. indexPath: string[];
  7. active: boolean;
  8. }
  9. export interface MenuItemClicked {
  10. index: string;
  11. indexPath: string[];
  12. route?: RouteLocationRaw;
  13. }
  14. export interface MenuProvider {
  15. openedMenus: string[];
  16. items: Record<string, MenuItemRegistered>;
  17. subMenus: Record<string, MenuItemRegistered>;
  18. activeIndex?: string;
  19. isMenuPopup: boolean;
  20. props: MenuProps;
  21. addMenuItem: (item: MenuItemRegistered) => void;
  22. removeMenuItem: (item: MenuItemRegistered) => void;
  23. addSubMenu: (item: MenuItemRegistered) => void;
  24. removeSubMenu: (item: MenuItemRegistered) => void;
  25. openMenu: (index: string, indexPath: string[]) => void;
  26. closeMenu: (index: string, indexPath: string[]) => void;
  27. handleMenuItemClick: (item: MenuItemClicked) => void;
  28. handleSubMenuClick: (subMenu: MenuItemRegistered) => void;
  29. }
  30. export interface SubMenuProvider {
  31. addSubMenu: (item: MenuItemRegistered) => void;
  32. removeSubMenu: (item: MenuItemRegistered) => void;
  33. handleMouseleave?: (deepDispatch: boolean) => void;
  34. mouseInChild: Ref<boolean>;
  35. level: number;
  36. }