diff --git a/.gitignore b/.gitignore index b67af474..623ad58e 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,5 @@ vite.config.ts.timestamp-* # Other package managers package-lock.json yarn.lock + +.claude diff --git a/src/lib/components/auth/login-form.svelte b/src/lib/components/auth/login-form.svelte new file mode 100644 index 00000000..324cdb11 --- /dev/null +++ b/src/lib/components/auth/login-form.svelte @@ -0,0 +1,119 @@ + + +
+ + + Welcome back + Login with your Discord or Twitter account + + + + + + Or continue with + +
+
+
+ + + + + +
+ + + + Don't have an account? Sign up + + +
+
+
+
+
+ + By clicking continue, you agree to our Terms of Service + and Privacy Policy. + +
diff --git a/src/lib/components/auth/oauth-buttons.svelte b/src/lib/components/auth/oauth-buttons.svelte new file mode 100644 index 00000000..09fe23f7 --- /dev/null +++ b/src/lib/components/auth/oauth-buttons.svelte @@ -0,0 +1,32 @@ + + + + {#each backendMetadata.State.oAuthProviders as provider (provider)} + {@const detail = providerDetails[provider]} +
+ +
+ {/each} +
diff --git a/src/lib/components/auth/signup-form.svelte b/src/lib/components/auth/signup-form.svelte new file mode 100644 index 00000000..7b29b267 --- /dev/null +++ b/src/lib/components/auth/signup-form.svelte @@ -0,0 +1,162 @@ + + + accountCreated, onOpenChange}> + + + Welcome! Thank you for signing up! ❤️ + +
+

Your account has been created. 🎉 Please check your email to verify your account.

+

After verifying your email, you can log in to your account.

+ + +
+
+
+
+
+ +
+ + + Create your account + Enter your email below to create your account + + + + + + Or continue with + + +
+
+ + + + + +
+ + + + Already have an account? Sign in + + +
+
+
+
+ + By clicking continue, you agree to our Terms of Service + and Privacy Policy. + +
diff --git a/src/lib/components/input/PasswordInput.svelte b/src/lib/components/input/PasswordInput.svelte index 267ab7dc..fd347659 100644 --- a/src/lib/components/input/PasswordInput.svelte +++ b/src/lib/components/input/PasswordInput.svelte @@ -11,6 +11,8 @@ import type { Snippet } from 'svelte'; import type { FullAutoFill } from 'svelte/elements'; import PasswordStrengthMeter from './impl/PasswordStrengthMeter.svelte'; + import { FieldLabel } from '../ui/field'; + import { resolve } from '$app/paths'; interface Props { label: string; @@ -22,6 +24,7 @@ validate?: boolean | 'string' | 'pwned' | ValidationResult | null; showStrengthMeter?: boolean; Icon?: AnyComponent; + showForget?: boolean; } let { @@ -34,6 +37,7 @@ validate = false, showStrengthMeter = false, Icon, + showForget = true, }: Props = $props(); let validationResult = $state(null); @@ -127,7 +131,6 @@ (showPopup = false)} popup={showPopup ? (popup as Snippet) : undefined} > + {#snippet labelSnippet(id: string)} +
+ {label} + {#if showForget} + + Forgot your password? + + {/if} +
+ {/snippet} {#snippet after()} - {:else} -
-
Sign Up
- - - - - - - - - - {/if} + + + OpenShock Logo + OpenShock Logo + + diff --git a/src/routes/Footer.svelte b/src/routes/Footer.svelte index 2e6e39f9..1bf129d7 100644 --- a/src/routes/Footer.svelte +++ b/src/routes/Footer.svelte @@ -2,25 +2,59 @@ import { HubConnectionState } from '@microsoft/signalr'; import { PUBLIC_GITHUB_PROJECT_URL } from '$env/static/public'; import { SignalR_State } from '$lib/signalr'; + import { Wifi, WifiOff } from '@lucide/svelte'; + import * as DropdownMenu from '$lib/components/ui/dropdown-menu/index.js'; + import { Button } from '$lib/components/ui/button'; import { backendMetadata } from '$lib/state/BackendMetadata.svelte'; -