From c8e014f33ed6ab8a2488f83f68118fb8d669c8de Mon Sep 17 00:00:00 2001 From: reya Date: Sat, 16 Mar 2024 18:45:54 +0700 Subject: [PATCH] chore: clean up --- apps/desktop2/package.json | 6 +- apps/desktop2/src/routes/$account.home.tsx | 50 ++ .../src/routes/$account/home.lazy.tsx | 36 -- apps/web/package.json | 2 +- packages/ark/package.json | 4 +- packages/ark/src/hooks/useEvents.ts | 48 ++ packages/lume-column-antenas/package.json | 24 - .../src/components/form.tsx | 131 ---- packages/lume-column-antenas/src/home.tsx | 132 ---- packages/lume-column-antenas/src/index.tsx | 30 - .../lume-column-antenas/tailwind.config.js | 8 - packages/lume-column-antenas/tsconfig.json | 8 - packages/lume-column-default/package.json | 24 - packages/lume-column-default/src/index.tsx | 188 ------ .../lume-column-default/tailwind.config.js | 8 - packages/lume-column-default/tsconfig.json | 8 - packages/lume-column-foryou/package.json | 24 - packages/lume-column-foryou/src/home.tsx | 139 ----- packages/lume-column-foryou/src/index.tsx | 49 -- .../lume-column-foryou/tailwind.config.js | 8 - packages/lume-column-foryou/tsconfig.json | 8 - packages/lume-column-global/package.json | 24 - packages/lume-column-global/src/home.tsx | 126 ---- packages/lume-column-global/src/index.tsx | 19 - .../lume-column-global/tailwind.config.js | 8 - packages/lume-column-global/tsconfig.json | 8 - packages/lume-column-group/package.json | 24 - .../lume-column-group/src/components/form.tsx | 92 --- packages/lume-column-group/src/home.tsx | 119 ---- packages/lume-column-group/src/index.tsx | 30 - packages/lume-column-group/tailwind.config.js | 8 - packages/lume-column-group/tsconfig.json | 8 - packages/lume-column-hashtag/package.json | 24 - packages/lume-column-hashtag/src/home.tsx | 109 ---- packages/lume-column-hashtag/src/index.tsx | 23 - .../lume-column-hashtag/tailwind.config.js | 8 - packages/lume-column-hashtag/tsconfig.json | 8 - packages/lume-column-thread/package.json | 24 - packages/lume-column-thread/src/home.tsx | 16 - packages/lume-column-thread/src/index.tsx | 17 - .../lume-column-thread/tailwind.config.js | 8 - packages/lume-column-thread/tsconfig.json | 8 - packages/lume-column-timeline/package.json | 24 - packages/lume-column-timeline/src/home.tsx | 114 ---- packages/lume-column-timeline/src/index.tsx | 25 - .../lume-column-timeline/tailwind.config.js | 8 - packages/lume-column-timeline/tsconfig.json | 8 - .../lume-column-trending-notes/package.json | 24 - .../lume-column-trending-notes/src/home.tsx | 71 --- .../lume-column-trending-notes/src/index.tsx | 23 - .../tailwind.config.js | 8 - .../lume-column-trending-notes/tsconfig.json | 8 - packages/lume-column-user/package.json | 24 - packages/lume-column-user/src/home.tsx | 120 ---- packages/lume-column-user/src/index.tsx | 17 - packages/lume-column-user/tailwind.config.js | 8 - packages/lume-column-user/tsconfig.json | 8 - packages/lume-column-waifu/package.json | 22 - packages/lume-column-waifu/src/home.tsx | 69 --- packages/lume-column-waifu/src/index.tsx | 16 - packages/lume-column-waifu/tailwind.config.js | 8 - packages/lume-column-waifu/tsconfig.json | 8 - packages/types/index.d.ts | 7 - packages/ui/package.json | 8 +- packages/ui/src/column.tsx | 38 +- packages/utils/package.json | 4 +- pnpm-lock.yaml | 570 ++---------------- 67 files changed, 163 insertions(+), 2723 deletions(-) create mode 100644 apps/desktop2/src/routes/$account.home.tsx delete mode 100644 apps/desktop2/src/routes/$account/home.lazy.tsx create mode 100644 packages/ark/src/hooks/useEvents.ts delete mode 100644 packages/lume-column-antenas/package.json delete mode 100644 packages/lume-column-antenas/src/components/form.tsx delete mode 100644 packages/lume-column-antenas/src/home.tsx delete mode 100644 packages/lume-column-antenas/src/index.tsx delete mode 100644 packages/lume-column-antenas/tailwind.config.js delete mode 100644 packages/lume-column-antenas/tsconfig.json delete mode 100644 packages/lume-column-default/package.json delete mode 100644 packages/lume-column-default/src/index.tsx delete mode 100644 packages/lume-column-default/tailwind.config.js delete mode 100644 packages/lume-column-default/tsconfig.json delete mode 100644 packages/lume-column-foryou/package.json delete mode 100644 packages/lume-column-foryou/src/home.tsx delete mode 100644 packages/lume-column-foryou/src/index.tsx delete mode 100644 packages/lume-column-foryou/tailwind.config.js delete mode 100644 packages/lume-column-foryou/tsconfig.json delete mode 100644 packages/lume-column-global/package.json delete mode 100644 packages/lume-column-global/src/home.tsx delete mode 100644 packages/lume-column-global/src/index.tsx delete mode 100644 packages/lume-column-global/tailwind.config.js delete mode 100644 packages/lume-column-global/tsconfig.json delete mode 100644 packages/lume-column-group/package.json delete mode 100644 packages/lume-column-group/src/components/form.tsx delete mode 100644 packages/lume-column-group/src/home.tsx delete mode 100644 packages/lume-column-group/src/index.tsx delete mode 100644 packages/lume-column-group/tailwind.config.js delete mode 100644 packages/lume-column-group/tsconfig.json delete mode 100644 packages/lume-column-hashtag/package.json delete mode 100644 packages/lume-column-hashtag/src/home.tsx delete mode 100644 packages/lume-column-hashtag/src/index.tsx delete mode 100644 packages/lume-column-hashtag/tailwind.config.js delete mode 100644 packages/lume-column-hashtag/tsconfig.json delete mode 100644 packages/lume-column-thread/package.json delete mode 100644 packages/lume-column-thread/src/home.tsx delete mode 100644 packages/lume-column-thread/src/index.tsx delete mode 100644 packages/lume-column-thread/tailwind.config.js delete mode 100644 packages/lume-column-thread/tsconfig.json delete mode 100644 packages/lume-column-timeline/package.json delete mode 100644 packages/lume-column-timeline/src/home.tsx delete mode 100644 packages/lume-column-timeline/src/index.tsx delete mode 100644 packages/lume-column-timeline/tailwind.config.js delete mode 100644 packages/lume-column-timeline/tsconfig.json delete mode 100644 packages/lume-column-trending-notes/package.json delete mode 100644 packages/lume-column-trending-notes/src/home.tsx delete mode 100644 packages/lume-column-trending-notes/src/index.tsx delete mode 100644 packages/lume-column-trending-notes/tailwind.config.js delete mode 100644 packages/lume-column-trending-notes/tsconfig.json delete mode 100644 packages/lume-column-user/package.json delete mode 100644 packages/lume-column-user/src/home.tsx delete mode 100644 packages/lume-column-user/src/index.tsx delete mode 100644 packages/lume-column-user/tailwind.config.js delete mode 100644 packages/lume-column-user/tsconfig.json delete mode 100644 packages/lume-column-waifu/package.json delete mode 100644 packages/lume-column-waifu/src/home.tsx delete mode 100644 packages/lume-column-waifu/src/index.tsx delete mode 100644 packages/lume-column-waifu/tailwind.config.js delete mode 100644 packages/lume-column-waifu/tsconfig.json diff --git a/apps/desktop2/package.json b/apps/desktop2/package.json index f5fa6d8c..f00083fd 100644 --- a/apps/desktop2/package.json +++ b/apps/desktop2/package.json @@ -29,10 +29,10 @@ "react-currency-input-field": "^3.8.0", "react-dom": "^18.2.0", "react-i18next": "^14.1.0", - "slate": "^0.101.5", - "slate-react": "^0.101.6", + "slate": "^0.102.0", + "slate-react": "^0.102.0", "sonner": "^1.4.3", - "virtua": "^0.27.5" + "virtua": "^0.29.0" }, "devDependencies": { "@lume/tailwindcss": "workspace:^", diff --git a/apps/desktop2/src/routes/$account.home.tsx b/apps/desktop2/src/routes/$account.home.tsx new file mode 100644 index 00000000..fde8e612 --- /dev/null +++ b/apps/desktop2/src/routes/$account.home.tsx @@ -0,0 +1,50 @@ +import { LoaderIcon } from "@lume/icons"; +import { Column } from "@lume/ui"; +import { createFileRoute } from "@tanstack/react-router"; +import { useState } from "react"; + +export const Route = createFileRoute("/$account/home")({ + component: Screen, + pendingComponent: Pending, + loader: async () => { + const columns = [ + { name: "Tauri v2", content: "https://beta.tauri.app" }, + { name: "Tauri v1", content: "https://tauri.app" }, + { name: "Lume", content: "https://lume.nu" }, + { name: "Snort", content: "https://snort.social" }, + ]; + return columns; + }, +}); + +function Screen() { + const data = Route.useLoaderData(); + const [isScroll, setIsScroll] = useState(false); + + return ( +
+
setIsScroll((state) => !state)} + className="flex h-full w-full flex-nowrap gap-3 overflow-x-auto px-3 pb-3 pt-1.5 focus:outline-none" + > + {data.map((column, index) => ( + + ))} +
+
+ ); +} + +function Pending() { + return ( +
+ +
+ ); +} diff --git a/apps/desktop2/src/routes/$account/home.lazy.tsx b/apps/desktop2/src/routes/$account/home.lazy.tsx deleted file mode 100644 index 7dc1757d..00000000 --- a/apps/desktop2/src/routes/$account/home.lazy.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { LumeColumn } from "@lume/types"; -import { Column } from "@lume/ui"; -import { createLazyFileRoute } from "@tanstack/react-router"; -import { useState } from "react"; - -const DEFAULT_COLUMNS: LumeColumn[] = [ - { name: "Tauri v2", content: "https://beta.tauri.app" }, - { name: "Tauri v1", content: "https://tauri.app" }, - { name: "Lume", content: "https://lume.nu" }, - { name: "Snort", content: "https://snort.social" }, -]; - -export const Route = createLazyFileRoute("/$account/home")({ - component: Screen, -}); - -function Screen() { - const [isScroll, setIsScroll] = useState(false); - - return ( -
-
setIsScroll((state) => !state)} - className="flex h-full w-full flex-nowrap gap-3 overflow-x-auto px-3 pb-3 pt-1.5 focus:outline-none" - > - {DEFAULT_COLUMNS.map((column, index) => ( - - ))} -
-
- ); -} diff --git a/apps/web/package.json b/apps/web/package.json index 754978a1..c6139537 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -10,7 +10,7 @@ "astro": "astro" }, "dependencies": { - "@astrojs/check": "^0.4.1", + "@astrojs/check": "^0.5.9", "@astrojs/tailwind": "^5.1.0", "@fontsource/geist-mono": "^5.0.2", "astro": "^4.5.5", diff --git a/packages/ark/package.json b/packages/ark/package.json index a065fe02..144a822e 100644 --- a/packages/ark/package.json +++ b/packages/ark/package.json @@ -17,7 +17,7 @@ "@tanstack/react-query": "^5.28.4", "@tanstack/react-router": "^1.20.0", "get-urls": "^12.1.0", - "media-chrome": "^2.2.5", + "media-chrome": "^3.0.2", "minidenticons": "^4.2.1", "nanoid": "^5.0.6", "qrcode.react": "^3.1.0", @@ -28,7 +28,7 @@ "react-string-replace": "^1.1.1", "sonner": "^1.4.3", "string-strip-html": "^13.4.6", - "virtua": "^0.27.5" + "virtua": "^0.29.0" }, "devDependencies": { "@lume/tailwindcss": "workspace:^", diff --git a/packages/ark/src/hooks/useEvents.ts b/packages/ark/src/hooks/useEvents.ts new file mode 100644 index 00000000..3251fe2d --- /dev/null +++ b/packages/ark/src/hooks/useEvents.ts @@ -0,0 +1,48 @@ +import { useInfiniteQuery } from "@tanstack/react-query"; +import { useArk } from "./useArk"; + +const FETCH_LIMIT = 20; +const QUERY_KEY = "local"; +const DEDUP = true; + +export function useEvents(key: string, account?: string) { + const ark = useArk(); + const { + data, + isError, + isLoading, + isRefetching, + isFetchingNextPage, + hasNextPage, + fetchNextPage, + } = useInfiniteQuery({ + queryKey: [key, account], + initialPageParam: 0, + queryFn: async ({ pageParam }: { pageParam: number }) => { + const events = await ark.get_events( + QUERY_KEY, + FETCH_LIMIT, + pageParam, + DEDUP, + ); + return events; + }, + getNextPageParam: (lastPage) => { + const lastEvent = lastPage?.at(-1); + if (!lastEvent) return; + return lastEvent.created_at - 1; + }, + select: (data) => data?.pages.flatMap((page) => page), + refetchOnWindowFocus: false, + }); + + return { + data, + isError, + isLoading, + isRefetching, + isFetchingNextPage, + hasNextPage, + fetchNextPage, + }; +} diff --git a/packages/lume-column-antenas/package.json b/packages/lume-column-antenas/package.json deleted file mode 100644 index bbe3725d..00000000 --- a/packages/lume-column-antenas/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/antenas", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-antenas/src/components/form.tsx b/packages/lume-column-antenas/src/components/form.tsx deleted file mode 100644 index 564a7269..00000000 --- a/packages/lume-column-antenas/src/components/form.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { useColumnContext } from "@lume/ark"; -import { CancelIcon, PlusIcon } from "@lume/icons"; -import { useState } from "react"; -import { toast } from "sonner"; - -export function AntenasForm({ id }: { id: number }) { - const { updateColumn, removeColumn } = useColumnContext(); - - const [title, setTitle] = useState(`Antena-${id}`); - const [source, setSource] = useState("contacts"); - const [hashtag, setHashtag] = useState(""); - const [hashtags, setHashtags] = useState([]); - - const addHashtag = () => { - if (!hashtag.startsWith("#")) - return toast.error("Hashtag need to start with #"); - if (hashtag.length > 64) return toast.error("Hashtag too long"); - setHashtags((prev) => [...prev, hashtag]); - setHashtag(""); - }; - - const removeHashtag = (item: string) => { - setHashtags((prev) => prev.filter((tag) => tag !== item)); - }; - - const submit = async () => { - const content = { - hashtags, - source, - }; - await updateColumn(id, title, JSON.stringify(content)); - }; - - return ( -
-
-
-

Create a new Antena

- -
-
-
- - setTitle(e.target.value)} - placeholder="Nostrichs..." - className="px-2 border border-neutral-100 dark:border-neutral-900 bg-neutral-50 rounded-lg h-10 dark:bg-neutral-950 placeholder:text-neutral-600 focus:border-blue-500 focus:shadow-none focus:ring-0" - /> -
-
- - -
-
- -
- setHashtag(e.target.value)} - onKeyPress={(event) => { - if (event.key === "Enter") addHashtag(); - }} - placeholder="#nostr..." - className="px-2 w-full border border-neutral-100 dark:border-neutral-900 bg-neutral-50 rounded-lg h-10 dark:bg-neutral-950 placeholder:text-neutral-600 focus:border-blue-500 focus:shadow-none focus:ring-0" - /> - -
-
- {hashtags.map((item) => ( - - ))} -
-
-
- -
-
-
-
- ); -} diff --git a/packages/lume-column-antenas/src/home.tsx b/packages/lume-column-antenas/src/home.tsx deleted file mode 100644 index 4300ed77..00000000 --- a/packages/lume-column-antenas/src/home.tsx +++ /dev/null @@ -1,132 +0,0 @@ -import { RepostNote, TextNote, useArk } from "@lume/ark"; -import { ArrowRightCircleIcon, LoaderIcon } from "@lume/icons"; -import { FETCH_LIMIT } from "@lume/utils"; -import { NDKEvent, NDKFilter, NDKKind } from "@nostr-dev-kit/ndk"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { useEffect, useMemo, useRef } from "react"; -import { CacheSnapshot, VList, VListHandle } from "virtua"; - -export function HomeRoute({ - colKey, - content, -}: { colKey: string; content: string }) { - const ark = useArk(); - const ref = useRef(); - const cacheKey = `${colKey}-vlist`; - - const [offset, cache] = useMemo(() => { - const serialized = sessionStorage.getItem(cacheKey); - if (!serialized) return []; - return JSON.parse(serialized) as [number, CacheSnapshot]; - }, []); - - const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery({ - queryKey: [colKey], - initialPageParam: 0, - queryFn: async ({ - signal, - pageParam, - }: { - signal: AbortSignal; - pageParam: number; - }) => { - let filter: NDKFilter; - const parsed: { hashtags: string[]; source: string } = - JSON.parse(content); - - if (parsed.source === "contacts") { - filter = { - kinds: [NDKKind.Text, NDKKind.Repost], - "#t": parsed.hashtags.map((item) => item.replace("#", "")), - authors: ark.account.contacts, - }; - } else { - filter = { - kinds: [NDKKind.Text, NDKKind.Repost], - "#t": parsed.hashtags.map((item) => item.replace("#", "")), - }; - } - - const events = await ark.getInfiniteEvents({ - filter, - limit: FETCH_LIMIT, - pageParam, - signal, - }); - - return events; - }, - getNextPageParam: (lastPage) => { - const lastEvent = lastPage.at(-1); - if (!lastEvent) return; - return lastEvent.created_at - 1; - }, - refetchOnWindowFocus: false, - }); - - const allEvents = useMemo( - () => (data ? data.pages.flatMap((page) => page) : []), - [data], - ); - - const renderItem = (event: NDKEvent) => { - switch (event.kind) { - case NDKKind.Text: - return ; - case NDKKind.Repost: - return ; - default: - return ; - } - }; - - useEffect(() => { - if (!ref.current) return; - const handle = ref.current; - - if (offset) { - handle.scrollTo(offset); - } - - return () => { - sessionStorage.setItem( - cacheKey, - JSON.stringify([handle.scrollOffset, handle.cache]), - ); - }; - }, []); - - return ( -
- - {isLoading ? ( -
- -
- ) : ( - allEvents.map((item) => renderItem(item)) - )} -
- {hasNextPage ? ( - - ) : null} -
-
-
- ); -} diff --git a/packages/lume-column-antenas/src/index.tsx b/packages/lume-column-antenas/src/index.tsx deleted file mode 100644 index e5b38f74..00000000 --- a/packages/lume-column-antenas/src/index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { EventRoute, UserRoute } from "@lume/ui"; -import { AntenasForm } from "./components/form"; -import { HomeRoute } from "./home"; - -export function Antenas({ column }: { column: LumeColumn }) { - const colKey = `antenas-${column.id}`; - const created = !!column.content?.length; - - return ( - - {created ? ( - <> - - - } - /> - } /> - } /> - - - ) : ( - - )} - - ); -} diff --git a/packages/lume-column-antenas/tailwind.config.js b/packages/lume-column-antenas/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-antenas/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-antenas/tsconfig.json b/packages/lume-column-antenas/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-antenas/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-default/package.json b/packages/lume-column-default/package.json deleted file mode 100644 index 3b017efc..00000000 --- a/packages/lume-column-default/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/default", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-default/src/index.tsx b/packages/lume-column-default/src/index.tsx deleted file mode 100644 index 5342690a..00000000 --- a/packages/lume-column-default/src/index.tsx +++ /dev/null @@ -1,188 +0,0 @@ -import { Column, useColumnContext } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { COL_TYPES } from "@lume/utils"; - -export function Default({ column }: { column: LumeColumn }) { - const { addColumn } = useColumnContext(); - - return ( - - -
-
- - -
-
-
- group -
-
-
-

