mirror of
https://github.com/gradio-app/gradio.git
synced 2024-12-03 01:50:59 +08:00
fbdad78af4
* lazy load compoennts more granularly * add changeset * format * add changeset * fix casing * fix casing * fix casing * revert changelog formatting * add changeset * revert changelog formatting * add changeset * make interactive updates work * revert changelog stuff * fix order * fix static dataframe * revert demo change --------- Co-authored-by: gradio-pr-bot <gradio-pr-bot@users.noreply.github.com>
279 lines
5.2 KiB
Svelte
279 lines
5.2 KiB
Svelte
<script lang="ts">
|
|
import { Error, Info, Warning } from "@gradio/icons";
|
|
import { createEventDispatcher, onMount } from "svelte";
|
|
import { fade } from "svelte/transition";
|
|
import type { ToastMessage } from "./types";
|
|
|
|
export let message = "";
|
|
export let type: ToastMessage["type"];
|
|
export let id: number;
|
|
|
|
const dispatch = createEventDispatcher();
|
|
|
|
function close_message(): void {
|
|
dispatch("close", id);
|
|
}
|
|
|
|
onMount(() => {
|
|
setTimeout(() => {
|
|
close_message();
|
|
}, 10000);
|
|
});
|
|
</script>
|
|
|
|
<!-- TODO: fix-->
|
|
<!-- svelte-ignore a11y-no-noninteractive-element-interactions-->
|
|
<div
|
|
class="toast-body {type}"
|
|
role="alert"
|
|
data-testid="toast-body"
|
|
on:click|stopPropagation
|
|
on:keydown|stopPropagation
|
|
in:fade={{ duration: 200, delay: 100 }}
|
|
out:fade={{ duration: 200 }}
|
|
>
|
|
<div class="toast-icon {type}">
|
|
{#if type === "warning"}
|
|
<Warning />
|
|
{:else if type === "info"}
|
|
<Info />
|
|
{:else if type === "error"}
|
|
<Error />
|
|
{/if}
|
|
</div>
|
|
|
|
<div class="toast-details {type}">
|
|
<div class="toast-title {type}">{type}</div>
|
|
<div class="toast-text {type}">
|
|
{message}
|
|
</div>
|
|
</div>
|
|
|
|
<button
|
|
on:click={close_message}
|
|
class="toast-close {type}"
|
|
type="button"
|
|
aria-label="Close"
|
|
data-testid="toast-close"
|
|
>
|
|
<span aria-hidden="true">×</span>
|
|
</button>
|
|
|
|
<div class="timer {type}" />
|
|
</div>
|
|
|
|
<style>
|
|
.toast-body {
|
|
display: flex;
|
|
position: relative;
|
|
right: 0;
|
|
left: 0;
|
|
align-items: center;
|
|
margin: var(--size-6) var(--size-4);
|
|
margin: auto;
|
|
border-radius: var(--container-radius);
|
|
overflow: hidden;
|
|
pointer-events: auto;
|
|
}
|
|
|
|
.toast-body.error {
|
|
border: 1px solid var(--color-red-700);
|
|
background: var(--color-red-50);
|
|
}
|
|
:global(.dark) .toast-body.error {
|
|
border: 1px solid var(--color-red-500);
|
|
background-color: var(--color-grey-950);
|
|
}
|
|
|
|
.toast-body.warning {
|
|
border: 1px solid var(--color-yellow-700);
|
|
background: var(--color-yellow-50);
|
|
}
|
|
:global(.dark) .toast-body.warning {
|
|
border: 1px solid var(--color-yellow-500);
|
|
background-color: var(--color-grey-950);
|
|
}
|
|
|
|
.toast-body.info {
|
|
border: 1px solid var(--color-grey-700);
|
|
background: var(--color-grey-50);
|
|
}
|
|
:global(.dark) .toast-body.info {
|
|
border: 1px solid var(--color-grey-500);
|
|
background-color: var(--color-grey-950);
|
|
}
|
|
|
|
.toast-title {
|
|
display: flex;
|
|
align-items: center;
|
|
font-weight: var(--weight-bold);
|
|
font-size: var(--text-lg);
|
|
line-height: var(--line-sm);
|
|
text-transform: capitalize;
|
|
}
|
|
|
|
.toast-title.error {
|
|
color: var(--color-red-700);
|
|
}
|
|
:global(.dark) .toast-title.error {
|
|
color: var(--color-red-50);
|
|
}
|
|
|
|
.toast-title.warning {
|
|
color: var(--color-yellow-700);
|
|
}
|
|
:global(.dark) .toast-title.warning {
|
|
color: var(--color-yellow-50);
|
|
}
|
|
|
|
.toast-title.info {
|
|
color: var(--color-grey-700);
|
|
}
|
|
:global(.dark) .toast-title.info {
|
|
color: var(--color-grey-50);
|
|
}
|
|
|
|
.toast-close {
|
|
margin: 0 var(--size-3);
|
|
border-radius: var(--size-3);
|
|
padding: 0px var(--size-1-5);
|
|
font-size: var(--size-5);
|
|
line-height: var(--size-5);
|
|
}
|
|
|
|
.toast-close.error {
|
|
color: var(--color-red-700);
|
|
}
|
|
:global(.dark) .toast-close.error {
|
|
color: var(--color-red-500);
|
|
}
|
|
|
|
.toast-close.warning {
|
|
color: var(--color-yellow-700);
|
|
}
|
|
:global(.dark) .toast-close.warning {
|
|
color: var(--color-yellow-500);
|
|
}
|
|
|
|
.toast-close.info {
|
|
color: var(--color-grey-700);
|
|
}
|
|
:global(.dark) .toast-close.info {
|
|
color: var(--color-grey-500);
|
|
}
|
|
|
|
.toast-text {
|
|
font-size: var(--text-lg);
|
|
}
|
|
|
|
.toast-text.error {
|
|
color: var(--color-red-700);
|
|
}
|
|
:global(.dark) .toast-text.error {
|
|
color: var(--color-red-50);
|
|
}
|
|
|
|
.toast-text.warning {
|
|
color: var(--color-yellow-700);
|
|
}
|
|
|
|
:global(.dark) .toast-text.warning {
|
|
color: var(--color-yellow-50);
|
|
}
|
|
|
|
.toast-text.info {
|
|
color: var(--color-grey-700);
|
|
}
|
|
|
|
:global(.dark) .toast-text.info {
|
|
color: var(--color-grey-50);
|
|
}
|
|
|
|
.toast-details {
|
|
margin: var(--size-3) var(--size-3) var(--size-3) 0;
|
|
width: 100%;
|
|
}
|
|
|
|
.toast-icon {
|
|
display: flex;
|
|
position: absolute;
|
|
position: relative;
|
|
flex-shrink: 0;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin: var(--size-2);
|
|
border-radius: var(--radius-full);
|
|
padding: var(--size-1);
|
|
padding-left: calc(var(--size-1) - 1px);
|
|
width: 35px;
|
|
height: 35px;
|
|
}
|
|
|
|
.toast-icon.error {
|
|
color: var(--color-red-700);
|
|
}
|
|
|
|
:global(.dark) .toast-icon.error {
|
|
color: var(--color-red-500);
|
|
}
|
|
|
|
.toast-icon.warning {
|
|
color: var(--color-yellow-700);
|
|
}
|
|
|
|
:global(.dark) .toast-icon.warning {
|
|
color: var(--color-yellow-500);
|
|
}
|
|
|
|
.toast-icon.info {
|
|
color: var(--color-grey-700);
|
|
}
|
|
|
|
:global(.dark) .toast-icon.info {
|
|
color: var(--color-grey-500);
|
|
}
|
|
|
|
@keyframes countdown {
|
|
from {
|
|
transform: scaleX(1);
|
|
}
|
|
to {
|
|
transform: scaleX(0);
|
|
}
|
|
}
|
|
|
|
.timer {
|
|
position: absolute;
|
|
bottom: 0;
|
|
left: 0;
|
|
transform-origin: 0 0;
|
|
animation: countdown 10s linear forwards;
|
|
width: 100%;
|
|
height: var(--size-1);
|
|
}
|
|
|
|
.timer.error {
|
|
background: var(--color-red-700);
|
|
}
|
|
|
|
:global(.dark) .timer.error {
|
|
background: var(--color-red-500);
|
|
}
|
|
|
|
.timer.warning {
|
|
background: var(--color-yellow-700);
|
|
}
|
|
|
|
:global(.dark) .timer.warning {
|
|
background: var(--color-yellow-500);
|
|
}
|
|
|
|
.timer.info {
|
|
background: var(--color-grey-700);
|
|
}
|
|
|
|
:global(.dark) .timer.info {
|
|
background: var(--color-grey-500);
|
|
}
|
|
</style>
|