Skip to content

Menu

Menú vertical estilo terminal con items, divisores, disabled y slot personalizado.

Menu

Demo

vue
<template>
  <Menu :items="items" @select="handleSelect" />
</template>

<script setup lang="ts">
import { Menu } from '@herdrate/vue'

const items = [
  { label: 'New File' },
  { label: 'Open File', icon: '>' },
  { label: 'Save', disabled: true },
  { label: '', divider: true },
  { label: 'Quit' },
]

function handleSelect(index: number) {
  console.log('Selected:', index)
}
</script>

Props

items

Array de items del menú. Cada item soporta label, icon, disabled y divider.

vue
<Menu :items="[
  { label: 'New File' },
  { label: 'Open File', icon: '>' },
  { label: 'Save', disabled: true },
  { label: '', divider: true },
  { label: 'Quit' },
]" />

color

Color del item activo (resaltado con >).

vue
<Menu :items="[{ label: 'Primary', icon: '>' }, { label: 'Active', disabled: true }]" color="primary" :activeIndex="0" />
<Menu :items="[{ label: 'Success', icon: '>' }, { label: 'Active' }]" color="success" :activeIndex="0" />
<Menu :items="[{ label: 'Danger', icon: '>' }, { label: 'Active' }]" color="danger" :activeIndex="0" />

activeIndex

Índice del item resaltado con el marcador >.

vue
<Menu :items="[{ label: 'Uno' }, { label: 'Dos' }, { label: 'Tres' }]" :activeIndex="1" />
<Menu :items="[{ label: 'Uno' }, { label: 'Dos' }, { label: 'Tres' }]" :activeIndex="2" />

Tipos

CampoTipoRequeridoDescripción
labelstringTexto del item
iconstringIcono o emoji opcional
disabledbooleanItem deshabilitado
dividerbooleanLínea separadora

API

PropTypeDefaultDescription
itemsMenuItem[][]Items del menú
color'primary' | 'secondary' | 'tertiary' | 'success' | 'warning' | 'danger' | 'light' | 'medium' | 'dark''primary'Color del item activo
activeIndexnumber-1Índice del item resaltado

Events

EventoPayloadDescripción
selectindex: numberSe emite al hacer clic en un item

Slots

SlotPropsDescripción
defaultAlternativa a items
item{ item, index, active }Render personalizado por item

Tokens usados

--font-mono, --bg, --bg-panel, --text, --border, --color-*