From 98a37d46184edc63463551b809b41595290494cc Mon Sep 17 00:00:00 2001 From: Ren Amamiya <123083837+reyamir@users.noreply.github.com> Date: Thu, 27 Apr 2023 13:27:11 +0700 Subject: [PATCH] wip: restructure --- .prettierrc | 12 +- src/channel/_default.page.tsx | 1 + src/channel/layout.tsx | 29 +++ .../channel => channel/pages}/index.page.tsx | 30 ++-- src/chat/_default.page.tsx | 1 + src/chat/layout.tsx | 29 +++ src/{pages/chat => chat/pages}/index.page.tsx | 18 +- src/newsfeed/_default.page.tsx | 1 + src/newsfeed/layout.tsx | 29 +++ src/newsfeed/pages/circle/index.page.tsx | 9 + src/newsfeed/pages/following/index.page.tsx | 114 ++++++++++++ src/onboarding/_default.page.tsx | 1 + src/onboarding/layout.tsx | 47 +++++ src/onboarding/pages/create/index.page.tsx | 160 +++++++++++++++++ .../pages}/create/step-2/index.page.tsx | 127 +++++++------ src/onboarding/pages/import/index.page.tsx | 124 +++++++++++++ .../pages/import/step-2/index.page.tsx | 89 +++++++++ .../pages/index}/index.page.tsx | 76 ++++---- src/pages/newsfeed/circle/index.page.tsx | 15 -- src/pages/newsfeed/following/index.page.tsx | 119 ------------ src/pages/onboarding/create/index.page.tsx | 169 ------------------ src/pages/onboarding/login/index.page.tsx | 121 ------------- .../onboarding/login/step-2/index.page.tsx | 156 ---------------- src/pages/user/index.page.tsx | 18 -- src/renderer/_default.page.client.tsx | 8 +- src/renderer/_default.page.server.tsx | 4 +- src/renderer/layoutDefault.tsx | 3 + src/renderer/shell.tsx | 15 +- .../accountProvider.tsx | 2 +- src/{components => shared}/activeLink.tsx | 2 +- src/{components => shared}/appHeader.tsx | 2 +- src/{components => shared}/avatarUploader.tsx | 2 +- .../channels/channelBlackList.tsx | 2 +- .../channels/channelList.tsx | 6 +- .../channels/channelListItem.tsx | 7 +- .../channels/channelProfile.tsx | 5 +- .../channels/createChannelModal.tsx | 14 +- .../channels/messages/hideMessageButton.tsx | 12 +- .../channels/messages/index.tsx | 7 +- .../channels/messages/item.tsx | 11 +- .../channels/messages/muteButton.tsx | 12 +- .../channels/messages/replyButton.tsx | 5 +- .../channels/updateChannelModal.tsx | 14 +- src/{components => shared}/chats/chatList.tsx | 11 +- .../chats/chatListItem.tsx | 9 +- .../chats/chatModal.tsx | 0 .../chats/chatModalUser.tsx | 5 +- .../chats/messageList.tsx | 9 +- .../chats/messageListItem.tsx | 5 +- .../chats/messageUser.tsx | 7 +- src/{components => shared}/eventCollector.tsx | 18 +- src/{components => shared}/form/base.tsx | 14 +- src/{components => shared}/form/channel.tsx | 16 +- src/{components => shared}/form/chat.tsx | 14 +- src/{components => shared}/form/comment.tsx | 10 +- .../form/imagePicker.tsx | 9 +- .../icons/Lume.tsx => shared/icons/lume.tsx} | 2 +- .../layouts/channel.tsx | 6 +- .../layouts/newsfeed.tsx | 6 +- .../layouts/onboarding.tsx | 2 +- .../multiAccounts/activeAccount.tsx | 2 +- .../multiAccounts/inactiveAccount.tsx | 2 +- .../multiAccounts/index.tsx | 12 +- src/{components => shared}/navigation.tsx | 6 +- .../networkStatusIndicator.tsx | 2 +- src/{components => shared}/note/base.tsx | 9 +- src/{components => shared}/note/comment.tsx | 12 +- src/{components => shared}/note/extend.tsx | 12 +- .../note/meta/comment.tsx | 12 +- .../note/meta/reaction.tsx | 10 +- src/{components => shared}/note/metadata.tsx | 0 src/{components => shared}/note/parent.tsx | 12 +- .../note/placeholder.tsx | 0 .../note/preview/image.tsx | 0 .../note/preview/video.tsx | 0 .../note/preview/youtube.tsx | 0 src/{components => shared}/note/quote.tsx | 10 +- .../note/quoteRepost.tsx | 7 +- src/{components => shared}/note/rootNote.tsx | 12 +- .../profile/followers.tsx | 7 +- .../profile/follows.tsx | 7 +- .../profile/metadata.tsx | 8 +- src/{components => shared}/profile/notes.tsx | 7 +- src/{components => shared}/relaysProvider.tsx | 2 +- src/{components => shared}/tooltip.tsx | 0 src/{components => shared}/user/base.tsx | 7 +- src/{components => shared}/user/extend.tsx | 7 +- src/{components => shared}/user/follow.tsx | 7 +- src/{components => shared}/user/large.tsx | 7 +- src/{components => shared}/user/mention.tsx | 4 +- src/{components => shared}/user/mini.tsx | 7 +- src/{components => shared}/user/muted.tsx | 11 +- .../user/quoteRepost.tsx | 7 +- src/splashscreen/_default.page.route.tsx | 1 + src/{ => splashscreen}/pages/index.page.tsx | 19 +- src/stores/onboarding.tsx | 3 + src/utils/broadcast.tsx | 2 +- src/utils/hooks/useChannelMetadata.tsx | 10 +- src/utils/hooks/useChannelProfile.tsx | 5 +- src/utils/hooks/useDecryptMessage.tsx | 2 +- src/utils/parser.tsx | 10 +- tsconfig.json | 7 +- 102 files changed, 997 insertions(+), 1041 deletions(-) create mode 100644 src/channel/_default.page.tsx create mode 100644 src/channel/layout.tsx rename src/{pages/channel => channel/pages}/index.page.tsx (76%) create mode 100644 src/chat/_default.page.tsx create mode 100644 src/chat/layout.tsx rename src/{pages/chat => chat/pages}/index.page.tsx (84%) create mode 100644 src/newsfeed/_default.page.tsx create mode 100644 src/newsfeed/layout.tsx create mode 100644 src/newsfeed/pages/circle/index.page.tsx create mode 100644 src/newsfeed/pages/following/index.page.tsx create mode 100644 src/onboarding/_default.page.tsx create mode 100644 src/onboarding/layout.tsx create mode 100644 src/onboarding/pages/create/index.page.tsx rename src/{pages/onboarding => onboarding/pages}/create/step-2/index.page.tsx (61%) create mode 100644 src/onboarding/pages/import/index.page.tsx create mode 100644 src/onboarding/pages/import/step-2/index.page.tsx rename src/{pages/onboarding => onboarding/pages/index}/index.page.tsx (65%) delete mode 100644 src/pages/newsfeed/circle/index.page.tsx delete mode 100644 src/pages/newsfeed/following/index.page.tsx delete mode 100644 src/pages/onboarding/create/index.page.tsx delete mode 100644 src/pages/onboarding/login/index.page.tsx delete mode 100644 src/pages/onboarding/login/step-2/index.page.tsx delete mode 100644 src/pages/user/index.page.tsx create mode 100644 src/renderer/layoutDefault.tsx rename src/{components => shared}/accountProvider.tsx (86%) rename src/{components => shared}/activeLink.tsx (87%) rename src/{components => shared}/appHeader.tsx (96%) rename src/{components => shared}/avatarUploader.tsx (97%) rename src/{components => shared}/channels/channelBlackList.tsx (97%) rename src/{components => shared}/channels/channelList.tsx (63%) rename src/{components => shared}/channels/channelListItem.tsx (83%) rename src/{components => shared}/channels/channelProfile.tsx (90%) rename src/{components => shared}/channels/createChannelModal.tsx (97%) rename src/{components => shared}/channels/messages/hideMessageButton.tsx (79%) rename src/{components => shared}/channels/messages/index.tsx (84%) rename src/{components => shared}/channels/messages/item.tsx (78%) rename src/{components => shared}/channels/messages/muteButton.tsx (77%) rename src/{components => shared}/channels/messages/replyButton.tsx (86%) rename src/{components => shared}/channels/updateChannelModal.tsx (96%) rename src/{components => shared}/chats/chatList.tsx (79%) rename src/{components => shared}/chats/chatListItem.tsx (79%) rename src/{components => shared}/chats/chatModal.tsx (100%) rename src/{components => shared}/chats/chatModalUser.tsx (92%) rename src/{components => shared}/chats/messageList.tsx (83%) rename src/{components => shared}/chats/messageListItem.tsx (87%) rename src/{components => shared}/chats/messageUser.tsx (86%) rename src/{components => shared}/eventCollector.tsx (84%) rename src/{components => shared}/form/base.tsx (89%) rename src/{components => shared}/form/channel.tsx (91%) rename src/{components => shared}/form/chat.tsx (90%) rename src/{components => shared}/form/comment.tsx (92%) rename src/{components => shared}/form/imagePicker.tsx (91%) rename src/{assets/icons/Lume.tsx => shared/icons/lume.tsx} (89%) rename src/{components => shared}/layouts/channel.tsx (88%) rename src/{components => shared}/layouts/newsfeed.tsx (87%) rename src/{components => shared}/layouts/onboarding.tsx (92%) rename src/{components => shared}/multiAccounts/activeAccount.tsx (84%) rename src/{components => shared}/multiAccounts/inactiveAccount.tsx (89%) rename src/{components => shared}/multiAccounts/index.tsx (83%) rename src/{components => shared}/navigation.tsx (95%) rename src/{components => shared}/networkStatusIndicator.tsx (90%) rename src/{components => shared}/note/base.tsx (88%) rename src/{components => shared}/note/comment.tsx (89%) rename src/{components => shared}/note/extend.tsx (88%) rename src/{components => shared}/note/meta/comment.tsx (95%) rename src/{components => shared}/note/meta/reaction.tsx (88%) rename src/{components => shared}/note/metadata.tsx (100%) rename src/{components => shared}/note/parent.tsx (90%) rename src/{components => shared}/note/placeholder.tsx (100%) rename src/{components => shared}/note/preview/image.tsx (100%) rename src/{components => shared}/note/preview/video.tsx (100%) rename src/{components => shared}/note/preview/youtube.tsx (100%) rename src/{components => shared}/note/quote.tsx (86%) rename src/{components => shared}/note/quoteRepost.tsx (78%) rename src/{components => shared}/note/rootNote.tsx (86%) rename src/{components => shared}/profile/followers.tsx (78%) rename src/{components => shared}/profile/follows.tsx (77%) rename src/{components => shared}/profile/metadata.tsx (89%) rename src/{components => shared}/profile/notes.tsx (77%) rename src/{components => shared}/relaysProvider.tsx (90%) rename src/{components => shared}/tooltip.tsx (100%) rename src/{components => shared}/user/base.tsx (83%) rename src/{components => shared}/user/extend.tsx (88%) rename src/{components => shared}/user/follow.tsx (83%) rename src/{components => shared}/user/large.tsx (89%) rename src/{components => shared}/user/mention.tsx (68%) rename src/{components => shared}/user/mini.tsx (79%) rename src/{components => shared}/user/muted.tsx (85%) rename src/{components => shared}/user/quoteRepost.tsx (87%) create mode 100644 src/splashscreen/_default.page.route.tsx rename src/{ => splashscreen}/pages/index.page.tsx (93%) create mode 100644 src/stores/onboarding.tsx diff --git a/.prettierrc b/.prettierrc index b63ef5a4..1139bff5 100644 --- a/.prettierrc +++ b/.prettierrc @@ -8,17 +8,7 @@ "endOfLine": "lf", "bracketSpacing": true, "bracketSameLine": false, - "importOrder": [ - "^@app/(.*)$", - "^@pages/(.*)$", - "^@components/(.*)$", - "^@stores/(.*)$", - "^@utils/(.*)$", - "^@assets/(.*)$", - "^@renderer/(.*)$", - "", - "^[./]" - ], + "importOrder": ["^@lume/(.*)$", "", "^[./]"], "importOrderSeparation": true, "importOrderSortSpecifiers": true, "plugins": ["@trivago/prettier-plugin-sort-imports", "prettier-plugin-tailwindcss"], diff --git a/src/channel/_default.page.tsx b/src/channel/_default.page.tsx new file mode 100644 index 00000000..b5a0dc38 --- /dev/null +++ b/src/channel/_default.page.tsx @@ -0,0 +1 @@ +export { LayoutChannel as Layout } from './layout'; diff --git a/src/channel/layout.tsx b/src/channel/layout.tsx new file mode 100644 index 00000000..6dfdf837 --- /dev/null +++ b/src/channel/layout.tsx @@ -0,0 +1,29 @@ +import AppHeader from '@lume/shared/appHeader'; +import MultiAccounts from '@lume/shared/multiAccounts'; +import Navigation from '@lume/shared/navigation'; + +export function LayoutChannel({ children }: { children: React.ReactNode }) { + return ( +
+
+
+ +
+
+
+ +
+
+
+ +
+
{children}
+
+
+
+
+ ); +} diff --git a/src/pages/channel/index.page.tsx b/src/channel/pages/index.page.tsx similarity index 76% rename from src/pages/channel/index.page.tsx rename to src/channel/pages/index.page.tsx index b51faf6d..4fddca1c 100644 --- a/src/pages/channel/index.page.tsx +++ b/src/channel/pages/index.page.tsx @@ -1,31 +1,29 @@ -import { AccountContext } from '@components/accountProvider'; -import { ChannelBlackList } from '@components/channels/channelBlackList'; -import { ChannelProfile } from '@components/channels/channelProfile'; -import { UpdateChannelModal } from '@components/channels/updateChannelModal'; -import { FormChannel } from '@components/form/channel'; -import NewsfeedLayout from '@components/layouts/newsfeed'; -import { RelayContext } from '@components/relaysProvider'; - -import { channelMessagesAtom, channelReplyAtom } from '@stores/channel'; -import { FULL_RELAYS } from '@stores/constants'; - -import { dateToUnix, hoursAgo } from '@utils/getDate'; -import { usePageContext } from '@utils/hooks/usePageContext'; -import { arrayObjToPureArr } from '@utils/transform'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { ChannelBlackList } from '@lume/shared/channels/channelBlackList'; +import { ChannelProfile } from '@lume/shared/channels/channelProfile'; +import { UpdateChannelModal } from '@lume/shared/channels/updateChannelModal'; +import { FormChannel } from '@lume/shared/form/channel'; +import NewsfeedLayout from '@lume/shared/layouts/newsfeed'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { channelMessagesAtom, channelReplyAtom } from '@lume/stores/channel'; +import { FULL_RELAYS } from '@lume/stores/constants'; +import { dateToUnix, hoursAgo } from '@lume/utils/getDate'; +import { usePageContext } from '@lume/utils/hooks/usePageContext'; +import { arrayObjToPureArr } from '@lume/utils/transform'; import { useSetAtom } from 'jotai'; import { useResetAtom } from 'jotai/utils'; import { Suspense, lazy, useContext, useRef } from 'react'; import useSWRSubscription from 'swr/subscription'; -const ChannelMessages = lazy(() => import('@components/channels/messages')); +const ChannelMessages = lazy(() => import('@lume/shared/channels/messages')); let mutedList: any = []; let activeMutedList: any = []; let activeHidedList: any = []; if (typeof window !== 'undefined') { - const { getBlacklist, getActiveBlacklist, getActiveAccount } = await import('@utils/storage'); + const { getBlacklist, getActiveBlacklist, getActiveAccount } = await import('@lume/utils/storage'); const activeAccount = await getActiveAccount(); activeHidedList = await getActiveBlacklist(activeAccount.id, 43); activeMutedList = await getActiveBlacklist(activeAccount.id, 44); diff --git a/src/chat/_default.page.tsx b/src/chat/_default.page.tsx new file mode 100644 index 00000000..e7ba49c4 --- /dev/null +++ b/src/chat/_default.page.tsx @@ -0,0 +1 @@ +export { LayoutChat as Layout } from './layout'; diff --git a/src/chat/layout.tsx b/src/chat/layout.tsx new file mode 100644 index 00000000..a2d156ea --- /dev/null +++ b/src/chat/layout.tsx @@ -0,0 +1,29 @@ +import AppHeader from '@lume/shared/appHeader'; +import MultiAccounts from '@lume/shared/multiAccounts'; +import Navigation from '@lume/shared/navigation'; + +export function LayoutChat({ children }: { children: React.ReactNode }) { + return ( +
+
+
+ +
+
+
+ +
+
+
+ +
+
{children}
+
+
+
+
+ ); +} diff --git a/src/pages/chat/index.page.tsx b/src/chat/pages/index.page.tsx similarity index 84% rename from src/pages/chat/index.page.tsx rename to src/chat/pages/index.page.tsx index 935b1ed8..857ff11f 100644 --- a/src/pages/chat/index.page.tsx +++ b/src/chat/pages/index.page.tsx @@ -1,13 +1,11 @@ -import { AccountContext } from '@components/accountProvider'; -import { MessageListItem } from '@components/chats/messageListItem'; -import FormChat from '@components/form/chat'; -import NewsfeedLayout from '@components/layouts/newsfeed'; -import { RelayContext } from '@components/relaysProvider'; - -import { FULL_RELAYS } from '@stores/constants'; - -import { usePageContext } from '@utils/hooks/usePageContext'; -import { sortMessages } from '@utils/transform'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { MessageListItem } from '@lume/shared/chats/messageListItem'; +import FormChat from '@lume/shared/form/chat'; +import NewsfeedLayout from '@lume/shared/layouts/newsfeed'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { FULL_RELAYS } from '@lume/stores/constants'; +import { usePageContext } from '@lume/utils/hooks/usePageContext'; +import { sortMessages } from '@lume/utils/transform'; import { useContext } from 'react'; import useSWRSubscription from 'swr/subscription'; diff --git a/src/newsfeed/_default.page.tsx b/src/newsfeed/_default.page.tsx new file mode 100644 index 00000000..7a0967d9 --- /dev/null +++ b/src/newsfeed/_default.page.tsx @@ -0,0 +1 @@ +export { LayoutNewsfeed as Layout } from './layout'; diff --git a/src/newsfeed/layout.tsx b/src/newsfeed/layout.tsx new file mode 100644 index 00000000..614a5d3d --- /dev/null +++ b/src/newsfeed/layout.tsx @@ -0,0 +1,29 @@ +import AppHeader from '@lume/shared/appHeader'; +import MultiAccounts from '@lume/shared/multiAccounts'; +import Navigation from '@lume/shared/navigation'; + +export function LayoutNewsfeed({ children }: { children: React.ReactNode }) { + return ( +
+
+
+ +
+
+
+ +
+
+
+ +
+
{children}
+
+
+
+
+ ); +} diff --git a/src/newsfeed/pages/circle/index.page.tsx b/src/newsfeed/pages/circle/index.page.tsx new file mode 100644 index 00000000..19f887f9 --- /dev/null +++ b/src/newsfeed/pages/circle/index.page.tsx @@ -0,0 +1,9 @@ +export function Page() { + return ( +
+
+

Sorry, this feature under development, it will come in the next version

+
+
+ ); +} diff --git a/src/newsfeed/pages/following/index.page.tsx b/src/newsfeed/pages/following/index.page.tsx new file mode 100644 index 00000000..163c2b91 --- /dev/null +++ b/src/newsfeed/pages/following/index.page.tsx @@ -0,0 +1,114 @@ +import FormBase from '@lume/shared/form/base'; +import { NoteBase } from '@lume/shared/note/base'; +import { Placeholder } from '@lume/shared/note/placeholder'; +import { NoteQuoteRepost } from '@lume/shared/note/quoteRepost'; +import { hasNewerNoteAtom } from '@lume/stores/note'; +import { countTotalNotes, getNotes } from '@lume/utils/storage'; + +import { useInfiniteQuery } from '@tanstack/react-query'; +import { useVirtualizer } from '@tanstack/react-virtual'; +import { ArrowUp } from 'iconoir-react'; +import { useAtom } from 'jotai'; +import { useEffect, useRef } from 'react'; + +const ITEM_PER_PAGE = 20; +const TIME = Math.floor(Date.now() / 1000); + +let totalNotes = 0; + +if (typeof window !== 'undefined') { + const result = await countTotalNotes(); + totalNotes = result.total; +} + +export function Page() { + const [hasNewerNote] = useAtom(hasNewerNoteAtom); + + const { status, error, data, fetchNextPage, hasNextPage, isFetching, isFetchingNextPage }: any = useInfiniteQuery({ + queryKey: ['following'], + queryFn: async ({ pageParam = 0 }) => { + return await getNotes(TIME, ITEM_PER_PAGE, pageParam); + }, + getNextPageParam: (lastPage) => (lastPage.nextCursor <= totalNotes ? lastPage.nextCursor : 'undefined'), + }); + + const allRows = data ? data.pages.flatMap((d: { data: any }) => d.data) : []; + const parentRef = useRef(); + + const rowVirtualizer = useVirtualizer({ + count: hasNextPage ? allRows.length + 1 : allRows.length, + getScrollElement: () => parentRef.current, + estimateSize: () => 400, + overscan: 5, + }); + + const itemsVirtualizer = rowVirtualizer.getVirtualItems(); + + useEffect(() => { + const [lastItem] = [...rowVirtualizer.getVirtualItems()].reverse(); + + if (!lastItem) { + return; + } + + if (lastItem.index >= allRows.length - 1 && hasNextPage && !isFetchingNextPage) { + fetchNextPage(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [fetchNextPage, allRows.length, rowVirtualizer.getVirtualItems()]); + + return ( +
+ {hasNewerNote && ( +
+ +
+ )} + {status === 'loading' ? ( + + ) : status === 'error' ? ( +
{error.message}
+ ) : ( +
+ +
+
+ {rowVirtualizer.getVirtualItems().map((virtualRow) => { + const note = allRows[virtualRow.index]; + if (note) { + if (note.kind === 1) { + return ( +
+ +
+ ); + } else { + return ( +
+ +
+ ); + } + } + })} +
+
+
+ )} +
{isFetching && !isFetchingNextPage ? 'Background Updating...' : null}
+
+ ); +} diff --git a/src/onboarding/_default.page.tsx b/src/onboarding/_default.page.tsx new file mode 100644 index 00000000..424fc055 --- /dev/null +++ b/src/onboarding/_default.page.tsx @@ -0,0 +1 @@ +export { LayoutOnboarding as Layout } from './layout'; diff --git a/src/onboarding/layout.tsx b/src/onboarding/layout.tsx new file mode 100644 index 00000000..ccab797c --- /dev/null +++ b/src/onboarding/layout.tsx @@ -0,0 +1,47 @@ +import { ArrowLeft, ArrowRight } from 'iconoir-react'; + +let platformName = 'darwin'; + +if (typeof window !== 'undefined') { + const { platform } = await import('@tauri-apps/api/os'); + platformName = await platform(); +} + +export function LayoutOnboarding({ children }: { children: React.ReactNode }) { + const goBack = () => { + window.history.back(); + }; + + const goForward = () => { + window.history.forward(); + }; + + return ( +
+
+
+
+
+ + +
+
+
+
{children}
+
+
+ ); +} diff --git a/src/onboarding/pages/create/index.page.tsx b/src/onboarding/pages/create/index.page.tsx new file mode 100644 index 00000000..9c7d07dd --- /dev/null +++ b/src/onboarding/pages/create/index.page.tsx @@ -0,0 +1,160 @@ +import { RelayContext } from '@lume/shared/relaysProvider'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { createAccount } from '@lume/utils/storage'; + +import { EyeClose, EyeEmpty } from 'iconoir-react'; +import { generatePrivateKey, getEventHash, getPublicKey, nip19, signEvent } from 'nostr-tools'; +import { useCallback, useContext, useMemo, useState } from 'react'; +import { navigate } from 'vite-plugin-ssr/client/router'; + +export function Page() { + const pool: any = useContext(RelayContext); + + const [type, setType] = useState('password'); + const [loading, setLoading] = useState(false); + + const privkey = useMemo(() => generatePrivateKey(), []); + const name = 'Pleb'; + + const pubkey = getPublicKey(privkey); + const npub = nip19.npubEncode(pubkey); + const nsec = nip19.nsecEncode(privkey); + + // auto-generated profile metadata + const metadata: any = useMemo( + () => ({ + display_name: name, + name: name, + username: name.toLowerCase(), + picture: 'https://void.cat/d/KmypFh2fBdYCEvyJrPiN89.webp', + }), + [name] + ); + + // toggle privatek key + const showPrivateKey = () => { + if (type === 'password') { + setType('text'); + } else { + setType('password'); + } + }; + + // create account and broadcast to all relays + const submit = useCallback(async () => { + setLoading(true); + + // build event + const event: any = { + content: JSON.stringify(metadata), + created_at: Math.floor(Date.now() / 1000), + kind: 0, + pubkey: pubkey, + tags: [], + }; + event.id = getEventHash(event); + event.sig = signEvent(event, privkey); + // insert to database + createAccount(pubkey, privkey, metadata); + // broadcast + pool.publish(event, WRITEONLY_RELAYS); + // redirect to next step + navigate(`/onboarding/create/step-2?pubkey=${pubkey}&privkey=${privkey}`, { overwriteLastHistoryEntry: true }); + }, [pool, pubkey, privkey, metadata]); + + return ( +
+
+

+ Create new account +

+
+
+
+
+
+ +
+ +
+
+
+ +
+ + +
+
+
+ +
+
+
+
+ default avatar +
+
+
+

{metadata.display_name}

+

@{metadata.username}

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {loading === true ? ( + + + + + ) : ( + + )} +
+
+
+
+ ); +} diff --git a/src/pages/onboarding/create/step-2/index.page.tsx b/src/onboarding/pages/create/step-2/index.page.tsx similarity index 61% rename from src/pages/onboarding/create/step-2/index.page.tsx rename to src/onboarding/pages/create/step-2/index.page.tsx index 160bc09a..1eb3f51c 100644 --- a/src/pages/onboarding/create/step-2/index.page.tsx +++ b/src/onboarding/pages/create/step-2/index.page.tsx @@ -1,13 +1,10 @@ -import OnboardingLayout from '@components/layouts/onboarding'; -import { RelayContext } from '@components/relaysProvider'; -import { UserBase } from '@components/user/base'; - -import { WRITEONLY_RELAYS } from '@stores/constants'; - -import { usePageContext } from '@utils/hooks/usePageContext'; -import { fetchProfileMetadata } from '@utils/hooks/useProfile'; -import { createPleb, updateAccount } from '@utils/storage'; -import { arrayToNIP02 } from '@utils/transform'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { UserBase } from '@lume/shared/user/base'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { usePageContext } from '@lume/utils/hooks/usePageContext'; +import { fetchProfileMetadata } from '@lume/utils/hooks/useProfile'; +import { createPleb, updateAccount } from '@lume/utils/storage'; +import { arrayToNIP02 } from '@lume/utils/transform'; import { createClient } from '@supabase/supabase-js'; import { CheckCircle } from 'iconoir-react'; @@ -124,67 +121,65 @@ export function Page() { }, []); return ( - -
-
-
-

- Personalized your newsfeed -

-

- Follow at least{' '} - - {follows.length}/10 - {' '} - plebs -

-
+
+
+
+

+ Personalized your newsfeed +

+

+ Follow at least{' '} + + {follows.length}/10 + {' '} + plebs +

-
-
- {list.map((item: { pubkey: string }, index: Key) => ( - - ))} -
-
- {follows.length >= 10 && ( -
+
+
+
+ {list.map((item: { pubkey: string }, index: Key) => ( -
- )} + ))} +
- + {follows.length >= 10 && ( +
+ +
+ )} +
); } diff --git a/src/onboarding/pages/import/index.page.tsx b/src/onboarding/pages/import/index.page.tsx new file mode 100644 index 00000000..3f8ddc39 --- /dev/null +++ b/src/onboarding/pages/import/index.page.tsx @@ -0,0 +1,124 @@ +import { onboardingAtom } from '@lume/stores/onboarding'; + +import { useSetAtom } from 'jotai'; +import { getPublicKey, nip19 } from 'nostr-tools'; +import { Resolver, useForm } from 'react-hook-form'; +import { navigate } from 'vite-plugin-ssr/client/router'; + +type FormValues = { + key: string; +}; + +const resolver: Resolver = async (values) => { + return { + values: values.key ? values : {}, + errors: !values.key + ? { + key: { + type: 'required', + message: 'This is required.', + }, + } + : {}, + }; +}; + +export function Page() { + const setOnboardingPrivkey = useSetAtom(onboardingAtom); + + const { + register, + setError, + handleSubmit, + formState: { errors, isDirty, isValid, isSubmitting }, + } = useForm({ resolver }); + + const onSubmit = async (data: any) => { + try { + let privkey = data['key']; + + if (privkey.substring(0, 4) === 'nsec') { + privkey = nip19.decode(privkey).data; + } + + if (typeof getPublicKey(privkey) === 'string') { + setOnboardingPrivkey((prev) => ({ ...prev, privkey: privkey })); + navigate(`/onboarding/import/step-2`); + } + } catch (error) { + setError('key', { + type: 'custom', + message: 'Private Key is invalid, please check again', + }); + } + }; + + return ( +
+
+
+

Import your key

+
+
+
+ {/* #TODO: add function */} + +
+
+
+
+
+
+ or +
+
+
+
+
+ +
+ {errors.key &&

{errors.key.message}

}
+
+
+ {isSubmitting ? ( + + + + + ) : ( + + )} +
+
+
+
+
+ ); +} diff --git a/src/onboarding/pages/import/step-2/index.page.tsx b/src/onboarding/pages/import/step-2/index.page.tsx new file mode 100644 index 00000000..5848289b --- /dev/null +++ b/src/onboarding/pages/import/step-2/index.page.tsx @@ -0,0 +1,89 @@ +import { DEFAULT_AVATAR, READONLY_RELAYS } from '@lume/stores/constants'; +import { onboardingAtom } from '@lume/stores/onboarding'; +import { shortenKey } from '@lume/utils/shortenKey'; + +import { useAtom } from 'jotai'; +import { RelayPool } from 'nostr-relaypool'; +import { getPublicKey } from 'nostr-tools'; +import { useMemo } from 'react'; +import useSWRSubscription from 'swr/subscription'; + +export function Page() { + const [onboarding, setOnboarding] = useAtom(onboardingAtom); + const pubkey = useMemo(() => (onboarding.privkey ? getPublicKey(onboarding.privkey) : ''), [onboarding.privkey]); + + const submit = () => { + console.log('click'); + }; + + const { data: user, error } = useSWRSubscription( + pubkey + ? [ + { + kinds: [0, 3], + authors: [pubkey], + }, + ] + : null, + (key, { next }) => { + const pool = new RelayPool(READONLY_RELAYS); + + const unsubscribe = pool.subscribe(key, READONLY_RELAYS, (event: any) => { + switch (event.kind) { + case 0: + // update state + next(null, JSON.parse(event.content)); + // create account + setOnboarding((prev) => ({ ...prev, metadata: event.content })); + break; + case 3: + console.log(event); + break; + default: + break; + } + }); + + return () => { + unsubscribe(); + }; + } + ); + + return ( +
+
+
+

Continue with

+
+
+ {error &&
Failed to load profile
} + {!user ? ( +
+ ) : ( +
+
+ {pubkey} +
+

{user.display_name || user.name}

+

{user.nip05 || shortenKey(pubkey)}

+
+
+ +
+ )} +
+
+
+ ); +} diff --git a/src/pages/onboarding/index.page.tsx b/src/onboarding/pages/index/index.page.tsx similarity index 65% rename from src/pages/onboarding/index.page.tsx rename to src/onboarding/pages/index/index.page.tsx index 22bc717d..a04c455c 100644 --- a/src/pages/onboarding/index.page.tsx +++ b/src/onboarding/pages/index/index.page.tsx @@ -1,5 +1,3 @@ -import OnboardingLayout from '@components/layouts/onboarding'; - import { ArrowRight } from 'iconoir-react'; const PLEBS = [ @@ -74,45 +72,43 @@ const InfiniteLoopSlider = ({ children, duration, reverse }: { children: any; du export function Page() { return ( - -
-
-
- {[...new Array(ROWS)].map((_, i) => ( - - {shuffle(PLEBS) - .slice(0, PLEBS_PER_ROW) - .map((tag) => ( -
- {tag} -
- ))} -
- ))} -
-
-
-
-

- Let's start! -

- +
+
+
+ {[...new Array(ROWS)].map((_, i) => ( + + {shuffle(PLEBS) + .slice(0, PLEBS_PER_ROW) + .map((tag) => ( +
+ {tag} +
+ ))} +
+ ))} +
- + +
); } diff --git a/src/pages/newsfeed/circle/index.page.tsx b/src/pages/newsfeed/circle/index.page.tsx deleted file mode 100644 index d391822d..00000000 --- a/src/pages/newsfeed/circle/index.page.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import NewsfeedLayout from '@components/layouts/newsfeed'; - -export function Page() { - return ( - -
-
-

- Sorry, this feature under development, it will come in the next version -

-
-
-
- ); -} diff --git a/src/pages/newsfeed/following/index.page.tsx b/src/pages/newsfeed/following/index.page.tsx deleted file mode 100644 index 0f6fa0f4..00000000 --- a/src/pages/newsfeed/following/index.page.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import FormBase from '@components/form/base'; -import NewsfeedLayout from '@components/layouts/newsfeed'; -import { NoteBase } from '@components/note/base'; -import { Placeholder } from '@components/note/placeholder'; -import { NoteQuoteRepost } from '@components/note/quoteRepost'; - -import { hasNewerNoteAtom } from '@stores/note'; - -import { countTotalNotes, getNotes } from '@utils/storage'; - -import { useInfiniteQuery } from '@tanstack/react-query'; -import { useVirtualizer } from '@tanstack/react-virtual'; -import { ArrowUp } from 'iconoir-react'; -import { useAtom } from 'jotai'; -import { useEffect, useRef } from 'react'; - -const ITEM_PER_PAGE = 20; -const TIME = Math.floor(Date.now() / 1000); - -let totalNotes = 0; - -if (typeof window !== 'undefined') { - const result = await countTotalNotes(); - totalNotes = result.total; -} - -export function Page() { - const [hasNewerNote] = useAtom(hasNewerNoteAtom); - - const { status, error, data, fetchNextPage, hasNextPage, isFetching, isFetchingNextPage }: any = useInfiniteQuery({ - queryKey: ['following'], - queryFn: async ({ pageParam = 0 }) => { - return await getNotes(TIME, ITEM_PER_PAGE, pageParam); - }, - getNextPageParam: (lastPage) => (lastPage.nextCursor <= totalNotes ? lastPage.nextCursor : 'undefined'), - }); - - const allRows = data ? data.pages.flatMap((d: { data: any }) => d.data) : []; - const parentRef = useRef(); - - const rowVirtualizer = useVirtualizer({ - count: hasNextPage ? allRows.length + 1 : allRows.length, - getScrollElement: () => parentRef.current, - estimateSize: () => 400, - overscan: 5, - }); - - const itemsVirtualizer = rowVirtualizer.getVirtualItems(); - - useEffect(() => { - const [lastItem] = [...rowVirtualizer.getVirtualItems()].reverse(); - - if (!lastItem) { - return; - } - - if (lastItem.index >= allRows.length - 1 && hasNextPage && !isFetchingNextPage) { - fetchNextPage(); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [fetchNextPage, allRows.length, rowVirtualizer.getVirtualItems()]); - - return ( - -
- {hasNewerNote && ( -
- -
- )} - {status === 'loading' ? ( - - ) : status === 'error' ? ( -
{error.message}
- ) : ( -
- -
-
- {rowVirtualizer.getVirtualItems().map((virtualRow) => { - const note = allRows[virtualRow.index]; - if (note) { - if (note.kind === 1) { - return ( -
- -
- ); - } else { - return ( -
- -
- ); - } - } - })} -
-
-
- )} -
{isFetching && !isFetchingNextPage ? 'Background Updating...' : null}
-
-
- ); -} diff --git a/src/pages/onboarding/create/index.page.tsx b/src/pages/onboarding/create/index.page.tsx deleted file mode 100644 index b876bb42..00000000 --- a/src/pages/onboarding/create/index.page.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import OnboardingLayout from '@components/layouts/onboarding'; -import { RelayContext } from '@components/relaysProvider'; - -import { WRITEONLY_RELAYS } from '@stores/constants'; - -import { createAccount } from '@utils/storage'; - -import { EyeClose, EyeEmpty } from 'iconoir-react'; -import { generatePrivateKey, getEventHash, getPublicKey, nip19, signEvent } from 'nostr-tools'; -import { useCallback, useContext, useMemo, useState } from 'react'; -import { navigate } from 'vite-plugin-ssr/client/router'; - -export function Page() { - const pool: any = useContext(RelayContext); - - const [type, setType] = useState('password'); - const [loading, setLoading] = useState(false); - - const privkey = useMemo(() => generatePrivateKey(), []); - const name = 'Pleb'; - - const pubkey = getPublicKey(privkey); - const npub = nip19.npubEncode(pubkey); - const nsec = nip19.nsecEncode(privkey); - - // auto-generated profile metadata - const metadata: any = useMemo( - () => ({ - display_name: name, - name: name, - username: name.toLowerCase(), - picture: 'https://void.cat/d/KmypFh2fBdYCEvyJrPiN89.webp', - }), - [name] - ); - - // toggle privatek key - const showPrivateKey = () => { - if (type === 'password') { - setType('text'); - } else { - setType('password'); - } - }; - - // create account and broadcast to all relays - const submit = useCallback(async () => { - setLoading(true); - - // build event - const event: any = { - content: JSON.stringify(metadata), - created_at: Math.floor(Date.now() / 1000), - kind: 0, - pubkey: pubkey, - tags: [], - }; - event.id = getEventHash(event); - event.sig = signEvent(event, privkey); - // insert to database - createAccount(pubkey, privkey, metadata); - // broadcast - pool.publish(event, WRITEONLY_RELAYS); - // redirect to next step - navigate(`/onboarding/create/step-2?pubkey=${pubkey}&privkey=${privkey}`, { overwriteLastHistoryEntry: true }); - }, [pool, pubkey, privkey, metadata]); - - return ( - -
-
-

- Create new account -

-
-
-
-
-
- -
- -
-
-
- -
- - -
-
-
- -
-
-
-
- default avatar -
-
-
-

{metadata.display_name}

-

@{metadata.username}

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {loading === true ? ( - - - - - ) : ( - - )} -
-
-
-
-
- ); -} diff --git a/src/pages/onboarding/login/index.page.tsx b/src/pages/onboarding/login/index.page.tsx deleted file mode 100644 index 9929143b..00000000 --- a/src/pages/onboarding/login/index.page.tsx +++ /dev/null @@ -1,121 +0,0 @@ -import OnboardingLayout from '@components/layouts/onboarding'; - -import { CableTag } from 'iconoir-react'; -import { getPublicKey, nip19 } from 'nostr-tools'; -import { Resolver, useForm } from 'react-hook-form'; -import { navigate } from 'vite-plugin-ssr/client/router'; - -type FormValues = { - key: string; -}; - -const resolver: Resolver = async (values) => { - return { - values: values.key ? values : {}, - errors: !values.key - ? { - key: { - type: 'required', - message: 'This is required.', - }, - } - : {}, - }; -}; - -export function Page() { - const { - register, - setError, - handleSubmit, - formState: { errors, isDirty, isValid, isSubmitting }, - } = useForm({ resolver }); - - const onSubmit = async (data: any) => { - try { - let privkey = data['key']; - - if (privkey.substring(0, 4) === 'nsec') { - privkey = nip19.decode(privkey).data; - } - if (typeof getPublicKey(privkey) === 'string') { - navigate(`/onboarding/login/step-2?privkey=${privkey}`, { overwriteLastHistoryEntry: true }); - } - } catch (error) { - setError('key', { - type: 'custom', - message: 'Private Key is invalid, please check again', - }); - } - }; - - return ( - -
-
-

- Login with Private Key -

-
-
-
-
-
- {/* #TODO: add function */} - -
-
-
-
-
-
- or -
-
-
-
- -
- {errors.key &&

{errors.key.message}

}
-
-
-
- {isSubmitting ? ( - - - - - ) : ( - - )} -
-
-
-
-
- ); -} diff --git a/src/pages/onboarding/login/step-2/index.page.tsx b/src/pages/onboarding/login/step-2/index.page.tsx deleted file mode 100644 index 55b8dad2..00000000 --- a/src/pages/onboarding/login/step-2/index.page.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import OnboardingLayout from '@components/layouts/onboarding'; -import { RelayContext } from '@components/relaysProvider'; - -import { DEFAULT_AVATAR, READONLY_RELAYS } from '@stores/constants'; - -import { usePageContext } from '@utils/hooks/usePageContext'; -import { fetchProfileMetadata } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; -import { createAccount, createPleb, updateAccount } from '@utils/storage'; -import { nip02ToArray } from '@utils/transform'; - -import { getPublicKey } from 'nostr-tools'; -import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'; -import { navigate } from 'vite-plugin-ssr/client/router'; - -export function Page() { - const pageContext = usePageContext(); - const searchParams = pageContext.urlParsed.search; - - const privkey = searchParams.privkey; - const pubkey = useMemo(() => (privkey ? getPublicKey(privkey) : ''), [privkey]); - - const pool: any = useContext(RelayContext); - const [profile, setProfile] = useState({ metadata: null }); - const [done, setDone] = useState(false); - - const timeout = useRef(null); - const nip02 = useRef(null); - - const createPlebs = useCallback(async (tags: string[]) => { - for (const tag of tags) { - fetchProfileMetadata(tag[1]) - .then((res: any) => createPleb(tag[1], res.content)) - .catch(console.error); - } - }, []); - - const submit = () => { - // update account's folllows with NIP-02 tag list - const arr = nip02ToArray(nip02.current); - updateAccount('follows', arr, pubkey); - // create plebs (saved nostr profile) - createPlebs(nip02.current); - // redirect to splashscreen - navigate('/', { overwriteLastHistoryEntry: true }); - }; - - useEffect(() => { - const unsubscribe = pool.subscribe( - [ - { - kinds: [0, 3], - authors: [pubkey], - }, - ], - READONLY_RELAYS, - (event: any) => { - switch (event.kind) { - case 0: - // create account - createAccount(pubkey, privkey, event.content); - // update state - setProfile({ - metadata: JSON.parse(event.content), - }); - break; - case 3: - nip02.current = event.tags; - break; - default: - break; - } - }, - undefined, - () => { - timeout.current = setTimeout(() => setDone(true), 5000); - }, - { - unsubscribeOnEose: true, - logAllEvents: false, - } - ); - - return () => { - unsubscribe(); - clearTimeout(timeout.current); - }; - }, [pool, pubkey, privkey]); - - return ( - -
-
-

- Bringing back your profile... -

-
-
-
-
-
-
-
- avatar -
-
-
-

{profile.metadata?.display_name || profile.metadata?.name}

- ยท -

@{profile.metadata?.username || (pubkey && shortenKey(pubkey))}

-
-
-
-
-
-
-
-
-
-
-
-
-
- {done === false ? ( - - - - - ) : ( - - )} -
-
-
-
-
- ); -} diff --git a/src/pages/user/index.page.tsx b/src/pages/user/index.page.tsx deleted file mode 100644 index 6ccab5e7..00000000 --- a/src/pages/user/index.page.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import NewsfeedLayout from '@components/layouts/newsfeed'; - -import { usePageContext } from '@utils/hooks/usePageContext'; - -export function Page() { - const pageContext = usePageContext(); - const searchParams: any = pageContext.urlParsed.search; - - const pubkey = searchParams.pubkey; - - return ( - -
-

{pubkey}

-
-
- ); -} diff --git a/src/renderer/_default.page.client.tsx b/src/renderer/_default.page.client.tsx index 89309c99..c2049ca8 100644 --- a/src/renderer/_default.page.client.tsx +++ b/src/renderer/_default.page.client.tsx @@ -1,12 +1,14 @@ -import '@renderer/index.css'; -import { Shell } from '@renderer/shell'; -import { PageContextClient } from '@renderer/types'; +import '@lume/renderer/index.css'; +import { Shell } from '@lume/renderer/shell'; +import { PageContextClient } from '@lume/renderer/types'; import { StrictMode } from 'react'; import { Root, createRoot, hydrateRoot } from 'react-dom/client'; import 'vidstack/styles/defaults.css'; export const clientRouting = true; +export const hydrationCanBeAborted = true; + let root: Root; export async function render(pageContext: PageContextClient) { diff --git a/src/renderer/_default.page.server.tsx b/src/renderer/_default.page.server.tsx index ad6487de..386df152 100644 --- a/src/renderer/_default.page.server.tsx +++ b/src/renderer/_default.page.server.tsx @@ -1,5 +1,5 @@ -import { Shell } from '@renderer/shell'; -import { PageContextServer } from '@renderer/types'; +import { Shell } from '@lume/renderer/shell'; +import { PageContextServer } from '@lume/renderer/types'; import { StrictMode } from 'react'; import ReactDOMServer from 'react-dom/server'; diff --git a/src/renderer/layoutDefault.tsx b/src/renderer/layoutDefault.tsx new file mode 100644 index 00000000..f5c159b7 --- /dev/null +++ b/src/renderer/layoutDefault.tsx @@ -0,0 +1,3 @@ +export function LayoutDefault({ children }: { children: React.ReactNode }) { + return
{children}
; +} diff --git a/src/renderer/shell.tsx b/src/renderer/shell.tsx index 1446d5d7..afc6d2ed 100644 --- a/src/renderer/shell.tsx +++ b/src/renderer/shell.tsx @@ -1,22 +1,23 @@ -import AccountProvider from '@components/accountProvider'; -import RelayProvider from '@components/relaysProvider'; - -import { PageContextProvider } from '@utils/hooks/usePageContext'; +import AccountProvider from '@lume/shared/accountProvider'; +import { PageContextProvider } from '@lume/utils/hooks/usePageContext'; import { PageContext } from '@renderer/types'; - import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { LayoutDefault } from './layoutDefault'; + const queryClient = new QueryClient(); export function Shell({ children, pageContext }: { children: React.ReactNode; pageContext: PageContext }) { + const Layout = (pageContext.exports.Layout as React.ElementType) || (LayoutDefault as React.ElementType); + return ( - + {children} - + ); } diff --git a/src/components/accountProvider.tsx b/src/shared/accountProvider.tsx similarity index 86% rename from src/components/accountProvider.tsx rename to src/shared/accountProvider.tsx index fcdcb896..d882c406 100644 --- a/src/components/accountProvider.tsx +++ b/src/shared/accountProvider.tsx @@ -5,7 +5,7 @@ export const AccountContext = createContext({}); let activeAccount: any = { id: '', pubkey: '', follows: null, metadata: {} }; if (typeof window !== 'undefined') { - const { getActiveAccount } = await import('@utils/storage'); + const { getActiveAccount } = await import('@lume/utils/storage'); activeAccount = await getActiveAccount(); } diff --git a/src/components/activeLink.tsx b/src/shared/activeLink.tsx similarity index 87% rename from src/components/activeLink.tsx rename to src/shared/activeLink.tsx index b3f1d7be..4d2c4487 100644 --- a/src/components/activeLink.tsx +++ b/src/shared/activeLink.tsx @@ -1,4 +1,4 @@ -import { usePageContext } from '@utils/hooks/usePageContext'; +import { usePageContext } from '@lume/utils/hooks/usePageContext'; import { twMerge } from 'tailwind-merge'; diff --git a/src/components/appHeader.tsx b/src/shared/appHeader.tsx similarity index 96% rename from src/components/appHeader.tsx rename to src/shared/appHeader.tsx index b7af353f..f432dcd0 100644 --- a/src/components/appHeader.tsx +++ b/src/shared/appHeader.tsx @@ -1,4 +1,4 @@ -import EventCollector from '@components/eventCollector'; +import EventCollector from '@lume/shared/eventCollector'; import { ArrowLeft, ArrowRight, Refresh } from 'iconoir-react'; diff --git a/src/components/avatarUploader.tsx b/src/shared/avatarUploader.tsx similarity index 97% rename from src/components/avatarUploader.tsx rename to src/shared/avatarUploader.tsx index f2f782ff..21fcea09 100644 --- a/src/components/avatarUploader.tsx +++ b/src/shared/avatarUploader.tsx @@ -1,4 +1,4 @@ -import { createBlobFromFile } from '@utils/createBlobFromFile'; +import { createBlobFromFile } from '@lume/utils/createBlobFromFile'; import { open } from '@tauri-apps/api/dialog'; import { Body, fetch } from '@tauri-apps/api/http'; diff --git a/src/components/channels/channelBlackList.tsx b/src/shared/channels/channelBlackList.tsx similarity index 97% rename from src/components/channels/channelBlackList.tsx rename to src/shared/channels/channelBlackList.tsx index 8934c236..e782a174 100644 --- a/src/components/channels/channelBlackList.tsx +++ b/src/shared/channels/channelBlackList.tsx @@ -1,4 +1,4 @@ -import { UserMuted } from '@components/user/muted'; +import { UserMuted } from '@lume/shared/user/muted'; import { Popover, Transition } from '@headlessui/react'; import { MicMute } from 'iconoir-react'; diff --git a/src/components/channels/channelList.tsx b/src/shared/channels/channelList.tsx similarity index 63% rename from src/components/channels/channelList.tsx rename to src/shared/channels/channelList.tsx index 1a1bd47b..22a7a35e 100644 --- a/src/components/channels/channelList.tsx +++ b/src/shared/channels/channelList.tsx @@ -1,10 +1,10 @@ -import { ChannelListItem } from '@components/channels/channelListItem'; -import { CreateChannelModal } from '@components/channels/createChannelModal'; +import { ChannelListItem } from '@lume/shared/channels/channelListItem'; +import { CreateChannelModal } from '@lume/shared/channels/createChannelModal'; let channels: any = []; if (typeof window !== 'undefined') { - const { getChannels } = await import('@utils/storage'); + const { getChannels } = await import('@lume/utils/storage'); channels = await getChannels(100, 0); } diff --git a/src/components/channels/channelListItem.tsx b/src/shared/channels/channelListItem.tsx similarity index 83% rename from src/components/channels/channelListItem.tsx rename to src/shared/channels/channelListItem.tsx index f84ac54d..6a37382b 100644 --- a/src/components/channels/channelListItem.tsx +++ b/src/shared/channels/channelListItem.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useChannelMetadata } from '@utils/hooks/useChannelMetadata'; -import { usePageContext } from '@utils/hooks/usePageContext'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useChannelMetadata } from '@lume/utils/hooks/useChannelMetadata'; +import { usePageContext } from '@lume/utils/hooks/usePageContext'; import { twMerge } from 'tailwind-merge'; diff --git a/src/components/channels/channelProfile.tsx b/src/shared/channels/channelProfile.tsx similarity index 90% rename from src/components/channels/channelProfile.tsx rename to src/shared/channels/channelProfile.tsx index a124255c..831832bf 100644 --- a/src/components/channels/channelProfile.tsx +++ b/src/shared/channels/channelProfile.tsx @@ -1,6 +1,5 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useChannelProfile } from '@utils/hooks/useChannelProfile'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useChannelProfile } from '@lume/utils/hooks/useChannelProfile'; import { Copy } from 'iconoir-react'; import { nip19 } from 'nostr-tools'; diff --git a/src/components/channels/createChannelModal.tsx b/src/shared/channels/createChannelModal.tsx similarity index 97% rename from src/components/channels/createChannelModal.tsx rename to src/shared/channels/createChannelModal.tsx index 80a8e5ca..7652bcfd 100644 --- a/src/components/channels/createChannelModal.tsx +++ b/src/shared/channels/createChannelModal.tsx @@ -1,11 +1,9 @@ -import { AccountContext } from '@components/accountProvider'; -import { AvatarUploader } from '@components/avatarUploader'; -import { RelayContext } from '@components/relaysProvider'; - -import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; -import { createChannel } from '@utils/storage'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { AvatarUploader } from '@lume/shared/avatarUploader'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; +import { createChannel } from '@lume/utils/storage'; import { Dialog, Transition } from '@headlessui/react'; import { Cancel, Plus } from 'iconoir-react'; diff --git a/src/components/channels/messages/hideMessageButton.tsx b/src/shared/channels/messages/hideMessageButton.tsx similarity index 79% rename from src/components/channels/messages/hideMessageButton.tsx rename to src/shared/channels/messages/hideMessageButton.tsx index 4861c35b..6c78d3a4 100644 --- a/src/components/channels/messages/hideMessageButton.tsx +++ b/src/shared/channels/messages/hideMessageButton.tsx @@ -1,10 +1,8 @@ -import { AccountContext } from '@components/accountProvider'; -import { RelayContext } from '@components/relaysProvider'; -import Tooltip from '@components/tooltip'; - -import { WRITEONLY_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import Tooltip from '@lume/shared/tooltip'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; import { EyeClose } from 'iconoir-react'; import { getEventHash, signEvent } from 'nostr-tools'; diff --git a/src/components/channels/messages/index.tsx b/src/shared/channels/messages/index.tsx similarity index 84% rename from src/components/channels/messages/index.tsx rename to src/shared/channels/messages/index.tsx index 2a060e69..a60b1edb 100644 --- a/src/components/channels/messages/index.tsx +++ b/src/shared/channels/messages/index.tsx @@ -1,7 +1,6 @@ -import { ChannelMessageItem } from '@components/channels/messages/item'; -import { Placeholder } from '@components/note/placeholder'; - -import { sortedChannelMessagesAtom } from '@stores/channel'; +import { ChannelMessageItem } from '@lume/shared/channels/messages/item'; +import { Placeholder } from '@lume/shared/note/placeholder'; +import { sortedChannelMessagesAtom } from '@lume/stores/channel'; import { useAtomValue } from 'jotai'; import { useCallback, useRef } from 'react'; diff --git a/src/components/channels/messages/item.tsx b/src/shared/channels/messages/item.tsx similarity index 78% rename from src/components/channels/messages/item.tsx rename to src/shared/channels/messages/item.tsx index a5e0b1a5..efd23c1e 100644 --- a/src/components/channels/messages/item.tsx +++ b/src/shared/channels/messages/item.tsx @@ -1,9 +1,8 @@ -import { HideMessageButton } from '@components/channels/messages/hideMessageButton'; -import { MuteButton } from '@components/channels/messages/muteButton'; -import { ReplyButton } from '@components/channels/messages/replyButton'; -import { MessageUser } from '@components/chats/messageUser'; - -import { messageParser } from '@utils/parser'; +import { HideMessageButton } from '@lume/shared/channels/messages/hideMessageButton'; +import { MuteButton } from '@lume/shared/channels/messages/muteButton'; +import { ReplyButton } from '@lume/shared/channels/messages/replyButton'; +import { MessageUser } from '@lume/shared/chats/messageUser'; +import { messageParser } from '@lume/utils/parser'; import { memo } from 'react'; diff --git a/src/components/channels/messages/muteButton.tsx b/src/shared/channels/messages/muteButton.tsx similarity index 77% rename from src/components/channels/messages/muteButton.tsx rename to src/shared/channels/messages/muteButton.tsx index 55ca330a..71372059 100644 --- a/src/components/channels/messages/muteButton.tsx +++ b/src/shared/channels/messages/muteButton.tsx @@ -1,10 +1,8 @@ -import { AccountContext } from '@components/accountProvider'; -import { RelayContext } from '@components/relaysProvider'; -import Tooltip from '@components/tooltip'; - -import { WRITEONLY_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import Tooltip from '@lume/shared/tooltip'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; import { MicMute } from 'iconoir-react'; import { getEventHash, signEvent } from 'nostr-tools'; diff --git a/src/components/channels/messages/replyButton.tsx b/src/shared/channels/messages/replyButton.tsx similarity index 86% rename from src/components/channels/messages/replyButton.tsx rename to src/shared/channels/messages/replyButton.tsx index cfb6c3d8..f0e285ad 100644 --- a/src/components/channels/messages/replyButton.tsx +++ b/src/shared/channels/messages/replyButton.tsx @@ -1,6 +1,5 @@ -import Tooltip from '@components/tooltip'; - -import { channelReplyAtom } from '@stores/channel'; +import Tooltip from '@lume/shared/tooltip'; +import { channelReplyAtom } from '@lume/stores/channel'; import { Reply } from 'iconoir-react'; import { useSetAtom } from 'jotai'; diff --git a/src/components/channels/updateChannelModal.tsx b/src/shared/channels/updateChannelModal.tsx similarity index 96% rename from src/components/channels/updateChannelModal.tsx rename to src/shared/channels/updateChannelModal.tsx index 804455de..5df265bf 100644 --- a/src/components/channels/updateChannelModal.tsx +++ b/src/shared/channels/updateChannelModal.tsx @@ -1,11 +1,9 @@ -import { AccountContext } from '@components/accountProvider'; -import { AvatarUploader } from '@components/avatarUploader'; -import { RelayContext } from '@components/relaysProvider'; - -import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; -import { getChannel, updateChannelMetadata } from '@utils/storage'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { AvatarUploader } from '@lume/shared/avatarUploader'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; +import { getChannel, updateChannelMetadata } from '@lume/utils/storage'; import { Dialog, Transition } from '@headlessui/react'; import { Cancel, EditPencil } from 'iconoir-react'; diff --git a/src/components/chats/chatList.tsx b/src/shared/chats/chatList.tsx similarity index 79% rename from src/components/chats/chatList.tsx rename to src/shared/chats/chatList.tsx index 378a6d29..a3c52c56 100644 --- a/src/components/chats/chatList.tsx +++ b/src/shared/chats/chatList.tsx @@ -1,15 +1,14 @@ -import { AccountContext } from '@components/accountProvider'; -import { ChatListItem } from '@components/chats/chatListItem'; -import { ChatModal } from '@components/chats/chatModal'; - -import { DEFAULT_AVATAR } from '@stores/constants'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { ChatListItem } from '@lume/shared/chats/chatListItem'; +import { ChatModal } from '@lume/shared/chats/chatModal'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; import { useContext } from 'react'; let list: any = []; if (typeof window !== 'undefined') { - const { getChats, getActiveAccount } = await import('@utils/storage'); + const { getChats, getActiveAccount } = await import('@lume/utils/storage'); const activeAccount = await getActiveAccount(); list = await getChats(activeAccount.id); diff --git a/src/components/chats/chatListItem.tsx b/src/shared/chats/chatListItem.tsx similarity index 79% rename from src/components/chats/chatListItem.tsx rename to src/shared/chats/chatListItem.tsx index 634d63ff..8fc1f4ca 100644 --- a/src/components/chats/chatListItem.tsx +++ b/src/shared/chats/chatListItem.tsx @@ -1,8 +1,7 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { usePageContext } from '@utils/hooks/usePageContext'; -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { usePageContext } from '@lume/utils/hooks/usePageContext'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; import { twMerge } from 'tailwind-merge'; diff --git a/src/components/chats/chatModal.tsx b/src/shared/chats/chatModal.tsx similarity index 100% rename from src/components/chats/chatModal.tsx rename to src/shared/chats/chatModal.tsx diff --git a/src/components/chats/chatModalUser.tsx b/src/shared/chats/chatModalUser.tsx similarity index 92% rename from src/components/chats/chatModalUser.tsx rename to src/shared/chats/chatModalUser.tsx index c211c65e..687b176f 100644 --- a/src/components/chats/chatModalUser.tsx +++ b/src/shared/chats/chatModalUser.tsx @@ -1,6 +1,5 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { shortenKey } from '@lume/utils/shortenKey'; import { navigate } from 'vite-plugin-ssr/client/router'; diff --git a/src/components/chats/messageList.tsx b/src/shared/chats/messageList.tsx similarity index 83% rename from src/components/chats/messageList.tsx rename to src/shared/chats/messageList.tsx index 8cab0338..1a97a9f8 100644 --- a/src/components/chats/messageList.tsx +++ b/src/shared/chats/messageList.tsx @@ -1,8 +1,7 @@ -import { AccountContext } from '@components/accountProvider'; -import { MessageListItem } from '@components/chats/messageListItem'; -import { Placeholder } from '@components/note/placeholder'; - -import { sortedChatMessagesAtom } from '@stores/chat'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { MessageListItem } from '@lume/shared/chats/messageListItem'; +import { Placeholder } from '@lume/shared/note/placeholder'; +import { sortedChatMessagesAtom } from '@lume/stores/chat'; import { useAtomValue } from 'jotai'; import { useCallback, useContext, useRef } from 'react'; diff --git a/src/components/chats/messageListItem.tsx b/src/shared/chats/messageListItem.tsx similarity index 87% rename from src/components/chats/messageListItem.tsx rename to src/shared/chats/messageListItem.tsx index 8b314153..33a91e3a 100644 --- a/src/components/chats/messageListItem.tsx +++ b/src/shared/chats/messageListItem.tsx @@ -1,6 +1,5 @@ -import { MessageUser } from '@components/chats/messageUser'; - -import { useDecryptMessage } from '@utils/hooks/useDecryptMessage'; +import { MessageUser } from '@lume/shared/chats/messageUser'; +import { useDecryptMessage } from '@lume/utils/hooks/useDecryptMessage'; import { memo } from 'react'; diff --git a/src/components/chats/messageUser.tsx b/src/shared/chats/messageUser.tsx similarity index 86% rename from src/components/chats/messageUser.tsx rename to src/shared/chats/messageUser.tsx index 75b9d3d6..75c7cf31 100644 --- a/src/components/chats/messageUser.tsx +++ b/src/shared/chats/messageUser.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; diff --git a/src/components/eventCollector.tsx b/src/shared/eventCollector.tsx similarity index 84% rename from src/components/eventCollector.tsx rename to src/shared/eventCollector.tsx index 23424cbf..9bcaf593 100644 --- a/src/components/eventCollector.tsx +++ b/src/shared/eventCollector.tsx @@ -1,13 +1,11 @@ -import { AccountContext } from '@components/accountProvider'; -import { NetworkStatusIndicator } from '@components/networkStatusIndicator'; -import { RelayContext } from '@components/relaysProvider'; - -import { READONLY_RELAYS } from '@stores/constants'; -import { hasNewerNoteAtom } from '@stores/note'; - -import { dateToUnix } from '@utils/getDate'; -import { createChat, createNote, updateAccount } from '@utils/storage'; -import { getParentID, nip02ToArray } from '@utils/transform'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { NetworkStatusIndicator } from '@lume/shared/networkStatusIndicator'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { READONLY_RELAYS } from '@lume/stores/constants'; +import { hasNewerNoteAtom } from '@lume/stores/note'; +import { dateToUnix } from '@lume/utils/getDate'; +import { createChat, createNote, updateAccount } from '@lume/utils/storage'; +import { getParentID, nip02ToArray } from '@lume/utils/transform'; import { useSetAtom } from 'jotai'; import { useCallback, useContext, useEffect, useRef } from 'react'; diff --git a/src/components/form/base.tsx b/src/shared/form/base.tsx similarity index 89% rename from src/components/form/base.tsx rename to src/shared/form/base.tsx index 1ab7cbe8..8ba23e94 100644 --- a/src/components/form/base.tsx +++ b/src/shared/form/base.tsx @@ -1,11 +1,9 @@ -import { AccountContext } from '@components/accountProvider'; -import { ImagePicker } from '@components/form/imagePicker'; -import { RelayContext } from '@components/relaysProvider'; - -import { WRITEONLY_RELAYS } from '@stores/constants'; -import { noteContentAtom } from '@stores/note'; - -import { dateToUnix } from '@utils/getDate'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { ImagePicker } from '@lume/shared/form/imagePicker'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { noteContentAtom } from '@lume/stores/note'; +import { dateToUnix } from '@lume/utils/getDate'; import { useAtom } from 'jotai'; import { useResetAtom } from 'jotai/utils'; diff --git a/src/components/form/channel.tsx b/src/shared/form/channel.tsx similarity index 91% rename from src/components/form/channel.tsx rename to src/shared/form/channel.tsx index 2aba9e4b..f239c546 100644 --- a/src/components/form/channel.tsx +++ b/src/shared/form/channel.tsx @@ -1,12 +1,10 @@ -import { AccountContext } from '@components/accountProvider'; -import { ImagePicker } from '@components/form/imagePicker'; -import { RelayContext } from '@components/relaysProvider'; -import { UserMini } from '@components/user/mini'; - -import { channelContentAtom, channelReplyAtom } from '@stores/channel'; -import { FULL_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { ImagePicker } from '@lume/shared/form/imagePicker'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { UserMini } from '@lume/shared/user/mini'; +import { channelContentAtom, channelReplyAtom } from '@lume/stores/channel'; +import { FULL_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; import { Cancel } from 'iconoir-react'; import { useAtom, useAtomValue } from 'jotai'; diff --git a/src/components/form/chat.tsx b/src/shared/form/chat.tsx similarity index 90% rename from src/components/form/chat.tsx rename to src/shared/form/chat.tsx index 37b5af70..e0448945 100644 --- a/src/components/form/chat.tsx +++ b/src/shared/form/chat.tsx @@ -1,11 +1,9 @@ -import { AccountContext } from '@components/accountProvider'; -import { ImagePicker } from '@components/form/imagePicker'; -import { RelayContext } from '@components/relaysProvider'; - -import { chatContentAtom } from '@stores/chat'; -import { FULL_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { ImagePicker } from '@lume/shared/form/imagePicker'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { chatContentAtom } from '@lume/stores/chat'; +import { FULL_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; import { useAtom } from 'jotai'; import { useResetAtom } from 'jotai/utils'; diff --git a/src/components/form/comment.tsx b/src/shared/form/comment.tsx similarity index 92% rename from src/components/form/comment.tsx rename to src/shared/form/comment.tsx index af58745f..eac8c87f 100644 --- a/src/components/form/comment.tsx +++ b/src/shared/form/comment.tsx @@ -1,9 +1,7 @@ -import { AccountContext } from '@components/accountProvider'; -import { RelayContext } from '@components/relaysProvider'; - -import { WRITEONLY_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; import { getEventHash, signEvent } from 'nostr-tools'; import { useContext, useState } from 'react'; diff --git a/src/components/form/imagePicker.tsx b/src/shared/form/imagePicker.tsx similarity index 91% rename from src/components/form/imagePicker.tsx rename to src/shared/form/imagePicker.tsx index e234ab2a..209d583c 100644 --- a/src/components/form/imagePicker.tsx +++ b/src/shared/form/imagePicker.tsx @@ -1,8 +1,7 @@ -import { channelContentAtom } from '@stores/channel'; -import { chatContentAtom } from '@stores/chat'; -import { noteContentAtom } from '@stores/note'; - -import { createBlobFromFile } from '@utils/createBlobFromFile'; +import { channelContentAtom } from '@lume/stores/channel'; +import { chatContentAtom } from '@lume/stores/chat'; +import { noteContentAtom } from '@lume/stores/note'; +import { createBlobFromFile } from '@lume/utils/createBlobFromFile'; import { open } from '@tauri-apps/api/dialog'; import { Body, fetch } from '@tauri-apps/api/http'; diff --git a/src/assets/icons/Lume.tsx b/src/shared/icons/lume.tsx similarity index 89% rename from src/assets/icons/Lume.tsx rename to src/shared/icons/lume.tsx index 039ddfc7..13742995 100644 --- a/src/assets/icons/Lume.tsx +++ b/src/shared/icons/lume.tsx @@ -1,4 +1,4 @@ -export default function LumeSymbol({ className }: { className: string }) { +export default function LumeIcon({ className }: { className: string }) { return ( { const userData = JSON.parse(user.metadata); diff --git a/src/components/multiAccounts/inactiveAccount.tsx b/src/shared/multiAccounts/inactiveAccount.tsx similarity index 89% rename from src/components/multiAccounts/inactiveAccount.tsx rename to src/shared/multiAccounts/inactiveAccount.tsx index ede7d61d..46ff3655 100644 --- a/src/components/multiAccounts/inactiveAccount.tsx +++ b/src/shared/multiAccounts/inactiveAccount.tsx @@ -1,4 +1,4 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; import { memo } from 'react'; diff --git a/src/components/multiAccounts/index.tsx b/src/shared/multiAccounts/index.tsx similarity index 83% rename from src/components/multiAccounts/index.tsx rename to src/shared/multiAccounts/index.tsx index 2aa60992..0000b916 100644 --- a/src/components/multiAccounts/index.tsx +++ b/src/shared/multiAccounts/index.tsx @@ -1,18 +1,16 @@ -import { AccountContext } from '@components/accountProvider'; -import { ActiveAccount } from '@components/multiAccounts/activeAccount'; -import { InactiveAccount } from '@components/multiAccounts/inactiveAccount'; - -import { APP_VERSION } from '@stores/constants'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { ActiveAccount } from '@lume/shared/multiAccounts/activeAccount'; +import { InactiveAccount } from '@lume/shared/multiAccounts/inactiveAccount'; +import { APP_VERSION } from '@lume/stores/constants'; import LumeSymbol from '@assets/icons/Lume'; - import { Plus } from 'iconoir-react'; import { useContext } from 'react'; let accounts: any = []; if (typeof window !== 'undefined') { - const { getAccounts } = await import('@utils/storage'); + const { getAccounts } = await import('@lume/utils/storage'); accounts = await getAccounts(); } diff --git a/src/components/navigation.tsx b/src/shared/navigation.tsx similarity index 95% rename from src/components/navigation.tsx rename to src/shared/navigation.tsx index 5235c3ed..60824bb9 100644 --- a/src/components/navigation.tsx +++ b/src/shared/navigation.tsx @@ -1,6 +1,6 @@ -import ActiveLink from '@components/activeLink'; -import ChannelList from '@components/channels/channelList'; -import ChatList from '@components/chats/chatList'; +import ActiveLink from '@lume/shared/activeLink'; +import ChannelList from '@lume/shared/channels/channelList'; +import ChatList from '@lume/shared/chats/chatList'; import { Disclosure } from '@headlessui/react'; import { Bonfire, NavArrowUp, PeopleTag } from 'iconoir-react'; diff --git a/src/components/networkStatusIndicator.tsx b/src/shared/networkStatusIndicator.tsx similarity index 90% rename from src/components/networkStatusIndicator.tsx rename to src/shared/networkStatusIndicator.tsx index 69ca64ac..9803a4ff 100644 --- a/src/components/networkStatusIndicator.tsx +++ b/src/shared/networkStatusIndicator.tsx @@ -1,4 +1,4 @@ -import { useNetworkStatus } from '@utils/hooks/useNetworkStatus'; +import { useNetworkStatus } from '@lume/utils/hooks/useNetworkStatus'; export const NetworkStatusIndicator = () => { const isOnline = useNetworkStatus(); diff --git a/src/components/note/base.tsx b/src/shared/note/base.tsx similarity index 88% rename from src/components/note/base.tsx rename to src/shared/note/base.tsx index 3b33eae4..c587c36f 100644 --- a/src/components/note/base.tsx +++ b/src/shared/note/base.tsx @@ -1,8 +1,7 @@ -import { NoteMetadata } from '@components/note/metadata'; -import { NoteParent } from '@components/note/parent'; -import { UserExtend } from '@components/user/extend'; - -import { contentParser } from '@utils/parser'; +import { NoteMetadata } from '@lume/shared/note/metadata'; +import { NoteParent } from '@lume/shared/note/parent'; +import { UserExtend } from '@lume/shared/user/extend'; +import { contentParser } from '@lume/utils/parser'; import { memo } from 'react'; import { navigate } from 'vite-plugin-ssr/client/router'; diff --git a/src/components/note/comment.tsx b/src/shared/note/comment.tsx similarity index 89% rename from src/components/note/comment.tsx rename to src/shared/note/comment.tsx index d7b442e1..dd266cf8 100644 --- a/src/components/note/comment.tsx +++ b/src/shared/note/comment.tsx @@ -1,9 +1,9 @@ -import { NoteMetadata } from '@components/note/metadata'; -import { ImagePreview } from '@components/note/preview/image'; -import { VideoPreview } from '@components/note/preview/video'; -import { NoteQuote } from '@components/note/quote'; -import { UserExtend } from '@components/user/extend'; -import { UserMention } from '@components/user/mention'; +import { NoteMetadata } from '@lume/shared/note/metadata'; +import { ImagePreview } from '@lume/shared/note/preview/image'; +import { VideoPreview } from '@lume/shared/note/preview/video'; +import { NoteQuote } from '@lume/shared/note/quote'; +import { UserExtend } from '@lume/shared/user/extend'; +import { UserMention } from '@lume/shared/user/mention'; import destr from 'destr'; import { memo, useMemo } from 'react'; diff --git a/src/components/note/extend.tsx b/src/shared/note/extend.tsx similarity index 88% rename from src/components/note/extend.tsx rename to src/shared/note/extend.tsx index 65bc3550..3137c65f 100644 --- a/src/components/note/extend.tsx +++ b/src/shared/note/extend.tsx @@ -1,9 +1,9 @@ -import { NoteMetadata } from '@components/note/metadata'; -import { ImagePreview } from '@components/note/preview/image'; -import { VideoPreview } from '@components/note/preview/video'; -import { NoteQuote } from '@components/note/quote'; -import { UserLarge } from '@components/user/large'; -import { UserMention } from '@components/user/mention'; +import { NoteMetadata } from '@lume/shared/note/metadata'; +import { ImagePreview } from '@lume/shared/note/preview/image'; +import { VideoPreview } from '@lume/shared/note/preview/video'; +import { NoteQuote } from '@lume/shared/note/quote'; +import { UserLarge } from '@lume/shared/user/large'; +import { UserMention } from '@lume/shared/user/mention'; import destr from 'destr'; import { memo, useMemo } from 'react'; diff --git a/src/components/note/meta/comment.tsx b/src/shared/note/meta/comment.tsx similarity index 95% rename from src/components/note/meta/comment.tsx rename to src/shared/note/meta/comment.tsx index c8b3db49..ae00efc7 100644 --- a/src/components/note/meta/comment.tsx +++ b/src/shared/note/meta/comment.tsx @@ -1,10 +1,8 @@ -import { AccountContext } from '@components/accountProvider'; -import { RelayContext } from '@components/relaysProvider'; -import { UserExtend } from '@components/user/extend'; - -import { WRITEONLY_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { UserExtend } from '@lume/shared/user/extend'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; import { Dialog, Transition } from '@headlessui/react'; import { ChatLines, OpenNewWindow } from 'iconoir-react'; diff --git a/src/components/note/meta/reaction.tsx b/src/shared/note/meta/reaction.tsx similarity index 88% rename from src/components/note/meta/reaction.tsx rename to src/shared/note/meta/reaction.tsx index 398c9160..04cbe06f 100644 --- a/src/components/note/meta/reaction.tsx +++ b/src/shared/note/meta/reaction.tsx @@ -1,9 +1,7 @@ -import { AccountContext } from '@components/accountProvider'; -import { RelayContext } from '@components/relaysProvider'; - -import { WRITEONLY_RELAYS } from '@stores/constants'; - -import { dateToUnix } from '@utils/getDate'; +import { AccountContext } from '@lume/shared/accountProvider'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix } from '@lume/utils/getDate'; import { Heart } from 'iconoir-react'; import { getEventHash, signEvent } from 'nostr-tools'; diff --git a/src/components/note/metadata.tsx b/src/shared/note/metadata.tsx similarity index 100% rename from src/components/note/metadata.tsx rename to src/shared/note/metadata.tsx diff --git a/src/components/note/parent.tsx b/src/shared/note/parent.tsx similarity index 90% rename from src/components/note/parent.tsx rename to src/shared/note/parent.tsx index 464855b4..ac364166 100644 --- a/src/components/note/parent.tsx +++ b/src/shared/note/parent.tsx @@ -1,10 +1,8 @@ -import { NoteMetadata } from '@components/note/metadata'; -import { RelayContext } from '@components/relaysProvider'; -import { UserExtend } from '@components/user/extend'; - -import { READONLY_RELAYS } from '@stores/constants'; - -import { contentParser } from '@utils/parser'; +import { NoteMetadata } from '@lume/shared/note/metadata'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { UserExtend } from '@lume/shared/user/extend'; +import { READONLY_RELAYS } from '@lume/stores/constants'; +import { contentParser } from '@lume/utils/parser'; import { memo, useContext } from 'react'; import useSWRSubscription from 'swr/subscription'; diff --git a/src/components/note/placeholder.tsx b/src/shared/note/placeholder.tsx similarity index 100% rename from src/components/note/placeholder.tsx rename to src/shared/note/placeholder.tsx diff --git a/src/components/note/preview/image.tsx b/src/shared/note/preview/image.tsx similarity index 100% rename from src/components/note/preview/image.tsx rename to src/shared/note/preview/image.tsx diff --git a/src/components/note/preview/video.tsx b/src/shared/note/preview/video.tsx similarity index 100% rename from src/components/note/preview/video.tsx rename to src/shared/note/preview/video.tsx diff --git a/src/components/note/preview/youtube.tsx b/src/shared/note/preview/youtube.tsx similarity index 100% rename from src/components/note/preview/youtube.tsx rename to src/shared/note/preview/youtube.tsx diff --git a/src/components/note/quote.tsx b/src/shared/note/quote.tsx similarity index 86% rename from src/components/note/quote.tsx rename to src/shared/note/quote.tsx index 9e73a54f..f57af52e 100644 --- a/src/components/note/quote.tsx +++ b/src/shared/note/quote.tsx @@ -1,9 +1,7 @@ -import { RelayContext } from '@components/relaysProvider'; -import { UserExtend } from '@components/user/extend'; - -import { READONLY_RELAYS } from '@stores/constants'; - -import { contentParser } from '@utils/parser'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { UserExtend } from '@lume/shared/user/extend'; +import { READONLY_RELAYS } from '@lume/stores/constants'; +import { contentParser } from '@lume/utils/parser'; import { memo, useContext } from 'react'; import useSWRSubscription from 'swr/subscription'; diff --git a/src/components/note/quoteRepost.tsx b/src/shared/note/quoteRepost.tsx similarity index 78% rename from src/components/note/quoteRepost.tsx rename to src/shared/note/quoteRepost.tsx index 729fdbfe..1e8dcb93 100644 --- a/src/components/note/quoteRepost.tsx +++ b/src/shared/note/quoteRepost.tsx @@ -1,7 +1,6 @@ -import { RootNote } from '@components/note/rootNote'; -import { UserQuoteRepost } from '@components/user/quoteRepost'; - -import { getQuoteID } from '@utils/transform'; +import { RootNote } from '@lume/shared/note/rootNote'; +import { UserQuoteRepost } from '@lume/shared/user/quoteRepost'; +import { getQuoteID } from '@lume/utils/transform'; import { memo } from 'react'; diff --git a/src/components/note/rootNote.tsx b/src/shared/note/rootNote.tsx similarity index 86% rename from src/components/note/rootNote.tsx rename to src/shared/note/rootNote.tsx index b73759a8..433ab0ec 100644 --- a/src/components/note/rootNote.tsx +++ b/src/shared/note/rootNote.tsx @@ -1,10 +1,8 @@ -import { NoteMetadata } from '@components/note/metadata'; -import { RelayContext } from '@components/relaysProvider'; -import { UserExtend } from '@components/user/extend'; - -import { READONLY_RELAYS } from '@stores/constants'; - -import { contentParser } from '@utils/parser'; +import { NoteMetadata } from '@lume/shared/note/metadata'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { UserExtend } from '@lume/shared/user/extend'; +import { READONLY_RELAYS } from '@lume/stores/constants'; +import { contentParser } from '@lume/utils/parser'; import { memo, useContext } from 'react'; import useSWRSubscription from 'swr/subscription'; diff --git a/src/components/profile/followers.tsx b/src/shared/profile/followers.tsx similarity index 78% rename from src/components/profile/followers.tsx rename to src/shared/profile/followers.tsx index 16f1d23e..d52cc4f1 100644 --- a/src/components/profile/followers.tsx +++ b/src/shared/profile/followers.tsx @@ -1,7 +1,6 @@ -import { RelayContext } from '@components/relaysProvider'; -import { UserFollow } from '@components/user/follow'; - -import { READONLY_RELAYS } from '@stores/constants'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { UserFollow } from '@lume/shared/user/follow'; +import { READONLY_RELAYS } from '@lume/stores/constants'; import destr from 'destr'; import { Author } from 'nostr-relaypool'; diff --git a/src/components/profile/follows.tsx b/src/shared/profile/follows.tsx similarity index 77% rename from src/components/profile/follows.tsx rename to src/shared/profile/follows.tsx index 283178f8..ba93860b 100644 --- a/src/components/profile/follows.tsx +++ b/src/shared/profile/follows.tsx @@ -1,7 +1,6 @@ -import { RelayContext } from '@components/relaysProvider'; -import { UserFollow } from '@components/user/follow'; - -import { READONLY_RELAYS } from '@stores/constants'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { UserFollow } from '@lume/shared/user/follow'; +import { READONLY_RELAYS } from '@lume/stores/constants'; import { Author } from 'nostr-relaypool'; import { useContext, useEffect, useState } from 'react'; diff --git a/src/components/profile/metadata.tsx b/src/shared/profile/metadata.tsx similarity index 89% rename from src/components/profile/metadata.tsx rename to src/shared/profile/metadata.tsx index 6c85bf9c..a0064bc7 100644 --- a/src/components/profile/metadata.tsx +++ b/src/shared/profile/metadata.tsx @@ -1,8 +1,6 @@ -import { RelayContext } from '@components/relaysProvider'; - -import { DEFAULT_AVATAR, READONLY_RELAYS } from '@stores/constants'; - -import { shortenKey } from '@utils/shortenKey'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { DEFAULT_AVATAR, READONLY_RELAYS } from '@lume/stores/constants'; +import { shortenKey } from '@lume/utils/shortenKey'; import destr from 'destr'; import { Author } from 'nostr-relaypool'; diff --git a/src/components/profile/notes.tsx b/src/shared/profile/notes.tsx similarity index 77% rename from src/components/profile/notes.tsx rename to src/shared/profile/notes.tsx index 961ffef3..ab3db4a8 100644 --- a/src/components/profile/notes.tsx +++ b/src/shared/profile/notes.tsx @@ -1,7 +1,6 @@ -import { NoteBase } from '@components/note/base'; -import { RelayContext } from '@components/relaysProvider'; - -import { READONLY_RELAYS } from '@stores/constants'; +import { NoteBase } from '@lume/shared/note/base'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { READONLY_RELAYS } from '@lume/stores/constants'; import { Author } from 'nostr-relaypool'; import { useContext, useEffect, useState } from 'react'; diff --git a/src/components/relaysProvider.tsx b/src/shared/relaysProvider.tsx similarity index 90% rename from src/components/relaysProvider.tsx rename to src/shared/relaysProvider.tsx index e8cda102..41bb8705 100644 --- a/src/components/relaysProvider.tsx +++ b/src/shared/relaysProvider.tsx @@ -1,4 +1,4 @@ -import { READONLY_RELAYS } from '@stores/constants'; +import { READONLY_RELAYS } from '@lume/stores/constants'; import { RelayPool } from 'nostr-relaypool'; import { createContext, useMemo } from 'react'; diff --git a/src/components/tooltip.tsx b/src/shared/tooltip.tsx similarity index 100% rename from src/components/tooltip.tsx rename to src/shared/tooltip.tsx diff --git a/src/components/user/base.tsx b/src/shared/user/base.tsx similarity index 83% rename from src/components/user/base.tsx rename to src/shared/user/base.tsx index eb286069..095b08d4 100644 --- a/src/components/user/base.tsx +++ b/src/shared/user/base.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; import { memo } from 'react'; diff --git a/src/components/user/extend.tsx b/src/shared/user/extend.tsx similarity index 88% rename from src/components/user/extend.tsx rename to src/shared/user/extend.tsx index 79c0eb1b..e48afb38 100644 --- a/src/components/user/extend.tsx +++ b/src/shared/user/extend.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; diff --git a/src/components/user/follow.tsx b/src/shared/user/follow.tsx similarity index 83% rename from src/components/user/follow.tsx rename to src/shared/user/follow.tsx index 7fdd1487..7250f42e 100644 --- a/src/components/user/follow.tsx +++ b/src/shared/user/follow.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; export const UserFollow = ({ pubkey }: { pubkey: string }) => { const profile = useProfile(pubkey); diff --git a/src/components/user/large.tsx b/src/shared/user/large.tsx similarity index 89% rename from src/components/user/large.tsx rename to src/shared/user/large.tsx index 614cbc26..b5a530b9 100644 --- a/src/components/user/large.tsx +++ b/src/shared/user/large.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; diff --git a/src/components/user/mention.tsx b/src/shared/user/mention.tsx similarity index 68% rename from src/components/user/mention.tsx rename to src/shared/user/mention.tsx index 92f7a7f8..ffeca2cd 100644 --- a/src/components/user/mention.tsx +++ b/src/shared/user/mention.tsx @@ -1,5 +1,5 @@ -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; export const UserMention = ({ pubkey }: { pubkey: string }) => { const profile = useProfile(pubkey); diff --git a/src/components/user/mini.tsx b/src/shared/user/mini.tsx similarity index 79% rename from src/components/user/mini.tsx rename to src/shared/user/mini.tsx index d559351c..cf76fdbc 100644 --- a/src/components/user/mini.tsx +++ b/src/shared/user/mini.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; export const UserMini = ({ pubkey }: { pubkey: string }) => { const profile = useProfile(pubkey); diff --git a/src/components/user/muted.tsx b/src/shared/user/muted.tsx similarity index 85% rename from src/components/user/muted.tsx rename to src/shared/user/muted.tsx index 6331592a..acc9778d 100644 --- a/src/components/user/muted.tsx +++ b/src/shared/user/muted.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; import { useState } from 'react'; @@ -10,7 +9,7 @@ export const UserMuted = ({ data }: { data: any }) => { const [status, setStatus] = useState(data.status); const unmute = async () => { - const { updateItemInBlacklist } = await import('@utils/storage'); + const { updateItemInBlacklist } = await import('@lume/utils/storage'); const res = await updateItemInBlacklist(data.content, 0); if (res) { setStatus(0); @@ -18,7 +17,7 @@ export const UserMuted = ({ data }: { data: any }) => { }; const mute = async () => { - const { updateItemInBlacklist } = await import('@utils/storage'); + const { updateItemInBlacklist } = await import('@lume/utils/storage'); const res = await updateItemInBlacklist(data.content, 1); if (res) { setStatus(1); diff --git a/src/components/user/quoteRepost.tsx b/src/shared/user/quoteRepost.tsx similarity index 87% rename from src/components/user/quoteRepost.tsx rename to src/shared/user/quoteRepost.tsx index ebf5e6e2..248f9aa7 100644 --- a/src/components/user/quoteRepost.tsx +++ b/src/shared/user/quoteRepost.tsx @@ -1,7 +1,6 @@ -import { DEFAULT_AVATAR } from '@stores/constants'; - -import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { DEFAULT_AVATAR } from '@lume/stores/constants'; +import { useProfile } from '@lume/utils/hooks/useProfile'; +import { shortenKey } from '@lume/utils/shortenKey'; import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; diff --git a/src/splashscreen/_default.page.route.tsx b/src/splashscreen/_default.page.route.tsx new file mode 100644 index 00000000..8ab413d3 --- /dev/null +++ b/src/splashscreen/_default.page.route.tsx @@ -0,0 +1 @@ +export const filesystemRoutingRoot = '/'; diff --git a/src/pages/index.page.tsx b/src/splashscreen/pages/index.page.tsx similarity index 93% rename from src/pages/index.page.tsx rename to src/splashscreen/pages/index.page.tsx index 3be7beec..8284f769 100644 --- a/src/pages/index.page.tsx +++ b/src/splashscreen/pages/index.page.tsx @@ -1,8 +1,7 @@ -import { RelayContext } from '@components/relaysProvider'; - -import { READONLY_RELAYS } from '@stores/constants'; - -import { dateToUnix, hoursAgo } from '@utils/getDate'; +import LumeIcon from '@lume/shared/icons/lume'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { READONLY_RELAYS } from '@lume/stores/constants'; +import { dateToUnix, hoursAgo } from '@lume/utils/getDate'; import { addToBlacklist, countTotalNotes, @@ -11,10 +10,8 @@ import { getActiveAccount, getLastLogin, updateLastLogin, -} from '@utils/storage'; -import { getParentID } from '@utils/transform'; - -import LumeSymbol from '@assets/icons/Lume'; +} from '@lume/utils/storage'; +import { getParentID } from '@lume/utils/transform'; import { useContext, useEffect, useRef } from 'react'; import { navigate } from 'vite-plugin-ssr/client/router'; @@ -150,7 +147,7 @@ export function Page() { } clearTimeout(timeout); }; - }, []); + }, [pool]); return (
@@ -160,7 +157,7 @@ export function Page() { {/* end dragging area */}
- +

Here's an interesting fact: diff --git a/src/stores/onboarding.tsx b/src/stores/onboarding.tsx new file mode 100644 index 00000000..c8cbe64d --- /dev/null +++ b/src/stores/onboarding.tsx @@ -0,0 +1,3 @@ +import { atom } from 'jotai'; + +export const onboardingAtom = atom({ pubkey: null, privkey: null, metadata: null, follows: null }); diff --git a/src/utils/broadcast.tsx b/src/utils/broadcast.tsx index 26778af0..488b182d 100644 --- a/src/utils/broadcast.tsx +++ b/src/utils/broadcast.tsx @@ -1,4 +1,4 @@ -import { WRITEONLY_RELAYS } from '@stores/constants'; +import { WRITEONLY_RELAYS } from '@lume/stores/constants'; import { getEventHash, signEvent } from 'nostr-tools'; diff --git a/src/utils/hooks/useChannelMetadata.tsx b/src/utils/hooks/useChannelMetadata.tsx index 79b0ab84..cbedd330 100644 --- a/src/utils/hooks/useChannelMetadata.tsx +++ b/src/utils/hooks/useChannelMetadata.tsx @@ -1,9 +1,7 @@ -import { RelayContext } from '@components/relaysProvider'; - -import { READONLY_RELAYS } from '@stores/constants'; - -import { updateChannelMetadata } from '@utils/storage'; -import { getChannel } from '@utils/storage'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { READONLY_RELAYS } from '@lume/stores/constants'; +import { updateChannelMetadata } from '@lume/utils/storage'; +import { getChannel } from '@lume/utils/storage'; import { useCallback, useContext, useEffect, useState } from 'react'; diff --git a/src/utils/hooks/useChannelProfile.tsx b/src/utils/hooks/useChannelProfile.tsx index 53d74ff5..13d1b892 100644 --- a/src/utils/hooks/useChannelProfile.tsx +++ b/src/utils/hooks/useChannelProfile.tsx @@ -1,6 +1,5 @@ -import { RelayContext } from '@components/relaysProvider'; - -import { READONLY_RELAYS } from '@stores/constants'; +import { RelayContext } from '@lume/shared/relaysProvider'; +import { READONLY_RELAYS } from '@lume/stores/constants'; import { useContext } from 'react'; import useSWRSubscription from 'swr/subscription'; diff --git a/src/utils/hooks/useDecryptMessage.tsx b/src/utils/hooks/useDecryptMessage.tsx index 2a3a4a55..ee2e87bf 100644 --- a/src/utils/hooks/useDecryptMessage.tsx +++ b/src/utils/hooks/useDecryptMessage.tsx @@ -1,4 +1,4 @@ -import { messageParser } from '@utils/parser'; +import { messageParser } from '@lume/utils/parser'; import { nip04 } from 'nostr-tools'; import { useCallback, useEffect, useState } from 'react'; diff --git a/src/utils/parser.tsx b/src/utils/parser.tsx index a163448d..b3e33f29 100644 --- a/src/utils/parser.tsx +++ b/src/utils/parser.tsx @@ -1,8 +1,8 @@ -import { ImagePreview } from '@components/note/preview/image'; -import { VideoPreview } from '@components/note/preview/video'; -import { YoutubePreview } from '@components/note/preview/youtube'; -import { NoteQuote } from '@components/note/quote'; -import { UserMention } from '@components/user/mention'; +import { ImagePreview } from '@lume/shared/note/preview/image'; +import { VideoPreview } from '@lume/shared/note/preview/video'; +import { YoutubePreview } from '@lume/shared/note/preview/youtube'; +import { NoteQuote } from '@lume/shared/note/quote'; +import { UserMention } from '@lume/shared/user/mention'; import destr from 'destr'; import reactStringReplace from 'react-string-replace'; diff --git a/tsconfig.json b/tsconfig.json index df23f89d..bc4fd9a3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,12 +2,7 @@ "compilerOptions": { "baseUrl": "./", "paths": { - "@app/*": ["src/app/*"], - "@components/*": ["src/components/*"], - "@stores/*": ["src/stores/*"], - "@utils/*": ["src/utils/*"], - "@assets/*": ["src/assets/*"], - "@renderer/*": ["src/renderer/*"] + "@lume/*": ["src/*"] }, "types": ["vidstack/globals"], "target": "es2017",