open-webui/src/lib/components/chat/ShortcutsModal.svelte

393 lines
13 KiB
Svelte
Raw Normal View History

2023-12-28 10:46:57 +00:00
<script lang="ts">
import { getContext } from 'svelte';
2023-12-28 10:46:57 +00:00
import Modal from '../common/Modal.svelte';
import Tooltip from '../common/Tooltip.svelte';
const i18n = getContext('i18n');
2025-06-25 22:44:45 +00:00
import XMark from '$lib/components/icons/XMark.svelte';
2023-12-28 10:46:57 +00:00
export let show = false;
</script>
<Modal bind:show>
2024-05-02 09:47:16 +00:00
<div class="text-gray-700 dark:text-gray-100">
2024-05-02 00:55:18 +00:00
<div class=" flex justify-between dark:text-gray-300 px-5 pt-4">
<div class=" text-lg font-medium self-center">{$i18n.t('Keyboard shortcuts')}</div>
2023-12-28 10:46:57 +00:00
<button
class="self-center"
on:click={() => {
show = false;
}}
>
2025-06-27 11:44:26 +00:00
<XMark className={'size-5'} />
2023-12-28 10:46:57 +00:00
</button>
</div>
<div class="flex flex-col md:flex-row w-full p-5 md:space-x-4 dark:text-gray-200">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<div class="flex flex-col space-y-3 w-full self-start">
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Open new chat')}</div>
2023-12-28 10:46:57 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Ctrl/⌘
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Shift
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
O
</div>
</div>
</div>
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Focus chat input')}</div>
2023-12-28 10:46:57 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Shift
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Esc
</div>
</div>
</div>
<div class="w-full flex justify-between items-center">
<div class=" text-sm">
<Tooltip
content={$i18n.t(
'Only active when the chat input is in focus and an LLM is generating a response.'
)}
>
{$i18n.t('Stop Generating')}<span class="text-xs"> *</span>
</Tooltip>
</div>
<div class="flex space-x-1 text-xs">
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
Esc
</div>
</div>
</div>
2023-12-28 10:46:57 +00:00
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Copy last code block')}</div>
2023-12-28 10:46:57 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Ctrl/⌘
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Shift
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
;
</div>
</div>
</div>
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Copy last response')}</div>
2023-12-28 10:46:57 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Ctrl/⌘
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Shift
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
C
</div>
</div>
</div>
<div class="w-full flex justify-between items-center">
<div class=" text-sm">
<Tooltip
content={$i18n.t(
'Only active when "Paste Large Text as File" setting is toggled on.'
)}
>
{$i18n.t('Prevent file creation')}<span class="text-s"> *</span>
</Tooltip>
</div>
<div class="flex space-x-1 text-xs">
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
Ctrl/⌘
</div>
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
Shift
</div>
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
V
</div>
</div>
</div>
2023-12-28 10:46:57 +00:00
</div>
<div class="flex flex-col space-y-3 w-full self-start">
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Generate prompt pair')}</div>
<div class="flex space-x-1 text-xs">
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
Ctrl/⌘
</div>
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
Shift
</div>
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
Enter
</div>
</div>
</div>
2025-05-18 21:40:51 +00:00
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Toggle search')}</div>
<div class="flex space-x-1 text-xs">
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
Ctrl/⌘
</div>
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
K
</div>
</div>
</div>
2023-12-30 07:35:08 +00:00
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Toggle settings')}</div>
2023-12-30 07:35:08 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-30 07:35:08 +00:00
>
Ctrl/⌘
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-30 07:35:08 +00:00
>
2023-12-30 08:24:57 +00:00
.
2023-12-30 07:35:08 +00:00
</div>
</div>
</div>
2023-12-28 10:46:57 +00:00
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Toggle sidebar')}</div>
2023-12-28 10:46:57 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Ctrl/⌘
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Shift
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
S
</div>
</div>
</div>
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Delete chat')}</div>
2023-12-28 10:46:57 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Ctrl/⌘
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Shift
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
2024-10-19 08:07:30 +00:00
⌫/Delete
2023-12-28 10:46:57 +00:00
</div>
</div>
</div>
<div class="w-full flex justify-between items-center">
<div class=" text-sm">{$i18n.t('Show shortcuts')}</div>
2023-12-28 10:46:57 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
Ctrl/⌘
</div>
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2023-12-28 10:46:57 +00:00
>
/
</div>
</div>
</div>
</div>
</div>
2024-05-03 21:03:22 +00:00
</div>
<div class="px-5 pb-4 text-xs text-gray-500 dark:text-gray-400">
{$i18n.t(
'Shortcuts with an asterisk (*) are situational and only active under specific conditions.'
)}
</div>
2024-05-03 21:03:22 +00:00
<div class=" flex justify-between dark:text-gray-300 px-5">
2025-06-16 09:48:50 +00:00
<div class=" text-lg font-medium self-center">{$i18n.t('Input commands')}</div>
2024-05-03 21:03:22 +00:00
</div>
2024-05-03 21:03:22 +00:00
<div class="flex flex-col md:flex-row w-full p-5 md:space-x-4 dark:text-gray-200">
<div class=" flex flex-col w-full sm:flex-row sm:justify-center sm:space-x-6">
<div class="flex flex-col space-y-3 w-full self-start">
<div class="w-full flex justify-between items-center">
<div class=" text-sm">
{$i18n.t('Attach file from knowledge')}
2024-05-03 21:03:22 +00:00
</div>
2024-05-03 21:03:22 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2024-05-03 21:03:22 +00:00
>
#
</div>
</div>
2024-05-03 21:03:22 +00:00
</div>
2024-05-03 21:03:22 +00:00
<div class="w-full flex justify-between items-center">
<div class=" text-sm">
{$i18n.t('Add custom prompt')}
</div>
2024-05-03 21:03:22 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2024-05-03 21:03:22 +00:00
>
/
</div>
</div>
2024-05-03 21:03:22 +00:00
</div>
2024-05-03 21:03:22 +00:00
<div class="w-full flex justify-between items-center">
<div class=" text-sm">
{$i18n.t('Talk to model')}
2024-05-03 21:03:22 +00:00
</div>
2024-05-03 21:03:22 +00:00
<div class="flex space-x-1 text-xs">
<div
2025-02-16 03:27:25 +00:00
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
2024-05-03 21:03:22 +00:00
>
@
</div>
</div>
</div>
<div class="w-full flex justify-between items-center">
<div class=" text-sm">
2025-02-23 04:00:06 +00:00
{$i18n.t('Accept autocomplete generation / Jump to prompt variable')}
</div>
<div class="flex space-x-1 text-xs">
<div
class=" h-fit py-1 px-2 flex items-center justify-center rounded-sm border border-black/10 capitalize text-gray-600 dark:border-white/10 dark:text-gray-300"
>
TAB
</div>
</div>
</div>
</div>
</div>
2023-12-28 10:46:57 +00:00
</div>
2024-05-03 21:03:22 +00:00
</div>
</Modal>
2023-12-28 10:46:57 +00:00
<style>
input::-webkit-outer-spin-button,
input::-webkit-inner-spin-button {
/* display: none; <- Crashes Chrome on hover */
-webkit-appearance: none;
margin: 0; /* <-- Apparently some margin are still there even though it's hidden */
}
.tabs::-webkit-scrollbar {
display: none; /* for Chrome, Safari and Opera */
}
.tabs {
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
}
input[type='number'] {
-moz-appearance: textfield; /* Firefox */
}
</style>