···11+import Docs from './Documentation.md';
22+import Example from './Example.svelte';
33+import Card from './Card.svelte';
44+import api from './api';
55+66+export default {
77+ slug: 'advanced-text-area',
88+ title: 'Advanced Text Area',
99+ docs: Docs,
1010+ example: Example,
1111+ card: Card,
1212+ api,
1313+};
···33### Add modal to your `+layout.svelte`
4455```svelte
66+<script>
77+ let open = $state(false);
88+</script>
99+610<AtprotoLoginModal
1111+ bind:open
712 login={async (handle) => {
813 // do login and return true if login
914 // is successful and should hide the modal
···1823### Open the modal
19242025```svelte
2121-<Button onclick={() => atProtoLoginModalState.show()}>Login</Button>
2222-```2626+<Button onclick={() => (open = true)}>Login</Button>
2727+```
2828+2929+### Inline (non-modal) version
3030+3131+Use `AtprotoLogin` to embed the login form directly in a page:
3232+3333+```svelte
3434+<AtprotoLogin
3535+ login={async (handle) => {
3636+ // do login
3737+ }}
3838+/>
3939+```
···11-import Docs from './Documentation.md';
22-import Example from './Example.svelte';
33-import Card from './Card.svelte';
44-import api from './api';
55-66-export default {
77- slug: 'advanced-text-area',
88- title: 'Advanced Text Area',
99- docs: Docs,
1010- example: Example,
1111- card: Card,
1212- api,
1313-};