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 Feeds
-
- Collective of people you're interested in.
-
-
-
-
-
-
-
-

-
-
-
-
Antenas
-
- Keep track to specific content.
-
-
-
-
-
-
-
-

-
-
-
-
Trending Notes
-
- What is trending on Nostr?.
-
-
-
-
-
-
-
-

-
-
-
-
Global
-
- All things around the world.
-
-
-
-
-
-
-
-

-
-
-
-
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.
-
- ) : (
-
-

-
-
-
- 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'