forked from tsai/budibase
4 changed files with 1 additions and 220 deletions
@ -1,194 +0,0 @@ |
|||||
<script> |
|
||||
import { getContext } from "svelte" |
|
||||
|
|
||||
const { authStore, styleable, builderStore } = getContext("sdk") |
|
||||
const component = getContext("component") |
|
||||
|
|
||||
export let buttonText = "Log In" |
|
||||
export let logo = "" |
|
||||
export let title = "" |
|
||||
export let buttonClass = "" |
|
||||
export let inputClass = "" |
|
||||
|
|
||||
let email = "" |
|
||||
let password = "" |
|
||||
let loading = false |
|
||||
let error = false |
|
||||
let _buttonClass = "" |
|
||||
let _inputClass = "" |
|
||||
|
|
||||
$: { |
|
||||
_buttonClass = buttonClass || "default-button" |
|
||||
_inputClass = inputClass || "default-input" |
|
||||
} |
|
||||
|
|
||||
const login = async () => { |
|
||||
if ($builderStore.inBuilder) { |
|
||||
return |
|
||||
} |
|
||||
loading = true |
|
||||
await authStore.actions.logIn({ email, password }) |
|
||||
loading = false |
|
||||
} |
|
||||
|
|
||||
function handleKeydown(evt) { |
|
||||
if (evt.key === "Enter") { |
|
||||
login() |
|
||||
} |
|
||||
} |
|
||||
</script> |
|
||||
|
|
||||
<svelte:window on:keydown={handleKeydown} /> |
|
||||
<div class="root" use:styleable={$component.styles}> |
|
||||
<div class="content"> |
|
||||
{#if logo} |
|
||||
<div class="logo-container"><img src={logo} alt="logo" /></div> |
|
||||
{/if} |
|
||||
|
|
||||
{#if title} |
|
||||
<h2 class="header-content">{title}</h2> |
|
||||
{/if} |
|
||||
|
|
||||
<div class="form-root"> |
|
||||
<div class="control"> |
|
||||
<input |
|
||||
bind:value={email} |
|
||||
type="email" |
|
||||
placeholder="Email" |
|
||||
class={_inputClass} |
|
||||
/> |
|
||||
</div> |
|
||||
|
|
||||
<div class="control"> |
|
||||
<input |
|
||||
bind:value={password} |
|
||||
type="password" |
|
||||
placeholder="Password" |
|
||||
class={_inputClass} |
|
||||
/> |
|
||||
</div> |
|
||||
|
|
||||
<button disabled={loading} on:click={login} class={_buttonClass}> |
|
||||
{buttonText || "Log In"} |
|
||||
</button> |
|
||||
</div> |
|
||||
|
|
||||
{#if error} |
|
||||
<div class="incorrect-details-panel">Incorrect email or password</div> |
|
||||
{/if} |
|
||||
</div> |
|
||||
</div> |
|
||||
|
|
||||
<style> |
|
||||
.root { |
|
||||
height: 100%; |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
align-items: center; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
|
|
||||
.content { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
align-items: stretch; |
|
||||
justify-content: center; |
|
||||
} |
|
||||
|
|
||||
.logo-container { |
|
||||
margin-bottom: 10px; |
|
||||
display: flex; |
|
||||
flex-direction: row; |
|
||||
justify-content: center; |
|
||||
align-items: center; |
|
||||
} |
|
||||
|
|
||||
.logo-container > img { |
|
||||
max-height: 80px; |
|
||||
max-width: 200px; |
|
||||
margin-bottom: 20px; |
|
||||
} |
|
||||
|
|
||||
.header-content { |
|
||||
font-family: Inter; |
|
||||
font-weight: 700; |
|
||||
color: #1f1f1f; |
|
||||
font-size: 32px; |
|
||||
text-rendering: optimizeLegibility; |
|
||||
-webkit-font-smoothing: antialiased; |
|
||||
font-feature-settings: "case" "rlig" "calt" 0; |
|
||||
margin: 0 0 20px 0; |
|
||||
} |
|
||||
|
|
||||
.incorrect-details-panel { |
|
||||
margin-top: 26px; |
|
||||
padding: 10px; |
|
||||
border-style: solid; |
|
||||
border-width: 1px; |
|
||||
border-color: maroon; |
|
||||
border-radius: 4px; |
|
||||
text-align: center; |
|
||||
color: maroon; |
|
||||
background-color: mistyrose; |
|
||||
align-self: stretch; |
|
||||
} |
|
||||
|
|
||||
.form-root { |
|
||||
display: flex; |
|
||||
flex-direction: column; |
|
||||
align-items: stretch; |
|
||||
width: 300px; |
|
||||
margin: auto; |
|
||||
gap: 8px; |
|
||||
} |
|
||||
|
|
||||
.control { |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
.default-input { |
|
||||
font-family: Inter; |
|
||||
font-size: 14px; |
|
||||
color: #393c44; |
|
||||
padding: 2px 6px 2px 12px; |
|
||||
margin: 0 0 0.5em 0; |
|
||||
box-sizing: border-box; |
|
||||
border: 0.5px solid #d8d8d8; |
|
||||
border-radius: 4px; |
|
||||
width: 100%; |
|
||||
height: 40px; |
|
||||
transition: border-color 100ms ease-in 0s; |
|
||||
outline-color: #797979; |
|
||||
} |
|
||||
|
|
||||
.default-button { |
|
||||
font-family: Inter; |
|
||||
font-size: 16px; |
|
||||
padding: 0.4em; |
|
||||
box-sizing: border-box; |
|
||||
border-radius: 4px; |
|
||||
color: white; |
|
||||
background-color: #393c44; |
|
||||
outline: none; |
|
||||
width: 300px; |
|
||||
height: 40px; |
|
||||
cursor: pointer; |
|
||||
transition: all 0.2s ease 0s; |
|
||||
overflow: hidden; |
|
||||
outline: none; |
|
||||
user-select: none; |
|
||||
white-space: nowrap; |
|
||||
text-align: center; |
|
||||
} |
|
||||
|
|
||||
.default-button:hover { |
|
||||
background-color: white; |
|
||||
border-color: #393c44; |
|
||||
color: #393c44; |
|
||||
} |
|
||||
|
|
||||
h2 { |
|
||||
text-align: center; |
|
||||
margin-bottom: 10px; |
|
||||
} |
|
||||
</style> |
|
||||
Loading…
Reference in new issue