import { useEffect, useState } from "react"; import { Command } from "cmdk"; import { useTranslation } from "react-i18next"; import { Calculator, Calendar, CreditCard, Settings, Smile, User, LayoutGrid, List, CheckSquare, Plus, Moon, Sun, Search } from "lucide-react"; import { useTheme } from "next-themes"; import { Dialog, DialogContent } from "@/components/ui/dialog"; interface CommandPaletteProps { onNavigate: (tab: string) => void; onCreateTask: () => void; } export function CommandPalette({ onNavigate, onCreateTask }: CommandPaletteProps) { const [open, setOpen] = useState(false); const { t } = useTranslation(); const { setTheme, theme } = useTheme(); useEffect(() => { const down = (e: KeyboardEvent) => { if (e.key === "k" && (e.metaKey || e.ctrlKey)) { e.preventDefault(); setOpen((open) => !open); } }; document.addEventListener("keydown", down); return () => document.removeEventListener("keydown", down); }, []); const runCommand = (command: () => void) => { setOpen(false); command(); }; return (
{t('search.noResults') || "No results found."} runCommand(onCreateTask)} className="relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer" > {t('taskCreation.title') || "Create New Task"} Cmd+N runCommand(() => setTheme(theme === 'dark' ? 'light' : 'dark'))} className="relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer" > {theme === 'dark' ? : } {t('theme.toggle') || "Toggle Theme"} runCommand(() => onNavigate('tasks'))} className="relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer" > Tasks runCommand(() => onNavigate('calendar'))} className="relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer" > Calendar runCommand(() => onNavigate('weeklist'))} className="relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer" > Week List runCommand(() => onNavigate('kanban'))} className="relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer" > Kanban Board runCommand(() => onNavigate('settings'))} className="relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none aria-selected:bg-accent aria-selected:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer" > Settings
); }