import type { MENU_LINK_TYPE } from '~/types/enum/layout' import type { LINK_TARGET } from '~/types/enum/enums' interface IconItem { name?: string avatarId?: number | null avatarByDefault?: string } /** * Entrée d'un menu, correspondant à un lien de navigation */ interface MenuItem { label: string icon?: IconItem to?: string /** Type de lien (interne, externe, v1) */ type: MENU_LINK_TYPE avatar?: number /** Correspond à la page actuelle */ active: boolean /** Définit l'attribut 'target' du lien */ target?: LINK_TARGET /** Indique si l'item est à la fin d'une sous-section (bordure basse plus épaisse) */ endOfSubsection?: boolean /** Sous-éléments du menu */ children?: MenuItems /** Actions du menu */ actions?: MenuItems /** Indique si le menu est étendu */ expanded?: boolean } /** * Sous-menu, regroupant d'autres MenuItem et/ou MenuGroup */ interface MenuGroup { label: string icon?: IconItem children?: MenuItems actions?: MenuItems target?: LINK_TARGET /** Lien de navigation */ to?: string /** Indique si le menu est étendu */ expanded?: boolean } type MenuItems = Array /** * Service responsable de la génération d'un menu */ interface MenuBuilder { getMenuName: () => string build: () => MenuItem | MenuGroup | null } interface TreeSelectItem { id: string label: string normalizedLabel?: string value?: number | string type: 'category' | 'subcategory' | 'item' parentId?: string level: number }