'use client'; import React from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Keyboard, Command, Search, Plus, ArrowUp, ArrowDown, Eye, LayoutDashboard, Users, PenLine, Flower2, ClipboardCheck, Calculator, FileText, X, BookOpen, Grid3X3, CalendarCheck, Calendar, TrendingUp, Mail, Shield, Target, Ruler, MessageSquareText, CalendarDays, Settings, Palette, FileDown, Archive, ArrowLeft, } from 'lucide-react'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { ScrollArea } from '@/components/ui/scroll-area'; import { Separator } from '@/components/ui/separator'; import { t } from '@/lib/i18n'; import type { ViewName } from '@/lib/store'; interface KeyboardShortcutsDialogProps { open: boolean; onOpenChange: (open: boolean) => void; } interface ShortcutEntry { keys: string[]; labelKey: string; icon?: React.ElementType; } interface ShortcutSection { titleKey: string; icon: React.ElementType; entries: ShortcutEntry[]; } const viewShortcuts: { key: ViewName; num: number; icon: React.ElementType; labelKey: string }[] = [ { key: 'dashboard', num: 1, icon: LayoutDashboard, labelKey: 'nav.dashboard' }, { key: 'classes', num: 2, icon: Users, labelKey: 'nav.classes' }, { key: 'progress', num: 3, icon: PenLine, labelKey: 'nav.progress' }, { key: 'flower', num: 4, icon: Flower2, labelKey: 'nav.flower' }, { key: 'assessments', num: 5, icon: ClipboardCheck, labelKey: 'nav.assessments' }, { key: 'grading', num: 6, icon: Calculator, labelKey: 'nav.grading' }, { key: 'reports', num: 7, icon: FileText, labelKey: 'nav.reports' }, { key: 'competencies', num: 8, icon: BookOpen, labelKey: 'nav.competencies' }, { key: 'settings', num: 9, icon: Settings, labelKey: 'nav.settings' }, ]; function Kbd({ children }: { children: React.ReactNode }) { return ( {children} ); } function CommandKey() { return ( ); } export default function KeyboardShortcutsDialog({ open, onOpenChange }: KeyboardShortcutsDialogProps) { const sections: ShortcutSection[] = [ { titleKey: 'shortcuts.navigation', icon: Eye, entries: [ { keys: ['Cmd/Ctrl', 'K'], labelKey: 'shortcuts.quick_search', icon: Search }, { keys: ['Cmd/Ctrl', '1-9'], labelKey: 'shortcuts.switch_view', icon: LayoutDashboard }, { keys: ['Cmd/Ctrl', 'N'], labelKey: 'shortcuts.new_entry', icon: Plus }, { keys: ['Cmd/Ctrl', '/'], labelKey: 'shortcuts.show_shortcuts', icon: Keyboard }, { keys: ['Esc'], labelKey: 'shortcuts.close_dialog', icon: X }, ], }, { titleKey: 'shortcuts.views', icon: Eye, entries: viewShortcuts.map((v) => ({ keys: ['Cmd/Ctrl', String(v.num)], labelKey: v.labelKey, icon: v.icon, })), }, { titleKey: 'shortcuts.command_palette', icon: Command, entries: [ { keys: ['Arrow Up'], labelKey: 'shortcuts.navigation', icon: ArrowUp }, { keys: ['Arrow Down'], labelKey: 'shortcuts.navigation', icon: ArrowDown }, { keys: ['Enter'], labelKey: 'action.select', icon: Command }, { keys: ['Esc'], labelKey: 'shortcuts.close_dialog', icon: X }, ], }, { titleKey: 'shortcuts.notebooks_drawing', icon: BookOpen, entries: [ { keys: ['Cmd/Ctrl', 'N'], labelKey: 'shortcuts.new_notebook', icon: BookOpen }, { keys: ['Cmd/Ctrl', 'D'], labelKey: 'shortcuts.drawing', icon: Palette }, { keys: ['Cmd/Ctrl', 'Shift', 'N'], labelKey: 'shortcuts.new_page', icon: Plus }, { keys: ['Cmd/Ctrl', 'E'], labelKey: 'shortcuts.export_pdf', icon: FileDown }, { keys: ['Cmd/Ctrl', 'Shift', 'A'], labelKey: 'shortcuts.archive_toggle', icon: Archive }, { keys: ['Cmd/Ctrl', '.'], labelKey: 'shortcuts.close_notebook', icon: ArrowLeft }, ], }, ]; return (
{t('shortcuts.title')}
{t('shortcuts.description')}
{sections.map((section, sectionIdx) => (

{t(section.titleKey)}

{section.entries.map((entry, idx) => ( {entry.icon && ( )} {t(entry.labelKey)} {entry.keys.map((key, keyIdx) => ( {keyIdx > 0 && ( + )} {key === 'Cmd/Ctrl' ? : key} ))} ))}
{sectionIdx < sections.length - 1 && ( )}
))}
); }