mirror of
https://github.com/open-webui/desktop
synced 2025-06-26 18:15:59 +00:00
enh: toast
This commit is contained in:
parent
ab0736728a
commit
c36ab799ef
11
package-lock.json
generated
11
package-lock.json
generated
@ -39,6 +39,7 @@
|
|||||||
"prettier-plugin-svelte": "^3.3.2",
|
"prettier-plugin-svelte": "^3.3.2",
|
||||||
"svelte": "^5.17.1",
|
"svelte": "^5.17.1",
|
||||||
"svelte-check": "^4.1.3",
|
"svelte-check": "^4.1.3",
|
||||||
|
"svelte-sonner": "^0.3.28",
|
||||||
"tailwindcss": "^4.0.0-beta.8",
|
"tailwindcss": "^4.0.0-beta.8",
|
||||||
"tippy.js": "^6.3.7",
|
"tippy.js": "^6.3.7",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
@ -10843,6 +10844,16 @@
|
|||||||
"url": "https://github.com/sponsors/jonschlinkert"
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/svelte-sonner": {
|
||||||
|
"version": "0.3.28",
|
||||||
|
"resolved": "https://registry.npmjs.org/svelte-sonner/-/svelte-sonner-0.3.28.tgz",
|
||||||
|
"integrity": "sha512-K3AmlySeFifF/cKgsYNv5uXqMVNln0NBAacOYgmkQStLa/UoU0LhfAACU6Gr+YYC8bOCHdVmFNoKuDbMEsppJg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"svelte": "^3.0.0 || ^4.0.0 || ^5.0.0-next.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tailwindcss": {
|
"node_modules/tailwindcss": {
|
||||||
"version": "4.0.0-beta.8",
|
"version": "4.0.0-beta.8",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0-beta.8.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.0-beta.8.tgz",
|
||||||
|
|||||||
@ -39,6 +39,7 @@
|
|||||||
"prettier-plugin-svelte": "^3.3.2",
|
"prettier-plugin-svelte": "^3.3.2",
|
||||||
"svelte": "^5.17.1",
|
"svelte": "^5.17.1",
|
||||||
"svelte-check": "^4.1.3",
|
"svelte-check": "^4.1.3",
|
||||||
|
"svelte-sonner": "^0.3.28",
|
||||||
"tailwindcss": "^4.0.0-beta.8",
|
"tailwindcss": "^4.0.0-beta.8",
|
||||||
"tippy.js": "^6.3.7",
|
"tippy.js": "^6.3.7",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import { Toaster, toast } from 'svelte-sonner';
|
||||||
|
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { installStatus, serverStatus, serverStartedAt, serverLogs } from './lib/stores';
|
import { installStatus, serverStatus, serverStartedAt, serverLogs } from './lib/stores';
|
||||||
|
|
||||||
@ -61,3 +63,9 @@
|
|||||||
<main class="w-screen h-screen bg-gray-900">
|
<main class="w-screen h-screen bg-gray-900">
|
||||||
<Main />
|
<Main />
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
<Toaster
|
||||||
|
theme={window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'}
|
||||||
|
richColors
|
||||||
|
position="top-center"
|
||||||
|
/>
|
||||||
|
|||||||
@ -89,7 +89,7 @@
|
|||||||
|
|
||||||
<div class="flex-1 w-full flex justify-center relative">
|
<div class="flex-1 w-full flex justify-center relative">
|
||||||
{#if $installStatus === false}
|
{#if $installStatus === false}
|
||||||
<div class="m-auto flex flex-col justify-center text-center">
|
<div class="m-auto flex flex-col justify-center text-center max-w-2xl w-full">
|
||||||
{#if mounted}
|
{#if mounted}
|
||||||
<div
|
<div
|
||||||
class=" font-medium text-5xl xl:text-7xl text-center mb-4 xl:mb-5 font-secondary"
|
class=" font-medium text-5xl xl:text-7xl text-center mb-4 xl:mb-5 font-secondary"
|
||||||
@ -168,7 +168,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{:else if $installStatus === true}
|
{:else if $installStatus === true}
|
||||||
<div class="flex-1 w-full flex justify-center relative">
|
<div class="flex-1 w-full flex justify-center relative">
|
||||||
<div class="m-auto">
|
<div class="m-auto max-w-2xl w-full">
|
||||||
<div class="flex flex-col gap-3 text-center">
|
<div class="flex flex-col gap-3 text-center">
|
||||||
<Spinner className="size-5" />
|
<Spinner className="size-5" />
|
||||||
|
|
||||||
|
|||||||
@ -1,16 +1,26 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import { toast } from 'svelte-sonner';
|
||||||
import Tooltip from '../common/Tooltip.svelte';
|
import Tooltip from '../common/Tooltip.svelte';
|
||||||
|
import { copyToClipboard } from '../../utils';
|
||||||
|
|
||||||
export let show;
|
export let show;
|
||||||
export let logs = [];
|
export let logs = [];
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if show}
|
{#if show}
|
||||||
<div class="relative max-w-full px-3">
|
<div class="relative max-w-full w-full px-3">
|
||||||
{#if logs.length > 0}
|
{#if logs.length > 0}
|
||||||
<div class="absolute top-0 right-0 p-1 bg-transparent text-xs font-mono">
|
<div class="absolute top-0 right-0 p-1 bg-transparent text-xs font-mono">
|
||||||
<Tooltip content="Copy">
|
<Tooltip content="Copy">
|
||||||
<button class="text-xs cursor-pointer" on:click={() => (logs = [])}>
|
<button
|
||||||
|
class="text-xs cursor-pointer"
|
||||||
|
type="button"
|
||||||
|
on:click={async () => {
|
||||||
|
await copyToClipboard(logs.join('\n'));
|
||||||
|
|
||||||
|
toast.success('Logs copied to clipboard');
|
||||||
|
}}
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
fill="none"
|
fill="none"
|
||||||
@ -31,10 +41,12 @@
|
|||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<div
|
<div
|
||||||
class="text-xs font-mono text-left max-h-40 overflow-y-auto max-w-2xl w-full flex flex-col-reverse scrollbar-hidden no-drag-region"
|
class="text-xs font-mono text-left max-h-40 overflow-auto max-w-full w-full flex flex-col-reverse scrollbar-hidden no-drag-region"
|
||||||
>
|
>
|
||||||
{#each logs.reverse() as log, idx}
|
{#each logs.reverse() as log, idx}
|
||||||
<div class="text-xs font-mono">{log}</div>
|
<div class="text-xs font-mono whitespace-pre-wrap text-wrap max-w-full w-full">
|
||||||
|
{log}
|
||||||
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user