Dropdowns
View on GitHubDropdowns
Every dropdown in Orbit — filters, the issue sidebar's pickers, the
user menu, the column settings, row actions — is one component:
Dropdown (resources/js/Components/Molecules/Dropdown/Dropdown.tsx).
It owns the look (a soft dark surface with no border), search, "Clear" /
"Select all", keyboard navigation, positioning and focus handling, so
a new dropdown only decides what it contains.
Guides, in the order you'd actually need them
- Add a dropdownDropdownsAdd a dropdownWorked example: choosing which Dropdown variant to reach for, and how to wire each one. Never hand-build a floating panel — a new dropdown should look and… — worked example for
each variant:
select,multiselect,menuandpanel.
The architecture in one paragraph
Dropdown takes a variant and any trigger element, renders its
panel into a portal and positions it with useFloatingDropdown
(resources/js/hooks/useFloatingDropdown.ts), which also closes it on
outside click / Escape and flips it above the trigger when there is no
room below. The panel is made of two atoms — DropdownPanel (the
surface) and DropdownOption (one row) — which you can also use
directly for floating UI that isn't anchored to a trigger, like the
"@mention" list. Thin, domain-specific wrappers sit on top:
InlineSelectDropdown, EditableSelect, EditableLabelList,
FilterDropdown, SavedFiltersDropdown, SelectionDropdown and
MemberRoleDropdown. Their props are the app's concern; the
behavior is Dropdown's. Types live in resources/js/types/Dropdown.ts.
