Preview Updated 2026-05-10

Dropdown

Dropdown menu — Popover + list + keyboard navigation. Supports group headers, dividers, and danger semantics.

Basic usage

items is an array of menu entries rendered in order. divider: true renders a separator; header: true renders a group title. Keyboard: up/down navigate, Enter / Space to select, Esc to close, Home / End to jump to first/last.

<script setup lang="ts">
import { CfButton, CfDropdown } from '@chufix-design/vue';
import type { DropdownItem } from '@chufix-design/vue';

const items: DropdownItem[] = [
{ key: 'profile', label: 'Profile' },
{ key: 'settings', label: 'Settings' },
{ divider: true, label: '' },
{ header: true, label: 'Actions' },
{ key: 'rename', label: 'Rename' },
{ key: 'archive', label: 'Archive', disabled: true },
{ key: 'delete', label: 'Delete', tone: 'danger' },
];

function onSelect(item: DropdownItem) {
console.log('selected:', item.key);
}
</script>

<template>
<CfDropdown :items="items" placement="bottom" @select="onSelect">
  <CfButton variant="secondary">Actions ▾</CfButton>
</CfDropdown>
</template>
import { CfButton, CfDropdown } from '@chufix-design/react';
import type { DropdownItem } from '@chufix-design/react';

const items: DropdownItem[] = [
{ key: 'profile', label: 'Profile' },
{ key: 'settings', label: 'Settings' },
{ divider: true, label: '' },
{ header: true, label: 'Actions' },
{ key: 'rename', label: 'Rename' },
{ key: 'archive', label: 'Archive', disabled: true },
{ key: 'delete', label: 'Delete', tone: 'danger' },
];

export default function Demo() {
return (
  <CfDropdown
    items={items}
    placement="bottom"
    onSelect={(item) => console.log('selected:', item.key)}
  >
    <CfButton variant="secondary">Actions ▾</CfButton>
  </CfDropdown>
);
}

API · Props

PropTypeDefaultDescription
itemsDropdownItem[][]Menu item array
placement'top' | 'bottom' | 'left' | 'right''bottom'Preferred placement
offsetnumber6Gap to the trigger (px)
closeOnSelectbooleantrueClose after select
disabledbooleanfalseDisable trigger
widthnumber | stringFixed width; auto if omitted
openbooleanFor controlled use

API · DropdownItem

FieldTypeDescription
keystringUnique id (recommended for routing in select)
labelstringDisplay text
iconstringOptional leading icon (emoji or symbol)
disabledbooleanDisabled item
dividerbooleanRender as separator
headerbooleanRender as group header (non-clickable)
tone'default' | 'danger'Semantic color; danger for irreversible actions

API · Events

EventArgsDescription
select (Vue) / onSelect (React)(item, index)Fires when an item is selected
update:open (Vue) / onOpenChange (React)(open: boolean)Open state change

反馈与讨论

Dropdown · Discussion

0
0 / 600
一键发送
正在加载评论...