'use client'; import { useEffect, useSyncExternalStore } from 'react'; import { Search, MessageSquare } from 'lucide-react'; import { useSearchContext } from '@fumadocs/ui/contexts/search'; import { useI18n } from '@fumadocs/ui/contexts/i18n'; import { toggleEveChat } from './eve-chat-store'; export function detectMac(): boolean { try { if ('userAgentData' in navigator) { const platform = (navigator as Navigator & { userAgentData?: { platform?: string } }).userAgentData?.platform; if (platform) { return platform === 'macOS'; } } return /mac/i.test(navigator.platform); } catch { return true; // default to Mac } } function useIsMac() { return useSyncExternalStore( () => () => {}, detectMac, () => true, ); } const handleKeyDown = (e: KeyboardEvent) => { if ((e.metaKey || e.ctrlKey) && e.key === 'i') { e.preventDefault(); toggleEveChat(); } }; function useAskAIShortcut() { useEffect(() => { document.addEventListener('keydown', handleKeyDown); return () => document.removeEventListener('keydown', handleKeyDown); }, []); } /** Desktop: search bar + Ask AI button side by side */ export function SearchAndAskAI() { const { enabled, hotKey, setOpenSearch } = useSearchContext(); const { text } = useI18n(); useAskAIShortcut(); const isMac = useIsMac(); return ( <> {enabled && ( setOpenSearch(true)} > {text.search} {hotKey.map((k, i) => ( {k.display} ))} )} { toggleEveChat(); }} className="inline-flex items-center gap-2 rounded-lg border border-[var(--composio-orange)]/20 bg-[var(--composio-orange)]/5 p-1.5 ps-2.5 text-sm text-[var(--composio-orange)] transition-colors hover:bg-[var(--composio-orange)]/10 shrink-0" > Ask AI {isMac ? '⌘' : 'Ctrl'} I > ); } /** Mobile: search icon + Ask AI icon, shown below lg breakpoint */ export function SearchAndAskAIMobile() { const { enabled, setOpenSearch } = useSearchContext(); return ( <> {enabled && ( setOpenSearch(true)} > )} { toggleEveChat(); }} className="inline-flex items-center justify-center rounded-md p-2 text-sm font-medium transition-colors duration-100 hover:bg-fd-accent hover:text-fd-accent-foreground" > > ); }