import { useState } from "react"; import { cn } from "~/lib/utils"; import { Settings, Bell, BellOff, Clock, Keyboard, Menu, Save, } from "lucide-react"; import { Button } from "@/routes/ui/button"; export interface NotificationSettings { enabled: boolean; priorities: { high: boolean; medium: boolean; low: boolean; }; quietHours: { enabled: boolean; start: string; end: string; }; groupNotifications: boolean; smartBatching: boolean; } export interface KeyboardShortcut { id: string; action: string; shortcut: string; description: string; } export interface QuickActionsSettings { contextMenuEnabled: boolean; autoDetectAddresses: boolean; } export interface ProductivitySettingsData { notifications: NotificationSettings; shortcuts: KeyboardShortcut[]; quickActions: QuickActionsSettings; } export interface ProductivitySettingsPanelProps { /** Current settings */ settings?: ProductivitySettingsData; /** Callback when settings are saved */ onSave?: (settings: ProductivitySettingsData) => void; /** Additional class names */ className?: string; } /** * ProductivitySettingsPanel - Productivity settings management * * Features: * - Notification settings (priorities, quiet hours, grouping) * - Keyboard shortcuts configuration * - Quick actions settings (context menu, auto-detect) * - Per-token notification settings */ export function ProductivitySettingsPanel({ settings: initialSettings, onSave, className, }: ProductivitySettingsPanelProps) { const [settings, setSettings] = useState( initialSettings || { notifications: { enabled: true, priorities: { high: true, medium: true, low: false, }, quietHours: { enabled: true, start: "23:00", end: "07:00", }, groupNotifications: true, smartBatching: true, }, shortcuts: [ { id: "open-panel", action: "Open Side Panel", shortcut: "Cmd+Shift+S", description: "Open/close the side panel" }, { id: "new-chat", action: "New Chat", shortcut: "Cmd+Shift+N", description: "Start a new chat" }, { id: "analyze-token", action: "Analyze Token", shortcut: "Cmd+Shift+A", description: "Analyze current token" }, { id: "add-watchlist", action: "Add to Watchlist", shortcut: "Cmd+Shift+W", description: "Add token to watchlist" }, { id: "capture-chart", action: "Capture Chart", shortcut: "Cmd+Shift+C", description: "Capture chart screenshot" }, { id: "open-portfolio", action: "Open Portfolio", shortcut: "Cmd+Shift+P", description: "Open portfolio panel" }, ], quickActions: { contextMenuEnabled: true, autoDetectAddresses: true, }, } ); const [hasChanges, setHasChanges] = useState(false); const updateSettings = (updates: Partial) => { setSettings({ ...settings, ...updates }); setHasChanges(true); }; const handleSave = () => { onSave?.(settings); setHasChanges(false); }; return (
{/* Header */}

Productivity Settings

Notifications, shortcuts, and quick actions

{/* Content */}
{/* Notifications */}

Notifications

{/* Enable/Disable */} {/* Priority Levels */}
{(["high", "medium", "low"] as const).map((priority) => ( ))}
{/* Quiet Hours */}
{settings.notifications.quietHours.enabled && (
updateSettings({ notifications: { ...settings.notifications, quietHours: { ...settings.notifications.quietHours, start: e.target.value, }, }, }) } className="flex-1 p-1 text-xs border rounded" /> to updateSettings({ notifications: { ...settings.notifications, quietHours: { ...settings.notifications.quietHours, end: e.target.value, }, }, }) } className="flex-1 p-1 text-xs border rounded" />
)}
{/* Grouping Options */}
{/* Keyboard Shortcuts */}

Keyboard Shortcuts

{settings.shortcuts.map((shortcut) => (
{shortcut.action}
{shortcut.description}
{shortcut.shortcut}
))}
{/* Quick Actions */}

Quick Actions

{/* Footer - Save Button */}
); }