diff --git a/src/classes/batch-kind-loader.ts b/src/classes/batch-kind-loader.ts index 799562cfd..52413671f 100644 --- a/src/classes/batch-kind-loader.ts +++ b/src/classes/batch-kind-loader.ts @@ -5,7 +5,7 @@ import debug, { Debugger } from "debug"; import NostrSubscription from "./nostr-subscription"; import EventStore from "./event-store"; -import { getEventCoordinate } from "../helpers/nostr/events"; +import { getEventCoordinate } from "../helpers/nostr/event"; export function createCoordinate(kind: number, pubkey: string, d?: string) { return `${kind}:${pubkey}${d ? ":" + d : ""}`; diff --git a/src/classes/event-store.ts b/src/classes/event-store.ts index ea0a17b92..d7474d8db 100644 --- a/src/classes/event-store.ts +++ b/src/classes/event-store.ts @@ -1,7 +1,7 @@ import { NostrEvent } from "nostr-tools"; import { nanoid } from "nanoid"; -import { getEventUID, sortByDate } from "../helpers/nostr/events"; +import { getEventUID, sortByDate } from "../helpers/nostr/event"; import ControlledObservable from "./controlled-observable"; import SuperMap from "./super-map"; import deleteEventService from "../services/delete-events"; diff --git a/src/classes/relay-set.ts b/src/classes/relay-set.ts index f0720dd2d..5ae3f3fc2 100644 --- a/src/classes/relay-set.ts +++ b/src/classes/relay-set.ts @@ -1,8 +1,8 @@ +import { NostrEvent } from "nostr-tools"; import { relaysFromContactsEvent } from "../helpers/nostr/contacts"; import { getRelaysFromMailbox } from "../helpers/nostr/mailbox"; import { safeRelayUrl } from "../helpers/relay"; import relayPoolService from "../services/relay-pool"; -import { NostrEvent } from "../types/nostr-event"; import { RelayMode } from "./relay"; export default class RelaySet extends Set { diff --git a/src/classes/timeline-loader.ts b/src/classes/timeline-loader.ts index 464e70f58..792831dfd 100644 --- a/src/classes/timeline-loader.ts +++ b/src/classes/timeline-loader.ts @@ -10,7 +10,7 @@ import NostrMultiSubscription from "./nostr-multi-subscription"; import Subject, { PersistentSubject } from "./subject"; import { logger } from "../helpers/debug"; import EventStore from "./event-store"; -import { isReplaceable } from "../helpers/nostr/events"; +import { isReplaceable } from "../helpers/nostr/event"; import replaceableEventsService from "../services/replaceable-events"; import deleteEventService from "../services/delete-events"; import { diff --git a/src/components/inline-cashu-card.tsx b/src/components/cashu/inline-cashu-card.tsx similarity index 89% rename from src/components/inline-cashu-card.tsx rename to src/components/cashu/inline-cashu-card.tsx index 6e2bfb22b..8c540e1ea 100644 --- a/src/components/inline-cashu-card.tsx +++ b/src/components/cashu/inline-cashu-card.tsx @@ -3,11 +3,11 @@ import { useEffect, useState } from "react"; import { Box, Button, ButtonGroup, Card, CardProps, Heading, IconButton, Link } from "@chakra-ui/react"; import { getDecodedToken, Token, CashuMint } from "@cashu/cashu-ts"; -import { CopyIconButton } from "./copy-icon-button"; -import { useUserMetadata } from "../hooks/use-user-metadata"; -import useCurrentAccount from "../hooks/use-current-account"; -import { ECashIcon, WalletIcon } from "./icons"; -import { getMint } from "../services/cashu-mints"; +import { CopyIconButton } from "../copy-icon-button"; +import { useUserMetadata } from "../../hooks/use-user-metadata"; +import useCurrentAccount from "../../hooks/use-current-account"; +import { ECashIcon, WalletIcon } from "../icons"; +import { getMint } from "../../services/cashu-mints"; function RedeemButton({ token }: { token: string }) { const account = useCurrentAccount()!; diff --git a/src/components/event-verification-icon.tsx b/src/components/common-event/event-verification-icon.tsx similarity index 71% rename from src/components/event-verification-icon.tsx rename to src/components/common-event/event-verification-icon.tsx index 9cb14c387..8de85a6df 100644 --- a/src/components/event-verification-icon.tsx +++ b/src/components/common-event/event-verification-icon.tsx @@ -1,9 +1,9 @@ import { memo } from "react"; import { verifyEvent } from "nostr-tools"; -import { NostrEvent } from "../types/nostr-event"; -import { CheckIcon, VerificationFailed } from "./icons"; -import useAppSettings from "../hooks/use-app-settings"; +import { NostrEvent } from "../../types/nostr-event"; +import { CheckIcon, VerificationFailed } from "../icons"; +import useAppSettings from "../../hooks/use-app-settings"; function EventVerificationIcon({ event }: { event: NostrEvent }) { const { showSignatureVerification } = useAppSettings(); diff --git a/src/components/compact-user-stack.tsx b/src/components/compact-user-stack.tsx index 0974dd05c..c43e816c6 100644 --- a/src/components/compact-user-stack.tsx +++ b/src/components/compact-user-stack.tsx @@ -15,8 +15,8 @@ import { import { Link as RouterLink } from "react-router-dom"; import { nip19 } from "nostr-tools"; -import UserAvatar from "./user-avatar"; -import { getUserDisplayName } from "../helpers/user-metadata"; +import UserAvatar from "./user/user-avatar"; +import { getUserDisplayName } from "../helpers/nostr/user-metadata"; import { useUserMetadata } from "../hooks/use-user-metadata"; function UserTag({ pubkey, ...props }: { pubkey: string } & Omit) { diff --git a/src/components/connected-relays.tsx b/src/components/connected-relays.tsx deleted file mode 100644 index 1ce04ae4d..000000000 --- a/src/components/connected-relays.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import { useMemo, useState } from "react"; -import { - Text, - useDisclosure, - Modal, - ModalOverlay, - ModalContent, - ModalHeader, - ModalBody, - ModalCloseButton, - Button, - TableContainer, - Table, - Thead, - Tbody, - Td, - Tr, - Th, - Flex, - ButtonProps, -} from "@chakra-ui/react"; - -import relayPoolService from "../services/relay-pool"; -import { useInterval } from "react-use"; -import { RelayStatus } from "./relay-status"; -import { RelayIcon } from "./icons"; -import Relay from "../classes/relay"; -import { RelayFavicon } from "./relay-favicon"; -import relayScoreboardService from "../services/relay-scoreboard"; -import { RelayScoreBreakdown } from "./relay-score-breakdown"; - -export const ConnectedRelays = ({ ...props }: Omit) => { - const { isOpen, onOpen, onClose } = useDisclosure(); - const [relays, setRelays] = useState(relayPoolService.getRelays()); - const sortedRelays = useMemo(() => relayScoreboardService.getRankedRelays(relays.map((r) => r.url)), [relays]); - - useInterval(() => { - setRelays(relayPoolService.getRelays()); - }, 1000); - - const connected = relays.filter((relay) => relay.okay); - - return ( - <> - - - - - Connected Relays - - - - - - - - - - - - - - {sortedRelays.map((url) => ( - - - - - - - ))} - -
RelayClaimsScoreStatus
- - - {url} - - {relayPoolService.getRelayClaims(url).size} - - - -
-
-
-
-
- - ); -}; diff --git a/src/components/debug-modal/event-debug-modal.tsx b/src/components/debug-modal/event-debug-modal.tsx index 5c13bcadb..d76d00ae8 100644 --- a/src/components/debug-modal/event-debug-modal.tsx +++ b/src/components/debug-modal/event-debug-modal.tsx @@ -23,7 +23,7 @@ import { import { ModalProps } from "@chakra-ui/react"; import { nip19 } from "nostr-tools"; -import { getContentTagRefs, getEventUID, getThreadReferences } from "../../helpers/nostr/events"; +import { getContentTagRefs, getEventUID, getThreadReferences } from "../../helpers/nostr/event"; import { NostrEvent } from "../../types/nostr-event"; import RawValue from "./raw-value"; import { getSharableEventAddress } from "../../helpers/nip19"; diff --git a/src/components/debug-modal/event-tags.tsx b/src/components/debug-modal/event-tags.tsx index ccbc1062d..80db054f2 100644 --- a/src/components/debug-modal/event-tags.tsx +++ b/src/components/debug-modal/event-tags.tsx @@ -4,11 +4,11 @@ import { NostrEvent, nip19 } from "nostr-tools"; import { Link as RouterLink } from "react-router-dom"; import { Tag, isATag, isETag, isPTag } from "../../types/nostr-event"; -import { aTagToAddressPointer, eTagToEventPointer } from "../../helpers/nostr/events"; +import { aTagToAddressPointer, eTagToEventPointer } from "../../helpers/nostr/event"; import { EmbedEventPointer } from "../embed-event"; -import UserAvatarLink from "../user-avatar-link"; -import UserLink from "../user-link"; -import { UserDnsIdentityIcon } from "../user-dns-identity-icon"; +import UserAvatarLink from "../user/user-avatar-link"; +import UserLink from "../user/user-link"; +import { UserDnsIdentityIcon } from "../user/user-dns-identity-icon"; function EventTag({ tag }: { tag: Tag }) { const expand = useDisclosure(); diff --git a/src/components/menu-icon-button.tsx b/src/components/dots-menu-button.tsx similarity index 82% rename from src/components/menu-icon-button.tsx rename to src/components/dots-menu-button.tsx index 0d12fdac9..27201767c 100644 --- a/src/components/menu-icon-button.tsx +++ b/src/components/dots-menu-button.tsx @@ -5,7 +5,7 @@ export type MenuIconButtonProps = IconButtonProps & { children: MenuListProps["children"]; }; -export function CustomMenuIconButton({ children, icon, ...props }: MenuIconButtonProps) { +export function DotsMenuButton({ children, icon, ...props }: MenuIconButtonProps) { return ( } {...props} /> diff --git a/src/components/embed-event/event-types/embedded-article.tsx b/src/components/embed-event/event-types/embedded-article.tsx index 912d620b7..3f5d42fed 100644 --- a/src/components/embed-event/event-types/embedded-article.tsx +++ b/src/components/embed-event/event-types/embedded-article.tsx @@ -9,8 +9,8 @@ import { import { NostrEvent } from "../../../types/nostr-event"; import { buildAppSelectUrl } from "../../../helpers/nostr/apps"; import { getSharableEventAddress } from "../../../helpers/nip19"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import Timestamp from "../../timestamp"; export default function EmbeddedArticle({ article, ...props }: Omit & { article: NostrEvent }) { diff --git a/src/components/embed-event/event-types/embedded-badge.tsx b/src/components/embed-event/event-types/embedded-badge.tsx index bce7fcf6c..1a557855b 100644 --- a/src/components/embed-event/event-types/embedded-badge.tsx +++ b/src/components/embed-event/event-types/embedded-badge.tsx @@ -12,8 +12,8 @@ import { Text, } from "@chakra-ui/react"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; import { getBadgeDescription, getBadgeImage, getBadgeName } from "../../../helpers/nostr/badges"; diff --git a/src/components/embed-event/event-types/embedded-channel.tsx b/src/components/embed-event/event-types/embedded-channel.tsx index 8fd13bdce..71bbc4367 100644 --- a/src/components/embed-event/event-types/embedded-channel.tsx +++ b/src/components/embed-event/event-types/embedded-channel.tsx @@ -2,8 +2,8 @@ import { Link as RouterLink } from "react-router-dom"; import { Box, Card, CardBody, CardFooter, CardHeader, CardProps, Flex, Heading, LinkBox, Text } from "@chakra-ui/react"; import { nip19 } from "nostr-tools"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import { NostrEvent } from "../../../types/nostr-event"; import useChannelMetadata from "../../../hooks/use-channel-metadata"; import HoverLinkOverlay from "../../hover-link-overlay"; diff --git a/src/components/embed-event/event-types/embedded-community.tsx b/src/components/embed-event/event-types/embedded-community.tsx index 99d9d2e23..45cdc25e2 100644 --- a/src/components/embed-event/event-types/embedded-community.tsx +++ b/src/components/embed-event/event-types/embedded-community.tsx @@ -2,8 +2,8 @@ import { Link as RouterLink } from "react-router-dom"; import { Card, CardFooter, CardHeader, CardProps, Heading, LinkBox, LinkOverlay, Text } from "@chakra-ui/react"; import { nip19 } from "nostr-tools"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import { NostrEvent } from "../../../types/nostr-event"; import { getCommunityImage, getCommunityName } from "../../../helpers/nostr/communities"; diff --git a/src/components/embed-event/event-types/embedded-dm.tsx b/src/components/embed-event/event-types/embedded-dm.tsx index 47636d6b0..eb2728aab 100644 --- a/src/components/embed-event/event-types/embedded-dm.tsx +++ b/src/components/embed-event/event-types/embedded-dm.tsx @@ -2,8 +2,8 @@ import { Card, CardBody, CardHeader, CardProps, IconButton, LinkBox, Text, useDi import { NostrEvent } from "../../../types/nostr-event"; import { TrustProvider } from "../../../providers/local/trust"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import Timestamp from "../../timestamp"; import DecryptPlaceholder from "../../../views/dms/components/decrypt-placeholder"; import useCurrentAccount from "../../../hooks/use-current-account"; diff --git a/src/components/embed-event/event-types/embedded-emoji-pack.tsx b/src/components/embed-event/event-types/embedded-emoji-pack.tsx index bbf6b75f4..2b2e51e99 100644 --- a/src/components/embed-event/event-types/embedded-emoji-pack.tsx +++ b/src/components/embed-event/event-types/embedded-emoji-pack.tsx @@ -15,8 +15,8 @@ import { Link as RouterLink } from "react-router-dom"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { getEmojisFromPack, getPackName } from "../../../helpers/nostr/emoji-packs"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import EmojiPackFavoriteButton from "../../../views/emoji-packs/components/emoji-pack-favorite-button"; import EmojiPackMenu from "../../../views/emoji-packs/components/emoji-pack-menu"; import { NostrEvent } from "../../../types/nostr-event"; diff --git a/src/components/embed-event/event-types/embedded-flare-video.tsx b/src/components/embed-event/event-types/embedded-flare-video.tsx index a978ef3fa..eb88db4c1 100644 --- a/src/components/embed-event/event-types/embedded-flare-video.tsx +++ b/src/components/embed-event/event-types/embedded-flare-video.tsx @@ -2,8 +2,8 @@ import { Card, CardBody, CardProps, Flex, Heading, Image, Link, Text } from "@ch import { Link as RouterLink, useNavigate } from "react-router-dom"; import { NostrEvent } from "../../../types/nostr-event"; -import UserLink from "../../user-link"; -import UserAvatar from "../../user-avatar"; +import UserLink from "../../user/user-link"; +import UserAvatar from "../../user/user-avatar"; import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; import { getVideoDuration, getVideoImages, getVideoSummary, getVideoTitle } from "../../../helpers/nostr/flare"; import { getSharableEventAddress } from "../../../helpers/nip19"; diff --git a/src/components/embed-event/event-types/embedded-goal.tsx b/src/components/embed-event/event-types/embedded-goal.tsx index d9b207fe2..92a4b56c7 100644 --- a/src/components/embed-event/event-types/embedded-goal.tsx +++ b/src/components/embed-event/event-types/embedded-goal.tsx @@ -4,8 +4,8 @@ import { Link as RouterLink } from "react-router-dom"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; import { getGoalName } from "../../../helpers/nostr/goal"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import GoalProgress from "../../../views/goals/components/goal-progress"; import GoalZapButton from "../../../views/goals/components/goal-zap-button"; import GoalTopZappers from "../../../views/goals/components/goal-top-zappers"; diff --git a/src/components/embed-event/event-types/embedded-list.tsx b/src/components/embed-event/event-types/embedded-list.tsx index 712c9af3d..394e8264c 100644 --- a/src/components/embed-event/event-types/embedded-list.tsx +++ b/src/components/embed-event/event-types/embedded-list.tsx @@ -3,12 +3,12 @@ import { Link as RouterLink } from "react-router-dom"; import { NostrEvent } from "../../../types/nostr-event"; import { getListDescription, getListName, isSpecialListKind } from "../../../helpers/nostr/lists"; -import { createCoordinate } from "../../../services/replaceable-events"; import { getSharableEventAddress } from "../../../helpers/nip19"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import ListFeedButton from "../../../views/lists/components/list-feed-button"; import { ListCardContent } from "../../../views/lists/components/list-card"; +import { createCoordinate } from "../../../classes/batch-kind-loader"; export default function EmbeddedList({ list, ...props }: Omit & { list: NostrEvent }) { const link = isSpecialListKind(list.kind) ? createCoordinate(list.kind, list.pubkey) : getSharableEventAddress(list); diff --git a/src/components/embed-event/event-types/embedded-note.tsx b/src/components/embed-event/event-types/embedded-note.tsx index 1b7089515..9f9e71fb6 100644 --- a/src/components/embed-event/event-types/embedded-note.tsx +++ b/src/components/embed-event/event-types/embedded-note.tsx @@ -3,14 +3,14 @@ import { Card, CardProps, Flex, LinkBox, Spacer } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; -import { UserDnsIdentityIcon } from "../../user-dns-identity-icon"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; +import { UserDnsIdentityIcon } from "../../user/user-dns-identity-icon"; import useSubject from "../../../hooks/use-subject"; import appSettings from "../../../services/settings/app-settings"; -import EventVerificationIcon from "../../event-verification-icon"; +import EventVerificationIcon from "../../common-event/event-verification-icon"; import { TrustProvider } from "../../../providers/local/trust"; -import { NoteLink } from "../../note-link"; +import { NoteLink } from "../../note/note-link"; import Timestamp from "../../timestamp"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { CompactNoteContent } from "../../compact-note-content"; diff --git a/src/components/embed-event/event-types/embedded-reaction.tsx b/src/components/embed-event/event-types/embedded-reaction.tsx index 469b6a2fe..4d408dab9 100644 --- a/src/components/embed-event/event-types/embedded-reaction.tsx +++ b/src/components/embed-event/event-types/embedded-reaction.tsx @@ -2,11 +2,11 @@ import { Card, CardProps, Flex, LinkBox, Spacer, Text } from "@chakra-ui/react"; import { NostrEvent } from "../../../types/nostr-event"; import { TrustProvider } from "../../../providers/local/trust"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import Timestamp from "../../timestamp"; import ReactionIcon from "../../event-reactions/reaction-icon"; -import { NoteLink } from "../../note-link"; +import { NoteLink } from "../../note/note-link"; import { nip25 } from "nostr-tools"; export default function EmbeddedReaction({ event, ...props }: Omit & { event: NostrEvent }) { diff --git a/src/components/embed-event/event-types/embedded-stemstr-track.tsx b/src/components/embed-event/event-types/embedded-stemstr-track.tsx index fa696cae2..1f2d779b5 100644 --- a/src/components/embed-event/event-types/embedded-stemstr-track.tsx +++ b/src/components/embed-event/event-types/embedded-stemstr-track.tsx @@ -12,17 +12,17 @@ import { } from "@chakra-ui/react"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import { CompactNoteContent } from "../../compact-note-content"; import { getHashtags } from "../../../helpers/nostr/stemstr"; import { ReplyIcon } from "../../icons"; -import NoteZapButton from "../../note/note-zap-button"; -import QuoteRepostButton from "../../note/components/quote-repost-button"; import Timestamp from "../../timestamp"; import TrackStemstrButton from "../../../views/tracks/components/track-stemstr-button"; import TrackDownloadButton from "../../../views/tracks/components/track-download-button"; import TrackPlayer from "../../../views/tracks/components/track-player"; +import QuoteRepostButton from "../../note/quote-repost-button"; +import NoteZapButton from "../../note/note-zap-button"; // example nevent1qqst32cnyhhs7jt578u7vp3y047dduuwjquztpvwqc43f3nvg8dh28gpzamhxue69uhhyetvv9ujuum5v4khxarj9eshquq4rxdxa export default function EmbeddedStemstrTrack({ track, ...props }: Omit & { track: NostrEvent }) { diff --git a/src/components/embed-event/event-types/embedded-stream-message.tsx b/src/components/embed-event/event-types/embedded-stream-message.tsx index 2e83ddcdb..3d8fbf319 100644 --- a/src/components/embed-event/event-types/embedded-stream-message.tsx +++ b/src/components/embed-event/event-types/embedded-stream-message.tsx @@ -2,8 +2,8 @@ import { Box, Card, CardProps, Divider, Flex, Link, Text } from "@chakra-ui/reac import { Link as RouterLink } from "react-router-dom"; import { NostrEvent, isATag } from "../../../types/nostr-event"; -import UserLink from "../../user-link"; -import UserAvatar from "../../user-avatar"; +import UserLink from "../../user/user-link"; +import UserAvatar from "../../user/user-avatar"; import ChatMessageContent from "../../../views/streams/stream/stream-chat/chat-message-content"; import useReplaceableEvent from "../../../hooks/use-replaceable-event"; import { parseStreamEvent } from "../../../helpers/nostr/stream"; diff --git a/src/components/embed-event/event-types/embedded-stream.tsx b/src/components/embed-event/event-types/embedded-stream.tsx index 5720f8c58..51c106622 100644 --- a/src/components/embed-event/event-types/embedded-stream.tsx +++ b/src/components/embed-event/event-types/embedded-stream.tsx @@ -4,8 +4,8 @@ import { Link as RouterLink, useNavigate } from "react-router-dom"; import { parseStreamEvent } from "../../../helpers/nostr/stream"; import { NostrEvent } from "../../../types/nostr-event"; import StreamStatusBadge from "../../../views/streams/components/status-badge"; -import UserLink from "../../user-link"; -import UserAvatar from "../../user-avatar"; +import UserLink from "../../user/user-link"; +import UserAvatar from "../../user/user-avatar"; import useEventNaddr from "../../../hooks/use-event-naddr"; import Timestamp from "../../timestamp"; import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; diff --git a/src/components/embed-event/event-types/embedded-torrent-comment.tsx b/src/components/embed-event/event-types/embedded-torrent-comment.tsx index ac5b80f5e..92fe3c19e 100644 --- a/src/components/embed-event/event-types/embedded-torrent-comment.tsx +++ b/src/components/embed-event/event-types/embedded-torrent-comment.tsx @@ -2,16 +2,16 @@ import { Card, CardProps, Flex, LinkBox, Spacer, Text } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import useSubject from "../../../hooks/use-subject"; import appSettings from "../../../services/settings/app-settings"; -import EventVerificationIcon from "../../event-verification-icon"; +import EventVerificationIcon from "../../common-event/event-verification-icon"; import { TrustProvider } from "../../../providers/local/trust"; import Timestamp from "../../timestamp"; import { CompactNoteContent } from "../../compact-note-content"; import HoverLinkOverlay from "../../hover-link-overlay"; -import { getThreadReferences } from "../../../helpers/nostr/events"; +import { getThreadReferences } from "../../../helpers/nostr/event"; import useSingleEvent from "../../../hooks/use-single-event"; import { getTorrentTitle } from "../../../helpers/nostr/torrents"; import { useNavigateInDrawer } from "../../../providers/drawer-sub-view-provider"; diff --git a/src/components/embed-event/event-types/embedded-torrent.tsx b/src/components/embed-event/event-types/embedded-torrent.tsx index 3ff5c20b1..e2dd0189e 100644 --- a/src/components/embed-event/event-types/embedded-torrent.tsx +++ b/src/components/embed-event/event-types/embedded-torrent.tsx @@ -17,8 +17,8 @@ import { import { Link as RouterLink } from "react-router-dom"; import { getSharableEventAddress } from "../../../helpers/nip19"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import { NostrEvent } from "../../../types/nostr-event"; import Timestamp from "../../timestamp"; import Magnet from "../../icons/magnet"; diff --git a/src/components/embed-event/event-types/embedded-unknown.tsx b/src/components/embed-event/event-types/embedded-unknown.tsx index 9cade5a6c..e49ea49ce 100644 --- a/src/components/embed-event/event-types/embedded-unknown.tsx +++ b/src/components/embed-event/event-types/embedded-unknown.tsx @@ -3,10 +3,10 @@ import { Box, Button, ButtonGroup, Card, CardBody, CardHeader, CardProps, Link, import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatarLink from "../../user-avatar-link"; -import UserLink from "../../user-link"; +import UserAvatarLink from "../../user/user-avatar-link"; +import UserLink from "../../user/user-link"; import { buildAppSelectUrl } from "../../../helpers/nostr/apps"; -import { UserDnsIdentityIcon } from "../../user-dns-identity-icon"; +import { UserDnsIdentityIcon } from "../../user/user-dns-identity-icon"; import { embedEmoji, embedNostrHashtags, diff --git a/src/components/embed-types/cashu.tsx b/src/components/embed-types/cashu.tsx index a52e9dad5..0b4b2df1b 100644 --- a/src/components/embed-types/cashu.tsx +++ b/src/components/embed-types/cashu.tsx @@ -2,7 +2,7 @@ import { lazy } from "react"; import { EmbedableContent, embedJSX } from "../../helpers/embeds"; import { getMatchCashu } from "../../helpers/regexp"; -const InlineCachuCard = lazy(() => import("../inline-cashu-card")); +const InlineCachuCard = lazy(() => import("../cashu/inline-cashu-card")); export function embedCashuTokens(content: EmbedableContent) { return embedJSX(content, { diff --git a/src/components/embed-types/common.tsx b/src/components/embed-types/common.tsx index 8f43305d5..47fc45494 100644 --- a/src/components/embed-types/common.tsx +++ b/src/components/embed-types/common.tsx @@ -1,7 +1,7 @@ import { Link } from "@chakra-ui/react"; -import OpenGraphCard from "../open-graph-card"; -import OpenGraphLink from "../open-graph-link"; +import OpenGraphCard from "../open-graph/open-graph-card"; +import OpenGraphLink from "../open-graph/open-graph-link"; export function renderGenericUrl(match: URL) { return ( diff --git a/src/components/embed-types/index.ts b/src/components/embed-types/index.ts index b87ee716e..d16d2dee9 100644 --- a/src/components/embed-types/index.ts +++ b/src/components/embed-types/index.ts @@ -10,3 +10,5 @@ export * from "./cashu"; export * from "./video"; export * from "./simplex"; export * from "./reddit"; +export * from "./model"; +export * from "./audio"; diff --git a/src/components/embed-types/lightning.tsx b/src/components/embed-types/lightning.tsx index 6528bfcc9..08818f020 100644 --- a/src/components/embed-types/lightning.tsx +++ b/src/components/embed-types/lightning.tsx @@ -1,5 +1,5 @@ import { EmbedableContent, embedJSX } from "../../helpers/embeds"; -import { InlineInvoiceCard } from "../inline-invoice-card"; +import { InlineInvoiceCard } from "../lightning/inline-invoice-card"; export function embedLightningInvoice(content: EmbedableContent) { return embedJSX(content, { diff --git a/src/components/embed-types/nostr.tsx b/src/components/embed-types/nostr.tsx index 228109960..0a94856cd 100644 --- a/src/components/embed-types/nostr.tsx +++ b/src/components/embed-types/nostr.tsx @@ -3,7 +3,7 @@ import { Link as RouterLink } from "react-router-dom"; import { EmbedableContent, embedJSX } from "../../helpers/embeds"; import { DraftNostrEvent, NostrEvent } from "../../types/nostr-event"; -import UserLink from "../user-link"; +import UserLink from "../user/user-link"; import { getMatchHashtag, getMatchNostrLink, stripInvisibleChar } from "../../helpers/regexp"; import { safeDecode } from "../../helpers/nip19"; import { EmbedEventPointer } from "../embed-event"; diff --git a/src/components/event-interactions-modal/index.tsx b/src/components/event-interactions-modal/index.tsx index fb27ed8ef..22565e85a 100644 --- a/src/components/event-interactions-modal/index.tsx +++ b/src/components/event-interactions-modal/index.tsx @@ -15,15 +15,15 @@ import { } from "@chakra-ui/react"; import { NostrEvent } from "../../types/nostr-event"; -import UserAvatarLink from "../user-avatar-link"; -import UserLink from "../user-link"; +import UserAvatarLink from "../user/user-avatar-link"; +import UserLink from "../user/user-link"; import { LightningIcon } from "../icons"; import { ParsedZap } from "../../helpers/nostr/zaps"; import { readablizeSats } from "../../helpers/bolt11"; import useEventReactions from "../../hooks/use-event-reactions"; import useEventZaps from "../../hooks/use-event-zaps"; import Timestamp from "../timestamp"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import ReactionDetails from "./reaction-details"; import RepostDetails from "./repost-details"; diff --git a/src/components/event-interactions-modal/reaction-details.tsx b/src/components/event-interactions-modal/reaction-details.tsx index 0d928e81f..aea542a2e 100644 --- a/src/components/event-interactions-modal/reaction-details.tsx +++ b/src/components/event-interactions-modal/reaction-details.tsx @@ -3,8 +3,8 @@ import { useMemo } from "react"; import { NostrEvent } from "../../types/nostr-event"; import { groupReactions } from "../../helpers/nostr/reactions"; -import UserAvatarLink from "../user-avatar-link"; -import UserLink from "../user-link"; +import UserAvatarLink from "../user/user-avatar-link"; +import UserLink from "../user/user-link"; import ReactionIcon from "../event-reactions/reaction-icon"; function ShowMoreGrid({ diff --git a/src/components/event-interactions-modal/repost-details.tsx b/src/components/event-interactions-modal/repost-details.tsx index d8f1f3dce..d1ad144a0 100644 --- a/src/components/event-interactions-modal/repost-details.tsx +++ b/src/components/event-interactions-modal/repost-details.tsx @@ -2,8 +2,8 @@ import { Flex, Text } from "@chakra-ui/react"; import { kinds } from "nostr-tools"; import { NostrEvent } from "../../types/nostr-event"; -import UserAvatarLink from "../user-avatar-link"; -import UserLink from "../user-link"; +import UserAvatarLink from "../user/user-avatar-link"; +import UserLink from "../user/user-link"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import { useReadRelays } from "../../hooks/use-client-relays"; import useSubject from "../../hooks/use-subject"; diff --git a/src/components/event-zap-modal/index.tsx b/src/components/event-zap-modal/index.tsx index aa8322473..46f8e213a 100644 --- a/src/components/event-zap-modal/index.tsx +++ b/src/components/event-zap-modal/index.tsx @@ -16,7 +16,7 @@ import clientRelaysService from "../../services/client-relays"; import { getZapSplits } from "../../helpers/nostr/zaps"; import { unique } from "../../helpers/array"; import relayScoreboardService from "../../services/relay-scoreboard"; -import { getEventCoordinate, isReplaceable } from "../../helpers/nostr/events"; +import { getEventCoordinate, isReplaceable } from "../../helpers/nostr/event"; import { EmbedProps } from "../embed-event"; import userMailboxesService from "../../services/user-mailboxes"; import InputStep from "./input-step"; @@ -26,7 +26,7 @@ import signingService from "../../services/signing"; import accountService from "../../services/account"; import PayStep from "./pay-step"; import { getInvoiceFromCallbackUrl } from "../../helpers/lnurl"; -import UserLink from "../user-link"; +import UserLink from "../user/user-link"; import relayHintService from "../../services/event-relay-hint"; export type PayRequest = { invoice?: string; pubkey: string; error?: any }; diff --git a/src/components/event-zap-modal/input-step.tsx b/src/components/event-zap-modal/input-step.tsx index b708f8771..37140fb39 100644 --- a/src/components/event-zap-modal/input-step.tsx +++ b/src/components/event-zap-modal/input-step.tsx @@ -9,8 +9,8 @@ import { getZapSplits } from "../../helpers/nostr/zaps"; import { EmbedEvent, EmbedProps } from "../embed-event"; import useAppSettings from "../../hooks/use-app-settings"; import CustomZapAmountOptions from "./zap-options"; -import UserAvatar from "../user-avatar"; -import UserLink from "../user-link"; +import UserAvatar from "../user/user-avatar"; +import UserLink from "../user/user-link"; function UserCard({ pubkey, percent }: { pubkey: string; percent?: number }) { const { address } = useUserLNURLMetadata(pubkey); diff --git a/src/components/event-zap-modal/pay-step.tsx b/src/components/event-zap-modal/pay-step.tsx index 5b694f0f8..2434d3213 100644 --- a/src/components/event-zap-modal/pay-step.tsx +++ b/src/components/event-zap-modal/pay-step.tsx @@ -2,8 +2,8 @@ import { useMount } from "react-use"; import { Alert, Button, ButtonGroup, Flex, IconButton, Spacer, useDisclosure, useToast } from "@chakra-ui/react"; import { PayRequest } from "."; -import UserAvatar from "../user-avatar"; -import UserLink from "../user-link"; +import UserAvatar from "../user/user-avatar"; +import UserLink from "../user/user-link"; import { ChevronDownIcon, ChevronUpIcon, CheckIcon, ErrorIcon, LightningIcon } from "../icons"; import { InvoiceModalContent } from "../invoice-modal"; import { PropsWithChildren, useEffect, useState } from "react"; diff --git a/src/components/invoice-modal.tsx b/src/components/invoice-modal.tsx index b8e14a3ab..d5d908809 100644 --- a/src/components/invoice-modal.tsx +++ b/src/components/invoice-modal.tsx @@ -14,7 +14,7 @@ import { } from "@chakra-ui/react"; import { ExternalLinkIcon, QrCodeIcon } from "./icons"; -import QrCodeSvg from "./qr-code-svg"; +import QrCodeSvg from "./qr-code/qr-code-svg"; import { CopyIconButton } from "./copy-icon-button"; type CommonProps = { invoice: string; onPaid: () => void }; diff --git a/src/components/layout/account-switcher.tsx b/src/components/layout/account-switcher.tsx index f9b78048e..959450b4b 100644 --- a/src/components/layout/account-switcher.tsx +++ b/src/components/layout/account-switcher.tsx @@ -2,12 +2,12 @@ import { CloseIcon } from "@chakra-ui/icons"; import { useNavigate } from "react-router-dom"; import { Box, Button, Flex, IconButton, Text, useDisclosure } from "@chakra-ui/react"; -import { getUserDisplayName } from "../../helpers/user-metadata"; +import { getUserDisplayName } from "../../helpers/nostr/user-metadata"; import useSubject from "../../hooks/use-subject"; import { useUserMetadata } from "../../hooks/use-user-metadata"; import accountService, { Account } from "../../services/account"; import { AddIcon, ChevronDownIcon, ChevronUpIcon } from "../icons"; -import UserAvatar from "../user-avatar"; +import UserAvatar from "../user/user-avatar"; import AccountInfoBadge from "../account-info-badge"; import useCurrentAccount from "../../hooks/use-current-account"; diff --git a/src/components/layout/ghost-toolbar.tsx b/src/components/layout/ghost-toolbar.tsx index 2c6fe0047..023263752 100644 --- a/src/components/layout/ghost-toolbar.tsx +++ b/src/components/layout/ghost-toolbar.tsx @@ -8,8 +8,8 @@ import dayjs from "dayjs"; import useCurrentAccount from "../../hooks/use-current-account"; import useSubject from "../../hooks/use-subject"; import accountService from "../../services/account"; -import UserAvatar from "../user-avatar"; -import UserLink from "../user-link"; +import UserAvatar from "../user/user-avatar"; +import UserLink from "../user/user-link"; import { GhostIcon } from "../icons"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import { useReadRelays } from "../../hooks/use-client-relays"; diff --git a/src/components/layout/mobile-bottom-nav.tsx b/src/components/layout/mobile-bottom-nav.tsx index 5461b0c2b..7fe54224e 100644 --- a/src/components/layout/mobile-bottom-nav.tsx +++ b/src/components/layout/mobile-bottom-nav.tsx @@ -5,7 +5,7 @@ import { useLocation, useNavigate } from "react-router-dom"; import useCurrentAccount from "../../hooks/use-current-account"; import { PostModalContext } from "../../providers/route/post-modal-provider"; import { DirectMessagesIcon, NotesIcon, NotificationsIcon, PlusCircleIcon, SearchIcon } from "../icons"; -import UserAvatar from "../user-avatar"; +import UserAvatar from "../user/user-avatar"; import MobileSideDrawer from "./mobile-side-drawer"; import Rocket02 from "../icons/rocket-02"; diff --git a/src/components/lightbox-provider.tsx b/src/components/lightbox-provider.tsx index cd3f60704..3b562f8c1 100644 --- a/src/components/lightbox-provider.tsx +++ b/src/components/lightbox-provider.tsx @@ -30,9 +30,9 @@ declare module "yet-another-react-lightbox" { } import { NostrEvent } from "../types/nostr-event"; -import UserAvatarLink from "./user-avatar-link"; -import UserLink from "./user-link"; -import { UserDnsIdentityIcon } from "./user-dns-identity-icon"; +import UserAvatarLink from "./user/user-avatar-link"; +import UserLink from "./user/user-link"; +import { UserDnsIdentityIcon } from "./user/user-dns-identity-icon"; import styled from "@emotion/styled"; import { getSharableEventAddress } from "../helpers/nip19"; diff --git a/src/components/inline-invoice-card.tsx b/src/components/lightning/inline-invoice-card.tsx similarity index 94% rename from src/components/inline-invoice-card.tsx rename to src/components/lightning/inline-invoice-card.tsx index bb4d1a930..7d40eba01 100644 --- a/src/components/inline-invoice-card.tsx +++ b/src/components/lightning/inline-invoice-card.tsx @@ -4,8 +4,8 @@ import dayjs from "dayjs"; import { requestProvider } from "webln"; import { Box, BoxProps, Button, ButtonGroup, IconButton, Text } from "@chakra-ui/react"; -import { parsePaymentRequest, readablizeSats } from "../helpers/bolt11"; -import { CopyToClipboardIcon } from "./icons"; +import { parsePaymentRequest, readablizeSats } from "../../helpers/bolt11"; +import { CopyToClipboardIcon } from "../icons"; export type InvoiceButtonProps = { paymentRequest: string; diff --git a/src/components/loading-nostr-link.tsx b/src/components/loading-nostr-link.tsx index 1c9639d0f..2132af85d 100644 --- a/src/components/loading-nostr-link.tsx +++ b/src/components/loading-nostr-link.tsx @@ -22,7 +22,7 @@ import { useSet } from "react-use"; import { ExternalLinkIcon, SearchIcon } from "./icons"; import { buildAppSelectUrl } from "../helpers/nostr/apps"; -import UserLink from "./user-link"; +import UserLink from "./user/user-link"; import { encodeDecodeResult } from "../helpers/nip19"; import relayPoolService from "../services/relay-pool"; diff --git a/src/components/magic-textarea.tsx b/src/components/magic-textarea.tsx index 8f108e229..8ee86c0a4 100644 --- a/src/components/magic-textarea.tsx +++ b/src/components/magic-textarea.tsx @@ -12,8 +12,8 @@ import { matchSorter } from "match-sorter"; import { Emoji, useContextEmojis } from "../providers/global/emoji-provider"; import { useUserSearchDirectoryContext } from "../providers/global/user-directory-provider"; -import UserAvatar from "./user-avatar"; -import { UserDnsIdentityIcon } from "./user-dns-identity-icon"; +import UserAvatar from "./user/user-avatar"; +import { UserDnsIdentityIcon } from "./user/user-dns-identity-icon"; export type PeopleToken = { pubkey: string; names: string[] }; type Token = Emoji | PeopleToken; diff --git a/src/components/message-block.tsx b/src/components/message/message-block.tsx similarity index 86% rename from src/components/message-block.tsx rename to src/components/message/message-block.tsx index d7ef8dc18..c9dea4989 100644 --- a/src/components/message-block.tsx +++ b/src/components/message/message-block.tsx @@ -1,11 +1,11 @@ import { CardProps, Flex } from "@chakra-ui/react"; -import useCurrentAccount from "../hooks/use-current-account"; -import { NostrEvent } from "../types/nostr-event"; +import useCurrentAccount from "../../hooks/use-current-account"; +import { NostrEvent } from "../../types/nostr-event"; import MessageBubble, { MessageBubbleProps } from "./message-bubble"; -import { useThreadsContext } from "../providers/local/thread-provider"; -import ThreadButton from "../views/dms/components/thread-button"; -import UserAvatarLink from "./user-avatar-link"; +import { useThreadsContext } from "../../providers/local/thread-provider"; +import ThreadButton from "../../views/dms/components/thread-button"; +import UserAvatarLink from "../user/user-avatar-link"; function MessageBubbleWithThread({ message, showThreadButton = true, ...props }: MessageBubbleProps) { const { threads } = useThreadsContext(); diff --git a/src/components/message-bubble.tsx b/src/components/message/message-bubble.tsx similarity index 77% rename from src/components/message-bubble.tsx rename to src/components/message/message-bubble.tsx index fe5f91e1b..5ee08f935 100644 --- a/src/components/message-bubble.tsx +++ b/src/components/message/message-bubble.tsx @@ -1,17 +1,17 @@ import { ReactNode, useRef } from "react"; import { ButtonGroup, Card, CardBody, CardFooter, CardHeader, CardProps } from "@chakra-ui/react"; -import { NostrEvent } from "../types/nostr-event"; -import { useRegisterIntersectionEntity } from "../providers/local/intersection-observer"; -import { getEventUID } from "../helpers/nostr/events"; -import Timestamp from "./timestamp"; -import NoteZapButton from "./note/note-zap-button"; -import UserLink from "./user-link"; -import { UserDnsIdentityIcon } from "./user-dns-identity-icon"; -import useEventReactions from "../hooks/use-event-reactions"; -import AddReactionButton from "./note/components/add-reaction-button"; -import EventReactionButtons from "./event-reactions/event-reactions"; -import { IconThreadButton } from "../views/dms/components/thread-button"; +import { NostrEvent } from "../../types/nostr-event"; +import { useRegisterIntersectionEntity } from "../../providers/local/intersection-observer"; +import { getEventUID } from "../../helpers/nostr/event"; +import Timestamp from "../timestamp"; +import UserLink from "../user/user-link"; +import { UserDnsIdentityIcon } from "../user/user-dns-identity-icon"; +import useEventReactions from "../../hooks/use-event-reactions"; +import EventReactionButtons from "../event-reactions/event-reactions"; +import { IconThreadButton } from "../../views/dms/components/thread-button"; +import AddReactionButton from "../note/timeline-note/components/add-reaction-button"; +import NoteZapButton from "../note/note-zap-button"; export type MessageBubbleProps = { message: NostrEvent; diff --git a/src/components/note/components/bookmark-button.tsx b/src/components/note/bookmark-button.tsx similarity index 86% rename from src/components/note/components/bookmark-button.tsx rename to src/components/note/bookmark-button.tsx index 3846501ac..debc22508 100644 --- a/src/components/note/components/bookmark-button.tsx +++ b/src/components/note/bookmark-button.tsx @@ -12,21 +12,21 @@ import { useDisclosure, } from "@chakra-ui/react"; -import useCurrentAccount from "../../../hooks/use-current-account"; -import useUserLists from "../../../hooks/use-user-lists"; +import useCurrentAccount from "../../hooks/use-current-account"; +import useUserLists from "../../hooks/use-user-lists"; import { NOTE_LIST_KIND, listAddEvent, listRemoveEvent, getEventPointersFromList, getListName, -} from "../../../helpers/nostr/lists"; -import { NostrEvent } from "../../../types/nostr-event"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; -import { BookmarkIcon, BookmarkedIcon, PlusCircleIcon } from "../../icons"; -import NewListModal from "../../../views/lists/components/new-list-modal"; -import useEventBookmarkActions from "../../../hooks/use-event-bookmark-actions"; -import { usePublishEvent } from "../../../providers/global/publish-provider"; +} from "../../helpers/nostr/lists"; +import { NostrEvent } from "../../types/nostr-event"; +import { getEventCoordinate } from "../../helpers/nostr/event"; +import { BookmarkIcon, BookmarkedIcon, PlusCircleIcon } from "../icons"; +import NewListModal from "../../views/lists/components/new-list-modal"; +import useEventBookmarkActions from "../../hooks/use-event-bookmark-actions"; +import { usePublishEvent } from "../../providers/global/publish-provider"; export default function BookmarkButton({ event, ...props }: { event: NostrEvent } & Omit) { const publish = usePublishEvent(); diff --git a/src/components/note/note-relays.tsx b/src/components/note/event-relays.tsx similarity index 68% rename from src/components/note/note-relays.tsx rename to src/components/note/event-relays.tsx index 3ca3479c8..804130960 100644 --- a/src/components/note/note-relays.tsx +++ b/src/components/note/event-relays.tsx @@ -1,18 +1,14 @@ import { memo } from "react"; +import { NostrEvent } from "nostr-tools"; import { getEventRelays } from "../../services/event-relays"; -import { NostrEvent } from "../../types/nostr-event"; import useSubject from "../../hooks/use-subject"; import { RelayIconStack, RelayIconStackProps } from "../relay-icon-stack"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { useBreakpointValue } from "../../providers/global/breakpoint-provider"; -export type NoteRelaysProps = { - event: NostrEvent; -}; - export const EventRelays = memo( - ({ event, ...props }: NoteRelaysProps & Omit) => { + ({ event, ...props }: { event: NostrEvent } & Omit) => { const maxRelays = useBreakpointValue({ base: 3, md: undefined }); const eventRelays = useSubject(getEventRelays(getEventUID(event))); diff --git a/src/components/note-link.tsx b/src/components/note/note-link.tsx similarity index 70% rename from src/components/note-link.tsx rename to src/components/note/note-link.tsx index dfc1e42d0..7c6842156 100644 --- a/src/components/note-link.tsx +++ b/src/components/note/note-link.tsx @@ -2,15 +2,15 @@ import { useMemo } from "react"; import { Link, LinkProps } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; -import { truncatedId } from "../helpers/nostr/events"; -import relayHintService from "../services/event-relay-hint"; +import { truncatedId } from "../../helpers/nostr/event"; +import relayHintService from "../../services/event-relay-hint"; import { nip19 } from "nostr-tools"; export type NoteLinkProps = LinkProps & { noteId: string; }; -export const NoteLink = ({ children, noteId, color = "blue.500", ...props }: NoteLinkProps) => { +export function NoteLink({ children, noteId, color = "blue.500", ...props }: NoteLinkProps) { const nevent = useMemo(() => { const relays = relayHintService.getEventPointerRelayHints(noteId).slice(0, 2); return nip19.neventEncode({ id: noteId, relays }); @@ -21,4 +21,6 @@ export const NoteLink = ({ children, noteId, color = "blue.500", ...props }: Not {children || truncatedId(nevent)} ); -}; +} + +export default NoteLink; diff --git a/src/components/note/note-menu.tsx b/src/components/note/note-menu.tsx index 107c9083c..40768f06c 100644 --- a/src/components/note/note-menu.tsx +++ b/src/components/note/note-menu.tsx @@ -4,7 +4,7 @@ import { Link as RouterLink } from "react-router-dom"; import { BroadcastEventIcon } from "../icons"; import { NostrEvent } from "../../types/nostr-event"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../dots-menu-button"; import NoteTranslationModal from "../../views/tools/transform-note/translation"; import Translate01 from "../icons/translate-01"; import InfoCircle from "../icons/info-circle"; @@ -33,7 +33,7 @@ export default function NoteMenu({ return ( <> - + @@ -65,7 +65,7 @@ export default function NoteMenu({ )} - + {translationsModal.isOpen && } diff --git a/src/components/note/note-zap-button.tsx b/src/components/note/note-zap-button.tsx index 5b6d6e666..d60b6efdf 100644 --- a/src/components/note/note-zap-button.tsx +++ b/src/components/note/note-zap-button.tsx @@ -10,7 +10,7 @@ import { NostrEvent } from "../../types/nostr-event"; import { LightningIcon } from "../icons"; import ZapModal from "../event-zap-modal"; import useUserLNURLMetadata from "../../hooks/use-user-lnurl-metadata"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; export type NoteZapButtonProps = Omit & { event: NostrEvent; diff --git a/src/components/open-in-drawer-button.tsx b/src/components/note/open-in-drawer-button.tsx similarity index 85% rename from src/components/open-in-drawer-button.tsx rename to src/components/note/open-in-drawer-button.tsx index 3276de234..44025d172 100644 --- a/src/components/open-in-drawer-button.tsx +++ b/src/components/note/open-in-drawer-button.tsx @@ -2,8 +2,8 @@ import { MouseEventHandler, useCallback } from "react"; import { IconButton, IconButtonProps } from "@chakra-ui/react"; import { To } from "react-router-dom"; -import { DrawerIcon } from "./icons"; -import { useNavigateInDrawer } from "../providers/drawer-sub-view-provider"; +import { DrawerIcon } from "../icons"; +import { useNavigateInDrawer } from "../../providers/drawer-sub-view-provider"; export default function OpenInDrawerButton({ to, diff --git a/src/components/note/components/quote-repost-button.tsx b/src/components/note/quote-repost-button.tsx similarity index 74% rename from src/components/note/components/quote-repost-button.tsx rename to src/components/note/quote-repost-button.tsx index 82ad8d287..fcab1c6b8 100644 --- a/src/components/note/components/quote-repost-button.tsx +++ b/src/components/note/quote-repost-button.tsx @@ -1,10 +1,10 @@ import { useContext } from "react"; import { ButtonProps, IconButton } from "@chakra-ui/react"; +import { NostrEvent } from "nostr-tools"; -import { NostrEvent } from "../../../types/nostr-event"; -import { QuoteRepostIcon } from "../../icons"; -import { PostModalContext } from "../../../providers/route/post-modal-provider"; -import { getSharableEventAddress } from "../../../helpers/nip19"; +import { QuoteRepostIcon } from "../icons"; +import { PostModalContext } from "../../providers/route/post-modal-provider"; +import { getSharableEventAddress } from "../../helpers/nip19"; export type QuoteRepostButtonProps = Omit & { event: NostrEvent; diff --git a/src/components/note/components/add-reaction-button.tsx b/src/components/note/timeline-note/components/add-reaction-button.tsx similarity index 77% rename from src/components/note/components/add-reaction-button.tsx rename to src/components/note/timeline-note/components/add-reaction-button.tsx index 86bf56bf0..9a83723df 100644 --- a/src/components/note/components/add-reaction-button.tsx +++ b/src/components/note/timeline-note/components/add-reaction-button.tsx @@ -1,3 +1,4 @@ +import { useState } from "react"; import { ButtonProps, IconButton, @@ -9,15 +10,14 @@ import { Portal, useBoolean, } from "@chakra-ui/react"; +import { NostrEvent } from "nostr-tools"; -import useEventReactions from "../../../hooks/use-event-reactions"; -import { NostrEvent } from "../../../types/nostr-event"; -import { AddReactionIcon } from "../../icons"; -import ReactionPicker from "../../reaction-picker"; -import { draftEventReaction } from "../../../helpers/nostr/reactions"; -import { getEventUID } from "../../../helpers/nostr/events"; -import { useState } from "react"; -import { usePublishEvent } from "../../../providers/global/publish-provider"; +import useEventReactions from "../../../../hooks/use-event-reactions"; +import { AddReactionIcon } from "../../../icons"; +import ReactionPicker from "../../../reaction-picker"; +import { draftEventReaction } from "../../../../helpers/nostr/reactions"; +import { getEventUID } from "../../../../helpers/nostr/event"; +import { usePublishEvent } from "../../../../providers/global/publish-provider"; export default function AddReactionButton({ event, diff --git a/src/components/note/components/note-details-button.tsx b/src/components/note/timeline-note/components/note-details-button.tsx similarity index 62% rename from src/components/note/components/note-details-button.tsx rename to src/components/note/timeline-note/components/note-details-button.tsx index c211dc79f..6a84ddbee 100644 --- a/src/components/note/components/note-details-button.tsx +++ b/src/components/note/timeline-note/components/note-details-button.tsx @@ -1,10 +1,10 @@ import { IconButton, IconButtonProps } from "@chakra-ui/react"; +import { NostrEvent } from "nostr-tools"; -import { NostrEvent } from "../../../types/nostr-event"; -import InfoCircle from "../../icons/info-circle"; -import useEventReactions from "../../../hooks/use-event-reactions"; -import { getEventUID } from "../../../helpers/nostr/events"; -import useEventZaps from "../../../hooks/use-event-zaps"; +import InfoCircle from "../../../icons/info-circle"; +import useEventReactions from "../../../../hooks/use-event-reactions"; +import { getEventUID } from "../../../../helpers/nostr/event"; +import useEventZaps from "../../../../hooks/use-event-zaps"; export function NoteDetailsButton({ event, diff --git a/src/components/note/components/note-proxy-link.tsx b/src/components/note/timeline-note/components/note-proxy-link.tsx similarity index 85% rename from src/components/note/components/note-proxy-link.tsx rename to src/components/note/timeline-note/components/note-proxy-link.tsx index d976696fc..05d0fa64e 100644 --- a/src/components/note/components/note-proxy-link.tsx +++ b/src/components/note/timeline-note/components/note-proxy-link.tsx @@ -1,7 +1,8 @@ import { IconButton, IconButtonProps, Link } from "@chakra-ui/react"; -import { ExternalLinkIcon } from "../../icons"; import { useMemo } from "react"; -import { NostrEvent } from "../../../types/nostr-event"; +import { NostrEvent } from "nostr-tools"; + +import { ExternalLinkIcon } from "../../../icons"; export default function NoteProxyLink({ event, diff --git a/src/components/note/components/note-reactions.tsx b/src/components/note/timeline-note/components/note-reactions.tsx similarity index 70% rename from src/components/note/components/note-reactions.tsx rename to src/components/note/timeline-note/components/note-reactions.tsx index 799e29c77..85fe8238c 100644 --- a/src/components/note/components/note-reactions.tsx +++ b/src/components/note/timeline-note/components/note-reactions.tsx @@ -1,10 +1,10 @@ import { ButtonGroup, ButtonGroupProps, Divider } from "@chakra-ui/react"; +import { NostrEvent } from "nostr-tools"; -import { NostrEvent } from "../../../types/nostr-event"; import AddReactionButton from "./add-reaction-button"; -import EventReactionButtons from "../../event-reactions/event-reactions"; -import useEventReactions from "../../../hooks/use-event-reactions"; -import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; +import EventReactionButtons from "../../../event-reactions/event-reactions"; +import { useBreakpointValue } from "../../../../providers/global/breakpoint-provider"; +import useEventReactions from "../../../../hooks/use-event-reactions"; export default function NoteReactions({ event, ...props }: Omit & { event: NostrEvent }) { const reactions = useEventReactions(event.id) ?? []; diff --git a/src/components/note/components/repost-button.tsx b/src/components/note/timeline-note/components/repost-button.tsx similarity index 80% rename from src/components/note/components/repost-button.tsx rename to src/components/note/timeline-note/components/repost-button.tsx index 60cf93e4e..2693c6035 100644 --- a/src/components/note/components/repost-button.tsx +++ b/src/components/note/timeline-note/components/repost-button.tsx @@ -1,12 +1,12 @@ import { Button, IconButton, useDisclosure } from "@chakra-ui/react"; import { kinds } from "nostr-tools"; -import { NostrEvent } from "../../../types/nostr-event"; -import { RepostIcon } from "../../icons"; -import useEventCount from "../../../hooks/use-event-count"; +import { NostrEvent } from "../../../../types/nostr-event"; +import { RepostIcon } from "../../../icons"; +import useEventCount from "../../../../hooks/use-event-count"; +import useEventExists from "../../../../hooks/use-event-exists"; +import useCurrentAccount from "../../../../hooks/use-current-account"; import RepostModal from "./repost-modal"; -import useEventExists from "../../../hooks/use-event-exists"; -import useCurrentAccount from "../../../hooks/use-current-account"; export default function RepostButton({ event }: { event: NostrEvent }) { const { isOpen, onClose, onOpen } = useDisclosure(); diff --git a/src/components/note/components/repost-modal.tsx b/src/components/note/timeline-note/components/repost-modal.tsx similarity index 84% rename from src/components/note/components/repost-modal.tsx rename to src/components/note/timeline-note/components/repost-modal.tsx index 0ca97d5ec..2603786b3 100644 --- a/src/components/note/components/repost-modal.tsx +++ b/src/components/note/timeline-note/components/repost-modal.tsx @@ -12,20 +12,19 @@ import { SimpleGrid, useDisclosure, } from "@chakra-ui/react"; -import { kinds } from "nostr-tools"; +import { EventTemplate, NostrEvent, kinds } from "nostr-tools"; import dayjs from "dayjs"; import type { AddressPointer } from "nostr-tools/lib/types/nip19"; -import { DraftNostrEvent, NostrEvent } from "../../../types/nostr-event"; -import { EmbedEvent } from "../../embed-event"; -import { ChevronDownIcon, ChevronUpIcon, ExternalLinkIcon } from "../../icons"; -import useUserCommunitiesList from "../../../hooks/use-user-communities-list"; -import useCurrentAccount from "../../../hooks/use-current-account"; -import { createCoordinate } from "../../../services/replaceable-events"; -import relayHintService from "../../../services/event-relay-hint"; -import { usePublishEvent } from "../../../providers/global/publish-provider"; +import { ChevronDownIcon, ChevronUpIcon, ExternalLinkIcon } from "../../../icons"; +import relayHintService from "../../../../services/event-relay-hint"; +import { usePublishEvent } from "../../../../providers/global/publish-provider"; +import useCurrentAccount from "../../../../hooks/use-current-account"; +import useUserCommunitiesList from "../../../../hooks/use-user-communities-list"; +import { createCoordinate } from "../../../../classes/batch-kind-loader"; +import { EmbedEvent } from "../../../embed-event"; -function buildRepost(event: NostrEvent): DraftNostrEvent { +function buildRepost(event: NostrEvent): EventTemplate { const hint = relayHintService.getEventRelayHint(event); const tags: NostrEvent["tags"] = []; tags.push(["e", event.id, hint ?? ""]); diff --git a/src/components/note/index.tsx b/src/components/note/timeline-note/index.tsx similarity index 78% rename from src/components/note/index.tsx rename to src/components/note/timeline-note/index.tsx index feb148895..87a15e3df 100644 --- a/src/components/note/index.tsx +++ b/src/components/note/timeline-note/index.tsx @@ -14,44 +14,44 @@ import { Text, useDisclosure, } from "@chakra-ui/react"; -import { NostrEvent } from "../../types/nostr-event"; -import UserAvatarLink from "../user-avatar-link"; +import { NostrEvent } from "../../../types/nostr-event"; +import UserAvatarLink from "../../user/user-avatar-link"; import { Link as RouterLink } from "react-router-dom"; -import NoteMenu from "./note-menu"; -import UserLink from "../user-link"; -import { UserDnsIdentityIcon } from "../user-dns-identity-icon"; -import NoteZapButton from "./note-zap-button"; -import { ExpandProvider } from "../../providers/local/expanded"; -import useSubject from "../../hooks/use-subject"; -import appSettings from "../../services/settings/app-settings"; -import EventVerificationIcon from "../event-verification-icon"; +import NoteMenu from "../note-menu"; +import UserLink from "../../user/user-link"; +import { UserDnsIdentityIcon } from "../../user/user-dns-identity-icon"; +import NoteZapButton from "../note-zap-button"; +import { ExpandProvider } from "../../../providers/local/expanded"; +import useSubject from "../../../hooks/use-subject"; +import appSettings from "../../../services/settings/app-settings"; +import EventVerificationIcon from "../../common-event/event-verification-icon"; import RepostButton from "./components/repost-button"; -import QuoteRepostButton from "./components/quote-repost-button"; -import { ReplyIcon } from "../icons"; +import QuoteRepostButton from "../quote-repost-button"; +import { ReplyIcon } from "../../icons"; import NoteContentWithWarning from "./note-content-with-warning"; -import { TrustProvider } from "../../providers/local/trust"; -import { useRegisterIntersectionEntity } from "../../providers/local/intersection-observer"; -import BookmarkButton from "./components/bookmark-button"; -import useCurrentAccount from "../../hooks/use-current-account"; +import { TrustProvider } from "../../../providers/local/trust"; +import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; +import BookmarkButton from "../bookmark-button"; +import useCurrentAccount from "../../../hooks/use-current-account"; import NoteReactions from "./components/note-reactions"; -import ReplyForm from "../../views/thread/components/reply-form"; -import { getThreadReferences, truncatedId } from "../../helpers/nostr/events"; -import Timestamp from "../timestamp"; +import ReplyForm from "../../../views/thread/components/reply-form"; +import { getThreadReferences, truncatedId } from "../../../helpers/nostr/event"; +import Timestamp from "../../timestamp"; import OpenInDrawerButton from "../open-in-drawer-button"; -import { getSharableEventAddress } from "../../helpers/nip19"; -import { useBreakpointValue } from "../../providers/global/breakpoint-provider"; -import HoverLinkOverlay from "../hover-link-overlay"; +import { getSharableEventAddress } from "../../../helpers/nip19"; +import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; +import HoverLinkOverlay from "../../hover-link-overlay"; import NoteCommunityMetadata from "./note-community-metadata"; -import useSingleEvent from "../../hooks/use-single-event"; -import { CompactNoteContent } from "../compact-note-content"; +import useSingleEvent from "../../../hooks/use-single-event"; +import { CompactNoteContent } from "../../compact-note-content"; import NoteProxyLink from "./components/note-proxy-link"; import { NoteDetailsButton } from "./components/note-details-button"; -import EventInteractionDetailsModal from "../event-interactions-modal"; -import singleEventService from "../../services/single-event"; +import EventInteractionDetailsModal from "../../event-interactions-modal"; +import singleEventService from "../../../services/single-event"; import { AddressPointer, EventPointer } from "nostr-tools/lib/types/nip19"; import { nip19 } from "nostr-tools"; -import POWIcon from "../pow-icon"; +import POWIcon from "../../pow/pow-icon"; function ReplyToE({ pointer }: { pointer: EventPointer }) { const event = useSingleEvent(pointer.id, pointer.relays); @@ -111,7 +111,7 @@ export type NoteProps = Omit & { registerIntersectionEntity?: boolean; clickable?: boolean; }; -export function Note({ +export function TimelineNote({ event, variant = "outline", showReplyButton, @@ -211,4 +211,4 @@ export function Note({ ); } -export default memo(Note); +export default memo(TimelineNote); diff --git a/src/components/note/note-community-metadata.tsx b/src/components/note/timeline-note/note-community-metadata.tsx similarity index 83% rename from src/components/note/note-community-metadata.tsx rename to src/components/note/timeline-note/note-community-metadata.tsx index c57139285..64a845bca 100644 --- a/src/components/note/note-community-metadata.tsx +++ b/src/components/note/timeline-note/note-community-metadata.tsx @@ -1,9 +1,9 @@ import { useMemo } from "react"; import { Link as RouterLink } from "react-router-dom"; import { Link, Text, TextProps } from "@chakra-ui/react"; +import { NostrEvent } from "nostr-tools"; -import { NostrEvent } from "../../types/nostr-event"; -import { getEventCommunityPointer } from "../../helpers/nostr/communities"; +import { getEventCommunityPointer } from "../../../helpers/nostr/communities"; export default function NoteCommunityMetadata({ event, diff --git a/src/components/note/note-content-with-warning.tsx b/src/components/note/timeline-note/note-content-with-warning.tsx similarity index 56% rename from src/components/note/note-content-with-warning.tsx rename to src/components/note/timeline-note/note-content-with-warning.tsx index d70a3c6d2..bcaedf4ea 100644 --- a/src/components/note/note-content-with-warning.tsx +++ b/src/components/note/timeline-note/note-content-with-warning.tsx @@ -1,9 +1,9 @@ -import { NostrEvent } from "../../types/nostr-event"; +import { NostrEvent } from "nostr-tools"; -import { NoteContents } from "./text-note-contents"; -import { useExpand } from "../../providers/local/expanded"; -import SensitiveContentWarning from "../sensitive-content-warning"; -import useAppSettings from "../../hooks/use-app-settings"; +import { TextNoteContents } from "./text-note-contents"; +import { useExpand } from "../../../providers/local/expanded"; +import SensitiveContentWarning from "../../sensitive-content-warning"; +import useAppSettings from "../../../hooks/use-app-settings"; export default function NoteContentWithWarning({ event }: { event: NostrEvent }) { const expand = useExpand(); @@ -15,6 +15,6 @@ export default function NoteContentWithWarning({ event }: { event: NostrEvent }) return showContentWarning ? ( ) : ( - + ); } diff --git a/src/components/note/text-note-contents.tsx b/src/components/note/timeline-note/text-note-contents.tsx similarity index 77% rename from src/components/note/text-note-contents.tsx rename to src/components/note/timeline-note/text-note-contents.tsx index a0a53c642..b8637d8b7 100644 --- a/src/components/note/text-note-contents.tsx +++ b/src/components/note/timeline-note/text-note-contents.tsx @@ -1,8 +1,8 @@ import React, { Suspense } from "react"; import { Box, BoxProps, Spinner } from "@chakra-ui/react"; +import { EventTemplate, NostrEvent } from "nostr-tools"; -import { DraftNostrEvent, NostrEvent } from "../../types/nostr-event"; -import { EmbedableContent, embedUrls, truncateEmbedableContent } from "../../helpers/embeds"; +import { EmbedableContent, embedUrls, truncateEmbedableContent } from "../../../helpers/embeds"; import { embedLightningInvoice, embedNostrLinks, @@ -27,12 +27,12 @@ import { renderSimpleXLink, renderRedditUrl, embedNipDefinitions, -} from "../embed-types"; -import { LightboxProvider } from "../lightbox-provider"; -import { renderModelUrl } from "../embed-types/model"; -import { renderAudioUrl } from "../embed-types/audio"; + renderAudioUrl, + renderModelUrl, +} from "../../embed-types"; +import { LightboxProvider } from "../../lightbox-provider"; -function buildContents(event: NostrEvent | DraftNostrEvent, simpleLinks = false) { +function buildContents(event: NostrEvent | EventTemplate, simpleLinks = false) { let content: EmbedableContent = [event.content.trim()]; // image gallery @@ -74,14 +74,14 @@ function buildContents(event: NostrEvent | DraftNostrEvent, simpleLinks = false) return content; } -export type NoteContentsProps = { - event: NostrEvent | DraftNostrEvent; +export type TextNoteContentsProps = { + event: NostrEvent | EventTemplate; noOpenGraphLinks?: boolean; maxLength?: number; }; -export const NoteContents = React.memo( - ({ event, noOpenGraphLinks, maxLength, ...props }: NoteContentsProps & Omit) => { +export const TextNoteContents = React.memo( + ({ event, noOpenGraphLinks, maxLength, ...props }: TextNoteContentsProps & Omit) => { let content = buildContents(event, noOpenGraphLinks); if (maxLength !== undefined) { @@ -99,3 +99,5 @@ export const NoteContents = React.memo( ); }, ); + +export default TextNoteContents; diff --git a/src/components/npub-autocomplete.tsx b/src/components/npub-autocomplete.tsx index 6d829f99f..752e71256 100644 --- a/src/components/npub-autocomplete.tsx +++ b/src/components/npub-autocomplete.tsx @@ -5,7 +5,7 @@ import { nip19 } from "nostr-tools"; import { useUserSearchDirectoryContext } from "../providers/global/user-directory-provider"; import userMetadataService from "../services/user-metadata"; -import { getUserDisplayName } from "../helpers/user-metadata"; +import { getUserDisplayName } from "../helpers/nostr/user-metadata"; const NpubAutocomplete = forwardRef(({ value, ...props }, ref) => { const getDirectory = useUserSearchDirectoryContext(); diff --git a/src/components/open-graph-card.tsx b/src/components/open-graph/open-graph-card.tsx similarity index 90% rename from src/components/open-graph-card.tsx rename to src/components/open-graph/open-graph-card.tsx index dec2bf136..758c39c74 100644 --- a/src/components/open-graph-card.tsx +++ b/src/components/open-graph/open-graph-card.tsx @@ -11,8 +11,8 @@ import { LinkOverlay, Text, } from "@chakra-ui/react"; -import useOpenGraphData from "../hooks/use-open-graph-data"; -import { useBreakpointValue } from "../providers/global/breakpoint-provider"; +import useOpenGraphData from "../../hooks/use-open-graph-data"; +import { useBreakpointValue } from "../../providers/global/breakpoint-provider"; export default function OpenGraphCard({ url, ...props }: { url: URL } & Omit) { const { value: data } = useOpenGraphData(url); diff --git a/src/components/open-graph-link.tsx b/src/components/open-graph/open-graph-link.tsx similarity index 85% rename from src/components/open-graph-link.tsx rename to src/components/open-graph/open-graph-link.tsx index 7ce7868b1..b9da1e7aa 100644 --- a/src/components/open-graph-link.tsx +++ b/src/components/open-graph/open-graph-link.tsx @@ -1,5 +1,5 @@ import { Link, LinkProps } from "@chakra-ui/react"; -import useOpenGraphData from "../hooks/use-open-graph-data"; +import useOpenGraphData from "../../hooks/use-open-graph-data"; export default function OpenGraphLink({ url, ...props }: { url: URL } & Omit) { const { value: data } = useOpenGraphData(url); diff --git a/src/components/pagination-controls.tsx b/src/components/pagination-controls.tsx deleted file mode 100644 index 4137010f5..000000000 --- a/src/components/pagination-controls.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import { Button, ButtonGroup, ButtonProps, IconButton } from "@chakra-ui/react"; -import { useMemo } from "react"; -import { usePaginatedList } from "../hooks/use-paginated-list"; -import { ChevronLeftIcon, ChevronRightIcon } from "./icons"; - -const range = (start: number, end: number) => { - let length = end - start + 1; - return Array.from({ length }, (_, idx) => idx + start); -}; - -export type PaginationControlsProps = ReturnType & { - buttonSize?: ButtonProps["size"]; - siblingCount?: number; -}; - -export const PaginationControls = ({ - pageCount, - currentPage, - setPage, - next, - previous, - buttonSize, - siblingCount = 1, -}: PaginationControlsProps) => { - const renderPageButton = (pageNumber: number) => ( - - ); - - // copied from https://www.freecodecamp.org/news/build-a-custom-pagination-component-in-react/ - const renderPageButtons = () => { - // Pages count is determined as siblingCount + firstPage + lastPage + currentPage + 2*DOTS - const totalPageNumbers = siblingCount + 5; - - /* - Case 1: - If the number of pages is less than the page numbers we want to show in our - paginationComponent, we return the range [1..pageCount] - */ - if (totalPageNumbers >= pageCount) { - return range(1, pageCount).map(renderPageButton); - } - - /* - Calculate left and right sibling index and make sure they are within range 1 and pageCount - */ - const leftSiblingIndex = Math.max(currentPage + 1 - siblingCount, 1); - const rightSiblingIndex = Math.min(currentPage + 1 + siblingCount, pageCount); - - /* - We do not show dots just when there is just one page number to be inserted between the extremes of sibling and the page limits i.e 1 and pageCount. Hence we are using leftSiblingIndex > 2 and rightSiblingIndex < pageCount - 2 - */ - const shouldShowLeftDots = leftSiblingIndex > 3; - const shouldShowRightDots = rightSiblingIndex < pageCount - 2; - - const firstPageIndex = 1; - const lastPageIndex = pageCount; - - /* - Case 2: No left dots to show, but rights dots to be shown - */ - if (!shouldShowLeftDots && shouldShowRightDots) { - let leftItemCount = 3 + 2 * siblingCount; - let leftRange = range(1, leftItemCount); - - return [ - ...leftRange.map(renderPageButton), - , - renderPageButton(lastPageIndex), - ]; - } - - /* - Case 3: No right dots to show, but left dots to be shown - */ - if (shouldShowLeftDots && !shouldShowRightDots) { - let rightItemCount = 3 + 2 * siblingCount; - let rightRange = range(pageCount - rightItemCount + 1, pageCount); - return [ - renderPageButton(firstPageIndex), - , - ...rightRange.map(renderPageButton), - ]; - } - - /* - Case 4: Both left and right dots to be shown - */ - if (shouldShowLeftDots && shouldShowRightDots) { - let middleRange = range(leftSiblingIndex, rightSiblingIndex); - return [ - renderPageButton(firstPageIndex), - , - ...middleRange.map(renderPageButton), - , - renderPageButton(lastPageIndex), - ]; - } - }; - - return ( - - } - aria-label="previous" - title="previous" - size={buttonSize} - onClick={previous} - isDisabled={currentPage === 0} - /> - {renderPageButtons()} - } - aria-label="next" - title="next" - size={buttonSize} - onClick={next} - isDisabled={currentPage === pageCount - 1} - /> - - ); -}; diff --git a/src/components/people-list-selection/people-list-selection.tsx b/src/components/people-list-selection/people-list-selection.tsx index d26c1b881..264780697 100644 --- a/src/components/people-list-selection/people-list-selection.tsx +++ b/src/components/people-list-selection/people-list-selection.tsx @@ -18,15 +18,15 @@ import { usePeopleListContext } from "../../providers/local/people-list-provider import useUserLists from "../../hooks/use-user-lists"; import useCurrentAccount from "../../hooks/use-current-account"; import { PEOPLE_LIST_KIND, getListName, getPubkeysFromList } from "../../helpers/nostr/lists"; -import { getEventCoordinate, getEventUID } from "../../helpers/nostr/events"; +import { getEventCoordinate, getEventUID } from "../../helpers/nostr/event"; import useFavoriteLists from "../../hooks/use-favorite-lists"; import { NostrEvent } from "../../types/nostr-event"; import { useCallback, useState } from "react"; import useUserContactList from "../../hooks/use-user-contact-list"; import { useUserSearchDirectoryContext } from "../../providers/global/user-directory-provider"; import { matchSorter } from "match-sorter"; -import UserAvatar from "../user-avatar"; -import UserName from "../user-name"; +import UserAvatar from "../user/user-avatar"; +import UserName from "../user/user-name"; function ListCard({ list, ...props }: { list: NostrEvent } & Omit) { return ( diff --git a/src/components/post-modal/community-select.tsx b/src/components/post-modal/community-select.tsx index 442f822b7..44b729840 100644 --- a/src/components/post-modal/community-select.tsx +++ b/src/components/post-modal/community-select.tsx @@ -6,7 +6,7 @@ import useCurrentAccount from "../../hooks/use-current-account"; import { getCommunityName } from "../../helpers/nostr/communities"; import { AddressPointer } from "nostr-tools/lib/types/nip19"; import useReplaceableEvent from "../../hooks/use-replaceable-event"; -import { getEventCoordinate } from "../../helpers/nostr/events"; +import { getEventCoordinate } from "../../helpers/nostr/event"; function CommunityOption({ pointer }: { pointer: AddressPointer }) { const community = useReplaceableEvent(pointer); diff --git a/src/components/post-modal/index.tsx b/src/components/post-modal/index.tsx index 07a554524..7b6b4ad70 100644 --- a/src/components/post-modal/index.tsx +++ b/src/components/post-modal/index.tsx @@ -29,7 +29,6 @@ import { kinds } from "nostr-tools"; import { ChevronDownIcon, ChevronUpIcon, UploadImageIcon } from "../icons"; import NostrPublishAction from "../../classes/nostr-publish-action"; -import { NoteContents } from "../note/text-note-contents"; import { PublishDetails } from "../publish-details"; import { TrustProvider } from "../../providers/local/trust"; import { @@ -50,10 +49,11 @@ import useCurrentAccount from "../../hooks/use-current-account"; import useCacheForm from "../../hooks/use-cache-form"; import { useTextAreaUploadFileWithForm } from "../../hooks/use-textarea-upload-file"; import { useThrottle } from "react-use"; -import MinePOW from "../mine-pow"; +import MinePOW from "../pow/mine-pow"; import useAppSettings from "../../hooks/use-app-settings"; import { ErrorBoundary } from "../error-boundary"; import { usePublishEvent } from "../../providers/global/publish-provider"; +import { TextNoteContents } from "../note/timeline-note/text-note-contents"; type FormValues = { subject: string; @@ -199,7 +199,7 @@ export default function PostModal({ - + diff --git a/src/components/post-modal/zap-split-creator.tsx b/src/components/post-modal/zap-split-creator.tsx index 7bcff9c10..b10a95a8a 100644 --- a/src/components/post-modal/zap-split-creator.tsx +++ b/src/components/post-modal/zap-split-creator.tsx @@ -16,8 +16,8 @@ import { useForm } from "react-hook-form"; import { EventSplit } from "../../helpers/nostr/zaps"; import { AddIcon } from "../icons"; import { normalizeToHexPubkey } from "../../helpers/nip19"; -import UserAvatar from "../user-avatar"; -import UserLink from "../user-link"; +import UserAvatar from "../user/user-avatar"; +import UserLink from "../user/user-link"; import NpubAutocomplete from "../npub-autocomplete"; function getRemainingPercent(split: EventSplit) { diff --git a/src/components/mine-pow.tsx b/src/components/pow/mine-pow.tsx similarity index 96% rename from src/components/mine-pow.tsx rename to src/components/pow/mine-pow.tsx index d3206c3bf..35c462cb1 100644 --- a/src/components/mine-pow.tsx +++ b/src/components/pow/mine-pow.tsx @@ -2,8 +2,8 @@ import { useRef, useState } from "react"; import { Button, ButtonGroup, Flex, Heading, Progress, Text } from "@chakra-ui/react"; import { getEventHash, nip13 } from "nostr-tools"; -import { DraftNostrEvent } from "../types/nostr-event"; -import CheckCircle from "./icons/check-circle"; +import { DraftNostrEvent } from "../../types/nostr-event"; +import CheckCircle from "../icons/check-circle"; import { useMount } from "react-use"; const BATCH_NUMBER = 1000; diff --git a/src/components/pow-icon.tsx b/src/components/pow/pow-icon.tsx similarity index 66% rename from src/components/pow-icon.tsx rename to src/components/pow/pow-icon.tsx index 286081652..5e1353b6f 100644 --- a/src/components/pow-icon.tsx +++ b/src/components/pow/pow-icon.tsx @@ -1,12 +1,12 @@ import { IconProps, Tooltip } from "@chakra-ui/react"; -import { NostrEvent } from "../types/nostr-event"; +import { NostrEvent } from "../../types/nostr-event"; import { nip13 } from "nostr-tools"; -import Dice1 from "./icons/dice-1"; -import Dice2 from "./icons/dice-2"; -import Dice3 from "./icons/dice-3"; -import Dice4 from "./icons/dice-4"; -import Dice5 from "./icons/dice-5"; -import Dice6 from "./icons/dice-6"; +import Dice1 from "../icons/dice-1"; +import Dice2 from "../icons/dice-2"; +import Dice3 from "../icons/dice-3"; +import Dice4 from "../icons/dice-4"; +import Dice5 from "../icons/dice-5"; +import Dice6 from "../icons/dice-6"; export default function POWIcon({ event, ...props }: IconProps & { event: NostrEvent }) { const pow = nip13.getPow(event.id); diff --git a/src/components/qr-code-scanner-button.tsx b/src/components/qr-code/qr-code-scanner-button.tsx similarity index 94% rename from src/components/qr-code-scanner-button.tsx rename to src/components/qr-code/qr-code-scanner-button.tsx index 2ca961e07..8c1b65cb5 100644 --- a/src/components/qr-code-scanner-button.tsx +++ b/src/components/qr-code/qr-code-scanner-button.tsx @@ -1,6 +1,6 @@ import { IconButton, Spinner, useDisclosure } from "@chakra-ui/react"; import { type QrScannerModalProps } from "./qr-scanner-modal"; -import { QrCodeIcon } from "./icons"; +import { QrCodeIcon } from "../icons"; import { Suspense, lazy } from "react"; const QrScannerModal = lazy(() => import("./qr-scanner-modal")); diff --git a/src/components/qr-code-svg.tsx b/src/components/qr-code/qr-code-svg.tsx similarity index 86% rename from src/components/qr-code-svg.tsx rename to src/components/qr-code/qr-code-svg.tsx index 3151f3946..f063e9793 100644 --- a/src/components/qr-code-svg.tsx +++ b/src/components/qr-code/qr-code-svg.tsx @@ -1,7 +1,7 @@ import { useMemo } from "react"; -import { drawSvgPath } from "../helpers/qrcode"; -import { Ecc, QrCode } from "../lib/qrcodegen"; +import { drawSvgPath } from "../../helpers/qrcode"; +import { Ecc, QrCode } from "../../lib/qrcodegen"; export default function QrCodeSvg({ content, diff --git a/src/components/qr-scanner-modal.tsx b/src/components/qr-code/qr-scanner-modal.tsx similarity index 100% rename from src/components/qr-scanner-modal.tsx rename to src/components/qr-code/qr-scanner-modal.tsx diff --git a/src/components/relay-list-button.tsx b/src/components/relay-list-button.tsx index 64464de34..08ee72b1a 100644 --- a/src/components/relay-list-button.tsx +++ b/src/components/relay-list-button.tsx @@ -14,7 +14,7 @@ import { import { isRTag } from "../types/nostr-event"; import useCurrentAccount from "../hooks/use-current-account"; import useUserRelaySets from "../hooks/use-user-relay-sets"; -import { getEventCoordinate } from "../helpers/nostr/events"; +import { getEventCoordinate } from "../helpers/nostr/event"; import { getListName } from "../helpers/nostr/lists"; import { relayListAddRelay, relayListRemoveRelay } from "../helpers/nostr/relay-list"; import { AddIcon, CheckIcon, ChevronDownIcon, InboxIcon, OutboxIcon, PlusCircleIcon } from "./icons"; diff --git a/src/components/relay-management-drawer/index.tsx b/src/components/relay-management-drawer/index.tsx index 52bac0484..b6e0bc6c1 100644 --- a/src/components/relay-management-drawer/index.tsx +++ b/src/components/relay-management-drawer/index.tsx @@ -30,7 +30,7 @@ import { RelayFavicon } from "../relay-favicon"; import useUserRelaySets from "../../hooks/use-user-relay-sets"; import useCurrentAccount from "../../hooks/use-current-account"; import { getListName } from "../../helpers/nostr/lists"; -import { getEventCoordinate } from "../../helpers/nostr/events"; +import { getEventCoordinate } from "../../helpers/nostr/event"; import AddRelayForm from "../../views/relays/app/add-relay-form"; import { SaveRelaySetForm } from "./save-relay-set-form"; diff --git a/src/components/relay-management-drawer/save-relay-set-form.tsx b/src/components/relay-management-drawer/save-relay-set-form.tsx index 64b51a001..d3dd5bb90 100644 --- a/src/components/relay-management-drawer/save-relay-set-form.tsx +++ b/src/components/relay-management-drawer/save-relay-set-form.tsx @@ -4,7 +4,7 @@ import { useForm } from "react-hook-form"; import { getListDescription, getListName, setListDescription, setListName } from "../../helpers/nostr/lists"; import { isRTag } from "../../types/nostr-event"; -import { cloneEvent, ensureDTag } from "../../helpers/nostr/events"; +import { cloneEvent, ensureDTag } from "../../helpers/nostr/event"; import { createRTagsFromRelaySets } from "../../helpers/nostr/mailbox"; import { usePublishEvent } from "../../providers/global/publish-provider"; diff --git a/src/components/relay-selection/relay-selection-button.tsx b/src/components/relay-selection/relay-selection-button.tsx deleted file mode 100644 index 233f6d9a4..000000000 --- a/src/components/relay-selection/relay-selection-button.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { ButtonProps, IconButton, useDisclosure } from "@chakra-ui/react"; - -import { RelayIcon } from "../icons"; -import RelayManagementDrawer from "../relay-management-drawer"; - -/** @deprecated */ -export default function RelaySelectionButton({ ...props }: ButtonProps) { - const relaysModal = useDisclosure(); - return ( - <> - } - onClick={relaysModal.onOpen} - aria-label="Relays" - title="Relays" - variant="ghost" - {...props} - /> - - - ); -} diff --git a/src/components/relay-selection/relay-selection-modal.tsx b/src/components/relay-selection/relay-selection-modal.tsx deleted file mode 100644 index 421e974b0..000000000 --- a/src/components/relay-selection/relay-selection-modal.tsx +++ /dev/null @@ -1,118 +0,0 @@ -import { useState } from "react"; -import { - Button, - ButtonGroup, - Checkbox, - CheckboxGroup, - Flex, - Modal, - ModalBody, - ModalCloseButton, - ModalContent, - ModalFooter, - ModalHeader, - ModalOverlay, - useToast, -} from "@chakra-ui/react"; - -import { useReadRelays } from "../../hooks/use-client-relays"; -import { RelayFavicon } from "../relay-favicon"; -import { RelayUrlInput } from "../relay-url-input"; -import { unique } from "../../helpers/array"; -import relayScoreboardService from "../../services/relay-scoreboard"; -import { normalizeRelayURL } from "../../helpers/relay"; - -function AddRelayForm({ onSubmit }: { onSubmit: (relay: string) => void }) { - const [url, setUrl] = useState(""); - const toast = useToast(); - - return ( - { - try { - e.preventDefault(); - onSubmit(normalizeRelayURL(url)); - setUrl(""); - } catch (err) { - if (err instanceof Error) { - toast({ status: "error", description: err.message }); - } - } - }} - gap="2" - mb="4" - > - setUrl(e.target.value)} /> - - - ); -} - -const manuallyAddedRelays = new Set(); - -export default function RelaySelectionModal({ - selected, - onClose, - onSubmit, -}: { - selected: string[]; - onSubmit: (relays: string[]) => void; - onClose: () => void; -}) { - const [newSelected, setSelected] = useState(selected); - const relays = useReadRelays([...selected, ...newSelected, ...Array.from(manuallyAddedRelays)]); - - return ( - - - - Select Relays - - - { - setSelected(unique([newRelay, ...newSelected])); - manuallyAddedRelays.add(newRelay); - }} - /> - setSelected(urls.map(String))}> - - {relays.urls.map((url) => ( - - {url} - - ))} - - - - - - - - - - - - - - - - ); -} diff --git a/src/components/back-button.tsx b/src/components/router/back-button.tsx similarity index 90% rename from src/components/back-button.tsx rename to src/components/router/back-button.tsx index bad0dad71..9155e1b43 100644 --- a/src/components/back-button.tsx +++ b/src/components/router/back-button.tsx @@ -1,5 +1,5 @@ import { IconButton, IconButtonProps } from "@chakra-ui/react"; -import { ChevronLeftIcon } from "./icons"; +import { ChevronLeftIcon } from "../icons"; import { useNavigate } from "react-router-dom"; export default function BackButton({ ...props }: Omit) { diff --git a/src/components/search-modal/index.tsx b/src/components/search-modal/index.tsx index 0f842b64e..2dff1f5c1 100644 --- a/src/components/search-modal/index.tsx +++ b/src/components/search-modal/index.tsx @@ -6,9 +6,9 @@ import { matchSorter } from "match-sorter"; import { nip19 } from "nostr-tools"; import { useUserSearchDirectoryContext } from "../../providers/global/user-directory-provider"; -import UserAvatar from "../user-avatar"; +import UserAvatar from "../user/user-avatar"; import { useUserMetadata } from "../../hooks/use-user-metadata"; -import { getUserDisplayName } from "../../helpers/user-metadata"; +import { getUserDisplayName } from "../../helpers/nostr/user-metadata"; function UserOption({ pubkey }: { pubkey: string }) { const metadata = useUserMetadata(pubkey); diff --git a/src/components/setup/index.tsx b/src/components/setup/index.tsx deleted file mode 100644 index 578d42b76..000000000 --- a/src/components/setup/index.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useEffect } from "react"; -import { - Button, - Modal, - ModalBody, - ModalCloseButton, - ModalContent, - ModalFooter, - ModalHeader, - ModalOverlay, - useDisclosure, -} from "@chakra-ui/react"; -import { useReadRelays } from "../../hooks/use-client-relays"; - -export default function Setup() { - const relaysModal = useDisclosure(); - - const readRelays = useReadRelays(); - useEffect(() => (readRelays.size === 0 ? relaysModal.onOpen() : relaysModal.onClose()), [readRelays]); - - return ( - <> - - - - Setup Relays - - - - - - - - - - - ); -} diff --git a/src/components/timeline-page/generic-note-timeline/article-note.tsx b/src/components/timeline-page/generic-note-timeline/article-note.tsx index 6f981cf03..151a9944b 100644 --- a/src/components/timeline-page/generic-note-timeline/article-note.tsx +++ b/src/components/timeline-page/generic-note-timeline/article-note.tsx @@ -4,7 +4,7 @@ import { Box } from "@chakra-ui/react"; import { NostrEvent } from "../../../types/nostr-event"; import EmbeddedArticle from "../../embed-event/event-types/embedded-article"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; function ArticleNote({ article }: { article: NostrEvent }) { const ref = useRef(null); diff --git a/src/components/timeline-page/generic-note-timeline/index.tsx b/src/components/timeline-page/generic-note-timeline/index.tsx index e8144b033..1210ce910 100644 --- a/src/components/timeline-page/generic-note-timeline/index.tsx +++ b/src/components/timeline-page/generic-note-timeline/index.tsx @@ -6,7 +6,7 @@ import { useLocation } from "react-router-dom"; import useSubject from "../../../hooks/use-subject"; import TimelineLoader from "../../../classes/timeline-loader"; import { NostrEvent } from "../../../types/nostr-event"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { ExtendedIntersectionObserverEntry, useIntersectionObserver, diff --git a/src/components/timeline-page/generic-note-timeline/relay-recommendation.tsx b/src/components/timeline-page/generic-note-timeline/relay-recommendation.tsx index 6787b269d..5b73027da 100644 --- a/src/components/timeline-page/generic-note-timeline/relay-recommendation.tsx +++ b/src/components/timeline-page/generic-note-timeline/relay-recommendation.tsx @@ -2,8 +2,8 @@ import { useRef } from "react"; import { Flex, Text } from "@chakra-ui/react"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatar from "../../user-avatar"; -import UserLink from "../../user-link"; +import UserAvatar from "../../user/user-avatar"; +import UserLink from "../../user/user-link"; import RelayCard from "../../../views/relays/components/relay-card"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import { safeRelayUrl } from "../../../helpers/relay"; diff --git a/src/components/timeline-page/generic-note-timeline/reply-note.tsx b/src/components/timeline-page/generic-note-timeline/reply-note.tsx index fe5fb9957..353bd2120 100644 --- a/src/components/timeline-page/generic-note-timeline/reply-note.tsx +++ b/src/components/timeline-page/generic-note-timeline/reply-note.tsx @@ -2,7 +2,7 @@ import { memo, useRef } from "react"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import Note from "../../note"; +import TimelineNote from "../../note/timeline-note"; import { getEventUID } from "nostr-idb"; function ReplyNote({ event }: { event: NostrEvent }) { @@ -11,7 +11,7 @@ function ReplyNote({ event }: { event: NostrEvent }) { return (
- +
); } diff --git a/src/components/timeline-page/generic-note-timeline/repost-event.tsx b/src/components/timeline-page/generic-note-timeline/repost-event.tsx index 103d202cc..abfc74bbb 100644 --- a/src/components/timeline-page/generic-note-timeline/repost-event.tsx +++ b/src/components/timeline-page/generic-note-timeline/repost-event.tsx @@ -4,19 +4,19 @@ import { kinds, nip18 } from "nostr-tools"; import { Link as RouterLink } from "react-router-dom"; import { NostrEvent } from "../../../types/nostr-event"; -import { Note } from "../../note"; -import NoteMenu from "../../note/note-menu"; -import UserAvatar from "../../user-avatar"; -import { UserDnsIdentityIcon } from "../../user-dns-identity-icon"; -import UserLink from "../../user-link"; +import TimelineNote from "../../note/timeline-note"; +import UserAvatar from "../../user/user-avatar"; +import { UserDnsIdentityIcon } from "../../user/user-dns-identity-icon"; +import UserLink from "../../user/user-link"; import { TrustProvider } from "../../../providers/local/trust"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import useSingleEvent from "../../../hooks/use-single-event"; import { EmbedEvent } from "../../embed-event"; import useUserMuteFilter from "../../../hooks/use-user-mute-filter"; -import { parseHardcodedNoteContent } from "../../../helpers/nostr/events"; +import { parseHardcodedNoteContent } from "../../../helpers/nostr/event"; import { getEventCommunityPointer } from "../../../helpers/nostr/communities"; import LoadingNostrLink from "../../loading-nostr-link"; +import NoteMenu from "../../note/note-menu"; function RepostEvent({ event }: { event: NostrEvent }) { const muteFilter = useUserMuteFilter(); @@ -60,7 +60,7 @@ function RepostEvent({ event }: { event: NostrEvent }) { ) : note.kind === kinds.ShortTextNote ? ( // NOTE: tell the note not to register itself with the intersection observer. since this is an older note it will break the order of the timeline - + ) : ( )} diff --git a/src/components/timeline-page/generic-note-timeline/stream-note.tsx b/src/components/timeline-page/generic-note-timeline/stream-note.tsx index 35beca7f9..c4c356eba 100644 --- a/src/components/timeline-page/generic-note-timeline/stream-note.tsx +++ b/src/components/timeline-page/generic-note-timeline/stream-note.tsx @@ -20,13 +20,13 @@ import { NostrEvent } from "../../../types/nostr-event"; import { parseStreamEvent } from "../../../helpers/nostr/stream"; import useEventNaddr from "../../../hooks/use-event-naddr"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import UserAvatar from "../../user-avatar"; -import UserLink from "../../user-link"; +import UserAvatar from "../../user/user-avatar"; +import UserLink from "../../user/user-link"; import StreamStatusBadge from "../../../views/streams/components/status-badge"; -import { EventRelays } from "../../note/note-relays"; import { useAsync } from "react-use"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import Timestamp from "../../timestamp"; +import { EventRelays } from "../../note/event-relays"; export default function StreamNote({ event, ...props }: CardProps & { event: NostrEvent }) { const { value: stream, error } = useAsync(async () => parseStreamEvent(event), [event]); diff --git a/src/components/timeline-page/generic-note-timeline/timeline-item.tsx b/src/components/timeline-page/generic-note-timeline/timeline-item.tsx index 8845194ea..e52010d7a 100644 --- a/src/components/timeline-page/generic-note-timeline/timeline-item.tsx +++ b/src/components/timeline-page/generic-note-timeline/timeline-item.tsx @@ -4,18 +4,18 @@ import { Box, Text } from "@chakra-ui/react"; import { ErrorBoundary } from "../../error-boundary"; import ReplyNote from "./reply-note"; -import Note from "../../note"; import RepostEvent from "./repost-event"; import ArticleNote from "./article-note"; import StreamNote from "./stream-note"; import RelayRecommendation from "./relay-recommendation"; import BadgeAwardCard from "../../../views/badges/components/badge-award-card"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { getEventUID, isReply } from "../../../helpers/nostr/events"; +import { getEventUID, isReply } from "../../../helpers/nostr/event"; import { STREAM_KIND } from "../../../helpers/nostr/stream"; import { NostrEvent } from "../../../types/nostr-event"; import { FLARE_VIDEO_KIND } from "../../../helpers/nostr/flare"; import EmbeddedFlareVideo from "../../embed-event/event-types/embedded-flare-video"; +import { TimelineNote } from "../../note/timeline-note"; function TimelineItem({ event, visible, minHeight }: { event: NostrEvent; visible: boolean; minHeight?: number }) { const ref = useRef(null); @@ -24,7 +24,7 @@ function TimelineItem({ event, visible, minHeight }: { event: NostrEvent; visibl let content: ReactNode | null = null; switch (event.kind) { case kinds.ShortTextNote: - content = isReply(event) ? : ; + content = isReply(event) ? : ; break; case kinds.Repost: case kinds.GenericRepost: diff --git a/src/components/timeline-page/media-timeline/index.tsx b/src/components/timeline-page/media-timeline/index.tsx index 3bca48586..84b65d93b 100644 --- a/src/components/timeline-page/media-timeline/index.tsx +++ b/src/components/timeline-page/media-timeline/index.tsx @@ -12,7 +12,7 @@ import { TrustProvider } from "../../../providers/local/trust"; import PhotoGallery, { PhotoWithoutSize } from "../../photo-gallery"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import { NostrEvent } from "../../../types/nostr-event"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; function CustomGalleryImage({ event, ...props }: EmbeddedImageProps & { event: NostrEvent }) { diff --git a/src/components/timeline-page/timeline-health/index.tsx b/src/components/timeline-page/timeline-health/index.tsx index a2e1bdf98..81f8c078e 100644 --- a/src/components/timeline-page/timeline-health/index.tsx +++ b/src/components/timeline-page/timeline-health/index.tsx @@ -21,9 +21,9 @@ import { getEventRelays } from "../../../services/event-relays"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import { RelayFavicon } from "../../relay-favicon"; -import { NoteLink } from "../../note-link"; +import { NoteLink } from "../../note/note-link"; import { BroadcastEventIcon } from "../../icons"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import Timestamp from "../../timestamp"; import { usePublishEvent } from "../../../providers/global/publish-provider"; diff --git a/src/components/user-avatar-link.tsx b/src/components/user/user-avatar-link.tsx similarity index 100% rename from src/components/user-avatar-link.tsx rename to src/components/user/user-avatar-link.tsx diff --git a/src/components/user-avatar.tsx b/src/components/user/user-avatar.tsx similarity index 83% rename from src/components/user-avatar.tsx rename to src/components/user/user-avatar.tsx index 9beb1c08b..d84eed70b 100644 --- a/src/components/user-avatar.tsx +++ b/src/components/user/user-avatar.tsx @@ -2,13 +2,13 @@ import { forwardRef, memo, useMemo } from "react"; import { Avatar, AvatarProps } from "@chakra-ui/react"; import { useAsync } from "react-use"; -import { useUserMetadata } from "../hooks/use-user-metadata"; -import { getIdenticon } from "../helpers/identicon"; -import { safeUrl } from "../helpers/parse"; -import { Kind0ParsedContent, getUserDisplayName } from "../helpers/user-metadata"; -import useAppSettings from "../hooks/use-app-settings"; -import useCurrentAccount from "../hooks/use-current-account"; -import { buildImageProxyURL } from "../helpers/image"; +import { useUserMetadata } from "../../hooks/use-user-metadata"; +import { getIdenticon } from "../../helpers/identicon"; +import { safeUrl } from "../../helpers/parse"; +import { Kind0ParsedContent, getUserDisplayName } from "../../helpers/nostr/user-metadata"; +import useAppSettings from "../../hooks/use-app-settings"; +import useCurrentAccount from "../../hooks/use-current-account"; +import { buildImageProxyURL } from "../../helpers/image"; export const UserIdenticon = memo(({ pubkey }: { pubkey: string }) => { const { value: identicon } = useAsync(() => getIdenticon(pubkey), [pubkey]); diff --git a/src/components/user-dns-identity-icon.tsx b/src/components/user/user-dns-identity-icon.tsx similarity index 87% rename from src/components/user-dns-identity-icon.tsx rename to src/components/user/user-dns-identity-icon.tsx index e5ee5fd10..c930f7214 100644 --- a/src/components/user-dns-identity-icon.tsx +++ b/src/components/user/user-dns-identity-icon.tsx @@ -1,8 +1,8 @@ import { Text, Tooltip } from "@chakra-ui/react"; -import { useDnsIdentity } from "../hooks/use-dns-identity"; -import { useUserMetadata } from "../hooks/use-user-metadata"; -import { VerificationFailed, VerificationMissing, VerifiedIcon } from "./icons"; +import { useDnsIdentity } from "../../hooks/use-dns-identity"; +import { useUserMetadata } from "../../hooks/use-user-metadata"; +import { VerificationFailed, VerificationMissing, VerifiedIcon } from "../icons"; export const UserDnsIdentityIcon = ({ pubkey, onlyIcon }: { pubkey: string; onlyIcon?: boolean }) => { const metadata = useUserMetadata(pubkey); diff --git a/src/components/user-follow-button.tsx b/src/components/user/user-follow-button.tsx similarity index 88% rename from src/components/user-follow-button.tsx rename to src/components/user/user-follow-button.tsx index ef1f890d1..f6b972a1d 100644 --- a/src/components/user-follow-button.tsx +++ b/src/components/user/user-follow-button.tsx @@ -12,9 +12,9 @@ import { useDisclosure, } from "@chakra-ui/react"; -import useCurrentAccount from "../hooks/use-current-account"; -import { ChevronDownIcon, FollowIcon, MuteIcon, PlusCircleIcon, UnfollowIcon, UnmuteIcon } from "./icons"; -import useUserLists from "../hooks/use-user-lists"; +import useCurrentAccount from "../../hooks/use-current-account"; +import { ChevronDownIcon, FollowIcon, MuteIcon, PlusCircleIcon, UnfollowIcon, UnmuteIcon } from "../icons"; +import useUserLists from "../../hooks/use-user-lists"; import { PEOPLE_LIST_KIND, createEmptyContactList, @@ -23,15 +23,15 @@ import { getListName, getPubkeysFromList, isPubkeyInList, -} from "../helpers/nostr/lists"; -import { getEventCoordinate } from "../helpers/nostr/events"; -import { useSigningContext } from "../providers/global/signing-provider"; -import useUserContactList from "../hooks/use-user-contact-list"; -import useAsyncErrorHandler from "../hooks/use-async-error-handler"; -import NewListModal from "../views/lists/components/new-list-modal"; -import useUserMuteActions from "../hooks/use-user-mute-actions"; -import { useMuteModalContext } from "../providers/route/mute-modal-provider"; -import { usePublishEvent } from "../providers/global/publish-provider"; +} from "../../helpers/nostr/lists"; +import { getEventCoordinate } from "../../helpers/nostr/event"; +import { useSigningContext } from "../../providers/global/signing-provider"; +import useUserContactList from "../../hooks/use-user-contact-list"; +import useAsyncErrorHandler from "../../hooks/use-async-error-handler"; +import NewListModal from "../../views/lists/components/new-list-modal"; +import useUserMuteActions from "../../hooks/use-user-mute-actions"; +import { useMuteModalContext } from "../../providers/route/mute-modal-provider"; +import { usePublishEvent } from "../../providers/global/publish-provider"; function UsersLists({ pubkey }: { pubkey: string }) { const publish = usePublishEvent(); diff --git a/src/components/user-link.tsx b/src/components/user/user-link.tsx similarity index 73% rename from src/components/user-link.tsx rename to src/components/user/user-link.tsx index 0efdeb358..79404df12 100644 --- a/src/components/user-link.tsx +++ b/src/components/user/user-link.tsx @@ -2,10 +2,10 @@ import { Link, LinkProps } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; import { nip19 } from "nostr-tools"; -import { getUserDisplayName } from "../helpers/user-metadata"; -import { useUserMetadata } from "../hooks/use-user-metadata"; -import useAppSettings from "../hooks/use-app-settings"; -import useCurrentAccount from "../hooks/use-current-account"; +import { getUserDisplayName } from "../../helpers/nostr/user-metadata"; +import { useUserMetadata } from "../../hooks/use-user-metadata"; +import useAppSettings from "../../hooks/use-app-settings"; +import useCurrentAccount from "../../hooks/use-current-account"; export type UserLinkProps = LinkProps & { pubkey: string; diff --git a/src/components/user-name.tsx b/src/components/user/user-name.tsx similarity index 68% rename from src/components/user-name.tsx rename to src/components/user/user-name.tsx index ad4dfc483..604d98f71 100644 --- a/src/components/user-name.tsx +++ b/src/components/user/user-name.tsx @@ -1,8 +1,8 @@ import { Text, TextProps } from "@chakra-ui/react"; -import { getUserDisplayName } from "../helpers/user-metadata"; -import { useUserMetadata } from "../hooks/use-user-metadata"; -import useAppSettings from "../hooks/use-app-settings"; +import { getUserDisplayName } from "../../helpers/nostr/user-metadata"; +import { useUserMetadata } from "../../hooks/use-user-metadata"; +import useAppSettings from "../../hooks/use-app-settings"; export default function UserName({ pubkey, ...props }: Omit & { pubkey: string }) { const metadata = useUserMetadata(pubkey); diff --git a/src/helpers/nip19.ts b/src/helpers/nip19.ts index d2bfaa2f0..61909ab97 100644 --- a/src/helpers/nip19.ts +++ b/src/helpers/nip19.ts @@ -1,7 +1,7 @@ import { getPublicKey, nip19 } from "nostr-tools"; import { NostrEvent, Tag, isATag, isDTag, isETag, isPTag } from "../types/nostr-event"; -import { isReplaceable } from "./nostr/events"; +import { isReplaceable } from "./nostr/event"; import relayHintService from "../services/event-relay-hint"; import { safeRelayUrls } from "./relay"; diff --git a/src/helpers/nostr/communities.ts b/src/helpers/nostr/communities.ts index c581099cc..2a7518ff0 100644 --- a/src/helpers/nostr/communities.ts +++ b/src/helpers/nostr/communities.ts @@ -2,7 +2,7 @@ import { kinds, validateEvent } from "nostr-tools"; import { NostrEvent, isATag, isDTag, isETag, isPTag } from "../../types/nostr-event"; import { getMatchLink, getMatchNostrLink } from "../regexp"; import { ReactionGroup } from "./reactions"; -import { parseCoordinate } from "./events"; +import { parseCoordinate } from "./event"; /** @deprecated */ export const SUBSCRIBED_COMMUNITIES_LIST_IDENTIFIER = "communities"; diff --git a/src/helpers/nostr/dms.ts b/src/helpers/nostr/dms.ts index 4a6eb52c7..7b444a6d1 100644 --- a/src/helpers/nostr/dms.ts +++ b/src/helpers/nostr/dms.ts @@ -1,6 +1,6 @@ import dayjs from "dayjs"; import { NostrEvent, isPTag } from "../../types/nostr-event"; -import { sortByDate } from "./events"; +import { sortByDate } from "./event"; export function getDMSender(event: NostrEvent) { return event.pubkey; diff --git a/src/helpers/nostr/events.ts b/src/helpers/nostr/event.ts similarity index 100% rename from src/helpers/nostr/events.ts rename to src/helpers/nostr/event.ts diff --git a/src/helpers/nostr/lists.ts b/src/helpers/nostr/lists.ts index 64ceb17b9..1f47822c6 100644 --- a/src/helpers/nostr/lists.ts +++ b/src/helpers/nostr/lists.ts @@ -2,7 +2,7 @@ import dayjs from "dayjs"; import { kinds, nip19 } from "nostr-tools"; import { DraftNostrEvent, NostrEvent, PTag, isATag, isDTag, isETag, isPTag, isRTag } from "../../types/nostr-event"; -import { parseCoordinate, replaceOrAddSimpleTag } from "./events"; +import { parseCoordinate, replaceOrAddSimpleTag } from "./event"; import { getRelayVariations, safeRelayUrls } from "../relay"; export const MUTE_LIST_KIND = 10000; diff --git a/src/helpers/nostr/mailbox.ts b/src/helpers/nostr/mailbox.ts index 4846d3d65..6c3e2aac0 100644 --- a/src/helpers/nostr/mailbox.ts +++ b/src/helpers/nostr/mailbox.ts @@ -2,7 +2,7 @@ import { kinds } from "nostr-tools"; import { RelayMode } from "../../classes/relay"; import { DraftNostrEvent, NostrEvent, RTag, Tag, isRTag } from "../../types/nostr-event"; import { safeRelayUrl } from "../relay"; -import { cloneEvent } from "./events"; +import { cloneEvent } from "./event"; /** fixes or removes any bad r tags */ export function cleanRTags(tags: Tag[]) { diff --git a/src/helpers/nostr/post.ts b/src/helpers/nostr/post.ts index b89bf23ef..ccecc643c 100644 --- a/src/helpers/nostr/post.ts +++ b/src/helpers/nostr/post.ts @@ -1,6 +1,6 @@ import { DraftNostrEvent, NostrEvent, Tag, isETag, isPTag } from "../../types/nostr-event"; import { getMatchEmoji, getMatchHashtag, getMatchNostrLink } from "../regexp"; -import { addPubkeyRelayHints, getThreadReferences } from "./events"; +import { addPubkeyRelayHints, getThreadReferences } from "./event"; import { getPubkeyFromDecodeResult, safeDecode } from "../nip19"; import { Emoji } from "../../providers/global/emoji-provider"; import { EventSplit } from "./zaps"; diff --git a/src/helpers/nostr/reactions.ts b/src/helpers/nostr/reactions.ts index 9807c6df9..bb830c45b 100644 --- a/src/helpers/nostr/reactions.ts +++ b/src/helpers/nostr/reactions.ts @@ -1,7 +1,7 @@ import { kinds } from "nostr-tools"; import { DraftNostrEvent, NostrEvent, Tag } from "../../types/nostr-event"; import dayjs from "dayjs"; -import { getEventCoordinate, isReplaceable } from "./events"; +import { getEventCoordinate, isReplaceable } from "./event"; export type ReactionGroup = { emoji: string; url?: string; name?: string; count: number; pubkeys: string[] }; diff --git a/src/helpers/nostr/stream.ts b/src/helpers/nostr/stream.ts index 66ecc7965..5a732d9b3 100644 --- a/src/helpers/nostr/stream.ts +++ b/src/helpers/nostr/stream.ts @@ -2,7 +2,7 @@ import dayjs from "dayjs"; import { DraftNostrEvent, NostrEvent, isPTag } from "../../types/nostr-event"; import { unique } from "../array"; import { ensureNotifyContentMentions } from "./post"; -import { createCoordinate } from "../../services/replaceable-events"; +import { getEventCoordinate } from "./event"; export const STREAM_KIND = 30311; export const STREAM_CHAT_MESSAGE_KIND = 1311; @@ -87,7 +87,7 @@ export function parseStreamEvent(stream: NostrEvent): ParsedStream { } export function getATag(stream: ParsedStream) { - return createCoordinate(stream.event.kind, stream.author, stream.identifier); + return getEventCoordinate(stream.event); } export function buildChatMessage(stream: ParsedStream, content: string) { diff --git a/src/helpers/user-metadata.ts b/src/helpers/nostr/user-metadata.ts similarity index 91% rename from src/helpers/user-metadata.ts rename to src/helpers/nostr/user-metadata.ts index 28b6328d3..c972c3ac9 100644 --- a/src/helpers/user-metadata.ts +++ b/src/helpers/nostr/user-metadata.ts @@ -1,6 +1,5 @@ -import { nip19 } from "nostr-tools"; -import { NostrEvent } from "../types/nostr-event"; -import { truncatedId } from "./nostr/events"; +import { NostrEvent, nip19 } from "nostr-tools"; +import { truncatedId } from "./event"; export type Kind0ParsedContent = { pubkey?: string; diff --git a/src/helpers/nostr/zaps.ts b/src/helpers/nostr/zaps.ts index 96ba7861d..48e497c22 100644 --- a/src/helpers/nostr/zaps.ts +++ b/src/helpers/nostr/zaps.ts @@ -2,7 +2,7 @@ import { bech32 } from "@scure/base"; import { isETag, isPTag, NostrEvent } from "../../types/nostr-event"; import { ParsedInvoice, parsePaymentRequest } from "../bolt11"; -import { Kind0ParsedContent } from "../user-metadata"; +import { Kind0ParsedContent } from "./user-metadata"; import { utils } from "nostr-tools"; // based on https://github.com/nbd-wtf/nostr-tools/blob/master/nip57.ts diff --git a/src/helpers/notification.ts b/src/helpers/notification.ts index 64cc5a931..936023e5d 100644 --- a/src/helpers/notification.ts +++ b/src/helpers/notification.ts @@ -1,6 +1,6 @@ import SuperMap from "../classes/super-map"; import { NostrEvent } from "../types/nostr-event"; -import { getThreadReferences, sortByDate } from "./nostr/events"; +import { getThreadReferences, sortByDate } from "./nostr/event"; const DAY_IN_SECONDS = 60 * 60 * 24; diff --git a/src/helpers/thread.ts b/src/helpers/thread.ts index e6b1f4e69..51cbfc8e7 100644 --- a/src/helpers/thread.ts +++ b/src/helpers/thread.ts @@ -1,5 +1,5 @@ import { NostrEvent } from "../types/nostr-event"; -import { EventReferences, getThreadReferences } from "./nostr/events"; +import { EventReferences, getThreadReferences } from "./nostr/event"; export function countReplies(replies: ThreadItem[]): number { return replies.reduce((c, item) => c + countReplies(item.replies), 0) + replies.length; diff --git a/src/hooks/use-count-community-members.ts b/src/hooks/use-count-community-members.ts index 1ab222a42..9c7262e28 100644 --- a/src/hooks/use-count-community-members.ts +++ b/src/hooks/use-count-community-members.ts @@ -1,4 +1,4 @@ -import { getEventCoordinate } from "../helpers/nostr/events"; +import { getEventCoordinate } from "../helpers/nostr/event"; import { COMMUNITIES_LIST_KIND } from "../helpers/nostr/lists"; import { NostrEvent } from "../types/nostr-event"; import useEventCount from "./use-event-count"; diff --git a/src/hooks/use-event-bookmark-actions.ts b/src/hooks/use-event-bookmark-actions.ts index 41d4c1146..c9d5c415d 100644 --- a/src/hooks/use-event-bookmark-actions.ts +++ b/src/hooks/use-event-bookmark-actions.ts @@ -4,7 +4,7 @@ import dayjs from "dayjs"; import { DraftNostrEvent, NostrEvent } from "../types/nostr-event"; import { useSigningContext } from "../providers/global/signing-provider"; import userUserBookmarksList from "./use-user-bookmarks-list"; -import { getEventCoordinate, isReplaceable, pointerMatchEvent } from "../helpers/nostr/events"; +import { getEventCoordinate, isReplaceable, pointerMatchEvent } from "../helpers/nostr/event"; import { BOOKMARK_LIST_KIND, listAddCoordinate, diff --git a/src/hooks/use-params-address-pointer.ts b/src/hooks/use-params-address-pointer.ts index d2f3ee165..478d9f9eb 100644 --- a/src/hooks/use-params-address-pointer.ts +++ b/src/hooks/use-params-address-pointer.ts @@ -2,7 +2,7 @@ import { useParams } from "react-router-dom"; import { nip19 } from "nostr-tools"; import type { AddressPointer } from "nostr-tools/lib/types/nip19"; -import { CustomAddressPointer, parseCoordinate } from "../helpers/nostr/events"; +import { CustomAddressPointer, parseCoordinate } from "../helpers/nostr/event"; export default function useParamsAddressPointer(key: string): AddressPointer; export default function useParamsAddressPointer(key: string, requireD: true): AddressPointer; diff --git a/src/hooks/use-replaceable-event.ts b/src/hooks/use-replaceable-event.ts index 67816fa91..0c99f3c44 100644 --- a/src/hooks/use-replaceable-event.ts +++ b/src/hooks/use-replaceable-event.ts @@ -2,7 +2,7 @@ import { useMemo } from "react"; import { useReadRelays } from "./use-client-relays"; import replaceableEventsService, { RequestOptions } from "../services/replaceable-events"; -import { CustomAddressPointer, parseCoordinate } from "../helpers/nostr/events"; +import { CustomAddressPointer, parseCoordinate } from "../helpers/nostr/event"; import useSubject from "./use-subject"; export default function useReplaceableEvent( diff --git a/src/hooks/use-replaceable-events.ts b/src/hooks/use-replaceable-events.ts index 4c01b5d34..c9f9f1ea2 100644 --- a/src/hooks/use-replaceable-events.ts +++ b/src/hooks/use-replaceable-events.ts @@ -2,7 +2,7 @@ import { useMemo } from "react"; import { useReadRelays } from "./use-client-relays"; import replaceableEventsService, { RequestOptions } from "../services/replaceable-events"; -import { CustomAddressPointer, parseCoordinate } from "../helpers/nostr/events"; +import { CustomAddressPointer, parseCoordinate } from "../helpers/nostr/event"; import Subject from "../classes/subject"; import { NostrEvent } from "../types/nostr-event"; import useSubjects from "./use-subjects"; diff --git a/src/hooks/use-thread-timeline-loader.ts b/src/hooks/use-thread-timeline-loader.ts index 3e0e91695..b08bab705 100644 --- a/src/hooks/use-thread-timeline-loader.ts +++ b/src/hooks/use-thread-timeline-loader.ts @@ -5,7 +5,7 @@ import useSubject from "./use-subject"; import useSingleEvent from "./use-single-event"; import singleEventService from "../services/single-event"; import useTimelineLoader from "./use-timeline-loader"; -import { getThreadReferences } from "../helpers/nostr/events"; +import { getThreadReferences } from "../helpers/nostr/event"; import { NostrEvent } from "../types/nostr-event"; import { unique } from "../helpers/array"; diff --git a/src/hooks/use-user-network.ts b/src/hooks/use-user-network.ts index 5e32704ea..509af2bf2 100644 --- a/src/hooks/use-user-network.ts +++ b/src/hooks/use-user-network.ts @@ -7,7 +7,7 @@ import replaceableEventsService from "../services/replaceable-events"; import { useReadRelays } from "./use-client-relays"; import useSubjects from "./use-subjects"; import userMetadataService from "../services/user-metadata"; -import { Kind0ParsedContent } from "../helpers/user-metadata"; +import { Kind0ParsedContent } from "../helpers/nostr/user-metadata"; export function useUsersMetadata(pubkeys: string[], additionalRelays?: Iterable) { const readRelays = useReadRelays(additionalRelays); diff --git a/src/hooks/use-user-profile-badges.ts b/src/hooks/use-user-profile-badges.ts index 70298e77a..ba2986580 100644 --- a/src/hooks/use-user-profile-badges.ts +++ b/src/hooks/use-user-profile-badges.ts @@ -4,7 +4,7 @@ import useReplaceableEvent from "./use-replaceable-event"; import { PROFILE_BADGES_IDENTIFIER, parseProfileBadges } from "../helpers/nostr/badges"; import useReplaceableEvents from "./use-replaceable-events"; import useSingleEvents from "./use-single-events"; -import { getEventCoordinate } from "../helpers/nostr/events"; +import { getEventCoordinate } from "../helpers/nostr/event"; import { NostrEvent } from "../types/nostr-event"; export default function useUserProfileBadges(pubkey: string, additionalRelays?: Iterable) { diff --git a/src/providers/global/publish-provider.tsx b/src/providers/global/publish-provider.tsx index 8768877d6..4add3b3d8 100644 --- a/src/providers/global/publish-provider.tsx +++ b/src/providers/global/publish-provider.tsx @@ -7,7 +7,7 @@ import { DraftNostrEvent } from "../../types/nostr-event"; import NostrPublishAction from "../../classes/nostr-publish-action"; import clientRelaysService from "../../services/client-relays"; import RelaySet from "../../classes/relay-set"; -import { addPubkeyRelayHints, getAllRelayHints, isReplaceable } from "../../helpers/nostr/events"; +import { addPubkeyRelayHints, getAllRelayHints, isReplaceable } from "../../helpers/nostr/event"; import replaceableEventsService from "../../services/replaceable-events"; import eventExistsService from "../../services/event-exists"; import eventReactionsService from "../../services/event-reactions"; diff --git a/src/providers/route/delete-event-provider.tsx b/src/providers/route/delete-event-provider.tsx index 5f92eb595..f5bbcab8e 100644 --- a/src/providers/route/delete-event-provider.tsx +++ b/src/providers/route/delete-event-provider.tsx @@ -26,7 +26,7 @@ import createDefer, { Deferred } from "../../classes/deferred"; import useEventRelays from "../../hooks/use-event-relays"; import { RelayFavicon } from "../../components/relay-favicon"; import { ExternalLinkIcon } from "../../components/icons"; -import { getEventCoordinate, getEventUID, isReplaceable } from "../../helpers/nostr/events"; +import { getEventCoordinate, getEventUID, isReplaceable } from "../../helpers/nostr/event"; import { Tag } from "../../types/nostr-event"; import { EmbedEvent } from "../../components/embed-event"; import { useWriteRelays } from "../../hooks/use-client-relays"; diff --git a/src/providers/route/mute-modal-provider.tsx b/src/providers/route/mute-modal-provider.tsx index 236f72344..8d07c0cf3 100644 --- a/src/providers/route/mute-modal-provider.tsx +++ b/src/providers/route/mute-modal-provider.tsx @@ -20,7 +20,7 @@ import { PropsWithChildren, createContext, useCallback, useContext, useMemo, use import dayjs from "dayjs"; import { useInterval } from "react-use"; -import { getUserDisplayName } from "../../helpers/user-metadata"; +import { getUserDisplayName } from "../../helpers/nostr/user-metadata"; import { useUserMetadata } from "../../hooks/use-user-metadata"; import useCurrentAccount from "../../hooks/use-current-account"; import { @@ -34,8 +34,8 @@ import { cloneList } from "../../helpers/nostr/lists"; import { useSigningContext } from "../global/signing-provider"; import useUserMuteList from "../../hooks/use-user-mute-list"; import { DraftNostrEvent } from "../../types/nostr-event"; -import UserAvatar from "../../components/user-avatar"; -import UserLink from "../../components/user-link"; +import UserAvatar from "../../components/user/user-avatar"; +import UserLink from "../../components/user/user-link"; import { ChevronDownIcon } from "../../components/icons"; import { usePublishEvent } from "../global/publish-provider"; diff --git a/src/services/delete-events.ts b/src/services/delete-events.ts index 99b1d7263..350b459c6 100644 --- a/src/services/delete-events.ts +++ b/src/services/delete-events.ts @@ -1,6 +1,6 @@ import { kinds } from "nostr-tools"; -import { getEventUID } from "../helpers/nostr/events"; +import { getEventUID } from "../helpers/nostr/event"; import { NostrEvent } from "../types/nostr-event"; import ControlledObservable from "../classes/controlled-observable"; diff --git a/src/services/event-relay-hint.ts b/src/services/event-relay-hint.ts index 2f5aa8e72..3419583cb 100644 --- a/src/services/event-relay-hint.ts +++ b/src/services/event-relay-hint.ts @@ -1,8 +1,8 @@ +import { createCoordinate } from "../classes/batch-kind-loader"; import { NostrEvent } from "../types/nostr-event"; import { getEventRelays } from "./event-relays"; import relayScoreboardService from "./relay-scoreboard"; import type { AddressPointer, EventPointer } from "nostr-tools/lib/types/nip19"; -import { createCoordinate } from "./replaceable-events"; function pickBestRelays(relays: string[]) { // ignore local relays diff --git a/src/services/event-relays.ts b/src/services/event-relays.ts index 6c9ad0f1e..ec2bd5555 100644 --- a/src/services/event-relays.ts +++ b/src/services/event-relays.ts @@ -1,6 +1,6 @@ import Relay from "../classes/relay"; import { PersistentSubject } from "../classes/subject"; -import { getEventUID } from "../helpers/nostr/events"; +import { getEventUID } from "../helpers/nostr/event"; import { NostrEvent } from "../types/nostr-event"; import relayPoolService from "./relay-pool"; diff --git a/src/services/nostr-connect.ts b/src/services/nostr-connect.ts index 118559413..dd59ca982 100644 --- a/src/services/nostr-connect.ts +++ b/src/services/nostr-connect.ts @@ -9,7 +9,7 @@ import { createSimpleQueryMap } from "../helpers/nostr/filter"; import { logger } from "../helpers/debug"; import { DraftNostrEvent, NostrEvent, isPTag } from "../types/nostr-event"; import createDefer, { Deferred } from "../classes/deferred"; -import { truncatedId } from "../helpers/nostr/events"; +import { truncatedId } from "../helpers/nostr/event"; import { NostrConnectAccount } from "./account"; import { safeRelayUrl } from "../helpers/relay"; diff --git a/src/services/replaceable-events.ts b/src/services/replaceable-events.ts index f724ba697..b7d5336eb 100644 --- a/src/services/replaceable-events.ts +++ b/src/services/replaceable-events.ts @@ -1,11 +1,10 @@ import _throttle from "lodash/throttle"; -import { Filter } from "nostr-tools"; +import { Filter, NostrEvent } from "nostr-tools"; import SuperMap from "../classes/super-map"; -import { NostrEvent } from "../types/nostr-event"; import { logger } from "../helpers/debug"; import { nameOrPubkey } from "./user-metadata"; -import { getEventCoordinate } from "../helpers/nostr/events"; +import { getEventCoordinate } from "../helpers/nostr/event"; import createDefer, { Deferred } from "../classes/deferred"; import { localRelay } from "./local-relay"; import { relayRequest } from "../helpers/relay"; diff --git a/src/services/user-mailboxes.ts b/src/services/user-mailboxes.ts index 94c234c11..d7e14f7d6 100644 --- a/src/services/user-mailboxes.ts +++ b/src/services/user-mailboxes.ts @@ -3,10 +3,11 @@ import { kinds } from "nostr-tools"; import { NostrEvent } from "../types/nostr-event"; import SuperMap from "../classes/super-map"; import Subject from "../classes/subject"; -import replaceableEventsService, { createCoordinate, RequestOptions } from "./replaceable-events"; +import replaceableEventsService, { RequestOptions } from "./replaceable-events"; import RelaySet from "../classes/relay-set"; import { RelayMode } from "../classes/relay"; import { relaysFromContactsEvent } from "../helpers/nostr/contacts"; +import { createCoordinate } from "../classes/batch-kind-loader"; export type UserMailboxes = { pubkey: string; diff --git a/src/services/user-metadata.ts b/src/services/user-metadata.ts index 88a168345..9c4853f97 100644 --- a/src/services/user-metadata.ts +++ b/src/services/user-metadata.ts @@ -1,7 +1,7 @@ import { kinds } from "nostr-tools"; import _throttle from "lodash.throttle"; -import { Kind0ParsedContent, parseKind0Event } from "../helpers/user-metadata"; +import { Kind0ParsedContent, parseKind0Event } from "../helpers/nostr/user-metadata"; import SuperMap from "../classes/super-map"; import Subject from "../classes/subject"; import replaceableEventsService, { RequestOptions } from "./replaceable-events"; diff --git a/src/services/username-search.ts b/src/services/username-search.ts index d96e8ee96..d9757994b 100644 --- a/src/services/username-search.ts +++ b/src/services/username-search.ts @@ -1,5 +1,5 @@ import _throttle from "lodash.throttle"; -import { getSearchNames } from "../helpers/user-metadata"; +import { getSearchNames } from "../helpers/nostr/user-metadata"; import db from "./db"; import replaceableEventsService from "./replaceable-events"; import userMetadataService from "./user-metadata"; diff --git a/src/views/badges/badge-details.tsx b/src/views/badges/badge-details.tsx index 6307368f5..eea82a7ac 100644 --- a/src/views/badges/badge-details.tsx +++ b/src/views/badges/badge-details.tsx @@ -18,7 +18,6 @@ import { import { ChevronLeftIcon } from "../../components/icons"; import useReplaceableEvent from "../../hooks/use-replaceable-event"; -import { EventRelays } from "../../components/note/note-relays"; import { getBadgeAwardPubkeys, getBadgeDescription, getBadgeImage, getBadgeName } from "../../helpers/nostr/badges"; import BadgeMenu from "./components/badge-menu"; import useTimelineLoader from "../../hooks/use-timeline-loader"; @@ -27,15 +26,16 @@ import IntersectionObserverProvider from "../../providers/local/intersection-obs import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import useSubject from "../../hooks/use-subject"; import { NostrEvent } from "../../types/nostr-event"; -import { getEventCoordinate } from "../../helpers/nostr/events"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import { getEventCoordinate } from "../../helpers/nostr/event"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import Timestamp from "../../components/timestamp"; import VerticalPageLayout from "../../components/vertical-page-layout"; import BadgeAwardCard from "./components/badge-award-card"; import TimelineLoader from "../../classes/timeline-loader"; import { ErrorBoundary } from "../../components/error-boundary"; import useParamsAddressPointer from "../../hooks/use-params-address-pointer"; +import { EventRelays } from "../../components/note/event-relays"; function BadgeActivityTab({ timeline }: { timeline: TimelineLoader }) { const awards = useSubject(timeline.timeline); diff --git a/src/views/badges/browse.tsx b/src/views/badges/browse.tsx index 1b3fe45c2..2e56ff5ed 100644 --- a/src/views/badges/browse.tsx +++ b/src/views/badges/browse.tsx @@ -8,7 +8,7 @@ import { useReadRelays } from "../../hooks/use-client-relays"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import useSubject from "../../hooks/use-subject"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import BadgeCard from "./components/badge-card"; import VerticalPageLayout from "../../components/vertical-page-layout"; diff --git a/src/views/badges/components/badge-award-card.tsx b/src/views/badges/components/badge-award-card.tsx index eaee74962..9faa5c08a 100644 --- a/src/views/badges/components/badge-award-card.tsx +++ b/src/views/badges/components/badge-award-card.tsx @@ -6,11 +6,11 @@ import { getBadgeAwardBadge, getBadgeAwardPubkeys, getBadgeImage, getBadgeName } import useReplaceableEvent from "../../../hooks/use-replaceable-event"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { getSharableEventAddress } from "../../../helpers/nip19"; -import UserLink from "../../../components/user-link"; +import UserLink from "../../../components/user/user-link"; import Timestamp from "../../../components/timestamp"; -import UserAvatarLink from "../../../components/user-avatar-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; const UserCard = memo(({ pubkey }: { pubkey: string }) => ( diff --git a/src/views/badges/components/badge-card.tsx b/src/views/badges/components/badge-card.tsx index d17b6ce45..624b67fd4 100644 --- a/src/views/badges/components/badge-card.tsx +++ b/src/views/badges/components/badge-card.tsx @@ -3,12 +3,12 @@ import { Link as RouterLink, useNavigate } from "react-router-dom"; import { ButtonGroup, Card, CardBody, CardHeader, CardProps, Flex, Heading, Image, Link, Text } from "@chakra-ui/react"; import { kinds } from "nostr-tools"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { getEventCoordinate, getEventUID } from "../../../helpers/nostr/events"; +import { getEventCoordinate, getEventUID } from "../../../helpers/nostr/event"; import BadgeMenu from "./badge-menu"; import { getBadgeImage, getBadgeName } from "../../../helpers/nostr/badges"; import Timestamp from "../../../components/timestamp"; diff --git a/src/views/badges/components/badge-menu.tsx b/src/views/badges/components/badge-menu.tsx index 00e609450..9e69a1a39 100644 --- a/src/views/badges/components/badge-menu.tsx +++ b/src/views/badges/components/badge-menu.tsx @@ -1,7 +1,7 @@ import { MenuItem } from "@chakra-ui/react"; import { NostrEvent } from "../../../types/nostr-event"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import useCurrentAccount from "../../../hooks/use-current-account"; import { TrashIcon } from "../../../components/icons"; import { useDeleteEventContext } from "../../../providers/route/delete-event-provider"; @@ -16,7 +16,7 @@ export default function BadgeMenu({ badge, ...props }: { badge: NostrEvent } & O return ( <> - + {account?.pubkey === badge.pubkey && ( @@ -25,7 +25,7 @@ export default function BadgeMenu({ badge, ...props }: { badge: NostrEvent } & O )} - + ); } diff --git a/src/views/bookmarks/index.tsx b/src/views/bookmarks/index.tsx index 415b130cc..b50ddfba5 100644 --- a/src/views/bookmarks/index.tsx +++ b/src/views/bookmarks/index.tsx @@ -7,15 +7,15 @@ import useCurrentAccount from "../../hooks/use-current-account"; import TimelineItem from "../../components/timeline-page/generic-note-timeline/timeline-item"; import useSingleEvent from "../../hooks/use-single-event"; import userUserBookmarksList from "../../hooks/use-user-bookmarks-list"; -import UserName from "../../components/user-name"; +import UserName from "../../components/user/user-name"; import ListMenu from "../lists/components/list-menu"; -import UserAvatarLink from "../../components/user-avatar-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; import { NostrEvent, isATag, isETag } from "../../types/nostr-event"; import useEventBookmarkActions from "../../hooks/use-event-bookmark-actions"; import useParamsProfilePointer from "../../hooks/use-params-pubkey-pointer"; import useReplaceableEvent from "../../hooks/use-replaceable-event"; import { EmbedEvent } from "../../components/embed-event"; -import { aTagToAddressPointer, eTagToEventPointer } from "../../helpers/nostr/events"; +import { aTagToAddressPointer, eTagToEventPointer } from "../../helpers/nostr/event"; function RemoveBookmarkButton({ event }: { event: NostrEvent }) { const { isLoading, removeBookmark } = useEventBookmarkActions(event); diff --git a/src/views/channels/components/channel-card.tsx b/src/views/channels/components/channel-card.tsx index fb61a5965..8cf5dfbca 100644 --- a/src/views/channels/components/channel-card.tsx +++ b/src/views/channels/components/channel-card.tsx @@ -20,8 +20,8 @@ import useChannelMetadata from "../../../hooks/use-channel-metadata"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import useSingleEvent from "../../../hooks/use-single-event"; import { useReadRelays } from "../../../hooks/use-client-relays"; import singleEventService from "../../../services/single-event"; diff --git a/src/views/channels/components/channel-menu.tsx b/src/views/channels/components/channel-menu.tsx index 155e47e64..9d31c20e1 100644 --- a/src/views/channels/components/channel-menu.tsx +++ b/src/views/channels/components/channel-menu.tsx @@ -1,4 +1,4 @@ -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import { NostrEvent } from "../../../types/nostr-event"; import OpenInAppMenuItem from "../../../components/common-menu-items/open-in-app"; import CopyEmbedCodeMenuItem from "../../../components/common-menu-items/copy-embed-code"; @@ -10,11 +10,11 @@ export default function ChannelMenu({ }: Omit & { channel: NostrEvent }) { return ( <> - + - + ); } diff --git a/src/views/channels/components/channel-message-block.tsx b/src/views/channels/components/channel-message-block.tsx index 60d15e31b..ff7f3e7b9 100644 --- a/src/views/channels/components/channel-message-block.tsx +++ b/src/views/channels/components/channel-message-block.tsx @@ -1,7 +1,7 @@ import { ReactNode, memo, useCallback } from "react"; import { NostrEvent } from "../../../types/nostr-event"; -import MessageBlock, { MessageBlockProps } from "../../../components/message-block"; +import MessageBlock, { MessageBlockProps } from "../../../components/message/message-block"; import ChannelMessageContent from "./channel-message-content"; function ChannelMessageBlock({ ...props }: Omit) { diff --git a/src/views/channels/components/channel-metadata-drawer.tsx b/src/views/channels/components/channel-metadata-drawer.tsx index 632d0621e..e0682b621 100644 --- a/src/views/channels/components/channel-metadata-drawer.tsx +++ b/src/views/channels/components/channel-metadata-drawer.tsx @@ -22,10 +22,10 @@ import useTimelineLoader from "../../../hooks/use-timeline-loader"; import useSubject from "../../../hooks/use-subject"; import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback"; import IntersectionObserverProvider from "../../../providers/local/intersection-observer"; -import UserLink from "../../../components/user-link"; +import UserLink from "../../../components/user/user-link"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; -import UserAvatar from "../../../components/user-avatar"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import UserAvatar from "../../../components/user/user-avatar"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import ChannelJoinButton from "./channel-join-button"; import { ExternalLinkIcon } from "../../../components/icons"; import { CHANNELS_LIST_KIND } from "../../../helpers/nostr/lists"; diff --git a/src/views/communities/components/community-card.tsx b/src/views/communities/components/community-card.tsx index 3a92ed003..da2a6337a 100644 --- a/src/views/communities/components/community-card.tsx +++ b/src/views/communities/components/community-card.tsx @@ -17,10 +17,10 @@ import { import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { getCommunityImage, getCommunityName } from "../../../helpers/nostr/communities"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import useCountCommunityMembers from "../../../hooks/use-count-community-members"; import { readablizeSats } from "../../../helpers/bolt11"; import User01 from "../../../components/icons/user-01"; diff --git a/src/views/communities/components/community-create-modal.tsx b/src/views/communities/components/community-create-modal.tsx index a53bddc97..7493692d7 100644 --- a/src/views/communities/components/community-create-modal.tsx +++ b/src/views/communities/components/community-create-modal.tsx @@ -26,8 +26,8 @@ import { import { SubmitHandler, useForm } from "react-hook-form"; import useCurrentAccount from "../../../hooks/use-current-account"; -import UserAvatar from "../../../components/user-avatar"; -import UserLink from "../../../components/user-link"; +import UserAvatar from "../../../components/user/user-avatar"; +import UserLink from "../../../components/user/user-link"; import { TrashIcon } from "../../../components/icons"; import Upload01 from "../../../components/icons/upload-01"; import { nostrBuildUploadImage } from "../../../helpers/nostr-build"; diff --git a/src/views/communities/components/community-join-button.tsx b/src/views/communities/components/community-join-button.tsx index f4595a4f2..3530b28ed 100644 --- a/src/views/communities/components/community-join-button.tsx +++ b/src/views/communities/components/community-join-button.tsx @@ -7,7 +7,7 @@ import useUserCommunitiesList from "../../../hooks/use-user-communities-list"; import useCurrentAccount from "../../../hooks/use-current-account"; import { getCommunityName } from "../../../helpers/nostr/communities"; import { COMMUNITIES_LIST_KIND, listAddCoordinate, listRemoveCoordinate } from "../../../helpers/nostr/lists"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; import { usePublishEvent } from "../../../providers/global/publish-provider"; export default function CommunityJoinButton({ diff --git a/src/views/communities/components/community-mod-list.tsx b/src/views/communities/components/community-mod-list.tsx index bd1a908b5..1e72b54b8 100644 --- a/src/views/communities/components/community-mod-list.tsx +++ b/src/views/communities/components/community-mod-list.tsx @@ -1,6 +1,6 @@ import { AvatarGroup, AvatarGroupProps } from "@chakra-ui/react"; -import UserAvatarLink from "../../../components/user-avatar-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; import { NostrEvent } from "../../../types/nostr-event"; import { getCommunityMods } from "../../../helpers/nostr/communities"; diff --git a/src/views/communities/explore.tsx b/src/views/communities/explore.tsx index a9b832fab..6d09b5e9b 100644 --- a/src/views/communities/explore.tsx +++ b/src/views/communities/explore.tsx @@ -13,8 +13,8 @@ import replaceableEventsService from "../../services/replaceable-events"; import { COMMUNITIES_LIST_KIND, getCoordinatesFromList } from "../../helpers/nostr/lists"; import { useNavigate } from "react-router-dom"; import { ChevronLeftIcon } from "../../components/icons"; -import { parseCoordinate } from "../../helpers/nostr/events"; -import UserAvatarLink from "../../components/user-avatar-link"; +import { parseCoordinate } from "../../helpers/nostr/event"; +import UserAvatarLink from "../../components/user/user-avatar-link"; import { AddressPointer } from "nostr-tools/lib/types/nip19"; export function useUsersJoinedCommunitiesLists(pubkeys: string[], additionalRelays?: Iterable) { diff --git a/src/views/communities/hooks/use-count-community-post.ts b/src/views/communities/hooks/use-count-community-post.ts index 644c59101..bd225cad4 100644 --- a/src/views/communities/hooks/use-count-community-post.ts +++ b/src/views/communities/hooks/use-count-community-post.ts @@ -3,7 +3,7 @@ import { kinds } from "nostr-tools"; import { NostrEvent } from "../../../types/nostr-event"; import useEventCount from "../../../hooks/use-event-count"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; export default function useCountCommunityPosts( community: NostrEvent, diff --git a/src/views/communities/index.tsx b/src/views/communities/index.tsx index 17b5ea3f7..a628f5b7d 100644 --- a/src/views/communities/index.tsx +++ b/src/views/communities/index.tsx @@ -35,7 +35,6 @@ import { getCommunityMods, getCommunityName, } from "../../helpers/nostr/communities"; -import { createCoordinate } from "../../services/replaceable-events"; import { getImageSize } from "../../helpers/image"; import { useReadRelays } from "../../hooks/use-client-relays"; import useTimelineLoader from "../../hooks/use-timeline-loader"; @@ -43,11 +42,12 @@ import useSubject from "../../hooks/use-subject"; import useUserMuteFilter from "../../hooks/use-user-mute-filter"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import useReplaceableEvents from "../../hooks/use-replaceable-events"; -import { getEventCoordinate, sortByDate } from "../../helpers/nostr/events"; +import { getEventCoordinate, sortByDate } from "../../helpers/nostr/event"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import ApprovedEvent from "../community/components/community-approved-post"; import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status"; import { usePublishEvent } from "../../providers/global/publish-provider"; +import { createCoordinate } from "../../classes/batch-kind-loader"; function CommunitiesHomePage() { const publish = usePublishEvent(); diff --git a/src/views/community/community-home.tsx b/src/views/community/community-home.tsx index bfa4d0353..7314cdc2a 100644 --- a/src/views/community/community-home.tsx +++ b/src/views/community/community-home.tsx @@ -13,8 +13,8 @@ import { } from "../../helpers/nostr/communities"; import { NostrEvent } from "../../types/nostr-event"; import VerticalPageLayout from "../../components/vertical-page-layout"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import { AdditionalRelayProvider } from "../../providers/local/additional-relay-context"; import TrendUp01 from "../../components/icons/trend-up-01"; @@ -25,7 +25,7 @@ import { useBreakpointValue } from "../../providers/global/breakpoint-provider"; import HorizontalCommunityDetails from "./components/horizonal-community-details"; import { useReadRelays } from "../../hooks/use-client-relays"; import useTimelineLoader from "../../hooks/use-timeline-loader"; -import { getEventCoordinate, getEventUID } from "../../helpers/nostr/events"; +import { getEventCoordinate, getEventUID } from "../../helpers/nostr/event"; import { WritingIcon } from "../../components/icons"; import { PostModalContext } from "../../providers/route/post-modal-provider"; import CommunityEditModal from "./components/community-edit-modal"; diff --git a/src/views/community/components/community-members-modal.tsx b/src/views/community/components/community-members-modal.tsx index 513a368b4..ffa40accb 100644 --- a/src/views/community/components/community-members-modal.tsx +++ b/src/views/community/components/community-members-modal.tsx @@ -16,15 +16,15 @@ import { NostrEvent } from "../../../types/nostr-event"; import useTimelineLoader from "../../../hooks/use-timeline-loader"; import { useReadRelays } from "../../../hooks/use-client-relays"; import { getCommunityRelays } from "../../../helpers/nostr/communities"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; import { COMMUNITIES_LIST_KIND } from "../../../helpers/nostr/lists"; import IntersectionObserverProvider from "../../../providers/local/intersection-observer"; import useSubject from "../../../hooks/use-subject"; import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback"; import TimelineActionAndStatus from "../../../components/timeline-page/timeline-action-and-status"; -import UserLink from "../../../components/user-link"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; -import UserAvatarLink from "../../../components/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; function UserCard({ pubkey }: { pubkey: string }) { return ( diff --git a/src/views/community/components/community-menu.tsx b/src/views/community/components/community-menu.tsx index 4cfdd49b9..16b8dbda6 100644 --- a/src/views/community/components/community-menu.tsx +++ b/src/views/community/components/community-menu.tsx @@ -1,6 +1,6 @@ import { MenuItem } from "@chakra-ui/react"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import { NostrEvent } from "../../../types/nostr-event"; import useCurrentAccount from "../../../hooks/use-current-account"; import PencilLine from "../../../components/icons/pencil-line"; @@ -17,7 +17,7 @@ export default function CommunityMenu({ return ( <> - + {account?.pubkey === community.pubkey && onEditClick && ( @@ -26,7 +26,7 @@ export default function CommunityMenu({ )} - + ); } diff --git a/src/views/community/components/community-post-menu.tsx b/src/views/community/components/community-post-menu.tsx index 4cea5cd99..547c6b7fc 100644 --- a/src/views/community/components/community-post-menu.tsx +++ b/src/views/community/components/community-post-menu.tsx @@ -1,7 +1,7 @@ import { MenuItem, useToast } from "@chakra-ui/react"; import { nip19 } from "nostr-tools"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import { NostrEvent } from "../../../types/nostr-event"; import { CopyToClipboardIcon } from "../../../components/icons"; import CopyShareLinkMenuItem from "../../../components/common-menu-items/copy-share-link"; @@ -18,7 +18,7 @@ export default function CommunityPostMenu({ return ( <> - + - + ); } diff --git a/src/views/community/components/community-post.tsx b/src/views/community/components/community-post.tsx index 0495ddd9c..2c4ca9012 100644 --- a/src/views/community/components/community-post.tsx +++ b/src/views/community/components/community-post.tsx @@ -23,9 +23,9 @@ import { getSharableEventAddress } from "../../../helpers/nip19"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; import { CompactNoteContent } from "../../../components/compact-note-content"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { getEventUID, parseHardcodedNoteContent } from "../../../helpers/nostr/events"; -import UserLink from "../../../components/user-link"; -import UserAvatarLink from "../../../components/user-avatar-link"; +import { getEventUID, parseHardcodedNoteContent } from "../../../helpers/nostr/event"; +import UserLink from "../../../components/user/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; import useUserMuteFilter from "../../../hooks/use-user-mute-filter"; import { useReadRelays } from "../../../hooks/use-client-relays"; import useSingleEvent from "../../../hooks/use-single-event"; diff --git a/src/views/community/components/horizonal-community-details.tsx b/src/views/community/components/horizonal-community-details.tsx index acfdcf1e9..a77c7524a 100644 --- a/src/views/community/components/horizonal-community-details.tsx +++ b/src/views/community/components/horizonal-community-details.tsx @@ -22,8 +22,8 @@ import { getCommunityRules, } from "../../../helpers/nostr/communities"; import CommunityDescription from "../../communities/components/community-description"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import { NostrEvent } from "../../../types/nostr-event"; import CommunityJoinButton from "../../communities/components/community-join-button"; import CommunityMenu from "./community-menu"; diff --git a/src/views/community/components/vertical-community-details.tsx b/src/views/community/components/vertical-community-details.tsx index 2b23d9534..e4c8f1126 100644 --- a/src/views/community/components/vertical-community-details.tsx +++ b/src/views/community/components/vertical-community-details.tsx @@ -9,8 +9,8 @@ import { getCommunityRules, } from "../../../helpers/nostr/communities"; import CommunityDescription from "../../communities/components/community-description"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import { NostrEvent } from "../../../types/nostr-event"; import CommunityJoinButton from "../../communities/components/community-join-button"; import CommunityMenu from "./community-menu"; diff --git a/src/views/community/find-by-name.tsx b/src/views/community/find-by-name.tsx index 1744802d9..ce12bff38 100644 --- a/src/views/community/find-by-name.tsx +++ b/src/views/community/find-by-name.tsx @@ -11,7 +11,7 @@ import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline- import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import VerticalPageLayout from "../../components/vertical-page-layout"; import CommunityCard from "../communities/components/community-card"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { safeDecode } from "../../helpers/nip19"; export default function CommunityFindByNameView() { diff --git a/src/views/community/views/pending.tsx b/src/views/community/views/pending.tsx index 0bf731245..5a4a069ab 100644 --- a/src/views/community/views/pending.tsx +++ b/src/views/community/views/pending.tsx @@ -4,7 +4,7 @@ import { useOutletContext } from "react-router-dom"; import dayjs from "dayjs"; import { DraftNostrEvent, NostrEvent } from "../../../types/nostr-event"; -import { getEventCoordinate, getEventUID } from "../../../helpers/nostr/events"; +import { getEventCoordinate, getEventUID } from "../../../helpers/nostr/event"; import { COMMUNITY_APPROVAL_KIND, buildApprovalMap, diff --git a/src/views/dms/chat.tsx b/src/views/dms/chat.tsx index 2cb2feb0a..e1d56e2f8 100644 --- a/src/views/dms/chat.tsx +++ b/src/views/dms/chat.tsx @@ -4,8 +4,8 @@ import { UNSAFE_DataRouterContext, useLocation, useNavigate } from "react-router import { kinds } from "nostr-tools"; import { ChevronLeftIcon, ThreadIcon } from "../../components/icons"; -import UserAvatar from "../../components/user-avatar"; -import UserLink from "../../components/user-link"; +import UserAvatar from "../../components/user/user-avatar"; +import UserLink from "../../components/user/user-link"; import useSubject from "../../hooks/use-subject"; import RequireCurrentAccount from "../../providers/route/require-current-account"; import useTimelineLoader from "../../hooks/use-timeline-loader"; @@ -13,7 +13,7 @@ import useCurrentAccount from "../../hooks/use-current-account"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status"; -import { UserDnsIdentityIcon } from "../../components/user-dns-identity-icon"; +import { UserDnsIdentityIcon } from "../../components/user/user-dns-identity-icon"; import { useDecryptionContext } from "../../providers/global/dycryption-provider"; import SendMessageForm from "./components/send-message-form"; import { groupMessages } from "../../helpers/nostr/dms"; diff --git a/src/views/dms/components/direct-message-block.tsx b/src/views/dms/components/direct-message-block.tsx index b779309ae..adce2abae 100644 --- a/src/views/dms/components/direct-message-block.tsx +++ b/src/views/dms/components/direct-message-block.tsx @@ -1,7 +1,7 @@ import { ReactNode, memo, useCallback } from "react"; import { NostrEvent } from "../../../types/nostr-event"; -import MessageBlock, { MessageBlockProps } from "../../../components/message-block"; +import MessageBlock, { MessageBlockProps } from "../../../components/message/message-block"; import DecryptPlaceholder from "./decrypt-placeholder"; import DirectMessageContent from "./direct-message-content"; diff --git a/src/views/dms/components/thread-button.tsx b/src/views/dms/components/thread-button.tsx index 0fbe4219c..918ce2475 100644 --- a/src/views/dms/components/thread-button.tsx +++ b/src/views/dms/components/thread-button.tsx @@ -1,7 +1,7 @@ import { Button, IconButton } from "@chakra-ui/react"; import { useLocation, useNavigate } from "react-router-dom"; -import UserAvatar from "../../../components/user-avatar"; +import UserAvatar from "../../../components/user/user-avatar"; import { Thread } from "../../../providers/local/thread-provider"; import { ChevronRightIcon, ThreadIcon } from "../../../components/icons"; import { IconButtonProps } from "yet-another-react-lightbox"; diff --git a/src/views/dms/components/thread-drawer.tsx b/src/views/dms/components/thread-drawer.tsx index b8e39553c..991e63fb6 100644 --- a/src/views/dms/components/thread-drawer.tsx +++ b/src/views/dms/components/thread-drawer.tsx @@ -19,8 +19,8 @@ import { } from "@chakra-ui/react"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatar from "../../../components/user-avatar"; -import UserLink from "../../../components/user-link"; +import UserAvatar from "../../../components/user/user-avatar"; +import UserLink from "../../../components/user/user-link"; import DecryptPlaceholder from "./decrypt-placeholder"; import Timestamp from "../../../components/timestamp"; import { Thread, useThreadsContext } from "../../../providers/local/thread-provider"; diff --git a/src/views/dms/index.tsx b/src/views/dms/index.tsx index ef0bd9857..fb5a4eb7d 100644 --- a/src/views/dms/index.tsx +++ b/src/views/dms/index.tsx @@ -3,7 +3,7 @@ import { Card, CardBody, Flex, LinkBox, LinkOverlay, Text } from "@chakra-ui/rea import { Outlet, Link as RouterLink, useLocation, useParams } from "react-router-dom"; import { nip19 } from "nostr-tools"; -import UserAvatar from "../../components/user-avatar"; +import UserAvatar from "../../components/user/user-avatar"; import useSubject from "../../hooks/use-subject"; import RequireCurrentAccount from "../../providers/route/require-current-account"; import Timestamp from "../../components/timestamp"; @@ -17,11 +17,11 @@ import IntersectionObserverProvider, { import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status"; import { useDMTimeline } from "../../providers/global/dm-timeline"; -import UserName from "../../components/user-name"; +import UserName from "../../components/user/user-name"; import { useDecryptionContainer } from "../../providers/global/dycryption-provider"; import { NostrEvent } from "../../types/nostr-event"; import { CheckIcon } from "../../components/icons"; -import { UserDnsIdentityIcon } from "../../components/user-dns-identity-icon"; +import { UserDnsIdentityIcon } from "../../components/user/user-dns-identity-icon"; function MessagePreview({ message, pubkey }: { message: NostrEvent; pubkey: string }) { const ref = useRef(null); diff --git a/src/views/dvm-feed/components/debug-chains.tsx b/src/views/dvm-feed/components/debug-chains.tsx index d1ea27a14..e48509f3f 100644 --- a/src/views/dvm-feed/components/debug-chains.tsx +++ b/src/views/dvm-feed/components/debug-chains.tsx @@ -16,10 +16,10 @@ import { } from "@chakra-ui/react"; import { ChainedDVMJob, getEventIdsFromJobs, getRequestInput, getRequestRelays } from "../../../helpers/nostr/dvm"; import dayjs from "dayjs"; -import { truncatedId } from "../../../helpers/nostr/events"; +import { truncatedId } from "../../../helpers/nostr/event"; import { CopyIconButton } from "../../../components/copy-icon-button"; import { NostrEvent } from "../../../types/nostr-event"; -import UserLink from "../../../components/user-link"; +import UserLink from "../../../components/user/user-link"; function JobResult({ result }: { result: NostrEvent }) { return ( diff --git a/src/views/dvm-feed/components/dvm-card.tsx b/src/views/dvm-feed/components/dvm-card.tsx index 34e0edd4e..162a26045 100644 --- a/src/views/dvm-feed/components/dvm-card.tsx +++ b/src/views/dvm-feed/components/dvm-card.tsx @@ -5,7 +5,7 @@ import { useMemo, useRef } from "react"; import { NostrEvent } from "../../../types/nostr-event"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; import { DVMAvatarLink } from "./dvm-avatar"; -import { getEventAddressPointer, getEventUID } from "../../../helpers/nostr/events"; +import { getEventAddressPointer, getEventUID } from "../../../helpers/nostr/event"; import { DVMName } from "./dvm-name"; import { AddressPointer } from "nostr-tools/lib/types/nip19"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; diff --git a/src/views/dvm-feed/components/dvm-name.tsx b/src/views/dvm-feed/components/dvm-name.tsx index 19bfb08ef..c46faae7e 100644 --- a/src/views/dvm-feed/components/dvm-name.tsx +++ b/src/views/dvm-feed/components/dvm-name.tsx @@ -3,7 +3,7 @@ import { Link as RouterLink } from "react-router-dom"; import { nip19 } from "nostr-tools"; import { useUserMetadata } from "../../../hooks/use-user-metadata"; -import { getUserDisplayName } from "../../../helpers/user-metadata"; +import { getUserDisplayName } from "../../../helpers/nostr/user-metadata"; import { AddressPointer } from "nostr-tools/lib/types/nip19"; import useDVMMetadata from "../../../hooks/use-dvm-metadata"; diff --git a/src/views/dvm-feed/components/feed-status.tsx b/src/views/dvm-feed/components/feed-status.tsx index 1f4bfed21..e615165b7 100644 --- a/src/views/dvm-feed/components/feed-status.tsx +++ b/src/views/dvm-feed/components/feed-status.tsx @@ -21,7 +21,7 @@ import { getJobStatusType, getResponseFromDVM, } from "../../../helpers/nostr/dvm"; -import { InlineInvoiceCard } from "../../../components/inline-invoice-card"; +import { InlineInvoiceCard } from "../../../components/lightning/inline-invoice-card"; import { DraftNostrEvent } from "../../../types/nostr-event"; import { useReadRelays } from "../../../hooks/use-client-relays"; import { DVMAvatarLink } from "./dvm-avatar"; diff --git a/src/views/dvm-feed/index.tsx b/src/views/dvm-feed/index.tsx index b53071fbf..da3ff4412 100644 --- a/src/views/dvm-feed/index.tsx +++ b/src/views/dvm-feed/index.tsx @@ -7,7 +7,7 @@ import useTimelineLoader from "../../hooks/use-timeline-loader"; import { useReadRelays } from "../../hooks/use-client-relays"; import useSubject from "../../hooks/use-subject"; import RequireCurrentAccount from "../../providers/route/require-current-account"; -import { getEventCoordinate } from "../../helpers/nostr/events"; +import { getEventCoordinate } from "../../helpers/nostr/event"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; diff --git a/src/views/emoji-packs/browse.tsx b/src/views/emoji-packs/browse.tsx index fa1c25437..552191ea7 100644 --- a/src/views/emoji-packs/browse.tsx +++ b/src/views/emoji-packs/browse.tsx @@ -10,7 +10,7 @@ import IntersectionObserverProvider from "../../providers/local/intersection-obs import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import useSubject from "../../hooks/use-subject"; import EmojiPackCard from "./components/emoji-pack-card"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { EMOJI_PACK_KIND, getEmojisFromPack } from "../../helpers/nostr/emoji-packs"; import VerticalPageLayout from "../../components/vertical-page-layout"; diff --git a/src/views/emoji-packs/components/emoji-pack-card.tsx b/src/views/emoji-packs/components/emoji-pack-card.tsx index c2c97f70f..5c8d8cc9c 100644 --- a/src/views/emoji-packs/components/emoji-pack-card.tsx +++ b/src/views/emoji-packs/components/emoji-pack-card.tsx @@ -13,13 +13,13 @@ import { Text, } from "@chakra-ui/react"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import EmojiPackFavoriteButton from "./emoji-pack-favorite-button"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { getEmojisFromPack, getPackName } from "../../../helpers/nostr/emoji-packs"; import EmojiPackMenu from "./emoji-pack-menu"; import NoteZapButton from "../../../components/note/note-zap-button"; diff --git a/src/views/emoji-packs/components/emoji-pack-favorite-button.tsx b/src/views/emoji-packs/components/emoji-pack-favorite-button.tsx index 3fc3bc409..c01518551 100644 --- a/src/views/emoji-packs/components/emoji-pack-favorite-button.tsx +++ b/src/views/emoji-packs/components/emoji-pack-favorite-button.tsx @@ -4,7 +4,7 @@ import dayjs from "dayjs"; import { DraftNostrEvent, NostrEvent } from "../../../types/nostr-event"; import { StarEmptyIcon, StarFullIcon } from "../../../components/icons"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; import { USER_EMOJI_LIST_KIND } from "../../../helpers/nostr/emoji-packs"; import useFavoriteEmojiPacks from "../../../hooks/use-favorite-emoji-packs"; import { listAddCoordinate, listRemoveCoordinate } from "../../../helpers/nostr/lists"; diff --git a/src/views/emoji-packs/components/emoji-pack-menu.tsx b/src/views/emoji-packs/components/emoji-pack-menu.tsx index 8f298b956..307ccd928 100644 --- a/src/views/emoji-packs/components/emoji-pack-menu.tsx +++ b/src/views/emoji-packs/components/emoji-pack-menu.tsx @@ -1,5 +1,5 @@ import { NostrEvent } from "../../../types/nostr-event"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import OpenInAppMenuItem from "../../../components/common-menu-items/open-in-app"; import DeleteEventMenuItem from "../../../components/common-menu-items/delete-event"; import CopyEmbedCodeMenuItem from "../../../components/common-menu-items/copy-embed-code"; @@ -11,12 +11,12 @@ export default function EmojiPackMenu({ }: { pack: NostrEvent } & Omit) { return ( <> - + - + ); } diff --git a/src/views/emoji-packs/emoji-pack.tsx b/src/views/emoji-packs/emoji-pack.tsx index 4bf503d7e..7ed9bb2ab 100644 --- a/src/views/emoji-packs/emoji-pack.tsx +++ b/src/views/emoji-packs/emoji-pack.tsx @@ -19,7 +19,7 @@ import { Text, } from "@chakra-ui/react"; -import UserLink from "../../components/user-link"; +import UserLink from "../../components/user/user-link"; import { ChevronLeftIcon } from "../../components/icons"; import useCurrentAccount from "../../hooks/use-current-account"; import { useDeleteEventContext } from "../../providers/route/delete-event-provider"; @@ -29,12 +29,12 @@ import EmojiPackFavoriteButton from "./components/emoji-pack-favorite-button"; import { EMOJI_PACK_KIND, getEmojisFromPack, getPackName } from "../../helpers/nostr/emoji-packs"; import { DraftNostrEvent, NostrEvent } from "../../types/nostr-event"; import VerticalPageLayout from "../../components/vertical-page-layout"; -import UserAvatarLink from "../../components/user-avatar-link"; -import NoteZapButton from "../../components/note/note-zap-button"; -import QuoteRepostButton from "../../components/note/components/quote-repost-button"; +import UserAvatarLink from "../../components/user/user-avatar-link"; import Timestamp from "../../components/timestamp"; import useParamsAddressPointer from "../../hooks/use-params-address-pointer"; import { usePublishEvent } from "../../providers/global/publish-provider"; +import NoteZapButton from "../../components/note/note-zap-button"; +import QuoteRepostButton from "../../components/note/quote-repost-button"; function AddEmojiForm({ onAdd }: { onAdd: (values: { name: string; url: string }) => void }) { const { register, handleSubmit, watch, getValues, reset } = useForm({ diff --git a/src/views/emoji-packs/index.tsx b/src/views/emoji-packs/index.tsx index a2b91293b..07b973870 100644 --- a/src/views/emoji-packs/index.tsx +++ b/src/views/emoji-packs/index.tsx @@ -3,7 +3,7 @@ import { Link as RouterLink } from "react-router-dom"; import useCurrentAccount from "../../hooks/use-current-account"; import { ExternalLinkIcon } from "../../components/icons"; -import { getEventCoordinate, getEventUID } from "../../helpers/nostr/events"; +import { getEventCoordinate, getEventUID } from "../../helpers/nostr/event"; import { useReadRelays } from "../../hooks/use-client-relays"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import { EMOJI_PACK_KIND, getPackCordsFromFavorites } from "../../helpers/nostr/emoji-packs"; diff --git a/src/views/files/index.tsx b/src/views/files/index.tsx index 33d608d56..c34891a2f 100644 --- a/src/views/files/index.tsx +++ b/src/views/files/index.tsx @@ -11,8 +11,8 @@ import { TrustProvider, useTrusted } from "../../providers/local/trust"; import BlurredImage from "../../components/blured-image"; import PeopleListProvider, { usePeopleListContext } from "../../providers/local/people-list-provider"; import PeopleListSelection from "../../components/people-list-selection/people-list-selection"; -import { UserAvatarLink } from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import { UserAvatarLink } from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import MimeTypePicker from "./mime-type-picker"; import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status"; import VerticalPageLayout from "../../components/vertical-page-layout"; diff --git a/src/views/goals/browse.tsx b/src/views/goals/browse.tsx index 6e4b9b084..ec515ef6f 100644 --- a/src/views/goals/browse.tsx +++ b/src/views/goals/browse.tsx @@ -10,7 +10,7 @@ import IntersectionObserverProvider from "../../providers/local/intersection-obs import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import useSubject from "../../hooks/use-subject"; import GoalCard from "./components/goal-card"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { GOAL_KIND, getGoalClosedDate } from "../../helpers/nostr/goal"; import { NostrEvent } from "../../types/nostr-event"; import VerticalPageLayout from "../../components/vertical-page-layout"; diff --git a/src/views/goals/components/goal-card.tsx b/src/views/goals/components/goal-card.tsx index 811f800da..a7e37e80b 100644 --- a/src/views/goals/components/goal-card.tsx +++ b/src/views/goals/components/goal-card.tsx @@ -2,12 +2,12 @@ import { memo, useRef } from "react"; import { Link as RouterLink } from "react-router-dom"; import { ButtonGroup, Card, CardBody, CardHeader, CardProps, Flex, Heading, Link, Text } from "@chakra-ui/react"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { getGoalClosedDate, getGoalName } from "../../../helpers/nostr/goal"; import GoalMenu from "./goal-menu"; import GoalProgress from "./goal-progress"; diff --git a/src/views/goals/components/goal-contents.tsx b/src/views/goals/components/goal-contents.tsx index 0c4496f94..15760f1bd 100644 --- a/src/views/goals/components/goal-contents.tsx +++ b/src/views/goals/components/goal-contents.tsx @@ -2,7 +2,7 @@ import { EmbedEventPointer } from "../../../components/embed-event"; import { getGoalEventPointers, getGoalLinks } from "../../../helpers/nostr/goal"; import { NostrEvent } from "../../../types/nostr-event"; import { encodeDecodeResult } from "../../../helpers/nip19"; -import OpenGraphCard from "../../../components/open-graph-card"; +import OpenGraphCard from "../../../components/open-graph/open-graph-card"; export default function GoalContents({ goal }: { goal: NostrEvent }) { const pointers = getGoalEventPointers(goal); diff --git a/src/views/goals/components/goal-menu.tsx b/src/views/goals/components/goal-menu.tsx index 57a972239..9d3eabc95 100644 --- a/src/views/goals/components/goal-menu.tsx +++ b/src/views/goals/components/goal-menu.tsx @@ -1,5 +1,5 @@ import { NostrEvent } from "../../../types/nostr-event"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import OpenInAppMenuItem from "../../../components/common-menu-items/open-in-app"; import CopyEmbedCodeMenuItem from "../../../components/common-menu-items/copy-embed-code"; import DebugEventMenuItem from "../../../components/debug-modal/debug-event-menu-item"; @@ -7,11 +7,11 @@ import DebugEventMenuItem from "../../../components/debug-modal/debug-event-menu export default function GoalMenu({ goal, ...props }: { goal: NostrEvent } & Omit) { return ( <> - + - + ); } diff --git a/src/views/goals/components/goal-progress.tsx b/src/views/goals/components/goal-progress.tsx index c5d70306d..d12977920 100644 --- a/src/views/goals/components/goal-progress.tsx +++ b/src/views/goals/components/goal-progress.tsx @@ -3,7 +3,7 @@ import { NostrEvent } from "../../../types/nostr-event"; import { getGoalAmount, getGoalRelays } from "../../../helpers/nostr/goal"; import { LightningIcon } from "../../../components/icons"; import useEventZaps from "../../../hooks/use-event-zaps"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { totalZaps } from "../../../helpers/nostr/zaps"; import { readablizeSats } from "../../../helpers/bolt11"; diff --git a/src/views/goals/components/goal-top-zappers.tsx b/src/views/goals/components/goal-top-zappers.tsx index e329fc09b..a5d5060d6 100644 --- a/src/views/goals/components/goal-top-zappers.tsx +++ b/src/views/goals/components/goal-top-zappers.tsx @@ -1,11 +1,11 @@ import { Box, Flex, FlexProps, Text } from "@chakra-ui/react"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { getGoalRelays } from "../../../helpers/nostr/goal"; import useEventZaps from "../../../hooks/use-event-zaps"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import { readablizeSats } from "../../../helpers/bolt11"; import { LightningIcon } from "../../../components/icons"; diff --git a/src/views/goals/components/goal-zap-button.tsx b/src/views/goals/components/goal-zap-button.tsx index 0090a1156..e7f6f450c 100644 --- a/src/views/goals/components/goal-zap-button.tsx +++ b/src/views/goals/components/goal-zap-button.tsx @@ -2,7 +2,7 @@ import { Button, ButtonProps, useDisclosure } from "@chakra-ui/react"; import { NostrEvent } from "../../../types/nostr-event"; import ZapModal from "../../../components/event-zap-modal"; import eventZapsService from "../../../services/event-zaps"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { getGoalRelays } from "../../../helpers/nostr/goal"; import { useReadRelays } from "../../../hooks/use-client-relays"; diff --git a/src/views/goals/components/goal-zap-list.tsx b/src/views/goals/components/goal-zap-list.tsx index 9c1071ef4..1ab44de46 100644 --- a/src/views/goals/components/goal-zap-list.tsx +++ b/src/views/goals/components/goal-zap-list.tsx @@ -1,10 +1,10 @@ import { Box, Flex, Spacer, Text } from "@chakra-ui/react"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { getGoalRelays } from "../../../helpers/nostr/goal"; import useEventZaps from "../../../hooks/use-event-zaps"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import { readablizeSats } from "../../../helpers/bolt11"; import { LightningIcon } from "../../../components/icons"; import Timestamp from "../../../components/timestamp"; diff --git a/src/views/goals/goal-details.tsx b/src/views/goals/goal-details.tsx index c24dc0058..39248bc46 100644 --- a/src/views/goals/goal-details.tsx +++ b/src/views/goals/goal-details.tsx @@ -6,8 +6,8 @@ import GoalMenu from "./components/goal-menu"; import { getGoalAmount, getGoalName } from "../../helpers/nostr/goal"; import GoalProgress from "./components/goal-progress"; import useSingleEvent from "../../hooks/use-single-event"; -import UserAvatar from "../../components/user-avatar"; -import UserLink from "../../components/user-link"; +import UserAvatar from "../../components/user/user-avatar"; +import UserLink from "../../components/user/user-link"; import GoalContents from "./components/goal-contents"; import GoalZapList from "./components/goal-zap-list"; import { readablizeSats } from "../../helpers/bolt11"; diff --git a/src/views/goals/index.tsx b/src/views/goals/index.tsx index 20cbe97af..45f1071f7 100644 --- a/src/views/goals/index.tsx +++ b/src/views/goals/index.tsx @@ -3,7 +3,7 @@ import { Navigate, Link as RouterLink } from "react-router-dom"; import useCurrentAccount from "../../hooks/use-current-account"; import { ExternalLinkIcon } from "../../components/icons"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { useReadRelays } from "../../hooks/use-client-relays"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import useSubject from "../../hooks/use-subject"; diff --git a/src/views/hashtag/index.tsx b/src/views/hashtag/index.tsx index 945cae54b..231731c74 100644 --- a/src/views/hashtag/index.tsx +++ b/src/views/hashtag/index.tsx @@ -15,7 +15,7 @@ import { CloseIcon } from "@chakra-ui/icons"; import { useLocation, useNavigate, useParams } from "react-router-dom"; import { useAppTitle } from "../../hooks/use-app-title"; import useTimelineLoader from "../../hooks/use-timeline-loader"; -import { isReply, isRepost } from "../../helpers/nostr/events"; +import { isReply, isRepost } from "../../helpers/nostr/event"; import { CheckIcon, EditIcon } from "../../components/icons"; import { NostrEvent } from "../../types/nostr-event"; import useRelaysChanged from "../../hooks/use-relays-changed"; diff --git a/src/views/home/index.tsx b/src/views/home/index.tsx index 4a8114132..a92a9733f 100644 --- a/src/views/home/index.tsx +++ b/src/views/home/index.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect } from "react"; import { Flex, Spacer, useDisclosure } from "@chakra-ui/react"; import { kinds } from "nostr-tools"; -import { isReply, isRepost } from "../../helpers/nostr/events"; +import { isReply, isRepost } from "../../helpers/nostr/event"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import { NostrEvent } from "../../types/nostr-event"; import TimelinePage, { useTimelinePageEventFilter } from "../../components/timeline-page"; diff --git a/src/views/launchpad/components/dms-card.tsx b/src/views/launchpad/components/dms-card.tsx index f7e0a663b..195492eee 100644 --- a/src/views/launchpad/components/dms-card.tsx +++ b/src/views/launchpad/components/dms-card.tsx @@ -14,10 +14,10 @@ import { sortConversationsByLastReceived, } from "../../../helpers/nostr/dms"; import { NostrEvent } from "../../../types/nostr-event"; -import UserAvatar from "../../../components/user-avatar"; +import UserAvatar from "../../../components/user/user-avatar"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; -import UserName from "../../../components/user-name"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import UserName from "../../../components/user/user-name"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import { nip19 } from "nostr-tools"; import { useDecryptionContainer, useDecryptionContext } from "../../../providers/global/dycryption-provider"; import Timestamp from "../../../components/timestamp"; diff --git a/src/views/launchpad/components/feeds-card.tsx b/src/views/launchpad/components/feeds-card.tsx index 7adb0ee91..ee7333c64 100644 --- a/src/views/launchpad/components/feeds-card.tsx +++ b/src/views/launchpad/components/feeds-card.tsx @@ -16,10 +16,10 @@ import { Link as RouterLink } from "react-router-dom"; import useUserLists from "../../../hooks/use-user-lists"; import { NostrEvent } from "../../../types/nostr-event"; import { PEOPLE_LIST_KIND, getListName, getPubkeysFromList } from "../../../helpers/nostr/lists"; -import UserAvatar from "../../../components/user-avatar"; +import UserAvatar from "../../../components/user/user-avatar"; import useCurrentAccount from "../../../hooks/use-current-account"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; -import { getEventCoordinate, getEventUID } from "../../../helpers/nostr/events"; +import { getEventCoordinate, getEventUID } from "../../../helpers/nostr/event"; import Plus from "../../../components/icons/plus"; import useUserContactList from "../../../hooks/use-user-contact-list"; import useRecentIds from "../../../hooks/use-recent-ids"; diff --git a/src/views/launchpad/components/search-form.tsx b/src/views/launchpad/components/search-form.tsx index 71e42524e..8198cc5fd 100644 --- a/src/views/launchpad/components/search-form.tsx +++ b/src/views/launchpad/components/search-form.tsx @@ -17,8 +17,8 @@ import { nip19 } from "nostr-tools"; import { Link as RouterLink } from "react-router-dom"; import { useUserSearchDirectoryContext } from "../../../providers/global/user-directory-provider"; -import UserAvatar from "../../../components/user-avatar"; -import UserName from "../../../components/user-name"; +import UserAvatar from "../../../components/user/user-avatar"; +import UserName from "../../../components/user/user-name"; import KeyboardShortcut from "../../../components/keyboard-shortcut"; function UserOption({ pubkey }: { pubkey: string }) { diff --git a/src/views/lists/browse.tsx b/src/views/lists/browse.tsx index a7b8a1df2..6b42bc054 100644 --- a/src/views/lists/browse.tsx +++ b/src/views/lists/browse.tsx @@ -18,7 +18,7 @@ import IntersectionObserverProvider from "../../providers/local/intersection-obs import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import useSubject from "../../hooks/use-subject"; import ListCard from "./components/list-card"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import VerticalPageLayout from "../../components/vertical-page-layout"; function BrowseListPage() { diff --git a/src/views/lists/components/list-card.tsx b/src/views/lists/components/list-card.tsx index d58d14af3..477219ccc 100644 --- a/src/views/lists/components/list-card.tsx +++ b/src/views/lists/components/list-card.tsx @@ -15,8 +15,8 @@ import { } from "@chakra-ui/react"; import { kinds } from "nostr-tools"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import { getEventPointersFromList, getListDescription, @@ -29,10 +29,9 @@ import { import { getSharableEventAddress } from "../../../helpers/nip19"; import { NostrEvent } from "../../../types/nostr-event"; import useReplaceableEvent from "../../../hooks/use-replaceable-event"; -import { createCoordinate } from "../../../services/replaceable-events"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import ListFavoriteButton from "./list-favorite-button"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import ListMenu from "./list-menu"; import { COMMUNITY_DEFINITION_KIND } from "../../../helpers/nostr/communities"; import { CommunityIcon, NotesIcon } from "../../../components/icons"; @@ -42,6 +41,7 @@ import NoteZapButton from "../../../components/note/note-zap-button"; import Link01 from "../../../components/icons/link-01"; import File02 from "../../../components/icons/file-02"; import SimpleLikeButton from "../../../components/event-reactions/simple-like-button"; +import { createCoordinate } from "../../../classes/batch-kind-loader"; export function ListCardContent({ list, ...props }: Omit & { list: NostrEvent }) { const people = getPubkeysFromList(list); diff --git a/src/views/lists/components/list-favorite-button.tsx b/src/views/lists/components/list-favorite-button.tsx index 5732c768b..5deeedcb2 100644 --- a/src/views/lists/components/list-favorite-button.tsx +++ b/src/views/lists/components/list-favorite-button.tsx @@ -4,7 +4,7 @@ import dayjs from "dayjs"; import { DraftNostrEvent, NostrEvent } from "../../../types/nostr-event"; import { StarEmptyIcon, StarFullIcon } from "../../../components/icons"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; import useFavoriteLists, { FAVORITE_LISTS_IDENTIFIER } from "../../../hooks/use-favorite-lists"; import { NOTE_LIST_KIND, diff --git a/src/views/lists/components/list-feed-button.tsx b/src/views/lists/components/list-feed-button.tsx index 39bc15401..db7201375 100644 --- a/src/views/lists/components/list-feed-button.tsx +++ b/src/views/lists/components/list-feed-button.tsx @@ -3,7 +3,7 @@ import { Link as RouterLink } from "react-router-dom"; import { kinds } from "nostr-tools"; import { NostrEvent } from "../../../types/nostr-event"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; import { PEOPLE_LIST_KIND } from "../../../helpers/nostr/lists"; export default function ListFeedButton({ list, ...props }: { list: NostrEvent } & Omit) { diff --git a/src/views/lists/components/list-menu.tsx b/src/views/lists/components/list-menu.tsx index ba9f04c9a..386946616 100644 --- a/src/views/lists/components/list-menu.tsx +++ b/src/views/lists/components/list-menu.tsx @@ -1,7 +1,7 @@ import { Image, MenuItem } from "@chakra-ui/react"; import { NostrEvent, isPTag } from "../../../types/nostr-event"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import { getSharableEventAddress } from "../../../helpers/nip19"; import DeleteEventMenuItem from "../../../components/common-menu-items/delete-event"; import OpenInAppMenuItem from "../../../components/common-menu-items/open-in-app"; @@ -17,7 +17,7 @@ export default function ListMenu({ list, ...props }: { list: NostrEvent } & Omit return ( <> - + {!isSpecial && } @@ -30,7 +30,7 @@ export default function ListMenu({ list, ...props }: { list: NostrEvent } & Omit )} - + ); } diff --git a/src/views/lists/components/note-card.tsx b/src/views/lists/components/note-card.tsx index 38910b899..df7850b12 100644 --- a/src/views/lists/components/note-card.tsx +++ b/src/views/lists/components/note-card.tsx @@ -1,15 +1,15 @@ import { Text } from "@chakra-ui/react"; -import { Note } from "../../../components/note"; -import { NoteLink } from "../../../components/note-link"; +import { NoteLink } from "../../../components/note/note-link"; import { useReadRelays } from "../../../hooks/use-client-relays"; import useSingleEvent from "../../../hooks/use-single-event"; +import TimelineNote from "../../../components/note/timeline-note"; export default function NoteCard({ id, relay }: { id: string; relay?: string }) { const readRelays = useReadRelays(relay ? [relay] : []); const event = useSingleEvent(id, readRelays); return event ? ( - + ) : ( Loading diff --git a/src/views/lists/components/user-card.tsx b/src/views/lists/components/user-card.tsx index 77588e0c1..b711f8214 100644 --- a/src/views/lists/components/user-card.tsx +++ b/src/views/lists/components/user-card.tsx @@ -3,14 +3,14 @@ import { Link as RouterLink } from "react-router-dom"; import { nip19 } from "nostr-tools"; import { useUserMetadata } from "../../../hooks/use-user-metadata"; -import { getUserDisplayName } from "../../../helpers/user-metadata"; -import UserAvatar from "../../../components/user-avatar"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import { getUserDisplayName } from "../../../helpers/nostr/user-metadata"; +import UserAvatar from "../../../components/user/user-avatar"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import { NostrEvent } from "../../../types/nostr-event"; import useAsyncErrorHandler from "../../../hooks/use-async-error-handler"; import { listRemovePerson } from "../../../helpers/nostr/lists"; import useCurrentAccount from "../../../hooks/use-current-account"; -import { UserFollowButton } from "../../../components/user-follow-button"; +import { UserFollowButton } from "../../../components/user/user-follow-button"; import { usePublishEvent } from "../../../providers/global/publish-provider"; export type UserCardProps = { pubkey: string; relay?: string; list: NostrEvent } & Omit; diff --git a/src/views/lists/index.tsx b/src/views/lists/index.tsx index adf48f804..dca835008 100644 --- a/src/views/lists/index.tsx +++ b/src/views/lists/index.tsx @@ -5,7 +5,7 @@ import { kinds } from "nostr-tools"; import useCurrentAccount from "../../hooks/use-current-account"; import { ExternalLinkIcon, PlusCircleIcon } from "../../components/icons"; import ListCard from "./components/list-card"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import useUserLists from "../../hooks/use-user-lists"; import NewListModal from "./components/new-list-modal"; import { getSharableEventAddress } from "../../helpers/nip19"; diff --git a/src/views/lists/list/index.tsx b/src/views/lists/list/index.tsx index d69d88c2f..c18e111cb 100644 --- a/src/views/lists/list/index.tsx +++ b/src/views/lists/list/index.tsx @@ -3,7 +3,7 @@ import { kinds, nip19 } from "nostr-tools"; import type { DecodeResult } from "nostr-tools/lib/types/nip19"; import { Box, Button, Flex, Heading, SimpleGrid, Spacer, Spinner, Text } from "@chakra-ui/react"; -import UserLink from "../../../components/user-link"; +import UserLink from "../../../components/user/user-link"; import { ChevronLeftIcon } from "../../../components/icons"; import useCurrentAccount from "../../../hooks/use-current-account"; import { useDeleteEventContext } from "../../../providers/route/delete-event-provider"; @@ -18,7 +18,7 @@ import { } from "../../../helpers/nostr/lists"; import useReplaceableEvent from "../../../hooks/use-replaceable-event"; import UserCard from "../components/user-card"; -import OpenGraphCard from "../../../components/open-graph-card"; +import OpenGraphCard from "../../../components/open-graph/open-graph-card"; import { TrustProvider } from "../../../providers/local/trust"; import ListMenu from "../components/list-menu"; import ListFavoriteButton from "../components/list-favorite-button"; @@ -28,7 +28,7 @@ import { COMMUNITY_DEFINITION_KIND } from "../../../helpers/nostr/communities"; import { EmbedEvent, EmbedEventPointer } from "../../../components/embed-event"; import { encodeDecodeResult } from "../../../helpers/nip19"; import useSingleEvent from "../../../hooks/use-single-event"; -import UserAvatarLink from "../../../components/user-avatar-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; import useParamsAddressPointer from "../../../hooks/use-params-address-pointer"; import { NostrEvent } from "../../../types/nostr-event"; diff --git a/src/views/map/timeline.tsx b/src/views/map/timeline.tsx index f1c9406ff..c3885d25f 100644 --- a/src/views/map/timeline.tsx +++ b/src/views/map/timeline.tsx @@ -4,15 +4,15 @@ import { kinds } from "nostr-tools"; import { ErrorBoundary } from "../../components/error-boundary"; import useSubject from "../../hooks/use-subject"; import StreamNote from "../../components/timeline-page/generic-note-timeline/stream-note"; -import { Note } from "../../components/note"; import { STREAM_KIND } from "../../helpers/nostr/stream"; import TimelineLoader from "../../classes/timeline-loader"; import { NostrEvent } from "../../types/nostr-event"; +import TimelineNote from "../../components/note/timeline-note"; const RenderEvent = React.memo(({ event, focused }: { event: NostrEvent; focused?: boolean }) => { switch (event.kind) { case kinds.ShortTextNote: - return ; + return ; case STREAM_KIND: return ; default: diff --git a/src/views/notifications/index.tsx b/src/views/notifications/index.tsx index eec8703f9..e592ad852 100644 --- a/src/views/notifications/index.tsx +++ b/src/views/notifications/index.tsx @@ -11,7 +11,7 @@ import IntersectionObserverProvider, { import useSubject from "../../hooks/use-subject"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import { useNotificationTimeline } from "../../providers/global/notification-timeline"; -import { getEventUID, isReply, isRepost } from "../../helpers/nostr/events"; +import { getEventUID, isReply, isRepost } from "../../helpers/nostr/event"; import PeopleListProvider, { usePeopleListContext } from "../../providers/local/people-list-provider"; import PeopleListSelection from "../../components/people-list-selection/people-list-selection"; import VerticalPageLayout from "../../components/vertical-page-layout"; diff --git a/src/views/notifications/notification-item.tsx b/src/views/notifications/notification-item.tsx index 62ece776d..db446d954 100644 --- a/src/views/notifications/notification-item.tsx +++ b/src/views/notifications/notification-item.tsx @@ -7,13 +7,13 @@ import { NostrEvent, isATag, isETag } from "../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../providers/local/intersection-observer"; import { parseZapEvent } from "../../helpers/nostr/zaps"; import { readablizeSats } from "../../helpers/bolt11"; -import { getEventUID, getThreadReferences, isMentionedInContent, parseCoordinate } from "../../helpers/nostr/events"; +import { getEventUID, getThreadReferences, isMentionedInContent, parseCoordinate } from "../../helpers/nostr/event"; import { EmbedEvent, EmbedEventPointer } from "../../components/embed-event"; import EmbeddedUnknown from "../../components/embed-event/event-types/embedded-unknown"; import { ErrorBoundary } from "../../components/error-boundary"; import { TrustProvider } from "../../providers/local/trust"; import Heart from "../../components/icons/heart"; -import UserAvatarLink from "../../components/user-avatar-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; import { AtIcon, ChevronDownIcon, ChevronUpIcon, LightningIcon, ReplyIcon, RepostIcon } from "../../components/icons"; import useSingleEvent from "../../hooks/use-single-event"; import { TORRENT_COMMENT_KIND } from "../../helpers/nostr/torrents"; diff --git a/src/views/notifications/threads.tsx b/src/views/notifications/threads.tsx index b6a16bf64..6efe8e0e8 100644 --- a/src/views/notifications/threads.tsx +++ b/src/views/notifications/threads.tsx @@ -15,9 +15,9 @@ import { NostrEvent } from "../../types/nostr-event"; import NotificationIconEntry from "./components/notification-icon-entry"; import { ChevronLeftIcon, ReplyIcon } from "../../components/icons"; import { AvatarGroup, Box, Button, ButtonGroup, Flex, LinkBox, Text, useDisclosure } from "@chakra-ui/react"; -import UserAvatarLink from "../../components/user-avatar-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; import useSingleEvent from "../../hooks/use-single-event"; -import UserLink from "../../components/user-link"; +import UserLink from "../../components/user/user-link"; import { CompactNoteContent } from "../../components/compact-note-content"; import Timestamp from "../../components/timestamp"; import HoverLinkOverlay from "../../components/hover-link-overlay"; @@ -26,7 +26,7 @@ import PeopleListSelection from "../../components/people-list-selection/people-l import IntersectionObserverProvider, { useRegisterIntersectionEntity, } from "../../providers/local/intersection-observer"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { useNavigateInDrawer } from "../../providers/drawer-sub-view-provider"; const THREAD_KINDS = [kinds.ShortTextNote, TORRENT_COMMENT_KIND]; diff --git a/src/views/profile/edit.tsx b/src/views/profile/edit.tsx index c8db19bb9..047b6a2e5 100644 --- a/src/views/profile/edit.tsx +++ b/src/views/profile/edit.tsx @@ -15,7 +15,7 @@ import { useForm } from "react-hook-form"; import { ExternalLinkIcon } from "../../components/icons"; import { isLNURL } from "../../helpers/lnurl"; -import { Kind0ParsedContent } from "../../helpers/user-metadata"; +import { Kind0ParsedContent } from "../../helpers/nostr/user-metadata"; import { useReadRelays } from "../../hooks/use-client-relays"; import useCurrentAccount from "../../hooks/use-current-account"; import { useUserMetadata } from "../../hooks/use-user-metadata"; diff --git a/src/views/relays/app/index.tsx b/src/views/relays/app/index.tsx index 78e8dbd5b..4c355bca4 100644 --- a/src/views/relays/app/index.tsx +++ b/src/views/relays/app/index.tsx @@ -5,7 +5,7 @@ import useSubject from "../../../hooks/use-subject"; import { offlineMode } from "../../../services/offline-mode"; import WifiOff from "../../../components/icons/wifi-off"; import Wifi from "../../../components/icons/wifi"; -import BackButton from "../../../components/back-button"; +import BackButton from "../../../components/router/back-button"; import AddRelayForm from "./add-relay-form"; import clientRelaysService from "../../../services/client-relays"; import { RelayMode } from "../../../classes/relay"; diff --git a/src/views/relays/app/select-relay-set.tsx b/src/views/relays/app/select-relay-set.tsx index c3eb8ebb5..faedc76b6 100644 --- a/src/views/relays/app/select-relay-set.tsx +++ b/src/views/relays/app/select-relay-set.tsx @@ -3,7 +3,7 @@ import { NostrEvent } from "nostr-tools"; import useCurrentAccount from "../../../hooks/use-current-account"; import useUserRelaySets from "../../../hooks/use-user-relay-sets"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; import { getListName } from "../../../helpers/nostr/lists"; export default function SelectRelaySet({ diff --git a/src/views/relays/cache/index.tsx b/src/views/relays/cache/index.tsx index ea075b9e6..b21cc7265 100644 --- a/src/views/relays/cache/index.tsx +++ b/src/views/relays/cache/index.tsx @@ -1,5 +1,5 @@ import { Button, Card, CardBody, CardHeader, Flex, Heading, Link, Text } from "@chakra-ui/react"; -import BackButton from "../../../components/back-button"; +import BackButton from "../../../components/router/back-button"; import { useAsync } from "react-use"; import { NOSTR_RELAY_TRAY_URL, checkNostrRelayTray, localRelay } from "../../../services/local-relay"; import { CacheRelay } from "nostr-idb"; diff --git a/src/views/relays/components/add-custom-modal.tsx b/src/views/relays/components/add-custom-modal.tsx index 52197aca6..6a33bc3db 100644 --- a/src/views/relays/components/add-custom-modal.tsx +++ b/src/views/relays/components/add-custom-modal.tsx @@ -21,10 +21,10 @@ import { } from "@chakra-ui/react"; import { useState } from "react"; import { useRelayInfo } from "../../../hooks/use-relay-info"; -import UserAvatar from "../../../components/user-avatar"; -import UserLink from "../../../components/user-link"; +import UserAvatar from "../../../components/user/user-avatar"; +import UserLink from "../../../components/user/user-link"; import { useDebounce } from "react-use"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import { CodeIcon } from "../../../components/icons"; import { Metadata } from "./relay-card"; import { safeRelayUrl } from "../../../helpers/relay"; diff --git a/src/views/relays/components/relay-card.tsx b/src/views/relays/components/relay-card.tsx index 0bcba68b3..6480bc9fe 100644 --- a/src/views/relays/components/relay-card.tsx +++ b/src/views/relays/components/relay-card.tsx @@ -25,9 +25,9 @@ import { Link as RouterLink } from "react-router-dom"; import { useRelayInfo } from "../../../hooks/use-relay-info"; import { RelayFavicon } from "../../../components/relay-favicon"; import { CodeIcon } from "../../../components/icons"; -import UserLink from "../../../components/user-link"; -import UserAvatar from "../../../components/user-avatar"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import UserLink from "../../../components/user/user-link"; +import UserAvatar from "../../../components/user/user-avatar"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import RawJson from "../../../components/debug-modal/raw-json"; import { RelayShareButton } from "./relay-share-button"; import useRelayStats from "../../../hooks/use-relay-stats"; diff --git a/src/views/relays/components/relay-review-note.tsx b/src/views/relays/components/relay-review-note.tsx index 0d5d65d9a..2b6ec429f 100644 --- a/src/views/relays/components/relay-review-note.tsx +++ b/src/views/relays/components/relay-review-note.tsx @@ -2,17 +2,17 @@ import { useRef } from "react"; import { Card, CardBody, CardHeader, Link } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import StarRating from "../../../components/star-rating"; import { safeJson } from "../../../helpers/parse"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { NoteContents } from "../../../components/note/text-note-contents"; import { Metadata } from "./relay-card"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import Timestamp from "../../../components/timestamp"; +import { TextNoteContents } from "../../../components/note/timeline-note/text-note-contents"; export default function RelayReviewNote({ event, hideUrl }: { event: NostrEvent; hideUrl?: boolean }) { const ratingJson = event.tags.find((t) => t[0] === "l" && t[3])?.[3]; @@ -40,7 +40,7 @@ export default function RelayReviewNote({ event, hideUrl }: { event: NostrEvent; )} {rating && } - + ); diff --git a/src/views/relays/contact-list/index.tsx b/src/views/relays/contact-list/index.tsx index a5430bd1c..9a52c749f 100644 --- a/src/views/relays/contact-list/index.tsx +++ b/src/views/relays/contact-list/index.tsx @@ -1,5 +1,5 @@ import { Button, Code, Flex, Heading, Link, Spinner, Text } from "@chakra-ui/react"; -import BackButton from "../../../components/back-button"; +import BackButton from "../../../components/router/back-button"; import useCurrentAccount from "../../../hooks/use-current-account"; import { Link as RouterLink } from "react-router-dom"; @@ -9,7 +9,7 @@ import { CheckIcon, InboxIcon, OutboxIcon } from "../../../components/icons"; import { useCallback, useState } from "react"; import useCacheForm from "../../../hooks/use-cache-form"; import useUserContactList from "../../../hooks/use-user-contact-list"; -import { cloneEvent } from "../../../helpers/nostr/events"; +import { cloneEvent } from "../../../helpers/nostr/event"; import { EventTemplate } from "nostr-tools"; import dayjs from "dayjs"; import { usePublishEvent } from "../../../providers/global/publish-provider"; diff --git a/src/views/relays/index.tsx b/src/views/relays/index.tsx index 2144c3b72..aa9e168ee 100644 --- a/src/views/relays/index.tsx +++ b/src/views/relays/index.tsx @@ -5,7 +5,7 @@ import VerticalPageLayout from "../../components/vertical-page-layout"; import useCurrentAccount from "../../hooks/use-current-account"; import useUserRelaySets from "../../hooks/use-user-relay-sets"; import { getListName } from "../../helpers/nostr/lists"; -import { getEventCoordinate } from "../../helpers/nostr/events"; +import { getEventCoordinate } from "../../helpers/nostr/event"; import { useBreakpointValue } from "../../providers/global/breakpoint-provider"; import Database01 from "../../components/icons/database-01"; import { AtIcon, RelayIcon } from "../../components/icons"; diff --git a/src/views/relays/mailboxes/index.tsx b/src/views/relays/mailboxes/index.tsx index e788f527a..2f29047e7 100644 --- a/src/views/relays/mailboxes/index.tsx +++ b/src/views/relays/mailboxes/index.tsx @@ -29,7 +29,7 @@ import { useForm } from "react-hook-form"; import { safeRelayUrl } from "../../../helpers/relay"; import { usePublishEvent } from "../../../providers/global/publish-provider"; import { COMMON_CONTACT_RELAY } from "../../../const"; -import BackButton from "../../../components/back-button"; +import BackButton from "../../../components/router/back-button"; import AddRelayForm from "../app/add-relay-form"; function RelayLine({ relay, mode, list }: { relay: string; mode: RelayMode; list?: NostrEvent }) { diff --git a/src/views/relays/nip05/index.tsx b/src/views/relays/nip05/index.tsx index aee931a5f..5e270c1ba 100644 --- a/src/views/relays/nip05/index.tsx +++ b/src/views/relays/nip05/index.tsx @@ -1,5 +1,5 @@ import { Code, Flex, Heading, Link, Text } from "@chakra-ui/react"; -import BackButton from "../../../components/back-button"; +import BackButton from "../../../components/router/back-button"; import useCurrentAccount from "../../../hooks/use-current-account"; import { useUserDNSIdentity } from "../../../hooks/use-user-dns-identity"; import { Link as RouterLink } from "react-router-dom"; diff --git a/src/views/relays/popular.tsx b/src/views/relays/popular.tsx index 92b97101a..8ee116ec5 100644 --- a/src/views/relays/popular.tsx +++ b/src/views/relays/popular.tsx @@ -25,7 +25,7 @@ import userMailboxesService from "../../services/user-mailboxes"; import { NostrEvent } from "../../types/nostr-event"; import { RelayFavicon } from "../../components/relay-favicon"; import { ChevronLeftIcon } from "../../components/icons"; -import UserAvatar from "../../components/user-avatar"; +import UserAvatar from "../../components/user/user-avatar"; import { RelayMetadata, RelayPaidTag } from "./components/relay-card"; function usePopularContactsRelays(list?: NostrEvent) { diff --git a/src/views/relays/relay/relay-details.tsx b/src/views/relays/relay/relay-details.tsx index 012f92354..da48b297f 100644 --- a/src/views/relays/relay/relay-details.tsx +++ b/src/views/relays/relay/relay-details.tsx @@ -38,7 +38,7 @@ import { groupByTime } from "../../../helpers/notification"; import { useCallback, useEffect, useMemo, useState } from "react"; import EventStore from "../../../classes/event-store"; import NostrRequest from "../../../classes/nostr-request"; -import { sortByDate } from "../../../helpers/nostr/events"; +import { sortByDate } from "../../../helpers/nostr/event"; import { NostrQuery } from "../../../types/nostr-relay"; ChartJS.register( diff --git a/src/views/relays/relay/relay-notes.tsx b/src/views/relays/relay/relay-notes.tsx index 7c149ce13..d5d30119a 100644 --- a/src/views/relays/relay/relay-notes.tsx +++ b/src/views/relays/relay/relay-notes.tsx @@ -2,7 +2,7 @@ import { useCallback } from "react"; import { Flex, Spacer, useDisclosure } from "@chakra-ui/react"; import { kinds } from "nostr-tools"; -import { isReply, isRepost } from "../../../helpers/nostr/events"; +import { isReply, isRepost } from "../../../helpers/nostr/event"; import { useAppTitle } from "../../../hooks/use-app-title"; import useTimelineLoader from "../../../hooks/use-timeline-loader"; import { NostrEvent } from "../../../types/nostr-event"; diff --git a/src/views/relays/relay/relay-users.tsx b/src/views/relays/relay/relay-users.tsx index 7aacb97f9..2899b9294 100644 --- a/src/views/relays/relay/relay-users.tsx +++ b/src/views/relays/relay/relay-users.tsx @@ -2,7 +2,7 @@ import { useRef } from "react"; import { Card, Flex, LinkBox, SimpleGrid } from "@chakra-ui/react"; import { kinds } from "nostr-tools"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { useAppTitle } from "../../../hooks/use-app-title"; import useTimelineLoader from "../../../hooks/use-timeline-loader"; import PeopleListSelection from "../../../components/people-list-selection/people-list-selection"; @@ -13,10 +13,10 @@ import IntersectionObserverProvider, { import useSubject from "../../../hooks/use-subject"; import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback"; import TimelineActionAndStatus from "../../../components/timeline-page/timeline-action-and-status"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; -import UserLink from "../../../components/user-link"; +import UserLink from "../../../components/user/user-link"; import { getRelaysFromList } from "../../../helpers/nostr/lists"; import { getRelayVariations } from "../../../helpers/relay"; import { NostrEvent } from "../../../types/nostr-event"; diff --git a/src/views/search/community-results.tsx b/src/views/search/community-results.tsx index 71c2b213a..09fbedeb9 100644 --- a/src/views/search/community-results.tsx +++ b/src/views/search/community-results.tsx @@ -6,7 +6,7 @@ import IntersectionObserverProvider, { useRegisterIntersectionEntity, } from "../../providers/local/intersection-observer"; import { COMMUNITY_DEFINITION_KIND } from "../../helpers/nostr/communities"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { NostrEvent } from "../../types/nostr-event"; import CommunityCard from "../communities/components/community-card"; import useSubject from "../../hooks/use-subject"; diff --git a/src/views/search/index.tsx b/src/views/search/index.tsx index e10811c4a..92f426a97 100644 --- a/src/views/search/index.tsx +++ b/src/views/search/index.tsx @@ -17,7 +17,7 @@ import PeopleListProvider from "../../providers/local/people-list-provider"; import PeopleListSelection from "../../components/people-list-selection/people-list-selection"; import useRouteSearchValue from "../../hooks/use-route-search-value"; import { useBreakpointValue } from "../../providers/global/breakpoint-provider"; -import QRCodeScannerButton from "../../components/qr-code-scanner-button"; +import QRCodeScannerButton from "../../components/qr-code/qr-code-scanner-button"; import { AdditionalRelayProvider } from "../../providers/local/additional-relay-context"; export function SearchPage() { diff --git a/src/views/search/profile-results.tsx b/src/views/search/profile-results.tsx index 73c18a7a6..1870aa819 100644 --- a/src/views/search/profile-results.tsx +++ b/src/views/search/profile-results.tsx @@ -4,13 +4,13 @@ import { useAsync } from "react-use"; import { kinds } from "nostr-tools"; import { NostrEvent } from "../../types/nostr-event"; -import { parseKind0Event } from "../../helpers/user-metadata"; +import { parseKind0Event } from "../../helpers/nostr/user-metadata"; import { readablizeSats } from "../../helpers/bolt11"; import { EmbedableContent, embedUrls } from "../../helpers/embeds"; -import UserAvatar from "../../components/user-avatar"; -import { UserDnsIdentityIcon } from "../../components/user-dns-identity-icon"; +import UserAvatar from "../../components/user/user-avatar"; +import { UserDnsIdentityIcon } from "../../components/user/user-dns-identity-icon"; import { embedNostrLinks, renderGenericUrl } from "../../components/embed-types"; -import UserLink from "../../components/user-link"; +import UserLink from "../../components/user/user-link"; import trustedUserStatsService, { NostrBandUserStats } from "../../services/trusted-user-stats"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import useSubject from "../../hooks/use-subject"; diff --git a/src/views/signin/address/create.tsx b/src/views/signin/address/create.tsx index dbf8ea742..1d4e59cb8 100644 --- a/src/views/signin/address/create.tsx +++ b/src/views/signin/address/create.tsx @@ -24,10 +24,10 @@ import { useNavigate } from "react-router-dom"; import { NostrEvent } from "nostr-tools"; import useNip05Providers from "../../../hooks/use-nip05-providers"; -import { Kind0ParsedContent } from "../../../helpers/user-metadata"; +import { Kind0ParsedContent } from "../../../helpers/nostr/user-metadata"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; -import { MetadataAvatar } from "../../../components/user-avatar"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; +import { MetadataAvatar } from "../../../components/user/user-avatar"; import { ErrorBoundary } from "../../../components/error-boundary"; import dnsIdentityService from "../../../services/dns-identity"; import { useUserMetadata } from "../../../hooks/use-user-metadata"; diff --git a/src/views/signin/address/index.tsx b/src/views/signin/address/index.tsx index 0000472a9..2eda5b702 100644 --- a/src/views/signin/address/index.tsx +++ b/src/views/signin/address/index.tsx @@ -10,7 +10,7 @@ import accountService from "../../../services/account"; import { COMMON_CONTACT_RELAY } from "../../../const"; import { safeRelayUrls } from "../../../helpers/relay"; import { getMatchSimpleEmail } from "../../../helpers/regexp"; -import QRCodeScannerButton from "../../../components/qr-code-scanner-button"; +import QRCodeScannerButton from "../../../components/qr-code/qr-code-scanner-button"; export default function LoginNostrAddressView() { const navigate = useNavigate(); diff --git a/src/views/signin/components/account-card.tsx b/src/views/signin/components/account-card.tsx index 0d28ef09a..1e16efa89 100644 --- a/src/views/signin/components/account-card.tsx +++ b/src/views/signin/components/account-card.tsx @@ -1,9 +1,9 @@ import { CloseIcon } from "@chakra-ui/icons"; import { Box, IconButton, Text } from "@chakra-ui/react"; -import { getUserDisplayName } from "../../../helpers/user-metadata"; +import { getUserDisplayName } from "../../../helpers/nostr/user-metadata"; import { useUserMetadata } from "../../../hooks/use-user-metadata"; import accountService, { Account } from "../../../services/account"; -import UserAvatar from "../../../components/user-avatar"; +import UserAvatar from "../../../components/user/user-avatar"; import AccountInfoBadge from "../../../components/account-info-badge"; export default function AccountCard({ account }: { account: Account }) { diff --git a/src/views/signin/nostr-connect.tsx b/src/views/signin/nostr-connect.tsx index 7c161e97a..beff5959d 100644 --- a/src/views/signin/nostr-connect.tsx +++ b/src/views/signin/nostr-connect.tsx @@ -14,7 +14,7 @@ import { useNavigate } from "react-router-dom"; import accountService from "../../services/account"; import nostrConnectService, { NostrConnectClient } from "../../services/nostr-connect"; -import QRCodeScannerButton from "../../components/qr-code-scanner-button"; +import QRCodeScannerButton from "../../components/qr-code/qr-code-scanner-button"; export default function LoginNostrConnectView() { const navigate = useNavigate(); diff --git a/src/views/signin/npub.tsx b/src/views/signin/npub.tsx index 4c2d23459..23b6b69f4 100644 --- a/src/views/signin/npub.tsx +++ b/src/views/signin/npub.tsx @@ -6,7 +6,7 @@ import { RelayUrlInput } from "../../components/relay-url-input"; import { normalizeToHexPubkey } from "../../helpers/nip19"; import accountService from "../../services/account"; import { COMMON_CONTACT_RELAY } from "../../const"; -import QRCodeScannerButton from "../../components/qr-code-scanner-button"; +import QRCodeScannerButton from "../../components/qr-code/qr-code-scanner-button"; export default function LoginNpubView() { const navigate = useNavigate(); diff --git a/src/views/signup/create-step.tsx b/src/views/signup/create-step.tsx index 52c086685..9cd6f2f53 100644 --- a/src/views/signup/create-step.tsx +++ b/src/views/signup/create-step.tsx @@ -4,7 +4,7 @@ import { Avatar, Button, Flex, Heading, Text, useToast } from "@chakra-ui/react" import { bytesToHex } from "@noble/hashes/utils"; import dayjs from "dayjs"; -import { Kind0ParsedContent } from "../../helpers/user-metadata"; +import { Kind0ParsedContent } from "../../helpers/nostr/user-metadata"; import { containerProps } from "./common"; import { nostrBuildUploadImage } from "../../helpers/nostr-build"; import accountService from "../../services/account"; diff --git a/src/views/signup/finished-step.tsx b/src/views/signup/finished-step.tsx index ae0334f8b..c9a52b1f9 100644 --- a/src/views/signup/finished-step.tsx +++ b/src/views/signup/finished-step.tsx @@ -2,12 +2,12 @@ import { Box, Button, Card, Flex, Heading, Text } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; import { useAsync } from "react-use"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import { containerProps } from "./common"; -import { UserFollowButton } from "../../components/user-follow-button"; -import { Kind0ParsedContent } from "../../helpers/user-metadata"; -import { UserDnsIdentityIcon } from "../../components/user-dns-identity-icon"; +import { UserFollowButton } from "../../components/user/user-follow-button"; +import { Kind0ParsedContent } from "../../helpers/nostr/user-metadata"; +import { UserDnsIdentityIcon } from "../../components/user/user-dns-identity-icon"; type TrendingApi = { profiles: { diff --git a/src/views/signup/index.tsx b/src/views/signup/index.tsx index 2d0a1acb0..30b5daeba 100644 --- a/src/views/signup/index.tsx +++ b/src/views/signup/index.tsx @@ -2,7 +2,7 @@ import { useState } from "react"; import { Flex } from "@chakra-ui/react"; import { useNavigate, useParams } from "react-router-dom"; -import { Kind0ParsedContent } from "../../helpers/user-metadata"; +import { Kind0ParsedContent } from "../../helpers/nostr/user-metadata"; import NameStep from "./name-step"; import ProfileImageStep from "./profile-image-step"; import RelayStep from "./relay-step"; diff --git a/src/views/signup/name-step.tsx b/src/views/signup/name-step.tsx index 29f8f56cc..1212bb78c 100644 --- a/src/views/signup/name-step.tsx +++ b/src/views/signup/name-step.tsx @@ -2,7 +2,7 @@ import { Button, Flex, Heading, Input, Text, Textarea } from "@chakra-ui/react"; import { useForm } from "react-hook-form"; import { Link as RouterLink, useLocation } from "react-router-dom"; -import { Kind0ParsedContent } from "../../helpers/user-metadata"; +import { Kind0ParsedContent } from "../../helpers/nostr/user-metadata"; import { AppIcon, containerProps } from "./common"; export default function NameStep({ onSubmit }: { onSubmit: (metadata: Kind0ParsedContent) => void }) { diff --git a/src/views/streams/components/stream-card.tsx b/src/views/streams/components/stream-card.tsx index 4e7e4f260..29e30aab4 100644 --- a/src/views/streams/components/stream-card.tsx +++ b/src/views/streams/components/stream-card.tsx @@ -3,12 +3,12 @@ import { Box, Card, CardBody, CardProps, Flex, Heading, LinkBox, LinkOverlay, Te import { ParsedStream } from "../../../helpers/nostr/stream"; import { Link as RouterLink } from "react-router-dom"; -import UserAvatar from "../../../components/user-avatar"; -import UserLink from "../../../components/user-link"; +import UserAvatar from "../../../components/user/user-avatar"; +import UserLink from "../../../components/user/user-link"; import StreamStatusBadge from "./status-badge"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import useEventNaddr from "../../../hooks/use-event-naddr"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import StreamHashtags from "./stream-hashtags"; import Timestamp from "../../../components/timestamp"; diff --git a/src/views/streams/components/streamer-cards.tsx b/src/views/streams/components/streamer-cards.tsx index 50deec90f..d067e0659 100644 --- a/src/views/streams/components/streamer-cards.tsx +++ b/src/views/streams/components/streamer-cards.tsx @@ -4,11 +4,11 @@ import { Card, CardBody, CardHeader, CardProps, Heading, Image, LinkBox, LinkOve import { useReadRelays } from "../../../hooks/use-client-relays"; import replaceableEventsService from "../../../services/replaceable-events"; import useSubject from "../../../hooks/use-subject"; -import { NoteContents } from "../../../components/note/text-note-contents"; import { isATag } from "../../../types/nostr-event"; import useReplaceableEvent from "../../../hooks/use-replaceable-event"; -import OpenGraphCard from "../../../components/open-graph-card"; +import OpenGraphCard from "../../../components/open-graph/open-graph-card"; import { useAdditionalRelayContext } from "../../../providers/local/additional-relay-context"; +import { TextNoteContents } from "../../../components/note/timeline-note/text-note-contents"; export const STREAMER_CARDS_TYPE = 17777; export const STREAMER_CARD_TYPE = 37777; @@ -48,7 +48,7 @@ function StreamerCard({ cord, relay, ...props }: { cord: string; relay?: string )} {card.content && ( - + )} {link && ( diff --git a/src/views/streams/components/top-zappers.tsx b/src/views/streams/components/top-zappers.tsx index 4f8586ac0..17fe86507 100644 --- a/src/views/streams/components/top-zappers.tsx +++ b/src/views/streams/components/top-zappers.tsx @@ -2,13 +2,13 @@ import { useMemo } from "react"; import { Flex, FlexProps, Text } from "@chakra-ui/react"; import { parseZapEvent } from "../../../helpers/nostr/zaps"; -import UserLink from "../../../components/user-link"; +import UserLink from "../../../components/user/user-link"; import { LightningIcon } from "../../../components/icons"; import { readablizeSats } from "../../../helpers/bolt11"; import useStreamChatTimeline from "../stream/stream-chat/use-stream-chat-timeline"; import { ParsedStream } from "../../../helpers/nostr/stream"; import useSubject from "../../../hooks/use-subject"; -import UserAvatarLink from "../../../components/user-avatar-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; export default function TopZappers({ stream, ...props }: FlexProps & { stream: ParsedStream }) { const timeline = useStreamChatTimeline(stream); diff --git a/src/views/streams/dashboard/index.tsx b/src/views/streams/dashboard/index.tsx index 343904dad..a2ba627e8 100644 --- a/src/views/streams/dashboard/index.tsx +++ b/src/views/streams/dashboard/index.tsx @@ -12,7 +12,7 @@ import { ParsedStream, STREAM_KIND, getATag } from "../../../helpers/nostr/strea import useTimelineLoader from "../../../hooks/use-timeline-loader"; import RequireCurrentAccount from "../../../providers/route/require-current-account"; import useCurrentAccount from "../../../hooks/use-current-account"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { useReadRelays } from "../../../hooks/use-client-relays"; import { ChevronLeftIcon } from "../../../components/icons"; import { AdditionalRelayProvider } from "../../../providers/local/additional-relay-context"; diff --git a/src/views/streams/dashboard/users-card.tsx b/src/views/streams/dashboard/users-card.tsx index 8a1222401..11b1acdf9 100644 --- a/src/views/streams/dashboard/users-card.tsx +++ b/src/views/streams/dashboard/users-card.tsx @@ -5,8 +5,8 @@ import { useInterval, useObservable } from "react-use"; import useCurrentAccount from "../../../hooks/use-current-account"; import useStreamChatTimeline from "../stream/stream-chat/use-stream-chat-timeline"; -import UserAvatar from "../../../components/user-avatar"; -import UserLink from "../../../components/user-link"; +import UserAvatar from "../../../components/user/user-avatar"; +import UserLink from "../../../components/user/user-link"; import useUserMuteActions from "../../../hooks/use-user-mute-actions"; import { useMuteModalContext } from "../../../providers/route/mute-modal-provider"; import useUserMuteList from "../../../hooks/use-user-mute-list"; diff --git a/src/views/streams/stream/index.tsx b/src/views/streams/stream/index.tsx index c6a3f6f20..48873f227 100644 --- a/src/views/streams/stream/index.tsx +++ b/src/views/streams/stream/index.tsx @@ -25,8 +25,8 @@ import { useReadRelays } from "../../../hooks/use-client-relays"; import { unique } from "../../../helpers/array"; import { LiveVideoPlayer } from "../../../components/live-video-player"; import StreamChat, { ChatDisplayMode } from "./stream-chat"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import StreamSummaryContent from "../components/stream-summary-content"; import { ChevronLeftIcon, ExternalLinkIcon } from "../../../components/icons"; import useSetColorMode from "../../../hooks/use-set-color-mode"; diff --git a/src/views/streams/stream/stream-chat/chat-message.tsx b/src/views/streams/stream/stream-chat/chat-message.tsx index c0613aa7d..c03ff5fdf 100644 --- a/src/views/streams/stream/stream-chat/chat-message.tsx +++ b/src/views/streams/stream/stream-chat/chat-message.tsx @@ -2,8 +2,8 @@ import React, { useRef } from "react"; import { Box, Text } from "@chakra-ui/react"; import { ParsedStream } from "../../../../helpers/nostr/stream"; -import UserAvatar from "../../../../components/user-avatar"; -import UserLink from "../../../../components/user-link"; +import UserAvatar from "../../../../components/user/user-avatar"; +import UserLink from "../../../../components/user/user-link"; import { NostrEvent } from "../../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../../providers/local/intersection-observer"; import { TrustProvider } from "../../../../providers/local/trust"; diff --git a/src/views/streams/stream/stream-chat/use-stream-chat-timeline.ts b/src/views/streams/stream/stream-chat/use-stream-chat-timeline.ts index bb50f9451..384b13c8d 100644 --- a/src/views/streams/stream/stream-chat/use-stream-chat-timeline.ts +++ b/src/views/streams/stream/stream-chat/use-stream-chat-timeline.ts @@ -1,7 +1,7 @@ import { useCallback, useMemo } from "react"; import { kinds } from "nostr-tools"; -import { getEventUID } from "../../../../helpers/nostr/events"; +import { getEventUID } from "../../../../helpers/nostr/event"; import { ParsedStream, STREAM_CHAT_MESSAGE_KIND, getATag } from "../../../../helpers/nostr/stream"; import useTimelineLoader from "../../../../hooks/use-timeline-loader"; import { NostrEvent } from "../../../../types/nostr-event"; diff --git a/src/views/streams/stream/stream-chat/zap-message.tsx b/src/views/streams/stream/stream-chat/zap-message.tsx index 27824e030..46c71bdd2 100644 --- a/src/views/streams/stream/stream-chat/zap-message.tsx +++ b/src/views/streams/stream/stream-chat/zap-message.tsx @@ -2,8 +2,8 @@ import React, { useMemo, useRef } from "react"; import { Box, Flex, Text } from "@chakra-ui/react"; import { ParsedStream } from "../../../../helpers/nostr/stream"; -import UserAvatar from "../../../../components/user-avatar"; -import UserLink from "../../../../components/user-link"; +import UserAvatar from "../../../../components/user/user-avatar"; +import UserLink from "../../../../components/user/user-link"; import { NostrEvent } from "../../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../../providers/local/intersection-observer"; import { LightningIcon } from "../../../../components/icons"; diff --git a/src/views/thread/components/reply-form.tsx b/src/views/thread/components/reply-form.tsx index 2484c4957..392ca4275 100644 --- a/src/views/thread/components/reply-form.tsx +++ b/src/views/thread/components/reply-form.tsx @@ -8,7 +8,6 @@ import dayjs from "dayjs"; import { NostrEvent } from "../../../types/nostr-event"; import { UserAvatarStack } from "../../../components/compact-user-stack"; import { ThreadItem, getThreadMembers } from "../../../helpers/thread"; -import { NoteContents } from "../../../components/note/text-note-contents"; import { addReplyTags, createEmojiTags, @@ -18,8 +17,6 @@ import { } from "../../../helpers/nostr/post"; import useCurrentAccount from "../../../hooks/use-current-account"; import { useSigningContext } from "../../../providers/global/signing-provider"; -import { useWriteRelays } from "../../../hooks/use-client-relays"; -import NostrPublishAction from "../../../classes/nostr-publish-action"; import MagicTextArea, { RefType } from "../../../components/magic-textarea"; import { useContextEmojis } from "../../../providers/global/emoji-provider"; import { TrustProvider } from "../../../providers/local/trust"; @@ -27,6 +24,7 @@ import { nostrBuildUploadImage } from "../../../helpers/nostr-build"; import { UploadImageIcon } from "../../../components/icons"; import { unique } from "../../../helpers/array"; import { usePublishEvent } from "../../../providers/global/publish-provider"; +import { TextNoteContents } from "../../../components/note/timeline-note/text-note-contents"; export type ReplyFormProps = { item: ThreadItem; @@ -143,7 +141,7 @@ export default function ReplyForm({ item, onCancel, onSubmitted, replyKind = kin {previewDraft.content.length > 0 && ( - + )} diff --git a/src/views/thread/components/thread-post.tsx b/src/views/thread/components/thread-post.tsx index 1d0cbd145..823bcccc7 100644 --- a/src/views/thread/components/thread-post.tsx +++ b/src/views/thread/components/thread-post.tsx @@ -1,46 +1,35 @@ import { memo, useRef, useState } from "react"; -import { - Alert, - AlertIcon, - Button, - ButtonGroup, - Flex, - IconButton, - Link, - Spacer, - useColorMode, - useDisclosure, -} from "@chakra-ui/react"; +import { Alert, AlertIcon, Button, ButtonGroup, Flex, IconButton, Link, Spacer, useDisclosure } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; +import ReplyForm from "./reply-form"; import { ReplyIcon } from "../../../components/icons"; import { countReplies, ThreadItem } from "../../../helpers/thread"; import { TrustProvider } from "../../../providers/local/trust"; -import ReplyForm from "./reply-form"; import useClientSideMuteFilter from "../../../hooks/use-client-side-mute-filter"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import Timestamp from "../../../components/timestamp"; -import { NoteContents } from "../../../components/note/text-note-contents"; import Expand01 from "../../../components/icons/expand-01"; import Minus from "../../../components/icons/minus"; -import NoteZapButton from "../../../components/note/note-zap-button"; -import QuoteRepostButton from "../../../components/note/components/quote-repost-button"; -import RepostButton from "../../../components/note/components/repost-button"; -import NoteMenu from "../../../components/note/note-menu"; import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; -import NoteReactions from "../../../components/note/components/note-reactions"; -import BookmarkButton from "../../../components/note/components/bookmark-button"; -import NoteCommunityMetadata from "../../../components/note/note-community-metadata"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; -import NoteProxyLink from "../../../components/note/components/note-proxy-link"; -import { NoteDetailsButton } from "../../../components/note/components/note-details-button"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import EventInteractionDetailsModal from "../../../components/event-interactions-modal"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import useAppSettings from "../../../hooks/use-app-settings"; import useThreadColorLevelProps from "../../../hooks/use-thread-color-level-props"; -import POWIcon from "../../../components/pow-icon"; +import POWIcon from "../../../components/pow/pow-icon"; +import RepostButton from "../../../components/note/timeline-note/components/repost-button"; +import QuoteRepostButton from "../../../components/note/quote-repost-button"; +import NoteZapButton from "../../../components/note/note-zap-button"; +import NoteProxyLink from "../../../components/note/timeline-note/components/note-proxy-link"; +import { NoteDetailsButton } from "../../../components/note/timeline-note/components/note-details-button"; +import BookmarkButton from "../../../components/note/bookmark-button"; +import NoteMenu from "../../../components/note/note-menu"; +import NoteCommunityMetadata from "../../../components/note/timeline-note/note-community-metadata"; +import { TextNoteContents } from "../../../components/note/timeline-note/text-note-contents"; +import NoteReactions from "../../../components/note/timeline-note/components/note-reactions"; export type ThreadItemProps = { post: ThreadItem; @@ -106,7 +95,7 @@ export const ThreadPost = memo(({ post, initShowReplies, focusId, level = -1 }: <> - + ); diff --git a/src/views/thread/index.tsx b/src/views/thread/index.tsx index a55553151..b0bb2dff8 100644 --- a/src/views/thread/index.tsx +++ b/src/views/thread/index.tsx @@ -3,7 +3,6 @@ import { Card, Heading, Link, Spinner } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; import { nip19 } from "nostr-tools"; -import Note from "../../components/note"; import { ThreadPost } from "./components/thread-post"; import VerticalPageLayout from "../../components/vertical-page-layout"; import { useReadRelays } from "../../hooks/use-client-relays"; @@ -14,10 +13,11 @@ import useThreadTimelineLoader from "../../hooks/use-thread-timeline-loader"; import useSingleEvent from "../../hooks/use-single-event"; import useParamsEventPointer from "../../hooks/use-params-event-pointer"; import LoadingNostrLink from "../../components/loading-nostr-link"; -import UserName from "../../components/user-name"; +import UserName from "../../components/user/user-name"; import { getSharableEventAddress } from "../../helpers/nip19"; -import UserAvatarLink from "../../components/user-avatar-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; import { ReplyIcon } from "../../components/icons"; +import TimelineNote from "../../components/note/timeline-note"; function CollapsedReplies({ pointer, @@ -90,7 +90,7 @@ function ThreadPage({ )} {focusedPost.replyingTo ? ( - + ) : ( focusedPost.refs.reply?.e && )} diff --git a/src/views/tools/event-console/event-row.tsx b/src/views/tools/event-console/event-row.tsx index 04706e91d..cc0acad8e 100644 --- a/src/views/tools/event-console/event-row.tsx +++ b/src/views/tools/event-console/event-row.tsx @@ -1,7 +1,7 @@ import { Box, Code, Flex, Heading, Text, useDisclosure } from "@chakra-ui/react"; import { NostrEvent } from "nostr-tools"; import ExpandButton from "./expand-button"; -import UserName from "../../../components/user-name"; +import UserName from "../../../components/user/user-name"; import { CopyIconButton } from "../../../components/copy-icon-button"; import Timestamp from "../../../components/timestamp"; diff --git a/src/views/tools/event-console/index.tsx b/src/views/tools/event-console/index.tsx index d23cd59ad..985c04ca1 100644 --- a/src/views/tools/event-console/index.tsx +++ b/src/views/tools/event-console/index.tsx @@ -29,7 +29,7 @@ import { jsonLanguage } from "@codemirror/lang-json"; import { syntaxTree } from "@codemirror/language"; import VerticalPageLayout from "../../../components/vertical-page-layout"; -import BackButton from "../../../components/back-button"; +import BackButton from "../../../components/router/back-button"; import { NostrFilterSchema } from "./schema"; import { localRelay } from "../../../services/local-relay"; import Play from "../../../components/icons/play"; diff --git a/src/views/tools/transform-note/index.tsx b/src/views/tools/transform-note/index.tsx index a526fbfa0..62eb82083 100644 --- a/src/views/tools/transform-note/index.tsx +++ b/src/views/tools/transform-note/index.tsx @@ -4,13 +4,13 @@ import useParamsEventPointer from "../../../hooks/use-params-event-pointer"; import { NostrEvent } from "../../../types/nostr-event"; import useSingleEvent from "../../../hooks/use-single-event"; import { NoteTranslationsPage } from "./translation"; -import { NoteContents } from "../../../components/note/text-note-contents"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; -import UserLink from "../../../components/user-link"; -import NoteMenu from "../../../components/note/note-menu"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; +import UserLink from "../../../components/user/user-link"; import NoteTextToSpeechPage from "./text-to-speech"; import useRouteSearchValue from "../../../hooks/use-route-search-value"; +import NoteMenu from "../../../components/note/note-menu"; +import TextNoteContents from "../../../components/note/timeline-note/text-note-contents"; const tabs = ["original", "translation", "tts"]; @@ -41,7 +41,7 @@ function TransformNotePage({ note }: { note: NostrEvent }) { - + diff --git a/src/views/tools/transform-note/text-to-speech/index.tsx b/src/views/tools/transform-note/text-to-speech/index.tsx index 981fb4b6f..cedad45dc 100644 --- a/src/views/tools/transform-note/text-to-speech/index.tsx +++ b/src/views/tools/transform-note/text-to-speech/index.tsx @@ -6,7 +6,7 @@ import { Filter } from "nostr-tools"; import { useReadRelays } from "../../../../hooks/use-client-relays"; import useTimelineLoader from "../../../../hooks/use-timeline-loader"; -import { getEventUID } from "../../../../helpers/nostr/events"; +import { getEventUID } from "../../../../helpers/nostr/event"; import { DVM_STATUS_KIND, DVM_TTS_JOB_KIND, diff --git a/src/views/tools/transform-note/text-to-speech/tts-job.tsx b/src/views/tools/transform-note/text-to-speech/tts-job.tsx index 0811eb7a0..c660b42fb 100644 --- a/src/views/tools/transform-note/text-to-speech/tts-job.tsx +++ b/src/views/tools/transform-note/text-to-speech/tts-job.tsx @@ -3,8 +3,8 @@ import codes from "iso-language-codes"; import { DVMJob, getRequestInputParam } from "../../../../helpers/nostr/dvm"; import { NostrEvent } from "../../../../types/nostr-event"; -import UserAvatarLink from "../../../../components/user-avatar-link"; -import UserLink from "../../../../components/user-link"; +import UserAvatarLink from "../../../../components/user/user-avatar-link"; +import UserLink from "../../../../components/user/user-link"; import Timestamp from "../../../../components/timestamp"; import { CodeIcon } from "../../../../components/icons"; import TextToSpeechResponse from "./tts-response"; diff --git a/src/views/tools/transform-note/text-to-speech/tts-result.tsx b/src/views/tools/transform-note/text-to-speech/tts-result.tsx index 5393cd52c..385688383 100644 --- a/src/views/tools/transform-note/text-to-speech/tts-result.tsx +++ b/src/views/tools/transform-note/text-to-speech/tts-result.tsx @@ -1,7 +1,7 @@ import { Flex, Text } from "@chakra-ui/react"; -import UserAvatarLink from "../../../../components/user-avatar-link"; -import UserLink from "../../../../components/user-link"; +import UserAvatarLink from "../../../../components/user/user-avatar-link"; +import UserLink from "../../../../components/user/user-link"; import { NostrEvent } from "../../../../types/nostr-event"; export default function TextToSpeechResult({ result }: { result: NostrEvent }) { diff --git a/src/views/tools/transform-note/text-to-speech/tts-status.tsx b/src/views/tools/transform-note/text-to-speech/tts-status.tsx index 1f0d764bf..915e2626d 100644 --- a/src/views/tools/transform-note/text-to-speech/tts-status.tsx +++ b/src/views/tools/transform-note/text-to-speech/tts-status.tsx @@ -2,8 +2,8 @@ import { MouseEventHandler, useState } from "react"; import { Button, Flex, Spacer, Text, useToast } from "@chakra-ui/react"; import { NostrEvent } from "../../../../types/nostr-event"; -import UserAvatarLink from "../../../../components/user-avatar-link"; -import UserLink from "../../../../components/user-link"; +import UserAvatarLink from "../../../../components/user/user-avatar-link"; +import UserLink from "../../../../components/user/user-link"; import { LightningIcon } from "../../../../components/icons"; import { readablizeSats } from "../../../../helpers/bolt11"; diff --git a/src/views/tools/transform-note/translation/index.tsx b/src/views/tools/transform-note/translation/index.tsx index a1af19f44..5071abf98 100644 --- a/src/views/tools/transform-note/translation/index.tsx +++ b/src/views/tools/transform-note/translation/index.tsx @@ -16,7 +16,7 @@ import codes from "iso-language-codes"; import { DraftNostrEvent, NostrEvent } from "../../../../types/nostr-event"; import useTimelineLoader from "../../../../hooks/use-timeline-loader"; -import { getEventUID } from "../../../../helpers/nostr/events"; +import { getEventUID } from "../../../../helpers/nostr/event"; import { useReadRelays } from "../../../../hooks/use-client-relays"; import useSubject from "../../../../hooks/use-subject"; import relayScoreboardService from "../../../../services/relay-scoreboard"; diff --git a/src/views/tools/transform-note/translation/translation-job.tsx b/src/views/tools/transform-note/translation/translation-job.tsx index 5486f08ef..4b4912c54 100644 --- a/src/views/tools/transform-note/translation/translation-job.tsx +++ b/src/views/tools/transform-note/translation/translation-job.tsx @@ -4,8 +4,8 @@ import codes from "iso-language-codes"; import { DVMJob, getRequestInputParam } from "../../../../helpers/nostr/dvm"; import { NostrEvent } from "../../../../types/nostr-event"; import Timestamp from "../../../../components/timestamp"; -import UserLink from "../../../../components/user-link"; -import UserAvatarLink from "../../../../components/user-avatar-link"; +import UserLink from "../../../../components/user/user-link"; +import UserAvatarLink from "../../../../components/user/user-avatar-link"; import TranslationResponse from "./translation-response"; import DebugEventButton from "../../../../components/debug-modal/debug-event-button"; diff --git a/src/views/tools/transform-note/translation/translation-result.tsx b/src/views/tools/transform-note/translation/translation-result.tsx index 15cccbdd8..3fcc6c8c2 100644 --- a/src/views/tools/transform-note/translation/translation-result.tsx +++ b/src/views/tools/transform-note/translation/translation-result.tsx @@ -1,9 +1,9 @@ import { Button, Flex, Text, useDisclosure } from "@chakra-ui/react"; -import UserAvatarLink from "../../../../components/user-avatar-link"; -import UserLink from "../../../../components/user-link"; -import { NoteContents } from "../../../../components/note/text-note-contents"; +import UserAvatarLink from "../../../../components/user/user-avatar-link"; +import UserLink from "../../../../components/user/user-link"; import { NostrEvent } from "../../../../types/nostr-event"; +import TextNoteContents from "../../../../components/note/timeline-note/text-note-contents"; export default function TranslationResult({ result }: { result: NostrEvent }) { const content = useDisclosure(); @@ -18,7 +18,7 @@ export default function TranslationResult({ result }: { result: NostrEvent }) { {content.isOpen ? "Hide" : "Show"} Content - {content.isOpen && } + {content.isOpen && } ); } diff --git a/src/views/tools/transform-note/translation/translation-status.tsx b/src/views/tools/transform-note/translation/translation-status.tsx index bf4a07822..4736c8616 100644 --- a/src/views/tools/transform-note/translation/translation-status.tsx +++ b/src/views/tools/transform-note/translation/translation-status.tsx @@ -2,8 +2,8 @@ import { MouseEventHandler, useState } from "react"; import { Button, Flex, Spacer, Text, useToast } from "@chakra-ui/react"; import { NostrEvent } from "../../../../types/nostr-event"; -import UserAvatarLink from "../../../../components/user-avatar-link"; -import UserLink from "../../../../components/user-link"; +import UserAvatarLink from "../../../../components/user/user-avatar-link"; +import UserLink from "../../../../components/user/user-link"; import { LightningIcon } from "../../../../components/icons"; import { readablizeSats } from "../../../../helpers/bolt11"; diff --git a/src/views/tools/unknown-event-feed.tsx b/src/views/tools/unknown-event-feed.tsx index 142a0b6fc..4e16a2c4b 100644 --- a/src/views/tools/unknown-event-feed.tsx +++ b/src/views/tools/unknown-event-feed.tsx @@ -18,7 +18,7 @@ import useSubject from "../../hooks/use-subject"; import { NostrEvent } from "../../types/nostr-event"; import { ChevronLeftIcon } from "../../components/icons"; import useClientSideMuteFilter from "../../hooks/use-client-side-mute-filter"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { EmbedEvent } from "../../components/embed-event"; import { STREAM_CHAT_MESSAGE_KIND, STREAM_KIND } from "../../helpers/nostr/stream"; import { diff --git a/src/views/tools/wot-test.tsx b/src/views/tools/wot-test.tsx index 3c2152ff2..d18689a29 100644 --- a/src/views/tools/wot-test.tsx +++ b/src/views/tools/wot-test.tsx @@ -4,8 +4,8 @@ import { Button, Flex, Select, SimpleGrid, Text } from "@chakra-ui/react"; import useCurrentAccount from "../../hooks/use-current-account"; import RequireCurrentAccount from "../../providers/route/require-current-account"; import { useNetworkConnectionCount } from "../../hooks/use-user-network"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import { ChevronLeftIcon } from "../../components/icons"; import { useNavigate } from "react-router-dom"; import VerticalPageLayout from "../../components/vertical-page-layout"; diff --git a/src/views/torrents/components/torrent-comment-menu.tsx b/src/views/torrents/components/torrent-comment-menu.tsx index b6b3410ce..2da6cb7e1 100644 --- a/src/views/torrents/components/torrent-comment-menu.tsx +++ b/src/views/torrents/components/torrent-comment-menu.tsx @@ -1,4 +1,4 @@ -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import OpenInAppMenuItem from "../../../components/common-menu-items/open-in-app"; import CopyShareLinkMenuItem from "../../../components/common-menu-items/copy-share-link"; import CopyEmbedCodeMenuItem from "../../../components/common-menu-items/copy-embed-code"; @@ -14,14 +14,14 @@ export default function TorrentCommentMenu({ }: { comment: NostrEvent; detailsClick?: () => void } & Omit) { return ( <> - + - + ); } diff --git a/src/views/torrents/components/torrent-menu.tsx b/src/views/torrents/components/torrent-menu.tsx index 309237bd5..8996388c0 100644 --- a/src/views/torrents/components/torrent-menu.tsx +++ b/src/views/torrents/components/torrent-menu.tsx @@ -1,6 +1,6 @@ import { MenuItem, useDisclosure } from "@chakra-ui/react"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import { NostrEvent } from "../../../types/nostr-event"; import { TranslateIcon } from "../../../components/icons"; import DeleteEventMenuItem from "../../../components/common-menu-items/delete-event"; @@ -18,7 +18,7 @@ export default function TorrentMenu({ return ( <> - + @@ -27,7 +27,7 @@ export default function TorrentMenu({ Translations - + {translationsModal.isOpen && } diff --git a/src/views/torrents/components/torrent-table-row.tsx b/src/views/torrents/components/torrent-table-row.tsx index 908373483..6dda50e02 100644 --- a/src/views/torrents/components/torrent-table-row.tsx +++ b/src/views/torrents/components/torrent-table-row.tsx @@ -5,14 +5,14 @@ import { Link as RouterLink, useLocation } from "react-router-dom"; import { getTorrentMagnetLink, getTorrentSize, getTorrentTitle } from "../../../helpers/nostr/torrents"; import { NostrEvent } from "../../../types/nostr-event"; import Timestamp from "../../../components/timestamp"; -import UserLink from "../../../components/user-link"; +import UserLink from "../../../components/user/user-link"; import Magnet from "../../../components/icons/magnet"; import { getSharableEventAddress } from "../../../helpers/nip19"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { formatBytes } from "../../../helpers/number"; -import NoteZapButton from "../../../components/note/note-zap-button"; import TorrentMenu from "./torrent-menu"; +import NoteZapButton from "../../../components/note/note-zap-button"; type DisplayCategory = { name: string; tags: string[] }; diff --git a/src/views/torrents/components/torrents-comments.tsx b/src/views/torrents/components/torrents-comments.tsx index 8e949e475..bda1f0fec 100644 --- a/src/views/torrents/components/torrents-comments.tsx +++ b/src/views/torrents/components/torrents-comments.tsx @@ -22,21 +22,21 @@ import { useDisclosure, } from "@chakra-ui/react"; import useClientSideMuteFilter from "../../../hooks/use-client-side-mute-filter"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import Timestamp from "../../../components/timestamp"; import Minus from "../../../components/icons/minus"; import Expand01 from "../../../components/icons/expand-01"; import { TrustProvider } from "../../../providers/local/trust"; -import { NoteContents } from "../../../components/note/text-note-contents"; -import NoteReactions from "../../../components/note/components/note-reactions"; import { ReplyIcon } from "../../../components/icons"; import ReplyForm from "../../thread/components/reply-form"; import EventInteractionDetailsModal from "../../../components/event-interactions-modal"; -import NoteZapButton from "../../../components/note/note-zap-button"; import useThreadColorLevelProps from "../../../hooks/use-thread-color-level-props"; import TorrentCommentMenu from "./torrent-comment-menu"; +import NoteReactions from "../../../components/note/timeline-note/components/note-reactions"; +import NoteZapButton from "../../../components/note/note-zap-button"; +import { TextNoteContents } from "../../../components/note/timeline-note/text-note-contents"; export const ThreadPost = memo(({ post, level = -1 }: { post: ThreadItem; level?: number }) => { const { showReactions } = useAppSettings(); @@ -91,7 +91,7 @@ export const ThreadPost = memo(({ post, level = -1 }: { post: ThreadItem; level? ) : ( <> - + ); diff --git a/src/views/torrents/torrent.tsx b/src/views/torrents/torrent.tsx index 081ce2ae4..d4c0963d6 100644 --- a/src/views/torrents/torrent.tsx +++ b/src/views/torrents/torrent.tsx @@ -23,8 +23,8 @@ import useSingleEvent from "../../hooks/use-single-event"; import VerticalPageLayout from "../../components/vertical-page-layout"; import { NostrEvent } from "../../types/nostr-event"; import { ErrorBoundary } from "../../components/error-boundary"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import { TORRENT_COMMENT_KIND, getTorrentFiles, @@ -34,16 +34,16 @@ import { } from "../../helpers/nostr/torrents"; import Magnet from "../../components/icons/magnet"; import { formatBytes } from "../../helpers/number"; -import { NoteContents } from "../../components/note/text-note-contents"; import Timestamp from "../../components/timestamp"; -import NoteZapButton from "../../components/note/note-zap-button"; import TorrentMenu from "./components/torrent-menu"; -import QuoteRepostButton from "../../components/note/components/quote-repost-button"; import TorrentComments from "./components/torrents-comments"; import ReplyForm from "../thread/components/reply-form"; -import { getThreadReferences } from "../../helpers/nostr/events"; +import { getThreadReferences } from "../../helpers/nostr/event"; import MessageTextCircle01 from "../../components/icons/message-text-circle-01"; import useParamsEventPointer from "../../hooks/use-params-event-pointer"; +import NoteZapButton from "../../components/note/note-zap-button"; +import QuoteRepostButton from "../../components/note/quote-repost-button"; +import { TextNoteContents } from "../../components/note/timeline-note/text-note-contents"; function TorrentDetailsPage({ torrent }: { torrent: NostrEvent }) { const files = getTorrentFiles(torrent); @@ -87,7 +87,7 @@ function TorrentDetailsPage({ torrent }: { torrent: NostrEvent }) { Description - + )} diff --git a/src/views/tracks/components/track-card.tsx b/src/views/tracks/components/track-card.tsx index 4a5a9c359..f968d1fbb 100644 --- a/src/views/tracks/components/track-card.tsx +++ b/src/views/tracks/components/track-card.tsx @@ -1,22 +1,22 @@ import { useRef } from "react"; import { Button, ButtonGroup, Card, CardBody, CardFooter, CardHeader, CardProps, Flex, Tag } from "@chakra-ui/react"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import { NostrEvent } from "../../../types/nostr-event"; import { getHashtags } from "../../../helpers/nostr/stemstr"; import { CompactNoteContent } from "../../../components/compact-note-content"; import Timestamp from "../../../components/timestamp"; -import UserLink from "../../../components/user-link"; -import UserAvatarLink from "../../../components/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; import { ReplyIcon } from "../../../components/icons"; -import QuoteRepostButton from "../../../components/note/components/quote-repost-button"; -import NoteZapButton from "../../../components/note/note-zap-button"; import TrackStemstrButton from "./track-stemstr-button"; import TrackDownloadButton from "./track-download-button"; import TrackPlayer from "./track-player"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; import TrackMenu from "./track-menu"; +import QuoteRepostButton from "../../../components/note/quote-repost-button"; +import NoteZapButton from "../../../components/note/note-zap-button"; export default function TrackCard({ track, ...props }: { track: NostrEvent } & Omit) { const hashtags = getHashtags(track); diff --git a/src/views/tracks/components/track-menu.tsx b/src/views/tracks/components/track-menu.tsx index 9f83262fa..e57265b07 100644 --- a/src/views/tracks/components/track-menu.tsx +++ b/src/views/tracks/components/track-menu.tsx @@ -1,5 +1,5 @@ import { NostrEvent } from "../../../types/nostr-event"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import OpenInAppMenuItem from "../../../components/common-menu-items/open-in-app"; import CopyShareLinkMenuItem from "../../../components/common-menu-items/copy-share-link"; import CopyEmbedCodeMenuItem from "../../../components/common-menu-items/copy-embed-code"; @@ -13,14 +13,14 @@ export default function TrackMenu({ }: { track: NostrEvent; detailsClick?: () => void } & Omit) { return ( <> - + - + ); } diff --git a/src/views/user/about/index.tsx b/src/views/user/about/index.tsx index fc33740c9..60c79f990 100644 --- a/src/views/user/about/index.tsx +++ b/src/views/user/about/index.tsx @@ -2,10 +2,10 @@ import { useOutletContext, Link as RouterLink } from "react-router-dom"; import { Box, Button, Flex, Heading, IconButton, Image, Link, Text, useDisclosure } from "@chakra-ui/react"; import { nip19 } from "nostr-tools"; -import { getUserDisplayName } from "../../../helpers/user-metadata"; +import { getUserDisplayName } from "../../../helpers/nostr/user-metadata"; import { getLudEndpoint } from "../../../helpers/lnurl"; import { EmbedableContent, embedUrls } from "../../../helpers/embeds"; -import { truncatedId } from "../../../helpers/nostr/events"; +import { truncatedId } from "../../../helpers/nostr/event"; import { parseAddress } from "../../../services/dns-identity"; import { useAdditionalRelayContext } from "../../../providers/local/additional-relay-context"; import { useUserMetadata } from "../../../hooks/use-user-metadata"; @@ -20,10 +20,10 @@ import { } from "../../../components/icons"; import { CopyIconButton } from "../../../components/copy-icon-button"; import { QrIconButton } from "../components/share-qr-button"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; -import UserAvatar from "../../../components/user-avatar"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; +import UserAvatar from "../../../components/user/user-avatar"; import { ChatIcon } from "@chakra-ui/icons"; -import { UserFollowButton } from "../../../components/user-follow-button"; +import { UserFollowButton } from "../../../components/user/user-follow-button"; import UserZapButton from "../components/user-zap-button"; import { UserProfileMenu } from "../components/user-profile-menu"; import { useSharableProfileId } from "../../../hooks/use-shareable-profile-id"; diff --git a/src/views/user/about/user-profile-badges.tsx b/src/views/user/about/user-profile-badges.tsx index 46428eaf4..a1aecbf03 100644 --- a/src/views/user/about/user-profile-badges.tsx +++ b/src/views/user/about/user-profile-badges.tsx @@ -20,11 +20,11 @@ import { Link as RouterLink } from "react-router-dom"; import useUserProfileBadges from "../../../hooks/use-user-profile-badges"; import { getBadgeDescription, getBadgeImage, getBadgeName } from "../../../helpers/nostr/badges"; -import { getEventCoordinate } from "../../../helpers/nostr/events"; +import { getEventCoordinate } from "../../../helpers/nostr/event"; import { NostrEvent } from "../../../types/nostr-event"; import { getSharableEventAddress } from "../../../helpers/nip19"; -import UserAvatarLink from "../../../components/user-avatar-link"; -import UserLink from "../../../components/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; +import UserLink from "../../../components/user/user-link"; import Timestamp from "../../../components/timestamp"; import { useState } from "react"; diff --git a/src/views/user/components/header.tsx b/src/views/user/components/header.tsx index 362ddee55..b9f15e793 100644 --- a/src/views/user/components/header.tsx +++ b/src/views/user/components/header.tsx @@ -2,13 +2,13 @@ import { Flex, Heading, IconButton, Spacer } from "@chakra-ui/react"; import { useNavigate } from "react-router-dom"; import { EditIcon, GhostIcon } from "../../../components/icons"; -import UserAvatar from "../../../components/user-avatar"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; -import { getUserDisplayName } from "../../../helpers/user-metadata"; +import UserAvatar from "../../../components/user/user-avatar"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; +import { getUserDisplayName } from "../../../helpers/nostr/user-metadata"; import useCurrentAccount from "../../../hooks/use-current-account"; import { useUserMetadata } from "../../../hooks/use-user-metadata"; import { UserProfileMenu } from "./user-profile-menu"; -import { UserFollowButton } from "../../../components/user-follow-button"; +import { UserFollowButton } from "../../../components/user/user-follow-button"; import accountService from "../../../services/account"; import { useBreakpointValue } from "../../../providers/global/breakpoint-provider"; diff --git a/src/views/user/components/share-qr-button.tsx b/src/views/user/components/share-qr-button.tsx index 4bb6a7ba6..815eca23e 100644 --- a/src/views/user/components/share-qr-button.tsx +++ b/src/views/user/components/share-qr-button.tsx @@ -18,7 +18,7 @@ import { import { nip19 } from "nostr-tools"; import { QrCodeIcon } from "../../../components/icons"; -import QrCodeSvg from "../../../components/qr-code-svg"; +import QrCodeSvg from "../../../components/qr-code/qr-code-svg"; import { CopyIconButton } from "../../../components/copy-icon-button"; import { useSharableProfileId } from "../../../hooks/use-shareable-profile-id"; diff --git a/src/views/user/components/user-card.tsx b/src/views/user/components/user-card.tsx index 363a8ad3d..44c769006 100644 --- a/src/views/user/components/user-card.tsx +++ b/src/views/user/components/user-card.tsx @@ -1,9 +1,9 @@ import { Flex, FlexProps } from "@chakra-ui/react"; -import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon"; -import { UserFollowButton } from "../../../components/user-follow-button"; -import UserLink from "../../../components/user-link"; -import UserAvatarLink from "../../../components/user-avatar-link"; +import { UserDnsIdentityIcon } from "../../../components/user/user-dns-identity-icon"; +import { UserFollowButton } from "../../../components/user/user-follow-button"; +import UserLink from "../../../components/user/user-link"; +import UserAvatarLink from "../../../components/user/user-avatar-link"; export type UserCardProps = { pubkey: string; relay?: string } & Omit; diff --git a/src/views/user/components/user-profile-menu.tsx b/src/views/user/components/user-profile-menu.tsx index 745fb3c57..9c7bc475e 100644 --- a/src/views/user/components/user-profile-menu.tsx +++ b/src/views/user/components/user-profile-menu.tsx @@ -2,7 +2,7 @@ import { MenuItem, useDisclosure, useToast } from "@chakra-ui/react"; import { Link as RouterLink } from "react-router-dom"; import { nip19 } from "nostr-tools"; -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import { DirectMessagesIcon, CopyToClipboardIcon, @@ -16,11 +16,11 @@ import { } from "../../../components/icons"; import accountService from "../../../services/account"; import { useUserMetadata } from "../../../hooks/use-user-metadata"; -import { getUserDisplayName } from "../../../helpers/user-metadata"; +import { getUserDisplayName } from "../../../helpers/nostr/user-metadata"; import UserDebugModal from "../../../components/debug-modal/user-debug-modal"; import { useSharableProfileId } from "../../../hooks/use-shareable-profile-id"; import { buildAppSelectUrl } from "../../../helpers/nostr/apps"; -import { truncatedId } from "../../../helpers/nostr/events"; +import { truncatedId } from "../../../helpers/nostr/event"; import useUserMuteActions from "../../../hooks/use-user-mute-actions"; import useCurrentAccount from "../../../hooks/use-current-account"; import userMailboxesService from "../../../services/user-mailboxes"; @@ -52,7 +52,7 @@ export const UserProfileMenu = ({ return ( <> - + window.open(buildAppSelectUrl(sharableId), "_blank")} icon={}> View in app... @@ -95,7 +95,7 @@ export const UserProfileMenu = ({ Relay selection )} - + {infoModal.isOpen && ( )} diff --git a/src/views/user/dms.tsx b/src/views/user/dms.tsx index 6ba242680..a77c10f22 100644 --- a/src/views/user/dms.tsx +++ b/src/views/user/dms.tsx @@ -13,13 +13,13 @@ import IntersectionObserverProvider, { import VerticalPageLayout from "../../components/vertical-page-layout"; import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status"; import { NostrEvent, isPTag } from "../../types/nostr-event"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import ArrowRight from "../../components/icons/arrow-right"; import { AtIcon } from "../../components/icons"; import Timestamp from "../../components/timestamp"; import ArrowLeft from "../../components/icons/arrow-left"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; function DirectMessage({ dm, pubkey }: { dm: NostrEvent; pubkey: string }) { const sender = dm.pubkey; diff --git a/src/views/user/emoji-packs.tsx b/src/views/user/emoji-packs.tsx index a642db472..e55458676 100644 --- a/src/views/user/emoji-packs.tsx +++ b/src/views/user/emoji-packs.tsx @@ -4,7 +4,7 @@ import { Heading, SimpleGrid } from "@chakra-ui/react"; import { useAdditionalRelayContext } from "../../providers/local/additional-relay-context"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import useSubject from "../../hooks/use-subject"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import EmojiPackCard from "../emoji-packs/components/emoji-pack-card"; diff --git a/src/views/user/followers.tsx b/src/views/user/followers.tsx index e2ef4c799..71a959437 100644 --- a/src/views/user/followers.tsx +++ b/src/views/user/followers.tsx @@ -11,9 +11,9 @@ import IntersectionObserverProvider, { } from "../../providers/local/intersection-observer"; import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status"; import { useMemo, useRef } from "react"; -import { getEventUID } from "../../helpers/nostr/events"; -import UserLink from "../../components/user-link"; -import UserAvatarLink from "../../components/user-avatar-link"; +import { getEventUID } from "../../helpers/nostr/event"; +import UserLink from "../../components/user/user-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; function FollowerItem({ event }: { event: Event }) { const ref = useRef(null); diff --git a/src/views/user/goals.tsx b/src/views/user/goals.tsx index 79c426009..0e8148890 100644 --- a/src/views/user/goals.tsx +++ b/src/views/user/goals.tsx @@ -4,7 +4,7 @@ import { Flex, SimpleGrid } from "@chakra-ui/react"; import { useAdditionalRelayContext } from "../../providers/local/additional-relay-context"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import useSubject from "../../hooks/use-subject"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import { GOAL_KIND } from "../../helpers/nostr/goal"; diff --git a/src/views/user/index.tsx b/src/views/user/index.tsx index 6417c95b3..ecca06e6f 100644 --- a/src/views/user/index.tsx +++ b/src/views/user/index.tsx @@ -29,7 +29,7 @@ import { kinds } from "nostr-tools"; import { Outlet, useMatches, useNavigate } from "react-router-dom"; import { useUserMetadata } from "../../hooks/use-user-metadata"; -import { getUserDisplayName } from "../../helpers/user-metadata"; +import { getUserDisplayName } from "../../helpers/nostr/user-metadata"; import { useAppTitle } from "../../hooks/use-app-title"; import { useReadRelays } from "../../hooks/use-client-relays"; import relayScoreboardService from "../../services/relay-scoreboard"; diff --git a/src/views/user/lists.tsx b/src/views/user/lists.tsx index 5b46593da..e6363f0de 100644 --- a/src/views/user/lists.tsx +++ b/src/views/user/lists.tsx @@ -14,13 +14,13 @@ import { PIN_LIST_KIND, isJunkList, } from "../../helpers/nostr/lists"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import ListCard from "../lists/components/list-card"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import VerticalPageLayout from "../../components/vertical-page-layout"; import { NostrEvent } from "../../types/nostr-event"; -import UserName from "../../components/user-name"; +import UserName from "../../components/user/user-name"; export default function UserListsTab() { const { pubkey } = useOutletContext() as { pubkey: string }; diff --git a/src/views/user/muted-by.tsx b/src/views/user/muted-by.tsx index bc3329503..655bf96bc 100644 --- a/src/views/user/muted-by.tsx +++ b/src/views/user/muted-by.tsx @@ -2,8 +2,8 @@ import { memo, useMemo, useRef } from "react"; import { Flex, Heading, Link, SimpleGrid } from "@chakra-ui/react"; import { Link as RouterLink, useOutletContext } from "react-router-dom"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import { useReadRelays } from "../../hooks/use-client-relays"; import { MUTE_LIST_KIND, PEOPLE_LIST_KIND, getListName, getPubkeysFromList } from "../../helpers/nostr/lists"; @@ -12,7 +12,7 @@ import IntersectionObserverProvider, { useRegisterIntersectionEntity, } from "../../providers/local/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import VerticalPageLayout from "../../components/vertical-page-layout"; import { NostrEvent } from "../../types/nostr-event"; import SuperMap from "../../classes/super-map"; diff --git a/src/views/user/notes.tsx b/src/views/user/notes.tsx index 098c86b35..f697b6f7a 100644 --- a/src/views/user/notes.tsx +++ b/src/views/user/notes.tsx @@ -3,7 +3,7 @@ import { Flex, Spacer } from "@chakra-ui/react"; import { useOutletContext } from "react-router-dom"; import { kinds } from "nostr-tools"; -import { isReply, isRepost, truncatedId } from "../../helpers/nostr/events"; +import { isReply, isRepost, truncatedId } from "../../helpers/nostr/event"; import { useAdditionalRelayContext } from "../../providers/local/additional-relay-context"; import { RelayIconStack } from "../../components/relay-icon-stack"; import { NostrEvent } from "../../types/nostr-event"; diff --git a/src/views/user/reactions.tsx b/src/views/user/reactions.tsx index a3a363f70..f5ff97267 100644 --- a/src/views/user/reactions.tsx +++ b/src/views/user/reactions.tsx @@ -14,12 +14,12 @@ import IntersectionObserverProvider, { } from "../../providers/local/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import { TrustProvider } from "../../providers/local/trust"; -import UserAvatar from "../../components/user-avatar"; -import UserLink from "../../components/user-link"; -import NoteMenu from "../../components/note/note-menu"; +import UserAvatar from "../../components/user/user-avatar"; +import UserLink from "../../components/user/user-link"; import { EmbedEventPointer } from "../../components/embed-event"; import { embedEmoji } from "../../components/embed-types"; import VerticalPageLayout from "../../components/vertical-page-layout"; +import NoteMenu from "../../components/note/note-menu"; const Reaction = ({ reaction: reaction }: { reaction: NostrEvent }) => { const ref = useRef(null); diff --git a/src/views/user/reports.tsx b/src/views/user/reports.tsx index 283d10d56..4491e66de 100644 --- a/src/views/user/reports.tsx +++ b/src/views/user/reports.tsx @@ -3,9 +3,9 @@ import { Flex, Text } from "@chakra-ui/react"; import { useOutletContext } from "react-router-dom"; import { kinds } from "nostr-tools"; -import { NoteLink } from "../../components/note-link"; -import UserLink from "../../components/user-link"; -import { filterTagsByContentRefs, getEventUID } from "../../helpers/nostr/events"; +import { NoteLink } from "../../components/note/note-link"; +import UserLink from "../../components/user/user-link"; +import { filterTagsByContentRefs, getEventUID } from "../../helpers/nostr/event"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import { isETag, isPTag, NostrEvent } from "../../types/nostr-event"; import { useAdditionalRelayContext } from "../../providers/local/additional-relay-context"; diff --git a/src/views/user/streams.tsx b/src/views/user/streams.tsx index c9ad2af46..c6e59bb02 100644 --- a/src/views/user/streams.tsx +++ b/src/views/user/streams.tsx @@ -1,6 +1,6 @@ import { SimpleGrid } from "@chakra-ui/react"; import { useOutletContext } from "react-router-dom"; -import { truncatedId } from "../../helpers/nostr/events"; +import { truncatedId } from "../../helpers/nostr/event"; import { useAdditionalRelayContext } from "../../providers/local/additional-relay-context"; import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; diff --git a/src/views/user/tracks.tsx b/src/views/user/tracks.tsx index c418ee295..e81cd3332 100644 --- a/src/views/user/tracks.tsx +++ b/src/views/user/tracks.tsx @@ -5,7 +5,7 @@ import { Box, SimpleGrid } from "@chakra-ui/react"; import { useAdditionalRelayContext } from "../../providers/local/additional-relay-context"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import useSubject from "../../hooks/use-subject"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import IntersectionObserverProvider, { useRegisterIntersectionEntity, } from "../../providers/local/intersection-observer"; diff --git a/src/views/user/videos.tsx b/src/views/user/videos.tsx index db4ccd9ce..7df10e6ee 100644 --- a/src/views/user/videos.tsx +++ b/src/views/user/videos.tsx @@ -4,7 +4,7 @@ import { SimpleGrid } from "@chakra-ui/react"; import { useAdditionalRelayContext } from "../../providers/local/additional-relay-context"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import useSubject from "../../hooks/use-subject"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback"; import VerticalPageLayout from "../../components/vertical-page-layout"; diff --git a/src/views/user/zaps.tsx b/src/views/user/zaps.tsx index a3ee3680b..e09c96901 100644 --- a/src/views/user/zaps.tsx +++ b/src/views/user/zaps.tsx @@ -5,9 +5,9 @@ import { useOutletContext } from "react-router-dom"; import { ErrorBoundary, ErrorFallback } from "../../components/error-boundary"; import { LightningIcon } from "../../components/icons"; -import { NoteLink } from "../../components/note-link"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; +import { NoteLink } from "../../components/note/note-link"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; import { readablizeSats } from "../../helpers/bolt11"; import { isProfileZap, isNoteZap, parseZapEvent, totalZaps } from "../../helpers/nostr/zaps"; import useTimelineLoader from "../../hooks/use-timeline-loader"; @@ -24,7 +24,7 @@ import { EmbedableContent, embedUrls } from "../../helpers/embeds"; import { embedNostrLinks, renderGenericUrl } from "../../components/embed-types"; import Timestamp from "../../components/timestamp"; import { EmbedEventNostrLink, EmbedEventPointer } from "../../components/embed-event"; -import { parseCoordinate } from "../../helpers/nostr/events"; +import { parseCoordinate } from "../../helpers/nostr/event"; import VerticalPageLayout from "../../components/vertical-page-layout"; const Zap = ({ zapEvent }: { zapEvent: NostrEvent }) => { diff --git a/src/views/videos/components/video-card.tsx b/src/views/videos/components/video-card.tsx index 42e3c5908..1da261e37 100644 --- a/src/views/videos/components/video-card.tsx +++ b/src/views/videos/components/video-card.tsx @@ -5,7 +5,7 @@ import { Link as RouterLink } from "react-router-dom"; import { NostrEvent } from "../../../types/nostr-event"; import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer"; import { getVideoDuration, getVideoImages, getVideoSummary, getVideoTitle } from "../../../helpers/nostr/flare"; -import { getEventUID } from "../../../helpers/nostr/events"; +import { getEventUID } from "../../../helpers/nostr/event"; import HoverLinkOverlay from "../../../components/hover-link-overlay"; import { getSharableEventAddress } from "../../../helpers/nip19"; diff --git a/src/views/videos/components/video-menu.tsx b/src/views/videos/components/video-menu.tsx index 41e11065b..6d5920164 100644 --- a/src/views/videos/components/video-menu.tsx +++ b/src/views/videos/components/video-menu.tsx @@ -1,4 +1,4 @@ -import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button"; +import { DotsMenuButton, MenuIconButtonProps } from "../../../components/dots-menu-button"; import OpenInAppMenuItem from "../../../components/common-menu-items/open-in-app"; import CopyShareLinkMenuItem from "../../../components/common-menu-items/copy-share-link"; import CopyEmbedCodeMenuItem from "../../../components/common-menu-items/copy-embed-code"; @@ -9,13 +9,13 @@ import DebugEventMenuItem from "../../../components/debug-modal/debug-event-menu export default function VideoMenu({ video, ...props }: { video: NostrEvent } & Omit) { return ( <> - + - + ); } diff --git a/src/views/videos/index.tsx b/src/views/videos/index.tsx index 027672746..f6e5e0933 100644 --- a/src/views/videos/index.tsx +++ b/src/views/videos/index.tsx @@ -12,7 +12,7 @@ import Upload01 from "../../components/icons/upload-01"; import IntersectionObserverProvider from "../../providers/local/intersection-observer"; import { FLARE_VIDEO_KIND } from "../../helpers/nostr/flare"; import VideoCard from "./components/video-card"; -import { getEventUID } from "../../helpers/nostr/events"; +import { getEventUID } from "../../helpers/nostr/event"; import { ErrorBoundary } from "../../components/error-boundary"; import { useReadRelays } from "../../hooks/use-client-relays"; diff --git a/src/views/videos/video.tsx b/src/views/videos/video.tsx index b97c609ef..0704e48c0 100644 --- a/src/views/videos/video.tsx +++ b/src/views/videos/video.tsx @@ -11,24 +11,24 @@ import { import { NostrEvent } from "../../types/nostr-event"; import useParamsAddressPointer from "../../hooks/use-params-address-pointer"; import useReplaceableEvent from "../../hooks/use-replaceable-event"; -import UserAvatarLink from "../../components/user-avatar-link"; -import UserLink from "../../components/user-link"; -import { UserDnsIdentityIcon } from "../../components/user-dns-identity-icon"; -import { UserFollowButton } from "../../components/user-follow-button"; +import UserAvatarLink from "../../components/user/user-avatar-link"; +import UserLink from "../../components/user/user-link"; +import { UserDnsIdentityIcon } from "../../components/user/user-dns-identity-icon"; +import { UserFollowButton } from "../../components/user/user-follow-button"; import VideoMenu from "./components/video-menu"; -import NoteZapButton from "../../components/note/note-zap-button"; import SimpleLikeButton from "../../components/event-reactions/simple-like-button"; import SimpleDislikeButton from "../../components/event-reactions/simple-dislike-button"; import { ErrorBoundary } from "../../components/error-boundary"; -import QuoteRepostButton from "../../components/note/components/quote-repost-button"; import { useReadRelays } from "../../hooks/use-client-relays"; import useTimelineLoader from "../../hooks/use-timeline-loader"; import useSubject from "../../hooks/use-subject"; import VideoCard from "./components/video-card"; -import { getEventUID } from "../../helpers/nostr/events"; -import UserName from "../../components/user-name"; +import { getEventUID } from "../../helpers/nostr/event"; +import UserName from "../../components/user/user-name"; import { useBreakpointValue } from "../../providers/global/breakpoint-provider"; import SimpleBookmarkButton from "../../components/simple-bookmark-button"; +import NoteZapButton from "../../components/note/note-zap-button"; +import QuoteRepostButton from "../../components/note/quote-repost-button"; function VideoRecommendations({ video }: { video: NostrEvent }) { const readRelays = useReadRelays();