Aller au contenu

ResponsiveDrawer

Une disposition de barre latérale réactive utilisant le drawer de DaisyUI. Utilisez-la pour les barres latérales de navigation qui basculent sur mobile mais peuvent être toujours visibles sur les grands écrans.

import { ResponsiveDrawer } from 'asterui'

ResponsiveDrawer basique

Barre latérale réactive qui bascule sur mobile.

Main content area

import { ResponsiveDrawer, Button, Menu } from 'asterui'
import { useState } from 'react'

function App() {
  const [open, setOpen] = useState(false)
  
  return (
      <ResponsiveDrawer
        open={open}
        onOpenChange={setOpen}
        sidebar={
          <Menu>
            <Menu.Item>Dashboard</Menu.Item>
            <Menu.Item>Settings</Menu.Item>
            <Menu.Item>Profile</Menu.Item>
          </Menu>
        }
      >
        <div className="p-4">
          <Button onClick={() => setOpen(true)}>
            Open Sidebar
          </Button>
          <p className="mt-4">Main content area</p>
        </div>
      </ResponsiveDrawer>
    )
}

export default App

Toujours ouvert sur ordinateur

La barre latérale bascule sur mobile mais est toujours visible sur les écrans lg et plus.

Resize the window to see the responsive behavior. On large screens, the sidebar is always visible.

import { ResponsiveDrawer, Button, Menu } from 'asterui'
import { useState } from 'react'

function App() {
  const [open, setOpen] = useState(false)
  
  return (
      <ResponsiveDrawer
        open={open}
        onOpenChange={setOpen}
        responsive="lg"
        sidebar={
          <Menu>
            <Menu.Title>Navigation</Menu.Title>
            <Menu.Item>Dashboard</Menu.Item>
            <Menu.Item>Analytics</Menu.Item>
            <Menu.Item>Settings</Menu.Item>
          </Menu>
        }
      >
        <div className="p-4">
          <Button className="lg:hidden" onClick={() => setOpen(true)}>
            Menu
          </Button>
          <p className="mt-4">
            Resize the window to see the responsive behavior.
            On large screens, the sidebar is always visible.
          </p>
        </div>
      </ResponsiveDrawer>
    )
}

export default App

Largeur personnalisée

Barre latérale avec largeur personnalisée.

import { ResponsiveDrawer, Button, Menu } from 'asterui'
import { useState } from 'react'

function App() {
  const [open, setOpen] = useState(false)
  
  return (
      <ResponsiveDrawer
        open={open}
        onOpenChange={setOpen}
        width={400}
        sidebar={
          <Menu>
            <Menu.Title>Wide Sidebar</Menu.Title>
            <Menu.Item>Item with more space</Menu.Item>
            <Menu.Item>Another item</Menu.Item>
          </Menu>
        }
      >
        <div className="p-4">
          <Button onClick={() => setOpen(true)}>
            Open Wide Sidebar
          </Button>
        </div>
      </ResponsiveDrawer>
    )
}

export default App

Barre latérale à droite

Barre latérale positionnée du côté droit.

Main content area

import { ResponsiveDrawer, Button, Menu } from 'asterui'
import { useState } from 'react'

function App() {
  const [open, setOpen] = useState(false)
  
  return (
      <ResponsiveDrawer
        open={open}
        onOpenChange={setOpen}
        end
        sidebar={
          <Menu>
            <Menu.Item>Info Panel</Menu.Item>
            <Menu.Item>Quick Actions</Menu.Item>
            <Menu.Item>Help</Menu.Item>
          </Menu>
        }
      >
        <div className="p-4">
          <Button onClick={() => setOpen(true)}>
            Open Right Sidebar
          </Button>
          <p className="mt-4">Main content area</p>
        </div>
      </ResponsiveDrawer>
    )
}

export default App

Contenu de barre latérale personnalisé

Barre latérale avec contenu stylisé personnalisé.

Application content

import { ResponsiveDrawer, Button, Avatar } from 'asterui'
import { useState } from 'react'

function App() {
  const [open, setOpen] = useState(false)
  
  return (
      <ResponsiveDrawer
        open={open}
        onOpenChange={setOpen}
        sidebarClassName="bg-base-300"
        sidebar={
          <div className="space-y-4">
            <div className="flex items-center gap-3">
              <Avatar>JD</Avatar>
              <div>
                <div className="font-semibold">John Doe</div>
                <div className="text-sm opacity-70">Admin</div>
              </div>
            </div>
            <ul className="menu">
              <li><a>Dashboard</a></li>
              <li><a>Users</a></li>
              <li><a>Reports</a></li>
              <li><a>Settings</a></li>
            </ul>
          </div>
        }
      >
        <div className="p-4">
          <Button onClick={() => setOpen(true)}>
            Toggle Sidebar
          </Button>
          <p className="mt-4">Application content</p>
        </div>
      </ResponsiveDrawer>
    )
}

export default App
PropriétéDescriptionTypeDéfaut
childrenZone de contenu principaleReact.ReactNode-
sidebarContenu de la barre latéraleReact.ReactNode-
openÉtat d’ouverture contrôlébooleanfalse
onOpenChangeCallback lorsque l’état d’ouverture change(open: boolean) => void-
endPositionner la barre latérale du côté droitbooleanfalse
widthLargeur de la barre latéralenumber | string320
responsivePoint de rupture auquel la barre latérale devient toujours visible'sm' | 'md' | 'lg' | 'xl' | '2xl'-
sidebarClassNameClasses supplémentaires pour le conteneur de la barre latéralestring-
contentClassNameClasses supplémentaires pour la zone de contenustring-
overlayClassNameClasses supplémentaires pour la superpositionstring-
idID unique pour le drawer (généré automatiquement s’il n’est pas fourni)string-
classNameClasses CSS supplémentaires pour l’enveloppe du drawerstring-
data-testidID de test pour les testsstring-
  • ResponsiveDrawer enveloppe le composant drawer de DaisyUI
  • Utilisez open et onOpenChange pour un état contrôlé
  • Utilisez la propriété responsive pour rendre la barre latérale toujours visible au-dessus d’un point de rupture
  • Utilisez width pour personnaliser la largeur de la barre latérale (par défaut : 320px)
  • Utilisez la propriété end pour positionner la barre latérale du côté droit
  • Pour les drawers de panneau qui glissent sur le contenu (comme les formulaires ou les vues détaillées), utilisez plutôt le composant Drawer
FonctionnalitéResponsiveDrawerDrawerLayout.Sider
Cas d’usageBarres latérales de navigation réactivesPanneaux superposés pour formulaires, détailsBarres latérales pliables permanentes
RenduPartie de la disposition de la pagePortail vers document.bodyPartie de la structure Layout
SuperpositionOui (mobile)Oui (toujours)Non
RéactifOui (auto-ouverture au point de rupture)NonOui (auto-pliage)
PlacementGauche ou droiteLes 4 côtésGauche ou droite
En-tête/PiedPas intégréOui (propriétés title, footer)Pas intégré