BjSidemenu

Menu latéral React avec liens, état actif et sous-listes optionnelles.

Utilisation

import { BjSidemenu } from '@flrxnt/dsbj/react'

export function Example() {
  return (
    <BjSidemenu
      title="Rubrique"
      links={[
        { label: 'Accueil', to: '/', active: true },
        {
          label: 'Section',
          to: '/section',
          children: [{ label: 'Sous-page', to: '/section/sous' }],
        },
      ]}
    />
  )
}

Aperçu

Sans titre

Omettre title : le paragraphe .bj-sidemenu__title n’est pas rendu.

import { BjSidemenu } from '@flrxnt/dsbj/react'

export function NoTitle() {
  return (
    <BjSidemenu
      links={[
        { label: 'Vue d’ensemble', to: '/vue' },
        { label: 'Statistiques', to: '/stats' },
      ]}
    />
  )
}

Avec title

title affiche .bj-sidemenu__title au-dessus de la liste.

import { BjSidemenu } from '@flrxnt/dsbj/react'

export function WithTitle() {
  return (
    <BjSidemenu
      title="Démarches en ligne"
      links={[
        { label: 'Liste', to: '/demarches' },
        { label: 'Suivi', to: '/suivi' },
      ]}
    />
  )
}

Lien actif (active)

active: true ajoute bj-sidemenu__link--active et aria-current="page" sur le lien.

import { BjSidemenu } from '@flrxnt/dsbj/react'

export function WithActive() {
  return (
    <BjSidemenu
      links={[
        { label: 'Étape 1', to: '/etape-1' },
        { label: 'Étape 2', to: '/etape-2', active: true },
        { label: 'Étape 3', to: '/etape-3' },
      ]}
    />
  )
}

children (sous-menu)

children est un tableau de liens rendu dans .bj-sidemenu__sublist sous le parent.

import { BjSidemenu } from '@flrxnt/dsbj/react'

export function Nested() {
  return (
    <BjSidemenu
      links={[
        {
          label: 'Parent',
          to: '/parent',
          children: [
            { label: 'Enfant A', to: '/parent/a' },
            { label: 'Enfant B', to: '/parent/b', active: true },
          ],
        },
      ]}
    />
  )
}

Combinaison title + actif + imbrication

Cas typique : rubrique, page courante dans une section, sous-pages.

import { BjSidemenu } from '@flrxnt/dsbj/react'

export function FullMenu() {
  return (
    <BjSidemenu
      title="Mon dossier"
      aria-label="Navigation latérale du dossier"
      links={[
        { label: 'Résumé', to: '/dossier', active: true },
        {
          label: 'Pièces',
          to: '/dossier/pieces',
          children: [
            { label: 'À fournir', to: '/dossier/pieces/manquantes' },
            { label: 'Déposées', to: '/dossier/pieces/deposees' },
          ],
        },
        { label: 'Historique', to: '/dossier/historique' },
      ]}
    />
  )
}

Attributs natifs du nav

id, className, aria-label supplémentaires sur le <nav> racine.

import { BjSidemenu } from '@flrxnt/dsbj/react'

export function WithNativeAttrs() {
  return (
    <BjSidemenu
      id="sidebar-nav"
      className="layout-sidebar__nav"
      data-testid="sidemenu"
      links={[{ label: 'Accueil', to: '/' }]}
    />
  )
}

Props

PropDescription
titleTitre optionnel au-dessus des liens.
linksTableau d'entrées : label, to, active et children optionnels ; children pour un sous-menu.
(nav props)Attributs nav natifs supplémentaires.