Split app/core up into domain-oriented files

This commit is contained in:
Jon Staab
2026-06-08 15:33:38 -07:00
parent ea6b63de53
commit 926b31de78
171 changed files with 2902 additions and 2628 deletions
+89
View File
@@ -0,0 +1,89 @@
import {
REPORT,
ROOM_ADD_MEMBER,
ROOM_JOIN,
ROOM_LEAVE,
ROOM_MEMBERS,
ROOM_REMOVE_MEMBER,
getPubkeyTagValues,
getTagValue,
sortEventsDesc,
} from "@welshman/util"
import type {TrustedEvent} from "@welshman/util"
import {first, groupBy, removeUndefined} from "@welshman/lib"
import {derived} from "svelte/store"
import {deriveEventsForUrl} from "@app/repository"
import {getRoomMembers} from "@app/members"
// Action items (admin review queue)
export const deriveSpaceActionItems = (url: string) =>
derived(
deriveEventsForUrl(url, [
{
kinds: [REPORT, ROOM_JOIN, ROOM_LEAVE, ROOM_MEMBERS, ROOM_ADD_MEMBER, ROOM_REMOVE_MEMBER],
},
]),
$events => {
const getRoomId = (e: TrustedEvent) =>
getTagValue(e.kind === ROOM_MEMBERS ? "d" : "h", e.tags)
const reports = $events.filter(e => e.kind === REPORT)
const pendingJoins: TrustedEvent[] = []
// Room-level join requests — most recent per pubkey+h
for (const [h, roomEvents] of groupBy(getRoomId, $events)) {
if (!h) continue
const roomJoins: TrustedEvent[] = []
const roomLeaves: TrustedEvent[] = []
const roomMembershipEvents: TrustedEvent[] = []
for (const event of roomEvents) {
switch (event.kind) {
case ROOM_JOIN:
roomJoins.push(event)
break
case ROOM_LEAVE:
roomLeaves.push(event)
break
case ROOM_MEMBERS:
case ROOM_ADD_MEMBER:
case ROOM_REMOVE_MEMBER:
roomMembershipEvents.push(event)
break
}
}
const roomMembers = new Set(getRoomMembers(url, h, roomMembershipEvents))
pendingJoins.push(
...removeUndefined(
Array.from(groupBy(e => e.pubkey, roomJoins).values()).map(events =>
first(sortEventsDesc(events)),
),
).filter(({pubkey, created_at}) => {
if (roomMembers.has(pubkey)) return false
if (
roomMembershipEvents.some(event => {
if (event.created_at <= created_at) {
return false
}
if (event.kind === ROOM_MEMBERS) {
return true
}
return getPubkeyTagValues(event.tags).includes(pubkey)
})
) {
return false
}
if (roomLeaves.some(e => e.pubkey === pubkey && e.created_at > created_at)) return false
return true
}),
)
}
return sortEventsDesc([...reports, ...pendingJoins])
},
)
+1 -1
View File
@@ -1,7 +1,7 @@
/* eslint prefer-rest-params: 0 */
import {page} from "$app/stores"
import {getSetting} from "@app/core/state"
import {getSetting} from "@app/settings"
const w = window as any
+1 -1
View File
@@ -1,6 +1,6 @@
import {Room as LiveKitRoom} from "livekit-client"
import {derived, writable} from "svelte/store"
import {type Room} from "@app/core/state"
import type {Room} from "@app/groups"
export type VoiceSession = {
url: string
+2 -1
View File
@@ -36,7 +36,8 @@ import {
voiceState,
} from "@app/call/stores"
import {resetVideoCallLayout, triggerVideoFeedCount, videoPrimaryTileKey} from "@app/call/video"
import {deriveLatestEventForUrl, deriveRoom, makeRoomId} from "@app/core/state"
import {deriveLatestEventForUrl} from "@app/repository"
import {deriveRoom, makeRoomId} from "@app/groups"
import {pushToast} from "@app/toast"
export const LIVEKIT_PARTICIPANTS = 39004
+139
View File
@@ -0,0 +1,139 @@
import {DELETE, PROFILE, getPubkeyTagValues} from "@welshman/util"
import type {TrustedEvent} from "@welshman/util"
import {append, call, on, reject, remove, sort, sortBy, spec, uniq, uniqBy} from "@welshman/lib"
import type {Override} from "@welshman/lib"
import {createSearch, displayProfileByPubkey, pubkey, repository} from "@welshman/app"
import {derived, readable} from "svelte/store"
import {DM_KINDS} from "@app/content"
import type {RepositoryUpdate} from "@welshman/net"
import {makeDeriveItem, throttled} from "@welshman/store"
export type Chat = {
id: string
pubkeys: string[]
messages: TrustedEvent[]
last_activity: number
search_text: string
}
export const getChatPubkeys = (pubkeys: string[]) => sort(uniq(append(pubkey.get()!, pubkeys)))
export const getChatPubkeysFromEvent = (event: TrustedEvent) =>
getChatPubkeys(getPubkeyTagValues(event.tags).concat(event.pubkey))
export const makeChatId = (pubkeys: string[]) => {
const userPubkey = pubkey.get()!
const otherPubkeys = remove(userPubkey, uniq(pubkeys))
const visiblePubkeys = otherPubkeys.length === 0 ? [userPubkey] : otherPubkeys
return sort(visiblePubkeys).join(",")
}
export const splitChatId = (id: string) => getChatPubkeys(id.split(","))
export const chatsById = call(() => {
const chatsById = new Map<string, Chat>()
const chatsByPubkey = new Map<string, string[]>()
const addSearchText = (chat: Override<Chat, {search_text?: string}>) => {
chat.search_text =
chat.pubkeys.length === 1
? displayProfileByPubkey(chat.pubkeys[0]) + " note to self"
: remove(pubkey.get()!, chat.pubkeys).map(displayProfileByPubkey).join(" ")
return chat as Chat
}
return readable(chatsById, set => {
const indexChatByPubkeys = (chat: Chat) => {
for (const pubkey of chat.pubkeys) {
chatsByPubkey.set(pubkey, uniq(append(chat.id, chatsByPubkey.get(pubkey) || [])))
}
}
const addEvents = (events: TrustedEvent[]) => {
let dirty = false
for (const event of events) {
if (DM_KINDS.includes(event.kind)) {
const pubkeys = getChatPubkeysFromEvent(event)
const id = makeChatId(pubkeys)
const chat = chatsById.get(id)
const messages = sortBy(
e => -e.created_at,
uniqBy(e => e.id, append(event, chat?.messages || [])),
)
const last_activity = Math.max(chat?.last_activity || 0, event.created_at)
const updatedChat = addSearchText({id, pubkeys, messages, last_activity})
chatsById.set(id, updatedChat)
indexChatByPubkeys(updatedChat)
dirty = true
}
if (event.kind === PROFILE) {
for (const chatId of chatsByPubkey.get(event.pubkey) || []) {
const chat = chatsById.get(chatId)
if (chat) {
addSearchText(chat)
dirty = true
}
}
}
}
if (dirty) {
set(chatsById)
}
}
const removeEvents = (removed: Set<string>) => {
let dirty = false
for (const id of removed) {
const event = repository.getEvent(id)
if (event && DM_KINDS.includes(event.kind)) {
for (const chatId of chatsByPubkey.get(event.pubkey) || []) {
const chat = chatsById.get(chatId)
if (chat) {
chat.messages = reject(spec({id: event.id}), chat.messages)
dirty = true
}
}
}
}
if (dirty) {
set(chatsById)
}
}
addEvents(repository.query([{kinds: [...DM_KINDS, DELETE, PROFILE]}]))
const unsubscribers = [
on(repository, "update", ({added, removed}: RepositoryUpdate) => {
// Do this async so that profiles are populated
setTimeout(() => {
addEvents(added)
removeEvents(removed)
}, 200)
}),
]
return () => unsubscribers.forEach(call)
})
})
export const deriveChat = makeDeriveItem(chatsById)
export const chatSearch = derived(throttled(1500, chatsById), $chatsByPubkey => {
return createSearch(
sortBy(c => -c.last_activity, Array.from($chatsByPubkey.values())),
{
getValue: (chat: Chat) => chat.id,
fuseOptions: {keys: ["search_text"]},
},
)
})
+16
View File
@@ -0,0 +1,16 @@
import type {TrustedEvent} from "@welshman/util"
import {COMMENT, makeEvent} from "@welshman/util"
import {publishThunk, tagEventForComment} from "@welshman/app"
export type CommentParams = {
event: TrustedEvent
content: string
tags?: string[][]
url?: string
}
export const makeComment = ({url, event, content, tags = []}: CommentParams) =>
makeEvent(COMMENT, {content, tags: [...tags, ...tagEventForComment(event, url)]})
export const publishComment = ({relays, ...params}: CommentParams & {relays: string[]}) =>
publishThunk({event: makeComment({url: relays[0], ...params}), relays})
@@ -12,7 +12,9 @@
import EventActivity from "@app/components/EventActivity.svelte"
import EventActions from "@app/components/EventActions.svelte"
import CalendarEventEdit from "@app/components/CalendarEventEdit.svelte"
import {publishDelete, publishReaction, canEnforceNip70} from "@app/core/commands"
import {publishDelete} from "@app/deletes"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
import {makeCalendarPath, makeSpacePath} from "@app/routes"
import {pushModal} from "@app/modal"
+2 -2
View File
@@ -18,11 +18,11 @@
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"
import {PROTECTED, publishRoomQuote} from "@app/groups"
import {makeEditor} from "@app/editor"
import {DraftKey} from "@app/drafts"
import {pushToast} from "@app/toast"
import {canEnforceNip70, publishRoomQuote} from "@app/core/commands"
import {canEnforceNip70} from "@app/relays"
type Values = {
d: string
+4 -2
View File
@@ -53,10 +53,12 @@
import ChatComposeEdit from "@app/components/ChatComposeEdit.svelte"
import ChatComposeParent from "@app/components/ChatComposeParent.svelte"
import ThunkToast from "@app/components/ThunkToast.svelte"
import {userSettingsValues, deriveChat, makeChatId} from "@app/core/state"
import {userSettingsValues} from "@app/settings"
import {deriveChat, makeChatId} from "@app/chats"
import {pushModal} from "@app/modal"
import {DraftKey} from "@app/drafts"
import {makeDelete, prependParent} from "@app/core/commands"
import {makeDelete} from "@app/deletes"
import {prependParent} from "@app/groups"
import {pushToast} from "@app/toast"
type Props = {
+1 -1
View File
@@ -12,7 +12,7 @@
import ModalHeader from "@lib/components/ModalHeader.svelte"
import ModalTitle from "@lib/components/ModalTitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import {DEFAULT_RELAYS, DEFAULT_MESSAGING_RELAYS} from "@app/core/state"
import {DEFAULT_RELAYS, DEFAULT_MESSAGING_RELAYS} from "@app/env"
import {pushToast} from "@app/toast"
type Props = {
+1 -1
View File
@@ -8,7 +8,7 @@
import Modal from "@lib/components/Modal.svelte"
import ModalBody from "@lib/components/ModalBody.svelte"
import {setChecked} from "@app/notifications"
import {notificationSettings} from "@app/core/state"
import {notificationSettings} from "@app/settings"
const markAsRead = () => {
setChecked("/chat/*")
+3 -2
View File
@@ -16,8 +16,9 @@
import ProfileDetail from "@app/components/ProfileDetail.svelte"
import ChatMessageMenu from "@app/components/ChatMessageMenu.svelte"
import ChatMessageMenuMobile from "@app/components/ChatMessageMenuMobile.svelte"
import {colors} from "@app/core/state"
import {makeDelete, makeReaction} from "@app/core/commands"
import {colors} from "@app/theme"
import {makeDelete} from "@app/deletes"
import {makeReaction} from "@app/reactions"
import {pushModal} from "@app/modal"
interface Props {
@@ -5,7 +5,7 @@
import SmileCircle from "@assets/icons/smile-circle.svg?dataurl"
import Icon from "@lib/components/Icon.svelte"
import EmojiButton from "@lib/components/EmojiButton.svelte"
import {makeReaction} from "@app/core/commands"
import {makeReaction} from "@app/reactions"
interface Props {
event: TrustedEvent
@@ -13,7 +13,7 @@
import Button from "@lib/components/Button.svelte"
import EmojiPicker from "@lib/components/EmojiPicker.svelte"
import EventInfo from "@app/components/EventInfo.svelte"
import {makeReaction} from "@app/core/commands"
import {makeReaction} from "@app/reactions"
import {pushModal} from "@app/modal"
import {clip} from "@app/toast"
+3 -1
View File
@@ -15,7 +15,9 @@
import EventActivity from "@app/components/EventActivity.svelte"
import EventActions from "@app/components/EventActions.svelte"
import ClassifiedEdit from "@app/components/ClassifiedEdit.svelte"
import {publishDelete, publishReaction, canEnforceNip70} from "@app/core/commands"
import {publishDelete} from "@app/deletes"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
import {makeClassifiedPath, makeSpacePath} from "@app/routes"
import {pushModal} from "@app/modal"
+3 -2
View File
@@ -18,10 +18,11 @@
import TopicMultiSelect from "@app/components/TopicMultiSelect.svelte"
import EditorContent from "@app/editor/EditorContent.svelte"
import {pushToast} from "@app/toast"
import {PROTECTED} from "@app/core/state"
import {PROTECTED, publishRoomQuote} from "@app/groups"
import {makeEditor} from "@app/editor"
import {DraftKey} from "@app/drafts"
import {canEnforceNip70, publishRoomQuote, uploadFile} from "@app/core/commands"
import {canEnforceNip70} from "@app/relays"
import {uploadFile} from "@app/uploads"
type Values = {
d: string
+3 -1
View File
@@ -4,7 +4,9 @@
import ThunkStatusOrDeleted from "@app/components/ThunkStatusOrDeleted.svelte"
import EventActivity from "@app/components/EventActivity.svelte"
import EventActions from "@app/components/EventActions.svelte"
import {publishDelete, publishReaction, canEnforceNip70} from "@app/core/commands"
import {publishDelete} from "@app/deletes"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
import {makeSpacePath} from "@app/routes"
interface Props {
+2 -1
View File
@@ -35,7 +35,8 @@
import ContentQuote from "@app/components/ContentQuote.svelte"
import ContentTopic from "@app/components/ContentTopic.svelte"
import ContentMention from "@app/components/ContentMention.svelte"
import {entityLink, userSettingsValues} from "@app/core/state"
import {entityLink} from "@app/env"
import {userSettingsValues} from "@app/settings"
interface Props {
event: any
+3 -8
View File
@@ -8,14 +8,9 @@
import ContentLinkUrl from "@app/components/ContentLinkUrl.svelte"
import ContentLinkBlockImage from "@app/components/ContentLinkBlockImage.svelte"
import {pushModal} from "@app/modal"
import {
dufflepud,
IMAGE_CONTENT_TYPES,
PLATFORM_URL,
VIDEO_CONTENT_TYPES,
THUMBNAIL_URL,
isRoomId,
} from "@app/core/state"
import {dufflepud, PLATFORM_URL, THUMBNAIL_URL} from "@app/env"
import {IMAGE_CONTENT_TYPES, VIDEO_CONTENT_TYPES} from "@app/content"
import {isRoomId} from "@app/groups"
const {value, event} = $props()
+1 -1
View File
@@ -7,7 +7,7 @@
import ContentLinkDetail from "@app/components/ContentLinkDetail.svelte"
import ContentLinkUrl from "@app/components/ContentLinkUrl.svelte"
import {pushModal} from "@app/modal"
import {IMAGE_CONTENT_TYPES} from "@app/core/state"
import {IMAGE_CONTENT_TYPES} from "@app/content"
const {value, event} = $props()
+2 -1
View File
@@ -4,7 +4,8 @@
import LinkRound from "@assets/icons/link-round.svg?dataurl"
import Icon from "@lib/components/Icon.svelte"
import Link from "@lib/components/Link.svelte"
import {PLATFORM_URL, displayRoom, isRoomId, splitRoomId} from "@app/core/state"
import {PLATFORM_URL} from "@app/env"
import {displayRoom, isRoomId, splitRoomId} from "@app/groups"
import {makeRoomPath, makeSpacePath} from "@app/routes"
const {
+2 -1
View File
@@ -31,7 +31,8 @@
import ContentNewline from "@app/components/ContentNewline.svelte"
import ContentTopic from "@app/components/ContentTopic.svelte"
import ContentMention from "@app/components/ContentMention.svelte"
import {entityLink, userSettingsValues} from "@app/core/state"
import {entityLink} from "@app/env"
import {userSettingsValues} from "@app/settings"
interface Props {
event: any
+2 -1
View File
@@ -7,7 +7,8 @@
import Spinner from "@lib/components/Spinner.svelte"
import NoteCard from "@app/components/NoteCard.svelte"
import NoteContentMinimal from "@app/components/NoteContentMinimal.svelte"
import {deriveEvent, entityLink} from "@app/core/state"
import {deriveEvent} from "@app/repository"
import {entityLink} from "@app/env"
import {goToEvent} from "@app/routes"
type Props = {
+3 -2
View File
@@ -12,8 +12,9 @@
import ZapButton from "@app/components/ZapButton.svelte"
import EmojiButton from "@lib/components/EmojiButton.svelte"
import EventMenu from "@app/components/EventMenu.svelte"
import {ENABLE_ZAPS} from "@app/core/state"
import {publishReaction, canEnforceNip70} from "@app/core/commands"
import {ENABLE_ZAPS} from "@app/env"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
type Props = {
url: string
+2 -1
View File
@@ -1,7 +1,8 @@
<script lang="ts">
import type {TrustedEvent} from "@welshman/util"
import Confirm from "@lib/components/Confirm.svelte"
import {publishDelete, canEnforceNip70} from "@app/core/commands"
import {publishDelete} from "@app/deletes"
import {canEnforceNip70} from "@app/relays"
import {clearModals} from "@app/modal"
type Props = {
+2 -1
View File
@@ -17,7 +17,8 @@
import Report from "@app/components/Report.svelte"
import EventShare from "@app/components/EventShare.svelte"
import EventDeleteConfirm from "@app/components/EventDeleteConfirm.svelte"
import {hasNip29, deriveUserIsSpaceAdmin} from "@app/core/state"
import {hasNip29} from "@app/relays"
import {deriveUserIsSpaceAdmin} from "@app/members"
import {pushModal} from "@app/modal"
import {pushToast} from "@app/toast"
import {makeSpaceChatPath} from "@app/routes"
+3 -2
View File
@@ -7,8 +7,9 @@
import Icon from "@lib/components/Icon.svelte"
import Button from "@lib/components/Button.svelte"
import EditorContent from "@app/editor/EditorContent.svelte"
import {publishComment, canEnforceNip70} from "@app/core/commands"
import {PROTECTED} from "@app/core/state"
import {publishComment} from "@app/comments"
import {canEnforceNip70} from "@app/relays"
import {PROTECTED} from "@app/groups"
import {makeEditor} from "@app/editor"
import {DraftKey} from "@app/drafts"
import {pushToast} from "@app/toast"
+1 -1
View File
@@ -14,7 +14,7 @@
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 {roomsByUrl} from "@app/groups"
import {makeRoomPath} from "@app/routes"
const {url, noun, event}: {url: string; noun: string; event: TrustedEvent} = $props()
+3 -1
View File
@@ -7,7 +7,9 @@
import EventActivity from "@app/components/EventActivity.svelte"
import EventActions from "@app/components/EventActions.svelte"
import RoomName from "@app/components/RoomName.svelte"
import {publishDelete, publishReaction, canEnforceNip70} from "@app/core/commands"
import {publishDelete} from "@app/deletes"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
import {makeGoalPath, makeSpacePath} from "@app/routes"
interface Props {
+2 -2
View File
@@ -19,10 +19,10 @@
import ModalBody from "@lib/components/ModalBody.svelte"
import EditorContent from "@app/editor/EditorContent.svelte"
import {pushToast} from "@app/toast"
import {PROTECTED} from "@app/core/state"
import {PROTECTED, publishRoomQuote} from "@app/groups"
import {makeEditor} from "@app/editor"
import {DraftKey} from "@app/drafts"
import {canEnforceNip70, publishRoomQuote} from "@app/core/commands"
import {canEnforceNip70} from "@app/relays"
type Values = {
title: string
+1 -1
View File
@@ -5,7 +5,7 @@
import ModalBody from "@lib/components/ModalBody.svelte"
import ModalHeader from "@lib/components/ModalHeader.svelte"
import ModalTitle from "@lib/components/ModalTitle.svelte"
import {PLATFORM_NAME} from "@app/core/state"
import {PLATFORM_NAME} from "@app/env"
</script>
<Modal
+1 -1
View File
@@ -5,7 +5,7 @@
import ModalBody from "@lib/components/ModalBody.svelte"
import ModalHeader from "@lib/components/ModalHeader.svelte"
import ModalTitle from "@lib/components/ModalTitle.svelte"
import {PLATFORM_NAME} from "@app/core/state"
import {PLATFORM_NAME} from "@app/env"
</script>
<Modal
+1 -1
View File
@@ -11,7 +11,7 @@
import ModalTitle from "@lib/components/ModalTitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import KeyRecoveryRequest from "@app/components/KeyRecoveryRequest.svelte"
import {PLATFORM_NAME} from "@app/core/state"
import {PLATFORM_NAME} from "@app/env"
import {pushModal} from "@app/modal"
const back = () => history.back()
+1 -1
View File
@@ -6,7 +6,7 @@
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"
import {PLATFORM_NAME} from "@app/env"
</script>
<Modal>
@@ -5,7 +5,7 @@
import AddCircle from "@assets/icons/add-circle.svg?dataurl"
import GallerySend from "@assets/icons/gallery-send.svg?dataurl"
import Icon from "@lib/components/Icon.svelte"
import {uploadFile} from "@app/core/commands"
import {uploadFile} from "@app/uploads"
interface Props {
file?: File | undefined
+1 -1
View File
@@ -17,7 +17,7 @@
import ModalFooter from "@lib/components/ModalFooter.svelte"
import ProgressBar from "@app/components/ProgressBar.svelte"
import {pushToast} from "@app/toast"
import {PLATFORM_NAME} from "@app/core/state"
import {PLATFORM_NAME} from "@app/env"
type Props = {
secret: string
+1 -1
View File
@@ -9,7 +9,7 @@
import CardButton from "@lib/components/CardButton.svelte"
import LogIn from "@app/components/LogIn.svelte"
import SignUp from "@app/components/SignUp.svelte"
import {PLATFORM_TERMS, PLATFORM_PRIVACY, PLATFORM_NAME} from "@app/core/state"
import {PLATFORM_TERMS, PLATFORM_PRIVACY, PLATFORM_NAME} from "@app/env"
import {pushModal} from "@app/modal"
const logIn = () => pushModal(LogIn)
+1 -1
View File
@@ -19,7 +19,7 @@
import LogInEmail from "@app/components/LogInEmail.svelte"
import LogInKey from "@app/components/LogInKey.svelte"
import {pushModal, clearModals} from "@app/modal"
import {PLATFORM_NAME, POMADE_SIGNERS} from "@app/core/state"
import {PLATFORM_NAME, POMADE_SIGNERS} from "@app/env"
import {pushToast} from "@app/toast"
import {setChecked} from "@app/notifications"
+2 -1
View File
@@ -23,7 +23,8 @@
import {clearModals} from "@app/modal"
import {setChecked} from "@app/notifications"
import {pushToast} from "@app/toast"
import {SIGNER_RELAYS, NIP46_PERMS} from "@app/core/state"
import {SIGNER_RELAYS} from "@app/env"
import {NIP46_PERMS} from "@app/nip46"
const back = () => {
if (mode === "connect") {
@@ -1,6 +1,6 @@
<script lang="ts">
import {onMount} from "svelte"
import {notificationSettings} from "@app/core/state"
import {notificationSettings} from "@app/settings"
import {onNotification} from "@app/push"
let audioElement: HTMLAudioElement
+1 -1
View File
@@ -9,7 +9,7 @@
import Profile from "@app/components/Profile.svelte"
import ProfileName from "@app/components/ProfileName.svelte"
import {goToEvent} from "@app/routes"
import {isEventMuted} from "@app/core/state"
import {isEventMuted} from "@app/social"
const {
event,
@@ -3,7 +3,7 @@
import {derived} from "svelte/store"
import {POLL_RESPONSE} from "@welshman/util"
import ContentMinimal from "@app/components/ContentMinimal.svelte"
import {deriveEvents} from "@app/core/state"
import {deriveEvents} from "@app/repository"
import {getPollResults} from "@app/polls"
const props: ComponentProps<typeof ContentMinimal> = $props()
+3 -1
View File
@@ -9,7 +9,9 @@
import NoteContent from "@app/components/NoteContent.svelte"
import NoteCard from "@app/components/NoteCard.svelte"
import ReactionSummary from "@app/components/ReactionSummary.svelte"
import {publishDelete, publishReaction, canEnforceNip70} from "@app/core/commands"
import {publishDelete} from "@app/deletes"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
type Props = {
event: TrustedEvent
+2 -2
View File
@@ -20,8 +20,8 @@
import Modal from "@lib/components/Modal.svelte"
import ModalBody from "@lib/components/ModalBody.svelte"
import {pushToast} from "@app/toast"
import {PROTECTED} from "@app/core/state"
import {canEnforceNip70, publishRoomQuote} from "@app/core/commands"
import {PROTECTED, publishRoomQuote} from "@app/groups"
import {canEnforceNip70} from "@app/relays"
import {DraftKey} from "@app/drafts"
import type {PollType} from "@app/polls"
+2 -2
View File
@@ -4,9 +4,9 @@
import {POLL_RESPONSE} from "@welshman/util"
import {pubkey, publishThunk, abortThunk} from "@welshman/app"
import {formatTimestampRelative} from "@welshman/lib"
import {deriveEvents} from "@app/core/state"
import {deriveEvents} from "@app/repository"
import {pushToast} from "@app/toast"
import {makePollResponse} from "@app/core/commands"
import {makePollResponse} from "@app/polls"
import PollOption from "@app/components/PollOption.svelte"
import {
getPollEndsAt,
+2 -1
View File
@@ -11,7 +11,8 @@
import MenuSettings from "@app/components/MenuSettings.svelte"
import PrimaryNavItem from "@lib/components/PrimaryNavItem.svelte"
import PrimaryNavSpaces from "@app/components/PrimaryNavSpaces.svelte"
import {userSpaceUrls, PLATFORM_RELAYS} from "@app/core/state"
import {userSpaceUrls} from "@app/groups"
import {PLATFORM_RELAYS} from "@app/env"
import {pushModal} from "@app/modal"
import {notifications} from "@app/notifications"
import {goToChat, makeSpacePath} from "@app/routes"
+2 -1
View File
@@ -5,7 +5,8 @@
import Divider from "@lib/components/Divider.svelte"
import PrimaryNavItem from "@lib/components/PrimaryNavItem.svelte"
import PrimaryNavItemSpace from "@app/components/PrimaryNavItemSpace.svelte"
import {userSpaceUrls, PLATFORM_RELAYS, PLATFORM_LOGO} from "@app/core/state"
import {userSpaceUrls} from "@app/groups"
import {PLATFORM_RELAYS, PLATFORM_LOGO} from "@app/env"
import {notifications} from "@app/notifications"
let windowHeight = $state(0)
+1 -1
View File
@@ -9,7 +9,7 @@
import {repository, loadRelayList} from "@welshman/app"
import Button from "@lib/components/Button.svelte"
import ProfileSpaces from "@app/components/ProfileSpaces.svelte"
import {deriveGroupList, getSpaceUrlsFromGroupList} from "@app/core/state"
import {deriveGroupList, getSpaceUrlsFromGroupList} from "@app/groups"
import {goToEvent} from "@app/routes"
import {pushModal} from "@app/modal"
+2 -1
View File
@@ -22,7 +22,8 @@
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 {INDEXER_RELAYS, PLATFORM_NAME} from "@app/env"
import {userSpaceUrls} from "@app/groups"
import {pushToast} from "@app/toast"
import {logout} from "@app/session"
+2 -2
View File
@@ -28,8 +28,8 @@
import ProfileInfo from "@app/components/ProfileInfo.svelte"
import EventInfo from "@app/components/EventInfo.svelte"
import ProfileBadges from "@app/components/ProfileBadges.svelte"
import {pubkeyLink, deriveUserIsSpaceAdmin, deriveSpaceBannedPubkeyItems} from "@app/core/state"
import {addSpaceMembers} from "@app/core/commands"
import {pubkeyLink} from "@app/env"
import {deriveUserIsSpaceAdmin, deriveSpaceBannedPubkeyItems, addSpaceMembers} from "@app/members"
import {pushModal} from "@app/modal"
import {pushToast} from "@app/toast"
import {goToChat} from "@app/routes"
+1 -1
View File
@@ -10,7 +10,7 @@
import ProfileEditForm from "@app/components/ProfileEditForm.svelte"
import {clearModals} from "@app/modal"
import {pushToast} from "@app/toast"
import {updateProfile} from "@app/core/commands"
import {updateProfile} from "@app/profiles"
const profile = $profilesByPubkey.get($pubkey!) || makeProfile()
const initialValues = {profile}
+1 -1
View File
@@ -8,7 +8,7 @@
import RelayIcon from "@app/components/RelayIcon.svelte"
import RelayName from "@app/components/RelayName.svelte"
import {makeSpacePath} from "@app/routes"
import {deriveGroupList, getSpaceUrlsFromGroupList} from "@app/core/state"
import {deriveGroupList, getSpaceUrlsFromGroupList} from "@app/groups"
type Props = {
pubkey: string
+2 -1
View File
@@ -23,7 +23,8 @@
import Icon from "@lib/components/Icon.svelte"
import Reaction from "@app/components/Reaction.svelte"
import ReportDetails from "@app/components/ReportDetails.svelte"
import {REACTION_KINDS, deriveUserIsSpaceAdmin} from "@app/core/state"
import {REACTION_KINDS} from "@app/content"
import {deriveUserIsSpaceAdmin} from "@app/members"
import {pushModal} from "@app/modal"
interface Props {
@@ -6,7 +6,7 @@
import Icon from "@lib/components/Icon.svelte"
import Button from "@lib/components/Button.svelte"
import RelaySettingsHealthCheck from "@app/components/RelaySettingsHealthCheck.svelte"
import {PLATFORM_NAME} from "@app/core/state"
import {PLATFORM_NAME} from "@app/env"
import {pendingHealthChecks, applyHealthCheck} from "@app/healthChecks"
const applyAll = () => {
+1 -1
View File
@@ -5,7 +5,7 @@
import RelayIcon from "@app/components/RelayIcon.svelte"
import RelayDescription from "@app/components/RelayDescription.svelte"
import ProfileCircles from "@app/components/ProfileCircles.svelte"
import {deriveGroupListPubkeys, deriveUserRooms} from "@app/core/state"
import {deriveGroupListPubkeys, deriveUserRooms} from "@app/groups"
type Props = {
url: string
+1 -1
View File
@@ -13,7 +13,7 @@
import Modal from "@lib/components/Modal.svelte"
import ModalBody from "@lib/components/ModalBody.svelte"
import {pushToast} from "@app/toast"
import {publishReport} from "@app/core/commands"
import {publishReport} from "@app/reports"
const {url, event} = $props()
+3 -2
View File
@@ -12,8 +12,9 @@
import Popover from "@lib/components/Popover.svelte"
import Button from "@lib/components/Button.svelte"
import Confirm from "@lib/components/Confirm.svelte"
import {deriveUserIsSpaceAdmin} from "@app/core/state"
import {publishDelete, canEnforceNip70} from "@app/core/commands"
import {deriveUserIsSpaceAdmin} from "@app/members"
import {publishDelete} from "@app/deletes"
import {canEnforceNip70} from "@app/relays"
import {pushToast} from "@app/toast"
import {pushModal} from "@app/modal"
+1 -1
View File
@@ -4,7 +4,7 @@
import Microphone from "@assets/icons/microphone.svg?dataurl"
import Icon from "@lib/components/Icon.svelte"
import Button from "@lib/components/Button.svelte"
import {deriveRoom} from "@app/core/state"
import {deriveRoom} from "@app/groups"
interface Props {
h: any
+6 -12
View File
@@ -31,20 +31,14 @@
import RoomEdit from "@app/components/RoomEdit.svelte"
import RoomName from "@app/components/RoomName.svelte"
import RoomImage from "@app/components/RoomImage.svelte"
import {deriveRoom, deriveUserRooms, addRoom, removeRoom} from "@app/groups"
import {
deriveRoom,
deriveRoomMembers,
deriveUserIsRoomAdmin,
deriveUserRoomMembershipStatus,
deriveUserRooms,
deriveShouldNotify,
MembershipStatus,
} from "@app/core/state"
import {
addRoomMembership,
removeRoomMembership,
toggleRoomNotifications,
} from "@app/core/commands"
} from "@app/members"
import {deriveShouldNotify, toggleRoomNotifications} from "@app/settings"
import {makeSpacePath} from "@app/routes"
import {pushModal} from "@app/modal"
import {pushToast} from "@app/toast"
@@ -99,9 +93,9 @@
const toggleFavorite = () => {
if (isFavorite) {
removeRoomMembership(url, h)
removeRoom(url, h)
} else {
addRoomMembership(url, h)
addRoom(url, h)
}
}
@@ -122,7 +116,7 @@
repository.removeEvent(thunk.event.id)
pushToast({theme: "error", message})
} else {
await removeRoomMembership(url, h)
await removeRoom(url, h)
goto(makeSpacePath(url))
}
},
+1 -1
View File
@@ -11,7 +11,7 @@
import ModalSubtitle from "@lib/components/ModalSubtitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import RoomForm from "@app/components/RoomForm.svelte"
import {deriveRoom} from "@app/core/state"
import {deriveRoom} from "@app/groups"
import {makeSpacePath} from "@app/routes"
type Props = {
+3 -2
View File
@@ -15,8 +15,9 @@
import Modal from "@lib/components/Modal.svelte"
import ModalBody from "@lib/components/ModalBody.svelte"
import {pushToast} from "@app/toast"
import {uploadFile} from "@app/core/commands"
import {deriveHasLivekit, getRoomType, RoomType} from "@app/core/state"
import {uploadFile} from "@app/uploads"
import {deriveHasLivekit} from "@app/relays"
import {getRoomType, RoomType} from "@app/groups"
type Props = {
url: string
+1 -1
View File
@@ -3,7 +3,7 @@
import Volume from "@assets/icons/volume.svg?dataurl"
import Icon from "@lib/components/Icon.svelte"
import ImageIcon from "@lib/components/ImageIcon.svelte"
import {deriveRoom} from "@app/core/state"
import {deriveRoom} from "@app/groups"
interface Props {
h: string
+6 -2
View File
@@ -35,8 +35,12 @@
import RoomItemMenuButton from "@app/components/RoomItemMenuButton.svelte"
import RoomItemMenuMobile from "@app/components/RoomItemMenuMobile.svelte"
import RoomItemContent from "@app/components/RoomItemContent.svelte"
import {colors, ENABLE_ZAPS, deriveEventsForUrl, deriveEvent} from "@app/core/state"
import {publishDelete, publishReaction, canEnforceNip70} from "@app/core/commands"
import {colors} from "@app/theme"
import {ENABLE_ZAPS} from "@app/env"
import {deriveEventsForUrl, deriveEvent} from "@app/repository"
import {publishDelete} from "@app/deletes"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
import {getRoomItemPath} from "@app/routes"
import {pushModal} from "@app/modal"
@@ -3,7 +3,8 @@
import EmojiButton from "@lib/components/EmojiButton.svelte"
import SmileCircle from "@assets/icons/smile-circle.svg?dataurl"
import Icon from "@lib/components/Icon.svelte"
import {publishReaction, canEnforceNip70} from "@app/core/commands"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
const {url, event} = $props()
+1 -1
View File
@@ -13,7 +13,7 @@
import EventDeleteConfirm from "@app/components/EventDeleteConfirm.svelte"
import {pushModal} from "@app/modal"
import {pushToast} from "@app/toast"
import {deriveUserIsSpaceAdmin} from "@app/core/state"
import {deriveUserIsSpaceAdmin} from "@app/members"
type Props = {
url: string
+3 -2
View File
@@ -17,8 +17,9 @@
import ZapButton from "@app/components/ZapButton.svelte"
import EventInfo from "@app/components/EventInfo.svelte"
import EventDeleteConfirm from "@app/components/EventDeleteConfirm.svelte"
import {ENABLE_ZAPS} from "@app/core/state"
import {publishReaction, canEnforceNip70} from "@app/core/commands"
import {ENABLE_ZAPS} from "@app/env"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
import {getRoomItemPath} from "@app/routes"
import {pushModal} from "@app/modal"
+2 -2
View File
@@ -8,8 +8,8 @@
import RoomName from "@app/components/RoomName.svelte"
import {pushModal} from "@app/modal"
import {pushToast} from "@app/toast"
import {deriveRoom} from "@app/core/state"
import {addRoomMembers} from "@app/core/commands"
import {deriveRoom} from "@app/groups"
import {addRoomMembers} from "@app/members"
type Props = {
url: string
+2 -1
View File
@@ -18,7 +18,8 @@
import Profile from "@app/components/Profile.svelte"
import RoomName from "@app/components/RoomName.svelte"
import RoomMembersAdd from "@app/components/RoomMembersAdd.svelte"
import {deriveRoom, deriveRoomMembers, deriveUserIsRoomAdmin} from "@app/core/state"
import {deriveRoom} from "@app/groups"
import {deriveRoomMembers, deriveUserIsRoomAdmin} from "@app/members"
import {pushModal} from "@app/modal"
import {pushToast} from "@app/toast"
+2 -2
View File
@@ -20,8 +20,8 @@
import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte"
import {pushToast} from "@app/toast"
import {pushModal} from "@app/modal"
import {deriveRoom, deriveSpaceMembers} from "@app/core/state"
import {addRoomMembers} from "@app/core/commands"
import {deriveRoom} from "@app/groups"
import {deriveSpaceMembers, addRoomMembers} from "@app/members"
interface Props {
url: string
+1 -1
View File
@@ -1,5 +1,5 @@
<script lang="ts">
import {deriveRoom} from "@app/core/state"
import {deriveRoom} from "@app/groups"
type Props = {
url: string
+2 -2
View File
@@ -15,14 +15,14 @@
import SignUpEmail from "@app/components/SignUpEmail.svelte"
import SignUpProfile from "@app/components/SignUpProfile.svelte"
import SignUpComplete from "@app/components/SignUpComplete.svelte"
import {initProfile} from "@app/core/commands"
import {initProfile} from "@app/profiles"
import {
POMADE_SIGNERS,
PLATFORM_NAME,
INDEXER_RELAYS,
DEFAULT_RELAYS,
DEFAULT_MESSAGING_RELAYS,
} from "@app/core/state"
} from "@app/env"
import {setChecked} from "@app/notifications"
import {loginWithPomade} from "@app/pomade"
import {pushModal, clearModals} from "@app/modal"
@@ -1,6 +1,6 @@
<script lang="ts">
import StatusIndicator from "@lib/components/StatusIndicator.svelte"
import {deriveSocketStatus} from "@app/core/state"
import {deriveSocketStatus} from "@app/relays"
type Props = {
url: string
+2 -2
View File
@@ -15,8 +15,8 @@
import ModalSubtitle from "@lib/components/ModalSubtitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import {pushToast} from "@app/toast"
import {attemptRelayAccess} from "@app/core/commands"
import {parseInviteLink} from "@app/core/state"
import {attemptRelayAccess} from "@app/relays"
import {parseInviteLink} from "@app/invites"
type Props = {
url: string
+1 -1
View File
@@ -12,7 +12,7 @@
import RoomJoinItem from "@app/components/RoomJoinItem.svelte"
import RelayName from "@app/components/RelayName.svelte"
import {REPORT} from "@welshman/util"
import {deriveSpaceActionItems} from "@app/core/state"
import {deriveSpaceActionItems} from "@app/actionItems"
interface Props {
url: string
+4 -2
View File
@@ -16,7 +16,9 @@
import ModalFooter from "@lib/components/ModalFooter.svelte"
import SpaceAccessRequest from "@app/components/SpaceAccessRequest.svelte"
import {pushModal, clearModals} from "@app/modal"
import {removeSpaceMembership, publishLeaveRequest, removeTrustedRelay} from "@app/core/commands"
import {removeSpace} from "@app/groups"
import {publishLeaveRequest} from "@app/relays"
import {removeTrustedRelay} from "@app/settings"
const {url, error} = $props()
@@ -28,7 +30,7 @@
loading = true
try {
await removeSpaceMembership(url)
await removeSpace(url)
await publishLeaveRequest({url})
await removeTrustedRelay(url)
} finally {
+1 -1
View File
@@ -8,7 +8,7 @@
import Button from "@lib/components/Button.svelte"
import PageBar from "@lib/components/PageBar.svelte"
import RelayIcon from "@app/components/RelayIcon.svelte"
import {decodeRelay} from "@app/core/state"
import {decodeRelay} from "@app/relays"
import {makeSpacePath} from "@app/routes"
interface Props {
+1 -1
View File
@@ -18,7 +18,7 @@
import SpaceRelayStatus from "@app/components/SpaceRelayStatus.svelte"
import RelayDescription from "@app/components/RelayDescription.svelte"
import ProfileLatest from "@app/components/ProfileLatest.svelte"
import {deriveUserIsSpaceAdmin} from "@app/core/state"
import {deriveUserIsSpaceAdmin} from "@app/members"
import {pushModal} from "@app/modal"
type Props = {
+1 -1
View File
@@ -21,7 +21,7 @@
import IconPickerButton from "@lib/components/IconPickerButton.svelte"
import {pushToast} from "@app/toast"
import {clearModals} from "@app/modal"
import {uploadFile} from "@app/core/commands"
import {uploadFile} from "@app/uploads"
type Props = {
url: string
+4 -2
View File
@@ -11,7 +11,9 @@
import ModalHeader from "@lib/components/ModalHeader.svelte"
import ModalTitle from "@lib/components/ModalTitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import {removeSpaceMembership, publishLeaveRequest, removeTrustedRelay} from "@app/core/commands"
import {removeSpace} from "@app/groups"
import {publishLeaveRequest} from "@app/relays"
import {removeTrustedRelay} from "@app/settings"
const {url} = $props()
@@ -21,7 +23,7 @@
loading = true
try {
await removeSpaceMembership(url)
await removeSpace(url)
await publishLeaveRequest({url})
await removeTrustedRelay(url)
} finally {
+2 -2
View File
@@ -19,8 +19,8 @@
import ModalFooter from "@lib/components/ModalFooter.svelte"
import QRCode from "@app/components/QRCode.svelte"
import {clip} from "@app/toast"
import {PLATFORM_URL} from "@app/core/state"
import {deriveRelayAuthError} from "@app/core/commands"
import {PLATFORM_URL} from "@app/env"
import {deriveRelayAuthError} from "@app/relays"
const {url} = $props()
+7 -8
View File
@@ -23,14 +23,13 @@
import SpaceJoinSettings from "@app/components/SpaceJoinSettings.svelte"
import {pushToast} from "@app/toast"
import {makeSpacePath} from "@app/routes"
import {relaysMostlyRestricted, notificationSettings, parseInviteLink} from "@app/core/state"
import {relaysMostlyRestricted} from "@app/policies"
import {notificationSettings, setSpaceNotifications} from "@app/settings"
import {parseInviteLink} from "@app/invites"
import {Push} from "@app/push"
import {
attemptRelayAccess,
addSpaceMembership,
broadcastUserData,
setSpaceNotifications,
} from "@app/core/commands"
import {attemptRelayAccess} from "@app/relays"
import {addSpace} from "@app/groups"
import {broadcastUserData} from "@app/profiles"
type Props = {
invite: string
@@ -68,7 +67,7 @@
await setSpaceNotifications(url, false)
}
await addSpaceMembership(url)
await addSpace(url)
await goto(makeSpacePath(url), {replaceState: true})
broadcastUserData([url])
+7 -8
View File
@@ -14,13 +14,12 @@
import RelaySummary from "@app/components/RelaySummary.svelte"
import SpaceAccessRequest from "@app/components/SpaceAccessRequest.svelte"
import SpaceJoinSettings from "@app/components/SpaceJoinSettings.svelte"
import {
attemptRelayAccess,
addSpaceMembership,
broadcastUserData,
setSpaceNotifications,
} from "@app/core/commands"
import {relaysMostlyRestricted, notificationSettings} from "@app/core/state"
import {attemptRelayAccess} from "@app/relays"
import {addSpace} from "@app/groups"
import {broadcastUserData} from "@app/profiles"
import {setSpaceNotifications} from "@app/settings"
import {relaysMostlyRestricted} from "@app/policies"
import {notificationSettings} from "@app/settings"
import {pushModal} from "@app/modal"
import {pushToast} from "@app/toast"
import {makeSpacePath} from "@app/routes"
@@ -56,7 +55,7 @@
await setSpaceNotifications(url, false)
}
await addSpaceMembership(url)
await addSpace(url)
await goto(makeSpacePath(url), {replaceState: true})
broadcastUserData([url])
+2 -2
View File
@@ -25,8 +25,8 @@
deriveSpaceMembers,
deriveSpaceBannedPubkeyItems,
deriveUserIsSpaceAdmin,
deriveSupportedMethods,
} from "@app/core/state"
} from "@app/members"
import {deriveSupportedMethods} from "@app/relays"
import {pushModal} from "@app/modal"
import {pushToast} from "@app/toast"
+1 -1
View File
@@ -12,7 +12,7 @@
import ModalSubtitle from "@lib/components/ModalSubtitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import ProfileMultiSelect from "@app/components/ProfileMultiSelect.svelte"
import {addSpaceMembers} from "@app/core/commands"
import {addSpaceMembers} from "@app/members"
import {pushToast} from "@app/toast"
interface Props {
+2 -2
View File
@@ -16,8 +16,8 @@
import ModalSubtitle from "@lib/components/ModalSubtitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import Profile from "@app/components/Profile.svelte"
import {deriveSpaceBannedPubkeyItems, deriveSupportedMethods} from "@app/core/state"
import {addSpaceMembers} from "@app/core/commands"
import {deriveSpaceBannedPubkeyItems, addSpaceMembers} from "@app/members"
import {deriveSupportedMethods} from "@app/relays"
import {pushToast} from "@app/toast"
interface Props {
+8 -12
View File
@@ -40,24 +40,20 @@
import SpaceMenuRoomItem from "@app/components/SpaceMenuRoomItem.svelte"
import VoiceWidget from "@app/components/VoiceWidget.svelte"
import SocketStatusIndicator from "@app/components/SocketStatusIndicator.svelte"
import {ENABLE_ZAPS} from "@app/env"
import {CONTENT_KINDS} from "@app/content"
import {deriveSpaceMembers, deriveUserCanCreateRoom, deriveUserIsSpaceAdmin} from "@app/members"
import {
ENABLE_ZAPS,
CONTENT_KINDS,
deriveSpaceMembers,
deriveUserRooms,
deriveOtherRooms,
deriveOtherVoiceRooms,
userSpaceUrls,
hasNip29,
deriveUserCanCreateRoom,
deriveUserIsSpaceAdmin,
deriveEventsForUrl,
deriveSpaceActionItems,
notificationSettings,
deriveShouldNotify,
displayRoom,
} from "@app/core/state"
import {setSpaceNotifications} from "@app/core/commands"
} from "@app/groups"
import {hasNip29} from "@app/relays"
import {deriveEventsForUrl} from "@app/repository"
import {deriveSpaceActionItems} from "@app/actionItems"
import {notificationSettings, deriveShouldNotify, setSpaceNotifications} from "@app/settings"
import {pushModal} from "@app/modal"
import {makeSpacePath, goToChat} from "@app/routes"
import {notifications} from "@app/notifications"
+2 -1
View File
@@ -5,7 +5,8 @@
import SecondaryNavItem from "@lib/components/SecondaryNavItem.svelte"
import RoomNameWithImage from "@app/components/RoomNameWithImage.svelte"
import VoiceRoomItem from "@app/components/VoiceRoomItem.svelte"
import {deriveRoom, deriveShouldNotify, getRoomType, RoomType} from "@app/core/state"
import {deriveRoom, getRoomType, RoomType} from "@app/groups"
import {deriveShouldNotify} from "@app/settings"
import {notifications} from "@app/notifications"
import {makeRoomPath} from "@app/routes"
+1 -1
View File
@@ -11,7 +11,7 @@
import ModalFooter from "@lib/components/ModalFooter.svelte"
import ReportItem from "@app/components/ReportItem.svelte"
import RelayName from "@app/components/RelayName.svelte"
import {deriveEventsForUrl} from "@app/core/state"
import {deriveEventsForUrl} from "@app/repository"
interface Props {
url: string
+1 -1
View File
@@ -11,7 +11,7 @@
import {fly} from "@lib/transition"
import Button from "@lib/components/Button.svelte"
import Icon from "@lib/components/Icon.svelte"
import {CONTENT_KINDS} from "@app/core/state"
import {CONTENT_KINDS} from "@app/content"
import {goToEvent} from "@app/routes"
type Props = {
+4 -3
View File
@@ -15,8 +15,9 @@
import ModalSubtitle from "@lib/components/ModalSubtitle.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"
import {relaysPendingTrust} from "@app/policies"
import {removeSpace} from "@app/groups"
import {addTrustedRelay, removeTrustedRelay} from "@app/settings"
import {pushModal} from "@app/modal"
type Props = {
@@ -31,7 +32,7 @@
loading = true
try {
await removeSpaceMembership(url)
await removeSpace(url)
await removeTrustedRelay(url)
goto("/home")
} finally {
+3 -1
View File
@@ -7,7 +7,9 @@
import ThunkStatusOrDeleted from "@app/components/ThunkStatusOrDeleted.svelte"
import EventActivity from "@app/components/EventActivity.svelte"
import EventActions from "@app/components/EventActions.svelte"
import {publishDelete, publishReaction, canEnforceNip70} from "@app/core/commands"
import {publishDelete} from "@app/deletes"
import {publishReaction} from "@app/reactions"
import {canEnforceNip70} from "@app/relays"
import {makeThreadPath, makeSpacePath} from "@app/routes"
interface Props {
+2 -2
View File
@@ -17,10 +17,10 @@
import ModalBody from "@lib/components/ModalBody.svelte"
import EditorContent from "@app/editor/EditorContent.svelte"
import {pushToast} from "@app/toast"
import {PROTECTED} from "@app/core/state"
import {PROTECTED, publishRoomQuote} from "@app/groups"
import {makeEditor} from "@app/editor"
import {DraftKey} from "@app/drafts"
import {canEnforceNip70, publishRoomQuote} from "@app/core/commands"
import {canEnforceNip70} from "@app/relays"
type Values = {
content?: string | object
+1 -1
View File
@@ -11,7 +11,7 @@
import {pushModal} from "@app/modal"
import VoiceRoomJoinDialog from "@app/components/VoiceRoomJoinDialog.svelte"
import VoiceParticipantMediaBadges from "@app/components/VoiceParticipantMediaBadges.svelte"
import {makeRoomId} from "@app/core/state"
import {makeRoomId} from "@app/groups"
import {
VoiceState,
currentVoiceRoom,
@@ -14,7 +14,7 @@
import ModalTitle from "@lib/components/ModalTitle.svelte"
import {AbortError, TimeoutError} from "$lib/util"
import ProfileCircles from "@app/components/ProfileCircles.svelte"
import {displayRoom} from "@app/core/state"
import {displayRoom} from "@app/groups"
import {deriveVoiceParticipants, joinVoiceRoom, loadVoiceParticipants} from "@app/call/voice"
import {popModal} from "@app/modal"
import {pushToast} from "@app/toast"
+3 -8
View File
@@ -19,14 +19,9 @@
import Button from "@lib/components/Button.svelte"
import VoiceCallAudioSettingsDialog from "@app/components/VoiceCallAudioSettingsDialog.svelte"
import VoiceRoomJoinDialog from "@app/components/VoiceRoomJoinDialog.svelte"
import {
decodeRelay,
deriveRoom,
displayRoom,
getRoomType,
RoomType,
type Room,
} from "@app/core/state"
import {decodeRelay} from "@app/relays"
import {deriveRoom, displayRoom, getRoomType, RoomType} from "@app/groups"
import type {Room} from "@app/groups"
import {pushModal} from "@app/modal"
import {notifications} from "@app/notifications"
import {makeRoomPath} from "@app/routes"
@@ -10,7 +10,7 @@
import ModalHeader from "@lib/components/ModalHeader.svelte"
import ModalTitle from "@lib/components/ModalTitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import {updateProfile} from "@app/core/commands"
import {updateProfile} from "@app/profiles"
import {clearModals} from "@app/modal"
import {pushToast} from "@app/toast"
+1 -1
View File
@@ -21,7 +21,7 @@
import ModalTitle from "@lib/components/ModalTitle.svelte"
import ModalSubtitle from "@lib/components/ModalSubtitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import {getWebLn} from "@app/core/commands"
import {getWebLn} from "@app/lightning"
import {pushToast} from "@app/toast"
import {pushModal} from "@app/modal"
import WalletAsReceivingAddress from "@app/components/WalletAsReceivingAddress.svelte"
+1 -1
View File
@@ -15,7 +15,7 @@
import ModalSubtitle from "@lib/components/ModalSubtitle.svelte"
import ModalFooter from "@lib/components/ModalFooter.svelte"
import {errorMessage} from "@lib/util"
import {payInvoice} from "@app/core/commands"
import {payInvoice} from "@app/lightning"
import {pushToast} from "@app/toast"
import {clearModals} from "@app/modal"
+1 -1
View File
@@ -14,7 +14,7 @@
import ModalFooter from "@lib/components/ModalFooter.svelte"
import {errorMessage} from "@lib/util"
import QRCode from "@app/components/QRCode.svelte"
import {createInvoice} from "@app/core/commands"
import {createInvoice} from "@app/lightning"
import {pushToast} from "@app/toast"
const back = () => history.back()
@@ -12,7 +12,7 @@
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"
import {updateProfile} from "@app/profiles"
import {pushToast} from "@app/toast"
const back = () => history.back()

Some files were not shown because too many files have changed in this diff Show More