Ir al contenido

Dock

Barra de navegación inferior estilo móvil.

import { Dock } from 'asterui'

Dock Básico

Navegación inferior estilo móvil con iconos y etiquetas. (Se muestra en línea para la demostración; normalmente fijo en la 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

Tamaños

Diferentes tamaños de dock de xs a lg. (Se muestra en línea para la demostración)

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

Solo Iconos

Dock sin etiquetas para una apariencia minimalista. (Se muestra en línea para la demostración)

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

Aplica colores personalizados al dock. (Se muestra en línea para la demostración)

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

Usa elementos hijos Dock.Item para mayor control. (Se muestra en línea para la demostración)

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
PropiedadDescripciónTipoPredeterminado
itemsConfiguración de elementos del dockDockItemConfig[]-
sizeVariante de tamaño'xs' | 'sm' | 'md' | 'lg' | 'xl''md'
activeIndexÍndice del elemento activo controladonumber-
onChangeCallback cuando se hace clic en un elemento(index: number) => void-
childrenElementos hijos Dock.Item (alternativa a items)React.ReactNode-
classNameClases CSS adicionalesstring-
data-testidID de prueba para pruebasstring-
PropiedadDescripciónTipoPredeterminado
iconElemento de iconoReact.ReactNode-
labelTexto de etiquetastring-
activeSi el elemento está activo (no controlado)booleanfalse
disabledSi el elemento está deshabilitadobooleanfalse
onClickManejador de clic() => void-
data-testidID de prueba para pruebasstring-
PropiedadDescripciónTipoPredeterminado
activeSi este elemento está activobooleanfalse
childrenContenido del elemento (icono y etiqueta opcional)React.ReactNode-
onClickManejador de clic() => void-
disabledSi el elemento está deshabilitadobooleanfalse
classNameClases CSS adicionalesstring-
data-testidID de prueba para pruebasstring-
  • Usa elementos de botón semánticos para elementos de navegación
  • Soporta navegación por teclado
  • El estado activo se indica visualmente
  • Para soporte de área segura de iOS, añade viewport-fit=cover a tu etiqueta meta viewport