char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
d05f89562
char/aliceai-t5-moe
1import { page } from '$app/state' ; 2import { NEW_CHAT_TAB_ID } from '$lib/constants' ; 3import { KeyboardKey } from '$lib/enums' ; 4import { conversationsStore , settingsStore , tabsStore } from '$lib/stores' ; 5 6interface KeyboardShortcutsCallbacks { 7activateSearchMode ?:() => void ; 8editActiveConversation ?:() => void ; 9onSearchActivated ?:() => void ; 10deleteActiveConversation ?:() => void ; 11navigateToPrevConversation ?:() => void ; 12navigateToNextConversation ?:() => void ; 13navigateToPrevTab ?:() => void ; 14navigateToNextTab ?:() => void ; 15toggleSidebar ?:() => void ; 16} 17 18export function useKeyboardShortcuts ( callbacks :KeyboardShortcutsCallbacks ) { 19function handleKeydown ( event :KeyboardEvent ) { 20const isCmdOrCtrl = event . metaKey || event . ctrlKey ; 21 22if ( isCmdOrCtrl && event . key === KeyboardKey . K_LOWER ) { 23event . preventDefault (); 24callbacks . activateSearchMode ?.(); 25callbacks . onSearchActivated ?.(); 26} 27 28if ( isCmdOrCtrl && event . key === KeyboardKey . B_LOWER ) { 29event . preventDefault (); 30callbacks . toggleSidebar ?.(); 31} 32 33if ( 34isCmdOrCtrl && 35event . shiftKey && 36( event . key === KeyboardKey . O_LOWER || event . key === KeyboardKey . O_UPPER ) 37) { 38event . preventDefault (); 39 40void conversationsStore . openNewChat (); 41} 42 43if ( event . shiftKey && isCmdOrCtrl && event . key === KeyboardKey . E_UPPER ) { 44event . preventDefault (); 45callbacks . editActiveConversation ?.(); 46} 47 48if ( 49event . shiftKey && 50isCmdOrCtrl && 51( event . key === KeyboardKey . X_LOWER || event . key === KeyboardKey . X_UPPER ) 52) { 53// several components register this shortcut; only let the first handler 54// act so the synchronous navigation does not cascade-close every tab 55if ( event . defaultPrevented ) return ; 56 57// close-tab only makes sense with conversation tabs enabled 58if ( ! settingsStore . config . conversationTabs ) return ; 59 60event . preventDefault (); 61 62const activeId = 63page . params . id ?? ( page . route . id === '/(chat)' ?NEW_CHAT_TAB_ID :undefined ); 64 65if ( activeId ) { 66void tabsStore . close ( activeId , activeId ); 67} 68} 69 70if ( 71isCmdOrCtrl && 72event . shiftKey && 73( event . key === KeyboardKey . D_LOWER || event . key === KeyboardKey . D_UPPER ) 74) { 75event . preventDefault (); 76callbacks . deleteActiveConversation ?.(); 77} 78 79if ( isCmdOrCtrl && event . shiftKey && event . key === KeyboardKey . ARROW_UP ) { 80event . preventDefault (); 81callbacks . navigateToPrevConversation ?.(); 82} 83 84if ( isCmdOrCtrl && event . shiftKey && event . key === KeyboardKey . ARROW_DOWN ) { 85event . preventDefault (); 86callbacks . navigateToNextConversation ?.(); 87} 88 89if ( isCmdOrCtrl && event . altKey && event . shiftKey && event . code === KeyboardKey . BRACKET_LEFT ) { 90event . preventDefault (); 91callbacks . navigateToPrevTab ?.(); 92} 93 94if ( isCmdOrCtrl && event . altKey && event . shiftKey && event . code === KeyboardKey . BRACKET_RIGHT ) { 95event . preventDefault (); 96callbacks . navigateToNextTab ?.(); 97} 98} 99 100return { handleKeydown}; 101}