this repo has no description
1<script lang="ts"> 2 import { getCurrentPath } from './lib/router.svelte' 3 import { initAuth, getAuthState } from './lib/auth.svelte' 4 import Login from './routes/Login.svelte' 5 import Register from './routes/Register.svelte' 6 import RegisterPasskey from './routes/RegisterPasskey.svelte' 7 import Verify from './routes/Verify.svelte' 8 import ResetPassword from './routes/ResetPassword.svelte' 9 import RecoverPasskey from './routes/RecoverPasskey.svelte' 10 import RequestPasskeyRecovery from './routes/RequestPasskeyRecovery.svelte' 11 import Dashboard from './routes/Dashboard.svelte' 12 import AppPasswords from './routes/AppPasswords.svelte' 13 import InviteCodes from './routes/InviteCodes.svelte' 14 import Settings from './routes/Settings.svelte' 15 import Sessions from './routes/Sessions.svelte' 16 import Notifications from './routes/Notifications.svelte' 17 import RepoExplorer from './routes/RepoExplorer.svelte' 18 import Admin from './routes/Admin.svelte' 19 import OAuthConsent from './routes/OAuthConsent.svelte' 20 import OAuthLogin from './routes/OAuthLogin.svelte' 21 import OAuthAccounts from './routes/OAuthAccounts.svelte' 22 import OAuth2FA from './routes/OAuth2FA.svelte' 23 import OAuthTotp from './routes/OAuthTotp.svelte' 24 import OAuthPasskey from './routes/OAuthPasskey.svelte' 25 import OAuthError from './routes/OAuthError.svelte' 26 import Security from './routes/Security.svelte' 27 import TrustedDevices from './routes/TrustedDevices.svelte' 28 29 const auth = getAuthState() 30 31 $effect(() => { 32 initAuth() 33 }) 34 35 function getComponent(path: string) { 36 switch (path) { 37 case '/login': 38 return Login 39 case '/register': 40 return Register 41 case '/register-passkey': 42 return RegisterPasskey 43 case '/verify': 44 return Verify 45 case '/reset-password': 46 return ResetPassword 47 case '/recover-passkey': 48 return RecoverPasskey 49 case '/request-passkey-recovery': 50 return RequestPasskeyRecovery 51 case '/dashboard': 52 return Dashboard 53 case '/app-passwords': 54 return AppPasswords 55 case '/invite-codes': 56 return InviteCodes 57 case '/settings': 58 return Settings 59 case '/sessions': 60 return Sessions 61 case '/notifications': 62 return Notifications 63 case '/repo': 64 return RepoExplorer 65 case '/admin': 66 return Admin 67 case '/oauth/consent': 68 return OAuthConsent 69 case '/oauth/login': 70 return OAuthLogin 71 case '/oauth/accounts': 72 return OAuthAccounts 73 case '/oauth/2fa': 74 return OAuth2FA 75 case '/oauth/totp': 76 return OAuthTotp 77 case '/oauth/passkey': 78 return OAuthPasskey 79 case '/oauth/error': 80 return OAuthError 81 case '/security': 82 return Security 83 case '/trusted-devices': 84 return TrustedDevices 85 default: 86 return auth.session ? Dashboard : Login 87 } 88 } 89 90 let currentPath = $derived(getCurrentPath()) 91 let CurrentComponent = $derived(getComponent(currentPath)) 92</script> 93 94<main> 95 {#if auth.loading} 96 <div class="loading"> 97 <p>Loading...</p> 98 </div> 99 {:else} 100 <CurrentComponent /> 101 {/if} 102</main> 103 104<style> 105 :global(:root) { 106 --bg-primary: #fafafa; 107 --bg-secondary: #f9f9f9; 108 --bg-card: #ffffff; 109 --bg-input: #ffffff; 110 --bg-input-disabled: #f5f5f5; 111 --text-primary: #333333; 112 --text-secondary: #666666; 113 --text-muted: #999999; 114 --border-color: #dddddd; 115 --border-color-light: #cccccc; 116 --accent: #0066cc; 117 --accent-hover: #0052a3; 118 --success-bg: #dfd; 119 --success-border: #8c8; 120 --success-text: #060; 121 --error-bg: #fee; 122 --error-border: #fcc; 123 --error-text: #c00; 124 --warning-bg: #ffd; 125 --warning-text: #660; 126 } 127 128 @media (prefers-color-scheme: dark) { 129 :global(:root) { 130 --bg-primary: #1a1a1a; 131 --bg-secondary: #242424; 132 --bg-card: #2a2a2a; 133 --bg-input: #333333; 134 --bg-input-disabled: #2a2a2a; 135 --text-primary: #e0e0e0; 136 --text-secondary: #a0a0a0; 137 --text-muted: #707070; 138 --border-color: #404040; 139 --border-color-light: #505050; 140 --accent: #4da6ff; 141 --accent-hover: #7abbff; 142 --success-bg: #1a3d1a; 143 --success-border: #2d5a2d; 144 --success-text: #7bc67b; 145 --error-bg: #3d1a1a; 146 --error-border: #5a2d2d; 147 --error-text: #ff7b7b; 148 --warning-bg: #3d3d1a; 149 --warning-text: #c6c67b; 150 } 151 } 152 153 :global(body) { 154 margin: 0; 155 font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 156 line-height: 1.5; 157 color: var(--text-primary); 158 background: var(--bg-primary); 159 } 160 161 :global(*) { 162 box-sizing: border-box; 163 } 164 165 main { 166 min-height: 100vh; 167 background: var(--bg-primary); 168 } 169 170 .loading { 171 display: flex; 172 align-items: center; 173 justify-content: center; 174 min-height: 100vh; 175 color: var(--text-secondary); 176 } 177</style>