Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
63c09270
Commit
63c09270
authored
Mar 02, 2024
by
Timothy J. Baek
Browse files
feat: tooltip
Co-Authored-By:
Jannik S.
<
69747628+jannikstdl@users.noreply.github.com
>
parent
edb63c22
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
138 additions
and
94 deletions
+138
-94
src/lib/components/chat/MessageInput.svelte
src/lib/components/chat/MessageInput.svelte
+107
-94
src/lib/components/common/Tooltip.svelte
src/lib/components/common/Tooltip.svelte
+31
-0
No files found.
src/lib/components/chat/MessageInput.svelte
View file @
63c09270
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
import Documents from './MessageInput/Documents.svelte';
import Documents from './MessageInput/Documents.svelte';
import Models from './MessageInput/Models.svelte';
import Models from './MessageInput/Models.svelte';
import { transcribeAudio } from '$lib/apis/audio';
import { transcribeAudio } from '$lib/apis/audio';
import Tooltip from '../common/Tooltip.svelte';
export let submitPrompt: Function;
export let submitPrompt: Function;
export let stopResponse: Function;
export let stopResponse: Function;
...
@@ -637,24 +638,26 @@
...
@@ -637,24 +638,26 @@
<div class=" flex">
<div class=" flex">
{#if fileUploadEnabled}
{#if fileUploadEnabled}
<div class=" self-end mb-2 ml-1">
<div class=" self-end mb-2 ml-1">
<button
<Tooltip content="Upload files">
class="bg-gray-50 hover:bg-gray-100 text-gray-800 dark:bg-gray-850 dark:text-white dark:hover:bg-gray-800 transition rounded-full p-1.5"
<button
type="button"
class="bg-gray-50 hover:bg-gray-100 text-gray-800 dark:bg-gray-850 dark:text-white dark:hover:bg-gray-800 transition rounded-full p-1.5"
on:click={() => {
type="button"
filesInputElement.click();
on:click={() => {
}}
filesInputElement.click();
>
}}
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 16 16"
fill="currentColor"
class="w-[1.2rem] h-[1.2rem]"
>
>
<path
<svg
d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z"
xmlns="http://www.w3.org/2000/svg"
/>
viewBox="0 0 16 16"
</svg>
fill="currentColor"
</button>
class="w-[1.2rem] h-[1.2rem]"
>
<path
d="M8.75 3.75a.75.75 0 0 0-1.5 0v3.5h-3.5a.75.75 0 0 0 0 1.5h3.5v3.5a.75.75 0 0 0 1.5 0v-3.5h3.5a.75.75 0 0 0 0-1.5h-3.5v-3.5Z"
/>
</svg>
</button>
</Tooltip>
</div>
</div>
{/if}
{/if}
...
@@ -806,87 +809,97 @@
...
@@ -806,87 +809,97 @@
<div class="self-end mb-2 flex space-x-1 mr-1">
<div class="self-end mb-2 flex space-x-1 mr-1">
{#if messages.length == 0 || messages.at(-1).done == true}
{#if messages.length == 0 || messages.at(-1).done == true}
{#if speechRecognitionEnabled}
<Tooltip content="Record voice">
<button
{#if speechRecognitionEnabled}
id="voice-input-button"
<button
class=" text-gray-600 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-850 transition rounded-full p-1.5 mr-0.5 self-center"
id="voice-input-button"
type="button"
class=" text-gray-600 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-850 transition rounded-full p-1.5 mr-0.5 self-center"
on:click={() => {
type="button"
speechRecognitionHandler();
on:click={() => {
}}
speechRecognitionHandler();
>
}}
{#if isRecording}
>
<svg
{#if isRecording}
class=" w-5 h-5 translate-y-[0.5px]"
<svg
fill="currentColor"
class=" w-5 h-5 translate-y-[0.5px]"
viewBox="0 0 24 24"
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
><style>
xmlns="http://www.w3.org/2000/svg"
.spinner_qM83 {
><style>
animation: spinner_8HQG 1.05s infinite;
.spinner_qM83 {
}
animation: spinner_8HQG 1.05s infinite;
.spinner_oXPr {
animation-delay: 0.1s;
}
.spinner_ZTLf {
animation-delay: 0.2s;
}
@keyframes spinner_8HQG {
0%,
57.14% {
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
transform: translate(0);
}
}
28.57% {
.spinner_oXPr {
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
animation-delay: 0.1s;
transform: translateY(-6px);
}
}
100%
{
.spinner_ZTLf
{
transform: translate(0)
;
animation-delay: 0.2s
;
}
}
}
@keyframes spinner_8HQG {
</style><circle class="spinner_qM83" cx="4" cy="12" r="2.5" /><circle
0%,
class="spinner_qM83 spinner_oXPr"
57.14% {
cx="12"
animation-timing-function: cubic-bezier(0.33, 0.66, 0.66, 1);
cy="12"
transform: translate(0);
r="2.5"
}
/><circle class="spinner_qM83 spinner_ZTLf" cx="20" cy="12" r="2.5" /></svg
28.57% {
>
animation-timing-function: cubic-bezier(0.33, 0, 0.66, 0.33);
{:else}
transform: translateY(-6px);
<svg
}
xmlns="http://www.w3.org/2000/svg"
100% {
viewBox="0 0 20 20"
transform: translate(0);
fill="currentColor"
}
class="w-5 h-5 translate-y-[0.5px]"
}
>
</style><circle class="spinner_qM83" cx="4" cy="12" r="2.5" /><circle
<path d="M7 4a3 3 0 016 0v6a3 3 0 11-6 0V4z" />
class="spinner_qM83 spinner_oXPr"
<path
cx="12"
d="M5.5 9.643a.75.75 0 00-1.5 0V10c0 3.06 2.29 5.585 5.25 5.954V17.5h-1.5a.75.75 0 000 1.5h4.5a.75.75 0 000-1.5h-1.5v-1.546A6.001 6.001 0 0016 10v-.357a.75.75 0 00-1.5 0V10a4.5 4.5 0 01-9 0v-.357z"
cy="12"
/>
r="2.5"
</svg>
/><circle
{/if}
class="spinner_qM83 spinner_ZTLf"
</button>
cx="20"
{/if}
cy="12"
<button
r="2.5"
class="{prompt !== ''
/></svg
? 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black dark:hover:bg-gray-100 '
>
: 'text-white bg-gray-100 dark:text-gray-900 dark:bg-gray-800 disabled'} transition rounded-full p-1.5 self-center"
{:else}
type="submit"
<svg
disabled={prompt === ''}
xmlns="http://www.w3.org/2000/svg"
>
viewBox="0 0 20 20"
<svg
fill="currentColor"
xmlns="http://www.w3.org/2000/svg"
class="w-5 h-5 translate-y-[0.5px]"
viewBox="0 0 16 16"
>
fill="currentColor"
<path d="M7 4a3 3 0 016 0v6a3 3 0 11-6 0V4z" />
class="w-5 h-5"
<path
d="M5.5 9.643a.75.75 0 00-1.5 0V10c0 3.06 2.29 5.585 5.25 5.954V17.5h-1.5a.75.75 0 000 1.5h4.5a.75.75 0 000-1.5h-1.5v-1.546A6.001 6.001 0 0016 10v-.357a.75.75 0 00-1.5 0V10a4.5 4.5 0 01-9 0v-.357z"
/>
</svg>
{/if}
</button>
{/if}
</Tooltip>
<Tooltip content="Send message">
<button
class="{prompt !== ''
? 'bg-black text-white hover:bg-gray-900 dark:bg-white dark:text-black dark:hover:bg-gray-100 '
: 'text-white bg-gray-100 dark:text-gray-900 dark:bg-gray-800 disabled'} transition rounded-full p-1.5 self-center"
type="submit"
disabled={prompt === ''}
>
>
<path
<svg
fill-rule="evenodd"
xmlns="http://www.w3.org/2000/svg"
d="M8 14a.75.75 0 0 1-.75-.75V4.56L4.03 7.78a.75.75 0 0 1-1.06-1.06l4.5-4.5a.75.75 0 0 1 1.06 0l4.5 4.5a.75.75 0 0 1-1.06 1.06L8.75 4.56v8.69A.75.75 0 0 1 8 14Z"
viewBox="0 0 16 16"
clip-rule="evenodd"
fill="currentColor"
/>
class="w-5 h-5"
</svg>
>
</button>
<path
fill-rule="evenodd"
d="M8 14a.75.75 0 0 1-.75-.75V4.56L4.03 7.78a.75.75 0 0 1-1.06-1.06l4.5-4.5a.75.75 0 0 1 1.06 0l4.5 4.5a.75.75 0 0 1-1.06 1.06L8.75 4.56v8.69A.75.75 0 0 1 8 14Z"
clip-rule="evenodd"
/>
</svg>
</button>
</Tooltip>
{:else}
{:else}
<button
<button
class="bg-white hover:bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-800 transition rounded-full p-1.5"
class="bg-white hover:bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-800 transition rounded-full p-1.5"
...
...
src/lib/components/common/Tooltip.svelte
0 → 100644
View file @
63c09270
<script lang="ts">
import { onDestroy } from 'svelte';
import tippy from 'tippy.js';
export let placement = 'top';
export let content = `I'm a tooltip!`;
let tooltipElement;
let tooltipInstance;
$: if (tooltipElement && content) {
if (tooltipInstance) {
tooltipInstance[0]?.destroy();
}
tooltipInstance = tippy(tooltipElement, {
content: content,
placement: placement,
allowHTML: true
});
}
onDestroy(() => {
if (tooltipInstance) {
tooltipInstance[0]?.destroy();
}
});
</script>
<div bind:this={tooltipElement}>
<slot />
</div>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment