layout.d.ts 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import type { MENU_LINK_TYPE } from '~/types/enum/layout'
  2. import type { LINK_TARGET } from '~/types/enum/enums'
  3. interface IconItem {
  4. name?: string
  5. avatarId?: number | null
  6. avatarByDefault?: string
  7. }
  8. /**
  9. * Entrée d'un menu, correspondant à un lien de navigation
  10. */
  11. interface MenuItem {
  12. label: string
  13. icon?: IconItem
  14. to?: string
  15. /** Type de lien (interne, externe, v1) */
  16. type: MENU_LINK_TYPE
  17. avatar?: number
  18. /** Correspond à la page actuelle */
  19. active: boolean
  20. /** Définit l'attribut 'target' du lien */
  21. target?: LINK_TARGET
  22. /** Indique si l'item est à la fin d'une sous-section (bordure basse plus épaisse) */
  23. endOfSubsection?: boolean
  24. }
  25. /**
  26. * Sous-menu, regroupant d'autres MenuItem et/ou MenuGroup
  27. */
  28. interface MenuGroup {
  29. label: string
  30. icon?: IconItem
  31. children?: MenuItems
  32. actions?: MenuItems
  33. target?: LINK_TARGET
  34. }
  35. type MenuItems = Array<MenuItem | MenuGroup>
  36. /**
  37. * Service responsable de la génération d'un menu
  38. */
  39. interface MenuBuilder {
  40. getMenuName: () => string
  41. build: () => MenuItem | MenuGroup | null
  42. }