Liste de lien du pied de page - DsfrFooterLinkList 
🌟 Introduction 
Le composant DsfrFooterLinkList est un élément de liste personnalisable pour les pieds de page. Il permet d'afficher une liste de liens catégorisés, adaptés à des besoins variés, notamment pour les sites web ayant besoin d'un pied de page structuré et accessible.
📐 Structure 
Le composant se compose de deux parties principales :
- Titre de la Catégorie : Affiché en haut de la liste des liens.
- Liste des Liens : Une liste de liens (DsfrFooterLink) qui peuvent être internes (avecRouterLink) ou externes (avec une balise<a>).
🛠️ Props 
| Nom de Prop | Type | Par défaut | Description | 
|---|---|---|---|
| categoryName | string | 'Nom de la catégorie' | Le nom de la catégorie de liens affichée. | 
| links | Array<DsfrFooterLinkProps> | [] | Un tableau d'objets représentant les liens à afficher. Chaque objet peut avoir les propriétés de DsfrFooterLinkProps. | 
| titleTag | string | 'h3' | Le type de balise pour afficher categoryName | 
📡Événements 
Pas d'événements émis directement par ce composant.
🧩 Slots 
Aucun slot n'est disponible pour ce composant. Tout est basé sur les props fournies pour générer la vue.
📝 Exemples 
Ce composant est utilisé en interne dans DsfrFooter, il n’y a pas de raison de l’utiliser en dehors.
⚙️ Code source du composant 
vue
<script lang="ts" setup>
import type { DsfrFooterLinkListProps } from './DsfrFooter.types'
export type {
  DsfrFooterLinkListProps,
}
withDefaults(defineProps<DsfrFooterLinkListProps>(), {
  categoryName: 'Nom de la catégorie',
  links: () => [],
  titleTag: 'h3',
})
</script>
<template>
  <div>
    <component
      :is="titleTag"
      class="fr-footer__top-cat"
    >
      {{ categoryName }}
    </component>
    <ul class="fr-footer__top-list">
      <li
        v-for="(link, idx) in links"
        :key="idx"
      >
        <a
          v-if="typeof link.to === 'string' && link.to.startsWith('http')"
          class="fr-footer__top-link"
          target="_blank"
          rel="noopener noreferrer"
          :href="link.to"
        >{{ link.label }}</a>
        <RouterLink
          v-if="typeof link.to === 'object' || (typeof link.to === 'string' && !link.to.startsWith('http'))"
          class="fr-footer__top-link"
          :to="link.to"
        >
          {{ link.label }}
        </RouterLink>
      </li>
    </ul>
  </div>
</template>ts
import type VIcon from '../VIcon/VIcon.vue'
import type { HTMLAttributes, StyleValue } from 'vue'
import type { RouteLocationRaw } from 'vue-router'
export type DsfrFooterPartner = {
  href: string
  logo: string
  name: string
}
export type DsfrFooterPartnersProps = {
  mainPartner?: DsfrFooterPartner
  subPartners?: DsfrFooterPartner[]
  title?: string
}
export type DsfrFooterLinkProps = {
  button?: boolean
  icon?: string | InstanceType<typeof VIcon>['$props']
  iconAttrs?: InstanceType<typeof VIcon>['$props'] & HTMLAttributes
  iconRight?: boolean
  label?: string
  target?: string
  onClick?: ($event: MouseEvent) => void
  to?: RouteLocationRaw
  href?: string
  title?: string
}
export type DsfrFooterLinkListProps = {
  categoryName: string
  links: DsfrFooterLinkProps[]
  titleTag: string
}
export type DsfrFooterProps = {
  a11yCompliance?: string
  a11yComplianceLink?: RouteLocationRaw
  legalLink?: string
  homeLink?: RouteLocationRaw
  homeTitle?: string
  partners?: DsfrFooterPartnersProps
  personalDataLink?: string
  cookiesLink?: string
  logoText?: string | string[]
  descText?: string
  beforeMandatoryLinks?: DsfrFooterLinkProps[]
  afterMandatoryLinks?: DsfrFooterLinkProps[]
  mandatoryLinks?: { label: string, to: RouteLocationRaw | undefined, title?: string }[]
  ecosystemLinks?: { label: string, href: string, title: string, [key: string]: string }[]
  operatorLinkText?: string
  operatorTo?: RouteLocationRaw | undefined
  operatorImgStyle?: StyleValue
  operatorImgSrc?: string
  operatorImgAlt?: string
  licenceTo?: string
  licenceLinkProps?: ({ href: string } | { to: RouteLocationRaw | undefined }) & Record<string, string>
  licenceText?: string
  licenceName?: string
}