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