diff --git a/src/app/components/AppContainer.svelte b/src/app/components/AppContainer.svelte index 598746b2..7aa8d1a6 100644 --- a/src/app/components/AppContainer.svelte +++ b/src/app/components/AppContainer.svelte @@ -2,6 +2,7 @@ import type {Snippet} from "svelte" import {page} from "$app/stores" import {pubkey} from "@welshman/app" + import Dialog from "@lib/components/Dialog.svelte" import Landing from "@app/components/Landing.svelte" import Toast from "@app/components/Toast.svelte" import PrimaryNav from "@app/components/PrimaryNav.svelte" @@ -20,7 +21,7 @@ {@render children?.()} {:else if !$modals[$page.url.hash.slice(1)]} - + {/if} diff --git a/src/app/components/CalendarEventForm.svelte b/src/app/components/CalendarEventForm.svelte index 54daaf88..6ccf1d48 100644 --- a/src/app/components/CalendarEventForm.svelte +++ b/src/app/components/CalendarEventForm.svelte @@ -14,6 +14,8 @@ import Button from "@lib/components/Button.svelte" import Spinner from "@lib/components/Spinner.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import DateTimeInput from "@lib/components/DateTimeInput.svelte" import EditorContent from "@app/editor/EditorContent.svelte" import {PROTECTED} from "@app/core/state" @@ -114,64 +116,67 @@ }) -
- {@render header()} - - {#snippet label()} -

Title*

- {/snippet} - {#snippet input()} - - {/snippet} -
- - {#snippet label()} -

Summary

- {/snippet} - {#snippet input()} -
-
- + + + {@render header()} + + {#snippet label()} +

Title*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Summary

+ {/snippet} + {#snippet input()} +
+
+ +
+
- -
- {/snippet} - - - {#snippet label()} - Start* - {/snippet} - {#snippet input()} - - {/snippet} - - - {#snippet label()} - End* - {/snippet} - {#snippet input()} - - {/snippet} - - - {#snippet label()} -

Location (optional)

- {/snippet} - {#snippet input()} - - {/snippet} -
+ {/snippet} + + + {#snippet label()} + Start* + {/snippet} + {#snippet input()} + + {/snippet} + + + {#snippet label()} + End* + {/snippet} + {#snippet input()} + + {/snippet} + + + {#snippet label()} +

Location (optional)

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ - + diff --git a/src/app/components/ChatEnable.svelte b/src/app/components/ChatEnable.svelte index ff5eaa8a..7b05e4e6 100644 --- a/src/app/components/ChatEnable.svelte +++ b/src/app/components/ChatEnable.svelte @@ -7,6 +7,8 @@ import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import Spinner from "@lib/components/Spinner.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {PLATFORM_NAME} from "@app/core/state" @@ -33,23 +35,25 @@ const back = () => history.back() -
- - {#snippet title()} -
Enable Messages
- {/snippet} - {#snippet info()} -
Do you want to enable direct messages?
- {/snippet} -
-

- By default, direct messages are disabled, since loading them requires - {PLATFORM_NAME} to download and decrypt a lot of data. -

-

- If you'd like to enable them, please make sure your signer is set up to to auto-approve requests - to decrypt data. -

+ + + + {#snippet title()} +
Enable Messages
+ {/snippet} + {#snippet info()} +
Do you want to enable direct messages?
+ {/snippet} +
+

+ By default, direct messages are disabled, since loading them requires + {PLATFORM_NAME} to download and decrypt a lot of data. +

+

+ If you'd like to enable them, please make sure your signer is set up to to auto-approve + requests to decrypt data. +

+
- +
diff --git a/src/app/components/ChatMembers.svelte b/src/app/components/ChatMembers.svelte index dc1a76d8..e8ad5b23 100644 --- a/src/app/components/ChatMembers.svelte +++ b/src/app/components/ChatMembers.svelte @@ -1,6 +1,9 @@ -
- - {#snippet title()} -
People in this conversation
- {/snippet} -
- {#each pubkeys as pubkey (pubkey)} -
- -
- {/each} - -
+ + + + {#snippet title()} +
People in this conversation
+ {/snippet} +
+ {#each pubkeys as pubkey (pubkey)} +
+ +
+ {/each} +
+ + + +
diff --git a/src/app/components/ChatStart.svelte b/src/app/components/ChatStart.svelte index 6764be74..54e548d2 100644 --- a/src/app/components/ChatStart.svelte +++ b/src/app/components/ChatStart.svelte @@ -11,6 +11,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte" @@ -52,20 +54,22 @@ }) -
- - {#snippet title()} -
Start a Chat
- {/snippet} - {#snippet info()} -
Create an encrypted chat room for private conversations.
- {/snippet} -
- - {#snippet input()} - - {/snippet} - + + + + {#snippet title()} +
Start a Chat
+ {/snippet} + {#snippet info()} +
Create an encrypted chat room for private conversations.
+ {/snippet} +
+ + {#snippet input()} + + {/snippet} + +
- +
diff --git a/src/app/components/EventInfo.svelte b/src/app/components/EventInfo.svelte index 108564fb..6ce4178d 100644 --- a/src/app/components/EventInfo.svelte +++ b/src/app/components/EventInfo.svelte @@ -11,6 +11,8 @@ import Icon from "@lib/components/Icon.svelte" import FieldInline from "@lib/components/FieldInline.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import {clip} from "@app/util/toast" @@ -36,74 +38,76 @@ }) -
- - {#snippet title()} -
Event Details
- {/snippet} - {#snippet info()} -
The full details of this event are shown below.
- {/snippet} -
- - {#snippet label()} -

Created At

- {/snippet} - {#snippet input()} -

{formatter.format(secondsToDate(event.created_at))}

- {/snippet} -
- - {#snippet label()} -

Event Link

- {/snippet} - {#snippet input()} - - {/snippet} -
- - {#snippet label()} -

Author Pubkey

- {/snippet} - {#snippet input()} - - {/snippet} -
- {#if !url && seenOn.size > 0} + + + + {#snippet title()} +
Event Details
+ {/snippet} + {#snippet info()} +
The full details of this event are shown below.
+ {/snippet} +
{#snippet label()} -

Seen On

+

Created At

{/snippet} {#snippet input()} -
- {#each seenOn as url, i (url)} - - {displayRelayUrl(url)} - - {/each} -
+

{formatter.format(secondsToDate(event.created_at))}

{/snippet}
- {/if} -
-
{json}
-

- -

-
- -
+ + {#snippet label()} +

Event Link

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Author Pubkey

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ {#if !url && seenOn.size > 0} + + {#snippet label()} +

Seen On

+ {/snippet} + {#snippet input()} +
+ {#each seenOn as url, i (url)} + + {displayRelayUrl(url)} + + {/each} +
+ {/snippet} +
+ {/if} +
+
{json}
+

+ +

+
+ + + diff --git a/src/app/components/EventShare.svelte b/src/app/components/EventShare.svelte index 5e52b043..2d8ec2a5 100644 --- a/src/app/components/EventShare.svelte +++ b/src/app/components/EventShare.svelte @@ -9,6 +9,8 @@ import Button from "@lib/components/Button.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import RoomName from "@app/components/RoomName.svelte" import {roomsByUrl} from "@app/core/state" import {makeRoomPath} from "@app/util/routes" @@ -29,27 +31,29 @@ let selection = $state("") -
- - {#snippet title()} -
Share {noun}
- {/snippet} - {#snippet info()} -
Which room would you like to share this event to?
- {/snippet} -
-
- {#each $roomsByUrl.get(url) || [] as room (room.h)} - - {/each} -
+ + + + {#snippet title()} +
Share {noun}
+ {/snippet} + {#snippet info()} +
Which room would you like to share this event to?
+ {/snippet} +
+
+ {#each $roomsByUrl.get(url) || [] as room (room.h)} + + {/each} +
+
- +
diff --git a/src/app/components/GoalCreate.svelte b/src/app/components/GoalCreate.svelte index 50c161f0..b6ae3e18 100644 --- a/src/app/components/GoalCreate.svelte +++ b/src/app/components/GoalCreate.svelte @@ -12,6 +12,8 @@ import Button from "@lib/components/Button.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import EditorContent from "@app/editor/EditorContent.svelte" import {pushToast} from "@app/util/toast" import {PROTECTED} from "@app/core/state" @@ -82,78 +84,80 @@ let amount = $state(1000) -
- - {#snippet title()} -
Create a Funding Goal
- {/snippet} - {#snippet info()} -
Request contributions for your fundraiser.
- {/snippet} -
-
- - {#snippet label()} -

Title*

+ + + + {#snippet title()} +
Create a Funding Goal
{/snippet} - {#snippet input()} - + {#snippet info()} +
Request contributions for your fundraiser.
{/snippet} -
-
+ +
{#snippet label()} -

Details*

+

Title*

{/snippet} {#snippet input()} -
- -
+ {/snippet}
- +
+ + {#snippet label()} +

Details*

+ {/snippet} + {#snippet input()} +
+ +
+ {/snippet} +
+ +
+
+ + {#snippet label()} + Goal Amount (sats)* + {/snippet} + {#snippet input()} +
+ +
+ {/snippet} +
+ +
-
- - {#snippet label()} - Goal Amount (sats)* - {/snippet} - {#snippet input()} -
- -
- {/snippet} -
- -
-
+ - + diff --git a/src/app/components/InfoBunker.svelte b/src/app/components/InfoBunker.svelte index 7d857b85..a5a44fca 100644 --- a/src/app/components/InfoBunker.svelte +++ b/src/app/components/InfoBunker.svelte @@ -1,39 +1,42 @@ -
- - {#snippet title()} -
What is a bunker link?
- {/snippet} -
-

- Nostr uses "keys" instead of passwords - to identify users. This allows users to own their social identity instead of renting it from a tech - company, and can bring it with them from app to app. -

-

- A good way to manage your keys is to use a remote signing application. These apps can hold your - keys and log you in remotely to as many applications as you like, without risking loss or theft - of your keys. -

-

- One way to log in with a remote signer is using a "bunker link" which is more secure and - decentralized than other solutions. Check your signer for a link beginning with "bunker://", - copy it into {PLATFORM_NAME}, and you should be good to go! -

-

- If you don't have a signer yet, nsec.app - is a great way to get started. You can find more signers on nostrapps.com. -

- -
+ + + {#snippet title()} +
What is a bunker link?
+ {/snippet} +
+

+ Nostr uses "keys" instead of passwords + to identify users. This allows users to own their social identity instead of renting it from a tech + company, and can bring it with them from app to app. +

+

+ A good way to manage your keys is to use a remote signing application. These apps can hold + your keys and log you in remotely to as many applications as you like, without risking loss or + theft of your keys. +

+

+ One way to log in with a remote signer is using a "bunker link" which is more secure and + decentralized than other solutions. Check your signer for a link beginning with "bunker://", + copy it into {PLATFORM_NAME}, and you should be good to go! +

+

+ If you don't have a signer yet, nsec.app + is a great way to get started. You can find more signers on nostrapps.com. +

+ +
diff --git a/src/app/components/InfoHandle.svelte b/src/app/components/InfoHandle.svelte index fd29544c..dedeaeec 100644 --- a/src/app/components/InfoHandle.svelte +++ b/src/app/components/InfoHandle.svelte @@ -1,29 +1,32 @@ -
- - {#snippet title()} -
What is a nostr address?
- {/snippet} -
-

- {PLATFORM_NAME} hosts spaces on the Nostr protocol. Nostr uses "nostr addresses" to make it easier for people to find you, without having to - memorize your public key (your user id). -

-

- There are several providers of nostr addresses, including several clients. You can find a list - and more information on nostr.how. -

- -
+ + + {#snippet title()} +
What is a nostr address?
+ {/snippet} +
+

+ {PLATFORM_NAME} hosts spaces on the Nostr protocol. Nostr uses "nostr addresses" to make it easier for people to find you, without having to + memorize your public key (your user id). +

+

+ There are several providers of nostr addresses, including several clients. You can find a list + and more information on nostr.how. +

+ +
diff --git a/src/app/components/InfoKeys.svelte b/src/app/components/InfoKeys.svelte index c0258273..fd4b5feb 100644 --- a/src/app/components/InfoKeys.svelte +++ b/src/app/components/InfoKeys.svelte @@ -5,6 +5,8 @@ import CheckCircle from "@assets/icons/check-circle.svg?dataurl" import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import KeyRecoveryRequest from "@app/components/KeyRecoveryRequest.svelte" @@ -16,29 +18,37 @@ const startRecoveryRequest = () => pushModal(KeyRecoveryRequest) -
- - {#snippet title()} -
What is a private key?
- {/snippet} -
-

- Most online services keep track of users by giving them a username and password. This gives the - service total control over their users, allowing them to ban them at any time, or - sell their activity. -

-

- On Nostr, you control your own - identity and social data, through the magic of cryptography. The basic idea is that you have a - public key, which acts as your user ID, and a - private key which allows you to prove your identity. -

- {#if $session?.email} + + + + {#snippet title()} +
What is a private key?
+ {/snippet} +

- It's very important to keep private keys safe, but this can sometimes be tricky, which is why {PLATFORM_NAME} - supports a traditional account-based login for new users. + Most online services keep track of users by giving them a username and password. This gives + the service total control over their users, allowing them to ban them at any time, + or sell their activity.

-

If you'd like to switch to self-custody, please click below to get started.

+

+ On Nostr, you control your + own identity and social data, through the magic of cryptography. The basic idea is that you + have a + public key, which acts as your user ID, and a + private key which allows you to prove your identity. +

+ {#if $session?.email} +

+ It's very important to keep private keys safe, but this can sometimes be tricky, which is + why {PLATFORM_NAME} + supports a traditional account-based login for new users. +

+

If you'd like to switch to self-custody, please click below to get started.

+ {:else} + + {/if} +
+ {#if $session?.email} - {:else} - {/if} -
+ diff --git a/src/app/components/InfoNostr.svelte b/src/app/components/InfoNostr.svelte index 274e201f..6fc130d2 100644 --- a/src/app/components/InfoNostr.svelte +++ b/src/app/components/InfoNostr.svelte @@ -1,30 +1,33 @@ -
- - {#snippet title()} -
What is nostr?
- {/snippet} -
-

- Nostr is way to build social apps that - talk to each other. Users own their social identity instead of renting it from a tech company, and - can take it with them. -

-

- If you'd like to learn more about what other apps exist in the nostr ecosystem, please visit nostrapps.com. -

-

- To learn more about how to manage your keys, or to set up an account, try - nosta.me. -

- -
+ + + {#snippet title()} +
What is nostr?
+ {/snippet} +
+

+ Nostr is way to build social apps that + talk to each other. Users own their social identity instead of renting it from a tech company, and + can take it with them. +

+

+ If you'd like to learn more about what other apps exist in the nostr ecosystem, please visit nostrapps.com. +

+

+ To learn more about how to manage your keys, or to set up an account, try + nosta.me. +

+ +
diff --git a/src/app/components/InfoRelay.svelte b/src/app/components/InfoRelay.svelte index 05c5baeb..110b7fbe 100644 --- a/src/app/components/InfoRelay.svelte +++ b/src/app/components/InfoRelay.svelte @@ -2,25 +2,32 @@ import Button from "@lib/components/Button.svelte" import Link from "@lib/components/Link.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" + import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import {PLATFORM_NAME} from "@app/core/state" -
- - {#snippet title()} -
What is a relay?
- {/snippet} -
-

- {PLATFORM_NAME} hosts spaces on the Nostr protocol. Nostr uses "relays" to host data, which are special-purpose servers that speak nostr's - language. This means that anyone can host their own data, making the web more decentralized and - resilient. -

-

- Different relays have different policies for access control and content retention. Be sure to - double check that you have access to the relays you try to use by visiting their website. -

- -
+ + + + {#snippet title()} +
What is a relay?
+ {/snippet} +
+

+ {PLATFORM_NAME} hosts spaces on the Nostr protocol. Nostr uses "relays" to host data, which are special-purpose servers that speak nostr's + language. This means that anyone can host their own data, making the web more decentralized + and resilient. +

+

+ Different relays have different policies for access control and content retention. Be sure to + double check that you have access to the relays you try to use by visiting their website. +

+
+ + + +
diff --git a/src/app/components/InfoSignatures.svelte b/src/app/components/InfoSignatures.svelte index 12c48964..de7edfa1 100644 --- a/src/app/components/InfoSignatures.svelte +++ b/src/app/components/InfoSignatures.svelte @@ -1,32 +1,35 @@ -
- - {#snippet title()} -
What are digital signatures?
- {/snippet} -
-

- Most online services ask their users to trust them that they're being honest, and they usually - are. However, traditional social media platforms have the ability to create forged content that can appear to be genuinely authored, but which are actually - counterfeit. -

-

- On Nostr, all your content is authenticated - using digital signatures, which cryptographically tie a particular person to a - given post or message. -

-

- The result is that you don't normally have to trust service providers not to tamper with the - information flowing through the network — instead, your client software can prove that a given - piece of data is authentic. -

- -
+ + + {#snippet title()} +
What are digital signatures?
+ {/snippet} +
+

+ Most online services ask their users to trust them that they're being honest, and they usually + are. However, traditional social media platforms have the ability to create forged content that can appear to be genuinely authored, but which are actually + counterfeit. +

+

+ On Nostr, all your content is authenticated + using digital signatures, which cryptographically tie a particular person to + a given post or message. +

+

+ The result is that you don't normally have to trust service providers not to tamper with the + information flowing through the network — instead, your client software can prove that a given + piece of data is authentic. +

+ +
diff --git a/src/app/components/InfoZapperError.svelte b/src/app/components/InfoZapperError.svelte index 73c72f4e..db2ab03f 100644 --- a/src/app/components/InfoZapperError.svelte +++ b/src/app/components/InfoZapperError.svelte @@ -5,6 +5,8 @@ import Button from "@lib/components/Button.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ProfileLink from "@app/components/ProfileLink.svelte" const {pubkey} = $props() @@ -14,24 +16,26 @@ const back = () => history.back() -
- - {#snippet title()} -
Unable to Zap
- {/snippet} -
-

- Zapping isn't possible right now because - {#if $zapper} - their zap receiver isn't correctly set up. - {:else} - they don't currently have a zap receiver set up. - {/if} -

+ + + + {#snippet title()} +
Unable to Zap
+ {/snippet} +
+

+ Zapping isn't possible right now because + {#if $zapper} + their zap receiver isn't correctly set up. + {:else} + they don't currently have a zap receiver set up. + {/if} +

+
-
+ diff --git a/src/app/components/KeyDownload.svelte b/src/app/components/KeyDownload.svelte index 645491d3..2d4b7967 100644 --- a/src/app/components/KeyDownload.svelte +++ b/src/app/components/KeyDownload.svelte @@ -10,6 +10,8 @@ import Icon from "@lib/components/Icon.svelte" import Field from "@lib/components/Field.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {pushToast} from "@app/util/toast" @@ -104,49 +106,51 @@ let didDownload = $state(false) -
- - {#snippet title()} -
Your Keys are Ready!
- {/snippet} -
-

- A cryptographic key pair has two parts: your public key identifies your - account, while your private key acts sort of like a master password. -

-

- Securing your private key is very important, so make sure to take the time to save your key in a - secure place (like a password manager). -

- {#if usePassword} - - {#snippet label()} - Password* + + + + {#snippet title()} +
Your Keys are Ready!
{/snippet} - {#snippet input()} - - {/snippet} - {#snippet info()} -

Passwords should be at least 12 characters long. Write this down!

- {/snippet} -
- {/if} -
- - -
+ +

+ A cryptographic key pair has two parts: your public key identifies your + account, while your private key acts sort of like a master password. +

+

+ Securing your private key is very important, so make sure to take the time to save your key in + a secure place (like a password manager). +

+ {#if usePassword} + + {#snippet label()} + Password* + {/snippet} + {#snippet input()} + + {/snippet} + {#snippet info()} +

Passwords should be at least 12 characters long. Write this down!

+ {/snippet} +
+ {/if} +
+ + +
+ -
+ diff --git a/src/app/components/KeyRecoveryConfirm.svelte b/src/app/components/KeyRecoveryConfirm.svelte index 8ea3526f..d75bf425 100644 --- a/src/app/components/KeyRecoveryConfirm.svelte +++ b/src/app/components/KeyRecoveryConfirm.svelte @@ -9,6 +9,8 @@ import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import Spinner from "@lib/components/Spinner.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import KeyDownload from "@app/components/KeyDownload.svelte" @@ -81,24 +83,26 @@ let input = $state("") -
- - {#snippet title()} - Recover your Key - {/snippet} - {#snippet info()} - Take control over your cryptographic identity - {/snippet} - -

Your recovery codes have been sent!

-

- For security reasons, you may receive three or more emails with recovery codes in them. Please - paste all recovery codes into the text box below, on separate lines. -

- + + + + {#snippet title()} + Recover your Key + {/snippet} + {#snippet info()} + Take control over your cryptographic identity + {/snippet} + +

Your recovery codes have been sent!

+

+ For security reasons, you may receive three or more emails with recovery codes in them. Please + paste all recovery codes into the text box below, on separate lines. +

+ +
- +
diff --git a/src/app/components/KeyRecoveryRequest.svelte b/src/app/components/KeyRecoveryRequest.svelte index 2048de3c..e9441dc1 100644 --- a/src/app/components/KeyRecoveryRequest.svelte +++ b/src/app/components/KeyRecoveryRequest.svelte @@ -8,6 +8,8 @@ import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import Spinner from "@lib/components/Spinner.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {pushModal} from "@app/util/modal" @@ -39,23 +41,25 @@ let loading = $state(false) -
- - {#snippet title()} - Recover your Key - {/snippet} - {#snippet info()} - Take control over your cryptographic identity - {/snippet} - -

- When you signed up, your Nostr secret key was split into multiple pieces and stored on separate - third-party servers to keep it safe. -

-

- If you're ready to take control of your cryptographic identity, click below. We'll confirm your - email by sending you some recovery codes. -

+ + + + {#snippet title()} + Recover your Key + {/snippet} + {#snippet info()} + Take control over your cryptographic identity + {/snippet} + +

+ When you signed up, your Nostr secret key was split into multiple pieces and stored on + separate third-party servers to keep it safe. +

+

+ If you're ready to take control of your cryptographic identity, click below. We'll confirm + your email by sending you some recovery codes. +

+
- +
diff --git a/src/app/components/Landing.svelte b/src/app/components/Landing.svelte index b3f674d0..8e2962ec 100644 --- a/src/app/components/Landing.svelte +++ b/src/app/components/Landing.svelte @@ -4,7 +4,8 @@ import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import Link from "@lib/components/Link.svelte" - import Dialog from "@lib/components/Dialog.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import CardButton from "@lib/components/CardButton.svelte" import LogIn from "@app/components/LogIn.svelte" import SignUp from "@app/components/SignUp.svelte" @@ -16,8 +17,8 @@ const signUp = () => pushModal(SignUp) - -
+ +

Welcome to {PLATFORM_NAME}!

The chat app built for self-hosted communities.

@@ -53,5 +54,5 @@ Terms of Service and Privacy Policy.

-
-
+ + diff --git a/src/app/components/LogIn.svelte b/src/app/components/LogIn.svelte index 4750b10c..3b3768cf 100644 --- a/src/app/components/LogIn.svelte +++ b/src/app/components/LogIn.svelte @@ -10,6 +10,8 @@ import Key from "@assets/icons/key.svg?dataurl" import Icon from "@lib/components/Icon.svelte" import Link from "@lib/components/Link.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import Button from "@lib/components/Button.svelte" import SignUp from "@app/components/SignUp.svelte" import InfoNostr from "@app/components/InfoNostr.svelte" @@ -91,70 +93,72 @@ }) -
-

Log in with Nostr

-

- {PLATFORM_NAME} is built using the - , which allows - you to own your social identity. -

- {#if getNip07()} - - {/if} - {#each signers as app} - - {/each} - {#if hasPomade && !hasSigner} - - {/if} - - {#if hasPomade && hasSigner} - - {/if} - {#if !hasSigner} - - {/if} - {#if !hasSigner || !hasPomade} - + +

Log in with Nostr

+

+ {PLATFORM_NAME} is built using the + , which + allows you to own your social identity. +

+ {#if getNip07()} + + {/if} + {#each signers as app} + + {/each} + {#if hasPomade && !hasSigner} + + {/if} + -
-
+ class="btn {hasSigner || hasPomade ? 'btn-neutral' : 'btn-primary'}"> + + Log in with Remote Signer + + {#if hasPomade && hasSigner} + + {/if} + {#if !hasSigner} + + {/if} + {#if !hasSigner || !hasPomade} + + + Browse Signer Apps + + {/if} +
+ Need an account? + +
+ + diff --git a/src/app/components/LogInBunker.svelte b/src/app/components/LogInBunker.svelte index 6c341f6d..91ff3a1e 100644 --- a/src/app/components/LogInBunker.svelte +++ b/src/app/components/LogInBunker.svelte @@ -10,6 +10,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import BunkerConnect from "@app/components/BunkerConnect.svelte" @@ -120,23 +122,25 @@ }) -
- - {#snippet title()} -
Log In with a Signer
- {/snippet} - {#snippet info()} -
Using a remote signer app helps you keep your keys safe.
- {/snippet} -
-
- {#if mode === "connect"} - - {:else} - - - {/if} + + + + {#snippet title()} +
Log In with a Signer
+ {/snippet} + {#snippet info()} +
Using a remote signer app helps you keep your keys safe.
+ {/snippet} +
+
+ {#if mode === "connect"} + + {:else} + + + {/if} +
{/if} - +
diff --git a/src/app/components/LogInEmail.svelte b/src/app/components/LogInEmail.svelte index b1d1f4a4..7d6d3f82 100644 --- a/src/app/components/LogInEmail.svelte +++ b/src/app/components/LogInEmail.svelte @@ -10,6 +10,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import LogInOTP from "@app/components/LogInOTP.svelte" @@ -67,42 +69,44 @@ let password = $state("") -
- - {#snippet title()} -
Log In
- {/snippet} - {#snippet info()} -
Log in using your email and password
- {/snippet} -
- - {#snippet label()} -

Email*

- {/snippet} - {#snippet input()} - - {/snippet} -
- - {#snippet label()} -

Password*

- {/snippet} - {#snippet input()} - - {/snippet} -
-

- Forgot your password? . -

+ + + + {#snippet title()} +
Log In
+ {/snippet} + {#snippet info()} +
Log in using your email and password
+ {/snippet} +
+ + {#snippet label()} +

Email*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Password*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+

+ Forgot your password? . +

+
- +
diff --git a/src/app/components/LogInKey.svelte b/src/app/components/LogInKey.svelte index 12224b64..bb4fc121 100644 --- a/src/app/components/LogInKey.svelte +++ b/src/app/components/LogInKey.svelte @@ -13,6 +13,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {clearModals} from "@app/util/modal" @@ -71,50 +73,52 @@ } -
- - {#snippet title()} -
Log In with Key
- {/snippet} - {#snippet info()} -
Enter your nostr private key to log in.
- {/snippet} -
- - {#snippet label()} -

Your Key*

- {/snippet} - {#snippet input()} - - {/snippet} -
- {#if isNcryptsec} + + + + {#snippet title()} +
Log In with Key
+ {/snippet} + {#snippet info()} +
Enter your nostr private key to log in.
+ {/snippet} +
{#snippet label()} -

Password*

+

Your Key*

{/snippet} {#snippet input()} {/snippet}
- {/if} -
- - - Please note! - -

- Logging in this way is not a best practice. For better security, please consider using a - signer app - to keep your keys safe. -

-
+ {#if isNcryptsec} + + {#snippet label()} +

Password*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ {/if} +
+ + + Please note! + +

+ Logging in this way is not a best practice. For better security, please consider using a + signer app + to keep your keys safe. +

+
+
- +
diff --git a/src/app/components/LogInOTP.svelte b/src/app/components/LogInOTP.svelte index 52205558..887f021f 100644 --- a/src/app/components/LogInOTP.svelte +++ b/src/app/components/LogInOTP.svelte @@ -8,6 +8,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import LogInOTPConfirm from "@app/components/LogInOTPConfirm.svelte" @@ -44,26 +46,28 @@ let loading = $state(false) -
- - {#snippet title()} -
Log In
- {/snippet} - {#snippet info()} -
Log in using a one-time login code
- {/snippet} -
- - {#snippet label()} -

Email*

- {/snippet} - {#snippet input()} - - {/snippet} -
+ + + + {#snippet title()} +
Log In
+ {/snippet} + {#snippet info()} +
Log in using a one-time login code
+ {/snippet} +
+ + {#snippet label()} +

Email*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+
- +
diff --git a/src/app/components/LogInOTPConfirm.svelte b/src/app/components/LogInOTPConfirm.svelte index e0660508..b391a88e 100644 --- a/src/app/components/LogInOTPConfirm.svelte +++ b/src/app/components/LogInOTPConfirm.svelte @@ -7,6 +7,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {clearModals} from "@app/util/modal" @@ -79,24 +81,26 @@ let loading = $state(false) -
- - {#snippet title()} -
Log In
- {/snippet} - {#snippet info()} -
Enter the login codes sent to your email
- {/snippet} -
-

Your login codes have been sent!

-

- For security reasons, you may receive three or more emails with login codes in them. Please - paste all login codes into the text box below, on separate lines. -

- + + + + {#snippet title()} +
Log In
+ {/snippet} + {#snippet info()} +
Enter the login codes sent to your email
+ {/snippet} +
+

Your login codes have been sent!

+

+ For security reasons, you may receive three or more emails with login codes in them. Please + paste all login codes into the text box below, on separate lines. +

+ +
- +
diff --git a/src/app/components/LogOut.svelte b/src/app/components/LogOut.svelte index 330815db..8644307d 100644 --- a/src/app/components/LogOut.svelte +++ b/src/app/components/LogOut.svelte @@ -4,6 +4,8 @@ import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import Spinner from "@lib/components/Spinner.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {Push} from "@app/util/notifications" @@ -31,13 +33,15 @@ let loading = $state(false) -
- - {#snippet title()} -
Are you sure you want
to log out?
- {/snippet} -
-

Your local database will be cleared.

+ + + + {#snippet title()} +
Are you sure you want
to log out?
+ {/snippet} +
+

Your local database will be cleared.

+
- +
diff --git a/src/app/components/ModalContainer.svelte b/src/app/components/ModalContainer.svelte index 5718d79c..ee2c40f9 100644 --- a/src/app/components/ModalContainer.svelte +++ b/src/app/components/ModalContainer.svelte @@ -35,14 +35,7 @@ props: { onClose: closeModals, fullscreen: options.fullscreen, - children: createRawSnippet(() => ({ - render: () => "
", - setup: (target: Element) => { - const child = mount(component, {target, props}) - - return () => unmount(child) - }, - })), + children: {component, props}, }, }) } diff --git a/src/app/components/ProfileDelete.svelte b/src/app/components/ProfileDelete.svelte index ac4728f7..fb85b865 100644 --- a/src/app/components/ProfileDelete.svelte +++ b/src/app/components/ProfileDelete.svelte @@ -18,6 +18,8 @@ import Spinner from "@lib/components/Spinner.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import {INDEXER_RELAYS, PLATFORM_NAME, userSpaceUrls} from "@app/core/state" import {kv, db} from "@app/core/storage" import {pushToast} from "@app/util/toast" @@ -108,36 +110,40 @@ const back = () => history.back() -
- - {#snippet title()} - Delete your account - {/snippet} - {#snippet info()} - From the Nostr network - {/snippet} - - {#if showProgress} -

- We are currently sending deletion requests to your relay selections and space hosts. Please - wait while we complete this process. Once we're done, you'll be automatically logged out. -

- - {:else} -

- This will delete your nostr account everywhere, not just on {PLATFORM_NAME}. -

-

- To confirm, please type "{CONFIRM_TEXT}" into the text box below. This action can't be undone. -

- -

- Note: not all relays may honor your request for deletion. If you find that your - content continues to be available, please contact the offending relays directly. -

- {/if} + + + + {#snippet title()} + Delete your account + {/snippet} + {#snippet info()} + From the Nostr network + {/snippet} + + {#if showProgress} +

+ We are currently sending deletion requests to your relay selections and space hosts. Please + wait while we complete this process. Once we're done, you'll be automatically logged out. +

+ + {:else} +

+ This will delete your nostr account everywhere, not just on {PLATFORM_NAME}. +

+

+ To confirm, please type "{CONFIRM_TEXT}" into the text box below. This action can't be + undone. +

+ +

+ Note: not all relays may honor your request for deletion. If you find that your + content continues to be available, please contact the offending relays directly. +

+ {/if} +
- +
diff --git a/src/app/components/ProfileDetail.svelte b/src/app/components/ProfileDetail.svelte index 8114fe2a..7103abd6 100644 --- a/src/app/components/ProfileDetail.svelte +++ b/src/app/components/ProfileDetail.svelte @@ -15,6 +15,8 @@ import Confirm from "@lib/components/Confirm.svelte" import Button from "@lib/components/Button.svelte" import Popover from "@lib/components/Popover.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import Profile from "@app/components/Profile.svelte" import ProfileInfo from "@app/components/ProfileInfo.svelte" @@ -75,43 +77,47 @@ let showMenu = $state(false) -
-
- - {#if $profile || $userIsAdmin} -
- - {#if showMenu} - - - + + +
+
+ + {#if $profile || $userIsAdmin} +
+ + {#if showMenu} + + + + {/if} +
{/if}
- {/if} -
- - + + +
+
-
+ diff --git a/src/app/components/ProfileEditForm.svelte b/src/app/components/ProfileEditForm.svelte index 8caaec01..1a6de4eb 100644 --- a/src/app/components/ProfileEditForm.svelte +++ b/src/app/components/ProfileEditForm.svelte @@ -8,6 +8,8 @@ import Field from "@lib/components/Field.svelte" import FieldInline from "@lib/components/FieldInline.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import InputProfilePicture from "@app/components/InputProfilePicture.svelte" import InfoHandle from "@app/components/InfoHandle.svelte" import {pushModal} from "@app/util/modal" @@ -33,91 +35,93 @@ let file: File | undefined = $state() -
- {#if isSignup} -
-
-

Create a Profile

-

- Give people something to go on — but remember, privacy matters! Be careful about sharing - sensitive information. -

+ + + {#if isSignup} +
+
+

Create a Profile

+

+ Give people something to go on — but remember, privacy matters! Be careful about sharing + sensitive information. +

+
+
+ +

Upload an Avatar

+
-
+ {:else} +
-

Upload an Avatar

-
- {:else} -
- -
- {/if} - - {#snippet label()} -

Nickname

- {/snippet} - {#snippet input()} - - {/snippet} - {#snippet info()} - What would you like people to call you? - {/snippet} -
- - {#snippet label()} -

About You

- {/snippet} - {#snippet input()} - - {/snippet} - {#snippet info()} - Give a brief introduction to why you're here. - {/snippet} -
- {#if !isSignup} + {/if} {#snippet label()} -

Nostr Address

+

Nickname

{/snippet} {#snippet input()} {/snippet} {#snippet info()} -

- -

+ What would you like people to call you? {/snippet}
- {/if} - {#if !isSignup} - + {#snippet label()} -

Broadcast Profile

+

About You

{/snippet} {#snippet input()} - + {/snippet} {#snippet info()} -

- If enabled, changes will be published to the broader nostr network in addition to spaces - you are a member of. -

+ Give a brief introduction to why you're here. {/snippet} -
- {/if} + + {#if !isSignup} + + {#snippet label()} +

Nostr Address

+ {/snippet} + {#snippet input()} + + {/snippet} + {#snippet info()} +

+ +

+ {/snippet} +
+ {/if} + {#if !isSignup} + + {#snippet label()} +

Broadcast Profile

+ {/snippet} + {#snippet input()} + + {/snippet} + {#snippet info()} +

+ If enabled, changes will be published to the broader nostr network in addition to spaces + you are a member of. +

+ {/snippet} +
+ {/if} +
{@render footer()} - +
diff --git a/src/app/components/ProfileList.svelte b/src/app/components/ProfileList.svelte index 8fd5e8a0..55f969af 100644 --- a/src/app/components/ProfileList.svelte +++ b/src/app/components/ProfileList.svelte @@ -1,6 +1,9 @@ -
- - {#snippet title()} -
{restProps.title}
- {/snippet} - {#snippet info()} -
{subtitle}
- {/snippet} -
- {#each pubkeys as pubkey (pubkey)} -
- -
- {/each} - -
+ + + + {#snippet title()} +
{restProps.title}
+ {/snippet} + {#snippet info()} +
{subtitle}
+ {/snippet} +
+ {#each pubkeys as pubkey (pubkey)} +
+ +
+ {/each} +
+ + + +
diff --git a/src/app/components/RelayAdd.svelte b/src/app/components/RelayAdd.svelte index 7322cd36..7b20f51b 100644 --- a/src/app/components/RelayAdd.svelte +++ b/src/app/components/RelayAdd.svelte @@ -9,6 +9,8 @@ import AddCircle from "@assets/icons/add-circle.svg?dataurl" import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import RelayItem from "@app/components/RelayItem.svelte" interface Props { @@ -39,28 +41,34 @@ }) - -
- {#if customUrl && isShareableRelayUrl(customUrl) && !$relays.includes(normalizeRelayUrl(customUrl))} - - - - {/if} - {#each $relaySearch - .searchValues(term) - .filter(url => !$relays.includes(url)) - .slice(0, limit) as url (url)} - - - - {/each} -
+ + + +
+ {#if customUrl && isShareableRelayUrl(customUrl) && !$relays.includes(normalizeRelayUrl(customUrl))} + + + + {/if} + {#each $relaySearch + .searchValues(term) + .filter(url => !$relays.includes(url)) + .slice(0, limit) as url (url)} + + + + {/each} +
+
+
diff --git a/src/app/components/Report.svelte b/src/app/components/Report.svelte index e01119c1..54a41584 100644 --- a/src/app/components/Report.svelte +++ b/src/app/components/Report.svelte @@ -8,6 +8,8 @@ import Icon from "@lib/components/Icon.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import {pushToast} from "@app/util/toast" import {publishReport} from "@app/core/commands" @@ -38,46 +40,48 @@ let loading = $state(false) -
- - {#snippet title()} -
Report Content
- {/snippet} - {#snippet info()} -
Flag inappropriate content.
- {/snippet} -
- - {#snippet label()} -

Reason*

- {/snippet} - {#snippet input()} - - {/snippet} - {#snippet info()} -

Please select a reason for your report.

- {/snippet} -
- - {#snippet label()} -

Details

- {/snippet} - {#snippet input()} - - {/snippet} - {#snippet info()} -

Please provide any additional details relevant to your report.

- {/snippet} -
+ + + + {#snippet title()} +
Report Content
+ {/snippet} + {#snippet info()} +
Flag inappropriate content.
+ {/snippet} +
+ + {#snippet label()} +

Reason*

+ {/snippet} + {#snippet input()} + + {/snippet} + {#snippet info()} +

Please select a reason for your report.

+ {/snippet} +
+ + {#snippet label()} +

Details

+ {/snippet} + {#snippet input()} + + {/snippet} + {#snippet info()} +

Please provide any additional details relevant to your report.

+ {/snippet} +
+
- +
diff --git a/src/app/components/ReportDetails.svelte b/src/app/components/ReportDetails.svelte index 516692dc..b3a72b5b 100644 --- a/src/app/components/ReportDetails.svelte +++ b/src/app/components/ReportDetails.svelte @@ -4,7 +4,10 @@ import {deriveEventsById} from "@welshman/store" import {repository} from "@welshman/app" import ModalHeader from "@lib/components/ModalHeader.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import Button from "@lib/components/Button.svelte" + import ModalFooter from "@lib/components/ModalFooter.svelte" import ReportItem from "@app/components/ReportItem.svelte" type Props = { @@ -28,19 +31,23 @@ } -
- - {#snippet title()} -
Report Details
- {/snippet} - {#snippet info()} -
All reports for this event are shown below.
- {/snippet} -
- {#each $reports.values() as report (report.id)} -
- -
- {/each} - -
+ + + + {#snippet title()} +
Report Details
+ {/snippet} + {#snippet info()} +
All reports for this event are shown below.
+ {/snippet} +
+ {#each $reports.values() as report (report.id)} +
+ +
+ {/each} +
+ + + +
diff --git a/src/app/components/RoomDetail.svelte b/src/app/components/RoomDetail.svelte index 078098d1..fcd474bc 100644 --- a/src/app/components/RoomDetail.svelte +++ b/src/app/components/RoomDetail.svelte @@ -20,6 +20,8 @@ import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import Confirm from "@lib/components/Confirm.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import ProfileCircles from "@app/components/ProfileCircles.svelte" import RoomMembers from "@app/components/RoomMembers.svelte" @@ -36,7 +38,11 @@ deriveIsMuted, MembershipStatus, } from "@app/core/state" - import {addRoomMembership, removeRoomMembership, toggleRoomNotifications} from "@app/core/commands" + import { + addRoomMembership, + removeRoomMembership, + toggleRoomNotifications, + } from "@app/core/commands" import {makeSpacePath} from "@app/util/routes" import {pushModal} from "@app/util/modal" import {pushToast} from "@app/util/toast" @@ -114,85 +120,87 @@ let loading = $state(false) -
-
-
-
- + + +
+
+
+ +
+
+ + {displayRelayUrl(url)} +
-
- - {displayRelayUrl(url)} +
+ {#if $room?.isRestricted} + + {/if} + {#if $room?.isPrivate} + + {/if} + {#if $room?.isHidden} + + {/if} + {#if $room?.isClosed} + + {/if}
-
- {#if $room?.isRestricted} - - {/if} - {#if $room?.isPrivate} - - {/if} - {#if $room?.isHidden} - - {/if} - {#if $room?.isClosed} - - {/if} -
-
- {#if $room?.about} -

{$room.about}

- {/if} - {#if $members.length > 0} -
-
- Members: - + {#if $room?.about} +

{$room.about}

+ {/if} + {#if $members.length > 0} +
+
+ Members: + +
+
- -
- {/if} -
- Room Settings -
-
- - Notifications + {/if} +
+ Room Settings +
+
+ + Notifications +
+
- -
-
-
- - Favorite +
+
+ + Favorite +
+
-
-
+
-
+ diff --git a/src/app/components/RoomForm.svelte b/src/app/components/RoomForm.svelte index 14ea00b4..1e6e7dc9 100644 --- a/src/app/components/RoomForm.svelte +++ b/src/app/components/RoomForm.svelte @@ -11,6 +11,8 @@ import Icon from "@lib/components/Icon.svelte" import ImageIcon from "@lib/components/ImageIcon.svelte" import IconPickerButton from "@lib/components/IconPickerButton.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import {pushToast} from "@app/util/toast" import {uploadFile} from "@app/core/commands" @@ -105,77 +107,79 @@ } -
- {@render header()} - - {#snippet label()} -

Icon

- {/snippet} - {#snippet input()} -
- {#if imagePreview} -
- Selected: - + + + {@render header()} + + {#snippet label()} +

Icon

+ {/snippet} + {#snippet input()} +
+ {#if imagePreview} +
+ Selected: + +
+ {:else} + No icon selected + {/if} +
+ + + + +
- {:else} - No icon selected - {/if} -
- - - - -
-
- {/snippet} -
- - {#snippet label()} -

Name

- {/snippet} - {#snippet input()} - - {/snippet} -
- - {#snippet label()} -

Description

- {/snippet} - {#snippet input()} - - {/snippet} -
- Permissions -
- - Only allow members to send messages -
-
- - Only allow members to read messages -
-
- - Hide this group from non-members -
-
- - Ignore requests to join -
+ {/snippet} + + + {#snippet label()} +

Name

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Description

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ Permissions +
+ + Only allow members to send messages +
+
+ + Only allow members to read messages +
+
+ + Hide this group from non-members +
+
+ + Ignore requests to join +
+
{@render footer({loading})} - +
diff --git a/src/app/components/RoomMembers.svelte b/src/app/components/RoomMembers.svelte index e4c8b15a..eb625317 100644 --- a/src/app/components/RoomMembers.svelte +++ b/src/app/components/RoomMembers.svelte @@ -9,6 +9,8 @@ import Icon from "@lib/components/Icon.svelte" import Popover from "@lib/components/Popover.svelte" import Confirm from "@lib/components/Confirm.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import Profile from "@app/components/Profile.svelte" import RoomName from "@app/components/RoomName.svelte" @@ -59,51 +61,53 @@ let menuPubkey = $state() -
-
-

Members

-

of

-
- {#if $userIsAdmin} -
- + + +
+

Members

+

of

- {/if} - {#each $members as pubkey (pubkey)} -
-
-
- -
-
- - {#if menuPubkey === pubkey} - - - - {/if} + {#if $userIsAdmin} +
+ +
+ {/if} + {#each $members as pubkey (pubkey)} +
+
+
+ +
+
+ + {#if menuPubkey === pubkey} + + + + {/if} +
-
- {/each} + {/each} + -
+ diff --git a/src/app/components/RoomMembersAdd.svelte b/src/app/components/RoomMembersAdd.svelte index 03753c8d..2a35c0e6 100644 --- a/src/app/components/RoomMembersAdd.svelte +++ b/src/app/components/RoomMembersAdd.svelte @@ -7,6 +7,8 @@ import Icon from "@lib/components/Icon.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import RoomName from "@app/components/RoomName.svelte" import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte" import {pushToast} from "@app/util/toast" @@ -48,23 +50,25 @@ let pubkeys: string[] = $state([]) -
- - {#snippet title()} -
Add Members
- {/snippet} - {#snippet info()} -
to
- {/snippet} -
- - {#snippet label()} -

Search for People

- {/snippet} - {#snippet input()} - - {/snippet} -
+ + + + {#snippet title()} +
Add Members
+ {/snippet} + {#snippet info()} +
to
+ {/snippet} +
+ + {#snippet label()} +

Search for People

+ {/snippet} + {#snippet input()} + + {/snippet} +
+
-
+ diff --git a/src/app/components/SignUp.svelte b/src/app/components/SignUp.svelte index 8a5a1fd3..df8accc4 100644 --- a/src/app/components/SignUp.svelte +++ b/src/app/components/SignUp.svelte @@ -15,6 +15,8 @@ import {getKey, setKey} from "@lib/implicit" import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import LogIn from "@app/components/LogIn.svelte" import InfoNostr from "@app/components/InfoNostr.svelte" import SignUpKey from "@app/components/SignUpKey.svelte" @@ -92,25 +94,27 @@ } -
-

Sign up with Nostr

-

- {PLATFORM_NAME} is built using the - , which gives - users control over their digital identity using cryptographic key pairs. -

- {#if hasPomade} - , which gives + users control over their digital identity using cryptographic key pairs. +

+ {#if hasPomade} + + {/if} + - {/if} - -
- Already have an account? - -
-
+
+ Already have an account? + +
+ + diff --git a/src/app/components/SignUpComplete.svelte b/src/app/components/SignUpComplete.svelte index 769255cb..461fe9a5 100644 --- a/src/app/components/SignUpComplete.svelte +++ b/src/app/components/SignUpComplete.svelte @@ -4,6 +4,8 @@ import HomeSmile from "@assets/icons/home-smile.svg?dataurl" import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" @@ -16,20 +18,22 @@ const back = () => history.back() -
- - {#snippet title()} -
You're all set!
- {/snippet} -
-

- You've created your profile, saved your keys, and now you're ready to start chatting — all - without asking permission! -

-

- From your dashboard, you can use invite links, discover community spaces, and keep up-to-date on - groups you've already joined. Click below to get started! -

+ + + + {#snippet title()} +
You're all set!
+ {/snippet} +
+

+ You've created your profile, saved your keys, and now you're ready to start chatting — all + without asking permission! +

+

+ From your dashboard, you can use invite links, discover community spaces, and keep up-to-date + on groups you've already joined. Click below to get started! +

+
- +
diff --git a/src/app/components/SignUpEmail.svelte b/src/app/components/SignUpEmail.svelte index 445fe0dc..46715f33 100644 --- a/src/app/components/SignUpEmail.svelte +++ b/src/app/components/SignUpEmail.svelte @@ -11,6 +11,8 @@ import FieldInline from "@lib/components/FieldInline.svelte" import Spinner from "@lib/components/Spinner.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import SignUpEmailConfirm from "@app/components/SignUpEmailConfirm.svelte" @@ -92,45 +94,47 @@ let loading = $state(false) -
- - {#snippet title()} -
Sign up with Email
- {/snippet} - {#snippet info()} -
Keep your keys safe using multi-signer key sharing
- {/snippet} -
-

- Under the hood, nostr uses "cryptographic keypairs" to help you prove that your identity is - actually you. -

-

- If you you're not ready to take control of your keys though, that's ok! We'll keep them safe - until you are. -

- - {#snippet label()} -

Email*

- {/snippet} - {#snippet input()} - - {/snippet} -
- - {#snippet label()} -

Password*

- {/snippet} - {#snippet input()} - - {/snippet} -
+ + + + {#snippet title()} +
Sign up with Email
+ {/snippet} + {#snippet info()} +
Keep your keys safe using multi-signer key sharing
+ {/snippet} +
+

+ Under the hood, nostr uses "cryptographic keypairs" to help you prove that your identity is + actually you. +

+

+ If you you're not ready to take control of your keys though, that's ok! We'll keep them safe + until you are. +

+ + {#snippet label()} +

Email*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Password*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+
- +
diff --git a/src/app/components/SignUpEmailConfirm.svelte b/src/app/components/SignUpEmailConfirm.svelte index 76833b55..9ea0926c 100644 --- a/src/app/components/SignUpEmailConfirm.svelte +++ b/src/app/components/SignUpEmailConfirm.svelte @@ -9,6 +9,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" @@ -35,30 +37,32 @@ let loading = $state(false) -
- - {#snippet title()} -
Verify your Email Address
- {/snippet} - {#snippet info()} -
Enter the one-time confirmation code sent to your email
- {/snippet} -
- - {#snippet label()} -

Confirmation Code*

- {/snippet} - {#snippet input()} - - {/snippet} -
-

- We just sent a one-time confirmation code to {email}. Once you receive it, you can enter it - above. -

+ + + + {#snippet title()} +
Verify your Email Address
+ {/snippet} + {#snippet info()} +
Enter the one-time confirmation code sent to your email
+ {/snippet} +
+ + {#snippet label()} +

Confirmation Code*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+

+ We just sent a one-time confirmation code to {email}. Once you receive it, you can enter it + above. +

+
- +
diff --git a/src/app/components/SignUpProfile.svelte b/src/app/components/SignUpProfile.svelte index fa9413e4..30e8887b 100644 --- a/src/app/components/SignUpProfile.svelte +++ b/src/app/components/SignUpProfile.svelte @@ -5,6 +5,8 @@ import {getKey, setKey} from "@lib/implicit" import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import ProfileEditForm from "@app/components/ProfileEditForm.svelte" @@ -26,19 +28,21 @@ } -
- - {#snippet footer()} - - - - - {/snippet} - -
+ + + + {#snippet footer()} + + + + + {/snippet} + + + diff --git a/src/app/components/SpaceAccessRequest.svelte b/src/app/components/SpaceAccessRequest.svelte index 4f8f1426..f33710ea 100644 --- a/src/app/components/SpaceAccessRequest.svelte +++ b/src/app/components/SpaceAccessRequest.svelte @@ -9,6 +9,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {pushToast} from "@app/util/toast" @@ -48,26 +50,28 @@ let loading = $state(false) -
- - {#snippet title()} -
Request Access
- {/snippet} - {#snippet info()} -
Enter an invite code below to request access to {displayUrl(url)}.
- {/snippet} -
- - {#snippet label()} -

Invite code*

- {/snippet} - {#snippet input()} - - {/snippet} -
+ + + + {#snippet title()} +
Request Access
+ {/snippet} + {#snippet info()} +
Enter an invite code below to request access to {displayUrl(url)}.
+ {/snippet} +
+ + {#snippet label()} +

Invite code*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+
- +
diff --git a/src/app/components/SpaceAdd.svelte b/src/app/components/SpaceAdd.svelte index 45b87fcd..6075b83d 100644 --- a/src/app/components/SpaceAdd.svelte +++ b/src/app/components/SpaceAdd.svelte @@ -6,6 +6,8 @@ import Link from "@lib/components/Link.svelte" import Button from "@lib/components/Button.svelte" import CardButton from "@lib/components/CardButton.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import SpaceInviteAccept from "@app/components/SpaceInviteAccept.svelte" import {pushModal} from "@app/util/modal" @@ -19,54 +21,56 @@ const startJoin = () => pushModal(SpaceInviteAccept) -
- - {#snippet title()} -
Add a Space
- {/snippet} - {#snippet info()} -
Spaces are places where communities come together to work, play, and hang out.
- {/snippet} -
- {#if !hideDiscover} - - + + + + {#snippet title()} +
Add a Space
+ {/snippet} + {#snippet info()} +
Spaces are places where communities come together to work, play, and hang out.
+ {/snippet} +
+ {#if !hideDiscover} + + + {#snippet icon()} +
+ {/snippet} + {#snippet title()} +
Explore Spaces
+ {/snippet} + {#snippet info()} +
Join create, or browse spaces
+ {/snippet} +
+ + {/if} + + + + {#snippet icon()} +
+ {/snippet} + {#snippet title()} +
Create a space
+ {/snippet} + {#snippet info()} +
Just a few questions and you'll be on your way.
{/snippet}
- {/if} - - - - {#snippet icon()} -
- {/snippet} - {#snippet title()} -
Create a space
- {/snippet} - {#snippet info()} -
Just a few questions and you'll be on your way.
- {/snippet} -
- -
+ + diff --git a/src/app/components/SpaceAuthError.svelte b/src/app/components/SpaceAuthError.svelte index d9d115fc..ff0e96e1 100644 --- a/src/app/components/SpaceAuthError.svelte +++ b/src/app/components/SpaceAuthError.svelte @@ -8,6 +8,8 @@ import Icon from "@lib/components/Icon.svelte" import {preventDefault} from "@lib/html" import {ucFirst} from "@lib/util" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import SpaceAccessRequest from "@app/components/SpaceAccessRequest.svelte" @@ -37,21 +39,25 @@ let loading = $state(false) -
- - {#snippet title()} -
Access Error
- {/snippet} - {#snippet info()} -
We couldn't connect you to this space.
- {/snippet} -
-

- We received an error from the relay indicating you don't have access to {displayRelayUrl(url)}: -

-

- {@html renderAsHtml(parse({content: ucFirst(error)}))} -

+ + + + {#snippet title()} +
Access Error
+ {/snippet} + {#snippet info()} +
We couldn't connect you to this space.
+ {/snippet} +
+

+ We received an error from the relay indicating you don't have access to {displayRelayUrl( + url, + )}: +

+

+ {@html renderAsHtml(parse({content: ucFirst(error)}))} +

+
- +
diff --git a/src/app/components/SpaceDetail.svelte b/src/app/components/SpaceDetail.svelte index 6d1e4bad..3855eada 100644 --- a/src/app/components/SpaceDetail.svelte +++ b/src/app/components/SpaceDetail.svelte @@ -8,6 +8,8 @@ import BillList from "@assets/icons/bill-list.svg?dataurl" import Icon from "@lib/components/Icon.svelte" import Link from "@lib/components/Link.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import Button from "@lib/components/Button.svelte" import RelayName from "@app/components/RelayName.svelte" @@ -33,68 +35,70 @@ const startEdit = () => pushModal(SpaceEdit, {url, initialValues: $relay || {url}}) -
-
-
-
-
-
- + + +
+
+
+
+
+ +
+
+

+ +

+

{displayRelayUrl(url)}

+
-
-

- -

-

{displayRelayUrl(url)}

-
-
- {#if $userIsAdmin} - - {/if} -
- - {#if $relay?.terms_of_service || $relay?.privacy_policy} -
- {#if $relay.terms_of_service} - - - Terms of Service - - {/if} - {#if $relay.privacy_policy} - - - Privacy Policy - + {#if $userIsAdmin} + {/if}
- {/if} - -
- {#if owner} -
-

- - Latest Updates -

- - {#snippet fallback()} -

No recent posts from the relay admin

- {/snippet} -
+ + {#if $relay?.terms_of_service || $relay?.privacy_policy} +
+ {#if $relay.terms_of_service} + + + Terms of Service + + {/if} + {#if $relay.privacy_policy} + + + Privacy Policy + + {/if}
{/if} -
+ +
+ {#if owner} +
+

+ + Latest Updates +

+ + {#snippet fallback()} +

No recent posts from the relay admin

+ {/snippet} +
+
+ {/if} +
+ -
+ diff --git a/src/app/components/SpaceEdit.svelte b/src/app/components/SpaceEdit.svelte index ba34f487..61b10048 100644 --- a/src/app/components/SpaceEdit.svelte +++ b/src/app/components/SpaceEdit.svelte @@ -11,6 +11,8 @@ import Icon from "@lib/components/Icon.svelte" import Spinner from "@lib/components/Spinner.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import ImageIcon from "@lib/components/ImageIcon.svelte" @@ -119,70 +121,72 @@ } -
- - {#snippet title()} -
Edit a Space
- {/snippet} - {#snippet info()} - {displayRelayUrl(url)} - {/snippet} -
- - {#snippet label()} -

Icon

- {/snippet} - {#snippet input()} -
-
- {#if imagePreview} -
- Selected: - + + + + {#snippet title()} +
Edit a Space
+ {/snippet} + {#snippet info()} + {displayRelayUrl(url)} + {/snippet} +
+ + {#snippet label()} +

Icon

+ {/snippet} + {#snippet input()} +
+
+ {#if imagePreview} +
+ Selected: + +
+ {:else} + No icon selected + {/if} +
+ + + Select + +
- {:else} - No icon selected - {/if} -
- - - Select - -
-
- {/snippet} -
- - {#snippet label()} -

Name

- {/snippet} - {#snippet input()} - - {/snippet} -
- - {#snippet label()} -

Description

- {/snippet} - {#snippet input()} - - {/snippet} -
+ {/snippet} + + + {#snippet label()} +

Name

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Description

+ {/snippet} + {#snippet input()} + + {/snippet} +
+
- +
diff --git a/src/app/components/SpaceExit.svelte b/src/app/components/SpaceExit.svelte index 4b1ed9e1..70b543cd 100644 --- a/src/app/components/SpaceExit.svelte +++ b/src/app/components/SpaceExit.svelte @@ -6,6 +6,8 @@ import Button from "@lib/components/Button.svelte" import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {removeSpaceMembership, publishLeaveRequest, removeTrustedRelay} from "@app/core/commands" @@ -31,15 +33,17 @@ let loading = $state(false) -
- - {#snippet title()} -
- You are leaving
{displayRelayUrl(url)} -
- {/snippet} -
-

Are you sure you want to leave?

+ + + + {#snippet title()} +
+ You are leaving
{displayRelayUrl(url)} +
+ {/snippet} +
+

Are you sure you want to leave?

+
- +
diff --git a/src/app/components/SpaceInvite.svelte b/src/app/components/SpaceInvite.svelte index f44de9e7..3444c4d6 100644 --- a/src/app/components/SpaceInvite.svelte +++ b/src/app/components/SpaceInvite.svelte @@ -9,6 +9,8 @@ import Field from "@lib/components/Field.svelte" import Button from "@lib/components/Button.svelte" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import QRCode from "@app/components/QRCode.svelte" @@ -52,52 +54,54 @@ }) -
- - {#snippet title()} -
Create an Invite
- {/snippet} - {#snippet info()} -
- Get a link that you can use to invite people to - {displayRelayUrl(url)} -
- {/snippet} -
-
- {#if loading} -

- Requesting an invite link... -

- {:else if $authError} -

Oops! It looks like you're not a member of this relay.

- {:else} -
- - - {#snippet input()} - - {/snippet} - {#snippet info()} -

- This invite link can be used by clicking "Add Space" and pasting it there. - {#if !claim} - This space did not issue a claim for this link, so additional steps might be - required. - {/if} -

- {/snippet} -
-
- {/if} -
+ + + + {#snippet title()} +
Create an Invite
+ {/snippet} + {#snippet info()} +
+ Get a link that you can use to invite people to + {displayRelayUrl(url)} +
+ {/snippet} +
+
+ {#if loading} +

+ Requesting an invite link... +

+ {:else if $authError} +

Oops! It looks like you're not a member of this relay.

+ {:else} +
+ + + {#snippet input()} + + {/snippet} + {#snippet info()} +

+ This invite link can be used by clicking "Add Space" and pasting it there. + {#if !claim} + This space did not issue a claim for this link, so additional steps might be + required. + {/if} +

+ {/snippet} +
+
+ {/if} +
+
-
+ diff --git a/src/app/components/SpaceInviteAccept.svelte b/src/app/components/SpaceInviteAccept.svelte index 3eea66e8..d15d29ab 100644 --- a/src/app/components/SpaceInviteAccept.svelte +++ b/src/app/components/SpaceInviteAccept.svelte @@ -12,6 +12,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import AltArrowRight from "@assets/icons/alt-arrow-right.svg?dataurl" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import RelaySummary from "@app/components/RelaySummary.svelte" @@ -24,12 +26,10 @@ type Props = { invite: string - abortAction?: Snippet + back?: () => void } - let {invite = "", abortAction}: Props = $props() - - const back = () => history.back() + let {invite = "", back = () => history.back()}: Props = $props() const joinRelay = async () => { const {url, claim} = inviteData! @@ -63,48 +63,46 @@ const inviteData = $derived(parseInviteLink(invite)) -
- - {#snippet title()} -
Join a Space
- {/snippet} - {#snippet info()} -
Enter a relay URL or invite link below to join an existing space.
- {/snippet} -
- - {#snippet label()} -

Invite Link*

- {/snippet} - {#snippet input()} - - {/snippet} -
-
+ + + + {#snippet title()} +
Join a Space
+ {/snippet} + {#snippet info()} +
Enter a relay URL or invite link below to join an existing space.
+ {/snippet} +
+ + {#snippet label()} +

Invite Link*

+ {/snippet} + {#snippet input()} + + {/snippet} +
{#if inviteData} -
-
-

You're about to join:

- +
+
+
+

You're about to join:

+ +
{/if} -
+ - {#if abortAction} - {@render abortAction?.()} - {:else} - - {/if} + - + diff --git a/src/app/components/SpaceJoin.svelte b/src/app/components/SpaceJoin.svelte index 111eb6cc..42cffc96 100644 --- a/src/app/components/SpaceJoin.svelte +++ b/src/app/components/SpaceJoin.svelte @@ -12,14 +12,20 @@ import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" import Spinner from "@lib/components/Spinner.svelte" - import ModalHeader from "@lib/components/ModalHeader.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import FieldInline from "@lib/components/FieldInline.svelte" import StatusIndicator from "@lib/components/StatusIndicator.svelte" import RelaySummary from "@app/components/RelaySummary.svelte" import SocketStatusIndicator from "@app/components/SocketStatusIndicator.svelte" import SpaceAccessRequest from "@app/components/SpaceAccessRequest.svelte" - import {attemptRelayAccess, addSpaceMembership, broadcastUserData, setSpaceNotifications} from "@app/core/commands" + import { + attemptRelayAccess, + addSpaceMembership, + broadcastUserData, + setSpaceNotifications, + } from "@app/core/commands" import {relaysMostlyRestricted, deriveSpaceMembers, notificationSettings} from "@app/core/state" import {pushModal} from "@app/util/modal" import {pushToast} from "@app/util/toast" @@ -83,45 +89,47 @@ }) -
- -
-
-
- Enable notifications for this space -

- Get notified about new activity in this space. You can change this later in settings. -

+ + + +
+
+
+ Enable notifications for this space +

+ Get notified about new activity in this space. You can change this later in settings. +

+
+
-
-
-
-
- Connection Status +
+
+ Connection Status + {#if error} + Error + {:else} + + {/if} +
{#if error} - Error - {:else} - +
+ +

{error}

+
{/if}
- {#if error} -
- -

{error}

-
- {/if} -
+ - + diff --git a/src/app/components/SpaceMembers.svelte b/src/app/components/SpaceMembers.svelte index 84a7325c..4e5b1966 100644 --- a/src/app/components/SpaceMembers.svelte +++ b/src/app/components/SpaceMembers.svelte @@ -10,6 +10,8 @@ import Icon from "@lib/components/Icon.svelte" import Popover from "@lib/components/Popover.svelte" import Confirm from "@lib/components/Confirm.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import Profile from "@app/components/Profile.svelte" import SpaceMembersAdd from "@app/components/SpaceMembersAdd.svelte" @@ -68,56 +70,58 @@ let menuPubkey = $state() -
-
-

Members

-

of {displayRelayUrl(url)}

-
- {#if $userIsAdmin} -
- - {#if $bans.length > 0} - - {/if} + + +
+

Members

+

of {displayRelayUrl(url)}

- {/if} - {#each $members as pubkey (pubkey)} -
-
-
- -
-
- + {#if $bans.length > 0} + - {#if menuPubkey === pubkey} - - - - {/if} + {/if} +
+ {/if} + {#each $members as pubkey (pubkey)} +
+
+
+ +
+
+ + {#if menuPubkey === pubkey} + + + + {/if} +
-
- {/each} + {/each} + -
+
diff --git a/src/app/components/SpaceMembersAdd.svelte b/src/app/components/SpaceMembersAdd.svelte index be480b2e..f38af88b 100644 --- a/src/app/components/SpaceMembersAdd.svelte +++ b/src/app/components/SpaceMembersAdd.svelte @@ -6,6 +6,8 @@ import Button from "@lib/components/Button.svelte" import Field from "@lib/components/Field.svelte" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte" @@ -49,23 +51,25 @@ let pubkeys: string[] = $state([]) -
- - {#snippet title()} -
Add Members
- {/snippet} - {#snippet info()} -
to {displayRelayUrl(url)}
- {/snippet} -
- - {#snippet label()} -

Search for People

- {/snippet} - {#snippet input()} - - {/snippet} -
+ + + + {#snippet title()} +
Add Members
+ {/snippet} + {#snippet info()} +
to {displayRelayUrl(url)}
+ {/snippet} +
+ + {#snippet label()} +

Search for People

+ {/snippet} + {#snippet input()} + + {/snippet} +
+
-
+ diff --git a/src/app/components/SpaceMembersBanned.svelte b/src/app/components/SpaceMembersBanned.svelte index cfd88ac1..256367de 100644 --- a/src/app/components/SpaceMembersBanned.svelte +++ b/src/app/components/SpaceMembersBanned.svelte @@ -8,6 +8,8 @@ import Button from "@lib/components/Button.svelte" import Icon from "@lib/components/Icon.svelte" import Popover from "@lib/components/Popover.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import Profile from "@app/components/Profile.svelte" @@ -49,47 +51,49 @@ let menuPubkey = $state() -
- - {#snippet title()} -
Banned users
- {/snippet} - {#snippet info()} -
on {displayRelayUrl(url)}
- {/snippet} -
- {#each $bans as { pubkey, reason } (pubkey)} -
-
-
- -
-
- - {#if menuPubkey === pubkey} - - - - {/if} + + + + {#snippet title()} +
Banned users
+ {/snippet} + {#snippet info()} +
on {displayRelayUrl(url)}
+ {/snippet} +
+ {#each $bans as { pubkey, reason } (pubkey)} +
+
+
+ +
+
+ + {#if menuPubkey === pubkey} + + + + {/if} +
-
- {/each} + {/each} + -
+ diff --git a/src/app/components/SpaceReports.svelte b/src/app/components/SpaceReports.svelte index c0a94b54..835d0e1a 100644 --- a/src/app/components/SpaceReports.svelte +++ b/src/app/components/SpaceReports.svelte @@ -3,6 +3,8 @@ import AltArrowLeft from "@assets/icons/alt-arrow-left.svg?dataurl" import Button from "@lib/components/Button.svelte" import Icon from "@lib/components/Icon.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import ReportItem from "@app/components/ReportItem.svelte" import {deriveEventsForUrl} from "@app/core/state" @@ -18,18 +20,20 @@ const back = () => history.back() -
-
-

Reports

-

on {displayRelayUrl(url)}

-
- {#each $reports as event (event.id)} - - {/each} + + +
+

Reports

+

on {displayRelayUrl(url)}

+
+ {#each $reports as event (event.id)} + + {/each} +
-
+ diff --git a/src/app/components/SpaceTrustRelay.svelte b/src/app/components/SpaceTrustRelay.svelte index 6b0fc5ee..1a55255f 100644 --- a/src/app/components/SpaceTrustRelay.svelte +++ b/src/app/components/SpaceTrustRelay.svelte @@ -8,7 +8,10 @@ import Icon from "@lib/components/Icon.svelte" import Spinner from "@lib/components/Spinner.svelte" import Button from "@lib/components/Button.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" + import ModalFooter from "@lib/components/ModalFooter.svelte" import InfoSignatures from "@app/components/InfoSignatures.svelte" import {relaysPendingTrust} from "@app/core/state" import {removeSpaceMembership, addTrustedRelay, removeTrustedRelay} from "@app/core/commands" @@ -49,40 +52,44 @@ let loading = $state(false) -
- - {#snippet title()} - Do you trust this space? - {/snippet} - {#snippet info()} -
- Only join {displayRelayUrl(url)} if you trust the adminstrator -
- {/snippet} -
-
-

- This space has opted not to publish , which means that they have the ability to forge messages from other users. -

-

- If you trust this space's admin, you can continue. Otherwise, it may be safer not to join this - space. -

-
-
- - -
-
+ + + + {#snippet title()} + Do you trust this space? + {/snippet} + {#snippet info()} +
+ Only join {displayRelayUrl(url)} if you trust the adminstrator +
+ {/snippet} +
+
+

+ This space has opted not to publish , which means that they have the ability to forge messages from other users. +

+

+ If you trust this space's admin, you can continue. Otherwise, it may be safer not to join + this space. +

+
+
+ +
+ + +
+
+
diff --git a/src/app/components/ThreadCreate.svelte b/src/app/components/ThreadCreate.svelte index 7a8169bb..788a7a76 100644 --- a/src/app/components/ThreadCreate.svelte +++ b/src/app/components/ThreadCreate.svelte @@ -10,6 +10,8 @@ import Button from "@lib/components/Button.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import EditorContent from "@app/editor/EditorContent.svelte" import {pushToast} from "@app/util/toast" import {PROTECTED} from "@app/core/state" @@ -74,53 +76,55 @@ let title: string = $state("") -
- - {#snippet title()} -
Create a Thread
- {/snippet} - {#snippet info()} -
Share a link, or start a discussion.
- {/snippet} -
-
- - {#snippet label()} -

Title*

+ + + + {#snippet title()} +
Create a Thread
{/snippet} - {#snippet input()} - + {#snippet info()} +
Share a link, or start a discussion.
{/snippet} -
- - {#snippet label()} -

Message*

- {/snippet} - {#snippet input()} -
- -
- {/snippet} -
- -
+ +
+ + {#snippet label()} +

Title*

+ {/snippet} + {#snippet input()} + + {/snippet} +
+ + {#snippet label()} +

Message*

+ {/snippet} + {#snippet input()} +
+ +
+ {/snippet} +
+ +
+ -
+ diff --git a/src/app/components/WalletAsReceivingAddress.svelte b/src/app/components/WalletAsReceivingAddress.svelte index 2114e298..bace65eb 100644 --- a/src/app/components/WalletAsReceivingAddress.svelte +++ b/src/app/components/WalletAsReceivingAddress.svelte @@ -2,6 +2,8 @@ import {getWalletAddress} from "@welshman/util" import Button from "@lib/components/Button.svelte" import Spinner from "@lib/components/Spinner.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {updateProfile} from "@app/core/commands" @@ -32,30 +34,33 @@ let loading = $state(false) -
- - {#snippet title()} - Set as Receiving Address? - {/snippet} - - {#if $userProfile?.lud16} -

- Your current receiving address is different from the one provided by your connected wallet. -

-

- Would you like to update your receiving address to {lud16}? -

- {:else} -

- You don't currently have a receiving address set, which means other people can't send you - lightning payments. -

-

Would you like to use the one associated with your connected wallet?

- {/if} + + + + {#snippet title()} + Set as Receiving Address? + {/snippet} + + {#if $userProfile?.lud16} +

+ Your current receiving address is different from the one provided by your connected wallet. +

+

+ Would you like to update your receiving address to {lud16}? +

+ {:else} +

+ You don't currently have a receiving address set, which means other people can't send you + lightning payments. +

+

Would you like to use the one associated with your connected wallet?

+ {/if} +
-
+ diff --git a/src/app/components/WalletConnect.svelte b/src/app/components/WalletConnect.svelte index 1489a4d5..25014138 100644 --- a/src/app/components/WalletConnect.svelte +++ b/src/app/components/WalletConnect.svelte @@ -15,6 +15,8 @@ import Scanner from "@lib/components/Scanner.svelte" import Spinner from "@lib/components/Spinner.svelte" import Field from "@lib/components/Field.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {getWebLn} from "@app/core/commands" @@ -109,61 +111,63 @@ let loading = $state(false) -
- - {#snippet title()} -
Connect a Wallet
- {/snippet} - {#snippet info()} - Use Nostr Wallet Connect to send Bitcoin payments over lightning. - {/snippet} -
- {#if getWebLn()} - - Or - {/if} - - {#snippet label()} - Connection Secret* - {/snippet} - {#snippet input()} - - {/snippet} - {#snippet info()} - You can find this in any wallet that supports - Nostr Wallet Connect. - {/snippet} - - {#if showScanner} - - {/if} + + + + {#snippet title()} +
Connect a Wallet
+ {/snippet} + {#snippet info()} + Use Nostr Wallet Connect to send Bitcoin payments over lightning. + {/snippet} +
+ {#if getWebLn()} + + Or + {/if} + + {#snippet label()} + Connection Secret* + {/snippet} + {#snippet input()} + + {/snippet} + {#snippet info()} + You can find this in any wallet that supports + Nostr Wallet Connect. + {/snippet} + + {#if showScanner} + + {/if} +
-
+ diff --git a/src/app/components/WalletPay.svelte b/src/app/components/WalletPay.svelte index 5ec3b964..61386aea 100644 --- a/src/app/components/WalletPay.svelte +++ b/src/app/components/WalletPay.svelte @@ -8,6 +8,8 @@ import Button from "@lib/components/Button.svelte" import FieldInline from "@lib/components/FieldInline.svelte" import Scanner from "@lib/components/Scanner.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import {payInvoice} from "@app/core/commands" @@ -48,52 +50,54 @@ let sats = $state(0) -
- - {#snippet title()} -
Pay with Lightning
- {/snippet} - {#snippet info()} - Use your Nostr wallet to send Bitcoin payments over lightning. - {/snippet} -
- {#if invoice} -
- {#if $session?.wallet?.type === "webln" && invoice.satoshi === 0} -

- Uh oh! It looks like your current wallet doesn't support invoices without an amount. See - if you can get a lightning invoice with a pre-set amount. -

- {:else} - - {#snippet label()} - Amount (satoshis) - {/snippet} - {#snippet input()} -
- -
- {/snippet} -
-

- You're about to pay a bitcoin lightning invoice with the following description: - {invoice.description || "[no description]"}" -

- {/if} -
- {:else} - -

- To make a payment, scan a lightning invoice with your camera. -

- {/if} + + + + {#snippet title()} +
Pay with Lightning
+ {/snippet} + {#snippet info()} + Use your Nostr wallet to send Bitcoin payments over lightning. + {/snippet} +
+ {#if invoice} +
+ {#if $session?.wallet?.type === "webln" && invoice.satoshi === 0} +

+ Uh oh! It looks like your current wallet doesn't support invoices without an amount. See + if you can get a lightning invoice with a pre-set amount. +

+ {:else} + + {#snippet label()} + Amount (satoshis) + {/snippet} + {#snippet input()} +
+ +
+ {/snippet} +
+

+ You're about to pay a bitcoin lightning invoice with the following description: + {invoice.description || "[no description]"}" +

+ {/if} +
+ {:else} + +

+ To make a payment, scan a lightning invoice with your camera. +

+ {/if} +
-
+ diff --git a/src/app/components/WalletUpdateReceivingAddress.svelte b/src/app/components/WalletUpdateReceivingAddress.svelte index 0c941448..46432cf8 100644 --- a/src/app/components/WalletUpdateReceivingAddress.svelte +++ b/src/app/components/WalletUpdateReceivingAddress.svelte @@ -5,6 +5,8 @@ import Button from "@lib/components/Button.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import Wallet from "@assets/icons/wallet.svg?dataurl" import CheckCircle from "@assets/icons/check-circle.svg?dataurl" import {updateProfile} from "@app/core/commands" @@ -42,49 +44,50 @@ } -
- - {#snippet title()} - Update Lightning Address - {/snippet} - {#snippet info()} - Update your lightning address for receiving payments. - {/snippet} - + + + + {#snippet title()} + Update Lightning Address + {/snippet} + {#snippet info()} + Update your lightning address for receiving payments. + {/snippet} + -
-
- Lightning Address - -

- You can enter one manually or use your connected wallet's address (if available). Leave - empty to remove your lightning address -

-
- - {#if walletLud16 && walletLud16 !== address} -
-
-
-
- - Wallet Address -
-

{walletLud16}

-
- -
+
+
+ Lightning Address + +

+ You can enter one manually or use your connected wallet's address (if available). Leave + empty to remove your lightning address +

- {/if} -
+ {#if walletLud16 && walletLud16 !== address} +
+
+
+
+ + Wallet Address +
+

{walletLud16}

+
+ +
+
+ {/if} +
+ -
+
diff --git a/src/app/components/Zap.svelte b/src/app/components/Zap.svelte index 058e4535..e84208c7 100644 --- a/src/app/components/Zap.svelte +++ b/src/app/components/Zap.svelte @@ -10,6 +10,8 @@ import Spinner from "@lib/components/Spinner.svelte" import Button from "@lib/components/Button.svelte" import FieldInline from "@lib/components/FieldInline.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" import EmojiButton from "@lib/components/EmojiButton.svelte" @@ -109,46 +111,48 @@ }) -
- - {#snippet title()} -
Send a Zap
- {/snippet} - {#snippet info()} -
To
- {/snippet} -
- - {#snippet label()} - Emoji Reaction - {/snippet} - {#snippet input()} -
- - {content} - -
- {/snippet} -
- - {#snippet label()} - Amount - {/snippet} - {#snippet input()} -
- -
- {/snippet} -
- + + + + {#snippet title()} +
Send a Zap
+ {/snippet} + {#snippet info()} +
To
+ {/snippet} +
+ + {#snippet label()} + Emoji Reaction + {/snippet} + {#snippet input()} +
+ + {content} + +
+ {/snippet} +
+ + {#snippet label()} + Amount + {/snippet} + {#snippet input()} +
+ +
+ {/snippet} +
+ +
-
+ diff --git a/src/app/core/commands.ts b/src/app/core/commands.ts index ba6fdf14..a169d6a3 100644 --- a/src/app/core/commands.ts +++ b/src/app/core/commands.ts @@ -389,11 +389,11 @@ export const toggleRoomNotifications = async (url: string, h: string) => { } else { // Toggle exception status const hasException = existing.exceptions.includes(h) - const exceptions = hasException ? remove(h, existing.exceptions) : append(h, existing.exceptions) + const exceptions = hasException + ? remove(h, existing.exceptions) + : append(h, existing.exceptions) - updated = alerts.map((s: SpaceNotificationSettings) => - s.url === url ? {...s, exceptions} : s, - ) + updated = alerts.map((s: SpaceNotificationSettings) => (s.url === url ? {...s, exceptions} : s)) } return publishSettings({alerts: updated}) diff --git a/src/app/util/notifications.ts b/src/app/util/notifications.ts index cdcecc45..f0fc6adc 100644 --- a/src/app/util/notifications.ts +++ b/src/app/util/notifications.ts @@ -533,9 +533,7 @@ class CapacitorNotifications implements IPushAdapter { } else { // notify=false: exceptions are opt-in (only include those rooms) if (exceptions.length > 0) { - filters.push( - ...baseFilters.map(f => ({...f, "#h": exceptions})), - ) + filters.push(...baseFilters.map(f => ({...f, "#h": exceptions}))) } } } @@ -625,9 +623,7 @@ class CapacitorNotifications implements IPushAdapter { await Promise.all(get(userSpaceUrls).map(url => this._unsyncRelay(url, "spaces"))) await Promise.all( - getRelaysFromList(get(userMessagingRelayList)).map(url => - this._unsyncRelay(url, "messages"), - ), + getRelaysFromList(get(userMessagingRelayList)).map(url => this._unsyncRelay(url, "messages")), ) } } diff --git a/src/lib/components/Confirm.svelte b/src/lib/components/Confirm.svelte index ca7ac64d..671a6270 100644 --- a/src/lib/components/Confirm.svelte +++ b/src/lib/components/Confirm.svelte @@ -7,6 +7,8 @@ import Spinner from "@lib/components/Spinner.svelte" import ModalHeader from "@lib/components/ModalHeader.svelte" import ModalFooter from "@lib/components/ModalFooter.svelte" + import Modal from "@lib/components/Modal.svelte" + import ModalBody from "@lib/components/ModalBody.svelte" interface Props { title?: string @@ -32,16 +34,18 @@ const back = () => history.back() -
- - {#snippet title()} -
{restProps.title || "Are you sure?"}
- {/snippet} - {#snippet info()} -
{subtitle}
- {/snippet} -
-

{message}

+ + + + {#snippet title()} +
{restProps.title || "Are you sure?"}
+ {/snippet} + {#snippet info()} +
{subtitle}
+ {/snippet} +
+

{message}

+
- +
diff --git a/src/lib/components/Dialog.svelte b/src/lib/components/Dialog.svelte index f7fc55cf..7dbb77b2 100644 --- a/src/lib/components/Dialog.svelte +++ b/src/lib/components/Dialog.svelte @@ -1,12 +1,17 @@
@@ -14,6 +23,6 @@
- {@render children?.()} +
diff --git a/src/lib/components/IconPickerButton.svelte b/src/lib/components/IconPickerButton.svelte index 0dc7d85f..1c005300 100644 --- a/src/lib/components/IconPickerButton.svelte +++ b/src/lib/components/IconPickerButton.svelte @@ -58,7 +58,12 @@ {#if showIconPicker} - - - + {/if} diff --git a/src/lib/components/Modal.svelte b/src/lib/components/Modal.svelte new file mode 100644 index 00000000..9721a05f --- /dev/null +++ b/src/lib/components/Modal.svelte @@ -0,0 +1,17 @@ + + + + {@render children?.()} + diff --git a/src/lib/components/ModalBody.svelte b/src/lib/components/ModalBody.svelte new file mode 100644 index 00000000..b66af5d1 --- /dev/null +++ b/src/lib/components/ModalBody.svelte @@ -0,0 +1,16 @@ + + +
+ {@render children?.()} +
diff --git a/src/lib/components/ModalFooter.svelte b/src/lib/components/ModalFooter.svelte index a2852f3e..a3bcd607 100644 --- a/src/lib/components/ModalFooter.svelte +++ b/src/lib/components/ModalFooter.svelte @@ -8,6 +8,9 @@ const {children}: Props = $props() -
- {@render children?.()} +
+
+
+ {@render children?.()} +
diff --git a/src/lib/components/ModalHeader.svelte b/src/lib/components/ModalHeader.svelte index 26bed436..23430fdb 100644 --- a/src/lib/components/ModalHeader.svelte +++ b/src/lib/components/ModalHeader.svelte @@ -7,7 +7,7 @@ const {title, info}: Props = $props() -
+

{@render title?.()}

{@render info?.()}

diff --git a/src/routes/join/+page.svelte b/src/routes/join/+page.svelte index b782f4ad..1083d874 100644 --- a/src/routes/join/+page.svelte +++ b/src/routes/join/+page.svelte @@ -1,20 +1,16 @@ - - - {#snippet abortAction()} - - {/snippet} - - + diff --git a/src/routes/spaces/[relay]/[h]/+page.svelte b/src/routes/spaces/[relay]/[h]/+page.svelte index 75847707..6ad4108e 100644 --- a/src/routes/spaces/[relay]/[h]/+page.svelte +++ b/src/routes/spaces/[relay]/[h]/+page.svelte @@ -47,11 +47,7 @@ userSettingsValues, } from "@app/core/state" import {setChecked, checked} from "@app/util/notifications" - import { - canEnforceNip70, - prependParent, - publishDelete, - } from "@app/core/commands" + import {canEnforceNip70, prependParent, publishDelete} from "@app/core/commands" import {makeFeed} from "@app/core/requests" import {popKey} from "@lib/implicit" import {pushToast} from "@app/util/toast"