Pular para o conteúdo

ResponsiveDrawer

Um layout de barra lateral responsivo usando o drawer do DaisyUI. Use para barras laterais de navegação que alternam em mobile mas podem estar sempre visíveis em telas maiores.

import { ResponsiveDrawer } from 'asterui'

ResponsiveDrawer Básico

Barra lateral responsiva que alterna em 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

Sempre Aberto no Desktop

Barra lateral alterna em mobile mas está sempre visível em telas lg e acima.

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

Largura Customizada

Barra lateral com largura customizada.

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

Barra Lateral à Direita

Barra lateral posicionada no lado direito.

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

Conteúdo de Barra Lateral Customizado

Barra lateral com conteúdo estilizado customizado.

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
PropriedadeDescriçãoTipoPadrão
childrenÁrea de conteúdo principalReact.ReactNode-
sidebarConteúdo da barra lateralReact.ReactNode-
openEstado aberto controladobooleanfalse
onOpenChangeCallback quando estado aberto muda(open: boolean) => void-
endPosiciona barra lateral no lado direitobooleanfalse
widthLargura da barra lateralnumber | string320
responsiveBreakpoint no qual barra lateral se torna sempre visível'sm' | 'md' | 'lg' | 'xl' | '2xl'-
sidebarClassNameClasses adicionais para container da barra lateralstring-
contentClassNameClasses adicionais para área de conteúdostring-
overlayClassNameClasses adicionais para o overlaystring-
idID único para o drawer (auto-gerado se não fornecido)string-
classNameClasses CSS adicionais para wrapper do drawerstring-
data-testidID de teste para testingstring-
  • ResponsiveDrawer envolve o componente drawer do DaisyUI
  • Use open e onOpenChange para estado controlado
  • Use prop responsive para tornar barra lateral sempre visível acima de um breakpoint
  • Use width para customizar largura da barra lateral (padrão: 320px)
  • Use prop end para posicionar barra lateral no lado direito
  • Para drawers de painel que deslizam sobre conteúdo (como formulários ou visualizações de detalhes), use o componente Drawer em vez disso
RecursoResponsiveDrawerDrawerLayout.Sider
Caso de UsoBarras laterais de navegação responsivasPainéis overlay para formulários, detalhesBarras laterais recolhíveis permanentes
RenderizaçãoParte do layout da páginaPortal para document.bodyParte da estrutura de Layout
OverlaySim (mobile)Sim (sempre)Não
ResponsivoSim (auto-abre no breakpoint)NãoSim (auto-recolhe)
PosicionamentoEsquerda ou direitaTodos os 4 ladosEsquerda ou direita
Cabeçalho/RodapéSem built-inSim (props title, footer)Sem built-in