Menubar
Una barra de menús al estilo de escritorio con un único resaltado que se desliza entre los menús abiertos y cambia al instante cuando te desplazas por ellos.
pnpm dlx shadcn@latest add https://hextaui.com/r/menubar.jsonAñade el componente, los tokens del tema de HextaUI y los componentes de HextaUI de los que depende.
Añade los tokens del tema a tu CSS global, si aún no lo has hecho.
Instala las dependencias.
pnpm add @base-ui/react @tabler/icons-react class-variance-authority cnCopia y pega el siguiente código en tu proyecto.
components/ui/menubar.tsx components/ui/dropdown-menu.tsx lib/motion.ts Actualiza las rutas de importación para que coincidan con la configuración de tu proyecto.
Cada <MenubarMenu /> es un Dropdown menu, así que los elementos, los elementos checkbox y radio, los submenús, las etiquetas y los atajos funcionan y se ven exactamente igual. Abre un menú y luego mueve el puntero o pulsa las flechas para recorrer la barra.
Iconos en triggers
Pon un icono antes de la etiqueta de un trigger, o usa un icono solo con un aria-label. Los triggers con solo icono tienen forma cuadrada.
Iconos
Pon un icono antes de la etiqueta. Usa variant="destructive" en los elementos que eliminan o no se pueden deshacer.
Deshabilitado
Deshabilita un solo menú con disabled en <MenubarMenu />, o toda la barra en <Menubar />. Las flechas omiten los menús deshabilitados.
Vertical
orientation="vertical" apila los menús y cambia la navegación a las flechas arriba y abajo. Abre los menús hacia un lado con side="inline-end".
De derecha a izquierda
Los menús, submenús y flechas siguen la dirección de lectura. Los atajos mantienen el orden del teclado.
| Key | Acción |
|---|---|
| Tab | Mueve el foco hacia la barra de menús y luego fuera de ella. |
| ←→ | Se mueve entre menús. Con un menú abierto, abre el siguiente. |
| EnterSpace↓ | Abre el menú enfocado. |
| ↑↓ | Se mueve entre los elementos de un menú abierto. |
| → | Abre un submenú desde su trigger. |
| Esc | Cierra el menú abierto y devuelve el foco a su trigger. |
- Dale un nombre a la barra de menús con
aria-label. Renderizarole="menubar"y cada trigger es un elemento de menú, por lo que los lectores de pantalla la anuncian como un menú de aplicación. - La barra es una única parada de tabulación. Las flechas se mueven entre menús, así que el orden de tabulación de la página sigue siendo corto.
- El resaltado deslizante es decorativo. Con movimiento reducido simplemente aparece sobre el menú abierto.
Las partes del menú aceptan las mismas props que sus equivalentes de Dropdown menu.
| Prop | Tipo | Predeterminado |
|---|---|---|
orientation | "horizontal" | "vertical" | "horizontal" |
loopFocusPasa del último menú de vuelta al primero. | boolean | true |
modalBloquea el scroll de la página y los clics externos mientras hay un menú abierto. | boolean | true |
disabled | boolean | false |
render | ReactElement | (props, state) => ReactElement | <div> |
| Atributo | Descripción |
|---|---|
data-slot="menubar" | Apunta a la barra en CSS. |
data-orientation | La orientación. |
data-has-submenu-open | Presente mientras cualquier menú de la barra está abierto. |
data-slot="menubar-highlight" | El fondo deslizante detrás del trigger abierto, con data-visible. |
--menubar-radius | Radio de las esquinas de la barra. Los triggers y el resaltado derivan el suyo de este. |
| Prop | Tipo | Predeterminado |
|---|---|---|
open | boolean | – |
defaultOpen | boolean | false |
onOpenChange | (open: boolean, details) => void | – |
disabled | boolean | false |
| Atributo | Descripción |
|---|---|
data-slot="menubar-trigger" | Apunta a los triggers en CSS. |
data-popup-open | Presente mientras su menú está abierto. |
data-disabled | Presente cuando está deshabilitado. |
| Prop | Tipo | Predeterminado |
|---|---|---|
side | "top" | "bottom" | "left" | "right" | "inline-start" | "inline-end" | "bottom" |
align | "start" | "center" | "end" | "start" |
sideOffset | number | 8 |
alignOffsetAlinea los elementos del menú con la etiqueta del trigger. | number | -4 |
| Atributo | Descripción |
|---|---|
data-slot="menubar-content" | Apunta a los menús en CSS. |
data-instant="group" | Presente cuando el menú se abrió al desplazarse desde otro. Cambia sin animación. |
MenubarItem, MenubarCheckboxItem, MenubarRadioGroup, MenubarRadioItem, MenubarGroup, MenubarLabel, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubTrigger y MenubarSubContent son las partes de Dropdown menu con slots menubar-*. Consulta la API de Dropdown menu para ver sus props.
- Dropdown menuUn menú de acciones y opciones tras un botón, con grupos, submenús, elementos de casilla y de radio, y atajos.
- MotionLas curvas de easing, duraciones y la comprobación de movimiento reducido con las que se anima cada componente, además de hooks para transformaciones de tamaño y resaltados deslizantes.
- Alert dialogUn diálogo de confirmación para acciones destructivas o importantes que espera el trabajo asíncrono y se convierte en una hoja inferior en móviles.
- CommandUna lista de acciones con búsqueda, en línea o como paleta ⌘K, con páginas, atajos y coincidencias resaltadas.
- Context menuUn menú de acciones con clic derecho o pulsación larga, con submenús, elementos de casilla y de radio, y respuesta al mantener pulsado en pantallas táctiles.
- DialogUna ventana sobre la página para formularios y tareas concretas, con encabezado y pie fijados, anidamiento y una hoja inferior deslizable en móviles.