'use client' import { createContext, useContext, useState, useCallback, useEffect, ReactNode } from 'react' interface CommandPaletteContextType { isOpen: boolean open: () => void close: () => void toggle: () => void } const CommandPaletteContext = createContext(undefined) export function CommandPaletteProvider({ children }: { children: ReactNode }) { const [isOpen, setIsOpen] = useState(false) const open = useCallback(() => setIsOpen(true), []) const close = useCallback(() => setIsOpen(false), []) const toggle = useCallback(() => setIsOpen(prev => !prev), []) // Global keyboard shortcut: CMD+K / Ctrl+K useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { if ((e.metaKey || e.ctrlKey) && e.key === 'k') { e.preventDefault() toggle() } if (e.key === 'Escape' && isOpen) { e.preventDefault() close() } } document.addEventListener('keydown', handleKeyDown) return () => document.removeEventListener('keydown', handleKeyDown) }, [isOpen, toggle, close]) return ( {children} ) } export function useCommandPalette() { const context = useContext(CommandPaletteContext) if (!context) { throw new Error('useCommandPalette must be used within a CommandPaletteProvider') } return context }