feat: inline DM search bar — find or start conversations from sidebar header

Replace the static placeholder button with a fully functional search bar
that filters existing DM conversations instantly and searches for users
via the API with debounce. Supports keyboard navigation, federation-aware
DM creation, group DM display, and portal-based glass dropdown.
This commit is contained in:
Jannis Braun
2026-03-13 04:47:18 +01:00
parent 06aa3bb9aa
commit 12b450b7b9
2 changed files with 389 additions and 3 deletions
@@ -18,6 +18,7 @@ import { parseFederatedUsername, isSelf } from '../../utils/identity';
import { joinVoiceChannel, broadcastVoiceStatus, broadcastDeafenViaLiveKit } from '../../utils/voice';
import { ContextMenu } from '../ui/ContextMenu';
import { ConfirmDialog } from '../ui/ConfirmDialog';
import { DmSearchBar } from './DmSearchBar';
export function ChannelSidebar() {
const spaces = useSpaceStore((s) => s.spaces);
@@ -399,9 +400,7 @@ export function ChannelSidebar() {
<>
<div className="w-60 md:w-full bg-surface-channel flex flex-col flex-shrink-0 select-none md:pl-[72px] border-r border-border-hard">
<div className="h-14 px-[10px] flex items-center border-b border-border-hard z-10">
<button className="flex-1 min-h-8 bg-surface-base text-txt-tertiary text-[13px] font-medium py-[5px] px-2 rounded-[4px] text-left hover:bg-surface-base transition-colors">
Find or start a conversation
</button>
<DmSearchBar />
</div>
<div className="flex-1 overflow-y-auto pt-4 px-2 no-scrollbar" style={{ paddingBottom: floatingPanelHeight + 24 }}>
<div