Skip to content

Sommaire - DsfrSummary

🌟 Introduction

Le composant DsfrSummary est conçu pour afficher un sommaire accessible et stylisé selon les standards du Design System de l'État Français (DSFR). Il est idéal pour améliorer la navigation dans une page en proposant des liens vers les différentes sections.

🏅 La documentation sur le tag sommaire le DSFR

La story sur le sommaire sur le storybook de VueDsfr

📐 Structure

Le composant affiche :

  • Un titre configuré via la prop title.
  • Une liste ordonnée (<ol>) contenant des liens vers des ancres définies via la prop anchors.

🛠️ Props

NomTypeDéfautDescription
titlestring'Sommaire'Titre du sommaire, affiché au-dessus de la liste des liens.
anchors{ link: string, name: string }[][]Liste des ancres à afficher dans le sommaire. Chaque élément correspond à un lien.

Format de anchors

NomTypeDescription
linkstringURL ou ancre vers laquelle le lien doit pointer (ex. #section1).
namestringTexte affiché pour l'ancre.

📡 Événements

Aucun événement spécifique n'est émis par ce composant.

🧩 Slots

Aucun slot disponible pour ce composant.

📝 Exemples

Exemple de base

vue
<DsfrSummary
  title="Sommaire de la page"
  :anchors="[
    { link: '#introduction', name: 'Introduction' },
    { link: '#chapitre1', name: 'Chapitre 1' },
    { link: '#chapitre2', name: 'Chapitre 2' }
  ]"
/>

Exemple complet

vue
<script lang="ts" setup>
import DsfrSummary from '../DsfrSummary.vue'

const title = 'Exemple de sommaire'
const anchors = [
  { link: '#', name: 'Première étape' },
  { link: '#', name: 'Deuxième étape' },
  { link: '#', name: 'Troisième étape' },
]
</script>

<template>
  <DsfrSummary
    :title="title"
    :anchors="anchors"
  />
</template>

⚙️ Code source du composant

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

export type { DsfrSummaryProps }

withDefaults(defineProps<DsfrSummaryProps>(), {
  title: 'Sommaire',
  anchors: () => [],
})
</script>

<template>
  <nav
    class="fr-summary"
    role="navigation"
    aria-labelledby="fr-summary-title"
  >
    <h2
      id="fr-summary-title"
      class="fr-summary__title"
    >
      {{ title }}
    </h2>
    <ol class="fr-summary__list">
      <li
        v-for="(anchor, idx) in anchors"
        :key="idx"
      >
        <a
          class="fr-summary__link"
          :href="anchor.link"
        >{{ anchor.name }}</a>
      </li>
    </ol>
  </nav>
</template>
ts
export type DsfrSummaryProps = {
  title: string
  anchors: { link: string, name: string }[]
}