import Button from "./button.wrn" import Checkbox from "./Checkbox.wrn" import Input from "./Input.wrn" import PinInput from "./PinInput.wrn" component AuthForm { outputs { submit(payload: { event: Event; mode: string; action: string }) change(payload: { value?: string | number | boolean | null; values?: Array; sourceEvent?: Event; [key: string]: string | number | boolean | null | object } | string | number | boolean | null) input(payload: { value?: string | number | boolean | null; values?: Array; sourceEvent?: Event; [key: string]: string | number | boolean | null | object } | string | number | boolean | null) focus(payload: { sourceEvent?: Event; [key: string]: string | number | boolean | null | object }) blur(payload: { sourceEvent?: Event; [key: string]: string | number | boolean | null | object }) } props { size: string = "default" color: string = "primary" mode: string = "sign-in" action: string = "/api/auth/login" method: string = "post" title: string = "Sign in" description: string = "" returnTo: string = "" schema: string = "" showRemember: boolean = true showName: boolean = true submitLabel: string = "Continue" class: string = "" } functions { shared function schemaName() { if (schema) return schema if (mode === "sign-in") return "auth-login" if (mode === "register") return "auth-register" if (mode === "recover") return "auth-password-request" if (mode === "reset") return "auth-password-reset" if (mode === "mfa") return "auth-mfa" return "auth-empty" } client function submitForm(event) { output.submit({ event: event, mode: mode, action: action }) } client function fieldEvent(type, payload) { const detail = payload || {} output[type]({ sourceEvent: detail.sourceEvent, name: detail.name || "", value: detail.value || "" }) } } view {

{title}

{#if description}

{description}

{/if}
{#if returnTo}{/if} {#if mode === "register" && showName} {/if} {#if mode === "sign-in" || mode === "register" || mode === "recover"} {/if} {#if mode === "sign-in" || mode === "register" || mode === "reset"} {/if} {#if mode === "register" || mode === "reset"} {/if} {#if mode === "mfa"} {/if} {#if mode === "sign-in" && showRemember} {/if}
} style { .wrn-auth-form { width: 100%; } .wrn-auth-form > header { display: flex; margin-bottom: 1.5rem; align-items: flex-start; gap: 0.85rem; } .wrn-auth-form__icon { width: 2rem; height: 2rem; flex: none; color: var(--wrn-color-primary); } .wrn-auth-form h2 { margin: 0; font-size: 1.5rem; font-weight: 650; letter-spacing: -0.025em; } .wrn-auth-form header p { margin: 0.35rem 0 0; color: var(--wrn-color-muted); font-size: 0.75rem; line-height: 1.5; } .wrn-auth-form form { display: grid; gap: 1rem; } .wrn-auth-form__options { display: flex; align-items: center; justify-content: space-between; gap: 1rem; font-size: 0.7rem; } .wrn-auth-form__options a { color: var(--wrn-color-primary); text-decoration: none; } .wrn-auth-form__submit { width: 100%; justify-content: center; } /* Shared component foundation. */ .wrn-component { --wrn-component-color: var(--wrn-color-primary); --wrn-component-scale: 1; margin: 0; color: var(--wrn-color-text); font-family: var(--wrn-font-sans, inherit); } .wrn-component--color-primary { --wrn-component-color: var(--wrn-color-primary); } .wrn-component--color-secondary { --wrn-component-color: var(--wrn-color-secondary); } .wrn-component--color-success { --wrn-component-color: var(--wrn-color-success); } .wrn-component--color-warning { --wrn-component-color: var(--wrn-color-warning); } .wrn-component--color-danger { --wrn-component-color: var(--wrn-color-danger); } .wrn-component--color-info { --wrn-component-color: var(--wrn-color-info); } .wrn-component--size-xs { --wrn-component-scale: 0.78; } .wrn-component--size-sm { --wrn-component-scale: 0.88; } .wrn-component--size-default, .wrn-component--size-md { --wrn-component-scale: 1; } .wrn-component--size-lg { --wrn-component-scale: 1.14; } .wrn-component--size-xl { --wrn-component-scale: 1.28; } .wrn-component:not(.wrn-btn) { font-size: calc(1em * var(--wrn-component-scale)); } .wrn-component :is(a, button, input, select, textarea):focus-visible { outline-color: var(--wrn-component-color); } .wrn-component p { margin: 0; color: var(--wrn-color-muted); line-height: 1.6; } } }