elements

Dropdown

Display a list of actions in a dropdown menu.

Usage

Pass an array of arrays to the items prop of the Dropdown component. Each array represents a group of items. Each item can have the following properties:

  • label - The label of the item.
  • icon - The icon of the item.
  • iconClass - The class of the icon of the item.
  • avatar - The avatar of the item. You can pass all the props of the Avatar component.
  • shortcuts - The shortcuts of the item.
  • slot - The slot of the item.
  • disabled - Whether the item is disabled.
  • click - The click handler of the item.

You can also pass any property from the NuxtLink component such as to, exact, etc.

<script setup>const items = [ [{ label: 'Profile', avatar: { src: 'https://avatars.githubusercontent.com/u/739984?v=4' } }], [{ label: 'Edit', icon: 'i-heroicons-pencil-square-20-solid', shortcuts: ['E'], click: () => { console.log('Edit') } }, { label: 'Duplicate', icon: 'i-heroicons-document-duplicate-20-solid', shortcuts: ['D'], disabled: true }], [{ label: 'Archive', icon: 'i-heroicons-archive-box-20-solid' }, { label: 'Move', icon: 'i-heroicons-arrow-right-circle-20-solid' }], [{ label: 'Delete', icon: 'i-heroicons-trash-20-solid', shortcuts: ['', 'D'] }]]</script><template> <UDropdown :items="items" :popper="{ placement: 'bottom-start' }"> <UButton color="white" label="Options" trailing-icon="i-heroicons-chevron-down-20-solid" /> </UDropdown></template>

Mode

Use the mode prop to switch between click and hover modes.

<script setup>const items = [ [{ label: 'Profile', avatar: { src: 'https://avatars.githubusercontent.com/u/739984?v=4' } }]]</script><template> <UDropdown :items="items" mode="hover" :popper="{ placement: 'bottom-start' }"> <UButton color="white" label="Options" trailing-icon="i-heroicons-chevron-down-20-solid" /> </UDropdown></template>

Slots

item

Use the #item slot to customize the items content or pass a slot property to customize a specific item. You will have access to the item property in the slot scope.

<script setup>const items = [ [{ label: 'ben@example.com', slot: 'account', disabled: true }], [{ label: 'Settings', icon: 'i-heroicons-cog-8-tooth' }], [{ label: 'Documentation', icon: 'i-heroicons-book-open' }, { label: 'Changelog', icon: 'i-heroicons-megaphone' }, { label: 'Status', icon: 'i-heroicons-signal' }], [{ label: 'Sign out', icon: 'i-heroicons-arrow-left-on-rectangle' }]]</script><template> <UDropdown :items="items" :ui="{ item: { disabled: 'cursor-text select-text' } }" :popper="{ placement: 'bottom-start' }"> <UAvatar src="https://avatars.githubusercontent.com/u/739984?v=4" /> <template #account="{ item }"> <div class="text-left"> <p> Signed in as </p> <p class="truncate font-medium text-gray-900 dark:text-white"> {{ item.label }} </p> </div> </template> <template #item="{ item }"> <span class="truncate">{{ item.label }}</span> <UIcon :name="item.icon" class="flex-shrink-0 h-4 w-4 text-gray-400 dark:text-gray-500 ms-auto" /> </template> </UDropdown></template>

Props

ui
any

undefined

mode
"click" | "hover"

"click"

popper
{}

{}

items
DropdownItem[][]

[]

openDelay
number

0

closeDelay
number

0

disabled
boolean

false

Preset

{ "wrapper": "relative inline-flex text-left rtl:text-right", "container": "z-20", "width": "w-48", "height": "", "background": "bg-white dark:bg-gray-800", "shadow": "shadow-lg", "rounded": "rounded-md", "ring": "ring-1 ring-gray-200 dark:ring-gray-700", "base": "relative focus:outline-none overflow-y-auto scroll-py-1", "divide": "divide-y divide-gray-200 dark:divide-gray-700", "padding": "p-1", "item": { "base": "group flex items-center gap-2 w-full", "rounded": "rounded-md", "padding": "px-2 py-1.5", "size": "text-sm", "active": "bg-gray-100 dark:bg-gray-900 text-gray-900 dark:text-white", "inactive": "text-gray-700 dark:text-gray-200", "disabled": "cursor-not-allowed opacity-50", "icon": { "base": "flex-shrink-0 h-4 w-4", "active": "text-gray-500 dark:text-gray-400", "inactive": "text-gray-400 dark:text-gray-500" }, "avatar": { "base": "flex-shrink-0", "size": "3xs" }, "shortcuts": "hidden md:inline-flex flex-shrink-0 gap-0.5 ms-auto" }, "transition": { "enterActiveClass": "transition duration-100 ease-out", "enterFromClass": "transform scale-95 opacity-0", "enterToClass": "transform scale-100 opacity-100", "leaveActiveClass": "transition duration-75 ease-in", "leaveFromClass": "transform scale-100 opacity-100", "leaveToClass": "transform scale-95 opacity-0" }, "popper": { "placement": "bottom-end", "strategy": "fixed" }}