A social knowledge tool for researchers built on ATProto

formatting

+15 -20
+1 -1
src/webapp/app/login/page.tsx
··· 69 69 } catch (err: any) { 70 70 // Clear the flag even on failure 71 71 ExtensionService.clearExtensionTokensRequested(); 72 - 72 + 73 73 // Redirect to extension error page 74 74 router.push('/extension/auth/error'); 75 75 } finally {
+13 -12
src/webapp/components/extension/SignInPage.tsx
··· 10 10 const [loginError, setLoginError] = useState(''); 11 11 12 12 const handleSignIn = () => { 13 - const appUrl = 14 - process.env.PLASMO_PUBLIC_APP_URL || 'http://localhost:3000'; 13 + const appUrl = process.env.PLASMO_PUBLIC_APP_URL || 'http://localhost:3000'; 15 14 const loginUrl = `${appUrl}/login?extension-login=true`; 16 15 chrome.tabs.create({ url: loginUrl }); 17 16 window.close(); ··· 28 27 await loginWithAppPassword(handle.trim(), appPassword.trim()); 29 28 // Success - the auth context will handle the state update 30 29 } catch (error: any) { 31 - setLoginError(error.message || 'Login failed. Please check your credentials.'); 30 + setLoginError( 31 + error.message || 'Login failed. Please check your credentials.', 32 + ); 32 33 } 33 34 }; 34 35 ··· 38 39 <Text size="sm" ta="center"> 39 40 Sign in with App Password 40 41 </Text> 41 - 42 + 42 43 <TextInput 43 44 label="Handle" 44 45 placeholder="your-handle.bsky.social" ··· 46 47 onChange={(e) => setHandle(e.target.value)} 47 48 disabled={isLoading} 48 49 /> 49 - 50 + 50 51 <TextInput 51 52 label="App Password" 52 53 type="password" ··· 63 64 )} 64 65 65 66 <Stack gap="xs"> 66 - <Button 67 - onClick={handleAppPasswordLogin} 67 + <Button 68 + onClick={handleAppPasswordLogin} 68 69 loading={isLoading} 69 70 disabled={!handle.trim() || !appPassword.trim()} 70 71 fullWidth 71 72 > 72 73 Sign In 73 74 </Button> 74 - 75 - <Button 76 - variant="subtle" 75 + 76 + <Button 77 + variant="subtle" 77 78 onClick={() => setShowAppPasswordForm(false)} 78 79 disabled={isLoading} 79 80 fullWidth ··· 93 94 <Button onClick={handleSignIn} fullWidth> 94 95 Sign In 95 96 </Button> 96 - <Anchor 97 - size="sm" 97 + <Anchor 98 + size="sm" 98 99 onClick={() => setShowAppPasswordForm(true)} 99 100 style={{ cursor: 'pointer' }} 100 101 >
+1 -7
src/webapp/popup.tsx
··· 4 4 } from './hooks/useExtensionAuth'; 5 5 import { SaveCardPage } from './components/extension/SaveCardPage'; 6 6 import { SignInPage } from './components/extension/SignInPage'; 7 - import { 8 - Card, 9 - MantineProvider, 10 - ScrollArea, 11 - Text, 12 - Stack, 13 - } from '@mantine/core'; 7 + import { Card, MantineProvider, ScrollArea, Text, Stack } from '@mantine/core'; 14 8 import '@mantine/core/styles.css'; 15 9 import { theme } from '@/styles/theme'; 16 10