import { create } from "zustand"; import type { MessageInputKeyboardActionKind } from "@/keyboard/actions"; export type MessageInputActionRequest = { id: number; agentKey: string; kind: MessageInputKeyboardActionKind; }; interface KeyboardShortcutsState { commandCenterOpen: boolean; shortcutsDialogOpen: boolean; altDown: boolean; cmdOrCtrlDown: boolean; /** Sidebar-visible agent keys (up to 9), in top-to-bottom visual order. */ sidebarShortcutAgentKeys: string[]; messageInputActionRequest: MessageInputActionRequest | null; setCommandCenterOpen: (open: boolean) => void; setShortcutsDialogOpen: (open: boolean) => void; setAltDown: (down: boolean) => void; setCmdOrCtrlDown: (down: boolean) => void; setSidebarShortcutAgentKeys: (keys: string[]) => void; resetModifiers: () => void; requestMessageInputAction: (input: { agentKey: string; kind: MessageInputKeyboardActionKind; }) => void; clearMessageInputActionRequest: (id: number) => void; } export const useKeyboardShortcutsStore = create( (set, get) => ({ commandCenterOpen: false, shortcutsDialogOpen: false, altDown: false, cmdOrCtrlDown: false, sidebarShortcutAgentKeys: [], messageInputActionRequest: null, setCommandCenterOpen: (open) => set({ commandCenterOpen: open }), setShortcutsDialogOpen: (open) => set({ shortcutsDialogOpen: open }), setAltDown: (down) => set({ altDown: down }), setCmdOrCtrlDown: (down) => set({ cmdOrCtrlDown: down }), setSidebarShortcutAgentKeys: (keys) => set({ sidebarShortcutAgentKeys: keys }), resetModifiers: () => set({ altDown: false, cmdOrCtrlDown: false }), requestMessageInputAction: ({ agentKey, kind }) => { const previous = get().messageInputActionRequest; const id = (previous?.id ?? 0) + 1; set({ messageInputActionRequest: { id, agentKey, kind } }); }, clearMessageInputActionRequest: (id) => { const current = get().messageInputActionRequest; if (!current || current.id !== id) { return; } set({ messageInputActionRequest: null }); }, }) );