Group Feeds

-

- Collective of people you're interested in. -

-
- -
-
-
-
- antenas -
-
-
-

Antenas

-

- Keep track to specific content. -

-
- -
-
-
-
- trendingNotes -
-
-
-

Trending Notes

-

- What is trending on Nostr?. -

-
- -
-
-
-
- global -
-
-
-

Global

-

- All things around the world. -

-
- -
-
-
-
- waifu -
-
-
-

Waifu

-

- Show a random waifu image to boost your morale. -

-
- -
-
-
-
- - ); -} diff --git a/packages/lume-column-default/tailwind.config.js b/packages/lume-column-default/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-default/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-default/tsconfig.json b/packages/lume-column-default/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-default/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-foryou/package.json b/packages/lume-column-foryou/package.json deleted file mode 100644 index c57864c3..00000000 --- a/packages/lume-column-foryou/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/foryou", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-foryou/src/home.tsx b/packages/lume-column-foryou/src/home.tsx deleted file mode 100644 index 0533e319..00000000 --- a/packages/lume-column-foryou/src/home.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { TextNote, useArk } from "@lume/ark"; -import { InterestModal } from "@lume/ark/src/components/column/interestModal"; -import { ArrowRightCircleIcon, ForyouIcon, LoaderIcon } from "@lume/icons"; -import { useStorage } from "@lume/storage"; -import { EmptyFeed } from "@lume/ui"; -import { FETCH_LIMIT } from "@lume/utils"; -import { NDKEvent, NDKKind } from "@nostr-dev-kit/ndk"; -import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query"; -import { useEffect, useMemo, useRef } from "react"; -import { CacheSnapshot, VList, VListHandle } from "virtua"; - -export function HomeRoute({ colKey }: { colKey: string }) { - const ark = useArk(); - const storage = useStorage(); - const ref = useRef(); - const cacheKey = `${colKey}-vlist`; - const queryClient = useQueryClient(); - - const [offset, cache] = useMemo(() => { - const serialized = sessionStorage.getItem(cacheKey); - if (!serialized) return []; - return JSON.parse(serialized) as [number, CacheSnapshot]; - }, []); - - const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery({ - queryKey: [colKey], - initialPageParam: 0, - queryFn: async ({ - signal, - pageParam, - }: { - signal: AbortSignal; - pageParam: number; - }) => { - if (!storage.interests?.hashtags) return []; - - const events = await ark.getInfiniteEvents({ - filter: { - kinds: [NDKKind.Text], - "#t": storage.interests.hashtags.map((item: string) => - item.replace("#", "").toLowerCase(), - ), - }, - limit: FETCH_LIMIT, - pageParam, - signal, - }); - - return events; - }, - getNextPageParam: (lastPage) => { - const lastEvent = lastPage.at(-1); - if (!lastEvent) return; - return lastEvent.created_at - 1; - }, - initialData: () => { - const queryCacheData = queryClient.getQueryState([colKey]) - ?.data as NDKEvent[]; - if (queryCacheData) { - return { - pageParams: [undefined, 1], - pages: [queryCacheData], - }; - } - }, - select: (data) => data?.pages.flatMap((page) => page), - staleTime: 120 * 1000, - refetchOnWindowFocus: false, - refetchOnMount: false, - }); - - useEffect(() => { - if (!ref.current) return; - - const handle = ref.current; - - if (offset) { - handle.scrollTo(offset); - } - - return () => { - sessionStorage.setItem( - cacheKey, - JSON.stringify([handle.scrollOffset, handle.cache]), - ); - }; - }, []); - - if (!storage.interests?.hashtags?.length) { - return ( -
- - - - Add interest - -
- ); - } - - return ( -
- - {isLoading ? ( -
- -
- ) : ( - data.map((event) => ( - - )) - )} -
- {hasNextPage ? ( - - ) : null} -
-
-
- ); -} diff --git a/packages/lume-column-foryou/src/index.tsx b/packages/lume-column-foryou/src/index.tsx deleted file mode 100644 index 7b306e4a..00000000 --- a/packages/lume-column-foryou/src/index.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { Column } from "@lume/ark"; -import { useStorage } from "@lume/storage"; -import { LumeColumn } from "@lume/types"; -import { EventRoute, UserRoute } from "@lume/ui"; -import { NDKEvent, NDKKind } from "@nostr-dev-kit/ndk"; -import { useQueryClient } from "@tanstack/react-query"; -import { useRef } from "react"; -import { HomeRoute } from "./home"; - -export function ForYou({ column }: { column: LumeColumn }) { - const colKey = `foryou-${column.id}`; - const storage = useStorage(); - const queryClient = useQueryClient(); - const since = useRef(Math.floor(Date.now() / 1000)); - - const refresh = async (events: NDKEvent[]) => { - const uniqEvents = new Set(events); - await queryClient.setQueryData( - [colKey], - (prev: { pageParams: number; pages: Array }) => ({ - ...prev, - pages: [[...uniqEvents], ...prev.pages], - }), - ); - }; - - return ( - - - {storage.interests?.hashtags ? ( - - item.replace("#", "").toLowerCase(), - ), - since: since.current, - }} - onClick={refresh} - /> - ) : null} - - } /> - } /> - } /> - - - ); -} diff --git a/packages/lume-column-foryou/tailwind.config.js b/packages/lume-column-foryou/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-foryou/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-foryou/tsconfig.json b/packages/lume-column-foryou/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-foryou/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-global/package.json b/packages/lume-column-global/package.json deleted file mode 100644 index 83175963..00000000 --- a/packages/lume-column-global/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/global", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-global/src/home.tsx b/packages/lume-column-global/src/home.tsx deleted file mode 100644 index a5ff74e1..00000000 --- a/packages/lume-column-global/src/home.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import { RepostNote, TextNote, useArk } from "@lume/ark"; -import { ArrowRightCircleIcon, LoaderIcon, SearchIcon } from "@lume/icons"; -import { EmptyFeed } from "@lume/ui"; -import { FETCH_LIMIT } from "@lume/utils"; -import { type NDKEvent, NDKKind } from "@nostr-dev-kit/ndk"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { useEffect, useMemo, useRef } from "react"; -import { Link } from "react-router-dom"; -import { CacheSnapshot, VList, VListHandle } from "virtua"; - -export function HomeRoute({ colKey }: { colKey: string }) { - const ark = useArk(); - const ref = useRef(); - const cacheKey = `${colKey}-vlist`; - - const [offset, cache] = useMemo(() => { - const serialized = sessionStorage.getItem(cacheKey); - if (!serialized) return []; - return JSON.parse(serialized) as [number, CacheSnapshot]; - }, []); - - const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery({ - queryKey: [colKey], - initialPageParam: 0, - queryFn: async ({ - signal, - pageParam, - }: { - signal: AbortSignal; - pageParam: number; - }) => { - if (!ark.account.contacts.length) return []; - - const events = await ark.getInfiniteEvents({ - filter: { - kinds: [NDKKind.Text, NDKKind.Repost], - }, - limit: FETCH_LIMIT, - pageParam, - signal, - }); - - return events; - }, - getNextPageParam: (lastPage) => { - const lastEvent = lastPage.at(-1); - if (!lastEvent) return; - return lastEvent.created_at - 1; - }, - select: (data) => data?.pages.flatMap((page) => page), - refetchOnWindowFocus: false, - refetchOnMount: false, - }); - - const renderItem = (event: NDKEvent) => { - switch (event.kind) { - case NDKKind.Text: - return ; - case NDKKind.Repost: - return ; - default: - return ; - } - }; - - useEffect(() => { - if (!ref.current) return; - const handle = ref.current; - - if (offset) { - handle.scrollTo(offset); - } - - return () => { - sessionStorage.setItem( - cacheKey, - JSON.stringify([handle.scrollOffset, handle.cache]), - ); - }; - }, []); - - return ( -
- - {isLoading ? ( -
- -
- ) : !data.length ? ( -
- - - - Find accounts to follow - -
- ) : ( - data.map((item) => renderItem(item)) - )} -
- {hasNextPage ? ( - - ) : null} -
-
-
- ); -} diff --git a/packages/lume-column-global/src/index.tsx b/packages/lume-column-global/src/index.tsx deleted file mode 100644 index c148e4a8..00000000 --- a/packages/lume-column-global/src/index.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { EventRoute, UserRoute } from "@lume/ui"; -import { HomeRoute } from "./home"; - -export function Global({ column }: { column: LumeColumn }) { - const colKey = `global-${column.id}`; - - return ( - - - - } /> - } /> - } /> - - - ); -} diff --git a/packages/lume-column-global/tailwind.config.js b/packages/lume-column-global/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-global/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-global/tsconfig.json b/packages/lume-column-global/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-global/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-group/package.json b/packages/lume-column-group/package.json deleted file mode 100644 index 86e3afd8..00000000 --- a/packages/lume-column-group/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/group", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-group/src/components/form.tsx b/packages/lume-column-group/src/components/form.tsx deleted file mode 100644 index 506096e5..00000000 --- a/packages/lume-column-group/src/components/form.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import { useArk, useColumnContext } from "@lume/ark"; -import { CancelIcon, CheckCircleIcon } from "@lume/icons"; -import { User } from "@lume/ui"; -import { useState } from "react"; - -export function GroupForm({ id }: { id: number }) { - const ark = useArk(); - const { updateColumn, removeColumn } = useColumnContext(); - - const [title, setTitle] = useState("Just a new group"); - const [users, setUsers] = useState>([]); - - // toggle follow state - const toggleUser = (pubkey: string) => { - const arr = users.includes(pubkey) - ? users.filter((i) => i !== pubkey) - : [...users, pubkey]; - setUsers(arr); - }; - - const submit = async () => { - await updateColumn(id, title, JSON.stringify(users)); - }; - - return ( -
-
-
-

