feat: add search window (NIP-50) (#181)

* feat: add search window
* chore: improve search ui
This commit is contained in:
雨宮蓮 2024-04-23 15:34:08 +07:00 committed by GitHub
parent c00a7749b4
commit 174a3cc74e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 507 additions and 236 deletions

View File

@ -20,9 +20,9 @@
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-switch": "^1.0.3",
"@radix-ui/react-tooltip": "^1.0.7",
"@tanstack/query-sync-storage-persister": "^5.29.0",
"@tanstack/react-query": "^5.29.2",
"@tanstack/react-query-persist-client": "^5.29.2",
"@tanstack/query-sync-storage-persister": "^5.31.0",
"@tanstack/react-query": "^5.31.0",
"@tanstack/react-query-persist-client": "^5.31.0",
"@tanstack/react-router": "^1.29.2",
"i18next": "^23.11.2",
"i18next-resources-to-backend": "^1.2.1",
@ -39,7 +39,7 @@
"slate-react": "^0.102.0",
"sonner": "^1.4.41",
"use-debounce": "^10.0.0",
"virtua": "^0.30.1"
"virtua": "^0.30.2"
},
"devDependencies": {
"@lume/tailwindcss": "workspace:^",

View File

@ -30,7 +30,6 @@ export function TextNote({
<div className="-ml-1 inline-flex items-center gap-4">
<Note.Reply />
<Note.Repost />
<Note.Pin />
{settings.zap ? <Note.Zap /> : null}
</div>
<Note.Menu />

View File

@ -1,4 +1,4 @@
import { ComposeFilledIcon, PlusIcon } from "@lume/icons";
import { ComposeFilledIcon, PlusIcon, SearchIcon } from "@lume/icons";
import { Outlet, createFileRoute, useNavigate } from "@tanstack/react-router";
import { cn } from "@lume/utils";
import { Accounts } from "@/components/accounts";
@ -34,6 +34,13 @@ function App() {
>
<PlusIcon className="size-5" />
</button>
<button
type="button"
onClick={() => ark.open_search()}
className="inline-flex size-8 items-center justify-center rounded-full bg-neutral-200 text-neutral-800 hover:bg-neutral-400 dark:bg-neutral-800 dark:text-neutral-200 dark:hover:bg-neutral-600"
>
<SearchIcon className="size-5" />
</button>
</div>
<div className="flex items-center gap-3">
<button

View File

@ -0,0 +1,148 @@
import { SearchIcon } from "@lume/icons";
import { Event, Kind } from "@lume/types";
import { Note, Spinner, User } from "@lume/ui";
import { createFileRoute } from "@tanstack/react-router";
import { useState, useEffect } from "react";
import { useDebounce } from "use-debounce";
export const Route = createFileRoute("/search")({
component: Screen,
});
function Screen() {
const { ark } = Route.useRouteContext();
const [loading, setLoading] = useState(false);
const [events, setEvents] = useState<Event[]>([]);
const [search, setSearch] = useState("");
const [value] = useDebounce(search, 500);
const searchEvents = async () => {
if (!value.length) return;
// start loading
setLoading(true);
const data = await ark.search(value, 100);
// update state
setLoading(false);
setEvents(data);
};
useEffect(() => {
searchEvents();
}, [value]);
return (
<div
data-tauri-drag-region
className="flex flex-col w-full h-full bg-gradient-to-tr from-neutral-200 to-neutral-100 dark:from-neutral-950 dark:to-neutral-900"
>
<div
data-tauri-drag-region
className="h-24 shrink-0 flex items-end border-neutral-300 border dark:border-neutral-700"
>
<input
value={search}
onChange={(e) => setSearch(e.target.value)}
onKeyDown={(e) => {
if (e.key === "Enter") searchEvents();
}}
placeholder="Search anything..."
className="w-full h-20 pt-10 px-6 text-lg bg-transparent border-none focus:outline-none focus:ring-0 placeholder:text-neutral-500 dark:placeholder:text-neutral-600"
/>
</div>
<div className="flex-1 p-3 overflow-y-auto scrollbar-none">
{loading ? (
<div className="w-full h-full flex items-center justify-center">
<Spinner />
</div>
) : !events.length ? (
<div className="flex items-center justify-center h-full text-sm">
Empty
</div>
) : (
<div className="flex flex-col gap-5">
<div className="flex flex-col gap-1.5">
<div className="text-sm font-medium text-neutral-700 dark:text-neutral-300 shrink-0">
Users
</div>
<div className="flex-1 flex flex-col gap-3">
{events
.filter((ev) => ev.kind === Kind["Metadata"])
.map((event) => (
<SearchUser event={event} />
))}
</div>
</div>
<div className="flex flex-col gap-1.5">
<div className="text-sm font-medium text-neutral-700 dark:text-neutral-300 shrink-0">
Notes
</div>
<div className="flex-1 flex flex-col gap-3">
{events
.filter((ev) => ev.kind === Kind["Text"])
.map((event) => (
<SearchNote event={event} />
))}
</div>
</div>
</div>
)}
{!loading && !events.length ? (
<div className="h-full flex items-center justify-center flex-col gap-3">
<div className="size-16 bg-blue-100 dark:bg-blue-900 rounded-full inline-flex items-center justify-center text-blue-500">
<SearchIcon className="size-6" />
</div>
Try searching for people, notes, or keywords
</div>
) : null}
</div>
</div>
);
}
function SearchUser({ event }: { event: Event }) {
const { ark } = Route.useRouteContext();
return (
<button
key={event.id}
type="button"
onClick={() => ark.open_profile(event.pubkey)}
className="p-3 hover:bg-black/10 dark:hover:bg-white/10 rounded-lg"
>
<User.Provider pubkey={event.pubkey} embedProfile={event.content}>
<User.Root className="flex items-center gap-2">
<User.Avatar className="size-11 rounded-full shrink-0" />
<div>
<User.Name className="font-semibold" />
<User.NIP05 />
</div>
</User.Root>
</User.Provider>
</button>
);
}
function SearchNote({ event }: { event: Event }) {
const { ark } = Route.useRouteContext();
return (
<div
key={event.id}
onClick={() => ark.open_thread(event.id)}
className="p-3 bg-white rounded-lg dark:bg-black"
>
<Note.Provider event={event}>
<Note.Root>
<Note.User />
<div className="select-text mt-2.5 leading-normal line-clamp-5 text-balance">
{event.content}
</div>
</Note.Root>
</Note.Provider>
</div>
);
}

View File

@ -11,7 +11,7 @@
"tauri": "tauri"
},
"devDependencies": {
"@biomejs/biome": "^1.7.0",
"@biomejs/biome": "^1.7.1",
"@tauri-apps/cli": "2.0.0-beta.12",
"turbo": "^1.13.2"
},

View File

@ -14,7 +14,7 @@
"@radix-ui/react-hover-card": "^1.0.7",
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-tooltip": "^1.0.7",
"@tanstack/react-query": "^5.29.2",
"@tanstack/react-query": "^5.31.0",
"@tanstack/react-router": "^1.29.2",
"get-urls": "^12.1.0",
"media-chrome": "^3.2.1",
@ -28,7 +28,7 @@
"react-string-replace": "^1.1.1",
"sonner": "^1.4.41",
"string-strip-html": "^13.4.8",
"virtua": "^0.30.1"
"virtua": "^0.30.2"
},
"devDependencies": {
"@lume/tailwindcss": "workspace:^",

View File

@ -139,6 +139,22 @@ export class Ark {
}
}
public async search(content: string, limit: number) {
try {
if (content.length < 1) return [];
const events: Event[] = await invoke("search", {
content: content.trim(),
limit,
});
return events;
} catch (e) {
console.info(String(e));
return [];
}
}
public async get_events(
limit: number,
asOf?: number,
@ -722,7 +738,6 @@ export class Ark {
minHeight: 800,
width: 500,
height: 800,
hiddenTitle: true,
titleBarStyle: "overlay",
center: false,
});
@ -742,7 +757,6 @@ export class Ark {
minHeight: 800,
width: 500,
height: 800,
hiddenTitle: true,
titleBarStyle: "overlay",
});
@ -807,7 +821,6 @@ export class Ark {
minHeight: 500,
width: 400,
height: 500,
hiddenTitle: true,
titleBarStyle: "overlay",
});
@ -826,7 +839,24 @@ export class Ark {
minHeight: 500,
width: 800,
height: 500,
hiddenTitle: true,
titleBarStyle: "overlay",
});
this.windows.push(window);
} catch (e) {
throw new Error(String(e));
}
}
public open_search() {
try {
const window = new WebviewWindow("search", {
title: "Search",
url: "/search",
width: 750,
height: 470,
minimizable: false,
resizable: false,
titleBarStyle: "overlay",
});

View File

@ -2,7 +2,7 @@ import { useQuery } from "@tanstack/react-query";
import { Metadata } from "@lume/types";
import { invoke } from "@tauri-apps/api/core";
export function useProfile(pubkey: string) {
export function useProfile(pubkey: string, embed?: string) {
const {
isLoading,
isError,
@ -11,8 +11,14 @@ export function useProfile(pubkey: string) {
queryKey: ["user", pubkey],
queryFn: async () => {
try {
if (embed) {
const profile: Metadata = JSON.parse(embed);
return profile;
}
const id = pubkey.replace("nostr:", "").replace(/[^\w\s]/gi, "");
const cmd: Metadata = await invoke("get_profile", { id });
return cmd;
} catch (e) {
throw new Error(e);

View File

@ -1,18 +1,13 @@
export function SearchIcon(props: JSX.IntrinsicElements['svg']) {
export function SearchIcon(props: JSX.IntrinsicElements["svg"]) {
return (
<svg
{...props}
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="24"
height="24"
fill="none"
<svg width="24" height="24" fill="none" viewBox="0 0 24 24" {...props}>
<path
stroke="currentColor"
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="2"
>
<path d="m21 21-3.49-3.49m0 0A8.5 8.5 0 1 0 5.49 5.49a8.5 8.5 0 0 0 12.02 12.02Z" />
strokeWidth="1.5"
d="m20 20-3.873-3.873m0 0A7.25 7.25 0 1 0 5.873 5.873a7.25 7.25 0 0 0 10.253 10.253Z"
/>
</svg>
);
}

View File

@ -18,7 +18,7 @@
"@radix-ui/react-hover-card": "^1.0.7",
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-tooltip": "^1.0.7",
"@tanstack/react-query": "^5.29.2",
"@tanstack/react-query": "^5.31.0",
"@tanstack/react-router": "^1.29.2",
"framer-motion": "^11.1.7",
"get-urls": "^12.1.0",
@ -40,7 +40,7 @@
"string-strip-html": "^13.4.8",
"uqr": "^0.1.2",
"use-debounce": "^10.0.0",
"virtua": "^0.30.1"
"virtua": "^0.30.2"
},
"devDependencies": {
"@lume/tailwindcss": "workspace:^",

View File

@ -12,11 +12,13 @@ const UserContext = createContext<{
export function UserProvider({
pubkey,
children,
embedProfile,
}: {
pubkey: string;
children: ReactNode;
embedProfile?: string;
}) {
const { isLoading, isError, profile } = useProfile(pubkey);
const { isLoading, isError, profile } = useProfile(pubkey, embedProfile);
return (
<UserContext.Provider value={{ pubkey, isError, isLoading, profile }}>

View File

@ -8,7 +8,7 @@
"access": "public"
},
"dependencies": {
"@tanstack/react-query": "^5.29.2",
"@tanstack/react-query": "^5.31.0",
"bitcoin-units": "^1.0.0",
"clsx": "^2.1.0",
"dayjs": "^1.11.10",

View File

@ -46,8 +46,8 @@ importers:
version: 2.0.0-beta.3
devDependencies:
'@biomejs/biome':
specifier: ^1.7.0
version: 1.7.0
specifier: ^1.7.1
version: 1.7.1
'@tauri-apps/cli':
specifier: 2.0.0-beta.12
version: 2.0.0-beta.12
@ -91,14 +91,14 @@ importers:
specifier: ^1.0.7
version: 1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)
'@tanstack/query-sync-storage-persister':
specifier: ^5.29.0
version: 5.29.0
specifier: ^5.31.0
version: 5.31.0
'@tanstack/react-query':
specifier: ^5.29.2
version: 5.29.2(react@18.2.0)
specifier: ^5.31.0
version: 5.31.0(react@18.2.0)
'@tanstack/react-query-persist-client':
specifier: ^5.29.2
version: 5.29.2(@tanstack/react-query@5.29.2)(react@18.2.0)
specifier: ^5.31.0
version: 5.31.0(@tanstack/react-query@5.31.0)(react@18.2.0)
'@tanstack/react-router':
specifier: ^1.29.2
version: 1.29.2(react-dom@18.2.0)(react@18.2.0)
@ -148,8 +148,8 @@ importers:
specifier: ^10.0.0
version: 10.0.0(react@18.2.0)
virtua:
specifier: ^0.30.1
version: 0.30.1(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.30.2
version: 0.30.2(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@lume/tailwindcss':
specifier: workspace:^
@ -264,8 +264,8 @@ importers:
specifier: ^1.0.7
version: 1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)
'@tanstack/react-query':
specifier: ^5.29.2
version: 5.29.2(react@18.2.0)
specifier: ^5.31.0
version: 5.31.0(react@18.2.0)
'@tanstack/react-router':
specifier: ^1.29.2
version: 1.29.2(react-dom@18.2.0)(react@18.2.0)
@ -306,8 +306,8 @@ importers:
specifier: ^13.4.8
version: 13.4.8
virtua:
specifier: ^0.30.1
version: 0.30.1(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.30.2
version: 0.30.2(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@lume/tailwindcss':
specifier: workspace:^
@ -415,8 +415,8 @@ importers:
specifier: ^1.0.7
version: 1.0.7(@types/react-dom@18.2.25)(@types/react@18.2.79)(react-dom@18.2.0)(react@18.2.0)
'@tanstack/react-query':
specifier: ^5.29.2
version: 5.29.2(react@18.2.0)
specifier: ^5.31.0
version: 5.31.0(react@18.2.0)
'@tanstack/react-router':
specifier: ^1.29.2
version: 1.29.2(react-dom@18.2.0)(react@18.2.0)
@ -481,8 +481,8 @@ importers:
specifier: ^10.0.0
version: 10.0.0(react@18.2.0)
virtua:
specifier: ^0.30.1
version: 0.30.1(react-dom@18.2.0)(react@18.2.0)
specifier: ^0.30.2
version: 0.30.2(react-dom@18.2.0)(react@18.2.0)
devDependencies:
'@lume/tailwindcss':
specifier: workspace:^
@ -506,8 +506,8 @@ importers:
packages/utils:
dependencies:
'@tanstack/react-query':
specifier: ^5.29.2
version: 5.29.2(react@18.2.0)
specifier: ^5.31.0
version: 5.31.0(react@18.2.0)
bitcoin-units:
specifier: ^1.0.0
version: 1.0.0
@ -987,24 +987,24 @@ packages:
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
/@biomejs/biome@1.7.0:
resolution: {integrity: sha512-mejiRhnAq6UrXtYvjWJUKdstcT58n0/FfKemFf3d2Ou0HxOdS88HQmWtQ/UgyZvOEPD572YbFTb6IheyROpqkw==}
/@biomejs/biome@1.7.1:
resolution: {integrity: sha512-wb2UNoFXcgaMdKXKT5ytsYntaogl2FSTjDt20CZynF3v7OXQUcIpTrr+be3XoOGpoZRj3Ytq9TSpmplUREXmeA==}
engines: {node: '>=14.21.3'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@biomejs/cli-darwin-arm64': 1.7.0
'@biomejs/cli-darwin-x64': 1.7.0
'@biomejs/cli-linux-arm64': 1.7.0
'@biomejs/cli-linux-arm64-musl': 1.7.0
'@biomejs/cli-linux-x64': 1.7.0
'@biomejs/cli-linux-x64-musl': 1.7.0
'@biomejs/cli-win32-arm64': 1.7.0
'@biomejs/cli-win32-x64': 1.7.0
'@biomejs/cli-darwin-arm64': 1.7.1
'@biomejs/cli-darwin-x64': 1.7.1
'@biomejs/cli-linux-arm64': 1.7.1
'@biomejs/cli-linux-arm64-musl': 1.7.1
'@biomejs/cli-linux-x64': 1.7.1
'@biomejs/cli-linux-x64-musl': 1.7.1
'@biomejs/cli-win32-arm64': 1.7.1
'@biomejs/cli-win32-x64': 1.7.1
dev: true
/@biomejs/cli-darwin-arm64@1.7.0:
resolution: {integrity: sha512-12TaeaKHU4SAZt0fQJ2bYk1jUb4foope7LmgDE5p3c0uMxd3mFkg1k7G721T+K6UHYULcSOQDsNNM8DhYi8Irg==}
/@biomejs/cli-darwin-arm64@1.7.1:
resolution: {integrity: sha512-qfLrIIB58dkgiY/1tgG6fSCBK22PZaSIf6blweZBsG6iMij05mEuJt50ne+zPnNFNUmt8t43NC/qOXT3iFHQBA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [darwin]
@ -1012,8 +1012,8 @@ packages:
dev: true
optional: true
/@biomejs/cli-darwin-x64@1.7.0:
resolution: {integrity: sha512-6Qq1BSIB0cpp0cQNqO/+EiUV7FE3jMpF6w7+AgIBXp0oJxUWb2Ff0RDZdO9bfzkimXD58j0vGpNHMGnCcjDV2Q==}
/@biomejs/cli-darwin-x64@1.7.1:
resolution: {integrity: sha512-OGeyNsEcp5VnKbF9/TBjPCTHNEOm7oHegEve07U3KZmzqfpw2Oe3i9DVW8t6vvj1TYbrwWYCld25H34kBDY7Vg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [darwin]
@ -1021,8 +1021,8 @@ packages:
dev: true
optional: true
/@biomejs/cli-linux-arm64-musl@1.7.0:
resolution: {integrity: sha512-pwIY80nU7SAxrVVZ6HD9ah1pruwh9ZqlSR0Nvbg4ZJqQa0POhiB+RJx7+/1Ml2mTZdrl8kb/YiwQpD16uwb5wg==}
/@biomejs/cli-linux-arm64-musl@1.7.1:
resolution: {integrity: sha512-giH0/CzLOJ+wbxLxd5Shnr5xQf5fGnTRWLDe3lzjaF7IplVydNCEeZJtncB01SvyA6DAFJsvQ4LNxzAOQfEVCg==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
@ -1030,8 +1030,8 @@ packages:
dev: true
optional: true
/@biomejs/cli-linux-arm64@1.7.0:
resolution: {integrity: sha512-GwSci7xBJ2j1CrdDXDUVXnUtrvypEz/xmiYPpFeVdlX5p95eXx+7FekPPbJfhGGw5WKSsKZ+V8AAlbN+kUwJWw==}
/@biomejs/cli-linux-arm64@1.7.1:
resolution: {integrity: sha512-MQDf5wErj1iBvlcxCyOa0XqZYN8WJrupVgbNnqhntO3yVATg8GxduVUn1fDSaolznkDRsj7Pz3Xu1esBFwvfmg==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
@ -1039,8 +1039,8 @@ packages:
dev: true
optional: true
/@biomejs/cli-linux-x64-musl@1.7.0:
resolution: {integrity: sha512-KzCA0mW4LSbCd7XZWaEJvTOTTBjfJoVEXkfq1fsXxww1HB+ww5PGMbhbIcbYCsj2CTJUifeD5hOkyuBVppU1xQ==}
/@biomejs/cli-linux-x64-musl@1.7.1:
resolution: {integrity: sha512-ySNDtPhsLxU125IFHHAxfpoHBpkM56s4mEXeO70GZtgZay/o1h8IUPWCWf5Z7gKgc4jwgYN1U1U9xabI3hZVAg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
@ -1048,8 +1048,8 @@ packages:
dev: true
optional: true
/@biomejs/cli-linux-x64@1.7.0:
resolution: {integrity: sha512-1y+odKQsyHcw0JCGRuqhbx7Y6jxOVSh4lGIVDdJxW1b55yD22DY1kcMEfhUte6f95OIc2uqfkwtiI6xQAiZJdw==}
/@biomejs/cli-linux-x64@1.7.1:
resolution: {integrity: sha512-3wmCsGcC3KZ4pfTknXHfyMMlXPMhgfXVAcG5GlrR+Tq2JGiAw0EUydaLpsSBEbcG7IxH6OiUZEJZ95kAycCHBA==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
@ -1057,8 +1057,8 @@ packages:
dev: true
optional: true
/@biomejs/cli-win32-arm64@1.7.0:
resolution: {integrity: sha512-AvLDUYZBpOUFgS/mni4VruIoVV3uSGbKSkZQBPXsHgL0w4KttLll3NBrVanmWxOHsom6C6ocHLyfAY8HUc8TXg==}
/@biomejs/cli-win32-arm64@1.7.1:
resolution: {integrity: sha512-8hIDakEqZn0i6+388noYKdZ0ZrovTwnvMU/Qp/oJou0G7EPVdXupOe0oxiQSdRN0W7f6CS/yjPCYuVGzDG6r0g==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [win32]
@ -1066,8 +1066,8 @@ packages:
dev: true
optional: true
/@biomejs/cli-win32-x64@1.7.0:
resolution: {integrity: sha512-Pylm00BAAuLVb40IH9PC17432BTsY8K4pSUvhvgR1eaalnMaD6ug9SYJTTzKDbT6r24MPAGCTiSZERyhGkGzFQ==}
/@biomejs/cli-win32-x64@1.7.1:
resolution: {integrity: sha512-3W9k3uH6Ea6VOpAS9xkkAlS0LTfnGQjmIUCegZ8SDtK2NgJ1gO+qdEkGJb0ltahusFTN1QxJ107dM7ASA9IUEg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [win32]
@ -2457,113 +2457,113 @@ packages:
optional: true
dev: true
/@rollup/rollup-android-arm-eabi@4.16.1:
resolution: {integrity: sha512-92/y0TqNLRYOTXpm6Z7mnpvKAG9P7qmK7yJeRJSdzElNCUnsgbpAsGqerUboYRIQKzgfq4pWu9xVkgpWLfmNsw==}
/@rollup/rollup-android-arm-eabi@4.16.2:
resolution: {integrity: sha512-VGodkwtEuZ+ENPz/CpDSl091koMv8ao5jHVMbG1vNK+sbx/48/wVzP84M5xSfDAC69mAKKoEkSo+ym9bXYRK9w==}
cpu: [arm]
os: [android]
requiresBuild: true
optional: true
/@rollup/rollup-android-arm64@4.16.1:
resolution: {integrity: sha512-ttWB6ZCfRLuDIUiE0yiu5gcqOsYjA5F7kEV1ggHMj20FwLZ8A1FMeahZJFl/pnOmcnD2QL0z4AcDuo27utGU8A==}
/@rollup/rollup-android-arm64@4.16.2:
resolution: {integrity: sha512-5/W1xyIdc7jw6c/f1KEtg1vYDBWnWCsLiipK41NiaWGLG93eH2edgE6EgQJ3AGiPERhiOLUqlDSfjRK08C9xFg==}
cpu: [arm64]
os: [android]
requiresBuild: true
optional: true
/@rollup/rollup-darwin-arm64@4.16.1:
resolution: {integrity: sha512-QLDvPLetbqjHojTGFw9+nuSP3YY/iz2k1cep6crYlr97sS+ZJ0W43b8Z0zC00+lnFZj6JSNxiA4DjboNQMuh1A==}
/@rollup/rollup-darwin-arm64@4.16.2:
resolution: {integrity: sha512-vOAKMqZSTbPfyPVu1jBiy+YniIQd3MG7LUnqV0dA6Q5tyhdqYtxacTHP1+S/ksKl6qCtMG1qQ0grcIgk/19JEA==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
optional: true
/@rollup/rollup-darwin-x64@4.16.1:
resolution: {integrity: sha512-TAUK/D8khRrRIa1KwRzo8JNKk3tcqaeXWdtsiLgA8zmACWwlWLjPCJ4DULGHQrMkeBjp1Cd3Yuwx04lZgFx5Vg==}
/@rollup/rollup-darwin-x64@4.16.2:
resolution: {integrity: sha512-aIJVRUS3Dnj6MqocBMrcXlatKm64O3ITeQAdAxVSE9swyhNyV1dwnRgw7IGKIkDQofatd8UqMSyUxuFEa42EcA==}
cpu: [x64]
os: [darwin]
requiresBuild: true
optional: true
/@rollup/rollup-linux-arm-gnueabihf@4.16.1:
resolution: {integrity: sha512-KO+WGZjrh6zyFTD1alIFkfdtxf8B4BC+hqd3kBZHscPLvE5FR/6QKsyuCT0JlERxxYBSUKNUQ/UHyX5uwO1x2A==}
/@rollup/rollup-linux-arm-gnueabihf@4.16.2:
resolution: {integrity: sha512-/bjfUiXwy3P5vYr6/ezv//Yle2Y0ak3a+Av/BKoi76nFryjWCkki8AuVoPR7ZU/ckcvAWFo77OnFK14B9B5JsA==}
cpu: [arm]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-linux-arm-musleabihf@4.16.1:
resolution: {integrity: sha512-NqxbllzIB1WoAo4ThUXVtd21iiM5IHMTTXmXySKBLVcZvkU0HIZmatlP7hLzb5yQubcmdIeWmncd2NdsjocEiw==}
/@rollup/rollup-linux-arm-musleabihf@4.16.2:
resolution: {integrity: sha512-S24b+tJHwpq2TNRz9T+r71FjMvyBBApY8EkYxz8Cwi/rhH6h+lu/iDUxyc9PuHf9UvyeBFYkWWcrDahai/NCGw==}
cpu: [arm]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-linux-arm64-gnu@4.16.1:
resolution: {integrity: sha512-snma5NvV8y7IECQ5rq0sr0f3UUu+92NVmG/913JXJMcXo84h9ak9TA5UI9Cl2XRM9j3m37QwDBtEYnJzRkSmxA==}
/@rollup/rollup-linux-arm64-gnu@4.16.2:
resolution: {integrity: sha512-UN7VAXLyeyGbCQWiOtQN7BqmjTDw1ON2Oos4lfk0YR7yNhFEJWZiwGtvj9Ay4lsT/ueT04sh80Sg2MlWVVZ+Ug==}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-linux-arm64-musl@4.16.1:
resolution: {integrity: sha512-KOvqGprlD84ueivhCi2flvcUwDRD20mAsE3vxQNVEI2Di9tnPGAfEu6UcrSPZbM+jG2w1oSr43hrPo0RNg6GGg==}
/@rollup/rollup-linux-arm64-musl@4.16.2:
resolution: {integrity: sha512-ZBKvz3+rIhQjusKMccuJiPsStCrPOtejCHxTe+yWp3tNnuPWtyCh9QLGPKz6bFNFbwbw28E2T6zDgzJZ05F1JQ==}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-linux-powerpc64le-gnu@4.16.1:
resolution: {integrity: sha512-/gsNwtiGLqYwN4vP+EIdUC6Q6LTlpupWqokqIndvZcjn9ig/5P01WyaYCU2wvfL/2Z82jp5kX8c1mDBOvCP3zg==}
/@rollup/rollup-linux-powerpc64le-gnu@4.16.2:
resolution: {integrity: sha512-LjMMFiVBRL3wOe095vHAekL4b7nQqf4KZEpdMWd3/W+nIy5o9q/8tlVKiqMbfieDypNXLsxM9fexOxd9Qcklyg==}
cpu: [ppc64]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-linux-riscv64-gnu@4.16.1:
resolution: {integrity: sha512-uU8zuGkQfGqfD9w6VRJZI4IuG4JIfNxxJgEmLMAmPVHREKGsxFVfgHy5c6CexQF2vOfgjB33OsET3Vdn2lln9A==}
/@rollup/rollup-linux-riscv64-gnu@4.16.2:
resolution: {integrity: sha512-ohkPt0lKoCU0s4B6twro2aft+QROPdUiWwOjPNTzwTsBK5w+2+iT9kySdtOdq0gzWJAdiqsV4NFtXOwGZmIsHA==}
cpu: [riscv64]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-linux-s390x-gnu@4.16.1:
resolution: {integrity: sha512-lsjLtDgtcGFEuBP6yrXwkRN5/wKlvUZtfbKZZu0yaoNpiBL4epgnO21osAALIspVRnl4qZgyLFd8xjCYYWgwfw==}
/@rollup/rollup-linux-s390x-gnu@4.16.2:
resolution: {integrity: sha512-jm2lvLc+/gqXfndlpDw05jKvsl/HKYxUEAt1h5UXcMFVpO4vGpoWmJVUfKDtTqSaHcCNw1his1XjkgR9aort3w==}
cpu: [s390x]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-linux-x64-gnu@4.16.1:
resolution: {integrity: sha512-N2ZizKhUryqqrMfdCnjhJhZRgv61C6gK+hwVtCIKC8ts8J+go+vqENnGexwg21nHIOvLN5mBM8a7DI2vlyIOPg==}
/@rollup/rollup-linux-x64-gnu@4.16.2:
resolution: {integrity: sha512-oc5/SlITI/Vj/qL4UM+lXN7MERpiy1HEOnrE+SegXwzf7WP9bzmZd6+MDljCEZTdSY84CpvUv9Rq7bCaftn1+g==}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-linux-x64-musl@4.16.1:
resolution: {integrity: sha512-5ICeMxqg66FrOA2AbnBQ2TJVxfvZsKLxmof0ibvPLaYtbsJqnTUtJOofgWb46Gjd4uZcA4rdsp4JCxegzQPqCg==}
/@rollup/rollup-linux-x64-musl@4.16.2:
resolution: {integrity: sha512-/2VWEBG6mKbS2itm7hzPwhIPaxfZh/KLWrYg20pCRLHhNFtF+epLgcBtwy3m07bl/k86Q3PFRAf2cX+VbZbwzQ==}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
/@rollup/rollup-win32-arm64-msvc@4.16.1:
resolution: {integrity: sha512-1vIP6Ce02L+qWD7uZYRiFiuAJo3m9kARatWmFSnss0gZnVj2Id7OPUU9gm49JPGasgcR3xMqiH3fqBJ8t00yVg==}
/@rollup/rollup-win32-arm64-msvc@4.16.2:
resolution: {integrity: sha512-Wg7ANh7+hSilF0lG3e/0Oy8GtfTIfEk1327Bw8juZOMOoKmJLs3R+a4JDa/4cHJp2Gs7QfCDTepXXcyFD0ubBg==}
cpu: [arm64]
os: [win32]
requiresBuild: true
optional: true
/@rollup/rollup-win32-ia32-msvc@4.16.1:
resolution: {integrity: sha512-Y3M92DcVsT6LoP+wrKpoUWPaazaP1fzbNkp0a0ZSj5Y//+pQVfVe/tQdsYQQy7dwXR30ZfALUIc9PCh9Izir6w==}
/@rollup/rollup-win32-ia32-msvc@4.16.2:
resolution: {integrity: sha512-J/jCDKVMWp0Y2ELnTjpQFYUCUWv1Jr+LdFrJVZtdqGyjDo0PHPa7pCamjHvJel6zBFM3doFFqAr7cmXYWBAbfw==}
cpu: [ia32]
os: [win32]
requiresBuild: true
optional: true
/@rollup/rollup-win32-x64-msvc@4.16.1:
resolution: {integrity: sha512-x0fvpHMuF7fK5r8oZxSi8VYXkrVmRgubXpO/wcf15Lk3xZ4Jvvh5oG+u7Su1776A7XzVKZhD2eRc4t7H50gL3w==}
/@rollup/rollup-win32-x64-msvc@4.16.2:
resolution: {integrity: sha512-3nIf+SJMs2ZzrCh+SKNqgLVV9hS/UY0UjT1YU8XQYFGLiUfmHYJ/5trOU1XSvmHjV5gTF/K3DjrWxtyzKKcAHA==}
cpu: [x64]
os: [win32]
requiresBuild: true
@ -2746,40 +2746,40 @@ packages:
resolution: {integrity: sha512-WgTFJhHaZnGZPyt0H11xFhGGDj1MtA1mrUmdAjB/nhVpmsAYXsSB5O+hkF9N66u7MjbNb405wTb9diBsztvI5w==}
engines: {node: '>=12'}
/@tanstack/query-core@5.29.0:
resolution: {integrity: sha512-WgPTRs58hm9CMzEr5jpISe8HXa3qKQ8CxewdYZeVnA54JrPY9B1CZiwsCoLpLkf0dGRZq+LcX5OiJb0bEsOFww==}
/@tanstack/query-core@5.31.0:
resolution: {integrity: sha512-r1V6RXB1LUGoEp7HGHVK4Tl59kOvAfwI9/kNNwPsb6cR5oHgfn1683sQnoH/3xEDUKOen3fEO90EnGE+OjRw5A==}
dev: false
/@tanstack/query-persist-client-core@5.29.0:
resolution: {integrity: sha512-aQpXqHQIg/GFtsQKUx/g3cMS/P9CFTWITXPlhrICW14E16gmQ+GMwnoXHAnu/kBV4MucfwUFKhVl4rzryltORQ==}
/@tanstack/query-persist-client-core@5.31.0:
resolution: {integrity: sha512-1BICzhQiklNlMHxkRufP9GNTy7ukvhVVfd2PhuQP9xDtNW93YPHHLWSWuYsnBZ9eAxWWIbE/aj6JdVQLmk5AhA==}
dependencies:
'@tanstack/query-core': 5.29.0
'@tanstack/query-core': 5.31.0
dev: false
/@tanstack/query-sync-storage-persister@5.29.0:
resolution: {integrity: sha512-22l1Sg8BY1nu0E97XZ/vnNwIUR6393g3j053AbC37bGdmVBmXxiVYlZsgXCPakgwk6ryCOKnIgLshumow/5jTw==}
/@tanstack/query-sync-storage-persister@5.31.0:
resolution: {integrity: sha512-/DknZLugLDXFnCZ1tWeqRlnRNUs2Wvtd0Ka0ubNp0aA2IEkNpheDBoxKQMxSbVMRJxqrq8nInR66hW0wGn1jag==}
dependencies:
'@tanstack/query-core': 5.29.0
'@tanstack/query-persist-client-core': 5.29.0
'@tanstack/query-core': 5.31.0
'@tanstack/query-persist-client-core': 5.31.0
dev: false
/@tanstack/react-query-persist-client@5.29.2(@tanstack/react-query@5.29.2)(react@18.2.0):
resolution: {integrity: sha512-I8KnQ1CzEfJAU/+8AQHCCCld2iWmmvxmQUTaoqPQyeLZDWvlUSJ/NpEpfMWtf4qyh5m0KJm8VmhcqdOnJSwaEQ==}
/@tanstack/react-query-persist-client@5.31.0(@tanstack/react-query@5.31.0)(react@18.2.0):
resolution: {integrity: sha512-u3sW67NEDExkKBU3FTKqcrlg9y8ZbcqwEY5RIq4MPJG4rzlcQf4XAkTqFAM7GsIVf680b5KnB72nb1iIJW1aOQ==}
peerDependencies:
'@tanstack/react-query': ^5.29.2
'@tanstack/react-query': ^5.31.0
react: ^18.0.0
dependencies:
'@tanstack/query-persist-client-core': 5.29.0
'@tanstack/react-query': 5.29.2(react@18.2.0)
'@tanstack/query-persist-client-core': 5.31.0
'@tanstack/react-query': 5.31.0(react@18.2.0)
react: 18.2.0
dev: false
/@tanstack/react-query@5.29.2(react@18.2.0):
resolution: {integrity: sha512-nyuWILR4u7H5moLGSiifLh8kIqQDLNOHGuSz0rcp+J75fNc8aQLyr5+I2JCHU3n+nJrTTW1ssgAD8HiKD7IFBQ==}
/@tanstack/react-query@5.31.0(react@18.2.0):
resolution: {integrity: sha512-/GUUDFA8yNIYZaSyImkecVfN9mAVw1Y+9LpHkOQ1DdWaKnbLtwfjelh6OF+6EtwQCycH50EjTL68UK3YTMxwvg==}
peerDependencies:
react: ^18.0.0
dependencies:
'@tanstack/query-core': 5.29.0
'@tanstack/query-core': 5.31.0
react: 18.2.0
dev: false
@ -2830,7 +2830,7 @@ packages:
engines: {node: '>=12'}
dependencies:
prettier: 3.2.5
zod: 3.23.0
zod: 3.23.3
dev: true
/@tanstack/router-vite-plugin@1.30.0(vite@5.2.10):
@ -2852,7 +2852,7 @@ packages:
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.5
'@vitejs/plugin-react': 4.2.1(vite@5.2.10)
zod: 3.23.0
zod: 3.23.3
transitivePeerDependencies:
- supports-color
- vite
@ -3423,8 +3423,8 @@ packages:
vitefu: 0.2.5(vite@5.2.10)
which-pm: 2.1.1
yargs-parser: 21.1.1
zod: 3.23.0
zod-to-json-schema: 3.22.5(zod@3.23.0)
zod: 3.23.3
zod-to-json-schema: 3.22.5(zod@3.23.3)
optionalDependencies:
sharp: 0.32.6
transitivePeerDependencies:
@ -3574,7 +3574,7 @@ packages:
hasBin: true
dependencies:
caniuse-lite: 1.0.30001612
electron-to-chromium: 1.4.745
electron-to-chromium: 1.4.746
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.23.0)
@ -3919,8 +3919,8 @@ packages:
/eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
/electron-to-chromium@1.4.745:
resolution: {integrity: sha512-tRbzkaRI5gbUn5DEvF0dV4TQbMZ5CLkWeTAXmpC9IrYT+GE+x76i9p+o3RJ5l9XmdQlI1pPhVtE9uNcJJ0G0EA==}
/electron-to-chromium@1.4.746:
resolution: {integrity: sha512-jeWaIta2rIG2FzHaYIhSuVWqC6KJYo7oSBX4Jv7g+aVujKztfvdpf+n6MGwZdC5hQXbax4nntykLH2juIQrfPg==}
/emmet@2.4.7:
resolution: {integrity: sha512-O5O5QNqtdlnQM2bmKHtJgyChcrFMgQuulI+WdiOw2NArzprUqqxUW6bgYtKvzKgrsYpuLWalOkdhNP+1jluhCA==}
@ -5319,8 +5319,8 @@ packages:
'@types/nlcst': 1.0.4
dev: false
/node-abi@3.60.0:
resolution: {integrity: sha512-zcGgwoXbzw9NczqbGzAWL/ToDYAxv1V8gL1D67ClbdkIfeeDBbY0GelZtC25ayLvVjr2q2cloHeQV1R0QAWqRQ==}
/node-abi@3.61.0:
resolution: {integrity: sha512-dYDO1rxzvMXjEMi37PBeFuYgwh3QZpsw/jt+qOmnRSwiV4z4c+OLoRlTa3V8ID4TrkSQpzCVc9OI2sstFaINfQ==}
engines: {node: '>=10'}
requiresBuild: true
dependencies:
@ -5672,7 +5672,7 @@ packages:
minimist: 1.2.8
mkdirp-classic: 0.5.3
napi-build-utils: 1.0.2
node-abi: 3.60.0
node-abi: 3.61.0
pump: 3.0.0
rc: 1.2.8
simple-get: 4.0.1
@ -6092,29 +6092,29 @@ packages:
resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
dev: false
/rollup@4.16.1:
resolution: {integrity: sha512-5CaD3MPDlPKfhqzRvWXK96G6ELJfPZNb3LHiZxTHgDdC6jvwfGz2E8nY+9g1ONk4ttHsK1WaFP19Js4PSr1E3g==}
/rollup@4.16.2:
resolution: {integrity: sha512-sxDP0+pya/Yi5ZtptF4p3avI+uWCIf/OdrfdH2Gbv1kWddLKk0U7WE3PmQokhi5JrektxsK3sK8s4hzAmjqahw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.16.1
'@rollup/rollup-android-arm64': 4.16.1
'@rollup/rollup-darwin-arm64': 4.16.1
'@rollup/rollup-darwin-x64': 4.16.1
'@rollup/rollup-linux-arm-gnueabihf': 4.16.1
'@rollup/rollup-linux-arm-musleabihf': 4.16.1
'@rollup/rollup-linux-arm64-gnu': 4.16.1
'@rollup/rollup-linux-arm64-musl': 4.16.1
'@rollup/rollup-linux-powerpc64le-gnu': 4.16.1
'@rollup/rollup-linux-riscv64-gnu': 4.16.1
'@rollup/rollup-linux-s390x-gnu': 4.16.1
'@rollup/rollup-linux-x64-gnu': 4.16.1
'@rollup/rollup-linux-x64-musl': 4.16.1
'@rollup/rollup-win32-arm64-msvc': 4.16.1
'@rollup/rollup-win32-ia32-msvc': 4.16.1
'@rollup/rollup-win32-x64-msvc': 4.16.1
'@rollup/rollup-android-arm-eabi': 4.16.2
'@rollup/rollup-android-arm64': 4.16.2
'@rollup/rollup-darwin-arm64': 4.16.2
'@rollup/rollup-darwin-x64': 4.16.2
'@rollup/rollup-linux-arm-gnueabihf': 4.16.2
'@rollup/rollup-linux-arm-musleabihf': 4.16.2
'@rollup/rollup-linux-arm64-gnu': 4.16.2
'@rollup/rollup-linux-arm64-musl': 4.16.2
'@rollup/rollup-linux-powerpc64le-gnu': 4.16.2
'@rollup/rollup-linux-riscv64-gnu': 4.16.2
'@rollup/rollup-linux-s390x-gnu': 4.16.2
'@rollup/rollup-linux-x64-gnu': 4.16.2
'@rollup/rollup-linux-x64-musl': 4.16.2
'@rollup/rollup-win32-arm64-msvc': 4.16.2
'@rollup/rollup-win32-ia32-msvc': 4.16.2
'@rollup/rollup-win32-x64-msvc': 4.16.2
fsevents: 2.3.3
/run-parallel@1.2.0:
@ -6965,8 +6965,8 @@ packages:
vfile-message: 4.0.2
dev: false
/virtua@0.30.1(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Kp6D3WdT91xOHhHOSZ7bAzByxz7F/y/QZQdb0mjKTHtm9sYkeq2Bnv+J1FumC9vdw0yxatELfsN0a2IqQPtZFg==}
/virtua@0.30.2(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-eqCx3oQX9TRlKHFvr7PIdAd+pA2VnObnhIHWzKzIV563YOT7ZDND/NX40K1rf33Q5ai47lAohehu0w6RlsCD3w==}
peerDependencies:
react: '>=16.14.0'
react-dom: '>=16.14.0'
@ -7047,7 +7047,7 @@ packages:
dependencies:
esbuild: 0.20.2
postcss: 8.4.38
rollup: 4.16.1
rollup: 4.16.2
optionalDependencies:
fsevents: 2.3.3
@ -7076,7 +7076,7 @@ packages:
optional: true
dependencies:
'@volar/language-service': 2.1.6
vscode-css-languageservice: 6.2.13
vscode-css-languageservice: 6.2.14
vscode-languageserver-textdocument: 1.0.11
vscode-uri: 3.0.8
dev: false
@ -7150,8 +7150,8 @@ packages:
vscode-nls: 5.2.0
dev: false
/vscode-css-languageservice@6.2.13:
resolution: {integrity: sha512-2rKWXfH++Kxd9Z4QuEgd1IF7WmblWWU7DScuyf1YumoGLkY9DW6wF/OTlhOyO2rN63sWHX2dehIpKBbho4ZwvA==}
/vscode-css-languageservice@6.2.14:
resolution: {integrity: sha512-5UPQ9Y1sUTnuMyaMBpO7LrBkqjhEJb5eAwdUlDp+Uez8lry+Tspnk3+3p2qWS4LlNsr4p3v9WkZxUf1ltgFpgw==}
dependencies:
'@vscode/l10n': 0.0.18
vscode-languageserver-textdocument: 1.0.11
@ -7346,16 +7346,16 @@ packages:
engines: {node: '>=12.20'}
dev: false
/zod-to-json-schema@3.22.5(zod@3.23.0):
/zod-to-json-schema@3.22.5(zod@3.23.3):
resolution: {integrity: sha512-+akaPo6a0zpVCCseDed504KBJUQpEW5QZw7RMneNmKw+fGaML1Z9tUNLnHHAC8x6dzVRO1eB2oEMyZRnuBZg7Q==}
peerDependencies:
zod: ^3.22.4
dependencies:
zod: 3.23.0
zod: 3.23.3
dev: false
/zod@3.23.0:
resolution: {integrity: sha512-OFLT+LTocvabn6q76BTwVB0hExEBS0IduTr3cqZyMqEDbOnYmcU+y0tUAYbND4uwclpBGi4I4UUBGzylWpjLGA==}
/zod@3.23.3:
resolution: {integrity: sha512-tPvq1B/2Yu/dh2uAIH2/BhUlUeLIUvAjr6dpL/75I0pCYefHgjhXk1o1Kob3kTU8C7yU1j396jFHlsVWFi9ogg==}
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}

132
src-tauri/Cargo.lock generated
View File

@ -300,8 +300,8 @@ dependencies = [
"futures-io",
"futures-lite 2.3.0",
"parking",
"polling 3.6.0",
"rustix 0.38.33",
"polling 3.7.0",
"rustix 0.38.34",
"slab",
"tracing",
"windows-sys 0.52.0",
@ -340,7 +340,7 @@ dependencies = [
"cfg-if",
"event-listener 3.1.0",
"futures-lite 1.13.0",
"rustix 0.38.33",
"rustix 0.38.34",
"windows-sys 0.48.0",
]
@ -359,7 +359,7 @@ dependencies = [
"cfg-if",
"event-listener 5.3.0",
"futures-lite 2.3.0",
"rustix 0.38.33",
"rustix 0.38.34",
"tracing",
"windows-sys 0.52.0",
]
@ -387,7 +387,7 @@ dependencies = [
"cfg-if",
"futures-core",
"futures-io",
"rustix 0.38.33",
"rustix 0.38.34",
"signal-hook-registry",
"slab",
"windows-sys 0.52.0",
@ -2612,9 +2612,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jobserver"
version = "0.1.30"
version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "685a7d121ee3f65ae4fddd72b25a04bb36b6af81bc0828f7d5434c0fe60fa3a2"
checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e"
dependencies = [
"libc",
]
@ -3886,15 +3886,15 @@ dependencies = [
[[package]]
name = "polling"
version = "3.6.0"
version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e0c976a60b2d7e99d6f229e414670a9b85d13ac305cc6d1e9c134de58c5aaaf6"
checksum = "645493cf344456ef24219d02a768cf1fb92ddf8c92161679ae3d91b91a637be3"
dependencies = [
"cfg-if",
"concurrent-queue",
"hermit-abi",
"pin-project-lite",
"rustix 0.38.33",
"rustix 0.38.34",
"tracing",
"windows-sys 0.52.0",
]
@ -4333,9 +4333,9 @@ dependencies = [
[[package]]
name = "rustix"
version = "0.38.33"
version = "0.38.34"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3cc72858054fcff6d7dea32df2aeaee6a7c24227366d7ea429aada2f26b16ad"
checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
dependencies = [
"bitflags 2.5.0",
"errno",
@ -4376,9 +4376,9 @@ checksum = "ecd36cc4259e3e4514335c4a138c6b43171a8d61d8f5c9348f9fc7529416f247"
[[package]]
name = "rustls-webpki"
version = "0.102.2"
version = "0.102.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610"
checksum = "f3bce581c0dd41bce533ce695a1437fa16a7ab5ac3ccfa99fe1a620a7885eabf"
dependencies = [
"ring",
"rustls-pki-types",
@ -5009,11 +5009,11 @@ dependencies = [
[[package]]
name = "tao"
version = "0.27.0"
version = "0.27.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd5b6ec2c43abd15155f040c765001098f50f425414b679225d471a1cd782753"
checksum = "92bcf8885e147b56d6e26751263b45876284f32ca404703f6d3b8f80d16ff4dd"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.5.0",
"cocoa",
"core-foundation",
"core-graphics",
@ -5040,7 +5040,8 @@ dependencies = [
"tao-macros",
"unicode-segmentation",
"url",
"windows 0.54.0",
"windows 0.56.0",
"windows-core 0.56.0",
"windows-version",
"x11-dl",
]
@ -5075,9 +5076,9 @@ checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
[[package]]
name = "tauri"
version = "2.0.0-beta.15"
version = "2.0.0-beta.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd0aba659957a3f1f1666acbf17723e8d41dcc177539bf1adbe55305f5d7118a"
checksum = "4d411ebb670bbe5cf948f6c24978632937329748b499de1619ab55ad31512652"
dependencies = [
"anyhow",
"bytes",
@ -5120,20 +5121,20 @@ dependencies = [
"webkit2gtk",
"webview2-com",
"window-vibrancy",
"windows 0.54.0",
"windows 0.56.0",
]
[[package]]
name = "tauri-build"
version = "2.0.0-beta.12"
version = "2.0.0-beta.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "33de24aabe2b9c340d67005800cb6dd40aac5283126a42896fc8eec0b87cbe45"
checksum = "abcf98a9b4527567c3e5ca9723431d121e001c2145651b3fa044d22b5e025a7e"
dependencies = [
"anyhow",
"cargo_toml",
"dirs-next",
"glob",
"heck 0.4.1",
"heck 0.5.0",
"json-patch",
"schemars",
"semver",
@ -5147,9 +5148,9 @@ dependencies = [
[[package]]
name = "tauri-codegen"
version = "2.0.0-beta.12"
version = "2.0.0-beta.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d1d211268a9590bbf75cc85b47208f59b447626c76396256e12479ac7df6c8b"
checksum = "b383f341efb803852b0235a2f330ca90c4c113f422dd6d646b888685b372cace"
dependencies = [
"base64 0.22.0",
"brotli",
@ -5174,9 +5175,9 @@ dependencies = [
[[package]]
name = "tauri-macros"
version = "2.0.0-beta.12"
version = "2.0.0-beta.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b096f63f2724a1280ae0f5a34d0731de18ca18305e2ef6e5e9a39bb2710e8a85"
checksum = "71be71718cfe48b149507157bfbad0e2ba0e98ea51658be26c7c677eb188fb0c"
dependencies = [
"heck 0.4.1",
"proc-macro2",
@ -5188,9 +5189,9 @@ dependencies = [
[[package]]
name = "tauri-plugin"
version = "2.0.0-beta.12"
version = "2.0.0-beta.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21c6be726c8d57ccf440e6b05a904e6acbbafb9aaf88b8a47cc1923d36ddc512"
checksum = "6baaee0a083db1e04a1b7a3b0670d86a4d95dd2a54e7cbfb5547762b8ed098d9"
dependencies = [
"anyhow",
"glob",
@ -5439,9 +5440,9 @@ dependencies = [
[[package]]
name = "tauri-runtime"
version = "2.0.0-beta.12"
version = "2.0.0-beta.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96c957749c40db7999959f379f799db095f2248a80bdbb13d8c078f6c299240e"
checksum = "c7439729d0107c9797764919c39c4a4cc3af64306faaa48271da50d8eb4c0283"
dependencies = [
"dpi",
"gtk",
@ -5453,14 +5454,14 @@ dependencies = [
"tauri-utils",
"thiserror",
"url",
"windows 0.54.0",
"windows 0.56.0",
]
[[package]]
name = "tauri-runtime-wry"
version = "2.0.0-beta.12"
version = "2.0.0-beta.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6b937adb1cf3fa0457928ace959ca3fc1a85ddd69f56b124682d40f3e5683e60"
checksum = "0c38dcfa7f8c2b2e344c7401972e0ddaaec4fa655666788d94b1852d6c4a7fe8"
dependencies = [
"cocoa",
"gtk",
@ -5476,22 +5477,22 @@ dependencies = [
"url",
"webkit2gtk",
"webview2-com",
"windows 0.54.0",
"windows 0.56.0",
"wry",
]
[[package]]
name = "tauri-utils"
version = "2.0.0-beta.12"
version = "2.0.0-beta.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "760ac613d7f0de95067bcbcbcea175fe1df88fc4ab59c7f0b2cc2d01dc16a199"
checksum = "d4709765385f035338ecc330f3fba753b8ee283c659c235da9768949cdb25469"
dependencies = [
"brotli",
"cargo_metadata",
"ctor",
"dunce",
"glob",
"heck 0.4.1",
"heck 0.5.0",
"html5ever",
"infer",
"json-patch",
@ -5543,7 +5544,7 @@ checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
dependencies = [
"cfg-if",
"fastrand 2.0.2",
"rustix 0.38.33",
"rustix 0.38.34",
"windows-sys 0.52.0",
]
@ -6386,14 +6387,14 @@ dependencies = [
[[package]]
name = "webview2-com"
version = "0.29.0"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38d5949fc3f537e90240c3e4f78dda2fa0431b671d50845a2f582173ef8a1201"
checksum = "5c914dd492a52f0377bef56fd1b6e74a79090f9ee631d625d5b505a00e4538b6"
dependencies = [
"webview2-com-macros",
"webview2-com-sys",
"windows 0.54.0",
"windows-core 0.54.0",
"windows 0.56.0",
"windows-core 0.56.0",
"windows-implement",
"windows-interface",
]
@ -6411,13 +6412,13 @@ dependencies = [
[[package]]
name = "webview2-com-sys"
version = "0.29.0"
version = "0.30.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd1eaa1be63d6fdcadf893c40d7d53c889a6342b3a94930d34e6964d5bb7e8db"
checksum = "2a46bcf03482ec28eeb764ca788f67998cde4213adfbbfa90462622058530f5e"
dependencies = [
"thiserror",
"windows 0.54.0",
"windows-core 0.54.0",
"windows 0.56.0",
"windows-core 0.56.0",
]
[[package]]
@ -6491,13 +6492,11 @@ dependencies = [
[[package]]
name = "windows"
version = "0.54.0"
version = "0.56.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9252e5725dbed82865af151df558e754e4a3c2c30818359eb17465f1346a1b49"
checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132"
dependencies = [
"windows-core 0.54.0",
"windows-implement",
"windows-interface",
"windows-core 0.56.0",
"windows-targets 0.52.5",
]
@ -6521,19 +6520,21 @@ dependencies = [
[[package]]
name = "windows-core"
version = "0.54.0"
version = "0.56.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12661b9c89351d684a50a8a643ce5f608e20243b9fb84687800163429f161d65"
checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6"
dependencies = [
"windows-implement",
"windows-interface",
"windows-result",
"windows-targets 0.52.5",
]
[[package]]
name = "windows-implement"
version = "0.53.0"
version = "0.56.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "942ac266be9249c84ca862f0a164a39533dc2f6f33dc98ec89c8da99b82ea0bd"
checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b"
dependencies = [
"proc-macro2",
"quote",
@ -6542,9 +6543,9 @@ dependencies = [
[[package]]
name = "windows-interface"
version = "0.53.0"
version = "0.56.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da33557140a288fae4e1d5f8873aaf9eb6613a9cf82c3e070223ff177f598b60"
checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc"
dependencies = [
"proc-macro2",
"quote",
@ -6813,11 +6814,11 @@ dependencies = [
[[package]]
name = "wry"
version = "0.39.1"
version = "0.39.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "798fb0ee725c2d243d463e62c5150fd12002a3f51f12a36d62cd7b1b7befd33d"
checksum = "1a4e9d37c0bbf497cd42bc2e0ba12e0040ab42e454f2907dc1e9ddb2eaf52d34"
dependencies = [
"base64 0.21.7",
"base64 0.22.0",
"block",
"cocoa",
"core-graphics",
@ -6847,7 +6848,8 @@ dependencies = [
"webkit2gtk",
"webkit2gtk-sys",
"webview2-com",
"windows 0.54.0",
"windows 0.56.0",
"windows-core 0.56.0",
"windows-version",
"x11-dl",
]
@ -6880,7 +6882,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8f25ead8c7e4cba123243a6367da5d3990e0d3affa708ea19dce96356bd9f1a"
dependencies = [
"gethostname",
"rustix 0.38.33",
"rustix 0.38.34",
"x11rb-protocol",
]
@ -6898,7 +6900,7 @@ checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f"
dependencies = [
"libc",
"linux-raw-sys 0.4.13",
"rustix 0.38.33",
"rustix 0.38.34",
]
[[package]]

View File

@ -7,6 +7,7 @@
"main",
"splash",
"settings",
"search",
"nwc",
"zap-*",
"event-*",

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
{"desktop-capability":{"identifier":"desktop-capability","description":"Capability for the desktop","local":true,"windows":["main","splash","settings","nwc","zap-*","event-*","user-*","editor-*","column-*"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default","notification:allow-is-permission-granted","notification:allow-request-permission","notification:default","os:allow-locale","os:allow-platform","updater:allow-check","updater:default","window:allow-start-dragging","window:allow-create","window:allow-close","clipboard-manager:allow-write","clipboard-manager:allow-read","webview:allow-create-webview-window","webview:allow-create-webview","webview:allow-set-webview-size","webview:allow-set-webview-position","webview:allow-webview-close","dialog:allow-open","fs:allow-read-file","shell:allow-open",{"identifier":"http:default","allow":[{"url":"http://**/"},{"url":"https://**/"}]},{"identifier":"fs:allow-read-text-file","allow":[{"path":"$RESOURCE/locales/*"},{"path":"$RESOURCE/resources/*"}]}],"platforms":["linux","macOS","windows"]}}
{"desktop-capability":{"identifier":"desktop-capability","description":"Capability for the desktop","local":true,"windows":["main","splash","settings","search","nwc","zap-*","event-*","user-*","editor-*","column-*"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default","notification:allow-is-permission-granted","notification:allow-request-permission","notification:default","os:allow-locale","os:allow-platform","updater:allow-check","updater:default","window:allow-start-dragging","window:allow-create","window:allow-close","clipboard-manager:allow-write","clipboard-manager:allow-read","webview:allow-create-webview-window","webview:allow-create-webview","webview:allow-set-webview-size","webview:allow-set-webview-position","webview:allow-webview-close","dialog:allow-open","fs:allow-read-file","shell:allow-open",{"identifier":"http:default","allow":[{"url":"http://**/"},{"url":"https://**/"}]},{"identifier":"fs:allow-read-text-file","allow":[{"path":"$RESOURCE/locales/*"},{"path":"$RESOURCE/resources/*"}]}],"platforms":["linux","macOS","windows"]}}

View File

@ -6416,6 +6416,13 @@
"window:allow-start-dragging"
]
},
{
"description": "window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.",
"type": "string",
"enum": [
"window:allow-start-resize-dragging"
]
},
{
"description": "window:allow-theme -> Enables the theme command without any pre-configured scope.",
"type": "string",
@ -6836,6 +6843,13 @@
"window:deny-start-dragging"
]
},
{
"description": "window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.",
"type": "string",
"enum": [
"window:deny-start-resize-dragging"
]
},
{
"description": "window:deny-theme -> Denies the theme command without any pre-configured scope.",
"type": "string",

View File

@ -6416,6 +6416,13 @@
"window:allow-start-dragging"
]
},
{
"description": "window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.",
"type": "string",
"enum": [
"window:allow-start-resize-dragging"
]
},
{
"description": "window:allow-theme -> Enables the theme command without any pre-configured scope.",
"type": "string",
@ -6836,6 +6843,13 @@
"window:deny-start-dragging"
]
},
{
"description": "window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.",
"type": "string",
"enum": [
"window:deny-start-resize-dragging"
]
},
{
"description": "window:deny-theme -> Denies the theme command without any pre-configured scope.",
"type": "string",

View File

@ -57,11 +57,11 @@ fn main() {
client
.add_relay("wss://relayable.org")
.await
.expect("Cannot connect to relay.nostr.band, please try again later.");
.expect("Cannot connect to relayable.org, please try again later.");
client
.add_relay("wss://relay.damus.io")
.add_relay("wss://relay.nostr.band")
.await
.expect("Cannot connect to relay.damus.io, please try again later.");
.expect("Cannot connect to relay.nostr.band, please try again later.");
// Connect
client.connect().await;
@ -129,6 +129,7 @@ fn main() {
nostr::event::get_event_thread,
nostr::event::publish,
nostr::event::repost,
nostr::event::search,
commands::folder::show_in_folder,
commands::folder::get_accounts,
commands::opg::fetch_opg,

View File

@ -221,3 +221,26 @@ pub async fn repost(raw: &str, state: State<'_, Nostr>) -> Result<EventId, Strin
Err("Repost failed".into())
}
}
#[tauri::command]
pub async fn search(
content: &str,
limit: usize,
state: State<'_, Nostr>,
) -> Result<Vec<Event>, String> {
println!("search: {}", content);
let client = &state.client;
let filter = Filter::new()
.kinds(vec![Kind::TextNote, Kind::Metadata])
.search(content)
.limit(limit);
match client
.get_events_of(vec![filter], Some(Duration::from_secs(15)))
.await
{
Ok(events) => Ok(events),
Err(err) => Err(err.to_string()),
}
}

View File

@ -10,6 +10,7 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
let menu = tauri::menu::MenuBuilder::new(app)
.item(&tauri::menu::MenuItem::with_id(app, "open", "Open Lume", true, None::<&str>).unwrap())
.item(&tauri::menu::MenuItem::with_id(app, "editor", "New Post", true, Some("cmd+n")).unwrap())
.item(&tauri::menu::MenuItem::with_id(app, "search", "Search", true, Some("cmd+k")).unwrap())
.separator()
.item(
&tauri::menu::MenuItem::with_id(
@ -29,6 +30,7 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
.item(
&tauri::menu::MenuItem::with_id(app, "settings", "Settings...", true, Some("cmd+,")).unwrap(),
)
.separator()
.item(&tauri::menu::MenuItem::with_id(app, "quit", "Quit", true, None::<&str>).unwrap())
.build()
.unwrap();
@ -74,6 +76,34 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
.unwrap();
}
}
"search" => {
if let Some(window) = app.get_window("search") {
if window.is_visible().unwrap_or_default() {
let _ = window.set_focus();
} else {
let _ = window.show();
let _ = window.set_focus();
};
} else {
#[cfg(target_os = "macos")]
let _ = WebviewWindowBuilder::new(app, "search", WebviewUrl::App(PathBuf::from("search")))
.title("Editor")
.inner_size(750., 470.)
.minimizable(false)
.resizable(false)
.title_bar_style(TitleBarStyle::Overlay)
.build()
.unwrap();
#[cfg(not(target_os = "macos"))]
let _ = WebviewWindowBuilder::new(app, "Search", WebviewUrl::App(PathBuf::from("search")))
.title("Search")
.inner_size(750., 470.)
.minimizable(false)
.resizable(false)
.build()
.unwrap();
}
}
"about" => {
app.shell().open("https://lume.nu", None).unwrap();
}
@ -97,7 +127,6 @@ pub fn create_tray<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
)
.title("Settings")
.inner_size(800., 500.)
.hidden_title(true)
.title_bar_style(TitleBarStyle::Overlay)
.resizable(false)
.minimizable(false)