feat: only query from local database and other improvements

This commit is contained in:
2024-10-09 09:15:49 +07:00
parent c40762cc04
commit 106c627ec4
11 changed files with 508 additions and 397 deletions

View File

@@ -21,10 +21,10 @@
"@radix-ui/react-tooltip": "^1.1.3", "@radix-ui/react-tooltip": "^1.1.3",
"@tanstack/query-persist-client-core": "^5.59.0", "@tanstack/query-persist-client-core": "^5.59.0",
"@tanstack/react-query": "^5.59.0", "@tanstack/react-query": "^5.59.0",
"@tanstack/react-router": "^1.58.16", "@tanstack/react-router": "^1.63.5",
"@tanstack/react-store": "^0.5.5", "@tanstack/react-store": "^0.5.5",
"@tanstack/store": "^0.5.5", "@tanstack/store": "^0.5.5",
"@tauri-apps/api": "^2.0.1", "@tauri-apps/api": "^2.0.2",
"@tauri-apps/plugin-clipboard-manager": "^2.0.0", "@tauri-apps/plugin-clipboard-manager": "^2.0.0",
"@tauri-apps/plugin-dialog": "^2.0.0", "@tauri-apps/plugin-dialog": "^2.0.0",
"@tauri-apps/plugin-fs": "^2.0.0", "@tauri-apps/plugin-fs": "^2.0.0",
@@ -39,7 +39,7 @@
"bitcoin-units": "^1.0.0", "bitcoin-units": "^1.0.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"embla-carousel-react": "^8.3.0", "embla-carousel-react": "^8.3.0",
"i18next": "^23.15.1", "i18next": "^23.15.2",
"i18next-resources-to-backend": "^1.2.1", "i18next-resources-to-backend": "^1.2.1",
"light-bolt11-decoder": "^3.2.0", "light-bolt11-decoder": "^3.2.0",
"minidenticons": "^4.2.1", "minidenticons": "^4.2.1",
@@ -60,9 +60,9 @@
"@evilmartians/harmony": "^1.2.0", "@evilmartians/harmony": "^1.2.0",
"@tailwindcss/forms": "^0.5.9", "@tailwindcss/forms": "^0.5.9",
"@tailwindcss/typography": "^0.5.15", "@tailwindcss/typography": "^0.5.15",
"@tanstack/router-devtools": "^1.58.16", "@tanstack/router-devtools": "^1.63.5",
"@tanstack/router-plugin": "^1.58.12", "@tanstack/router-plugin": "^1.63.5",
"@tauri-apps/cli": "^2.0.0", "@tauri-apps/cli": "^2.0.2",
"@types/react": "npm:types-react@19.0.0-rc.1", "@types/react": "npm:types-react@19.0.0-rc.1",
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
"@vitejs/plugin-react": "^4.3.2", "@vitejs/plugin-react": "^4.3.2",
@@ -71,11 +71,11 @@
"clsx": "^2.1.1", "clsx": "^2.1.1",
"postcss": "^8.4.47", "postcss": "^8.4.47",
"tailwind-gradient-mask-image": "^1.2.0", "tailwind-gradient-mask-image": "^1.2.0",
"tailwind-merge": "^2.5.2", "tailwind-merge": "^2.5.3",
"tailwind-scrollbar": "^3.1.0", "tailwind-scrollbar": "^3.1.0",
"tailwindcss": "^3.4.13", "tailwindcss": "^3.4.13",
"tailwindcss-content-visibility": "^1.0.0", "tailwindcss-content-visibility": "^1.0.0",
"typescript": "^5.6.2", "typescript": "^5.6.3",
"vite": "^5.4.8", "vite": "^5.4.8",
"vite-tsconfig-paths": "^5.0.1" "vite-tsconfig-paths": "^5.0.1"
}, },

272
pnpm-lock.yaml generated
View File

