SearchOverlay
ImplementedFull-screen search overlay — large input + recent searches + suggested categories + trending events. Controlled (open/onOpenChange); full-viewport overlay at all breakpoints. ADR-071: the panel's field form owns the single focus-within ring (the input previously had no indicator at all).
components/organisms/SearchOverlay/SearchOverlay.tsxFull-screen search overlay — large input + recent searches + suggested categories + trending events.
SearchOverlay
organisms
Full-screen search overlay — large input + recent searches + suggested categories + trending events.
Props
SearchOverlay
openboolean—Whether the overlay is currently visible (controlled).
onOpenChange(open: boolean) => void—Called with the next open state — overlay requests closure (ESC, scrim, submit).
onSearch(query: string) => void—Called with the trimmed query when the user submits or picks a suggestion/recent chip.
recentSearchesstring[][]Recent search strings rendered as chips below the results.
suggestionsSearchOverlayCategory[][]Suggested events grouped by category, filtered client-side as the user types.
placeholderstring'Search events, venues, artists…'Placeholder for the search input.
emptyMessagestring'No matches yet — try a different keyword.'Message rendered when no suggestion matches the query.
ariaLabelstring'Search overlay'Accessible name for the dialog itself (and the results listbox, suffixed "results").
inputAriaLabelstringplaceholderAccessible name for the search input (combobox). Falls back to placeholder — never hardcoded English.
recentLabelstring'Recent'Heading above the recent-searches chips — pass the localized string from the consumer.
classNamestring—Extra classes appended to the overlay root.
idstring'sov-<useId>'Base id for the overlay — derived (sov-*) when omitted.
<SearchOverlay />Accessibility
Type
1 ruleARIA
1 ruleUsage
Import
import { SearchOverlay } from "@epasslive/design-system"Example 1
<SearchOverlay open onOpenChange={...} onSearch={...} />Example 2
<SearchOverlay open onOpenChange={...} onSearch={...} recentSearches={["..."]} suggestions={[{ category: "...", events: [...] }]} recentLabel="Récents" />Anti-patterns
— Do not fetch data directly in organisms
— Avoid tight coupling to specific data sources