my_gradio / js /core /src /Login.svelte
xray918's picture
Upload folder using huggingface_hub
0ad74ed verified
<script lang="ts">
import Form from "@gradio/form";
import { BaseTextbox as Textbox } from "@gradio/textbox";
import { BaseButton } from "@gradio/button";
import Column from "@gradio/column";
import { Block } from "@gradio/atoms";
import { _ } from "svelte-i18n";
export let root: string;
export let auth_message: string | null;
export let app_mode: boolean;
export let space_id: string | null;
let username = "";
let password = "";
let incorrect_credentials = false;
const submit = async (): Promise<void> => {
const formData = new FormData();
formData.append("username", username);
formData.append("password", password);
let response = await fetch(root + "/login", {
method: "POST",
body: formData
});
if (response.status === 400) {
incorrect_credentials = true;
username = "";
password = "";
} else if (response.status == 200) {
location.reload();
}
};
</script>
<div class="wrap" class:min-h-screen={app_mode}>
<Column variant="panel" min_width={480}>
<h2>{$_("login.login")}</h2>
{#if auth_message}
<p class="auth">{@html auth_message}</p>
{/if}
{#if space_id}
<p class="auth">
{$_("login.enable_cookies")}
</p>
{/if}
{#if incorrect_credentials}
<p class="creds">{$_("login.incorrect_credentials")}</p>
{/if}
<Form>
<Block>
<Textbox
{root}
label="username"
lines={1}
show_label={true}
max_lines={1}
on:submit={submit}
bind:value={username}
/>
</Block>
<Block>
<Textbox
{root}
label="password"
lines={1}
show_label={true}
max_lines={1}
type="password"
on:submit={submit}
bind:value={password}
/>
</Block>
</Form>
<BaseButton size="lg" variant="primary" on:click={submit}
>{$_("login.login")}</BaseButton
>
</Column>
</div>
<style>
.wrap {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
margin-top: var(--size-3);
background: var(--background-fill-primary);
width: var(--size-full);
}
h2 {
margin-bottom: var(--size-3);
color: var(--body-text-color);
font-weight: var(--section-header-text-weight);
font-size: var(--text-xl);
}
.auth {
margin-top: var(--size-1);
margin-bottom: var(--size-1);
color: var(--body-text-color);
}
.creds {
margin-top: var(--size-4);
margin-bottom: var(--size-4);
color: var(--error-text-color);
font-weight: var(--weight-semibold);
}
</style>