@@ -10,7 +10,7 @@ importers:
dependencies: dependencies:
'@getalby/bitcoin-connect-react': '@getalby/bitcoin-connect-react':
specifier: ^3.6.2 specifier: ^3.6.2
version: 3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.2) version: 3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.3)
'@phosphor-icons/react': '@phosphor-icons/react':
specifier: ^2.1.7 specifier: ^2.1.7
version: 2.1.7(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722) version: 2.1.7(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
@@ -42,8 +42,8 @@ importers:
specifier: ^5.59.0 specifier: ^5.59.0
version: 5.59.0(react@19.0.0-rc-d025ddd3-20240722) version: 5.59.0(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/react-router': '@tanstack/react-router':
specifier: ^1.58.16 specifier: ^1.63.5
version: 1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722) version: 1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/react-store': '@tanstack/react-store':
specifier: ^0.5.5 specifier: ^0.5.5
version: 0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722) version: 0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
@@ -51,8 +51,8 @@ importers:
specifier: ^0.5.5 specifier: ^0.5.5
version: 0.5.5 version: 0.5.5
'@tauri-apps/api': '@tauri-apps/api':
specifier: ^2.0.1 specifier: ^2.0.2
version: 2.0.1 version: 2.0.2
'@tauri-apps/plugin-clipboard-manager': '@tauri-apps/plugin-clipboard-manager':
specifier: ^2.0.0 specifier: ^2.0.0
version: 2.0.0 version: 2.0.0
@@ -96,8 +96,8 @@ importers:
specifier: ^8.3.0 specifier: ^8.3.0
version: 8.3.0(react@19.0.0-rc-d025ddd3-20240722) version: 8.3.0(react@19.0.0-rc-d025ddd3-20240722)
i18next: i18next:
specifier: ^23.15.1 specifier: ^23.15.2
version: 23.15.1 version: 23.15.2
i18next-resources-to-backend: i18next-resources-to-backend:
specifier: ^1.2.1 specifier: ^1.2.1
version: 1.2.1 version: 1.2.1
@@ -112,7 +112,7 @@ importers:
version: 5.0.7 version: 5.0.7
nostr-tools: nostr-tools:
specifier: ^2.7.2 specifier: ^2.7.2
version: 2.7.2(typescript@5.6.2) version: 2.7.2(typescript@5.6.3)
react: react:
specifier: 19.0.0-rc-d025ddd3-20240722 specifier: 19.0.0-rc-d025ddd3-20240722
version: 19.0.0-rc-d025ddd3-20240722 version: 19.0.0-rc-d025ddd3-20240722
@@ -127,7 +127,7 @@ importers:
version: 7.53.0(react@19.0.0-rc-d025ddd3-20240722) version: 7.53.0(react@19.0.0-rc-d025ddd3-20240722)
react-i18next: react-i18next:
specifier: ^15.0.2 specifier: ^15.0.2
version: 15.0.2(i18next@23.15.1)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722) version: 15.0.2(i18next@23.15.2)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
react-string-replace: react-string-replace:
specifier: ^1.1.1 specifier: ^1.1.1
version: 1.1.1 version: 1.1.1
@@ -154,14 +154,14 @@ importers:
specifier: ^0.5.15 specifier: ^0.5.15
version: 0.5.15(tailwindcss@3.4.13) version: 0.5.15(tailwindcss@3.4.13)
'@tanstack/router-devtools': '@tanstack/router-devtools':
specifier: ^1.58.16 specifier: ^1.63.5
version: 1.58.16(@tanstack/react-router@1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722))(csstype@3.1.3)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722) version: 1.63.5(@tanstack/react-router@1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722))(csstype@3.1.3)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/router-plugin': '@tanstack/router-plugin':
specifier: ^1.58.12 specifier: ^1.63.5
version: 1.58.12(vite@5.4.8)(webpack-sources@3.2.3) version: 1.63.5(vite@5.4.8)(webpack-sources@3.2.3)
'@tauri-apps/cli': '@tauri-apps/cli':
specifier: ^2.0.0 specifier: ^2.0.2
version: 2.0.0 version: 2.0.2
'@types/react': '@types/react':
specifier: npm:types-react@19.0.0-rc.1 specifier: npm:types-react@19.0.0-rc.1
version: types-react@19.0.0-rc.1 version: types-react@19.0.0-rc.1
@@ -187,8 +187,8 @@ importers:
specifier: ^1.2.0 specifier: ^1.2.0
version: 1.2.0 version: 1.2.0
tailwind-merge: tailwind-merge:
specifier: ^2.5.2 specifier: ^2.5.3
version: 2.5.2 version: 2.5.3
tailwind-scrollbar: tailwind-scrollbar:
specifier: ^3.1.0 specifier: ^3.1.0
version: 3.1.0(tailwindcss@3.4.13) version: 3.1.0(tailwindcss@3.4.13)
@@ -199,14 +199,14 @@ importers:
specifier: ^1.0.0 specifier: ^1.0.0
version: 1.0.0(tailwindcss@3.4.13) version: 1.0.0(tailwindcss@3.4.13)
typescript: typescript:
specifier: ^5.6.2 specifier: ^5.6.3
version: 5.6.2 version: 5.6.3
vite: vite:
specifier: ^5.4.8 specifier: ^5.4.8
version: 5.4.8 version: 5.4.8
vite-tsconfig-paths: vite-tsconfig-paths:
specifier: ^5.0.1 specifier: ^5.0.1
version: 5.0.1(typescript@5.6.2)(vite@5.4.8) version: 5.0.1(typescript@5.6.3)(vite@5.4.8)
packages: packages:
@@ -1223,8 +1223,8 @@ packages:
peerDependencies: peerDependencies:
tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
'@tanstack/history@1.58.15': '@tanstack/history@1.61.1':
resolution: {integrity: sha512-M36Ke2Q2v8Iv4Cx0xw04iVkixuOligiFLOifH35DqGnzXe9PAtTHIooieQowqYkAjC09KuLo5j6sgvwKTZ+U5Q==} resolution: {integrity: sha512-2CqERleeqO3hkhJmyJm37tiL3LYgeOpmo8szqdjgtnnG0z7ZpvzkZz6HkfOr9Ca/ha7mhAiouSvLYuLkM37AMg==}
engines: {node: '>=12'} engines: {node: '>=12'}
'@tanstack/query-core@5.59.0': '@tanstack/query-core@5.59.0':
@@ -1238,11 +1238,11 @@ packages:
peerDependencies: peerDependencies:
react: ^18 || ^19 react: ^18 || ^19
'@tanstack/react-router@1.58.16': '@tanstack/react-router@1.63.5':
resolution: {integrity: sha512-3kRTNNI+xgpXHhpI5xMw/S0/6ff23k2ubKvkf0LPv1X4B/WzctnH1nfFPpQq9DK0HBtgG8TIk7+gIJx0mV8KOA==} resolution: {integrity: sha512-478jbiHNLcS6K1G8YNZ1tzpdh07GjUr0b3IP9bqaFhHIDChDviyGvA/fq+zhcTITBSgU3+LgCAwRWt05hp961w==}
engines: {node: '>=12'} engines: {node: '>=12'}
peerDependencies: peerDependencies:
'@tanstack/router-generator': 1.58.12 '@tanstack/router-generator': 1.63.5
react: '>=18' react: '>=18'
react-dom: '>=18' react-dom: '>=18'
peerDependenciesMeta: peerDependenciesMeta:
@@ -1255,20 +1255,20 @@ packages:
react: ^17.0.0 || ^18.0.0 react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0
'@tanstack/router-devtools@1.58.16': '@tanstack/router-devtools@1.63.5':
resolution: {integrity: sha512-dpAfsTdeABqRdZyDaKbNNfQKEE29evX3G/YspUNzSxGwVQH1mMgliUJoNQe/J3EEPSlJFaRVBJ25SrwfE685OQ==} resolution: {integrity: sha512-kG3ei8q7XVKOE60eniK3Dn5NDiRjs0KrktM4Av8tlgIFd/89BLiXkMnYqWlDd2fp7yxmEiX3GiQv7pNedfaMiA==}
engines: {node: '>=12'} engines: {node: '>=12'}
peerDependencies: peerDependencies:
'@tanstack/react-router': ^1.58.16 '@tanstack/react-router': ^1.63.5
react: '>=18' react: '>=18'
react-dom: '>=18' react-dom: '>=18'
'@tanstack/router-generator@1.58.12': '@tanstack/router-generator@1.63.5':
resolution: {integrity: sha512-Ovzb+zCbiRgJAg6awTXWQjn1uRkVyiBc4jiIk7ll2hg0bHjIOsgiegwx/F2YKycY98vWj9TLv/U4Hoo4rmK0IA==} resolution: {integrity: sha512-vhSlnztluTFqnGMN4lFJFpCYtW1jUlFW6hBl93/QlV03mbtAwBTpPT/BkGk3wZkvsUMgDP86tCyu1ytQDZwi3w==}
engines: {node: '>=12'} engines: {node: '>=12'}
'@tanstack/router-plugin@1.58.12': '@tanstack/router-plugin@1.63.5':
resolution: {integrity: sha512-WVR5UupNcvj7lvCrle7CrmHm6aezTG98g3N81oNPaCS0U3cEUaUiNqna0cWk4M4WuzAzUbpbQ81xBapIMc8Thw==} resolution: {integrity: sha512-PdGy1iHCkYp8Kj7m0uFRsKYPzy+V8QQNHXuXB9mxcKx5I+hgkqWkEu5gtvrunjemsaxxp7duvKJ3/tC8C4k/ZQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
peerDependencies: peerDependencies:
'@rsbuild/core': '>=1.0.2' '@rsbuild/core': '>=1.0.2'
@@ -1289,71 +1289,71 @@ packages:
resolution: {integrity: sha512-fBUj+lbSaw+VxoBN4J/WFE7dTx8x4XCTRAQvbiIyPJ8MY1KRVkdZV6cbLvg7MeDP6CxUcj6XNvWU6h0ic1Ipyg==} resolution: {integrity: sha512-fBUj+lbSaw+VxoBN4J/WFE7dTx8x4XCTRAQvbiIyPJ8MY1KRVkdZV6cbLvg7MeDP6CxUcj6XNvWU6h0ic1Ipyg==}
engines: {node: '>=12'} engines: {node: '>=12'}
'@tauri-apps/api@2.0.1': '@tauri-apps/api@2.0.2':
resolution: {integrity: sha512-eoQWT+Tq1qSwQpHV+nw1eNYe5B/nm1PoRjQCRiEOS12I1b+X4PUcREfXVX8dPcBT6GrzWGDtaecY0+1p0Rfqlw==} resolution: {integrity: sha512-3wSwmG+1kr6WrgAFKK5ijkNFPp8TT3FLj3YHUb5EwMO+3FxX4uWlfSWkeeBy+Kc1RsKzugtYLuuya+98Flj+3w==}
'@tauri-apps/cli-darwin-arm64@2.0.0': '@tauri-apps/cli-darwin-arm64@2.0.2':
resolution: {integrity: sha512-+agYqg2c77imaMfKw7mzqecVIDGcwr6bZMdglJ808O2UjTFzMwnAam1sU26YBYU+IyIjwOu00fm9Azpal+N/Ew==} resolution: {integrity: sha512-B+/a8Q6wAqmB4A4HVeK0oQP5TdQGKW60ZLOI9O2ktH2HPr9ETr3XkwXPuJ2uAOuGEgtRZHBgFOIgG000vMnKlg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@tauri-apps/cli-darwin-x64@2.0.0': '@tauri-apps/cli-darwin-x64@2.0.2':
resolution: {integrity: sha512-keN2PLTTcZmbWwFMup/NGcshmvyLnhRPChO8lbm9C5a0IY7zUNQUD7/o/zIulQdLJqDxkdpWJ1j2jTycAtvtKQ==} resolution: {integrity: sha512-kaurhn6XT4gAVCPAQSSHl/CHFxTS0ljc47N7iGTSlYJ03sCWPRZeNuVa/bn6rolz9MA2JfnRnFqB1pUL6jzp9Q==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0': '@tauri-apps/cli-linux-arm-gnueabihf@2.0.2':
resolution: {integrity: sha512-FQJNrlCUBb9E7Fhp5ARy+Or8lSvorG41aVrfi0cGNvv1QlIGSj77TN7SKK+L1jAGzKj1Bl2kCZIESF6Zi8N/+Q==} resolution: {integrity: sha512-bVrofjlacMxmGMcqK18iBW05tsZXOd19/MnqruFFcHSVjvkGGIXHMtUbMXnZNXBPkHDsnfytNtkY9SZGfCFaBA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@tauri-apps/cli-linux-arm64-gnu@2.0.0': '@tauri-apps/cli-linux-arm64-gnu@2.0.2':
resolution: {integrity: sha512-TK3VrZG5LK1NGueKwnZA1/3gj/qkwry001MNCHXjT6394dwrDv+digCc9Qc569h+xeH/FF71jyoiRIu3gRE6iA==} resolution: {integrity: sha512-7XCBn0TTBVQGnV42dXcbHPLg/9W8kJoVzuliIozvNGyRWxfXqDbQYzpI48HUQG3LgHMabcw8+pVZAfGhevLrCA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@tauri-apps/cli-linux-arm64-musl@2.0.0': '@tauri-apps/cli-linux-arm64-musl@2.0.2':
resolution: {integrity: sha512-E3hRmS/0m8YUYMTKZtBExpk/284CTi2nymks0dK0L1j+3KjffL7DiilnIfNFmTvWBgMrs0cVCtoaN/ba/A9mNA==} resolution: {integrity: sha512-1xi2SreGVlpAL68MCsDUY63rdItUdPZreXIAcOVqvUehcJRYOa1XGSBhrV0YXRgZeh0AtKC19z6PRzcv4rosZA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@tauri-apps/cli-linux-x64-gnu@2.0.0': '@tauri-apps/cli-linux-x64-gnu@2.0.2':
resolution: {integrity: sha512-veX4BJp5xnW8KmxVjchWt4oZEIvKGhuSR7qU1WpqTR21e/eTe/ksGsdXPsqOKQvv/w1X6jhqmlPvhnFmDwUJ/w==} resolution: {integrity: sha512-WVjwYzPWFqZVg1fx6KSU5w47Q0VbMyaCp34qs5EcS8EIU0/RnofdzqUoOYqvgGVgNgoz7Pj5dXK2SkS8BHXMmA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@tauri-apps/cli-linux-x64-musl@2.0.0': '@tauri-apps/cli-linux-x64-musl@2.0.2':
resolution: {integrity: sha512-9Eso/8wbsWbOyd9PZEIzN/48ZQJrUGQqGZtglcjUku0lO76mnX0fOnit4nQ57Oj0wezJPhv4mgSseG1OsTIVzw==} resolution: {integrity: sha512-h5miE2mctgaQNn/BbG9o1pnJcrx+VGBi2A6JFqGu934lFgSV5+s28M8Gc8AF2JgFH4hQV4IuMkeSw8Chu5Dodg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@tauri-apps/cli-win32-arm64-msvc@2.0.0': '@tauri-apps/cli-win32-arm64-msvc@2.0.2':
resolution: {integrity: sha512-ky8vWAuDUf8WGt9+a0G/EbU0OhdIkogelh9qjIYGHbyEYAJqXfN5P40aHUEg3y8ngQ0YGwRX5ePsQsSZiiR5PQ==} resolution: {integrity: sha512-2b8oO0+dYonahG5PfA/zoq0zlafLclfmXgqoWDZ++UiPtQHJNpNeEQ8GWbSFKGHQ494Jo6jHvazOojGRE1kqAg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@tauri-apps/cli-win32-ia32-msvc@2.0.0': '@tauri-apps/cli-win32-ia32-msvc@2.0.2':
resolution: {integrity: sha512-uD45cLZ/EBaT8o4a27tHW7t5UKFplnvDLt/uSUaCpJ3NyOTV6nMXOUrJBe+hH9hSBohqNAF7LEyYo1p932DWFg==} resolution: {integrity: sha512-axgICLunFi0To3EibdCBgbST5RocsSmtM4c04+CbcX8WQQosJ9ziWlCSrrOTRr+gJERAMSvEyVUS98f6bWMw9A==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@tauri-apps/cli-win32-x64-msvc@2.0.0': '@tauri-apps/cli-win32-x64-msvc@2.0.2':
resolution: {integrity: sha512-oFlo14YMsvyhJHmmHgRuOpJ1L9w15193c1Nfj1DksS2LHj6tLzirI7YrAF9inY/XjHFjNHzYPmBpABibkf/9wQ==} resolution: {integrity: sha512-JR17cM6+DyExZRgpXr2/DdqvcFYi/EKvQt8dI5R1/uQoesWd8jeNnrU7c1FG1Zmw9+pTzDztsNqEKsrNq2sNIg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@tauri-apps/cli@2.0.0': '@tauri-apps/cli@2.0.2':
resolution: {integrity: sha512-xxmPllRa6w/LRRcPczST3yHrYoi8l6ZZmzwabEmM0cgDdhVDmX+Y4oDJkiKD+8cVdxwwEzIuIKuaCwsX8iNsgA==} resolution: {integrity: sha512-R4ontHZvXORArERAHIidp5zRfZEshZczTiK+poslBv7AGKpQZoMw+E49zns7mOmP64i2Cq9Ci0pJvi4Rm8Okzw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
hasBin: true hasBin: true
@@ -1517,8 +1517,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
caniuse-lite@1.0.30001666: caniuse-lite@1.0.30001667:
resolution: {integrity: sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==} resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==}
chalk@2.4.2: chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
@@ -1595,8 +1595,8 @@ packages:
eastasianwidth@0.2.0: eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
electron-to-chromium@1.5.31: electron-to-chromium@1.5.33:
resolution: {integrity: sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==} resolution: {integrity: sha512-+cYTcFB1QqD4j4LegwLfpCNxifb6dDFUAwk6RsLusCwIaZI6or2f+q8rs5tTB2YC53HhOlIbEaqHMAAC8IOIwA==}
embla-carousel-react@8.3.0: embla-carousel-react@8.3.0:
resolution: {integrity: sha512-P1FlinFDcIvggcErRjNuVqnUR8anyo8vLMIH8Rthgofw7Nj8qTguCa2QjFAbzxAUTQTPNNjNL7yt0BGGinVdFw==} resolution: {integrity: sha512-P1FlinFDcIvggcErRjNuVqnUR8anyo8vLMIH8Rthgofw7Nj8qTguCa2QjFAbzxAUTQTPNNjNL7yt0BGGinVdFw==}
@@ -1694,8 +1694,8 @@ packages:
globrex@0.1.2: globrex@0.1.2:
resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==}
goober@2.1.14: goober@2.1.15:
resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==} resolution: {integrity: sha512-LP0xChUqgLlr5ORa1m4LobVy++/dhP4Kta2gVla9i2pc30XvtpEFrye4JtcD265g1tEFLOjYIQEiTa+9bGGQ/g==}
peerDependencies: peerDependencies:
csstype: ^3.0.10 csstype: ^3.0.10
@@ -1717,8 +1717,8 @@ packages:
i18next-resources-to-backend@1.2.1: i18next-resources-to-backend@1.2.1:
resolution: {integrity: sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw==} resolution: {integrity: sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw==}
i18next@23.15.1: i18next@23.15.2:
resolution: {integrity: sha512-wB4abZ3uK7EWodYisHl/asf8UYEhrI/vj/8aoSsrj/ZDxj4/UXPOa1KvFt1Fq5hkUHquNqwFlDprmjZ8iySgYA==} resolution: {integrity: sha512-zcPSWzCvw6uKnuYHIqs4W7hTuB9e3AFcSdZgvCWoPXIZsBjBd4djN2/2uOHIB+1DFFkQnMBXvhNg7J3WyCuywQ==}
immer@10.1.1: immer@10.1.1:
resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==}
@@ -2152,8 +2152,8 @@ packages:
tailwind-gradient-mask-image@1.2.0: tailwind-gradient-mask-image@1.2.0:
resolution: {integrity: sha512-tUJaGhvqbJFiVKJu6EU5n//KvGdVvY3L3VOFNqjztk13+ifAk00pcSNHBTgHfUiBGOEzDn0gFRbSmsftUV1lXA==} resolution: {integrity: sha512-tUJaGhvqbJFiVKJu6EU5n//KvGdVvY3L3VOFNqjztk13+ifAk00pcSNHBTgHfUiBGOEzDn0gFRbSmsftUV1lXA==}
tailwind-merge@2.5.2: tailwind-merge@2.5.3:
resolution: {integrity: sha512-kjEBm+pvD+6eAwzJL2Bi+02/9LFLal1Gs61+QB7HvTfQQ0aXwC5LGT8PEt1gS0CWKktKe6ysPTAy3cBC5MeiIg==} resolution: {integrity: sha512-d9ZolCAIzom1nf/5p4LdD5zvjmgSxY0BGgdSvmXIoMYAiPdAW/dSpP7joCDYFY7r/HkEa2qmPtkgsu0xjQeQtw==}
tailwind-scrollbar@3.1.0: tailwind-scrollbar@3.1.0:
resolution: {integrity: sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==} resolution: {integrity: sha512-pmrtDIZeHyu2idTejfV59SbaJyvp1VRjYxAjZBH0jnyrPRo6HL1kD5Glz8VPagasqr6oAx6M05+Tuw429Z8jxg==}
@@ -2223,8 +2223,8 @@ packages:
types-react@19.0.0-rc.1: types-react@19.0.0-rc.1:
resolution: {integrity: sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==} resolution: {integrity: sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==}
typescript@5.6.2: typescript@5.6.3:
resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
engines: {node: '>=14.17'} engines: {node: '>=14.17'}
hasBin: true hasBin: true
@@ -2742,19 +2742,19 @@ snapshots:
'@floating-ui/utils@0.2.8': {} '@floating-ui/utils@0.2.8': {}
'@getalby/bitcoin-connect-react@3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.2)': '@getalby/bitcoin-connect-react@3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.3)':
dependencies: dependencies:
'@getalby/bitcoin-connect': 3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.2) '@getalby/bitcoin-connect': 3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.3)
react: 19.0.0-rc-d025ddd3-20240722 react: 19.0.0-rc-d025ddd3-20240722
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
- immer - immer
- typescript - typescript
'@getalby/bitcoin-connect@3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.2)': '@getalby/bitcoin-connect@3.6.2(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)(typescript@5.6.3)':
dependencies: dependencies:
'@getalby/lightning-tools': 5.0.3 '@getalby/lightning-tools': 5.0.3
'@getalby/sdk': 3.7.1(typescript@5.6.2) '@getalby/sdk': 3.7.1(typescript@5.6.3)
'@lightninglabs/lnc-web': 0.3.1-alpha '@lightninglabs/lnc-web': 0.3.1-alpha
qrcode-generator: 1.4.4 qrcode-generator: 1.4.4
zustand: 4.5.5(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1) zustand: 4.5.5(immer@10.1.1)(react@19.0.0-rc-d025ddd3-20240722)(types-react@19.0.0-rc.1)
@@ -2766,10 +2766,10 @@ snapshots:
'@getalby/lightning-tools@5.0.3': {} '@getalby/lightning-tools@5.0.3': {}
'@getalby/sdk@3.7.1(typescript@5.6.2)': '@getalby/sdk@3.7.1(typescript@5.6.3)':
dependencies: dependencies:
eventemitter3: 5.0.1 eventemitter3: 5.0.1
nostr-tools: 1.17.0(typescript@5.6.2) nostr-tools: 1.17.0(typescript@5.6.3)
transitivePeerDependencies: transitivePeerDependencies:
- typescript - typescript
@@ -3255,7 +3255,7 @@ snapshots:
postcss-selector-parser: 6.0.10 postcss-selector-parser: 6.0.10
tailwindcss: 3.4.13 tailwindcss: 3.4.13
'@tanstack/history@1.58.15': {} '@tanstack/history@1.61.1': {}
'@tanstack/query-core@5.59.0': {} '@tanstack/query-core@5.59.0': {}
@@ -3268,16 +3268,16 @@ snapshots:
'@tanstack/query-core': 5.59.0 '@tanstack/query-core': 5.59.0
react: 19.0.0-rc-d025ddd3-20240722 react: 19.0.0-rc-d025ddd3-20240722
'@tanstack/react-router@1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)': '@tanstack/react-router@1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)':
dependencies: dependencies:
'@tanstack/history': 1.58.15 '@tanstack/history': 1.61.1
'@tanstack/react-store': 0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722) '@tanstack/react-store': 0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
react: 19.0.0-rc-d025ddd3-20240722 react: 19.0.0-rc-d025ddd3-20240722
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722) react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
tiny-invariant: 1.3.3 tiny-invariant: 1.3.3
tiny-warning: 1.0.3 tiny-warning: 1.0.3
optionalDependencies: optionalDependencies:
'@tanstack/router-generator': 1.58.12 '@tanstack/router-generator': 1.63.5
'@tanstack/react-store@0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)': '@tanstack/react-store@0.5.5(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)':
dependencies: dependencies:
@@ -3286,24 +3286,24 @@ snapshots:
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722) react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
use-sync-external-store: 1.2.2(react@19.0.0-rc-d025ddd3-20240722) use-sync-external-store: 1.2.2(react@19.0.0-rc-d025ddd3-20240722)
'@tanstack/router-devtools@1.58.16(@tanstack/react-router@1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722))(csstype@3.1.3)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)': '@tanstack/router-devtools@1.63.5(@tanstack/react-router@1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722))(csstype@3.1.3)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)':
dependencies: dependencies:
'@tanstack/react-router': 1.58.16(@tanstack/router-generator@1.58.12)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722) '@tanstack/react-router': 1.63.5(@tanstack/router-generator@1.63.5)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722)
clsx: 2.1.1 clsx: 2.1.1
goober: 2.1.14(csstype@3.1.3) goober: 2.1.15(csstype@3.1.3)
react: 19.0.0-rc-d025ddd3-20240722 react: 19.0.0-rc-d025ddd3-20240722
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722) react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
transitivePeerDependencies: transitivePeerDependencies:
- csstype - csstype
'@tanstack/router-generator@1.58.12': '@tanstack/router-generator@1.63.5':
dependencies: dependencies:
'@tanstack/virtual-file-routes': 1.56.0 '@tanstack/virtual-file-routes': 1.56.0
prettier: 3.3.3 prettier: 3.3.3
tsx: 4.19.1 tsx: 4.19.1
zod: 3.23.8 zod: 3.23.8
'@tanstack/router-plugin@1.58.12(vite@5.4.8)(webpack-sources@3.2.3)': '@tanstack/router-plugin@1.63.5(vite@5.4.8)(webpack-sources@3.2.3)':
dependencies: dependencies:
'@babel/core': 7.25.7 '@babel/core': 7.25.7
'@babel/generator': 7.25.7 '@babel/generator': 7.25.7
@@ -3313,7 +3313,7 @@ snapshots:
'@babel/template': 7.25.7 '@babel/template': 7.25.7
'@babel/traverse': 7.25.7 '@babel/traverse': 7.25.7
'@babel/types': 7.25.7 '@babel/types': 7.25.7
'@tanstack/router-generator': 1.58.12 '@tanstack/router-generator': 1.63.5
'@tanstack/virtual-file-routes': 1.56.0 '@tanstack/virtual-file-routes': 1.56.0
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
'@types/babel__generator': 7.6.8 '@types/babel__generator': 7.6.8
@@ -3333,94 +3333,94 @@ snapshots:
'@tanstack/virtual-file-routes@1.56.0': {} '@tanstack/virtual-file-routes@1.56.0': {}
'@tauri-apps/api@2.0.1': {} '@tauri-apps/api@2.0.2': {}
'@tauri-apps/cli-darwin-arm64@2.0.0': '@tauri-apps/cli-darwin-arm64@2.0.2':
optional: true optional: true
'@tauri-apps/cli-darwin-x64@2.0.0': '@tauri-apps/cli-darwin-x64@2.0.2':
optional: true optional: true
'@tauri-apps/cli-linux-arm-gnueabihf@2.0.0': '@tauri-apps/cli-linux-arm-gnueabihf@2.0.2':
optional: true optional: true
'@tauri-apps/cli-linux-arm64-gnu@2.0.0': '@tauri-apps/cli-linux-arm64-gnu@2.0.2':
optional: true optional: true
'@tauri-apps/cli-linux-arm64-musl@2.0.0': '@tauri-apps/cli-linux-arm64-musl@2.0.2':
optional: true optional: true
'@tauri-apps/cli-linux-x64-gnu@2.0.0': '@tauri-apps/cli-linux-x64-gnu@2.0.2':
optional: true optional: true
'@tauri-apps/cli-linux-x64-musl@2.0.0': '@tauri-apps/cli-linux-x64-musl@2.0.2':
optional: true optional: true
'@tauri-apps/cli-win32-arm64-msvc@2.0.0': '@tauri-apps/cli-win32-arm64-msvc@2.0.2':
optional: true optional: true
'@tauri-apps/cli-win32-ia32-msvc@2.0.0': '@tauri-apps/cli-win32-ia32-msvc@2.0.2':
optional: true optional: true
'@tauri-apps/cli-win32-x64-msvc@2.0.0': '@tauri-apps/cli-win32-x64-msvc@2.0.2':
optional: true optional: true
'@tauri-apps/cli@2.0.0': '@tauri-apps/cli@2.0.2':
optionalDependencies: optionalDependencies:
'@tauri-apps/cli-darwin-arm64': 2.0.0 '@tauri-apps/cli-darwin-arm64': 2.0.2
'@tauri-apps/cli-darwin-x64': 2.0.0 '@tauri-apps/cli-darwin-x64': 2.0.2
'@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0 '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.2
'@tauri-apps/cli-linux-arm64-gnu': 2.0.0 '@tauri-apps/cli-linux-arm64-gnu': 2.0.2
'@tauri-apps/cli-linux-arm64-musl': 2.0.0 '@tauri-apps/cli-linux-arm64-musl': 2.0.2
'@tauri-apps/cli-linux-x64-gnu': 2.0.0 '@tauri-apps/cli-linux-x64-gnu': 2.0.2
'@tauri-apps/cli-linux-x64-musl': 2.0.0 '@tauri-apps/cli-linux-x64-musl': 2.0.2
'@tauri-apps/cli-win32-arm64-msvc': 2.0.0 '@tauri-apps/cli-win32-arm64-msvc': 2.0.2
'@tauri-apps/cli-win32-ia32-msvc': 2.0.0 '@tauri-apps/cli-win32-ia32-msvc': 2.0.2
'@tauri-apps/cli-win32-x64-msvc': 2.0.0 '@tauri-apps/cli-win32-x64-msvc': 2.0.2
'@tauri-apps/plugin-clipboard-manager@2.0.0': '@tauri-apps/plugin-clipboard-manager@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-dialog@2.0.0': '@tauri-apps/plugin-dialog@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-fs@2.0.0': '@tauri-apps/plugin-fs@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-http@2.0.0': '@tauri-apps/plugin-http@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-os@2.0.0': '@tauri-apps/plugin-os@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-process@2.0.0': '@tauri-apps/plugin-process@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-shell@2.0.0': '@tauri-apps/plugin-shell@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-store@2.0.0': '@tauri-apps/plugin-store@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-updater@2.0.0': '@tauri-apps/plugin-updater@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-upload@2.0.0': '@tauri-apps/plugin-upload@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@tauri-apps/plugin-window-state@2.0.0': '@tauri-apps/plugin-window-state@2.0.0':
dependencies: dependencies:
'@tauri-apps/api': 2.0.1 '@tauri-apps/api': 2.0.2
'@types/babel__core@7.20.5': '@types/babel__core@7.20.5':
dependencies: dependencies:
@@ -3514,7 +3514,7 @@ snapshots:
autoprefixer@10.4.20(postcss@8.4.47): autoprefixer@10.4.20(postcss@8.4.47):
dependencies: dependencies:
browserslist: 4.24.0 browserslist: 4.24.0
caniuse-lite: 1.0.30001666 caniuse-lite: 1.0.30001667
fraction.js: 4.3.7 fraction.js: 4.3.7
normalize-range: 0.1.2 normalize-range: 0.1.2
picocolors: 1.1.0 picocolors: 1.1.0
@@ -3560,14 +3560,14 @@ snapshots:
browserslist@4.24.0: browserslist@4.24.0:
dependencies: dependencies:
caniuse-lite: 1.0.30001666 caniuse-lite: 1.0.30001667
electron-to-chromium: 1.5.31 electron-to-chromium: 1.5.33
node-releases: 2.0.18 node-releases: 2.0.18
update-browserslist-db: 1.1.1(browserslist@4.24.0) update-browserslist-db: 1.1.1(browserslist@4.24.0)
camelcase-css@2.0.1: {} camelcase-css@2.0.1: {}
caniuse-lite@1.0.30001666: {} caniuse-lite@1.0.30001667: {}
chalk@2.4.2: chalk@2.4.2:
dependencies: dependencies:
@@ -3636,7 +3636,7 @@ snapshots:
eastasianwidth@0.2.0: {} eastasianwidth@0.2.0: {}
electron-to-chromium@1.5.31: {} electron-to-chromium@1.5.33: {}
embla-carousel-react@8.3.0(react@19.0.0-rc-d025ddd3-20240722): embla-carousel-react@8.3.0(react@19.0.0-rc-d025ddd3-20240722):
dependencies: dependencies:
@@ -3770,7 +3770,7 @@ snapshots:
globrex@0.1.2: {} globrex@0.1.2: {}
goober@2.1.14(csstype@3.1.3): goober@2.1.15(csstype@3.1.3):
dependencies: dependencies:
csstype: 3.1.3 csstype: 3.1.3
@@ -3790,7 +3790,7 @@ snapshots:
dependencies: dependencies:
'@babel/runtime': 7.25.7 '@babel/runtime': 7.25.7
i18next@23.15.1: i18next@23.15.2:
dependencies: dependencies:
'@babel/runtime': 7.25.7 '@babel/runtime': 7.25.7
@@ -3900,7 +3900,7 @@ snapshots:
normalize-range@0.1.2: {} normalize-range@0.1.2: {}
nostr-tools@1.17.0(typescript@5.6.2): nostr-tools@1.17.0(typescript@5.6.3):
dependencies: dependencies:
'@noble/ciphers': 0.2.0 '@noble/ciphers': 0.2.0
'@noble/curves': 1.1.0 '@noble/curves': 1.1.0
@@ -3909,9 +3909,9 @@ snapshots:
'@scure/bip32': 1.3.1 '@scure/bip32': 1.3.1
'@scure/bip39': 1.2.1 '@scure/bip39': 1.2.1
optionalDependencies: optionalDependencies:
typescript: 5.6.2 typescript: 5.6.3
nostr-tools@2.7.2(typescript@5.6.2): nostr-tools@2.7.2(typescript@5.6.3):
dependencies: dependencies:
'@noble/ciphers': 0.5.3 '@noble/ciphers': 0.5.3
'@noble/curves': 1.2.0 '@noble/curves': 1.2.0
@@ -3921,7 +3921,7 @@ snapshots:
'@scure/bip39': 1.2.1 '@scure/bip39': 1.2.1
optionalDependencies: optionalDependencies:
nostr-wasm: 0.1.0 nostr-wasm: 0.1.0
typescript: 5.6.2 typescript: 5.6.3
nostr-wasm@0.1.0: nostr-wasm@0.1.0:
optional: true optional: true
@@ -4017,11 +4017,11 @@ snapshots:
dependencies: dependencies:
react: 19.0.0-rc-d025ddd3-20240722 react: 19.0.0-rc-d025ddd3-20240722
react-i18next@15.0.2(i18next@23.15.1)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722): react-i18next@15.0.2(i18next@23.15.2)(react-dom@19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722))(react@19.0.0-rc-d025ddd3-20240722):
dependencies: dependencies:
'@babel/runtime': 7.25.7 '@babel/runtime': 7.25.7
html-parse-stringify: 3.0.1 html-parse-stringify: 3.0.1
i18next: 23.15.1 i18next: 23.15.2
react: 19.0.0-rc-d025ddd3-20240722 react: 19.0.0-rc-d025ddd3-20240722
optionalDependencies: optionalDependencies:
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722) react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
@@ -4170,7 +4170,7 @@ snapshots:
tailwind-gradient-mask-image@1.2.0: {} tailwind-gradient-mask-image@1.2.0: {}
tailwind-merge@2.5.2: {} tailwind-merge@2.5.3: {}
tailwind-scrollbar@3.1.0(tailwindcss@3.4.13): tailwind-scrollbar@3.1.0(tailwindcss@3.4.13):
dependencies: dependencies:
@@ -4229,9 +4229,9 @@ snapshots:
ts-interface-checker@0.1.13: {} ts-interface-checker@0.1.13: {}
tsconfck@3.1.3(typescript@5.6.2): tsconfck@3.1.3(typescript@5.6.3):
optionalDependencies: optionalDependencies:
typescript: 5.6.2 typescript: 5.6.3
tslib@2.7.0: {} tslib@2.7.0: {}
@@ -4250,7 +4250,7 @@ snapshots:
dependencies: dependencies:
csstype: 3.1.3 csstype: 3.1.3
typescript@5.6.2: {} typescript@5.6.3: {}
unplugin@1.14.1(webpack-sources@3.2.3): unplugin@1.14.1(webpack-sources@3.2.3):
dependencies: dependencies:
@@ -4295,11 +4295,11 @@ snapshots:
react: 19.0.0-rc-d025ddd3-20240722 react: 19.0.0-rc-d025ddd3-20240722
react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722) react-dom: 19.0.0-rc-d025ddd3-20240722(react@19.0.0-rc-d025ddd3-20240722)
vite-tsconfig-paths@5.0.1(typescript@5.6.2)(vite@5.4.8): vite-tsconfig-paths@5.0.1(typescript@5.6.3)(vite@5.4.8):
dependencies: dependencies:
debug: 4.3.7 debug: 4.3.7
globrex: 0.1.2 globrex: 0.1.2
tsconfck: 3.1.3(typescript@5.6.2) tsconfck: 3.1.3(typescript@5.6.3)
optionalDependencies: optionalDependencies:
vite: 5.4.8 vite: 5.4.8
transitivePeerDependencies: transitivePeerDependencies:

274
src-tauri/Cargo.lock generated
View File

@@ -54,9 +54,9 @@ dependencies = [
[[package]] [[package]]
name = "addr2line" name = "addr2line"
version = "0.24.1" version = "0.24.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
dependencies = [ dependencies = [
"gimli", "gimli",
] ]
@@ -100,18 +100,6 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289" checksum = "0453232ace82dee0dd0b4c87a59bd90f7b53b314f3e0f61fe2ee7c8a16482289"
[[package]]
name = "ahash"
version = "0.8.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
dependencies = [
"cfg-if",
"once_cell",
"version_check",
"zerocopy",
]
[[package]] [[package]]
name = "aho-corasick" name = "aho-corasick"
version = "1.1.3" version = "1.1.3"
@@ -496,7 +484,7 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f" checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f"
dependencies = [ dependencies = [
"bitcoin-internals", "bitcoin-internals 0.3.0",
"bitcoin_hashes 0.14.0", "bitcoin_hashes 0.14.0",
] ]
@@ -526,11 +514,11 @@ checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d"
[[package]] [[package]]
name = "bip39" name = "bip39"
version = "2.0.0" version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f" checksum = "33415e24172c1b7d6066f6d999545375ab8e1d95421d6784bdfff9496f292387"
dependencies = [ dependencies = [
"bitcoin_hashes 0.11.0", "bitcoin_hashes 0.13.0",
"serde", "serde",
"unicode-normalization", "unicode-normalization",
] ]
@@ -549,16 +537,22 @@ checksum = "0032b0e8ead7074cda7fc4f034409607e3f03a6f71d66ade8a307f79b4d99e73"
dependencies = [ dependencies = [
"base58ck", "base58ck",
"bech32", "bech32",
"bitcoin-internals", "bitcoin-internals 0.3.0",
"bitcoin-io", "bitcoin-io",
"bitcoin-units", "bitcoin-units",
"bitcoin_hashes 0.14.0", "bitcoin_hashes 0.14.0",
"hex-conservative", "hex-conservative 0.2.1",
"hex_lit", "hex_lit",
"secp256k1", "secp256k1",
"serde", "serde",
] ]
[[package]]
name = "bitcoin-internals"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb"
[[package]] [[package]]
name = "bitcoin-internals" name = "bitcoin-internals"
version = "0.3.0" version = "0.3.0"
@@ -580,15 +574,19 @@ version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2" checksum = "5285c8bcaa25876d07f37e3d30c303f2609179716e11d688f51e8f1fe70063e2"
dependencies = [ dependencies = [
"bitcoin-internals", "bitcoin-internals 0.3.0",
"serde", "serde",
] ]
[[package]] [[package]]
name = "bitcoin_hashes" name = "bitcoin_hashes"
version = "0.11.0" version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4" checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b"
dependencies = [
"bitcoin-internals 0.2.0",
"hex-conservative 0.1.2",
]
[[package]] [[package]]
name = "bitcoin_hashes" name = "bitcoin_hashes"
@@ -597,7 +595,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16" checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16"
dependencies = [ dependencies = [
"bitcoin-io", "bitcoin-io",
"hex-conservative", "hex-conservative 0.2.1",
"serde", "serde",
] ]
@@ -671,7 +669,7 @@ dependencies = [
[[package]] [[package]]
name = "border" name = "border"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#c01421cdd17334fd00dad77700fc7b84d19fc285" source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#8c770af8cecb1b88dcd4b61f3878aa4079e336c5"
dependencies = [ dependencies = [
"cocoa 0.25.0", "cocoa 0.25.0",
"color", "color",
@@ -819,9 +817,9 @@ dependencies = [
[[package]] [[package]]
name = "cc" name = "cc"
version = "1.1.24" version = "1.1.28"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812acba72f0a070b003d3697490d2b55b837230ae7c6c6497f05cc2ddbb8d938" checksum = "2e80e3b6a3ab07840e1cae9b0666a63970dc28e8ed5ffbcdacbfc760c281bfc1"
dependencies = [ dependencies = [
"jobserver", "jobserver",
"libc", "libc",
@@ -987,7 +985,7 @@ dependencies = [
[[package]] [[package]]
name = "color" name = "color"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#c01421cdd17334fd00dad77700fc7b84d19fc285" source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#8c770af8cecb1b88dcd4b61f3878aa4079e336c5"
dependencies = [ dependencies = [
"cocoa 0.25.0", "cocoa 0.25.0",
"objc", "objc",
@@ -1730,6 +1728,12 @@ version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "foldhash"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f81ec6369c545a7d40e4589b5597581fa1c441fe1cce96dd1de43159910a36a2"
[[package]] [[package]]
name = "foreign-types" name = "foreign-types"
version = "0.3.2" version = "0.3.2"
@@ -1803,9 +1807,9 @@ dependencies = [
[[package]] [[package]]
name = "futures" name = "futures"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
dependencies = [ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
@@ -1818,9 +1822,9 @@ dependencies = [
[[package]] [[package]]
name = "futures-channel" name = "futures-channel"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-sink", "futures-sink",
@@ -1828,15 +1832,15 @@ dependencies = [
[[package]] [[package]]
name = "futures-core" name = "futures-core"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
[[package]] [[package]]
name = "futures-executor" name = "futures-executor"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-task", "futures-task",
@@ -1845,9 +1849,9 @@ dependencies = [
[[package]] [[package]]
name = "futures-io" name = "futures-io"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
[[package]] [[package]]
name = "futures-lite" name = "futures-lite"
@@ -1864,9 +1868,9 @@ dependencies = [
[[package]] [[package]]
name = "futures-macro" name = "futures-macro"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@@ -1875,21 +1879,21 @@ dependencies = [
[[package]] [[package]]
name = "futures-sink" name = "futures-sink"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
[[package]] [[package]]
name = "futures-task" name = "futures-task"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
[[package]] [[package]]
name = "futures-util" name = "futures-util"
version = "0.3.30" version = "0.3.31"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
dependencies = [ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
@@ -2077,9 +2081,9 @@ dependencies = [
[[package]] [[package]]
name = "gimli" name = "gimli"
version = "0.31.0" version = "0.31.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
[[package]] [[package]]
name = "gio" name = "gio"
@@ -2276,7 +2280,7 @@ version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
dependencies = [ dependencies = [
"ahash 0.4.8", "ahash",
] ]
[[package]] [[package]]
@@ -2285,21 +2289,16 @@ version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
dependencies = [
"ahash 0.8.11",
"allocator-api2",
]
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.15.0" version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb"
dependencies = [
"allocator-api2",
"equivalent",
"foldhash",
]
[[package]] [[package]]
name = "heck" name = "heck"
@@ -2365,6 +2364,12 @@ version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hex-conservative"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20"
[[package]] [[package]]
name = "hex-conservative" name = "hex-conservative"
version = "0.2.1" version = "0.2.1"
@@ -2695,9 +2700,9 @@ dependencies = [
[[package]] [[package]]
name = "ipnet" name = "ipnet"
version = "2.10.0" version = "2.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708"
[[package]] [[package]]
name = "is-docker" name = "is-docker"
@@ -3072,11 +3077,11 @@ dependencies = [
[[package]] [[package]]
name = "lru" name = "lru"
version = "0.12.4" version = "0.12.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
dependencies = [ dependencies = [
"hashbrown 0.14.5", "hashbrown 0.15.0",
] ]
[[package]] [[package]]
@@ -3212,7 +3217,7 @@ dependencies = [
[[package]] [[package]]
name = "monitor" name = "monitor"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#c01421cdd17334fd00dad77700fc7b84d19fc285" source = "git+https://github.com/ahkohd/tauri-toolkit?branch=v2#8c770af8cecb1b88dcd4b61f3878aa4079e336c5"
dependencies = [ dependencies = [
"cocoa 0.25.0", "cocoa 0.25.0",
"core-foundation 0.9.4", "core-foundation 0.9.4",
@@ -3357,7 +3362,7 @@ checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
[[package]] [[package]]
name = "nostr" name = "nostr"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"aes", "aes",
"base64 0.22.1", "base64 0.22.1",
@@ -3387,7 +3392,7 @@ dependencies = [
[[package]] [[package]]
name = "nostr-database" name = "nostr-database"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"flatbuffers", "flatbuffers",
@@ -3401,7 +3406,7 @@ dependencies = [
[[package]] [[package]]
name = "nostr-lmdb" name = "nostr-lmdb"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"heed", "heed",
"nostr", "nostr",
@@ -3414,7 +3419,7 @@ dependencies = [
[[package]] [[package]]
name = "nostr-relay-builder" name = "nostr-relay-builder"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"async-utility", "async-utility",
"async-wsocket", "async-wsocket",
@@ -3429,7 +3434,7 @@ dependencies = [
[[package]] [[package]]
name = "nostr-relay-pool" name = "nostr-relay-pool"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"async-utility", "async-utility",
"async-wsocket", "async-wsocket",
@@ -3447,7 +3452,7 @@ dependencies = [
[[package]] [[package]]
name = "nostr-sdk" name = "nostr-sdk"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"async-utility", "async-utility",
"atomic-destructor", "atomic-destructor",
@@ -3467,7 +3472,7 @@ dependencies = [
[[package]] [[package]]
name = "nostr-signer" name = "nostr-signer"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"async-utility", "async-utility",
"nostr", "nostr",
@@ -3480,7 +3485,7 @@ dependencies = [
[[package]] [[package]]
name = "nostr-zapper" name = "nostr-zapper"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"nostr", "nostr",
@@ -3624,7 +3629,7 @@ dependencies = [
[[package]] [[package]]
name = "nwc" name = "nwc"
version = "0.35.0" version = "0.35.0"
source = "git+https://github.com/rust-nostr/nostr#a9d62917acd12d2b6108a2805971ea64400d593c" source = "git+https://github.com/rust-nostr/nostr#82f39b5655bd58f045194b14a2cda5ef119acef1"
dependencies = [ dependencies = [
"async-utility", "async-utility",
"nostr", "nostr",
@@ -3775,21 +3780,18 @@ dependencies = [
[[package]] [[package]]
name = "object" name = "object"
version = "0.36.4" version = "0.36.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e"
dependencies = [ dependencies = [
"memchr", "memchr",
] ]
[[package]] [[package]]
name = "once_cell" name = "once_cell"
version = "1.20.1" version = "1.20.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
dependencies = [
"portable-atomic",
]
[[package]] [[package]]
name = "opaque-debug" name = "opaque-debug"
@@ -4223,12 +4225,6 @@ dependencies = [
"universal-hash", "universal-hash",
] ]
[[package]]
name = "portable-atomic"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2"
[[package]] [[package]]
name = "powerfmt" name = "powerfmt"
version = "0.2.0" version = "0.2.0"
@@ -4302,9 +4298,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.86" version = "1.0.87"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" checksum = "b3e4daa0dcf6feba26f985457cdf104d4b4256fc5a09547140f3631bb076b19a"
dependencies = [ dependencies = [
"unicode-ident", "unicode-ident",
] ]
@@ -4805,9 +4801,9 @@ dependencies = [
[[package]] [[package]]
name = "rustls" name = "rustls"
version = "0.23.13" version = "0.23.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" checksum = "415d9944693cb90382053259f89fbb077ea730ad7273047ec63b19bc9b160ba8"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"ring", "ring",
@@ -4875,9 +4871,9 @@ dependencies = [
[[package]] [[package]]
name = "schannel" name = "schannel"
version = "0.1.24" version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" checksum = "01227be5826fa0690321a2ba6c5cd57a19cf3f6a09e76973b58e61de6ab9d1c1"
dependencies = [ dependencies = [
"windows-sys 0.59.0", "windows-sys 0.59.0",
] ]
@@ -5114,9 +5110,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_with" name = "serde_with"
version = "3.10.0" version = "3.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9720086b3357bcb44fce40117d769a4d068c70ecfa190850a980a71755f66fcc" checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"chrono", "chrono",
@@ -5132,9 +5128,9 @@ dependencies = [
[[package]] [[package]]
name = "serde_with_macros" name = "serde_with_macros"
version = "3.10.0" version = "3.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f1abbfe725f27678f4663bcacb75a83e829fd464c25d78dd038a3a29e307cec" checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d"
dependencies = [ dependencies = [
"darling", "darling",
"proc-macro2", "proc-macro2",
@@ -5545,9 +5541,9 @@ dependencies = [
[[package]] [[package]]
name = "tao" name = "tao"
version = "0.30.2" version = "0.30.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06e48d7c56b3f7425d061886e8ce3b6acfab1993682ed70bef50fd133d721ee6" checksum = "a0dbbebe82d02044dfa481adca1550d6dd7bd16e086bc34fa0fbecceb5a63751"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"cocoa 0.26.0", "cocoa 0.26.0",
@@ -5612,9 +5608,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
[[package]] [[package]]
name = "tauri" name = "tauri"
version = "2.0.0" version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c9c08beea86d5095b6f5fb1c788fe8759b23c3f71927c66a69e725a91d089cd" checksum = "5920aad0804ea5e86808d4b6e8753d3bcbae7efc8f4e41a4da00b45427559868"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"bytes", "bytes",
@@ -5664,9 +5660,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-build" name = "tauri-build"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93bb649a284aec2ab43e8df6831b8c8060d231ec8ddf05bf021d58cb67570e1f" checksum = "935f9b3c49b22b3e2e485a57f46d61cd1ae07b1cbb2ba87387a387caf2d8c4e7"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"cargo_toml", "cargo_toml",
@@ -5686,9 +5682,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-codegen" name = "tauri-codegen"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4511912612ba0da11aeb300e18e18b2c7067fd14aa886eac46bdcc43b4fa3ee" checksum = "95d7443dd4f0b597704b6a14b964ee2ed16e99928d8e6292ae9825f09fbcd30e"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"brotli", "brotli",
@@ -5713,9 +5709,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-macros" name = "tauri-macros"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62ee976578a14b779996d7b6879d7e625c8ce674bc87e223953664f37def2eef" checksum = "4d2c0963ccfc3f5194415f2cce7acc975942a8797fbabfb0aa1ed6f59326ae7f"
dependencies = [ dependencies = [
"heck 0.5.0", "heck 0.5.0",
"proc-macro2", "proc-macro2",
@@ -5743,9 +5739,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin" name = "tauri-plugin"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "774d084450b7ec8e445ad119079307f935b7bf3d736da139a8664eb1d4909aa5" checksum = "b2e6660a409963e4d57b9bfab4addd141eeff41bd3a7fb14e13004a832cf7ef6"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"glob", "glob",
@@ -5760,9 +5756,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-clipboard-manager" name = "tauri-plugin-clipboard-manager"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8336820003f8fac414d444a7aeeb9b927760b529e39736d3344852fd4ff776f0" checksum = "78b7d556886c15849198c0948fd7f4c880492f0461539176da0a8a70272e2904"
dependencies = [ dependencies = [
"arboard", "arboard",
"image", "image",
@@ -5792,9 +5788,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-dialog" name = "tauri-plugin-dialog"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6da13d0dd431efe6b5e40a3314d7a33d7bce8f8ed34e2bf044f95ccad82f10ec" checksum = "ddb2fe88b602461c118722c574e2775ab26a4e68886680583874b2f6520608b7"
dependencies = [ dependencies = [
"log", "log",
"raw-window-handle", "raw-window-handle",
@@ -5810,9 +5806,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-fs" name = "tauri-plugin-fs"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6ba59d7880ffdc24f72350b48bec374482803e167b7275655f6bd8426b7fc9c3" checksum = "ab300488ebec3487ca5f56289692e7e45feb07eea8d5e1dba497f7dc9dd9c407"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"dunce", "dunce",
@@ -5831,9 +5827,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-http" name = "tauri-plugin-http"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a7125717a0cb61603a4395e299c47516b5843d71ae17139e4c92a71fa013270" checksum = "784333f1632d96c94346e8145bfe52970923a38a0e6eacd3dccaa12289275acf"
dependencies = [ dependencies = [
"data-url", "data-url",
"http", "http",
@@ -5853,9 +5849,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-notification" name = "tauri-plugin-notification"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85e26a56dd9666275f43fbfd4b803e64a5d9ea39e0d1754f4bee87456af01e67" checksum = "ef492a2d19b6376bb4c9e0c4fab3f3bf8a220ea112d24f35027b737ff55de20c"
dependencies = [ dependencies = [
"log", "log",
"notify-rust", "notify-rust",
@@ -5872,9 +5868,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-os" name = "tauri-plugin-os"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fac65dc1cf2276651d6a53976a3be618434aacfd5a39eeecc4be9ea74e07f4fb" checksum = "fbc5f23a86f37687c7f4fecfdc706b279087bc44f7a46702f7307ff1551ee03a"
dependencies = [ dependencies = [
"gethostname 0.5.0", "gethostname 0.5.0",
"log", "log",
@@ -5905,9 +5901,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-process" name = "tauri-plugin-process"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73a682de610de60cfeea5212cbbaca9a6c25bd48854067f2aee3c27ee87ae65c" checksum = "ae06a00087c148962a52814a2d7265b1a0505bced5ffb74f8c284a5f96a4d03d"
dependencies = [ dependencies = [
"tauri", "tauri",
"tauri-plugin", "tauri-plugin",
@@ -5915,9 +5911,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-shell" name = "tauri-plugin-shell"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2929bb35edb7255949e0cbcb2285ff6b02371bf826ad03471077b6b3bf4e6d60" checksum = "371fb9aca2823990a2d0db7970573be5fdf07881fcaa2b835b29631feb84aec1"
dependencies = [ dependencies = [
"encoding_rs", "encoding_rs",
"log", "log",
@@ -5936,9 +5932,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-store" name = "tauri-plugin-store"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c824c56d35d3aeb97eda0f827c9c419d8fd153a2958f3f40e8e9f34ecc564e6d" checksum = "5058f179f7215390fc5a68eeffcb805b7e2681d6e817a5d08094fae7ab649e68"
dependencies = [ dependencies = [
"dunce", "dunce",
"log", "log",
@@ -5952,9 +5948,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-updater" name = "tauri-plugin-updater"
version = "2.0.1" version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67634d7fb3d5f4c7a85c35d1522c6c60d70b4b0d598c7e60bbcaddb853b970f6" checksum = "1dd3d2fe0f02bf52eebb5a9d23b987fffac6684646ab6fd683d706dafb18da87"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"dirs", "dirs",
@@ -5982,9 +5978,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-upload" name = "tauri-plugin-upload"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f650dfcbf1dd90936dac4c5676f4fe9bb501d5b9f561f4158141ff6abbf114f" checksum = "116754130d3f95cf73552a0723376186a8f21607ac5ff350980af87a0eccba73"
dependencies = [ dependencies = [
"futures-util", "futures-util",
"log", "log",
@@ -6001,9 +5997,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-plugin-window-state" name = "tauri-plugin-window-state"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "47f5bdd802302c72e6e52f786d4d7abc976a8a7938b05c121ae689106bcd4a40" checksum = "fd1cef203a15b4772898e7bc8e57c1f34696e39848987dfcd294d51ba0525650"
dependencies = [ dependencies = [
"bitflags 2.6.0", "bitflags 2.6.0",
"log", "log",
@@ -6016,9 +6012,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-runtime" name = "tauri-runtime"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2570e1f33f332a2d2d9967ebb3903bc4e1f92b9c47e4d1b302c10ea4153fcdbb" checksum = "af12ad1af974b274ef1d32a94e6eba27a312b429ef28fcb98abc710df7f9151d"
dependencies = [ dependencies = [
"dpi", "dpi",
"gtk", "gtk",
@@ -6035,9 +6031,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-runtime-wry" name = "tauri-runtime-wry"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8147d8f9ed418d83a90af3d64fbdca5e0e924ae28e5351da88f9568169db8665" checksum = "e45e88aa0b11b302d836e6ea3e507a6359044c4a8bc86b865ba99868c695753d"
dependencies = [ dependencies = [
"gtk", "gtk",
"http", "http",
@@ -6089,9 +6085,9 @@ dependencies = [
[[package]] [[package]]
name = "tauri-utils" name = "tauri-utils"
version = "2.0.0" version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f87856e9d7fa91fd710362f3c73fccbf6bfd036934908791e65bd803d54dc8a8" checksum = "c38b0230d6880cf6dd07b6d7dd7789a0869f98ac12146e0d18d1c1049215a045"
dependencies = [ dependencies = [
"brotli", "brotli",
"cargo_metadata", "cargo_metadata",

View File

@@ -5,7 +5,7 @@ use specta::Type;
use std::{str::FromStr, time::Duration}; use std::{str::FromStr, time::Duration};
use tauri::State; use tauri::State;
use crate::common::{create_tags, parse_event, process_event, Meta}; use crate::common::{create_tags, get_latest_event, parse_event, process_event, Meta};
use crate::{Nostr, DEFAULT_DIFFICULTY, FETCH_LIMIT}; use crate::{Nostr, DEFAULT_DIFFICULTY, FETCH_LIMIT};
#[derive(Debug, Clone, Serialize, Type)] #[derive(Debug, Clone, Serialize, Type)]
@@ -30,7 +30,7 @@ pub async fn get_event(id: String, state: State<'_, Nostr>) -> Result<RichEvent,
match client.database().query(vec![filter.clone()]).await { match client.database().query(vec![filter.clone()]).await {
Ok(events) => { Ok(events) => {
if let Some(event) = events.first() { if let Some(event) = get_latest_event(&events) {
let raw = event.as_json(); let raw = event.as_json();
let parsed = if event.kind == Kind::TextNote { let parsed = if event.kind == Kind::TextNote {
Some(parse_event(&event.content).await) Some(parse_event(&event.content).await)
@@ -40,26 +40,25 @@ pub async fn get_event(id: String, state: State<'_, Nostr>) -> Result<RichEvent,
Ok(RichEvent { raw, parsed }) Ok(RichEvent { raw, parsed })
} else { } else {
println!("Not found, getting event from relays...");
match client match client
.get_events_of( .stream_events_of(vec![filter], Some(Duration::from_secs(10)))
vec![filter],
EventSource::relays(Some(Duration::from_secs(5))),
)
.await .await
{ {
Ok(events) => { Ok(mut rx) => {
if let Some(event) = events.first() { let mut raw: String = String::new();
let raw = event.as_json(); let mut parsed: Option<Meta> = None;
let parsed = if event.kind == Kind::TextNote {
while let Some(event) = rx.next().await {
raw = event.as_json();
parsed = if event.kind == Kind::TextNote {
Some(parse_event(&event.content).await) Some(parse_event(&event.content).await)
} else { } else {
None None
}; };
Ok(RichEvent { raw, parsed })
} else {
Err("Cannot found this event with current relay list".into())
} }
Ok(RichEvent { raw, parsed })
} }
Err(err) => Err(err.to_string()), Err(err) => Err(err.to_string()),
} }
@@ -548,31 +547,11 @@ pub async fn user_to_bech32(user: String, state: State<'_, Nostr>) -> Result<Str
#[tauri::command] #[tauri::command]
#[specta::specta] #[specta::specta]
pub async fn search( pub async fn search(query: String, state: State<'_, Nostr>) -> Result<Vec<RichEvent>, String> {
query: String,
until: Option<String>,
state: State<'_, Nostr>,
) -> Result<Vec<RichEvent>, String> {
let client = &state.client; let client = &state.client;
let filter = Filter::new().search(query);
let timestamp = match until { match client.database().query(vec![filter]).await {
Some(str) => Timestamp::from_str(&str).map_err(|err| err.to_string())?,
None => Timestamp::now(),
};
let filter = Filter::new()
.kinds(vec![Kind::TextNote, Kind::Metadata])
.search(query)
.until(timestamp)
.limit(FETCH_LIMIT);
match client
.get_events_of(
vec![filter],
EventSource::both(Some(Duration::from_secs(5))),
)
.await
{
Ok(events) => Ok(process_event(client, events).await), Ok(events) => Ok(process_event(client, events).await),
Err(e) => Err(e.to_string()), Err(e) => Err(e.to_string()),
} }

View File

@@ -6,7 +6,10 @@ use std::{str::FromStr, time::Duration};
use tauri::{Emitter, Manager, State}; use tauri::{Emitter, Manager, State};
use tauri_specta::Event; use tauri_specta::Event;
use crate::{common::get_latest_event, NewSettings, Nostr, Settings}; use crate::{
common::{get_latest_event, process_event},
NewSettings, Nostr, RichEvent, Settings,
};
#[derive(Clone, Serialize, Deserialize, Type)] #[derive(Clone, Serialize, Deserialize, Type)]
pub struct Profile { pub struct Profile {
@@ -55,23 +58,23 @@ pub async fn get_profile(id: Option<String>, state: State<'_, Nostr>) -> Result<
Err("Parse metadata failed".into()) Err("Parse metadata failed".into())
} }
} else { } else {
println!("Not found, getting event from relays...");
match client match client
.get_events_of( .stream_events_of(vec![filter], Some(Duration::from_secs(10)))
vec![filter],
EventSource::relays(Some(Duration::from_secs(5))),
)
.await .await
{ {
Ok(events) => { Ok(mut rx) => {
if let Some(event) = get_latest_event(&events) { let mut metadata: String = Metadata::new().as_json();
if let Ok(metadata) = Metadata::from_json(&event.content) {
Ok(metadata.as_json()) while let Some(event) = rx.next().await {
} else { println!("Event: {}", event.as_json());
Err("Parse metadata failed".into()) if let Ok(m) = Metadata::from_json(&event.content) {
metadata = m.as_json();
break;
} }
} else {
Ok(Metadata::new().as_json())
} }
Ok(metadata)
} }
Err(e) => Err(e.to_string()), Err(e) => Err(e.to_string()),
} }
@@ -106,7 +109,6 @@ pub async fn set_contact_list(
#[specta::specta] #[specta::specta]
pub async fn get_contact_list(state: State<'_, Nostr>) -> Result<Vec<String>, String> { pub async fn get_contact_list(state: State<'_, Nostr>) -> Result<Vec<String>, String> {
let contact_list = state.contact_list.lock().await.clone(); let contact_list = state.contact_list.lock().await.clone();
println!("Total contacts: {}", contact_list.len());
let vec: Vec<String> = contact_list let vec: Vec<String> = contact_list
.into_iter() .into_iter()
.map(|f| f.public_key.to_hex()) .map(|f| f.public_key.to_hex())
@@ -255,13 +257,7 @@ pub async fn get_group(id: String, state: State<'_, Nostr>) -> Result<String, St
let event_id = EventId::from_str(&id).map_err(|e| e.to_string())?; let event_id = EventId::from_str(&id).map_err(|e| e.to_string())?;
let filter = Filter::new().kind(Kind::FollowSet).id(event_id); let filter = Filter::new().kind(Kind::FollowSet).id(event_id);
match client match client.database().query(vec![filter]).await {
.get_events_of(
vec![filter],
EventSource::both(Some(Duration::from_secs(5))),
)
.await
{
Ok(events) => match get_latest_event(&events) { Ok(events) => match get_latest_event(&events) {
Some(ev) => Ok(ev.as_json()), Some(ev) => Ok(ev.as_json()),
None => Err("Not found.".to_string()), None => Err("Not found.".to_string()),
@@ -272,20 +268,14 @@ pub async fn get_group(id: String, state: State<'_, Nostr>) -> Result<String, St
#[tauri::command] #[tauri::command]
#[specta::specta] #[specta::specta]
pub async fn get_all_groups(state: State<'_, Nostr>) -> Result<Vec<String>, String> { pub async fn get_all_groups(state: State<'_, Nostr>) -> Result<Vec<RichEvent>, String> {
let client = &state.client; let client = &state.client;
let signer = client.signer().await.map_err(|e| e.to_string())?; let signer = client.signer().await.map_err(|e| e.to_string())?;
let public_key = signer.public_key().await.map_err(|e| e.to_string())?; let public_key = signer.public_key().await.map_err(|e| e.to_string())?;
let filter = Filter::new().kind(Kind::FollowSet).author(public_key); let filter = Filter::new().kind(Kind::FollowSet).author(public_key);
match client match client.database().query(vec![filter]).await {
.get_events_of(vec![filter], EventSource::Database) Ok(events) => Ok(process_event(client, events).await),
.await
{
Ok(events) => {
let data: Vec<String> = events.iter().map(|ev| ev.as_json()).collect();
Ok(data)
}
Err(e) => Err(e.to_string()), Err(e) => Err(e.to_string()),
} }
} }
@@ -347,13 +337,7 @@ pub async fn get_interest(id: String, state: State<'_, Nostr>) -> Result<String,
.kinds(vec![Kind::Interests, Kind::InterestSet]) .kinds(vec![Kind::Interests, Kind::InterestSet])
.id(event_id); .id(event_id);
match client match client.database().query(vec![filter]).await {
.get_events_of(
vec![filter],
EventSource::both(Some(Duration::from_secs(5))),
)
.await
{
Ok(events) => match get_latest_event(&events) { Ok(events) => match get_latest_event(&events) {
Some(ev) => Ok(ev.as_json()), Some(ev) => Ok(ev.as_json()),
None => Err("Not found.".to_string()), None => Err("Not found.".to_string()),
@@ -364,7 +348,7 @@ pub async fn get_interest(id: String, state: State<'_, Nostr>) -> Result<String,
#[tauri::command] #[tauri::command]
#[specta::specta] #[specta::specta]
pub async fn get_all_interests(state: State<'_, Nostr>) -> Result<Vec<String>, String> { pub async fn get_all_interests(state: State<'_, Nostr>) -> Result<Vec<RichEvent>, String> {
let client = &state.client; let client = &state.client;
let signer = client.signer().await.map_err(|e| e.to_string())?; let signer = client.signer().await.map_err(|e| e.to_string())?;
let public_key = signer.public_key().await.map_err(|e| e.to_string())?; let public_key = signer.public_key().await.map_err(|e| e.to_string())?;
@@ -372,14 +356,8 @@ pub async fn get_all_interests(state: State<'_, Nostr>) -> Result<Vec<String>, S
.kinds(vec![Kind::InterestSet, Kind::Interests]) .kinds(vec![Kind::InterestSet, Kind::Interests])
.author(public_key); .author(public_key);
match client match client.database().query(vec![filter]).await {
.get_events_of(vec![filter], EventSource::Database) Ok(events) => Ok(process_event(client, events).await),
.await
{
Ok(events) => {
let data: Vec<String> = events.iter().map(|ev| ev.as_json()).collect();
Ok(data)
}
Err(e) => Err(e.to_string()), Err(e) => Err(e.to_string()),
} }
} }

View File

@@ -182,7 +182,7 @@ async getGroup(id: string) : Promise<Result<string, string>> {
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getAllGroups() : Promise<Result<string[], string>> { async getAllGroups() : Promise<Result<RichEvent[], string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_all_groups") }; return { status: "ok", data: await TAURI_INVOKE("get_all_groups") };
} catch (e) { } catch (e) {
@@ -206,7 +206,7 @@ async getInterest(id: string) : Promise<Result<string, string>> {
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async getAllInterests() : Promise<Result<string[], string>> { async getAllInterests() : Promise<Result<RichEvent[], string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("get_all_interests") }; return { status: "ok", data: await TAURI_INVOKE("get_all_interests") };
} catch (e) { } catch (e) {
@@ -398,9 +398,9 @@ async requestDelete(id: string) : Promise<Result<null, string>> {
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };
} }
}, },
async search(query: string, until: string | null) : Promise<Result<RichEvent[], string>> { async search(query: string) : Promise<Result<RichEvent[], string>> {
try { try {
return { status: "ok", data: await TAURI_INVOKE("search", { query, until }) }; return { status: "ok", data: await TAURI_INVOKE("search", { query }) };
} catch (e) { } catch (e) {
if(e instanceof Error) throw e; if(e instanceof Error) throw e;
else return { status: "error", error: e as any }; else return { status: "error", error: e as any };

View File

@@ -2,7 +2,11 @@ import { replyTime } from "@/commons";
import { Note, Spinner } from "@/components"; import { Note, Spinner } from "@/components";
import { User } from "@/components/user"; import { User } from "@/components/user";
import { LumeWindow, useEvent } from "@/system"; import { LumeWindow, useEvent } from "@/system";
import { memo } from "react"; import { nip19 } from "nostr-tools";
import { type ReactNode, memo, useMemo } from "react";
import reactStringReplace from "react-string-replace";
import { Hashtag } from "./hashtag";
import { MentionUser } from "./user";
export const MentionNote = memo(function MentionNote({ export const MentionNote = memo(function MentionNote({
eventId, eventId,
@@ -36,9 +40,11 @@ export const MentionNote = memo(function MentionNote({
/> />
</User.Root> </User.Root>
<div className="pl-2 inline select-text text-balance content-break overflow-hidden"> <div className="pl-2 inline select-text text-balance content-break overflow-hidden">
{event.content.length > 120 {event.content.length > 300 ? (
? `${event.content.substring(0, 120)}...` `${event.content.substring(0, 300)}...`
: event.content} ) : (
<Content text={event.content} className="inline" />
)}
</div> </div>
</div> </div>
<div className="flex-1 flex items-center justify-between"> <div className="flex-1 flex items-center justify-between">
@@ -66,3 +72,64 @@ export const MentionNote = memo(function MentionNote({
</div> </div>
); );
}); });
function Content({ text, className }: { text: string; className?: string }) {
const content = useMemo(() => {
let replacedText: ReactNode[] | string = text.trim();
const nostr = replacedText
.split(/\s+/)
.filter((w) => w.startsWith("nostr:"));
replacedText = reactStringReplace(text, /(https?:\/\/\S+)/g, (match, i) => (
<a
key={match + i}
href={match}
target="_blank"
rel="noreferrer"
className="text-blue-600 dark:text-blue-400 !underline"
>
{match}
</a>
));
replacedText = reactStringReplace(replacedText, /#(\w+)/g, (match, i) => (
<Hashtag key={match + i} tag={match} />
));
for (const word of nostr) {
const bech32 = word.replace("nostr:", "");
const data = nip19.decode(bech32);
switch (data.type) {
case "npub":
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<MentionUser key={match + i} pubkey={data.data} />
));
break;
case "nprofile":
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<MentionUser key={match + i} pubkey={data.data.pubkey} />
));
break;
default:
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<a
key={match + i}
href={`https://njump.me/${bech32}`}
target="_blank"
rel="noreferrer"
className="text-blue-600 dark:text-blue-400 !underline"
>
{match}
</a>
));
break;
}
}
return replacedText;
}, [text]);
return <div className={className}>{content}</div>;
}

View File

@@ -1,4 +1,5 @@
import { commands } from "@/commands.gen"; import { commands } from "@/commands.gen";
import { toLumeEvents } from "@/commons";
import { Spinner, User } from "@/components"; import { Spinner, User } from "@/components";
import { LumeWindow } from "@/system"; import { LumeWindow } from "@/system";
import type { LumeColumn, NostrEvent } from "@/types"; import type { LumeColumn, NostrEvent } from "@/types";
@@ -8,6 +9,7 @@ import { useQuery } from "@tanstack/react-query";
import { createLazyFileRoute } from "@tanstack/react-router"; import { createLazyFileRoute } from "@tanstack/react-router";
import { resolveResource } from "@tauri-apps/api/path"; import { resolveResource } from "@tauri-apps/api/path";
import { readTextFile } from "@tauri-apps/plugin-fs"; import { readTextFile } from "@tauri-apps/plugin-fs";
import { nanoid } from "nanoid";
import { useCallback } from "react"; import { useCallback } from "react";
export const Route = createLazyFileRoute("/columns/_layout/launchpad")({ export const Route = createLazyFileRoute("/columns/_layout/launchpad")({
@@ -101,7 +103,7 @@ function MyGroups() {
const res = await commands.getAllGroups(); const res = await commands.getAllGroups();
if (res.status === "ok") { if (res.status === "ok") {
const data = res.data.map((item) => JSON.parse(item) as NostrEvent); const data = toLumeEvents(res.data);
return data; return data;
} else { } else {
throw new Error(res.error); throw new Error(res.error);
@@ -118,6 +120,7 @@ function MyGroups() {
(item: NostrEvent) => { (item: NostrEvent) => {
const name = const name =
item.tags.find((tag) => tag[0] === "title")?.[1] || "Unnamed"; item.tags.find((tag) => tag[0] === "title")?.[1] || "Unnamed";
const label = item.tags.find((tag) => tag[0] === "d")?.[1] || nanoid();
return ( return (
<div <div
@@ -144,7 +147,7 @@ function MyGroups() {
type="button" type="button"
onClick={() => onClick={() =>
LumeWindow.openColumn({ LumeWindow.openColumn({
label: name, label,
name, name,
url: `/columns/groups/${item.id}`, url: `/columns/groups/${item.id}`,
}) })
@@ -211,7 +214,7 @@ function MyInterests() {
const res = await commands.getAllInterests(); const res = await commands.getAllInterests();
if (res.status === "ok") { if (res.status === "ok") {
const data = res.data.map((item) => JSON.parse(item) as NostrEvent); const data = toLumeEvents(res.data);
return data; return data;
} else { } else {
throw new Error(res.error); throw new Error(res.error);
@@ -228,6 +231,8 @@ function MyInterests() {
(item: NostrEvent) => { (item: NostrEvent) => {
const name = const name =
item.tags.find((tag) => tag[0] === "title")?.[1] || "Unnamed"; item.tags.find((tag) => tag[0] === "title")?.[1] || "Unnamed";
const label =
item.tags.find((tag) => tag[0] === "label")?.[1] || nanoid();
return ( return (
<div <div
@@ -250,7 +255,7 @@ function MyInterests() {
type="button" type="button"
onClick={() => onClick={() =>
LumeWindow.openColumn({ LumeWindow.openColumn({
label: name, label,
name, name,
url: `/columns/interests/${item.id}`, url: `/columns/interests/${item.id}`,
}) })

View File

@@ -27,12 +27,18 @@ function Screen() {
switch (event.kind) { switch (event.kind) {
case Kind.Text: case Kind.Text:
return <TextNote key={event.id} event={event} className="mb-3" />; return (
<TextNote
key={event.id}
event={event}
className="border-b-[.5px] border-neutral-300 dark:border-neutral-700"
/>
);
case Kind.Metadata: case Kind.Metadata:
return ( return (
<div <div
key={event.id} key={event.id}
className="p-3 mb-3 bg-white dark:bg-black/20 rounded-xl shadow-primary dark:ring-1 dark:ring-white/5" className="p-3 border-b-[.5px] border-neutral-300 dark:border-neutral-700"
> >
<User.Provider pubkey={event.pubkey}> <User.Provider pubkey={event.pubkey}>
<User.Root className="flex flex-col w-full h-full gap-2"> <User.Root className="flex flex-col w-full h-full gap-2">
@@ -61,7 +67,13 @@ function Screen() {
</div> </div>
); );
default: default:
return <TextNote key={event.id} event={event} className="mb-3" />; return (
<TextNote
key={event.id}
event={event}
className="border-b-[.5px] border-neutral-300 dark:border-neutral-700"
/>
);
} }
}, },
[events], [events],
@@ -71,7 +83,7 @@ function Screen() {
startTransition(async () => { startTransition(async () => {
if (!query.length) return; if (!query.length) return;
const res = await commands.search(query, null); const res = await commands.search(query);
if (res.status === "ok") { if (res.status === "ok") {
const data = toLumeEvents(res.data); const data = toLumeEvents(res.data);
@@ -114,7 +126,7 @@ function Screen() {
scrollHideDelay={300} scrollHideDelay={300}
className="overflow-hidden size-full flex-1" className="overflow-hidden size-full flex-1"
> >
<ScrollArea.Viewport ref={ref} className="relative h-full px-3"> <ScrollArea.Viewport ref={ref} className="relative h-full">
<Virtualizer scrollRef={ref}> <Virtualizer scrollRef={ref}>
{isPending ? ( {isPending ? (
<div className="w-full h-[200px] flex gap-2 items-center justify-center"> <div className="w-full h-[200px] flex gap-2 items-center justify-center">

View File

@@ -1,12 +1,17 @@
import { commands } from "@/commands.gen"; import { commands } from "@/commands.gen";
import { replyTime, toLumeEvents } from "@/commons"; import { replyTime, toLumeEvents } from "@/commons";
import { Note, Spinner, User } from "@/components"; import { Note, Spinner, User } from "@/components";
import { Hashtag } from "@/components/note/mentions/hashtag";
import { MentionUser } from "@/components/note/mentions/user";
import { type LumeEvent, LumeWindow } from "@/system"; import { type LumeEvent, LumeWindow } from "@/system";
import { ColumnsPlusLeft } from "@phosphor-icons/react"; import { Kind } from "@/types";
import { ArrowRight } from "@phosphor-icons/react";
import * as ScrollArea from "@radix-ui/react-scroll-area"; import * as ScrollArea from "@radix-ui/react-scroll-area";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { createLazyFileRoute } from "@tanstack/react-router"; import { createLazyFileRoute } from "@tanstack/react-router";
import { memo, useRef } from "react"; import { nip19 } from "nostr-tools";
import { type ReactNode, memo, useMemo, useRef } from "react";
import reactStringReplace from "react-string-replace";
import { Virtualizer } from "virtua"; import { Virtualizer } from "virtua";
export const Route = createLazyFileRoute("/columns/_layout/stories")({ export const Route = createLazyFileRoute("/columns/_layout/stories")({
@@ -14,7 +19,7 @@ export const Route = createLazyFileRoute("/columns/_layout/stories")({
}); });
function Screen() { function Screen() {
const { contacts } = Route.useRouteContext(); const contacts = Route.useLoaderData();
const ref = useRef<HTMLDivElement>(null); const ref = useRef<HTMLDivElement>(null);
return ( return (
@@ -25,9 +30,15 @@ function Screen() {
> >
<ScrollArea.Viewport ref={ref} className="relative h-full px-3 pb-3"> <ScrollArea.Viewport ref={ref} className="relative h-full px-3 pb-3">
<Virtualizer scrollRef={ref} overscan={0}> <Virtualizer scrollRef={ref} overscan={0}>
{contacts.map((contact) => ( {!contacts ? (
<StoryItem key={contact} contact={contact} /> <div className="w-full h-24 flex items-center justify-center">
))} <Spinner className="size-4" />
</div>
) : (
contacts.map((contact) => (
<StoryItem key={contact} contact={contact} />
))
)}
</Virtualizer> </Virtualizer>
</ScrollArea.Viewport> </ScrollArea.Viewport>
<ScrollArea.Scrollbar <ScrollArea.Scrollbar
@@ -59,6 +70,7 @@ function StoryItem({ contact }: { contact: string }) {
throw new Error(res.error); throw new Error(res.error);
} }
}, },
select: (data) => data.filter((ev) => ev.kind === Kind.Text),
refetchOnWindowFocus: false, refetchOnWindowFocus: false,
}); });
@@ -77,9 +89,10 @@ function StoryItem({ contact }: { contact: string }) {
<button <button
type="button" type="button"
onClick={() => LumeWindow.openProfile(contact)} onClick={() => LumeWindow.openProfile(contact)}
className="size-7 inline-flex items-center justify-center rounded-lg text-neutral-500 hover:bg-neutral-100 dark:hover:bg-white/20" className="h-7 w-max px-2.5 inline-flex gap-1 items-center justify-center rounded-full text-sm font-medium hover:bg-neutral-100 dark:hover:bg-white/20"
> >
<ColumnsPlusLeft className="size-4" /> Open
<ArrowRight className="size-3" weight="bold" />
</button> </button>
</div> </div>
</div> </div>
@@ -129,9 +142,10 @@ const StoryEvent = memo(function StoryEvent({ event }: { event: LumeEvent }) {
className="shrink-0 inline font-medium text-blue-500" className="shrink-0 inline font-medium text-blue-500"
suffix=":" suffix=":"
/> />
<div className="pl-2 inline select-text text-balance content-break overflow-hidden"> <Content
{event.content} text={event.content}
</div> className="pl-2 inline select-text text-balance content-break overflow-hidden"
/>
</div> </div>
<div className="flex-1 flex items-center justify-between"> <div className="flex-1 flex items-center justify-between">
<span className="text-sm text-neutral-500"> <span className="text-sm text-neutral-500">
@@ -148,3 +162,64 @@ const StoryEvent = memo(function StoryEvent({ event }: { event: LumeEvent }) {
</Note.Provider> </Note.Provider>
); );
}); });
function Content({ text, className }: { text: string; className?: string }) {
const content = useMemo(() => {
let replacedText: ReactNode[] | string = text.trim();
const nostr = replacedText
.split(/\s+/)
.filter((w) => w.startsWith("nostr:"));
replacedText = reactStringReplace(text, /(https?:\/\/\S+)/g, (match, i) => (
<a
key={match + i}
href={match}
target="_blank"
rel="noreferrer"
className="text-blue-600 dark:text-blue-400 !underline"
>
{match}
</a>
));
replacedText = reactStringReplace(replacedText, /#(\w+)/g, (match, i) => (
<Hashtag key={match + i} tag={match} />
));
for (const word of nostr) {
const bech32 = word.replace("nostr:", "");
const data = nip19.decode(bech32);
switch (data.type) {
case "npub":
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<MentionUser key={match + i} pubkey={data.data} />
));
break;
case "nprofile":
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<MentionUser key={match + i} pubkey={data.data.pubkey} />
));
break;
default:
replacedText = reactStringReplace(replacedText, word, (match, i) => (
<a
key={match + i}
href={`https://njump.me/${bech32}`}
target="_blank"
rel="noreferrer"
className="text-blue-600 dark:text-blue-400 !underline"
>
{match}
</a>
));
break;
}
}
return replacedText;
}, [text]);
return <div className={className}>{content}</div>;
}

View File

@@ -2,12 +2,11 @@ import { commands } from "@/commands.gen";
import { createFileRoute } from "@tanstack/react-router"; import { createFileRoute } from "@tanstack/react-router";
export const Route = createFileRoute("/columns/_layout/stories")({ export const Route = createFileRoute("/columns/_layout/stories")({
beforeLoad: async () => { loader: async () => {
const res = await commands.getContactList(); const res = await commands.getContactList();
if (res.status === "ok") { if (res.status === "ok") {
const contacts = res.data; return res.data;
return { contacts };
} else { } else {
throw new Error(res.error); throw new Error(res.error);
} }