Create a new Group

- -
-
-
- - setTitle(e.target.value)} - placeholder="Nostrichs..." - className="px-2 border border-neutral-100 dark:border-neutral-900 bg-neutral-50 rounded-lg h-10 dark:bg-neutral-950 placeholder:text-neutral-600 focus:border-blue-500 focus:shadow-none focus:ring-0" - /> -
-
-
- - Pick user - - {`${users.length} / ∞`} -
-
- {ark.account?.contacts?.map((item: string) => ( - - ))} -
-
-
-
-
-
- -
-
- ); -} diff --git a/packages/lume-column-group/src/home.tsx b/packages/lume-column-group/src/home.tsx deleted file mode 100644 index ef3fe1dd..00000000 --- a/packages/lume-column-group/src/home.tsx +++ /dev/null @@ -1,119 +0,0 @@ -import { RepostNote, TextNote, useArk } from "@lume/ark"; -import { ArrowRightCircleIcon, LoaderIcon } from "@lume/icons"; -import { FETCH_LIMIT } from "@lume/utils"; -import { NDKEvent, NDKKind } from "@nostr-dev-kit/ndk"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { useEffect, useMemo, useRef } from "react"; -import { CacheSnapshot, VList, VListHandle } from "virtua"; - -export function HomeRoute({ - colKey, - content, -}: { colKey: string; content: string }) { - const ark = useArk(); - const ref = useRef(); - const cacheKey = `${colKey}-vlist`; - - const [offset, cache] = useMemo(() => { - const serialized = sessionStorage.getItem(cacheKey); - if (!serialized) return []; - return JSON.parse(serialized) as [number, CacheSnapshot]; - }, []); - - const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery({ - queryKey: [colKey], - initialPageParam: 0, - queryFn: async ({ - signal, - pageParam, - }: { - signal: AbortSignal; - pageParam: number; - }) => { - const authors: string[] = JSON.parse(content); - const events = await ark.getInfiniteEvents({ - filter: { - kinds: [NDKKind.Text, NDKKind.Repost], - authors: authors, - }, - limit: FETCH_LIMIT, - pageParam, - signal, - }); - - return events; - }, - getNextPageParam: (lastPage) => { - const lastEvent = lastPage.at(-1); - if (!lastEvent) return; - return lastEvent.created_at - 1; - }, - refetchOnWindowFocus: false, - }); - - const allEvents = useMemo( - () => (data ? data.pages.flatMap((page) => page) : []), - [data], - ); - - const renderItem = (event: NDKEvent) => { - switch (event.kind) { - case NDKKind.Text: - return ; - case NDKKind.Repost: - return ; - default: - return ; - } - }; - - useEffect(() => { - if (!ref.current) return; - const handle = ref.current; - - if (offset) { - handle.scrollTo(offset); - } - - return () => { - sessionStorage.setItem( - cacheKey, - JSON.stringify([handle.scrollOffset, handle.cache]), - ); - }; - }, []); - - return ( -
- - {isLoading ? ( -
- -
- ) : ( - allEvents.map((item) => renderItem(item)) - )} -
- {hasNextPage ? ( - - ) : null} -
-
-
- ); -} diff --git a/packages/lume-column-group/src/index.tsx b/packages/lume-column-group/src/index.tsx deleted file mode 100644 index fb6e7d63..00000000 --- a/packages/lume-column-group/src/index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { EventRoute, UserRoute } from "@lume/ui"; -import { GroupForm } from "./components/form"; -import { HomeRoute } from "./home"; - -export function Group({ column }: { column: LumeColumn }) { - const colKey = `group-${column.id}`; - const created = !!column.content?.length; - - return ( - - {created ? ( - <> - - - } - /> - } /> - } /> - - - ) : ( - - )} - - ); -} diff --git a/packages/lume-column-group/tailwind.config.js b/packages/lume-column-group/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-group/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-group/tsconfig.json b/packages/lume-column-group/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-group/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-hashtag/package.json b/packages/lume-column-hashtag/package.json deleted file mode 100644 index d5697b82..00000000 --- a/packages/lume-column-hashtag/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/hashtag", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-hashtag/src/home.tsx b/packages/lume-column-hashtag/src/home.tsx deleted file mode 100644 index d7504b8f..00000000 --- a/packages/lume-column-hashtag/src/home.tsx +++ /dev/null @@ -1,109 +0,0 @@ -import { TextNote, useArk } from "@lume/ark"; -import { ArrowRightCircleIcon, LoaderIcon } from "@lume/icons"; -import { FETCH_LIMIT } from "@lume/utils"; -import { NDKKind } from "@nostr-dev-kit/ndk"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { useEffect, useMemo, useRef } from "react"; -import { CacheSnapshot, VList, VListHandle } from "virtua"; - -export function HomeRoute({ - colKey, - hashtag, -}: { colKey: string; hashtag: string }) { - const ark = useArk(); - const ref = useRef(); - const cacheKey = `${colKey}-vlist`; - - const [offset, cache] = useMemo(() => { - const serialized = sessionStorage.getItem(cacheKey); - if (!serialized) return []; - return JSON.parse(serialized) as [number, CacheSnapshot]; - }, []); - - const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery({ - queryKey: [colKey], - initialPageParam: 0, - queryFn: async ({ - signal, - pageParam, - }: { - signal: AbortSignal; - pageParam: number; - }) => { - const events = await ark.getInfiniteEvents({ - filter: { - kinds: [NDKKind.Text], - "#t": [hashtag], - }, - limit: FETCH_LIMIT, - pageParam, - signal, - }); - - return events; - }, - getNextPageParam: (lastPage) => { - const lastEvent = lastPage.at(-1); - if (!lastEvent) return; - return lastEvent.created_at - 1; - }, - refetchOnWindowFocus: false, - }); - - const allEvents = useMemo( - () => (data ? data.pages.flatMap((page) => page) : []), - [data], - ); - - useEffect(() => { - if (!ref.current) return; - const handle = ref.current; - - if (offset) { - handle.scrollTo(offset); - } - - return () => { - sessionStorage.setItem( - cacheKey, - JSON.stringify([handle.scrollOffset, handle.cache]), - ); - }; - }, []); - - return ( -
- - {isLoading ? ( -
- -
- ) : ( - allEvents.map((item) => ( - - )) - )} -
- {hasNextPage ? ( - - ) : null} -
-
-
- ); -} diff --git a/packages/lume-column-hashtag/src/index.tsx b/packages/lume-column-hashtag/src/index.tsx deleted file mode 100644 index b3fa2d45..00000000 --- a/packages/lume-column-hashtag/src/index.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { EventRoute, UserRoute } from "@lume/ui"; -import { HomeRoute } from "./home"; - -export function Hashtag({ column }: { column: LumeColumn }) { - const colKey = `hashtag-${column.id}`; - const hashtag = column.content.replace("#", ""); - - return ( - - - - } - /> - } /> - } /> - - - ); -} diff --git a/packages/lume-column-hashtag/tailwind.config.js b/packages/lume-column-hashtag/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-hashtag/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-hashtag/tsconfig.json b/packages/lume-column-hashtag/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-hashtag/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-thread/package.json b/packages/lume-column-thread/package.json deleted file mode 100644 index 8d35db38..00000000 --- a/packages/lume-column-thread/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/thread", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-thread/src/home.tsx b/packages/lume-column-thread/src/home.tsx deleted file mode 100644 index 6587e4bb..00000000 --- a/packages/lume-column-thread/src/home.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { ThreadNote } from "@lume/ark"; -import { ReplyList } from "@lume/ui"; -import { WindowVirtualizer } from "virtua"; - -export function HomeRoute({ id }: { id: string }) { - return ( -
- -
- - -
-
-
- ); -} diff --git a/packages/lume-column-thread/src/index.tsx b/packages/lume-column-thread/src/index.tsx deleted file mode 100644 index 3476745d..00000000 --- a/packages/lume-column-thread/src/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { HomeRoute } from "./home"; -import { EventRoute, UserRoute } from "@lume/ui"; - -export function Thread({ column }: { column: LumeColumn }) { - return ( - - - - } /> - } /> - } /> - - - ); -} diff --git a/packages/lume-column-thread/tailwind.config.js b/packages/lume-column-thread/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-thread/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-thread/tsconfig.json b/packages/lume-column-thread/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-thread/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-timeline/package.json b/packages/lume-column-timeline/package.json deleted file mode 100644 index c9d016c0..00000000 --- a/packages/lume-column-timeline/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/timeline", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-timeline/src/home.tsx b/packages/lume-column-timeline/src/home.tsx deleted file mode 100644 index 0f4ac3d8..00000000 --- a/packages/lume-column-timeline/src/home.tsx +++ /dev/null @@ -1,114 +0,0 @@ -import { RepostNote, TextNote, useArk } from "@lume/ark"; -import { ArrowRightCircleIcon, LoaderIcon, SearchIcon } from "@lume/icons"; -import { Event, Kind } from "@lume/types"; -import { EmptyFeed } from "@lume/ui"; -import { FETCH_LIMIT } from "@lume/utils"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { useEffect, useMemo, useRef } from "react"; -import { Link } from "react-router-dom"; -import { CacheSnapshot, VList, VListHandle } from "virtua"; - -export function HomeRoute({ queryKey }: { queryKey: string }) { - const ark = useArk(); - const ref = useRef(); - const cacheKey = `${queryKey}-vlist`; - - const [offset, cache] = useMemo(() => { - const serialized = sessionStorage.getItem(cacheKey); - if (!serialized) return []; - return JSON.parse(serialized) as [number, CacheSnapshot]; - }, []); - - const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery({ - queryKey: [queryKey], - initialPageParam: 0, - queryFn: async ({ - pageParam, - }: { - pageParam: number; - }) => { - const events = await ark.get_text_events(FETCH_LIMIT, pageParam); - return events; - }, - getNextPageParam: (lastPage) => { - const lastEvent = lastPage.at(-1); - if (!lastEvent) return; - return lastEvent.created_at - 1; - }, - select: (data) => data?.pages.flatMap((page) => page), - refetchOnWindowFocus: false, - refetchOnMount: false, - }); - - const renderItem = (event: Event) => { - switch (event.kind) { - case Kind.Text: - return ; - case Kind.Repost: - return ; - default: - return ; - } - }; - - useEffect(() => { - if (!ref.current) return; - const handle = ref.current; - - if (offset) { - handle.scrollTo(offset); - } - - return () => { - sessionStorage.setItem( - cacheKey, - JSON.stringify([handle.scrollOffset, handle.cache]), - ); - }; - }, []); - - return ( -
- - {isLoading ? ( -
- -
- ) : !data.length ? ( -
- - - - Find accounts to follow - -
- ) : ( - data.map((item) => renderItem(item)) - )} -
- {hasNextPage ? ( - - ) : null} -
-
-
- ); -} diff --git a/packages/lume-column-timeline/src/index.tsx b/packages/lume-column-timeline/src/index.tsx deleted file mode 100644 index 6c92285c..00000000 --- a/packages/lume-column-timeline/src/index.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { EventRoute, SuggestRoute, UserRoute } from "@lume/ui"; -import { HomeRoute } from "./home"; - -export function Timeline({ column }: { column: LumeColumn }) { - const colKey = `timeline-${column.id}`; - - return ( - - - - - } /> - } /> - } /> - } - /> - - - - ); -} diff --git a/packages/lume-column-timeline/tailwind.config.js b/packages/lume-column-timeline/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-timeline/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-timeline/tsconfig.json b/packages/lume-column-timeline/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-timeline/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-trending-notes/package.json b/packages/lume-column-trending-notes/package.json deleted file mode 100644 index 1d1da949..00000000 --- a/packages/lume-column-trending-notes/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/trending-notes", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-trending-notes/src/home.tsx b/packages/lume-column-trending-notes/src/home.tsx deleted file mode 100644 index 0b0f59c7..00000000 --- a/packages/lume-column-trending-notes/src/home.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { TextNote, useArk } from "@lume/ark"; -import { LoaderIcon } from "@lume/icons"; -import { type NDKEvent, type NostrEvent } from "@nostr-dev-kit/ndk"; -import { useQuery } from "@tanstack/react-query"; -import { fetch } from "@tauri-apps/plugin-http"; -import { useEffect, useMemo, useRef } from "react"; -import { CacheSnapshot, VList, VListHandle } from "virtua"; - -export function HomeRoute({ colKey }: { colKey: string }) { - const ark = useArk(); - const ref = useRef(); - const cacheKey = `${colKey}-vlist`; - - const [offset, cache] = useMemo(() => { - const serialized = sessionStorage.getItem(cacheKey); - if (!serialized) return []; - return JSON.parse(serialized) as [number, CacheSnapshot]; - }, []); - - const { data, isLoading } = useQuery({ - queryKey: [colKey], - queryFn: async ({ signal }: { signal: AbortSignal }) => { - const res = await fetch("https://api.nostr.band/v0/trending/notes", { - signal, - }); - - if (!res) throw new Error("Failed to fetch trending notes"); - - const data = await res.json(); - const events = data.notes.map((item: { event: NostrEvent }) => - ark.getNDKEvent(item.event), - ); - - return events as NDKEvent[]; - }, - refetchOnMount: false, - refetchOnWindowFocus: false, - }); - - useEffect(() => { - if (!ref.current) return; - const handle = ref.current; - - if (offset) { - handle.scrollTo(offset); - } - - return () => { - sessionStorage.setItem( - cacheKey, - JSON.stringify([handle.scrollOffset, handle.cache]), - ); - }; - }, []); - - return ( -
- - {isLoading ? ( -
- -
- ) : ( - data.map((item) => ( - - )) - )} -
-
- ); -} diff --git a/packages/lume-column-trending-notes/src/index.tsx b/packages/lume-column-trending-notes/src/index.tsx deleted file mode 100644 index 78c699f1..00000000 --- a/packages/lume-column-trending-notes/src/index.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { EventRoute, UserRoute } from "@lume/ui"; -import { HomeRoute } from "./home"; - -export function TrendingNotes({ column }: { column: LumeColumn }) { - const colKey = `trending-notes-${column.id}`; - - return ( - - - - } /> - } /> - } /> - - - ); -} diff --git a/packages/lume-column-trending-notes/tailwind.config.js b/packages/lume-column-trending-notes/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-trending-notes/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-trending-notes/tsconfig.json b/packages/lume-column-trending-notes/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-trending-notes/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-user/package.json b/packages/lume-column-user/package.json deleted file mode 100644 index 9374fb78..00000000 --- a/packages/lume-column-user/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@columns/user", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0", - "sonner": "^1.4.3", - "virtua": "^0.27.5" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-user/src/home.tsx b/packages/lume-column-user/src/home.tsx deleted file mode 100644 index 932d5a1e..00000000 --- a/packages/lume-column-user/src/home.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { RepostNote, TextNote, User, useArk } from "@lume/ark"; -import { ArrowRightCircleIcon, LoaderIcon } from "@lume/icons"; -import { FETCH_LIMIT } from "@lume/utils"; -import { NDKEvent, NDKKind } from "@nostr-dev-kit/ndk"; -import { useInfiniteQuery } from "@tanstack/react-query"; -import { useMemo } from "react"; -import { WindowVirtualizer } from "virtua"; - -export function HomeRoute({ id }: { id: string }) { - const ark = useArk(); - const { data, hasNextPage, isLoading, isFetchingNextPage, fetchNextPage } = - useInfiniteQuery({ - queryKey: ["user-posts", id], - initialPageParam: 0, - queryFn: async ({ - signal, - pageParam, - }: { - signal: AbortSignal; - pageParam: number; - }) => { - const events = await ark.getInfiniteEvents({ - filter: { - kinds: [NDKKind.Text, NDKKind.Repost], - authors: [id], - }, - limit: FETCH_LIMIT, - pageParam, - signal, - }); - - return events; - }, - getNextPageParam: (lastPage) => { - const lastEvent = lastPage.at(-1); - if (!lastEvent) return; - return lastEvent.created_at - 1; - }, - refetchOnWindowFocus: false, - }); - - const allEvents = useMemo( - () => (data ? data.pages.flatMap((page) => page) : []), - [data], - ); - - const renderItem = (event: NDKEvent) => { - switch (event.kind) { - case NDKKind.Text: - return ; - case NDKKind.Repost: - return ; - default: - return ; - } - }; - - return ( -
- -
- - -
- - -
-
-
- - -
- -
-
-
-
-

- Latest posts -

-
- {isLoading ? ( -
- -
- ) : ( - allEvents.map((item) => renderItem(item)) - )} -
- {hasNextPage ? ( - - ) : null} -
-
-
-
-
-
- ); -} diff --git a/packages/lume-column-user/src/index.tsx b/packages/lume-column-user/src/index.tsx deleted file mode 100644 index b148d314..00000000 --- a/packages/lume-column-user/src/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { EventRoute, UserRoute } from "@lume/ui"; -import { HomeRoute } from "./home"; - -export function User({ column }: { column: LumeColumn }) { - return ( - - - - } /> - } /> - } /> - - - ); -} diff --git a/packages/lume-column-user/tailwind.config.js b/packages/lume-column-user/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-user/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-user/tsconfig.json b/packages/lume-column-user/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-user/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/lume-column-waifu/package.json b/packages/lume-column-waifu/package.json deleted file mode 100644 index 21d477ba..00000000 --- a/packages/lume-column-waifu/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "@columns/waifu", - "version": "0.0.0", - "private": true, - "main": "./src/index.tsx", - "dependencies": { - "@lume/ark": "workspace:^", - "@lume/icons": "workspace:^", - "@lume/ui": "workspace:^", - "@lume/utils": "workspace:^", - "@tanstack/react-query": "^5.28.4", - "react": "^18.2.0" - }, - "devDependencies": { - "@lume/tailwindcss": "workspace:^", - "@lume/tsconfig": "workspace:^", - "@lume/types": "workspace:^", - "@types/react": "^18.2.66", - "tailwindcss": "^3.4.1", - "typescript": "^5.4.2" - } -} diff --git a/packages/lume-column-waifu/src/home.tsx b/packages/lume-column-waifu/src/home.tsx deleted file mode 100644 index 794dc20e..00000000 --- a/packages/lume-column-waifu/src/home.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { LoaderIcon, RefreshIcon } from "@lume/icons"; -import { cn } from "@lume/utils"; -import { useQuery } from "@tanstack/react-query"; - -export function HomeRoute({ colKey }: { colKey: string }) { - const { data, isLoading, isError, isRefetching, refetch } = useQuery({ - queryKey: [colKey], - queryFn: async ({ signal }: { signal: AbortSignal }) => { - const apiUrl = "https://api.waifu.im/search"; - const params = { - included_tags: "waifu", - height: ">=2000", - }; - - const queryParams = new URLSearchParams(params); - const requestUrl = `${apiUrl}?${queryParams}`; - - const res = await fetch(requestUrl, { signal }); - - if (!res.ok) throw new Error("Failed to get image url"); - - const data = await res.json(); - return data.images[0]; - }, - refetchOnMount: false, - refetchOnWindowFocus: false, - }); - - return ( -
- {isLoading ? ( - - ) : isError ? ( -

- Failed to get image, please try again later. -

- ) : ( -
- {data.signature} -
- - - Source - -
-
- )} -
- ); -} diff --git a/packages/lume-column-waifu/src/index.tsx b/packages/lume-column-waifu/src/index.tsx deleted file mode 100644 index 38b59c2a..00000000 --- a/packages/lume-column-waifu/src/index.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { Column } from "@lume/ark"; -import { LumeColumn } from "@lume/types"; -import { HomeRoute } from "./home"; - -export function Waifu({ column }: { column: LumeColumn }) { - const colKey = `waifu-${column.id}`; - - return ( - - - - } /> - - - ); -} diff --git a/packages/lume-column-waifu/tailwind.config.js b/packages/lume-column-waifu/tailwind.config.js deleted file mode 100644 index 49c48c7a..00000000 --- a/packages/lume-column-waifu/tailwind.config.js +++ /dev/null @@ -1,8 +0,0 @@ -import sharedConfig from "@lume/tailwindcss"; - -const config = { - content: ["./src/**/*.{js,ts,jsx,tsx}"], - presets: [sharedConfig], -}; - -export default config; diff --git a/packages/lume-column-waifu/tsconfig.json b/packages/lume-column-waifu/tsconfig.json deleted file mode 100644 index 34a32891..00000000 --- a/packages/lume-column-waifu/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "@lume/tsconfig/base.json", - "compilerOptions": { - "outDir": "dist" - }, - "include": ["src"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts index cb50cf1d..cb9d91d4 100644 --- a/packages/types/index.d.ts +++ b/packages/types/index.d.ts @@ -1,5 +1,3 @@ -import { type Webview } from "@tauri-apps/api/webview"; - export interface Settings { autoupdate: boolean; nsecbunker: boolean; @@ -88,11 +86,6 @@ export interface LumeColumn { description?: string; author?: string; logo?: string; - x?: number; - y?: number; - width?: number; - height?: number; - window?: Webview; } export interface Opengraph { diff --git a/packages/ui/package.json b/packages/ui/package.json index 6e04249c..ecea47ce 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -22,7 +22,7 @@ "@tanstack/react-router": "^1.20.0", "framer-motion": "^11.0.14", "get-urls": "^12.1.0", - "media-chrome": "^2.2.5", + "media-chrome": "^3.0.2", "minidenticons": "^4.2.1", "nanoid": "^5.0.6", "qrcode.react": "^3.1.0", @@ -34,13 +34,13 @@ "react-hotkeys-hook": "^4.5.0", "react-i18next": "^14.1.0", "react-string-replace": "^1.1.1", - "slate": "^0.101.5", - "slate-react": "^0.101.6", + "slate": "^0.102.0", + "slate-react": "^0.102.0", "sonner": "^1.4.3", "string-strip-html": "^13.4.6", "uqr": "^0.1.2", "use-debounce": "^10.0.0", - "virtua": "^0.27.5" + "virtua": "^0.29.0" }, "devDependencies": { "@lume/tailwindcss": "workspace:^", diff --git a/packages/ui/src/column.tsx b/packages/ui/src/column.tsx index 234e9a1b..13dc993d 100644 --- a/packages/ui/src/column.tsx +++ b/packages/ui/src/column.tsx @@ -7,6 +7,7 @@ import { import { Webview } from "@tauri-apps/api/webview"; import { LumeColumn } from "@lume/types"; import { useDebouncedCallback } from "use-debounce"; +import { type UnlistenFn } from "@tauri-apps/api/event"; export function Column({ column, @@ -19,6 +20,7 @@ export function Column({ const childWindow = useRef(null); const divRef = useRef(null); const initialRect = useRef(null); + const unlisten = useRef(null); const handleResize = useDebouncedCallback(() => { const newRect = divRef.current.getBoundingClientRect(); if (initialRect.current.height !== newRect.height) { @@ -26,16 +28,12 @@ export function Column({ new LogicalSize(newRect.width, newRect.height), ); } - }, 800); + }, 500); const trackResize = useCallback(async () => { - const unlisten = await mainWindow.onResized(() => { + unlisten.current = await mainWindow.onResized(() => { handleResize(); }); - - return () => { - if (unlisten) unlisten(); - }; }, []); useEffect(() => { @@ -52,27 +50,27 @@ export function Column({ if (!divRef.current) return; if (childWindow.current) return; - // get element dimension const rect = divRef.current.getBoundingClientRect(); + const name = column.name.toLowerCase().replace(/\W/g, ""); // create new webview initialRect.current = rect; - childWindow.current = new Webview( - mainWindow, - column.name.toLowerCase().replace(/\W/g, ""), - { - url: column.content, - x: rect.x, - y: rect.y, - width: rect.width, - height: rect.height, - transparent: true, - userAgent: "Lume/4.0", - }, - ); + childWindow.current = new Webview(mainWindow, name, { + url: column.content, + x: rect.x, + y: rect.y, + width: rect.width, + height: rect.height, + transparent: true, + userAgent: "Lume/4.0", + }); // track window resize event trackResize(); + + return () => { + if (unlisten.current) unlisten.current(); + }; }, []); return ( diff --git a/packages/utils/package.json b/packages/utils/package.json index 28b3c084..b2fdb66b 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -15,8 +15,8 @@ "nostr-tools": "^2.3.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "slate": "^0.101.5", - "slate-react": "^0.101.6" + "slate": "^0.102.0", + "slate-react": "^0.102.0" }, "devDependencies": { "@lume/tsconfig": "workspace:^", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 50410b58..72bc634a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -121,17 +121,17 @@ importers: specifier: ^14.1.0 version: 14.1.0(i18next@23.10.1)(react-dom@18.2.0)(react@18.2.0) slate: - specifier: ^0.101.5 - version: 0.101.5 + specifier: ^0.102.0 + version: 0.102.0 slate-react: - specifier: ^0.101.6 - version: 0.101.6(react-dom@18.2.0)(react@18.2.0)(slate@0.101.5) + specifier: ^0.102.0 + version: 0.102.0(react-dom@18.2.0)(react@18.2.0)(slate@0.102.0) sonner: specifier: ^1.4.3 version: 1.4.3(react-dom@18.2.0)(react@18.2.0) virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) + specifier: ^0.29.0 + version: 0.29.0(react-dom@18.2.0)(react@18.2.0) devDependencies: '@lume/tailwindcss': specifier: workspace:^ @@ -182,8 +182,8 @@ importers: apps/web: dependencies: '@astrojs/check': - specifier: ^0.4.1 - version: 0.4.1(typescript@5.4.2) + specifier: ^0.5.9 + version: 0.5.9(typescript@5.4.2) '@astrojs/tailwind': specifier: ^5.1.0 version: 5.1.0(astro@4.5.5)(tailwindcss@3.4.1) @@ -255,8 +255,8 @@ importers: specifier: ^12.1.0 version: 12.1.0 media-chrome: - specifier: ^2.2.5 - version: 2.2.5 + specifier: ^3.0.2 + version: 3.0.2 minidenticons: specifier: ^4.2.1 version: 4.2.1 @@ -288,8 +288,8 @@ importers: specifier: ^13.4.6 version: 13.4.6 virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) + specifier: ^0.29.0 + version: 0.29.0(react-dom@18.2.0)(react@18.2.0) devDependencies: '@lume/tailwindcss': specifier: workspace:^ @@ -326,506 +326,6 @@ importers: specifier: ^5.4.2 version: 5.4.2 - packages/lume-column-antenas: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-default: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-foryou: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-global: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-group: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-hashtag: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-thread: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-timeline: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-trending-notes: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-user: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - sonner: - specifier: ^1.4.3 - version: 1.4.3(react-dom@18.2.0)(react@18.2.0) - virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - - packages/lume-column-waifu: - dependencies: - '@lume/ark': - specifier: workspace:^ - version: link:../ark - '@lume/icons': - specifier: workspace:^ - version: link:../icons - '@lume/ui': - specifier: workspace:^ - version: link:../ui - '@lume/utils': - specifier: workspace:^ - version: link:../utils - '@tanstack/react-query': - specifier: ^5.28.4 - version: 5.28.4(react@18.2.0) - react: - specifier: ^18.2.0 - version: 18.2.0 - devDependencies: - '@lume/tailwindcss': - specifier: workspace:^ - version: link:../tailwindcss - '@lume/tsconfig': - specifier: workspace:^ - version: link:../tsconfig - '@lume/types': - specifier: workspace:^ - version: link:../types - '@types/react': - specifier: ^18.2.66 - version: 18.2.66 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.1 - typescript: - specifier: ^5.4.2 - version: 5.4.2 - packages/tailwindcss: devDependencies: '@evilmartians/harmony': @@ -909,8 +409,8 @@ importers: specifier: ^12.1.0 version: 12.1.0 media-chrome: - specifier: ^2.2.5 - version: 2.2.5 + specifier: ^3.0.2 + version: 3.0.2 minidenticons: specifier: ^4.2.1 version: 4.2.1 @@ -945,11 +445,11 @@ importers: specifier: ^1.1.1 version: 1.1.1 slate: - specifier: ^0.101.5 - version: 0.101.5 + specifier: ^0.102.0 + version: 0.102.0 slate-react: - specifier: ^0.101.6 - version: 0.101.6(react-dom@18.2.0)(react@18.2.0)(slate@0.101.5) + specifier: ^0.102.0 + version: 0.102.0(react-dom@18.2.0)(react@18.2.0)(slate@0.102.0) sonner: specifier: ^1.4.3 version: 1.4.3(react-dom@18.2.0)(react@18.2.0) @@ -963,8 +463,8 @@ importers: specifier: ^10.0.0 version: 10.0.0(react@18.2.0) virtua: - specifier: ^0.27.5 - version: 0.27.5(react-dom@18.2.0)(react@18.2.0) + specifier: ^0.29.0 + version: 0.29.0(react-dom@18.2.0)(react@18.2.0) devDependencies: '@lume/tailwindcss': specifier: workspace:^ @@ -1009,11 +509,11 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) slate: - specifier: ^0.101.5 - version: 0.101.5 + specifier: ^0.102.0 + version: 0.102.0 slate-react: - specifier: ^0.101.6 - version: 0.101.6(react-dom@18.2.0)(react@18.2.0)(slate@0.101.5) + specifier: ^0.102.0 + version: 0.102.0(react-dom@18.2.0)(react@18.2.0)(slate@0.102.0) devDependencies: '@lume/tsconfig': specifier: workspace:^ @@ -1048,8 +548,8 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: false - /@astrojs/check@0.4.1(typescript@5.4.2): - resolution: {integrity: sha512-XEsuU4TlWkgcsvdeessq5mXLXV1fejtxIioCPv/FfhTzb1bDYe2BtLiSBK+rFTyD9Hl686YOas9AGNMJcpoRsw==} + /@astrojs/check@0.5.9(typescript@5.4.2): + resolution: {integrity: sha512-+QsQMtYq4oso+gmilJC9HLmdi0glZ+04V/VyyTTPry7n21jqjX9SfgDpLGxMk5cwPC/vwZMkn6ORGPnkZS/L5w==} hasBin: true peerDependencies: typescript: ^5.0.0 @@ -5058,8 +4558,8 @@ packages: '@types/mdast': 4.0.3 dev: false - /media-chrome@2.2.5: - resolution: {integrity: sha512-59peAYFlL9ZlFVkKJmIgIDNMkQr4nauYTwIQhLg3khmGfO6/25VNEI8Yn0aUMLb5IFB2gzjcPmfu1ktfOhQ8Ag==} + /media-chrome@3.0.2: + resolution: {integrity: sha512-PdTKNmQ3JDTfd6MQl53qKANx5iSgu3PMNVWDHd2yzjlnvdJwUUuVr1z0vdutig2vYP0DGhC/QRzotfb6m0FfCw==} dev: false /merge-stream@2.0.0: @@ -6331,8 +5831,8 @@ packages: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: false - /slate-react@0.101.6(react-dom@18.2.0)(react@18.2.0)(slate@0.101.5): - resolution: {integrity: sha512-aMtp9FY127hKWTkCcTBonfKIwKJC2ESPqFdw2o/RuOk3RMQRwsWay8XTOHx8OBGOHanI2fsKaTAPF5zxOLA1Qg==} + /slate-react@0.102.0(react-dom@18.2.0)(react@18.2.0)(slate@0.102.0): + resolution: {integrity: sha512-SAcFsK5qaOxXjm0hr/t2pvIxfRv6HJGzmWkG58TdH4LdJCsgKS1n6hQOakHPlRVCwPgwvngB6R+t3pPjv8MqwA==} peerDependencies: react: '>=18.2.0' react-dom: '>=18.2.0' @@ -6348,12 +5848,12 @@ packages: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) scroll-into-view-if-needed: 3.1.0 - slate: 0.101.5 + slate: 0.102.0 tiny-invariant: 1.3.1 dev: false - /slate@0.101.5: - resolution: {integrity: sha512-ZZt1ia8ayRqxtpILRMi2a4MfdvwdTu64CorxTVq9vNSd0GQ/t3YDkze6wKjdeUtENmBlq5wNIDInZbx38Hfu5Q==} + /slate@0.102.0: + resolution: {integrity: sha512-RT+tHgqOyZVB1oFV9Pv99ajwh4OUCN9p28QWdnDTIzaN/kZxMsHeQN39UNAgtkZTVVVygFqeg7/R2jiptCvfyA==} dependencies: immer: 10.0.4 is-plain-object: 5.0.0 @@ -7065,8 +6565,8 @@ packages: vfile-message: 4.0.2 dev: false - /virtua@0.27.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-VeiK2eMCHDmNJvP1GO+DB8rX5ACAxrzFRMGIcqoZK+eqnS25C6lSnuZO4XXLK+RmFkPAoHApMZZTf5ngrpcSMw==} + /virtua@0.29.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-V7gxQDUGgxe32cLyYhZ+hOxtZLuqKV9icqomE8qAN5HILf1TMuisCEZJVbr+k7GI7K+oOkYdKFiBX23cdXSXmg==} peerDependencies: react: '>=16.14.0' react-dom: '>=16.14.0'