Pular para o conteúdo

Dock

Barra de navegação inferior no estilo móvel.

import { Dock } from 'asterui'

Dock Básico

Navegação inferior no estilo móvel com ícones e rótulos. (Mostrado inline para demonstração; normalmente fixado na parte inferior)

import { Dock } from 'asterui'
import { useState } from 'react'
import { HomeIcon, MagnifyingGlassIcon, HeartIcon, UserIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(0)
  
  return (
      <Dock
        items={[
          { icon: <HomeIcon size="lg" />, label: 'Home' },
          { icon: <MagnifyingGlassIcon size="lg" />, label: 'Search' },
          { icon: <HeartIcon size="lg" />, label: 'Favorites' },
          { icon: <UserIcon size="lg" />, label: 'Profile' },
        ]}
        activeIndex={active}
        onChange={setActive}
      />
    )
}

export default App

Tamanhos

Diferentes tamanhos de dock de xs a lg. (Mostrado inline para demonstração)

import { Dock, Space } from 'asterui'
import { useState } from 'react'
import { HomeIcon, Cog6ToothIcon, BellIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(0)
  const items = [
    { icon: <HomeIcon />, label: 'Home' },
    { icon: <Cog6ToothIcon />, label: 'Settings' },
    { icon: <BellIcon />, label: 'Alerts' },
  ]
  
  return (
      <Space direction="vertical" size="lg" className="w-full">
        <Dock size="xs" items={items} activeIndex={active} onChange={setActive} />
        <Dock size="sm" items={items} activeIndex={active} onChange={setActive} />
        <Dock size="md" items={items} activeIndex={active} onChange={setActive} />
        <Dock size="lg" items={items} activeIndex={active} onChange={setActive} />
      </Space>
    )
}

export default App

Apenas Ícones

Dock sem rótulos para um visual minimalista. (Mostrado inline para demonstração)

import { Dock } from 'asterui'
import { useState } from 'react'
import { HomeIcon, MagnifyingGlassIcon, PlusCircleIcon, HeartIcon, UserIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(2)
  
  return (
      <Dock
        items={[
          { icon: <HomeIcon size="lg" /> },
          { icon: <MagnifyingGlassIcon size="lg" /> },
          { icon: <PlusCircleIcon size={32} /> },
          { icon: <HeartIcon size="lg" /> },
          { icon: <UserIcon size="lg" /> },
        ]}
        activeIndex={active}
        onChange={setActive}
      />
    )
}

export default App

Estilo Personalizado

Aplique cores personalizadas ao dock. (Mostrado inline para demonstração)

import { Dock } from 'asterui'
import { useState } from 'react'
import { HomeIcon, Cog6ToothIcon, BellIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(0)
  
  return (
      <Dock
        className="bg-neutral text-neutral-content"
        items={[
          { icon: <HomeIcon size="lg" />, label: 'Home' },
          { icon: <Cog6ToothIcon size="lg" />, label: 'Settings' },
          { icon: <BellIcon size="lg" />, label: 'Alerts' },
        ]}
        activeIndex={active}
        onChange={setActive}
      />
    )
}

export default App

Usando Children

Use filhos Dock.Item para mais controle. (Mostrado inline para demonstração)

import { Dock } from 'asterui'
import { useState } from 'react'
import { HomeIcon, Cog6ToothIcon } from '@aster-ui/icons'

function App() {
  const [active, setActive] = useState(0)
  
  return (
      <Dock>
        <Dock.Item active={active === 0} onClick={() => setActive(0)}>
          <HomeIcon size="lg" />
          <span className="dock-label">Home</span>
        </Dock.Item>
        <Dock.Item active={active === 1} onClick={() => setActive(1)}>
          <Cog6ToothIcon size="lg" />
          <span className="dock-label">Settings</span>
        </Dock.Item>
      </Dock>
    )
}

export default App
PropriedadeDescriçãoTipoPadrão
itemsConfiguração dos itens do dockDockItemConfig[]-
sizeVariante de tamanho'xs' | 'sm' | 'md' | 'lg' | 'xl''md'
activeIndexÍndice do item ativo controladonumber-
onChangeCallback quando item é clicado(index: number) => void-
childrenFilhos Dock.Item (alternativa a items)React.ReactNode-
classNameClasses CSS adicionaisstring-
data-testidID de teste para testesstring-
PropriedadeDescriçãoTipoPadrão
iconElemento de íconeReact.ReactNode-
labelTexto do rótulostring-
activeSe o item está ativo (não controlado)booleanfalse
disabledSe o item está desabilitadobooleanfalse
onClickManipulador de clique() => void-
data-testidID de teste para testesstring-
PropriedadeDescriçãoTipoPadrão
activeSe este item está ativobooleanfalse
childrenConteúdo do item (ícone e rótulo opcional)React.ReactNode-
onClickManipulador de clique() => void-
disabledSe o item está desabilitadobooleanfalse
classNameClasses CSS adicionaisstring-
data-testidID de teste para testesstring-
  • Usa elementos button semânticos para itens de navegação
  • Suporta navegação por teclado
  • Estado ativo é indicado visualmente
  • Para suporte à área segura do iOS, adicione viewport-fit=cover à sua meta tag viewport