Skip to content

Catégorie de méga-menu - DsfrNavigationMegaMenuCategory

🌟 Introduction

La catégorie de méga-menu est un composant qui représente une colonne dans un méga-menu de navigation. Elle affiche un titre et une liste de liens organisés verticalement.

Le composant DsfrNavigationMegaMenuCategory crée une section structurée dans un méga-menu avec un titre cliquable et une liste de liens de navigation.

Important

Ce composant NE devrait PAS être utilisé directement, il est utilisé en interne par son parent DsfrNavigation

📐 Structure

La catégorie de méga-menu est composée des éléments suivants :

  • un conteneur de colonne responsive (fr-col-12 fr-col-lg-3)
  • un titre de catégorie dans un élément <h5> avec lien
  • une liste non-ordonnée (<ul>) de liens de navigation
  • chaque lien utilise le composant DsfrNavigationMenuLink

🛠️ Props

nomtypedéfautobligatoiredescription
titlestringTitre de la catégorie affiché en en-tête
linksDsfrNavigationMenuLinkProps[]Tableau des liens à afficher dans cette catégorie
activebooleanfalseIndique si cette catégorie est actuellement active

📡 Événements

DsfrNavigationMegaMenuCategory ne déclenche pas d'événements spécifiques.

🧩 Slots

DsfrNavigationMegaMenuCategory n'a pas de slots personnalisés.

📝 Exemples

Exemple d'utilisation de DsfrNavigationMegaMenuCategory dans un méga-menu :

vue
<template>
  <DsfrNavigationMegaMenu
    title="Services"
    :menus="[
      {
        title: 'Services administratifs',
        active: false,
        links: [
          { to: '/carte-identite', text: 'Carte d\'identité' },
          { to: '/passeport', text: 'Passeport' },
          { to: '/permis', text: 'Permis de conduire' },
        ],
      },
    ]"
  />
</template>

⚙️ Code source du composant

vue
<script setup lang="ts">
import type { DsfrNavigationMegaMenuCategoryProps } from './DsfrNavigation.types'

import DsfrNavigationMenuLink from './DsfrNavigationMenuLink.vue'

export type { DsfrNavigationMegaMenuCategoryProps }

withDefaults(defineProps<DsfrNavigationMegaMenuCategoryProps>(), {

})
</script>

<template>
  <div class="fr-col-12 fr-col-lg-3">
    <h5 class="fr-mega-menu__category">
      <a
        class="fr-nav__link"
        href="#"
        @click.prevent=""
      >
        {{ title }}
      </a>
    </h5>
    <ul class="fr-mega-menu__list">
      <li
        v-for="(link, idx) of links"
        :key="idx"
        class="fr-nav__link"
      >
        <DsfrNavigationMenuLink
          v-bind="link"
        />
      </li>
    </ul>
  </div>
</template>
ts
import type { RouteLocationRaw } from 'vue-router'

export type DsfrNavigationMenuLinkProps = {
  id?: string
  to?: string | RouteLocationRaw
  text?: string
  icon?: string
  onClick?: ($event: MouseEvent) => void
}

export type DsfrNavigationMenuItemProps = {
  id?: string
  active?: boolean
}

export type DsfrNavigationMenuProps = {
  id?: string
  title: string
  links?: DsfrNavigationMenuLinkProps[]
  expandedId?: string
  active?: boolean
}

export type DsfrNavigationItemProps = {
  id?: string
  active?: boolean
}

export type DsfrNavigationMegaMenuCategoryProps = {
  title: string
  active?: boolean
  links: DsfrNavigationMenuLinkProps[]
}

export type DsfrNavigationMegaMenuProps = {
  id?: string
  title: string
  description?: string
  link?: { to: RouteLocationRaw, text: string }
  menus?: DsfrNavigationMegaMenuCategoryProps[]
  expandedId?: string
  active?: boolean
}

export type DsfrNavigationMenuLinks = (DsfrNavigationMenuLinkProps | DsfrNavigationMegaMenuProps | DsfrNavigationMenuProps)[]

export type DsfrNavigationProps = {
  id?: string
  label?: string
  navItems: (
    DsfrNavigationMenuLinkProps
    | DsfrNavigationMenuProps
    | DsfrNavigationMegaMenuProps
  )[]
}