Files
Ben Gotow 829c8c37a7 Implement event search for calendar feature (#2533)
* Implement event search functionality in calendar

Add a fully functional event search bar to the calendar sidebar that allows
users to search for events by title, description, location, or participants.

Features:
- Search input with debounced queries (300ms) to avoid excessive database calls
- Dropdown suggestions showing matching events with calendar color indicators
- Keyboard navigation (arrow keys, Enter to select, Escape to clear)
- Event details display including title, date/time, and location
- Results sorted by proximity to current date
- Respects disabled calendars filter
- Loading indicator during search

The implementation follows the same patterns used by the thread/email search
feature, leveraging the existing Event model's FTS5 search capability and
the Menu component for the dropdown UI.

* Move event search bar to toolbar with ThreadSearchBar styling

- Move EventSearchBar from calendar sidebar to toolbar location
- Create focusCalendarEvent action for communication between search
  bar and calendar component
- Update styling to match ThreadSearchBar design:
  - Fixed width toolbar appearance
  - Box-shadow border styling
  - Dropdown suggestions matching thread search style
  - Same clear button (searchclear.png) and search icon
- EventSearchBar now gets disabled calendars from config directly
- Calendar component listens to focusCalendarEvent action

The search bar now appears in the same toolbar area as the email
search bar, providing a consistent UX across the application.

* Fix focus ring to appear on entire search bar container

- Add 'focused' class to search bar container when input is focused
- Style the container with focus ring instead of the input element
- Use accent-primary color for consistent focus ring appearance

* Remove inner input focus styling to prevent double focus ring

* Fix stuck event selection after clicking search results

Clear focusedEvent when clicking on other events in the calendar
to prevent the search result event from remaining in a focused state
and continuously re-opening the popover.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-05 22:46:44 -06:00
..