Skip to main content

Dropdown

A toggleable menu that allows the user to choose one value from a predefined list.

Usage

import { Dropdown, Button } from '@blendx-ui';

// Basic usage
<Dropdown>
<Dropdown.Toggle variant="success" id="dropdown-basic">
Dropdown Button
</Dropdown.Toggle>

<Dropdown.Menu>
<Dropdown.Item href="#/action-1">Action</Dropdown.Item>
<Dropdown.Item href="#/action-2">Another action</Dropdown.Item>
<Dropdown.Item href="#/action-3">Something else</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>

// Split button dropdown
<Dropdown as={ButtonGroup}>
<Button variant="success">Split Button</Button>

<Dropdown.Toggle split variant="success" id="dropdown-split-basic" />

<Dropdown.Menu>
<Dropdown.Item href="#/action-1">Action</Dropdown.Item>
<Dropdown.Item href="#/action-2">Another action</Dropdown.Item>
<Dropdown.Item href="#/action-3">Something else</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>

Props

PropTypeRequiredDefaultDescription
idstringNo-Unique identifier
dropstringNo'down'Direction dropdown opens ('up', 'down', 'left', 'right')
showbooleanNo-Controls dropdown visibility
alignstring/objectNo-Aligns the dropdown menu ('start', 'end', or responsive object)
flipbooleanNotrueAllow Dropdown to flip in case of overflow
onTogglefunctionNo-Callback fired when dropdown visibility changes
onSelectfunctionNo-Callback fired when a menu item is selected
focusFirstItemOnShowboolean/stringNotrueFocus first item automatically when opened
aselementTypeNo'div'Component to render the dropdown as
navbarbooleanNofalseIndicate dropdown is within a navbar
autoCloseboolean/stringNotrueAuto-close behavior ('true', 'false', 'inside', 'outside')
PropTypeRequiredDefaultDescription
idstringYes-Identifies the associated dropdown menu
splitbooleanNofalseRender as a split button
childBsPrefixstringNo-Change underlying component CSS base class name
variantstringNo'primary'Component visual or contextual style variants
sizestringNo-Component size ('sm', 'lg')
disabledbooleanNofalseWhether the toggle is disabled
PropTypeRequiredDefaultDescription
alignstring/objectNo-Aligns the dropdown menu ('start', 'end', or responsive object)
flipbooleanNotrueAllow menu to flip in case of overflow
showbooleanNo-Controls visibility
renderOnMountbooleanNofalseRender menu even when not visible
popperConfigobjectNo-Passed to ReactPopper's Popper component
rootCloseEventstringNo'click'Which open event to listen for when determining "click outside"
PropTypeRequiredDefaultDescription
activebooleanNofalseWhether item is active
disabledbooleanNofalseWhether item is disabled
eventKeystringNo-Value passed to the onSelect handler
hrefstringNo-HTML href attribute
onClickfunctionNo-Click handler
aselementTypeNo'a'Component to render the item as

Parameters

onToggle

  • Parameters: (isOpen: boolean, event: SyntheticEvent, metadata: { source: 'click' | 'keydown' | 'rootClose' }) - Whether menu is open, the event, and the source
  • Returns: void

onSelect

  • Parameters: (eventKey: any, event: SyntheticEvent) - Selected eventKey, the event
  • Returns: void

onClick (Dropdown.Item)

  • Parameters: (event: React.MouseEvent) - The click event
  • Returns: void

Return Value

Returns a dropdown component with the following subcomponents:

  • Dropdown.Toggle - The button that toggles the dropdown menu
  • Dropdown.Menu - The container for dropdown items
  • Dropdown.Item - Individual selectable menu items
  • Dropdown.Header - A header item in the dropdown
  • Dropdown.Divider - A divider between items
  • Dropdown.Text - Text content in the dropdown menu

Examples

Basic Dropdown

<Dropdown>
<Dropdown.Toggle variant="success" id="dropdown-basic">
Dropdown Button
</Dropdown.Toggle>

<Dropdown.Menu>
<Dropdown.Item href="#/action-1">Action</Dropdown.Item>
<Dropdown.Item href="#/action-2">Another action</Dropdown.Item>
<Dropdown.Item href="#/action-3">Something else</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>

Split Button Dropdown

<Dropdown as={ButtonGroup}>
<Button variant="success">Split Button</Button>

<Dropdown.Toggle split variant="success" id="dropdown-split-basic" />

<Dropdown.Menu>
<Dropdown.Item href="#/action-1">Action</Dropdown.Item>
<Dropdown.Item href="#/action-2">Another action</Dropdown.Item>
<Dropdown.Item href="#/action-3">Something else</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
<Dropdown>
<Dropdown.Toggle id="dropdown-basic">
Dropdown with Headers
</Dropdown.Toggle>

<Dropdown.Menu>
<Dropdown.Header>Group 1</Dropdown.Header>
<Dropdown.Item href="#/action-1">Action</Dropdown.Item>
<Dropdown.Item href="#/action-2">Another action</Dropdown.Item>
<Dropdown.Divider />
<Dropdown.Header>Group 2</Dropdown.Header>
<Dropdown.Item href="#/action-3">Something else</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
<>
<Dropdown>
<Dropdown.Toggle id="dropdown-down">
Dropdown (down, default)
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item href="#">Action</Dropdown.Item>
<Dropdown.Item href="#">Another action</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>

<Dropdown drop="up">
<Dropdown.Toggle id="dropdown-up">
Dropup
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item href="#">Action</Dropdown.Item>
<Dropdown.Item href="#">Another action</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>

<Dropdown drop="left">
<Dropdown.Toggle id="dropdown-left">
Dropleft
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item href="#">Action</Dropdown.Item>
<Dropdown.Item href="#">Another action</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>

<Dropdown drop="right">
<Dropdown.Toggle id="dropdown-right">
Dropright
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item href="#">Action</Dropdown.Item>
<Dropdown.Item href="#">Another action</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
</>
<Dropdown>
<Dropdown.Toggle id="dropdown-alignment">
Right-aligned menu
</Dropdown.Toggle>
<Dropdown.Menu align="end">
<Dropdown.Item href="#">Action</Dropdown.Item>
<Dropdown.Item href="#">Another action</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
<Dropdown onSelect={(eventKey) => alert(`Selected ${eventKey}`)}>
<Dropdown.Toggle id="dropdown-events">
Click me for events
</Dropdown.Toggle>
<Dropdown.Menu>
<Dropdown.Item eventKey="action-1">Action 1</Dropdown.Item>
<Dropdown.Item eventKey="action-2">Action 2</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>

Accessibility

  • Uses proper ARIA attributes for dropdown menus
  • Supports keyboard navigation (arrow keys, Escape)
  • Focus management keeps focus within the dropdown when open
  • Toggle button properly identifies the dropdown menu
  • Can dismiss dropdown menu with Escape key

Best Practices

  • Always include an ID on the toggle for proper accessibility
  • Keep dropdown items brief and clear
  • Use headers and dividers to group related items
  • Consider keyboard accessibility for users navigating with a keyboard
  • Use dropdown directions appropriately based on space constraints
  • For mobile, ensure dropdown items are large enough for touch targets
  • Use consistent styling for similar dropdown menus
  • ButtonGroup
  • SplitButton
  • DropdownButton
  • NavDropdown
  • InlineDropdown
  • SelectMenu

Notes

  • Based on React Bootstrap's Dropdown component
  • Use DropdownButton for a simpler API when you don't need a split button
  • For accessibility reasons, avoid using image-only icons for dropdown toggles without proper labeling
  • Consider dropdown positioning carefully for mobile devices and smaller screens

Dependencies

RepositoryUsage Count
frontend-app-staff-dashboard5
frontend-app-dashboard1
frontend-app-account1

Detailed usage locations:

frontend-app-staff-dashboard

  • src/pages/ai-studio/AiStudio.jsx
  • src/pages/create-program/index.jsx
  • src/pages/platform-settings/customization/contact-information/index.jsx
  • src/pages/program-single/settings/index.jsx
  • src/pages/utilities/notifications/NotificationsDrawer.jsx

frontend-app-dashboard

  • src/pages/learning/index.jsx

frontend-app-account

  • src/BlendxSettings/profile-details/index.jsx