From 42eb882f527b92320528948bf4085f4a1627d50e Mon Sep 17 00:00:00 2001
From: reya
Date: Fri, 27 Oct 2023 17:45:08 +0700
Subject: [PATCH 01/14] update dependencies
---
package.json | 57 +-
pnpm-lock.yaml | 2199 +++++++++++-----------
src-tauri/Cargo.lock | 471 ++---
src-tauri/Cargo.toml | 2 -
src-tauri/src/main.rs | 2 -
src/libs/storage/instance.ts | 2 +-
src/shared/avatarUploader.tsx | 1 +
src/shared/bannerUploader.tsx | 1 +
src/shared/notes/actions/zap.tsx | 2 +-
src/shared/notes/kinds/articleDetail.tsx | 3 +-
src/shared/notes/kinds/text.tsx | 5 +-
src/shared/user.tsx | 3 +-
src/utils/hooks/useOpenGraph.ts | 2 +-
13 files changed, 1405 insertions(+), 1345 deletions(-)
diff --git a/package.json b/package.json
index affc0670..802ee3d6 100644
--- a/package.json
+++ b/package.json
@@ -32,22 +32,20 @@
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-toolbar": "^1.0.4",
"@radix-ui/react-tooltip": "^1.0.7",
- "@tanstack/react-query": "4.36.1",
- "@tauri-apps/api": "2.0.0-alpha.8",
- "@tauri-apps/cli": "2.0.0-alpha.15",
- "@tauri-apps/plugin-app": "2.0.0-alpha.1",
- "@tauri-apps/plugin-clipboard-manager": "2.0.0-alpha.1",
- "@tauri-apps/plugin-dialog": "2.0.0-alpha.1",
- "@tauri-apps/plugin-fs": "2.0.0-alpha.1",
- "@tauri-apps/plugin-http": "2.0.0-alpha.1",
- "@tauri-apps/plugin-notification": "2.0.0-alpha.1",
- "@tauri-apps/plugin-os": "2.0.0-alpha.2",
- "@tauri-apps/plugin-process": "2.0.0-alpha.1",
- "@tauri-apps/plugin-shell": "2.0.0-alpha.1",
- "@tauri-apps/plugin-sql": "2.0.0-alpha.1",
- "@tauri-apps/plugin-updater": "2.0.0-alpha.1",
- "@tauri-apps/plugin-upload": "2.0.0-alpha.1",
- "@tauri-apps/plugin-window": "2.0.0-alpha.1",
+ "@tanstack/react-query": "^5.0.5",
+ "@tauri-apps/api": "^2.0.0-alpha.9",
+ "@tauri-apps/cli": "^2.0.0-alpha.16",
+ "@tauri-apps/plugin-clipboard-manager": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-dialog": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-fs": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-http": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-notification": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-os": "^2.0.0-alpha.3",
+ "@tauri-apps/plugin-process": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-shell": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-sql": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-updater": "^2.0.0-alpha.2",
+ "@tauri-apps/plugin-upload": "^2.0.0-alpha.2",
"@tiptap/extension-character-count": "^2.1.12",
"@tiptap/extension-document": "^2.1.12",
"@tiptap/extension-image": "^2.1.12",
@@ -60,7 +58,7 @@
"@tiptap/starter-kit": "^2.1.12",
"@tiptap/suggestion": "^2.1.12",
"dayjs": "^1.11.10",
- "destr": "^2.0.1",
+ "destr": "^2.0.2",
"framer-motion": "^10.16.4",
"html-to-text": "^9.0.5",
"light-bolt11-decoder": "^3.0.0",
@@ -77,48 +75,49 @@
"react-dom": "^18.2.0",
"react-hook-form": "^7.47.0",
"react-hotkeys-hook": "^4.4.1",
- "react-markdown": "^8.0.7",
+ "react-markdown": "^9.0.0",
"react-router-dom": "^6.17.0",
"react-string-replace": "^1.1.1",
"reactflow": "^11.9.4",
- "remark-gfm": "^3.0.1",
+ "rehype-external-links": "^3.0.0",
+ "remark-gfm": "^4.0.0",
"sonner": "^1.0.3",
"tailwind-scrollbar": "^3.0.5",
"tauri-controls": "^0.2.0",
"tippy.js": "^6.3.7",
"tiptap-markdown": "^0.8.2",
- "virtua": "^0.15.0",
- "zustand": "^4.4.3"
+ "virtua": "^0.15.4",
+ "zustand": "^4.4.4"
},
"devDependencies": {
"@tailwindcss/typography": "^0.5.10",
- "@trivago/prettier-plugin-sort-imports": "^4.2.0",
+ "@trivago/prettier-plugin-sort-imports": "^4.2.1",
"@types/html-to-text": "^9.0.3",
- "@types/node": "^20.8.7",
- "@types/react": "^18.2.29",
+ "@types/node": "^20.8.9",
+ "@types/react": "^18.2.33",
"@types/react-dom": "^18.2.14",
"@types/youtube-player": "^5.5.9",
- "@typescript-eslint/eslint-plugin": "^6.8.0",
- "@typescript-eslint/parser": "^6.8.0",
+ "@typescript-eslint/eslint-plugin": "^6.9.0",
+ "@typescript-eslint/parser": "^6.9.0",
"@vitejs/plugin-react-swc": "^3.4.0",
"autoprefixer": "^10.4.16",
"clsx": "^2.0.0",
"cross-env": "^7.0.3",
"csstype": "^3.1.2",
"encoding": "^0.1.13",
- "eslint": "^8.51.0",
+ "eslint": "^8.52.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-simple-import-sort": "^10.0.0",
"husky": "^8.0.3",
- "lint-staged": "^14.0.1",
+ "lint-staged": "^15.0.2",
"postcss": "^8.4.31",
"prettier": "^3.0.3",
"prettier-plugin-tailwindcss": "^0.5.6",
"prop-types": "^15.8.1",
"tailwind-merge": "^1.14.0",
- "tailwindcss": "^3.3.3",
+ "tailwindcss": "^3.3.5",
"typescript": "^5.2.2",
"vite": "^4.5.0",
"vite-tsconfig-paths": "^4.2.1"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 05121e25..0736a890 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,79 +22,73 @@ dependencies:
version: 0.13.0(@nostr-dev-kit/ndk@2.0.3)(nostr-fetch@0.13.0)
'@radix-ui/react-alert-dialog':
specifier: ^1.0.5
- version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-avatar':
specifier: ^1.0.4
- version: 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-collapsible':
specifier: ^1.0.3
- version: 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dialog':
specifier: ^1.0.5
- version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-dropdown-menu':
specifier: ^2.0.6
- version: 2.0.6(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 2.0.6(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-hover-card':
specifier: ^1.0.7
- version: 1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-popover':
specifier: ^1.0.7
- version: 1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-toolbar':
specifier: ^1.0.4
- version: 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-tooltip':
specifier: ^1.0.7
- version: 1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@tanstack/react-query':
- specifier: 4.36.1
- version: 4.36.1(react-dom@18.2.0)(react@18.2.0)
+ specifier: ^5.0.5
+ version: 5.0.5(react-dom@18.2.0)(react@18.2.0)
'@tauri-apps/api':
- specifier: 2.0.0-alpha.8
- version: 2.0.0-alpha.8
+ specifier: ^2.0.0-alpha.9
+ version: 2.0.0-alpha.9
'@tauri-apps/cli':
- specifier: 2.0.0-alpha.15
- version: 2.0.0-alpha.15
- '@tauri-apps/plugin-app':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
+ specifier: ^2.0.0-alpha.16
+ version: 2.0.0-alpha.16
'@tauri-apps/plugin-clipboard-manager':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
- '@tauri-apps/plugin-dialog':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
- '@tauri-apps/plugin-fs':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
- '@tauri-apps/plugin-http':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
- '@tauri-apps/plugin-notification':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
- '@tauri-apps/plugin-os':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
+ '@tauri-apps/plugin-dialog':
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
+ '@tauri-apps/plugin-fs':
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
+ '@tauri-apps/plugin-http':
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
+ '@tauri-apps/plugin-notification':
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
+ '@tauri-apps/plugin-os':
+ specifier: ^2.0.0-alpha.3
+ version: 2.0.0-alpha.3
'@tauri-apps/plugin-process':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
'@tauri-apps/plugin-shell':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
'@tauri-apps/plugin-sql':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
'@tauri-apps/plugin-updater':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
'@tauri-apps/plugin-upload':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
- '@tauri-apps/plugin-window':
- specifier: 2.0.0-alpha.1
- version: 2.0.0-alpha.1
+ specifier: ^2.0.0-alpha.2
+ version: 2.0.0-alpha.2
'@tiptap/extension-character-count':
specifier: ^2.1.12
version: 2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12)
@@ -132,8 +126,8 @@ dependencies:
specifier: ^1.11.10
version: 1.11.10
destr:
- specifier: ^2.0.1
- version: 2.0.1
+ specifier: ^2.0.2
+ version: 2.0.2
framer-motion:
specifier: ^10.16.4
version: 10.16.4(react-dom@18.2.0)(react@18.2.0)
@@ -183,8 +177,8 @@ dependencies:
specifier: ^4.4.1
version: 4.4.1(react-dom@18.2.0)(react@18.2.0)
react-markdown:
- specifier: ^8.0.7
- version: 8.0.7(@types/react@18.2.29)(react@18.2.0)
+ specifier: ^9.0.0
+ version: 9.0.0(@types/react@18.2.33)(react@18.2.0)
react-router-dom:
specifier: ^6.17.0
version: 6.17.0(react-dom@18.2.0)(react@18.2.0)
@@ -193,19 +187,22 @@ dependencies:
version: 1.1.1
reactflow:
specifier: ^11.9.4
- version: 11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ version: 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ rehype-external-links:
+ specifier: ^3.0.0
+ version: 3.0.0
remark-gfm:
- specifier: ^3.0.1
- version: 3.0.1
+ specifier: ^4.0.0
+ version: 4.0.0
sonner:
specifier: ^1.0.3
version: 1.0.3(react-dom@18.2.0)(react@18.2.0)
tailwind-scrollbar:
specifier: ^3.0.5
- version: 3.0.5(tailwindcss@3.3.3)
+ version: 3.0.5(tailwindcss@3.3.5)
tauri-controls:
specifier: ^0.2.0
- version: 0.2.0(@tauri-apps/plugin-os@2.0.0-alpha.2)(@tauri-apps/plugin-window@2.0.0-alpha.1)(clsx@2.0.0)(react-dom@18.2.0)(react@18.2.0)(tailwind-merge@1.14.0)
+ version: 0.2.0(@tauri-apps/plugin-os@2.0.0-alpha.3)(@tauri-apps/plugin-window@2.0.0-alpha.1)(clsx@2.0.0)(react-dom@18.2.0)(react@18.2.0)(tailwind-merge@1.14.0)
tippy.js:
specifier: ^6.3.7
version: 6.3.7
@@ -213,28 +210,28 @@ dependencies:
specifier: ^0.8.2
version: 0.8.2(@tiptap/core@2.1.12)
virtua:
- specifier: ^0.15.0
- version: 0.15.0(react-dom@18.2.0)(react@18.2.0)
+ specifier: ^0.15.4
+ version: 0.15.4(react-dom@18.2.0)(react@18.2.0)
zustand:
- specifier: ^4.4.3
- version: 4.4.3(@types/react@18.2.29)(react@18.2.0)
+ specifier: ^4.4.4
+ version: 4.4.4(@types/react@18.2.33)(react@18.2.0)
devDependencies:
'@tailwindcss/typography':
specifier: ^0.5.10
- version: 0.5.10(tailwindcss@3.3.3)
+ version: 0.5.10(tailwindcss@3.3.5)
'@trivago/prettier-plugin-sort-imports':
- specifier: ^4.2.0
- version: 4.2.0(prettier@3.0.3)
+ specifier: ^4.2.1
+ version: 4.2.1(prettier@3.0.3)
'@types/html-to-text':
specifier: ^9.0.3
version: 9.0.3
'@types/node':
- specifier: ^20.8.7
- version: 20.8.7
+ specifier: ^20.8.9
+ version: 20.8.9
'@types/react':
- specifier: ^18.2.29
- version: 18.2.29
+ specifier: ^18.2.33
+ version: 18.2.33
'@types/react-dom':
specifier: ^18.2.14
version: 18.2.14
@@ -242,11 +239,11 @@ devDependencies:
specifier: ^5.5.9
version: 5.5.9
'@typescript-eslint/eslint-plugin':
- specifier: ^6.8.0
- version: 6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2)
+ specifier: ^6.9.0
+ version: 6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2)
'@typescript-eslint/parser':
- specifier: ^6.8.0
- version: 6.8.0(eslint@8.51.0)(typescript@5.2.2)
+ specifier: ^6.9.0
+ version: 6.9.0(eslint@8.52.0)(typescript@5.2.2)
'@vitejs/plugin-react-swc':
specifier: ^3.4.0
version: 3.4.0(vite@4.5.0)
@@ -266,26 +263,26 @@ devDependencies:
specifier: ^0.1.13
version: 0.1.13
eslint:
- specifier: ^8.51.0
- version: 8.51.0
+ specifier: ^8.52.0
+ version: 8.52.0
eslint-config-prettier:
specifier: ^9.0.0
- version: 9.0.0(eslint@8.51.0)
+ version: 9.0.0(eslint@8.52.0)
eslint-plugin-jsx-a11y:
specifier: ^6.7.1
- version: 6.7.1(eslint@8.51.0)
+ version: 6.7.1(eslint@8.52.0)
eslint-plugin-react:
specifier: ^7.33.2
- version: 7.33.2(eslint@8.51.0)
+ version: 7.33.2(eslint@8.52.0)
eslint-plugin-simple-import-sort:
specifier: ^10.0.0
- version: 10.0.0(eslint@8.51.0)
+ version: 10.0.0(eslint@8.52.0)
husky:
specifier: ^8.0.3
version: 8.0.3
lint-staged:
- specifier: ^14.0.1
- version: 14.0.1
+ specifier: ^15.0.2
+ version: 15.0.2
postcss:
specifier: ^8.4.31
version: 8.4.31
@@ -294,7 +291,7 @@ devDependencies:
version: 3.0.3
prettier-plugin-tailwindcss:
specifier: ^0.5.6
- version: 0.5.6(@trivago/prettier-plugin-sort-imports@4.2.0)(prettier@3.0.3)
+ version: 0.5.6(@trivago/prettier-plugin-sort-imports@4.2.1)(prettier@3.0.3)
prop-types:
specifier: ^15.8.1
version: 15.8.1
@@ -302,14 +299,14 @@ devDependencies:
specifier: ^1.14.0
version: 1.14.0
tailwindcss:
- specifier: ^3.3.3
- version: 3.3.3
+ specifier: ^3.3.5
+ version: 3.3.5
typescript:
specifier: ^5.2.2
version: 5.2.2
vite:
specifier: ^4.5.0
- version: 4.5.0(@types/node@20.8.7)
+ version: 4.5.0(@types/node@20.8.9)
vite-tsconfig-paths:
specifier: ^4.2.1
version: 4.2.1(typescript@5.2.2)(vite@4.5.0)
@@ -385,7 +382,6 @@ packages:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20
jsesc: 2.5.2
- dev: false
/@babel/helper-compilation-targets@7.22.15:
resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
@@ -527,24 +523,6 @@ packages:
'@babel/parser': 7.23.0
'@babel/types': 7.23.0
- /@babel/traverse@7.17.3:
- resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==}
- engines: {node: '>=6.9.0'}
- dependencies:
- '@babel/code-frame': 7.22.13
- '@babel/generator': 7.17.7
- '@babel/helper-environment-visitor': 7.22.20
- '@babel/helper-function-name': 7.23.0
- '@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.23.0
- '@babel/types': 7.17.0
- debug: 4.3.4
- globals: 11.12.0
- transitivePeerDependencies:
- - supports-color
- dev: true
-
/@babel/traverse@7.23.2:
resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
engines: {node: '>=6.9.0'}
@@ -561,7 +539,6 @@ packages:
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- dev: false
/@babel/types@7.17.0:
resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==}
@@ -790,18 +767,18 @@ packages:
dev: true
optional: true
- /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0):
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.52.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies:
- eslint: 8.51.0
+ eslint: 8.52.0
eslint-visitor-keys: 3.4.3
dev: true
- /@eslint-community/regexpp@4.9.1:
- resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==}
+ /@eslint-community/regexpp@4.10.0:
+ resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true
@@ -822,8 +799,8 @@ packages:
- supports-color
dev: true
- /@eslint/js@8.51.0:
- resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==}
+ /@eslint/js@8.52.0:
+ resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
@@ -863,16 +840,16 @@ packages:
resolution: {integrity: sha512-MRLgI6WxCCLgrar+qDqm/UhKs+V6yXzNm4y1bJRAuN72nkKT+TjTJHCmk9GjTngR3FrOfLbeMsPwBxCmbvfrLQ==}
engines: {node: '>=14'}
dependencies:
- crypto-js: 4.1.1
+ crypto-js: 4.2.0
events: 3.3.0
nostr-tools: 1.13.1
dev: false
- /@humanwhocodes/config-array@0.11.11:
- resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==}
+ /@humanwhocodes/config-array@0.11.13:
+ resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
engines: {node: '>=10.10.0'}
dependencies:
- '@humanwhocodes/object-schema': 1.2.1
+ '@humanwhocodes/object-schema': 2.0.1
debug: 4.3.4
minimatch: 3.1.2
transitivePeerDependencies:
@@ -884,8 +861,8 @@ packages:
engines: {node: '>=12.22'}
dev: true
- /@humanwhocodes/object-schema@1.2.1:
- resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
+ /@humanwhocodes/object-schema@2.0.1:
+ resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
dev: true
/@jridgewell/gen-mapping@0.3.3:
@@ -1021,7 +998,7 @@ packages:
'@babel/runtime': 7.23.2
dev: false
- /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==}
peerDependencies:
'@types/react': '*'
@@ -1036,18 +1013,18 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==}
peerDependencies:
'@types/react': '*'
@@ -1061,14 +1038,14 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==}
peerDependencies:
'@types/react': '*'
@@ -1082,17 +1059,17 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-collapsible@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-UBmVDkmR6IvDsloHVN+3rtx4Mi5TFvylYXpluuv0f37dtaz3H99bp8No0LGXRigVpl3UAT4l9j6bIchh42S/Gg==}
peerDependencies:
'@types/react': '*'
@@ -1107,20 +1084,20 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-collection@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==}
peerDependencies:
'@types/react': '*'
@@ -1134,17 +1111,17 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==}
peerDependencies:
'@types/react': '*'
@@ -1154,11 +1131,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-context@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-context@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==}
peerDependencies:
'@types/react': '*'
@@ -1168,11 +1145,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-GjWJX/AUpB703eEBanuBnIWdIXg6NvJFCXcNlSZk4xdszCdhrJgBoUd1cGk67vFO+WdA2pfI/plOpqz/5GUP6Q==}
peerDependencies:
'@types/react': '*'
@@ -1187,26 +1164,26 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
aria-hidden: 1.2.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.2.29)(react@18.2.0)
+ react-remove-scroll: 2.5.5(@types/react@18.2.33)(react@18.2.0)
dev: false
- /@radix-ui/react-direction@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-direction@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==}
peerDependencies:
'@types/react': '*'
@@ -1216,11 +1193,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==}
peerDependencies:
'@types/react': '*'
@@ -1235,17 +1212,17 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==}
peerDependencies:
'@types/react': '*'
@@ -1260,19 +1237,19 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==}
peerDependencies:
'@types/react': '*'
@@ -1282,11 +1259,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==}
peerDependencies:
'@types/react': '*'
@@ -1300,16 +1277,16 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-hover-card@1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-OcUN2FU0YpmajD/qkph3XzMcK/NmSk9hGWnjV68p6QiZMgILugusgQwnLSDs3oFSJYGKf3Y49zgFedhGh04k9A==}
peerDependencies:
'@types/react': '*'
@@ -1324,21 +1301,21 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-id@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-id@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==}
peerDependencies:
'@types/react': '*'
@@ -1348,12 +1325,12 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-menu@2.0.6(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-BVkFLS+bUC8HcImkRKPSiVumA1VPOOEC5WBMiT+QAVsPzW1FJzI9KnqgGxVDPBcql5xXrHkD3JOVoXWEXD8SYA==}
peerDependencies:
'@types/react': '*'
@@ -1368,30 +1345,30 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-direction': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-direction': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
aria-hidden: 1.2.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.2.29)(react@18.2.0)
+ react-remove-scroll: 2.5.5(@types/react@18.2.33)(react@18.2.0)
dev: false
- /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-popover@1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==}
peerDependencies:
'@types/react': '*'
@@ -1406,27 +1383,27 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-focus-scope': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
aria-hidden: 1.2.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.2.29)(react@18.2.0)
+ react-remove-scroll: 2.5.5(@types/react@18.2.33)(react@18.2.0)
dev: false
- /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==}
peerDependencies:
'@types/react': '*'
@@ -1441,22 +1418,22 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@floating-ui/react-dom': 2.0.2(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.29)(react@18.2.0)
+ '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.33)(react@18.2.0)
'@radix-ui/rect': 1.0.1
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==}
peerDependencies:
'@types/react': '*'
@@ -1470,14 +1447,14 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==}
peerDependencies:
'@types/react': '*'
@@ -1491,15 +1468,15 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==}
peerDependencies:
'@types/react': '*'
@@ -1513,14 +1490,14 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-roving-focus@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==}
peerDependencies:
'@types/react': '*'
@@ -1535,21 +1512,21 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-direction': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-direction': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-separator@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==}
peerDependencies:
'@types/react': '*'
@@ -1563,14 +1540,14 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-slot@1.0.2(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-slot@1.0.2(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==}
peerDependencies:
'@types/react': '*'
@@ -1580,12 +1557,12 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==}
peerDependencies:
'@types/react': '*'
@@ -1600,19 +1577,19 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-direction': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-direction': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==}
peerDependencies:
'@types/react': '*'
@@ -1627,15 +1604,15 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==}
peerDependencies:
'@types/react': '*'
@@ -1650,19 +1627,19 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-direction': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-direction': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==}
peerDependencies:
'@types/react': '*'
@@ -1677,24 +1654,24 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.2(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-dismissable-layer': 1.0.5(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-popper': 1.1.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-portal': 1.0.4(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==}
peerDependencies:
'@types/react': '*'
@@ -1704,11 +1681,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==}
peerDependencies:
'@types/react': '*'
@@ -1718,12 +1695,12 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==}
peerDependencies:
'@types/react': '*'
@@ -1733,12 +1710,12 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==}
peerDependencies:
'@types/react': '*'
@@ -1748,11 +1725,11 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==}
peerDependencies:
'@types/react': '*'
@@ -1763,11 +1740,11 @@ packages:
dependencies:
'@babel/runtime': 7.23.2
'@radix-ui/rect': 1.0.1
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-use-size@1.0.1(@types/react@18.2.29)(react@18.2.0):
+ /@radix-ui/react-use-size@1.0.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==}
peerDependencies:
'@types/react': '*'
@@ -1777,12 +1754,12 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.29)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.33)(react@18.2.0)
+ '@types/react': 18.2.33
react: 18.2.0
dev: false
- /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==}
peerDependencies:
'@types/react': '*'
@@ -1796,8 +1773,8 @@ packages:
optional: true
dependencies:
'@babel/runtime': 7.23.2
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.29
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@types/react': 18.2.33
'@types/react-dom': 18.2.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -1809,39 +1786,39 @@ packages:
'@babel/runtime': 7.23.2
dev: false
- /@reactflow/background@11.3.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/background@11.3.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-bgwvqWxF09chwmdkyClpYEMaewBspdwjgLbbFlLf4SpWPFMYyuvCBQrcISsvy/EDEWO9i3Uj9ktgGAhvtSQsmA==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.3(@types/react@18.2.29)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/controls@11.2.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/controls@11.2.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-x6e5p9iHjC6gd+4SoZ3DOOp0F1MefGKQ8hT6yPVdqxfo1+rV2WhrWvrX/MCoEu12Dp7457LdLfa0giy3aho8tQ==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.3(@types/react@18.2.29)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/core@11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/core@11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Ko7nKPOYalwDTTbRHi2+QXDiidSAcpUzGN3G+0B+QysLZkcaPCkpkMjjHiDC4c/Z1BJBzs1FRJg/T6BXaBnYkg==}
peerDependencies:
react: '>=17'
@@ -1857,19 +1834,19 @@ packages:
d3-zoom: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.3(@types/react@18.2.29)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/minimap@11.7.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/minimap@11.7.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Jo1R+uDey9IV7O2s3m0gK2+cZpg9M8hq2EZJb3NGfOSzMAPhj3mby0fNJIgTzycreuht0TpA51c2YfjGI3YIOw==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
'@types/d3-selection': 3.0.8
'@types/d3-zoom': 3.0.6
classcat: 5.0.4
@@ -1877,41 +1854,41 @@ packages:
d3-zoom: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.3(@types/react@18.2.29)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/node-resizer@2.2.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/node-resizer@2.2.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-+p271/hAsM5M1+RQTWW/02pbNkCHeGXwxGimIlL1tMIagyuko0NX2vOz2B8jxJnPKlF09Wj18BcXBNUm3nDcSg==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
d3-drag: 3.0.0
d3-selection: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.3(@types/react@18.2.29)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/node-toolbar@1.3.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/node-toolbar@1.3.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-TfcmpXHRBb2mUfzKGjburiU6FWqRME9pPFs1OwIC1z5e9BjupQhNDEKEk8XHi7PKL/mAiDfwuGXaM1BVVFuPqw==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.3(@types/react@18.2.29)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
@@ -1980,8 +1957,8 @@ packages:
selderee: 0.11.0
dev: false
- /@swc/core-darwin-arm64@1.3.93:
- resolution: {integrity: sha512-gEKgk7FVIgltnIfDO6GntyuQBBlAYg5imHpRgLxB1zSI27ijVVkksc6QwISzFZAhKYaBWIsFSVeL9AYSziAF7A==}
+ /@swc/core-darwin-arm64@1.3.95:
+ resolution: {integrity: sha512-VAuBAP3MNetO/yBIBzvorUXq7lUBwhfpJxYViSxyluMwtoQDhE/XWN598TWMwMl1ZuImb56d7eUsuFdjgY7pJw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
@@ -1989,8 +1966,8 @@ packages:
dev: true
optional: true
- /@swc/core-darwin-x64@1.3.93:
- resolution: {integrity: sha512-ZQPxm/fXdDQtn3yrYSL/gFfA8OfZ5jTi33yFQq6vcg/Y8talpZ+MgdSlYM0FkLrZdMTYYTNFiuBQuuvkA+av+Q==}
+ /@swc/core-darwin-x64@1.3.95:
+ resolution: {integrity: sha512-20vF2rvUsN98zGLZc+dsEdHvLoCuiYq/1B+TDeE4oolgTFDmI1jKO+m44PzWjYtKGU9QR95sZ6r/uec0QC5O4Q==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
@@ -1998,8 +1975,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-arm-gnueabihf@1.3.93:
- resolution: {integrity: sha512-OYFMMI2yV+aNe3wMgYhODxHdqUB/jrK0SEMHHS44GZpk8MuBXEF+Mcz4qjkY5Q1EH7KVQqXb/gVWwdgTHpjM2A==}
+ /@swc/core-linux-arm-gnueabihf@1.3.95:
+ resolution: {integrity: sha512-oEudEM8PST1MRNGs+zu0cx5i9uP8TsLE4/L9HHrS07Ck0RJ3DCj3O2fU832nmLe2QxnAGPwBpSO9FntLfOiWEQ==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
@@ -2007,8 +1984,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-arm64-gnu@1.3.93:
- resolution: {integrity: sha512-BT4dT78odKnJMNiq5HdjBsv29CiIdcCcImAPxeFqAeFw1LL6gh9nzI8E96oWc+0lVT5lfhoesCk4Qm7J6bty8w==}
+ /@swc/core-linux-arm64-gnu@1.3.95:
+ resolution: {integrity: sha512-pIhFI+cuC1aYg+0NAPxwT/VRb32f2ia8oGxUjQR6aJg65gLkUYQzdwuUmpMtFR2WVf7WVFYxUnjo4UyMuyh3ng==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
@@ -2016,8 +1993,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-arm64-musl@1.3.93:
- resolution: {integrity: sha512-yH5fWEl1bktouC0mhh0Chuxp7HEO4uCtS/ly1Vmf18gs6wZ8DOOkgAEVv2dNKIryy+Na++ljx4Ym7C8tSJTrLw==}
+ /@swc/core-linux-arm64-musl@1.3.95:
+ resolution: {integrity: sha512-ZpbTr+QZDT4OPJfjPAmScqdKKaT+wGurvMU5AhxLaf85DuL8HwUwwlL0n1oLieLc47DwIJEMuKQkYhXMqmJHlg==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
@@ -2025,8 +2002,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-x64-gnu@1.3.93:
- resolution: {integrity: sha512-OFUdx64qvrGJhXKEyxosHxgoUVgba2ztYh7BnMiU5hP8lbI8G13W40J0SN3CmFQwPP30+3oEbW7LWzhKEaYjlg==}
+ /@swc/core-linux-x64-gnu@1.3.95:
+ resolution: {integrity: sha512-n9SuHEFtdfSJ+sHdNXNRuIOVprB8nbsz+08apKfdo4lEKq6IIPBBAk5kVhPhkjmg2dFVHVo4Tr/OHXM1tzWCCw==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
@@ -2034,8 +2011,8 @@ packages:
dev: true
optional: true
- /@swc/core-linux-x64-musl@1.3.93:
- resolution: {integrity: sha512-4B8lSRwEq1XYm6xhxHhvHmKAS7pUp1Q7E33NQ2TlmFhfKvCOh86qvThcjAOo57x8DRwmpvEVrqvpXtYagMN6Ig==}
+ /@swc/core-linux-x64-musl@1.3.95:
+ resolution: {integrity: sha512-L1JrVlsXU3LC0WwmVnMK9HrOT2uhHahAoPNMJnZQpc18a0paO9fqifPG8M/HjNRffMUXR199G/phJsf326UvVg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
@@ -2043,8 +2020,8 @@ packages:
dev: true
optional: true
- /@swc/core-win32-arm64-msvc@1.3.93:
- resolution: {integrity: sha512-BHShlxtkven8ZjjvZ5QR6sC5fZCJ9bMujEkiha6W4cBUTY7ce7qGFyHmQd+iPC85d9kD/0cCiX/Xez8u0BhO7w==}
+ /@swc/core-win32-arm64-msvc@1.3.95:
+ resolution: {integrity: sha512-YaP4x/aZbUyNdqCBpC2zL8b8n58MEpOUpmOIZK6G1SxGi+2ENht7gs7+iXpWPc0sy7X3YPKmSWMAuui0h8lgAA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
@@ -2052,8 +2029,8 @@ packages:
dev: true
optional: true
- /@swc/core-win32-ia32-msvc@1.3.93:
- resolution: {integrity: sha512-nEwNWnz4JzYAK6asVvb92yeylfxMYih7eMQOnT7ZVlZN5ba9WF29xJ6kcQKs9HRH6MvWhz9+wRgv3FcjlU6HYA==}
+ /@swc/core-win32-ia32-msvc@1.3.95:
+ resolution: {integrity: sha512-w0u3HI916zT4BC/57gOd+AwAEjXeUlQbGJ9H4p/gzs1zkSHtoDQghVUNy3n/ZKp9KFod/95cA8mbVF9t1+6epQ==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
@@ -2061,8 +2038,8 @@ packages:
dev: true
optional: true
- /@swc/core-win32-x64-msvc@1.3.93:
- resolution: {integrity: sha512-jibQ0zUr4kwJaQVwgmH+svS04bYTPnPw/ZkNInzxS+wFAtzINBYcU8s2PMWbDb2NGYiRSEeoSGyAvS9H+24JFA==}
+ /@swc/core-win32-x64-msvc@1.3.95:
+ resolution: {integrity: sha512-5RGnMt0S6gg4Gc6QtPUJ3Qs9Un4sKqccEzgH/tj7V/DVTJwKdnBKxFZfgQ34OR2Zpz7zGOn889xwsFVXspVWNA==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
@@ -2070,8 +2047,8 @@ packages:
dev: true
optional: true
- /@swc/core@1.3.93:
- resolution: {integrity: sha512-690GRr1wUGmGYZHk7fUduX/JUwViMF2o74mnZYIWEcJaCcd9MQfkhsxPBtjeg6tF+h266/Cf3RPYhsFBzzxXcA==}
+ /@swc/core@1.3.95:
+ resolution: {integrity: sha512-PMrNeuqIusq9DPDooV3FfNEbZuTu5jKAc04N3Hm6Uk2Fl49cqElLFQ4xvl4qDmVDz97n3n/C1RE0/f6WyGPEiA==}
engines: {node: '>=10'}
requiresBuild: true
peerDependencies:
@@ -2083,16 +2060,16 @@ packages:
'@swc/counter': 0.1.2
'@swc/types': 0.1.5
optionalDependencies:
- '@swc/core-darwin-arm64': 1.3.93
- '@swc/core-darwin-x64': 1.3.93
- '@swc/core-linux-arm-gnueabihf': 1.3.93
- '@swc/core-linux-arm64-gnu': 1.3.93
- '@swc/core-linux-arm64-musl': 1.3.93
- '@swc/core-linux-x64-gnu': 1.3.93
- '@swc/core-linux-x64-musl': 1.3.93
- '@swc/core-win32-arm64-msvc': 1.3.93
- '@swc/core-win32-ia32-msvc': 1.3.93
- '@swc/core-win32-x64-msvc': 1.3.93
+ '@swc/core-darwin-arm64': 1.3.95
+ '@swc/core-darwin-x64': 1.3.95
+ '@swc/core-linux-arm-gnueabihf': 1.3.95
+ '@swc/core-linux-arm64-gnu': 1.3.95
+ '@swc/core-linux-arm64-musl': 1.3.95
+ '@swc/core-linux-x64-gnu': 1.3.95
+ '@swc/core-linux-x64-musl': 1.3.95
+ '@swc/core-win32-arm64-msvc': 1.3.95
+ '@swc/core-win32-ia32-msvc': 1.3.95
+ '@swc/core-win32-x64-msvc': 1.3.95
dev: true
/@swc/counter@0.1.2:
@@ -2103,7 +2080,7 @@ packages:
resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==}
dev: true
- /@tailwindcss/typography@0.5.10(tailwindcss@3.3.3):
+ /@tailwindcss/typography@0.5.10(tailwindcss@3.3.5):
resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==}
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
@@ -2112,18 +2089,18 @@ packages:
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10
- tailwindcss: 3.3.3
+ tailwindcss: 3.3.5
dev: true
- /@tanstack/query-core@4.36.1:
- resolution: {integrity: sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==}
+ /@tanstack/query-core@5.0.5:
+ resolution: {integrity: sha512-MThCETMkHDHTnFZHp71L+SqTtD5d6XHftFCVR1xRJdWM3qGrlQ2VCXaj0SKVcyJej2e1Opa2c7iknu1llxCDNQ==}
dev: false
- /@tanstack/react-query@4.36.1(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==}
+ /@tanstack/react-query@5.0.5(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-ZG0Q4HZ0iuI8mWiZ2/MdVYPHbrmAVhMn7+gLOkxJh6zLIgCL4luSZlohzN5Xt4MjxfxxWioO1nemwpudaTsmQg==}
peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react: ^18.0.0
+ react-dom: ^18.0.0
react-native: '*'
peerDependenciesMeta:
react-dom:
@@ -2131,10 +2108,9 @@ packages:
react-native:
optional: true
dependencies:
- '@tanstack/query-core': 4.36.1
+ '@tanstack/query-core': 5.0.5
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
/@tauri-apps/api@2.0.0-alpha.6:
@@ -2147,8 +2123,13 @@ packages:
engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
dev: false
- /@tauri-apps/cli-darwin-arm64@2.0.0-alpha.15:
- resolution: {integrity: sha512-PxmXanPZtSLtDJyEoj538//cauKoyc/sExAO0fTwJ+o8y2NZB/qQfpbdMIloQQnusRwh+6RjOr0Zs5Y6nBhO5Q==}
+ /@tauri-apps/api@2.0.0-alpha.9:
+ resolution: {integrity: sha512-Q5BiIQa2ToICdaJSYZdmtwbKSfdk+uQbQ7xMnbWI5C5C3frEVFlT92kVXgZFKIwrTLZBWHfiowkPR6rbFqAHIg==}
+ engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
+ dev: false
+
+ /@tauri-apps/cli-darwin-arm64@2.0.0-alpha.16:
+ resolution: {integrity: sha512-T/yu8+m4XrI1Ja5aVnsv4v5aGqIvwz1egHarMgh4LXrlMioJ60BoxDPfenaUokO6NVee212woFSmH6p4S7V8PA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
@@ -2156,8 +2137,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-darwin-x64@2.0.0-alpha.15:
- resolution: {integrity: sha512-IcJGd6mIwQQ9xQhmkNHWjERJoGYpZEknhWeU8a2MnuosX8c9O/zmKWey4ol2KPrumMdmbh8QZzPyh9986GmnUA==}
+ /@tauri-apps/cli-darwin-x64@2.0.0-alpha.16:
+ resolution: {integrity: sha512-mhYB/UPeyn++GI0Tt8y90WmHU75Fh9yZ7cBtRCrF94kOOEldQGYqS26dwhsRrSgnNYB7vYvVPhHzQsKWziParQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
@@ -2165,8 +2146,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.15:
- resolution: {integrity: sha512-zD88WJaEZ49BzgmIgj0RVFF/zKrB+NYHEDwmvt60eehQCPfnMuE5/asj0Gp4YJRZ07jZzDfzMCdTGbwWsLnZEA==}
+ /@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-alpha.16:
+ resolution: {integrity: sha512-YP+4BSNN2ESgPnoIO37nw5tOi2k2rrU2eoeJHxQpOmRrQakjBrcZFP1HGjY3cOturexIKUALH69Ol9K6WzrJIQ==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
@@ -2174,8 +2155,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.15:
- resolution: {integrity: sha512-rmHIZsEb1RT5Ny4hjeK7LC3MRqWLZBfiKC29DX5UzhJySb9g0UeR2esx1PMX6kuU8DOC0RBr8xpEmoTNMtFJ3Q==}
+ /@tauri-apps/cli-linux-arm64-gnu@2.0.0-alpha.16:
+ resolution: {integrity: sha512-mP/I6AdlRnrbZBUMKJWo4JsZStYD+7szh/1oo4zmDfWx0z6HUzgN6gxL+CR0pLex4kCJGUNeo1aZCGBJKzEdHg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -2183,8 +2164,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.15:
- resolution: {integrity: sha512-l3oix62YRE/vjpdxWq38NwZ61yg1vCcGAdfHaSt+Um/ojZHudekchQx56sEh7IMxsHxEtipxZdNEb1WsyAa5JA==}
+ /@tauri-apps/cli-linux-arm64-musl@2.0.0-alpha.16:
+ resolution: {integrity: sha512-i58pTClYkn9BBhMShNycRUJD+cfxHs+PV5PPHhBJdi3+zpL0zHNTlZAjTMpO/o4hmTYhw1rbk+kPzXEaiAnt0w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
@@ -2192,8 +2173,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.15:
- resolution: {integrity: sha512-m7jWcyA4URtfvM4ySN1G3mO6gQP0qULawP9henks/bcrx2DU5xFP7WFxUxQhlWEtjwtJOI/NscQfzUEE6igs+Q==}
+ /@tauri-apps/cli-linux-x64-gnu@2.0.0-alpha.16:
+ resolution: {integrity: sha512-GLb0+MvoC6/7l5HXhF3Ii1Uodg6K6l8tfSaQ7H8qplp9oVgMvNi8yd9myRT8SYApjsC1pViXTib+5n2pp3VS0A==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -2201,8 +2182,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.15:
- resolution: {integrity: sha512-Xa4JTnYbebnLAMY7JdNuUDgnv/wWA4a8fbg1288kckq3aRXb+ETTV3Tlr/rnsx1s3TpECmSkXjTIvNecvsqjTA==}
+ /@tauri-apps/cli-linux-x64-musl@2.0.0-alpha.16:
+ resolution: {integrity: sha512-pZXuwVQpInzW8YjmhJsDPx3ovfVFbKJkUnXTgmVe8RvQSh6BxCSLyq8z4WG6zBRBdpjg8L5jVM8/MWf/QhdCVg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
@@ -2210,8 +2191,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-win32-arm64-msvc@2.0.0-alpha.15:
- resolution: {integrity: sha512-YOKmqenjwQkwBesJ3rYWnJ2renRhPAWIdIoTRhMnDacRk28mMWizsGWLT7ZDbYi7AHMR6jMk0eYgAKKd+uBjFg==}
+ /@tauri-apps/cli-win32-arm64-msvc@2.0.0-alpha.16:
+ resolution: {integrity: sha512-YB1urpcOfSMRhKi+0Cj8I2T+dlU2Vqqc/ao+8O4wiHibGFyGIcuL/DJfC/7nHyFUngac7Shyz8/VRKgvd/jEvw==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
@@ -2219,8 +2200,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.15:
- resolution: {integrity: sha512-Z8yMn6jKSCN8atdWwIzHNoqd+kS684RpgFoZhftcxtqYDXfSgU63KLasKu2Wu12a/7TmXqHGHlEBst9nD2VSLw==}
+ /@tauri-apps/cli-win32-ia32-msvc@2.0.0-alpha.16:
+ resolution: {integrity: sha512-IdODN3LwzwCaJOv1muiOhy0yD3IAIdu2UGacEukM9gnJ1VsK/JqU9ufH0SAFQkxKTWc6wpKykEAfuSNRlMIa5A==}
engines: {node: '>= 10'}
cpu: [ia32]
os: [win32]
@@ -2228,8 +2209,8 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.15:
- resolution: {integrity: sha512-fcIXUgI1PKeAj2cp7vvXDssWcXxhauCyvtJPmaCVl5pk+5aJlOSx5TPjv0BRyaIO8l4IPW1IakvTRcDvEAQHRw==}
+ /@tauri-apps/cli-win32-x64-msvc@2.0.0-alpha.16:
+ resolution: {integrity: sha512-T2kg6o3Ca5cC2i5BdjsGCym0yZ64c9BGO5cmtCCrIardMTYB3hUHDvekOmKviBfqQbIsBHGZfnLDDbmjnwTLvA==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
@@ -2237,93 +2218,87 @@ packages:
dev: false
optional: true
- /@tauri-apps/cli@2.0.0-alpha.15:
- resolution: {integrity: sha512-eMMD5MXJDt/j37IGBP501Ov3lux+mrA1WT4EjTk+Oaw4t8fb8ncb7yvbVZ6qyzVo7WHplIGKRzyV0CyZXZropQ==}
+ /@tauri-apps/cli@2.0.0-alpha.16:
+ resolution: {integrity: sha512-zh2psjmHLkoHZkzUN1aPqcOE4KTLRTRJdd+K8CsD/y5nbQdek8qjc8ToohV2FNHDkBq0O/yETsPmPPLgQfhVhg==}
engines: {node: '>= 10'}
hasBin: true
optionalDependencies:
- '@tauri-apps/cli-darwin-arm64': 2.0.0-alpha.15
- '@tauri-apps/cli-darwin-x64': 2.0.0-alpha.15
- '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-alpha.15
- '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-alpha.15
- '@tauri-apps/cli-linux-arm64-musl': 2.0.0-alpha.15
- '@tauri-apps/cli-linux-x64-gnu': 2.0.0-alpha.15
- '@tauri-apps/cli-linux-x64-musl': 2.0.0-alpha.15
- '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-alpha.15
- '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-alpha.15
- '@tauri-apps/cli-win32-x64-msvc': 2.0.0-alpha.15
+ '@tauri-apps/cli-darwin-arm64': 2.0.0-alpha.16
+ '@tauri-apps/cli-darwin-x64': 2.0.0-alpha.16
+ '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-alpha.16
+ '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-alpha.16
+ '@tauri-apps/cli-linux-arm64-musl': 2.0.0-alpha.16
+ '@tauri-apps/cli-linux-x64-gnu': 2.0.0-alpha.16
+ '@tauri-apps/cli-linux-x64-musl': 2.0.0-alpha.16
+ '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-alpha.16
+ '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-alpha.16
+ '@tauri-apps/cli-win32-x64-msvc': 2.0.0-alpha.16
dev: false
- /@tauri-apps/plugin-app@2.0.0-alpha.1:
- resolution: {integrity: sha512-DKlbG4ymoa8xDKdK36adPlZYeY8wcDQfi/XJG4qxhK6YC4GLrM1sG5eQgjVKheDI6wDQC5CiUjhnvddXVFUPTg==}
+ /@tauri-apps/plugin-clipboard-manager@2.0.0-alpha.2:
+ resolution: {integrity: sha512-NLs8rHLoWXJWGA+I5fVbQIscsRpndjA9ueEm6FjFl3PrfVIft3rW5qck3l0qDIjmtWPm5xDvzZP3VDcpfm93xg==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-clipboard-manager@2.0.0-alpha.1:
- resolution: {integrity: sha512-zXybHu31RCx58ZGU7/kUHcvoXW2AX6kBXBZsKHv4rYe7Z869WmDLDC7iU23/dAJLu7xAPTJzJ/HbeMfbrfJ4hg==}
+ /@tauri-apps/plugin-dialog@2.0.0-alpha.2:
+ resolution: {integrity: sha512-tsMXiDR5mS+gL80xtKRSDPtBlnoywboIpDsEEzTyE8UZsngEXVQL4xsIF8qfMub5VIOt0iCcLGiPwU4pm7a3Wg==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-dialog@2.0.0-alpha.1:
- resolution: {integrity: sha512-Fqv7zB7qvR6DkcH1dafHcRRNWRSFwj637/G2MQ+kKrmk1ErfV95lcYjpIhmUaETQSPKeogSI6A78kSnO89cvHQ==}
+ /@tauri-apps/plugin-fs@2.0.0-alpha.2:
+ resolution: {integrity: sha512-8wt4I53gtU7iAtAAMLxihPl5w91Zh99iSpzdxJDIDShcglYMMXU/xmSiIE4CF6ccw68AH0j7dKqSYPELVRy/dg==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-fs@2.0.0-alpha.1:
- resolution: {integrity: sha512-snIDRAFgg3vi73TwiDQkM3+zBTDRvBXgGd7BAsSW7MQ+/3cJM4XcyPcYkv9X6jpgIiQrbWsDGs/KM4ob247K7A==}
+ /@tauri-apps/plugin-http@2.0.0-alpha.2:
+ resolution: {integrity: sha512-PceQGKaVxX+ziFYAzjDKdCEHC61NJE3QSZAwtG9cFWl75BkGxzh8ZuRqryYTPtNtD/fonOI4KDiqAeaXXJQNKQ==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-http@2.0.0-alpha.1:
- resolution: {integrity: sha512-Ss9tR7JWmOcQEbHRdXXjjd+3nIPurqvuJwduIFrU3z0DQ0A+gtWVgyNMrQm+PAtJvw7FZlZDt8YMNIi7eEkJHg==}
+ /@tauri-apps/plugin-notification@2.0.0-alpha.2:
+ resolution: {integrity: sha512-B3+KvlBgcEaDX818dj1yaS1hUqwEOAS1WjPYEU/1wOm2im3tbsop/18dRAfD5zykXHn1EFRclU73xpzz9816yA==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-notification@2.0.0-alpha.1:
- resolution: {integrity: sha512-/U046gKo0RsPsi7OTQEuu2ezWrhBNheTMA+iyMWb65N9mMSORul66Y1oKXzJOqeMsSQcL4V+WPz+6wzMGHY7lQ==}
+ /@tauri-apps/plugin-os@2.0.0-alpha.3:
+ resolution: {integrity: sha512-a2P3/Kv0KittnyKG7deBPqRz9HjyH7rwMicgYzFYk9Ye0hpEVEJq30bxo0dUi+UTZV96L2yO/hp8medcDI6rrw==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-os@2.0.0-alpha.2:
- resolution: {integrity: sha512-5N20UFcgx+d415xupGfxb4vS7L/cx0X+I6DlJJ+xuO1y123+NLthFpnXxU3XH2TZXIZ36Rkfqz5uZO+xf+9JUQ==}
+ /@tauri-apps/plugin-process@2.0.0-alpha.2:
+ resolution: {integrity: sha512-5ilc3ZYuLTt+WAL0Q0MjxTdIjchKYLkqcFe7qqVgkl9iBAAsUCc6G9ikZpNyLEParsJaY63mOZX3iPc3ZTEdEg==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-process@2.0.0-alpha.1:
- resolution: {integrity: sha512-ljTtJmuuURR1Q+H8zvbMX9pmMZdJQWMXGsUEK2aBNlUo4qE2AniXLjoaE1jJQ1NF2LKptJRSY1bSUi+OyEkjGg==}
+ /@tauri-apps/plugin-shell@2.0.0-alpha.2:
+ resolution: {integrity: sha512-LLf4rdFJ7kv1EY44JaaZDf88k8PUoYG0MXhBD5gEibRxpA73XCQRKPjBvLl5QS6am1CpTaZPaAJTYsoMeBGctA==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-shell@2.0.0-alpha.1:
- resolution: {integrity: sha512-vH4ODw/7pmMHackh1F+/uGmBXNGArVJ8FRO0xyL0xjPsMxbba4o90FJ7eiITENznBZRKn3JFaTedh8KhAZqU/g==}
+ /@tauri-apps/plugin-sql@2.0.0-alpha.2:
+ resolution: {integrity: sha512-ADAH7exXWF4C7CUuNjCKYzkPMelf+654d6Xr9fBKpRiNVI1M2wymoNOMwC35NN7K/wguqv9AYh+Veo17GZkrFg==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-sql@2.0.0-alpha.1:
- resolution: {integrity: sha512-HzFjcISMnkYR4lSOEAvtOUUT/YIMU2mz+oVGdVzVYAM5gzt8Xmooapp66UCJ/ugTlpd0angSkqfRgU3eQVS7Mg==}
+ /@tauri-apps/plugin-updater@2.0.0-alpha.2:
+ resolution: {integrity: sha512-j6RHPmZlvqm2vwQXbI6aZLCtllyv1qwTOih42PFIP0NHh7L1Ea+jStN0pZk0whHD72F9fcXv4eWexGlwBNa5dg==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
- /@tauri-apps/plugin-updater@2.0.0-alpha.1:
- resolution: {integrity: sha512-rJoVc/N8gg1MkUOFZdx5h39V47elddwnOjs0sAPhaGfwct7okmFMRnXpN/MwHoprTkK2+6EDLOvhf0jFMiy4JA==}
+ /@tauri-apps/plugin-upload@2.0.0-alpha.2:
+ resolution: {integrity: sha512-YWkk2c+ZB8qaHVepmBHgtceyCtZ7Ov8vNuBeH6tXWHsHya/x2LyX+TVLIOsp3Y/xMLmgMNpFiaCumNtCCRWvqw==}
dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
- dev: false
-
- /@tauri-apps/plugin-upload@2.0.0-alpha.1:
- resolution: {integrity: sha512-MSQesuCrQqPJtn1kbO428sz2M2q+G/jrOV2J3nxVrxUkISQvn2vK/vmMZ8e3p/dT5hdzs10Xz6KC9GZ67BCMVg==}
- dependencies:
- '@tauri-apps/api': 2.0.0-alpha.6
+ '@tauri-apps/api': 2.0.0-alpha.9
dev: false
/@tauri-apps/plugin-window@2.0.0-alpha.1:
@@ -2631,8 +2606,8 @@ packages:
'@tiptap/pm': 2.1.12
dev: false
- /@trivago/prettier-plugin-sort-imports@4.2.0(prettier@3.0.3):
- resolution: {integrity: sha512-YBepjbt+ZNBVmN3ev1amQH3lWCmHyt5qTbLCp/syXJRu/Kw2koXh44qayB1gMRxcL/gV8egmjN5xWSrYyfUtyw==}
+ /@trivago/prettier-plugin-sort-imports@4.2.1(prettier@3.0.3):
+ resolution: {integrity: sha512-iuy2MPVURGdxILTchHr15VAioItuYBejKfcTmQFlxIuqA7jeaT6ngr5aUIG6S6U096d6a6lJCgaOwlRrPLlOPg==}
peerDependencies:
'@vue/compiler-sfc': 3.x
prettier: 2.x - 3.x
@@ -2642,7 +2617,7 @@ packages:
dependencies:
'@babel/generator': 7.17.7
'@babel/parser': 7.23.0
- '@babel/traverse': 7.17.3
+ '@babel/traverse': 7.23.2
'@babel/types': 7.17.0
javascript-natural-sort: 0.7.1
lodash: 4.17.21
@@ -2840,10 +2815,10 @@ packages:
resolution: {integrity: sha512-uK2z1ZHJyC0nQRbuovXFt4mzXDwf27vQeUWNhfKGwRcWW429GOhP8HxUHlM6TLH4bzmlv/HlEjpvJh3JfmGsAA==}
dev: false
- /@types/hast@2.3.7:
- resolution: {integrity: sha512-EVLigw5zInURhzfXUM65eixfadfsHKomGKUakToXo84t8gGIJuTcD2xooM2See7GyQ7DRtYjhCHnSUQez8JaLw==}
+ /@types/hast@3.0.2:
+ resolution: {integrity: sha512-B5hZHgHsXvfCoO3xgNJvBnX7N8p86TqQeGKXcokW4XXi+qY4vxxPSFYofytvVmpFxzPv7oxDQzjg5Un5m2/xiw==}
dependencies:
- '@types/unist': 2.0.9
+ '@types/unist': 3.0.1
dev: false
/@types/html-to-text@9.0.3:
@@ -2865,10 +2840,10 @@ packages:
'@types/mdurl': 1.0.4
dev: false
- /@types/mdast@3.0.14:
- resolution: {integrity: sha512-gVZ04PGgw1qLZKsnWnyFv4ORnaJ+DXLdHTVSFbU8yX6xZ34Bjg4Q32yPkmveUP1yItXReKfB0Aknlh/3zxTKAw==}
+ /@types/mdast@4.0.2:
+ resolution: {integrity: sha512-tYR83EignvhYO9iU3kDg8V28M0jqyh9zzp5GV+EO+AYnyUl3P5ltkTeJuTiFZQFz670FSb3EwT/6LQdX+UdKfw==}
dependencies:
- '@types/unist': 2.0.9
+ '@types/unist': 3.0.1
dev: false
/@types/mdurl@1.0.4:
@@ -2879,10 +2854,10 @@ packages:
resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==}
dev: false
- /@types/node@20.8.7:
- resolution: {integrity: sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==}
+ /@types/node@20.8.9:
+ resolution: {integrity: sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==}
dependencies:
- undici-types: 5.25.3
+ undici-types: 5.26.5
dev: true
/@types/object.omit@3.0.2:
@@ -2899,10 +2874,10 @@ packages:
/@types/react-dom@18.2.14:
resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==}
dependencies:
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
- /@types/react@18.2.29:
- resolution: {integrity: sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==}
+ /@types/react@18.2.33:
+ resolution: {integrity: sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg==}
dependencies:
'@types/prop-types': 15.7.9
'@types/scheduler': 0.16.5
@@ -2919,16 +2894,16 @@ packages:
resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==}
dev: false
- /@types/unist@2.0.9:
- resolution: {integrity: sha512-zC0iXxAv1C1ERURduJueYzkzZ2zaGyc+P2c95hgkikHPr3z8EdUZOlgEQ5X0DRmwDZn+hekycQnoeiiRVrmilQ==}
+ /@types/unist@3.0.1:
+ resolution: {integrity: sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==}
dev: false
/@types/youtube-player@5.5.9:
resolution: {integrity: sha512-l2Q7ESxMv6HK2jc6I1qwMMGbh5bpHYQVCpXs0GsFmzaXoPibX50pHzs+PGfmegDY8TvmMGKWBgGI16ytqK6iIw==}
dev: true
- /@typescript-eslint/eslint-plugin@6.8.0(@typescript-eslint/parser@6.8.0)(eslint@8.51.0)(typescript@5.2.2):
- resolution: {integrity: sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==}
+ /@typescript-eslint/eslint-plugin@6.9.0(@typescript-eslint/parser@6.9.0)(eslint@8.52.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-lgX7F0azQwRPB7t7WAyeHWVfW1YJ9NIgd9mvGhfQpRY56X6AVf8mwM8Wol+0z4liE7XX3QOt8MN1rUKCfSjRIA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@@ -2938,14 +2913,14 @@ packages:
typescript:
optional: true
dependencies:
- '@eslint-community/regexpp': 4.9.1
- '@typescript-eslint/parser': 6.8.0(eslint@8.51.0)(typescript@5.2.2)
- '@typescript-eslint/scope-manager': 6.8.0
- '@typescript-eslint/type-utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2)
- '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2)
- '@typescript-eslint/visitor-keys': 6.8.0
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 6.9.0(eslint@8.52.0)(typescript@5.2.2)
+ '@typescript-eslint/scope-manager': 6.9.0
+ '@typescript-eslint/type-utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2)
+ '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2)
+ '@typescript-eslint/visitor-keys': 6.9.0
debug: 4.3.4
- eslint: 8.51.0
+ eslint: 8.52.0
graphemer: 1.4.0
ignore: 5.2.4
natural-compare: 1.4.0
@@ -2956,8 +2931,8 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/parser@6.8.0(eslint@8.51.0)(typescript@5.2.2):
- resolution: {integrity: sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==}
+ /@typescript-eslint/parser@6.9.0(eslint@8.52.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-GZmjMh4AJ/5gaH4XF2eXA8tMnHWP+Pm1mjQR2QN4Iz+j/zO04b9TOvJYOX2sCNIQHtRStKTxRY1FX7LhpJT4Gw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@@ -2966,27 +2941,27 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/scope-manager': 6.8.0
- '@typescript-eslint/types': 6.8.0
- '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2)
- '@typescript-eslint/visitor-keys': 6.8.0
+ '@typescript-eslint/scope-manager': 6.9.0
+ '@typescript-eslint/types': 6.9.0
+ '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2)
+ '@typescript-eslint/visitor-keys': 6.9.0
debug: 4.3.4
- eslint: 8.51.0
+ eslint: 8.52.0
typescript: 5.2.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/scope-manager@6.8.0:
- resolution: {integrity: sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==}
+ /@typescript-eslint/scope-manager@6.9.0:
+ resolution: {integrity: sha512-1R8A9Mc39n4pCCz9o79qRO31HGNDvC7UhPhv26TovDsWPBDx+Sg3rOZdCELIA3ZmNoWAuxaMOT7aWtGRSYkQxw==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
- '@typescript-eslint/types': 6.8.0
- '@typescript-eslint/visitor-keys': 6.8.0
+ '@typescript-eslint/types': 6.9.0
+ '@typescript-eslint/visitor-keys': 6.9.0
dev: true
- /@typescript-eslint/type-utils@6.8.0(eslint@8.51.0)(typescript@5.2.2):
- resolution: {integrity: sha512-RYOJdlkTJIXW7GSldUIHqc/Hkto8E+fZN96dMIFhuTJcQwdRoGN2rEWA8U6oXbLo0qufH7NPElUb+MceHtz54g==}
+ /@typescript-eslint/type-utils@6.9.0(eslint@8.52.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-XXeahmfbpuhVbhSOROIzJ+b13krFmgtc4GlEuu1WBT+RpyGPIA4Y/eGnXzjbDj5gZLzpAXO/sj+IF/x2GtTMjQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
@@ -2995,23 +2970,23 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2)
- '@typescript-eslint/utils': 6.8.0(eslint@8.51.0)(typescript@5.2.2)
+ '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2)
+ '@typescript-eslint/utils': 6.9.0(eslint@8.52.0)(typescript@5.2.2)
debug: 4.3.4
- eslint: 8.51.0
+ eslint: 8.52.0
ts-api-utils: 1.0.3(typescript@5.2.2)
typescript: 5.2.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/types@6.8.0:
- resolution: {integrity: sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==}
+ /@typescript-eslint/types@6.9.0:
+ resolution: {integrity: sha512-+KB0lbkpxBkBSiVCuQvduqMJy+I1FyDbdwSpM3IoBS7APl4Bu15lStPjgBIdykdRqQNYqYNMa8Kuidax6phaEw==}
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
- /@typescript-eslint/typescript-estree@6.8.0(typescript@5.2.2):
- resolution: {integrity: sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==}
+ /@typescript-eslint/typescript-estree@6.9.0(typescript@5.2.2):
+ resolution: {integrity: sha512-NJM2BnJFZBEAbCfBP00zONKXvMqihZCrmwCaik0UhLr0vAgb6oguXxLX1k00oQyD+vZZ+CJn3kocvv2yxm4awQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
@@ -3019,8 +2994,8 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/types': 6.8.0
- '@typescript-eslint/visitor-keys': 6.8.0
+ '@typescript-eslint/types': 6.9.0
+ '@typescript-eslint/visitor-keys': 6.9.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
@@ -3031,54 +3006,57 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/utils@6.8.0(eslint@8.51.0)(typescript@5.2.2):
- resolution: {integrity: sha512-dKs1itdE2qFG4jr0dlYLQVppqTE+Itt7GmIf/vX6CSvsW+3ov8PbWauVKyyfNngokhIO9sKZeRGCUo1+N7U98Q==}
+ /@typescript-eslint/utils@6.9.0(eslint@8.52.0)(typescript@5.2.2):
+ resolution: {integrity: sha512-5Wf+Jsqya7WcCO8me504FBigeQKVLAMPmUzYgDbWchINNh1KJbxCgVya3EQ2MjvJMVeXl3pofRmprqX6mfQkjQ==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0)
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0)
'@types/json-schema': 7.0.14
'@types/semver': 7.5.4
- '@typescript-eslint/scope-manager': 6.8.0
- '@typescript-eslint/types': 6.8.0
- '@typescript-eslint/typescript-estree': 6.8.0(typescript@5.2.2)
- eslint: 8.51.0
+ '@typescript-eslint/scope-manager': 6.9.0
+ '@typescript-eslint/types': 6.9.0
+ '@typescript-eslint/typescript-estree': 6.9.0(typescript@5.2.2)
+ eslint: 8.52.0
semver: 7.5.4
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /@typescript-eslint/visitor-keys@6.8.0:
- resolution: {integrity: sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==}
+ /@typescript-eslint/visitor-keys@6.9.0:
+ resolution: {integrity: sha512-dGtAfqjV6RFOtIP8I0B4ZTBRrlTT8NHHlZZSchQx3qReaoDeXhYM++M4So2AgFK9ZB0emRPA6JI1HkafzA2Ibg==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
- '@typescript-eslint/types': 6.8.0
+ '@typescript-eslint/types': 6.9.0
eslint-visitor-keys: 3.4.3
dev: true
+ /@ungap/structured-clone@1.2.0:
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+
/@vitejs/plugin-react-swc@3.4.0(vite@4.5.0):
resolution: {integrity: sha512-m7UaA4Uvz82N/0EOVpZL4XsFIakRqrFKeSNxa1FBLSXGvWrWRBwmZb4qxk+ZIVAZcW3c3dn5YosomDgx62XWcQ==}
peerDependencies:
vite: ^4
dependencies:
- '@swc/core': 1.3.93
- vite: 4.5.0(@types/node@20.8.7)
+ '@swc/core': 1.3.95
+ vite: 4.5.0(@types/node@20.8.9)
transitivePeerDependencies:
- '@swc/helpers'
dev: true
- /acorn-jsx@5.3.2(acorn@8.10.0):
+ /acorn-jsx@5.3.2(acorn@8.11.1):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- acorn: 8.10.0
+ acorn: 8.11.1
dev: true
- /acorn@8.10.0:
- resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
+ /acorn@8.11.1:
+ resolution: {integrity: sha512-IJTNCJMRHfRfb8un89z1QtS0x890C2QUrUxFMK8zy+RizcId6mfnqOf68Bu9YkDgpLYuvCm6aYbwDatXVZPjMQ==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -3158,7 +3136,7 @@ packages:
/array-buffer-byte-length@1.0.0:
resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
is-array-buffer: 3.0.2
dev: true
@@ -3166,10 +3144,10 @@ packages:
resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
- get-intrinsic: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
is-string: 1.0.7
dev: true
@@ -3182,30 +3160,30 @@ packages:
resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
- es-shim-unscopables: 1.0.0
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
dev: true
/array.prototype.flatmap@1.3.2:
resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
- es-shim-unscopables: 1.0.0
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
dev: true
/array.prototype.tosorted@1.1.2:
resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
- es-shim-unscopables: 1.0.0
- get-intrinsic: 1.2.1
+ es-abstract: 1.22.3
+ es-shim-unscopables: 1.0.2
+ get-intrinsic: 1.2.2
dev: true
/arraybuffer.prototype.slice@1.0.2:
@@ -3213,10 +3191,10 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
array-buffer-byte-length: 1.0.0
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
- get-intrinsic: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
is-array-buffer: 3.0.2
is-shared-array-buffer: 1.0.2
dev: true
@@ -3239,7 +3217,7 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.22.1
- caniuse-lite: 1.0.30001550
+ caniuse-lite: 1.0.30001554
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.0
@@ -3291,8 +3269,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001550
- electron-to-chromium: 1.4.559
+ caniuse-lite: 1.0.30001554
+ electron-to-chromium: 1.4.568
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
@@ -3304,11 +3282,12 @@ packages:
node-gyp-build: 4.6.1
dev: false
- /call-bind@1.0.2:
- resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
+ /call-bind@1.0.5:
+ resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
dependencies:
function-bind: 1.1.2
- get-intrinsic: 1.2.1
+ get-intrinsic: 1.2.2
+ set-function-length: 1.1.1
dev: true
/callsites@3.1.0:
@@ -3320,8 +3299,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
- /caniuse-lite@1.0.30001550:
- resolution: {integrity: sha512-p82WjBYIypO0ukTsd/FG3Xxs+4tFeaY9pfT4amQL8KWtYH7H9nYwReGAbMTJ0hsmRO8IfDtsS6p3ZWj8+1c2RQ==}
+ /caniuse-lite@1.0.30001554:
+ resolution: {integrity: sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==}
/case-anything@2.1.13:
resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==}
@@ -3421,8 +3400,8 @@ packages:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
dev: false
- /commander@11.0.0:
- resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==}
+ /commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
dev: true
@@ -3458,8 +3437,8 @@ packages:
which: 2.0.2
dev: true
- /crypto-js@4.1.1:
- resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==}
+ /crypto-js@4.2.0:
+ resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==}
dev: false
/cssesc@3.0.0:
@@ -3600,9 +3579,9 @@ packages:
resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
engines: {node: '>= 0.4'}
dependencies:
- get-intrinsic: 1.2.1
+ get-intrinsic: 1.2.2
gopd: 1.0.1
- has-property-descriptors: 1.0.0
+ has-property-descriptors: 1.0.1
dev: true
/define-properties@1.2.1:
@@ -3610,7 +3589,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.1
- has-property-descriptors: 1.0.0
+ has-property-descriptors: 1.0.1
object-keys: 1.1.1
dev: true
@@ -3618,14 +3597,20 @@ packages:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
- /destr@2.0.1:
- resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==}
+ /destr@2.0.2:
+ resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==}
dev: false
/detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
dev: false
+ /devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ dependencies:
+ dequal: 2.0.3
+ dev: false
+
/dexie@3.2.4:
resolution: {integrity: sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA==}
engines: {node: '>=6.0'}
@@ -3634,11 +3619,6 @@ packages:
/didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
- /diff@5.1.0:
- resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
- engines: {node: '>=0.3.1'}
- dev: false
-
/dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -3694,8 +3674,8 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true
- /electron-to-chromium@1.4.559:
- resolution: {integrity: sha512-iS7KhLYCSJbdo3rUSkhDTVuFNCV34RKs2UaB9Ecr7VlqzjjWW//0nfsFF5dtDmyXlZQaDYYtID5fjtC/6lpRug==}
+ /electron-to-chromium@1.4.568:
+ resolution: {integrity: sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==}
/emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
@@ -3717,26 +3697,26 @@ packages:
engines: {node: '>=0.12'}
dev: false
- /es-abstract@1.22.2:
- resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==}
+ /es-abstract@1.22.3:
+ resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
engines: {node: '>= 0.4'}
dependencies:
array-buffer-byte-length: 1.0.0
arraybuffer.prototype.slice: 1.0.2
available-typed-arrays: 1.0.5
- call-bind: 1.0.2
- es-set-tostringtag: 2.0.1
+ call-bind: 1.0.5
+ es-set-tostringtag: 2.0.2
es-to-primitive: 1.2.1
function.prototype.name: 1.1.6
- get-intrinsic: 1.2.1
+ get-intrinsic: 1.2.2
get-symbol-description: 1.0.0
globalthis: 1.0.3
gopd: 1.0.1
- has: 1.0.4
- has-property-descriptors: 1.0.0
+ has-property-descriptors: 1.0.1
has-proto: 1.0.1
has-symbols: 1.0.3
- internal-slot: 1.0.5
+ hasown: 2.0.0
+ internal-slot: 1.0.6
is-array-buffer: 3.0.2
is-callable: 1.2.7
is-negative-zero: 2.0.2
@@ -3745,7 +3725,7 @@ packages:
is-string: 1.0.7
is-typed-array: 1.1.12
is-weakref: 1.0.2
- object-inspect: 1.13.0
+ object-inspect: 1.13.1
object-keys: 1.1.1
object.assign: 4.1.4
regexp.prototype.flags: 1.5.1
@@ -3759,41 +3739,41 @@ packages:
typed-array-byte-offset: 1.0.0
typed-array-length: 1.0.4
unbox-primitive: 1.0.2
- which-typed-array: 1.1.11
+ which-typed-array: 1.1.13
dev: true
/es-iterator-helpers@1.0.15:
resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==}
dependencies:
asynciterator.prototype: 1.0.0
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
- es-set-tostringtag: 2.0.1
+ es-abstract: 1.22.3
+ es-set-tostringtag: 2.0.2
function-bind: 1.1.2
- get-intrinsic: 1.2.1
+ get-intrinsic: 1.2.2
globalthis: 1.0.3
- has-property-descriptors: 1.0.0
+ has-property-descriptors: 1.0.1
has-proto: 1.0.1
has-symbols: 1.0.3
- internal-slot: 1.0.5
+ internal-slot: 1.0.6
iterator.prototype: 1.1.2
safe-array-concat: 1.0.1
dev: true
- /es-set-tostringtag@2.0.1:
- resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
+ /es-set-tostringtag@2.0.2:
+ resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==}
engines: {node: '>= 0.4'}
dependencies:
- get-intrinsic: 1.2.1
- has: 1.0.4
+ get-intrinsic: 1.2.2
has-tostringtag: 1.0.0
+ hasown: 2.0.0
dev: true
- /es-shim-unscopables@1.0.0:
- resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
+ /es-shim-unscopables@1.0.2:
+ resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
dependencies:
- has: 1.0.4
+ hasown: 2.0.0
dev: true
/es-to-primitive@1.2.1:
@@ -3877,16 +3857,16 @@ packages:
engines: {node: '>=12'}
dev: false
- /eslint-config-prettier@9.0.0(eslint@8.51.0):
+ /eslint-config-prettier@9.0.0(eslint@8.52.0):
resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
hasBin: true
peerDependencies:
eslint: '>=7.0.0'
dependencies:
- eslint: 8.51.0
+ eslint: 8.52.0
dev: true
- /eslint-plugin-jsx-a11y@6.7.1(eslint@8.51.0):
+ /eslint-plugin-jsx-a11y@6.7.1(eslint@8.52.0):
resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
engines: {node: '>=4.0'}
peerDependencies:
@@ -3901,7 +3881,7 @@ packages:
axobject-query: 3.2.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 8.51.0
+ eslint: 8.52.0
has: 1.0.4
jsx-ast-utils: 3.3.5
language-tags: 1.0.5
@@ -3911,7 +3891,7 @@ packages:
semver: 6.3.1
dev: true
- /eslint-plugin-react@7.33.2(eslint@8.51.0):
+ /eslint-plugin-react@7.33.2(eslint@8.52.0):
resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
engines: {node: '>=4'}
peerDependencies:
@@ -3922,7 +3902,7 @@ packages:
array.prototype.tosorted: 1.1.2
doctrine: 2.1.0
es-iterator-helpers: 1.0.15
- eslint: 8.51.0
+ eslint: 8.52.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.5
minimatch: 3.1.2
@@ -3936,12 +3916,12 @@ packages:
string.prototype.matchall: 4.0.10
dev: true
- /eslint-plugin-simple-import-sort@10.0.0(eslint@8.51.0):
+ /eslint-plugin-simple-import-sort@10.0.0(eslint@8.52.0):
resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==}
peerDependencies:
eslint: '>=5.0.0'
dependencies:
- eslint: 8.51.0
+ eslint: 8.52.0
dev: true
/eslint-scope@7.2.2:
@@ -3957,18 +3937,19 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true
- /eslint@8.51.0:
- resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==}
+ /eslint@8.52.0:
+ resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true
dependencies:
- '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0)
- '@eslint-community/regexpp': 4.9.1
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0)
+ '@eslint-community/regexpp': 4.10.0
'@eslint/eslintrc': 2.1.2
- '@eslint/js': 8.51.0
- '@humanwhocodes/config-array': 0.11.11
+ '@eslint/js': 8.52.0
+ '@humanwhocodes/config-array': 0.11.13
'@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
@@ -4007,8 +3988,8 @@ packages:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
- acorn: 8.10.0
- acorn-jsx: 5.3.2(acorn@8.10.0)
+ acorn: 8.11.1
+ acorn-jsx: 5.3.2(acorn@8.11.1)
eslint-visitor-keys: 3.4.3
dev: true
@@ -4044,18 +4025,18 @@ packages:
engines: {node: '>=0.8.x'}
dev: false
- /execa@7.2.0:
- resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
- engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
+ /execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
dependencies:
cross-spawn: 7.0.3
- get-stream: 6.0.1
- human-signals: 4.3.1
+ get-stream: 8.0.1
+ human-signals: 5.0.0
is-stream: 3.0.0
merge-stream: 2.0.0
npm-run-path: 5.1.0
onetime: 6.0.0
- signal-exit: 3.0.7
+ signal-exit: 4.1.0
strip-final-newline: 3.0.0
dev: true
@@ -4184,15 +4165,14 @@ packages:
/function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- dev: true
/function.prototype.name@1.1.6:
resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
+ es-abstract: 1.22.3
functions-have-names: 1.2.3
dev: true
@@ -4205,13 +4185,13 @@ packages:
engines: {node: '>=6.9.0'}
dev: false
- /get-intrinsic@1.2.1:
- resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
+ /get-intrinsic@1.2.2:
+ resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
dependencies:
function-bind: 1.1.2
- has: 1.0.4
has-proto: 1.0.1
has-symbols: 1.0.3
+ hasown: 2.0.0
dev: true
/get-nonce@1.0.1:
@@ -4219,17 +4199,17 @@ packages:
engines: {node: '>=6'}
dev: false
- /get-stream@6.0.1:
- resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
- engines: {node: '>=10'}
+ /get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
dev: true
/get-symbol-description@1.0.0:
resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.1
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
dev: true
/glob-parent@5.1.2:
@@ -4302,7 +4282,7 @@ packages:
/gopd@1.0.1:
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
dependencies:
- get-intrinsic: 1.2.1
+ get-intrinsic: 1.2.2
dev: true
/graphemer@1.4.0:
@@ -4322,10 +4302,10 @@ packages:
engines: {node: '>=8'}
dev: true
- /has-property-descriptors@1.0.0:
- resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+ /has-property-descriptors@1.0.1:
+ resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==}
dependencies:
- get-intrinsic: 1.2.1
+ get-intrinsic: 1.2.2
dev: true
/has-proto@1.0.1:
@@ -4348,9 +4328,38 @@ packages:
/has@1.0.4:
resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==}
engines: {node: '>= 0.4.0'}
+ dev: true
- /hast-util-whitespace@2.0.1:
- resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==}
+ /hasown@2.0.0:
+ resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+
+ /hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+ dependencies:
+ '@types/hast': 3.0.2
+ dev: false
+
+ /hast-util-to-jsx-runtime@2.2.0:
+ resolution: {integrity: sha512-wSlp23N45CMjDg/BPW8zvhEi3R+8eRE1qFbjEyAUzMCzu2l1Wzwakq+Tlia9nkCtEl5mDxa7nKHsvYJ6Gfn21A==}
+ dependencies:
+ '@types/hast': 3.0.2
+ '@types/unist': 3.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-whitespace: 3.0.0
+ property-information: 6.3.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 0.4.4
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.2
+ dev: false
+
+ /hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+ dependencies:
+ '@types/hast': 3.0.2
dev: false
/html-to-text@9.0.5:
@@ -4364,6 +4373,10 @@ packages:
selderee: 0.11.0
dev: false
+ /html-url-attributes@3.0.0:
+ resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==}
+ dev: false
+
/htmlparser2@8.0.2:
resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
dependencies:
@@ -4373,9 +4386,9 @@ packages:
entities: 4.5.0
dev: false
- /human-signals@4.3.1:
- resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
- engines: {node: '>=14.18.0'}
+ /human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
dev: true
/husky@8.0.3:
@@ -4422,12 +4435,12 @@ packages:
resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
dev: false
- /internal-slot@1.0.5:
- resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
+ /internal-slot@1.0.6:
+ resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==}
engines: {node: '>= 0.4'}
dependencies:
- get-intrinsic: 1.2.1
- has: 1.0.4
+ get-intrinsic: 1.2.2
+ hasown: 2.0.0
side-channel: 1.0.4
dev: true
@@ -4437,11 +4450,16 @@ packages:
loose-envify: 1.4.0
dev: false
+ /is-absolute-url@4.0.1:
+ resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: false
+
/is-array-buffer@3.0.2:
resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.1
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
is-typed-array: 1.1.12
dev: true
@@ -4468,24 +4486,19 @@ packages:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
has-tostringtag: 1.0.0
dev: true
- /is-buffer@2.0.5:
- resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
- engines: {node: '>=4'}
- dev: false
-
/is-callable@1.2.7:
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
engines: {node: '>= 0.4'}
dev: true
- /is-core-module@2.13.0:
- resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
+ /is-core-module@2.13.1:
+ resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
- has: 1.0.4
+ hasown: 2.0.0
/is-date-object@1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
@@ -4508,7 +4521,7 @@ packages:
/is-finalizationregistry@1.0.2:
resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
dev: true
/is-fullwidth-code-point@4.0.0:
@@ -4570,7 +4583,7 @@ packages:
resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
has-tostringtag: 1.0.0
dev: true
@@ -4581,7 +4594,7 @@ packages:
/is-shared-array-buffer@1.0.2:
resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
dev: true
/is-stream@3.0.0:
@@ -4607,7 +4620,7 @@ packages:
resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
engines: {node: '>= 0.4'}
dependencies:
- which-typed-array: 1.1.11
+ which-typed-array: 1.1.13
dev: true
/is-typedarray@1.0.0:
@@ -4621,14 +4634,14 @@ packages:
/is-weakref@1.0.2:
resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
dev: true
/is-weakset@2.0.2:
resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.1
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
dev: true
/isarray@2.0.5:
@@ -4648,7 +4661,7 @@ packages:
resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
dependencies:
define-properties: 1.2.1
- get-intrinsic: 1.2.1
+ get-intrinsic: 1.2.2
has-symbols: 1.0.3
reflect.getprototypeof: 1.0.4
set-function-name: 2.0.1
@@ -4757,34 +4770,28 @@ packages:
uc.micro: 1.0.6
dev: false
- /lint-staged@14.0.1:
- resolution: {integrity: sha512-Mw0cL6HXnHN1ag0mN/Dg4g6sr8uf8sn98w2Oc1ECtFto9tvRF7nkXGJRbx8gPlHyoR0pLyBr2lQHbWwmUHe1Sw==}
- engines: {node: ^16.14.0 || >=18.0.0}
+ /lint-staged@15.0.2:
+ resolution: {integrity: sha512-vnEy7pFTHyVuDmCAIFKR5QDO8XLVlPFQQyujQ/STOxe40ICWqJ6knS2wSJ/ffX/Lw0rz83luRDh+ET7toN+rOw==}
+ engines: {node: '>=18.12.0'}
hasBin: true
dependencies:
chalk: 5.3.0
- commander: 11.0.0
+ commander: 11.1.0
debug: 4.3.4
- execa: 7.2.0
+ execa: 8.0.1
lilconfig: 2.1.0
- listr2: 6.6.1
+ listr2: 7.0.2
micromatch: 4.0.5
pidtree: 0.6.0
string-argv: 0.3.2
- yaml: 2.3.1
+ yaml: 2.3.3
transitivePeerDependencies:
- - enquirer
- supports-color
dev: true
- /listr2@6.6.1:
- resolution: {integrity: sha512-+rAXGHh0fkEWdXBmX+L6mmfmXmXvDGEKzkjxO+8mP3+nI/r/CWznVBvsibXdxda9Zz0OW2e2ikphN3OwCT/jSg==}
+ /listr2@7.0.2:
+ resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==}
engines: {node: '>=16.0.0'}
- peerDependencies:
- enquirer: '>= 2.3.0 < 3'
- peerDependenciesMeta:
- enquirer:
- optional: true
dependencies:
cli-truncate: 3.1.0
colorette: 2.0.20
@@ -4879,135 +4886,140 @@ packages:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: false
- /mdast-util-definitions@5.1.2:
- resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==}
+ /mdast-util-find-and-replace@3.0.1:
+ resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
dependencies:
- '@types/mdast': 3.0.14
- '@types/unist': 2.0.9
- unist-util-visit: 4.1.2
- dev: false
-
- /mdast-util-find-and-replace@2.2.2:
- resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==}
- dependencies:
- '@types/mdast': 3.0.14
+ '@types/mdast': 4.0.2
escape-string-regexp: 5.0.0
- unist-util-is: 5.2.1
- unist-util-visit-parents: 5.1.3
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
dev: false
- /mdast-util-from-markdown@1.3.1:
- resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==}
+ /mdast-util-from-markdown@2.0.0:
+ resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==}
dependencies:
- '@types/mdast': 3.0.14
- '@types/unist': 2.0.9
+ '@types/mdast': 4.0.2
+ '@types/unist': 3.0.1
decode-named-character-reference: 1.0.2
- mdast-util-to-string: 3.2.0
- micromark: 3.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-decode-string: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- unist-util-stringify-position: 3.0.3
- uvu: 0.5.6
+ devlop: 1.1.0
+ mdast-util-to-string: 4.0.0
+ micromark: 4.0.0
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-decode-string: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ unist-util-stringify-position: 4.0.0
transitivePeerDependencies:
- supports-color
dev: false
- /mdast-util-gfm-autolink-literal@1.0.3:
- resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==}
+ /mdast-util-gfm-autolink-literal@2.0.0:
+ resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==}
dependencies:
- '@types/mdast': 3.0.14
+ '@types/mdast': 4.0.2
ccount: 2.0.1
- mdast-util-find-and-replace: 2.2.2
- micromark-util-character: 1.2.0
+ devlop: 1.1.0
+ mdast-util-find-and-replace: 3.0.1
+ micromark-util-character: 2.0.1
dev: false
- /mdast-util-gfm-footnote@1.0.2:
- resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==}
+ /mdast-util-gfm-footnote@2.0.0:
+ resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
dependencies:
- '@types/mdast': 3.0.14
- mdast-util-to-markdown: 1.5.0
- micromark-util-normalize-identifier: 1.1.0
+ '@types/mdast': 4.0.2
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ micromark-util-normalize-identifier: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
dev: false
- /mdast-util-gfm-strikethrough@1.0.3:
- resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==}
+ /mdast-util-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
dependencies:
- '@types/mdast': 3.0.14
- mdast-util-to-markdown: 1.5.0
+ '@types/mdast': 4.0.2
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
dev: false
- /mdast-util-gfm-table@1.0.7:
- resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==}
+ /mdast-util-gfm-table@2.0.0:
+ resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
dependencies:
- '@types/mdast': 3.0.14
+ '@types/mdast': 4.0.2
+ devlop: 1.1.0
markdown-table: 3.0.3
- mdast-util-from-markdown: 1.3.1
- mdast-util-to-markdown: 1.5.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
- supports-color
dev: false
- /mdast-util-gfm-task-list-item@1.0.2:
- resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==}
+ /mdast-util-gfm-task-list-item@2.0.0:
+ resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
dependencies:
- '@types/mdast': 3.0.14
- mdast-util-to-markdown: 1.5.0
- dev: false
-
- /mdast-util-gfm@2.0.2:
- resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==}
- dependencies:
- mdast-util-from-markdown: 1.3.1
- mdast-util-gfm-autolink-literal: 1.0.3
- mdast-util-gfm-footnote: 1.0.2
- mdast-util-gfm-strikethrough: 1.0.3
- mdast-util-gfm-table: 1.0.7
- mdast-util-gfm-task-list-item: 1.0.2
- mdast-util-to-markdown: 1.5.0
+ '@types/mdast': 4.0.2
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
- supports-color
dev: false
- /mdast-util-phrasing@3.0.1:
- resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==}
+ /mdast-util-gfm@3.0.0:
+ resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
dependencies:
- '@types/mdast': 3.0.14
- unist-util-is: 5.2.1
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-gfm-autolink-literal: 2.0.0
+ mdast-util-gfm-footnote: 2.0.0
+ mdast-util-gfm-strikethrough: 2.0.0
+ mdast-util-gfm-table: 2.0.0
+ mdast-util-gfm-task-list-item: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
dev: false
- /mdast-util-to-hast@12.3.0:
- resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==}
+ /mdast-util-phrasing@4.0.0:
+ resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==}
dependencies:
- '@types/hast': 2.3.7
- '@types/mdast': 3.0.14
- mdast-util-definitions: 5.1.2
- micromark-util-sanitize-uri: 1.2.0
+ '@types/mdast': 4.0.2
+ unist-util-is: 6.0.0
+ dev: false
+
+ /mdast-util-to-hast@13.0.2:
+ resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==}
+ dependencies:
+ '@types/hast': 3.0.2
+ '@types/mdast': 4.0.2
+ '@ungap/structured-clone': 1.2.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.0
trim-lines: 3.0.1
- unist-util-generated: 2.0.1
- unist-util-position: 4.0.4
- unist-util-visit: 4.1.2
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
dev: false
- /mdast-util-to-markdown@1.5.0:
- resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
+ /mdast-util-to-markdown@2.1.0:
+ resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
dependencies:
- '@types/mdast': 3.0.14
- '@types/unist': 2.0.9
+ '@types/mdast': 4.0.2
+ '@types/unist': 3.0.1
longest-streak: 3.1.0
- mdast-util-phrasing: 3.0.1
- mdast-util-to-string: 3.2.0
- micromark-util-decode-string: 1.1.0
- unist-util-visit: 4.1.2
+ mdast-util-phrasing: 4.0.0
+ mdast-util-to-string: 4.0.0
+ micromark-util-decode-string: 2.0.0
+ unist-util-visit: 5.0.0
zwitch: 2.0.4
dev: false
- /mdast-util-to-string@3.2.0:
- resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==}
+ /mdast-util-to-string@4.0.0:
+ resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
dependencies:
- '@types/mdast': 3.0.14
+ '@types/mdast': 4.0.2
dev: false
/mdurl@1.0.1:
@@ -5026,249 +5038,249 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- /micromark-core-commonmark@1.1.0:
- resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==}
+ /micromark-core-commonmark@2.0.0:
+ resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==}
dependencies:
decode-named-character-reference: 1.0.2
- micromark-factory-destination: 1.1.0
- micromark-factory-label: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-factory-title: 1.1.0
- micromark-factory-whitespace: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-classify-character: 1.1.0
- micromark-util-html-tag-name: 1.2.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-factory-destination: 2.0.0
+ micromark-factory-label: 2.0.0
+ micromark-factory-space: 2.0.0
+ micromark-factory-title: 2.0.0
+ micromark-factory-whitespace: 2.0.0
+ micromark-util-character: 2.0.1
+ micromark-util-chunked: 2.0.0
+ micromark-util-classify-character: 2.0.0
+ micromark-util-html-tag-name: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-subtokenize: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-extension-gfm-autolink-literal@1.0.5:
- resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==}
+ /micromark-extension-gfm-autolink-literal@2.0.0:
+ resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-character: 2.0.1
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-extension-gfm-footnote@1.1.2:
- resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==}
+ /micromark-extension-gfm-footnote@2.0.0:
+ resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==}
dependencies:
- micromark-core-commonmark: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.0.1
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-extension-gfm-strikethrough@1.0.7:
- resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==}
+ /micromark-extension-gfm-strikethrough@2.0.0:
+ resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==}
dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-classify-character: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-classify-character: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-extension-gfm-table@1.0.7:
- resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==}
+ /micromark-extension-gfm-table@2.0.0:
+ resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==}
dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-extension-gfm-tagfilter@1.0.2:
- resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==}
+ /micromark-extension-gfm-tagfilter@2.0.0:
+ resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
dependencies:
- micromark-util-types: 1.1.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-extension-gfm-task-list-item@1.0.5:
- resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==}
+ /micromark-extension-gfm-task-list-item@2.0.1:
+ resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==}
dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-extension-gfm@2.0.3:
- resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==}
+ /micromark-extension-gfm@3.0.0:
+ resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
dependencies:
- micromark-extension-gfm-autolink-literal: 1.0.5
- micromark-extension-gfm-footnote: 1.1.2
- micromark-extension-gfm-strikethrough: 1.0.7
- micromark-extension-gfm-table: 1.0.7
- micromark-extension-gfm-tagfilter: 1.0.2
- micromark-extension-gfm-task-list-item: 1.0.5
- micromark-util-combine-extensions: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-extension-gfm-autolink-literal: 2.0.0
+ micromark-extension-gfm-footnote: 2.0.0
+ micromark-extension-gfm-strikethrough: 2.0.0
+ micromark-extension-gfm-table: 2.0.0
+ micromark-extension-gfm-tagfilter: 2.0.0
+ micromark-extension-gfm-task-list-item: 2.0.1
+ micromark-util-combine-extensions: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-factory-destination@1.1.0:
- resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==}
+ /micromark-factory-destination@2.0.0:
+ resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-character: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-factory-label@1.1.0:
- resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==}
+ /micromark-factory-label@2.0.0:
+ resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-util-character: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-factory-space@1.1.0:
- resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==}
+ /micromark-factory-space@2.0.0:
+ resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-types: 1.1.0
+ micromark-util-character: 2.0.1
+ micromark-util-types: 2.0.0
dev: false
- /micromark-factory-title@1.1.0:
- resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==}
+ /micromark-factory-title@2.0.0:
+ resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-factory-whitespace@1.1.0:
- resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==}
+ /micromark-factory-whitespace@2.0.0:
+ resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
dependencies:
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-util-character@1.2.0:
- resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==}
+ /micromark-util-character@2.0.1:
+ resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==}
dependencies:
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-util-chunked@1.1.0:
- resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
+ /micromark-util-chunked@2.0.0:
+ resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
dependencies:
- micromark-util-symbol: 1.1.0
+ micromark-util-symbol: 2.0.0
dev: false
- /micromark-util-classify-character@1.1.0:
- resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==}
+ /micromark-util-classify-character@2.0.0:
+ resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-character: 2.0.1
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-util-combine-extensions@1.1.0:
- resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==}
+ /micromark-util-combine-extensions@2.0.0:
+ resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-types: 1.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-util-decode-numeric-character-reference@1.1.0:
- resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==}
+ /micromark-util-decode-numeric-character-reference@2.0.1:
+ resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
dependencies:
- micromark-util-symbol: 1.1.0
+ micromark-util-symbol: 2.0.0
dev: false
- /micromark-util-decode-string@1.1.0:
- resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==}
+ /micromark-util-decode-string@2.0.0:
+ resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
dependencies:
decode-named-character-reference: 1.0.2
- micromark-util-character: 1.2.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-symbol: 1.1.0
+ micromark-util-character: 2.0.1
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-symbol: 2.0.0
dev: false
- /micromark-util-encode@1.1.0:
- resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
+ /micromark-util-encode@2.0.0:
+ resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
dev: false
- /micromark-util-html-tag-name@1.2.0:
- resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
+ /micromark-util-html-tag-name@2.0.0:
+ resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
dev: false
- /micromark-util-normalize-identifier@1.1.0:
- resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==}
+ /micromark-util-normalize-identifier@2.0.0:
+ resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
dependencies:
- micromark-util-symbol: 1.1.0
+ micromark-util-symbol: 2.0.0
dev: false
- /micromark-util-resolve-all@1.1.0:
- resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==}
+ /micromark-util-resolve-all@2.0.0:
+ resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
dependencies:
- micromark-util-types: 1.1.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-util-sanitize-uri@1.2.0:
- resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==}
+ /micromark-util-sanitize-uri@2.0.0:
+ resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
dependencies:
- micromark-util-character: 1.2.0
- micromark-util-encode: 1.1.0
- micromark-util-symbol: 1.1.0
+ micromark-util-character: 2.0.1
+ micromark-util-encode: 2.0.0
+ micromark-util-symbol: 2.0.0
dev: false
- /micromark-util-subtokenize@1.1.0:
- resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
+ /micromark-util-subtokenize@2.0.0:
+ resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==}
dependencies:
- micromark-util-chunked: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-util-chunked: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
dev: false
- /micromark-util-symbol@1.1.0:
- resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
+ /micromark-util-symbol@2.0.0:
+ resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
dev: false
- /micromark-util-types@1.1.0:
- resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
+ /micromark-util-types@2.0.0:
+ resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
dev: false
- /micromark@3.2.0:
- resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==}
+ /micromark@4.0.0:
+ resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
dependencies:
'@types/debug': 4.1.10
debug: 4.3.4
decode-named-character-reference: 1.0.2
- micromark-core-commonmark: 1.1.0
- micromark-factory-space: 1.1.0
- micromark-util-character: 1.2.0
- micromark-util-chunked: 1.1.0
- micromark-util-combine-extensions: 1.1.0
- micromark-util-decode-numeric-character-reference: 1.1.0
- micromark-util-encode: 1.1.0
- micromark-util-normalize-identifier: 1.1.0
- micromark-util-resolve-all: 1.1.0
- micromark-util-sanitize-uri: 1.2.0
- micromark-util-subtokenize: 1.1.0
- micromark-util-symbol: 1.1.0
- micromark-util-types: 1.1.0
- uvu: 0.5.6
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.0
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.0.1
+ micromark-util-chunked: 2.0.0
+ micromark-util-combine-extensions: 2.0.0
+ micromark-util-decode-numeric-character-reference: 2.0.1
+ micromark-util-encode: 2.0.0
+ micromark-util-normalize-identifier: 2.0.0
+ micromark-util-resolve-all: 2.0.0
+ micromark-util-sanitize-uri: 2.0.0
+ micromark-util-subtokenize: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
transitivePeerDependencies:
- supports-color
dev: false
@@ -5316,11 +5328,6 @@ packages:
dependencies:
brace-expansion: 1.1.11
- /mri@1.2.0:
- resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
- engines: {node: '>=4'}
- dev: false
-
/ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
dev: false
@@ -5427,8 +5434,8 @@ packages:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
- /object-inspect@1.13.0:
- resolution: {integrity: sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==}
+ /object-inspect@1.13.1:
+ resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
dev: true
/object-keys@1.1.1:
@@ -5440,7 +5447,7 @@ packages:
resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
has-symbols: 1.0.3
object-keys: 1.1.1
@@ -5450,25 +5457,25 @@ packages:
resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
+ es-abstract: 1.22.3
dev: true
/object.fromentries@2.0.7:
resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
+ es-abstract: 1.22.3
dev: true
/object.hasown@1.1.3:
resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
dependencies:
define-properties: 1.2.1
- es-abstract: 1.22.2
+ es-abstract: 1.22.3
dev: true
/object.omit@3.0.0:
@@ -5489,9 +5496,9 @@ packages:
resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
+ es-abstract: 1.22.3
dev: true
/once@1.4.0:
@@ -5685,7 +5692,7 @@ packages:
engines: {node: '>= 0.8.0'}
dev: true
- /prettier-plugin-tailwindcss@0.5.6(@trivago/prettier-plugin-sort-imports@4.2.0)(prettier@3.0.3):
+ /prettier-plugin-tailwindcss@0.5.6(@trivago/prettier-plugin-sort-imports@4.2.1)(prettier@3.0.3):
resolution: {integrity: sha512-2Xgb+GQlkPAUCFi3sV+NOYcSI5XgduvDBL2Zt/hwJudeKXkyvRS65c38SB0yb9UB40+1rL83I6m0RtlOQ8eHdg==}
engines: {node: '>=14.21.3'}
peerDependencies:
@@ -5737,7 +5744,7 @@ packages:
prettier-plugin-twig-melody:
optional: true
dependencies:
- '@trivago/prettier-plugin-sort-imports': 4.2.0(prettier@3.0.3)
+ '@trivago/prettier-plugin-sort-imports': 4.2.1(prettier@3.0.3)
prettier: 3.0.3
dev: true
@@ -5753,6 +5760,7 @@ packages:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
+ dev: true
/property-information@6.3.0:
resolution: {integrity: sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==}
@@ -5966,39 +5974,32 @@ packages:
/react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
+ dev: true
- /react-is@18.2.0:
- resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
- dev: false
-
- /react-markdown@8.0.7(@types/react@18.2.29)(react@18.2.0):
- resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==}
+ /react-markdown@9.0.0(@types/react@18.2.33)(react@18.2.0):
+ resolution: {integrity: sha512-v6yNf3AB8GfJ8lCpUvzxAXKxgsHpdmWPlcVRQ6Nocsezp255E/IDrF31kLQsPJeB/cKto/geUwjU36wH784FCA==}
peerDependencies:
- '@types/react': '>=16'
- react: '>=16'
+ '@types/react': '>=18'
+ react: '>=18'
dependencies:
- '@types/hast': 2.3.7
- '@types/prop-types': 15.7.9
- '@types/react': 18.2.29
- '@types/unist': 2.0.9
- comma-separated-tokens: 2.0.3
- hast-util-whitespace: 2.0.1
- prop-types: 15.8.1
- property-information: 6.3.0
+ '@types/hast': 3.0.2
+ '@types/react': 18.2.33
+ devlop: 1.1.0
+ hast-util-to-jsx-runtime: 2.2.0
+ html-url-attributes: 3.0.0
+ mdast-util-to-hast: 13.0.2
+ micromark-util-sanitize-uri: 2.0.0
react: 18.2.0
- react-is: 18.2.0
- remark-parse: 10.0.2
- remark-rehype: 10.1.0
- space-separated-tokens: 2.0.2
- style-to-object: 0.4.4
- unified: 10.1.2
- unist-util-visit: 4.1.2
- vfile: 5.3.7
+ remark-parse: 11.0.0
+ remark-rehype: 11.0.0
+ unified: 11.0.4
+ unist-util-visit: 5.0.0
+ vfile: 6.0.1
transitivePeerDependencies:
- supports-color
dev: false
- /react-remove-scroll-bar@2.3.4(@types/react@18.2.29)(react@18.2.0):
+ /react-remove-scroll-bar@2.3.4(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==}
engines: {node: '>=10'}
peerDependencies:
@@ -6008,13 +6009,13 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
- react-style-singleton: 2.2.1(@types/react@18.2.29)(react@18.2.0)
+ react-style-singleton: 2.2.1(@types/react@18.2.33)(react@18.2.0)
tslib: 2.6.2
dev: false
- /react-remove-scroll@2.5.5(@types/react@18.2.29)(react@18.2.0):
+ /react-remove-scroll@2.5.5(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==}
engines: {node: '>=10'}
peerDependencies:
@@ -6024,13 +6025,13 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
- react-remove-scroll-bar: 2.3.4(@types/react@18.2.29)(react@18.2.0)
- react-style-singleton: 2.2.1(@types/react@18.2.29)(react@18.2.0)
+ react-remove-scroll-bar: 2.3.4(@types/react@18.2.33)(react@18.2.0)
+ react-style-singleton: 2.2.1(@types/react@18.2.33)(react@18.2.0)
tslib: 2.6.2
- use-callback-ref: 1.3.0(@types/react@18.2.29)(react@18.2.0)
- use-sidecar: 1.1.2(@types/react@18.2.29)(react@18.2.0)
+ use-callback-ref: 1.3.0(@types/react@18.2.33)(react@18.2.0)
+ use-sidecar: 1.1.2(@types/react@18.2.33)(react@18.2.0)
dev: false
/react-router-dom@6.17.0(react-dom@18.2.0)(react@18.2.0):
@@ -6061,7 +6062,7 @@ packages:
engines: {node: '>=0.12.0'}
dev: false
- /react-style-singleton@2.2.1(@types/react@18.2.29)(react@18.2.0):
+ /react-style-singleton@2.2.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
engines: {node: '>=10'}
peerDependencies:
@@ -6071,7 +6072,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
get-nonce: 1.0.1
invariant: 2.2.4
react: 18.2.0
@@ -6085,18 +6086,18 @@ packages:
loose-envify: 1.4.0
dev: false
- /reactflow@11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0):
+ /reactflow@11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-IHAKBkJngNvU9y1vZ5Nw9rvA3Z+zc9geTgQQIi9qq9Y9knGLlDDr9KfsjbFMew9AycAAgVg8TvBEakF4IT5lqg==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/background': 11.3.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/controls': 11.2.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/core': 11.9.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/minimap': 11.7.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/node-resizer': 2.2.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/node-toolbar': 1.3.4(@types/react@18.2.29)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/background': 11.3.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/controls': 11.2.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/minimap': 11.7.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/node-resizer': 2.2.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/node-toolbar': 1.3.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -6119,10 +6120,10 @@ packages:
resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
- get-intrinsic: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
globalthis: 1.0.3
which-builtin-type: 1.1.3
dev: true
@@ -6134,39 +6135,62 @@ packages:
resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
set-function-name: 2.0.1
dev: true
- /remark-gfm@3.0.1:
- resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==}
+ /rehype-external-links@3.0.0:
+ resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==}
dependencies:
- '@types/mdast': 3.0.14
- mdast-util-gfm: 2.0.2
- micromark-extension-gfm: 2.0.3
- unified: 10.1.2
+ '@types/hast': 3.0.2
+ '@ungap/structured-clone': 1.2.0
+ hast-util-is-element: 3.0.0
+ is-absolute-url: 4.0.1
+ space-separated-tokens: 2.0.2
+ unist-util-visit: 5.0.0
+ dev: false
+
+ /remark-gfm@4.0.0:
+ resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+ dependencies:
+ '@types/mdast': 4.0.2
+ mdast-util-gfm: 3.0.0
+ micromark-extension-gfm: 3.0.0
+ remark-parse: 11.0.0
+ remark-stringify: 11.0.0
+ unified: 11.0.4
transitivePeerDependencies:
- supports-color
dev: false
- /remark-parse@10.0.2:
- resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==}
+ /remark-parse@11.0.0:
+ resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
dependencies:
- '@types/mdast': 3.0.14
- mdast-util-from-markdown: 1.3.1
- unified: 10.1.2
+ '@types/mdast': 4.0.2
+ mdast-util-from-markdown: 2.0.0
+ micromark-util-types: 2.0.0
+ unified: 11.0.4
transitivePeerDependencies:
- supports-color
dev: false
- /remark-rehype@10.1.0:
- resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==}
+ /remark-rehype@11.0.0:
+ resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==}
dependencies:
- '@types/hast': 2.3.7
- '@types/mdast': 3.0.14
- mdast-util-to-hast: 12.3.0
- unified: 10.1.2
+ '@types/hast': 3.0.2
+ '@types/mdast': 4.0.2
+ mdast-util-to-hast: 13.0.2
+ unified: 11.0.4
+ vfile: 6.0.1
+ dev: false
+
+ /remark-stringify@11.0.0:
+ resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+ dependencies:
+ '@types/mdast': 4.0.2
+ mdast-util-to-markdown: 2.1.0
+ unified: 11.0.4
dev: false
/resolve-from@4.0.0:
@@ -6178,7 +6202,7 @@ packages:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true
dependencies:
- is-core-module: 2.13.0
+ is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -6186,7 +6210,7 @@ packages:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
dependencies:
- is-core-module: 2.13.0
+ is-core-module: 2.13.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
@@ -6230,19 +6254,12 @@ packages:
dependencies:
queue-microtask: 1.2.3
- /sade@1.8.1:
- resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
- engines: {node: '>=6'}
- dependencies:
- mri: 1.2.0
- dev: false
-
/safe-array-concat@1.0.1:
resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
engines: {node: '>=0.4'}
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.1
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
has-symbols: 1.0.3
isarray: 2.0.5
dev: true
@@ -6250,8 +6267,8 @@ packages:
/safe-regex-test@1.0.0:
resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.1
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
is-regex: 1.1.4
dev: true
@@ -6283,13 +6300,23 @@ packages:
lru-cache: 6.0.0
dev: true
+ /set-function-length@1.1.1:
+ resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ define-data-property: 1.1.1
+ get-intrinsic: 1.2.2
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.1
+ dev: true
+
/set-function-name@2.0.1:
resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.1
functions-have-names: 1.2.3
- has-property-descriptors: 1.0.0
+ has-property-descriptors: 1.0.1
dev: true
/shebang-command@2.0.0:
@@ -6307,15 +6334,20 @@ packages:
/side-channel@1.0.4:
resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.1
- object-inspect: 1.13.0
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
+ object-inspect: 1.13.1
dev: true
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
+ /signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+ dev: true
+
/slash@3.0.0:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
@@ -6369,12 +6401,12 @@ packages:
/string.prototype.matchall@4.0.10:
resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
- get-intrinsic: 1.2.1
+ es-abstract: 1.22.3
+ get-intrinsic: 1.2.2
has-symbols: 1.0.3
- internal-slot: 1.0.5
+ internal-slot: 1.0.6
regexp.prototype.flags: 1.5.1
set-function-name: 2.0.1
side-channel: 1.0.4
@@ -6384,25 +6416,25 @@ packages:
resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
+ es-abstract: 1.22.3
dev: true
/string.prototype.trimend@1.0.7:
resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
+ es-abstract: 1.22.3
dev: true
/string.prototype.trimstart@1.0.7:
resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
define-properties: 1.2.1
- es-abstract: 1.22.2
+ es-abstract: 1.22.3
dev: true
/strip-ansi@6.0.1:
@@ -6468,17 +6500,17 @@ packages:
/tailwind-merge@1.14.0:
resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==}
- /tailwind-scrollbar@3.0.5(tailwindcss@3.3.3):
+ /tailwind-scrollbar@3.0.5(tailwindcss@3.3.5):
resolution: {integrity: sha512-0ZwxTivevqq9BY9fRP9zDjHl7Tu+J5giBGbln+0O1R/7nHtBUKnjQcA1aTIhK7Oyjp6Uc/Dj6/dn8Dq58k5Uww==}
engines: {node: '>=12.13.0'}
peerDependencies:
tailwindcss: 3.x
dependencies:
- tailwindcss: 3.3.3
+ tailwindcss: 3.3.5
dev: false
- /tailwindcss@3.3.3:
- resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==}
+ /tailwindcss@3.3.5:
+ resolution: {integrity: sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==}
engines: {node: '>=14.0.0'}
hasBin: true
dependencies:
@@ -6507,7 +6539,7 @@ packages:
transitivePeerDependencies:
- ts-node
- /tauri-controls@0.2.0(@tauri-apps/plugin-os@2.0.0-alpha.2)(@tauri-apps/plugin-window@2.0.0-alpha.1)(clsx@2.0.0)(react-dom@18.2.0)(react@18.2.0)(tailwind-merge@1.14.0):
+ /tauri-controls@0.2.0(@tauri-apps/plugin-os@2.0.0-alpha.3)(@tauri-apps/plugin-window@2.0.0-alpha.1)(clsx@2.0.0)(react-dom@18.2.0)(react@18.2.0)(tailwind-merge@1.14.0):
resolution: {integrity: sha512-/IDXLhcqGRjNN7QKfzgyr2y4QfnWT9MSIdqxrjH2oElXyngSo/cQltTb8LT6h/sH/7gRiSQMvQBEmavfn9Hk0w==}
peerDependencies:
'@tauri-apps/plugin-os': 2.0.0-alpha.2
@@ -6518,7 +6550,7 @@ packages:
tailwind-merge: ^1.14.0
dependencies:
'@tauri-apps/api': 2.0.0-alpha.8
- '@tauri-apps/plugin-os': 2.0.0-alpha.2
+ '@tauri-apps/plugin-os': 2.0.0-alpha.3
'@tauri-apps/plugin-window': 2.0.0-alpha.1
clsx: 2.0.0
react: 18.2.0
@@ -6649,8 +6681,8 @@ packages:
resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
- get-intrinsic: 1.2.1
+ call-bind: 1.0.5
+ get-intrinsic: 1.2.2
is-typed-array: 1.1.12
dev: true
@@ -6658,7 +6690,7 @@ packages:
resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
engines: {node: '>= 0.4'}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
for-each: 0.3.3
has-proto: 1.0.1
is-typed-array: 1.1.12
@@ -6669,7 +6701,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.5
- call-bind: 1.0.2
+ call-bind: 1.0.5
for-each: 0.3.3
has-proto: 1.0.1
is-typed-array: 1.1.12
@@ -6678,7 +6710,7 @@ packages:
/typed-array-length@1.0.4:
resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
for-each: 0.3.3
is-typed-array: 1.1.12
dev: true
@@ -6705,69 +6737,65 @@ packages:
/unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
dependencies:
- call-bind: 1.0.2
+ call-bind: 1.0.5
has-bigints: 1.0.2
has-symbols: 1.0.3
which-boxed-primitive: 1.0.2
dev: true
- /undici-types@5.25.3:
- resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==}
+ /undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
dev: true
- /unified@10.1.2:
- resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+ /unified@11.0.4:
+ resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
dependencies:
- '@types/unist': 2.0.9
+ '@types/unist': 3.0.1
bail: 2.0.2
+ devlop: 1.1.0
extend: 3.0.2
- is-buffer: 2.0.5
is-plain-obj: 4.1.0
trough: 2.1.0
- vfile: 5.3.7
+ vfile: 6.0.1
dev: false
- /unist-util-generated@2.0.1:
- resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==}
- dev: false
-
- /unist-util-is@5.2.1:
- resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+ /unist-util-is@6.0.0:
+ resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
dependencies:
- '@types/unist': 2.0.9
+ '@types/unist': 3.0.1
dev: false
- /unist-util-position@4.0.4:
- resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==}
+ /unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
dependencies:
- '@types/unist': 2.0.9
+ '@types/unist': 3.0.1
dev: false
- /unist-util-stringify-position@3.0.3:
- resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+ /unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
dependencies:
- '@types/unist': 2.0.9
+ '@types/unist': 3.0.1
dev: false
- /unist-util-visit-parents@5.1.3:
- resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+ /unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
dependencies:
- '@types/unist': 2.0.9
- unist-util-is: 5.2.1
+ '@types/unist': 3.0.1
+ unist-util-is: 6.0.0
dev: false
- /unist-util-visit@4.1.2:
- resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+ /unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
dependencies:
- '@types/unist': 2.0.9
- unist-util-is: 5.2.1
- unist-util-visit-parents: 5.1.3
+ '@types/unist': 3.0.1
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
dev: false
/unplugin@1.5.0:
resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==}
dependencies:
- acorn: 8.10.0
+ acorn: 8.11.1
chokidar: 3.5.3
webpack-sources: 3.2.3
webpack-virtual-modules: 0.5.0
@@ -6789,7 +6817,7 @@ packages:
punycode: 2.3.0
dev: true
- /use-callback-ref@1.3.0(@types/react@18.2.29)(react@18.2.0):
+ /use-callback-ref@1.3.0(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==}
engines: {node: '>=10'}
peerDependencies:
@@ -6799,12 +6827,12 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
tslib: 2.6.2
dev: false
- /use-sidecar@1.1.2(@types/react@18.2.29)(react@18.2.0):
+ /use-sidecar@1.1.2(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
engines: {node: '>=10'}
peerDependencies:
@@ -6814,7 +6842,7 @@ packages:
'@types/react':
optional: true
dependencies:
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
detect-node-es: 1.1.0
react: 18.2.0
tslib: 2.6.2
@@ -6844,35 +6872,23 @@ packages:
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- /uvu@0.5.6:
- resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==}
- engines: {node: '>=8'}
- hasBin: true
+ /vfile-message@4.0.2:
+ resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
dependencies:
- dequal: 2.0.3
- diff: 5.1.0
- kleur: 4.1.5
- sade: 1.8.1
+ '@types/unist': 3.0.1
+ unist-util-stringify-position: 4.0.0
dev: false
- /vfile-message@3.1.4:
- resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+ /vfile@6.0.1:
+ resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
dependencies:
- '@types/unist': 2.0.9
- unist-util-stringify-position: 3.0.3
+ '@types/unist': 3.0.1
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.2
dev: false
- /vfile@5.3.7:
- resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
- dependencies:
- '@types/unist': 2.0.9
- is-buffer: 2.0.5
- unist-util-stringify-position: 3.0.3
- vfile-message: 3.1.4
- dev: false
-
- /virtua@0.15.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-kzwin55Tj85tcpNO7p5p7U12+wT6+CJaDSr98BTNKD6t7QEmigDwE7h6dcP170LrY8tW+scsMUtipcroSeSpAw==}
+ /virtua@0.15.4(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-gC52UMvipt5ejDuolszdMAIapoDZul3cpsYIznjEUUbws169/dFHRwzzoI7e5niViDBBt6e+N4RnicGdcuc0UQ==}
peerDependencies:
react: '>=16.14.0'
react-dom: '>=16.14.0'
@@ -6892,13 +6908,13 @@ packages:
debug: 4.3.4
globrex: 0.1.2
tsconfck: 2.1.2(typescript@5.2.2)
- vite: 4.5.0(@types/node@20.8.7)
+ vite: 4.5.0(@types/node@20.8.9)
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /vite@4.5.0(@types/node@20.8.7):
+ /vite@4.5.0(@types/node@20.8.9):
resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==}
engines: {node: ^14.18.0 || >=16.0.0}
hasBin: true
@@ -6926,7 +6942,7 @@ packages:
terser:
optional: true
dependencies:
- '@types/node': 20.8.7
+ '@types/node': 20.8.9
esbuild: 0.18.20
postcss: 8.4.31
rollup: 3.29.4
@@ -7000,7 +7016,7 @@ packages:
isarray: 2.0.5
which-boxed-primitive: 1.0.2
which-collection: 1.0.1
- which-typed-array: 1.1.11
+ which-typed-array: 1.1.13
dev: true
/which-collection@1.0.1:
@@ -7012,12 +7028,12 @@ packages:
is-weakset: 2.0.2
dev: true
- /which-typed-array@1.1.11:
- resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==}
+ /which-typed-array@1.1.13:
+ resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==}
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.5
- call-bind: 1.0.2
+ call-bind: 1.0.5
for-each: 0.3.3
gopd: 1.0.1
has-tostringtag: 1.0.0
@@ -7056,11 +7072,6 @@ packages:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
- /yaml@2.3.1:
- resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==}
- engines: {node: '>= 14'}
- dev: true
-
/yaml@2.3.3:
resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==}
engines: {node: '>= 14'}
@@ -7070,8 +7081,8 @@ packages:
engines: {node: '>=10'}
dev: true
- /zustand@4.4.3(@types/react@18.2.29)(react@18.2.0):
- resolution: {integrity: sha512-oRy+X3ZazZvLfmv6viIaQmtLOMeij1noakIsK/Y47PWYhT8glfXzQ4j0YcP5i0P0qI1A4rIB//SGROGyZhx91A==}
+ /zustand@4.4.4(@types/react@18.2.33)(react@18.2.0):
+ resolution: {integrity: sha512-5UTUIAiHMNf5+mFp7/AnzJXS7+XxktULFN0+D1sCiZWyX7ZG+AQpqs2qpYrynRij4QvoDdCD+U+bmg/cG3Ucxw==}
engines: {node: '>=12.7.0'}
peerDependencies:
'@types/react': '>=16.8'
@@ -7085,7 +7096,7 @@ packages:
react:
optional: true
dependencies:
- '@types/react': 18.2.29
+ '@types/react': 18.2.33
react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index fdc8258a..e45b1c15 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -42,14 +42,15 @@ dependencies = [
[[package]]
name = "ahash"
-version = "0.8.3"
+version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
dependencies = [
"cfg-if",
"getrandom 0.2.10",
"once_cell",
"version_check",
+ "zerocopy",
]
[[package]]
@@ -231,9 +232,9 @@ dependencies = [
"log",
"parking",
"polling",
- "rustix 0.37.25",
+ "rustix 0.37.27",
"slab",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"waker-fn",
]
@@ -259,7 +260,7 @@ dependencies = [
"cfg-if",
"event-listener 3.0.0",
"futures-lite",
- "rustix 0.38.19",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
@@ -286,7 +287,7 @@ dependencies = [
"cfg-if",
"futures-core",
"futures-io",
- "rustix 0.38.19",
+ "rustix 0.38.21",
"signal-hook-registry",
"slab",
"windows-sys 0.48.0",
@@ -396,9 +397,9 @@ dependencies = [
[[package]]
name = "base64"
-version = "0.21.4"
+version = "0.21.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
[[package]]
name = "base64ct"
@@ -680,9 +681,9 @@ dependencies = [
[[package]]
name = "clap"
-version = "4.4.6"
+version = "4.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d04704f56c2cde07f43e8e2c154b43f216dc5c92fc98ada720177362f953b956"
+checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b"
dependencies = [
"clap_builder",
"clap_derive",
@@ -690,9 +691,9 @@ dependencies = [
[[package]]
name = "clap_builder"
-version = "4.4.6"
+version = "4.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e231faeaca65ebd1ea3c737966bf858971cd38c3849107aa3ea7de90a804e45"
+checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663"
dependencies = [
"anstream",
"anstyle",
@@ -702,9 +703,9 @@ dependencies = [
[[package]]
name = "clap_derive"
-version = "4.4.2"
+version = "4.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0862016ff20d69b84ef8247369fabf5c008a7417002411897d40ee1f4532b873"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
dependencies = [
"heck",
"proc-macro2",
@@ -714,9 +715,9 @@ dependencies = [
[[package]]
name = "clap_lex"
-version = "0.5.1"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
[[package]]
name = "clipboard-win"
@@ -892,9 +893,9 @@ dependencies = [
[[package]]
name = "cpufeatures"
-version = "0.2.9"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
dependencies = [
"libc",
]
@@ -991,12 +992,12 @@ dependencies = [
[[package]]
name = "ctor"
-version = "0.1.26"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+checksum = "37e366bff8cd32dd8754b0991fb66b279dc48f598c3a18914852a6673deef583"
dependencies = [
"quote",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -1010,7 +1011,7 @@ dependencies = [
"openssl-probe",
"openssl-sys",
"schannel",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"winapi",
]
@@ -1218,7 +1219,7 @@ checksum = "f54cc3e827ee1c3812239a9a41dede7b4d7d5d5464faa32d71bd7cba28ce2cb2"
dependencies = [
"cc",
"rustc_version",
- "toml 0.8.2",
+ "toml 0.8.5",
"vswhom",
"winreg 0.51.0",
]
@@ -1347,7 +1348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5"
dependencies = [
"cfg-if",
- "rustix 0.38.19",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
@@ -1478,9 +1479,9 @@ dependencies = [
[[package]]
name = "futures"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
dependencies = [
"futures-channel",
"futures-core",
@@ -1493,9 +1494,9 @@ dependencies = [
[[package]]
name = "futures-channel"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
dependencies = [
"futures-core",
"futures-sink",
@@ -1503,15 +1504,15 @@ dependencies = [
[[package]]
name = "futures-core"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
[[package]]
name = "futures-executor"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
dependencies = [
"futures-core",
"futures-task",
@@ -1531,9 +1532,9 @@ dependencies = [
[[package]]
name = "futures-io"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
[[package]]
name = "futures-lite"
@@ -1552,9 +1553,9 @@ dependencies = [
[[package]]
name = "futures-macro"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
dependencies = [
"proc-macro2",
"quote",
@@ -1563,21 +1564,21 @@ dependencies = [
[[package]]
name = "futures-sink"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
[[package]]
name = "futures-task"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
[[package]]
name = "futures-util"
-version = "0.3.28"
+version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
dependencies = [
"futures-channel",
"futures-core",
@@ -1936,9 +1937,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]]
name = "hashbrown"
-version = "0.14.1"
+version = "0.14.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7dfda62a12f55daeae5015f81b0baea145391cb4520f86c248fc615d72640d12"
+checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
dependencies = [
"ahash",
"allocator-api2",
@@ -1950,7 +1951,7 @@ version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
dependencies = [
- "hashbrown 0.14.1",
+ "hashbrown 0.14.2",
]
[[package]]
@@ -2066,7 +2067,7 @@ dependencies = [
"httpdate",
"itoa 1.0.9",
"pin-project-lite",
- "socket2 0.4.9",
+ "socket2 0.4.10",
"tokio",
"tower-service",
"tracing",
@@ -2168,15 +2169,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897"
dependencies = [
"equivalent",
- "hashbrown 0.14.1",
+ "hashbrown 0.14.2",
"serde",
]
[[package]]
name = "infer"
-version = "0.12.0"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3"
+checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199"
dependencies = [
"cfb",
]
@@ -2212,9 +2213,9 @@ dependencies = [
[[package]]
name = "ipnet"
-version = "2.8.0"
+version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
[[package]]
name = "is-docker"
@@ -2525,7 +2526,6 @@ dependencies = [
"sqlx-cli",
"tauri",
"tauri-build",
- "tauri-plugin-app",
"tauri-plugin-autostart",
"tauri-plugin-cli",
"tauri-plugin-clipboard-manager",
@@ -2541,7 +2541,6 @@ dependencies = [
"tauri-plugin-store",
"tauri-plugin-updater",
"tauri-plugin-upload",
- "tauri-plugin-window",
"webpage",
]
@@ -2687,9 +2686,9 @@ dependencies = [
[[package]]
name = "mio"
-version = "0.8.8"
+version = "0.8.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
dependencies = [
"libc",
"wasi 0.11.0+wasi-snapshot-preview1",
@@ -3083,9 +3082,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-src"
-version = "300.1.5+3.1.3"
+version = "300.1.6+3.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "559068e4c12950d7dcaa1857a61725c0d38d4fc03ff8e070ab31a75d6e316491"
+checksum = "439fac53e092cd7442a3660c85dde4643ab3b5bd39040912388dcdabf6b88085"
dependencies = [
"cc",
]
@@ -3262,9 +3261,17 @@ version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
dependencies = [
- "phf_macros 0.10.0",
"phf_shared 0.10.0",
- "proc-macro-hack",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_macros 0.11.2",
+ "phf_shared 0.11.2",
]
[[package]]
@@ -3307,6 +3314,16 @@ dependencies = [
"rand 0.8.5",
]
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared 0.11.2",
+ "rand 0.8.5",
+]
+
[[package]]
name = "phf_macros"
version = "0.8.0"
@@ -3323,16 +3340,15 @@ dependencies = [
[[package]]
name = "phf_macros"
-version = "0.10.0"
+version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
dependencies = [
- "phf_generator 0.10.0",
- "phf_shared 0.10.0",
- "proc-macro-hack",
+ "phf_generator 0.11.2",
+ "phf_shared 0.11.2",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.38",
]
[[package]]
@@ -3353,6 +3369,15 @@ dependencies = [
"siphasher",
]
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
[[package]]
name = "pin-project-lite"
version = "0.2.13"
@@ -3405,14 +3430,14 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
[[package]]
name = "plist"
-version = "1.5.0"
+version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06"
+checksum = "9a4a0cfc5fb21a09dc6af4bf834cf10d4a32fccd9e2ea468c4b1751a097487aa"
dependencies = [
"base64",
"indexmap 1.9.3",
"line-wrap",
- "quick-xml 0.29.0",
+ "quick-xml",
"serde",
"time",
]
@@ -3522,15 +3547,6 @@ dependencies = [
"rustyline",
]
-[[package]]
-name = "quick-xml"
-version = "0.29.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51"
-dependencies = [
- "memchr",
-]
-
[[package]]
name = "quick-xml"
version = "0.30.0"
@@ -3806,31 +3822,28 @@ dependencies = [
[[package]]
name = "ring"
-version = "0.16.20"
+version = "0.17.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
dependencies = [
"cc",
+ "getrandom 0.2.10",
"libc",
- "once_cell",
- "spin 0.5.2",
+ "spin 0.9.8",
"untrusted",
- "web-sys",
- "winapi",
+ "windows-sys 0.48.0",
]
[[package]]
name = "rsa"
-version = "0.9.2"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ab43bb47d23c1a631b4b680199a45255dce26fa9ab2fa902581f624ff13e6a8"
+checksum = "86ef35bf3e7fe15a53c4ab08a998e42271eab13eb0db224126bc7bc4c4bad96d"
dependencies = [
- "byteorder",
"const-oid",
"digest",
"num-bigint-dig",
"num-integer",
- "num-iter",
"num-traits",
"pkcs1",
"pkcs8",
@@ -3858,9 +3871,9 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.37.25"
+version = "0.37.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4eb579851244c2c03e7c24f501c3432bed80b8f720af1d6e5b0e0f01555a035"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
dependencies = [
"bitflags 1.3.2",
"errno",
@@ -3872,9 +3885,9 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.19"
+version = "0.38.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "745ecfa778e66b2b63c88a61cb36e0eea109e803b0b86bf9879fbc77c70e86ed"
+checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
dependencies = [
"bitflags 2.4.1",
"errno",
@@ -3885,9 +3898,9 @@ dependencies = [
[[package]]
name = "rustls"
-version = "0.21.7"
+version = "0.21.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8"
+checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c"
dependencies = [
"ring",
"rustls-webpki",
@@ -3905,9 +3918,9 @@ dependencies = [
[[package]]
name = "rustls-webpki"
-version = "0.101.6"
+version = "0.101.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
dependencies = [
"ring",
"untrusted",
@@ -3987,9 +4000,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "sct"
-version = "0.7.0"
+version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
dependencies = [
"ring",
"untrusted",
@@ -4068,18 +4081,18 @@ dependencies = [
[[package]]
name = "serde"
-version = "1.0.189"
+version = "1.0.190"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537"
+checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.189"
+version = "1.0.190"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5"
+checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"
dependencies = [
"proc-macro2",
"quote",
@@ -4110,9 +4123,9 @@ dependencies = [
[[package]]
name = "serde_spanned"
-version = "0.6.3"
+version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
dependencies = [
"serde",
]
@@ -4279,9 +4292,9 @@ checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a"
[[package]]
name = "socket2"
-version = "0.4.9"
+version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
dependencies = [
"libc",
"winapi",
@@ -4289,9 +4302,9 @@ dependencies = [
[[package]]
name = "socket2"
-version = "0.5.4"
+version = "0.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
dependencies = [
"libc",
"windows-sys 0.48.0",
@@ -4736,7 +4749,7 @@ dependencies = [
"cfg-expr",
"heck",
"pkg-config",
- "toml 0.8.2",
+ "toml 0.8.5",
"version-compare",
]
@@ -4784,7 +4797,7 @@ dependencies = [
"url",
"uuid",
"windows 0.48.0",
- "windows-implement",
+ "windows-implement 0.48.0",
"x11-dl",
"zbus",
]
@@ -4813,15 +4826,15 @@ dependencies = [
[[package]]
name = "target-lexicon"
-version = "0.12.11"
+version = "0.12.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
+checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
[[package]]
name = "tauri"
-version = "2.0.0-alpha.15"
+version = "2.0.0-alpha.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd8f1dc82ad6bf8a689b131febee60020e84193b7fdb9c21bbb344c3d9f25de4"
+checksum = "350fce27e96fda5a5741ae200ebf775cc3423c682154224cfbd78066db777fc6"
dependencies = [
"anyhow",
"bytes",
@@ -4829,6 +4842,7 @@ dependencies = [
"dirs-next",
"embed_plist",
"futures-util",
+ "getrandom 0.2.10",
"glib",
"glob",
"gtk",
@@ -4842,7 +4856,6 @@ dependencies = [
"objc",
"once_cell",
"percent-encoding",
- "rand 0.8.5",
"raw-window-handle",
"reqwest",
"serde",
@@ -4860,17 +4873,17 @@ dependencies = [
"tokio",
"tray-icon",
"url",
- "uuid",
"webkit2gtk",
"webview2-com",
+ "window-vibrancy",
"windows 0.48.0",
]
[[package]]
name = "tauri-build"
-version = "2.0.0-alpha.9"
+version = "2.0.0-alpha.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59048e05398d7d53e2d73d7f7fd14fbab53ec9f90f4b91e3c08f263e07ffc569"
+checksum = "55e3fe1435d7bcf64d15182815f5e1b0b05ec71cd365ed5055204efb5436ebc4"
dependencies = [
"anyhow",
"cargo_toml",
@@ -4888,9 +4901,9 @@ dependencies = [
[[package]]
name = "tauri-codegen"
-version = "2.0.0-alpha.8"
+version = "2.0.0-alpha.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8acf40451edf9ccd16d110cb10e9959fec6ccca286c5cc66b859878f8aa9a7b"
+checksum = "ff206ba5a7de8f20068f36d5fa49756a9fd375a156a2332278273b6d0dc57033"
dependencies = [
"base64",
"brotli",
@@ -4914,9 +4927,9 @@ dependencies = [
[[package]]
name = "tauri-macros"
-version = "2.0.0-alpha.8"
+version = "2.0.0-alpha.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7037ba4260be47f4d6dab8c781bd15910ef1d3c16c74bf3e3c47e69c250ab82"
+checksum = "d29a29d42cca831a9d9c8be91412ef6416813e7307e8dcfd1df38f3b13f3cc73"
dependencies = [
"heck",
"proc-macro2",
@@ -4926,18 +4939,10 @@ dependencies = [
"tauri-utils",
]
-[[package]]
-name = "tauri-plugin-app"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
-dependencies = [
- "tauri",
-]
-
[[package]]
name = "tauri-plugin-autostart"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"auto-launch",
"log",
@@ -4949,8 +4954,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-cli"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"clap",
"log",
@@ -4962,8 +4967,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-clipboard-manager"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"arboard",
"log",
@@ -4976,8 +4981,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-dialog"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"glib",
"log",
@@ -4993,8 +4998,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-fs"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"anyhow",
"glob",
@@ -5006,8 +5011,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-http"
-version = "2.0.0-alpha.3"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.4"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"data-url",
"glob",
@@ -5023,8 +5028,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-notification"
-version = "2.0.0-alpha.3"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.4"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"log",
"notify-rust",
@@ -5041,8 +5046,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-os"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"gethostname 0.4.3",
"log",
@@ -5057,16 +5062,16 @@ dependencies = [
[[package]]
name = "tauri-plugin-process"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"tauri",
]
[[package]]
name = "tauri-plugin-shell"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"encoding_rs",
"log",
@@ -5082,8 +5087,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-single-instance"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"log",
"serde",
@@ -5096,8 +5101,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-sql"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"futures-core",
"log",
@@ -5112,8 +5117,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-store"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"log",
"serde",
@@ -5124,11 +5129,12 @@ dependencies = [
[[package]]
name = "tauri-plugin-updater"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"base64",
"dirs-next",
+ "flate2",
"futures-util",
"http",
"minisign-verify",
@@ -5149,8 +5155,8 @@ dependencies = [
[[package]]
name = "tauri-plugin-upload"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
+version = "2.0.0-alpha.3"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#76cfdc32b4593acfdfed95bf3028cdba0d83fe61"
dependencies = [
"futures-util",
"log",
@@ -5164,21 +5170,11 @@ dependencies = [
"tokio-util",
]
-[[package]]
-name = "tauri-plugin-window"
-version = "2.0.0-alpha.2"
-source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v2#1240631840060f98b493c3cd01120ac2b65e88f2"
-dependencies = [
- "serde",
- "tauri",
- "thiserror",
-]
-
[[package]]
name = "tauri-runtime"
-version = "1.0.0-alpha.2"
+version = "1.0.0-alpha.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d34b124f7731f3981deba3b643b2f1c8eaff59f3d6929edb401e1fc929ad93df"
+checksum = "c373492a8e2d369c638bff48fc07abbe7292f8ddb867bc3b992fb7ea10006212"
dependencies = [
"gtk",
"http",
@@ -5189,26 +5185,23 @@ dependencies = [
"tauri-utils",
"thiserror",
"url",
- "uuid",
"windows 0.48.0",
]
[[package]]
name = "tauri-runtime-wry"
-version = "1.0.0-alpha.3"
+version = "1.0.0-alpha.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b94248fbaf1169c1fb085a2c43f49af3de650f6972a64d6f2bdf876c60949d5"
+checksum = "ef7b8a49504f67c65a55188013439edf815356a6f8e2a9d2ed005120a201c98f"
dependencies = [
"cocoa 0.24.1",
"gtk",
"http",
"jni",
"percent-encoding",
- "rand 0.8.5",
"raw-window-handle",
"tauri-runtime",
"tauri-utils",
- "uuid",
"webkit2gtk",
"webview2-com",
"windows 0.48.0",
@@ -5217,9 +5210,9 @@ dependencies = [
[[package]]
name = "tauri-utils"
-version = "2.0.0-alpha.8"
+version = "2.0.0-alpha.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "931ead8db578bc2f9aee6636345fe5b900cfa2b9985a1783913200fab5e607f1"
+checksum = "4b821e0e6b5b94c6bde3c95568f5161eb70939a7b0d511f79c0cf85fed3b29c9"
dependencies = [
"brotli",
"ctor",
@@ -5232,7 +5225,7 @@ dependencies = [
"kuchikiki",
"log",
"memchr",
- "phf 0.10.1",
+ "phf 0.11.2",
"proc-macro2",
"quote",
"semver",
@@ -5242,7 +5235,7 @@ dependencies = [
"thiserror",
"url",
"walkdir",
- "windows 0.48.0",
+ "windows 0.51.1",
]
[[package]]
@@ -5261,20 +5254,20 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "006851c9ccefa3c38a7646b8cec804bb429def3da10497bfa977179869c3e8e2"
dependencies = [
- "quick-xml 0.30.0",
+ "quick-xml",
"windows 0.51.1",
]
[[package]]
name = "tempfile"
-version = "3.8.0"
+version = "3.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
dependencies = [
"cfg-if",
"fastrand 2.0.1",
- "redox_syscall 0.3.5",
- "rustix 0.38.19",
+ "redox_syscall 0.4.1",
+ "rustix 0.38.21",
"windows-sys 0.48.0",
]
@@ -5297,18 +5290,18 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
[[package]]
name = "thiserror"
-version = "1.0.49"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1177e8c6d7ede7afde3585fd2513e611227efd6481bd78d2e82ba1ce16557ed4"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
-version = "1.0.49"
+version = "1.0.50"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10712f02019e9288794769fba95cd6847df9874d49d871d062172f9dd41bc4cc"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
dependencies = [
"proc-macro2",
"quote",
@@ -5392,7 +5385,7 @@ dependencies = [
"mio",
"num_cpus",
"pin-project-lite",
- "socket2 0.5.4",
+ "socket2 0.5.5",
"tokio-macros",
"windows-sys 0.48.0",
]
@@ -5431,9 +5424,9 @@ dependencies = [
[[package]]
name = "tokio-util"
-version = "0.7.9"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d68074620f57a0b21594d9735eb2e98ab38b17f80d3fcb189fca266771ca60d"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
dependencies = [
"bytes",
"futures-core",
@@ -5457,21 +5450,21 @@ dependencies = [
[[package]]
name = "toml"
-version = "0.8.2"
+version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+checksum = "3efaf127c78d5339cc547cce4e4d973bd5e4f56e949a06d091c082ebeef2f800"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
- "toml_edit 0.20.2",
+ "toml_edit 0.20.5",
]
[[package]]
name = "toml_datetime"
-version = "0.6.3"
+version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
dependencies = [
"serde",
]
@@ -5491,9 +5484,9 @@ dependencies = [
[[package]]
name = "toml_edit"
-version = "0.20.2"
+version = "0.20.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+checksum = "782bf6c2ddf761c1e7855405e8975472acf76f7f36d0d4328bd3b7a2fae12a85"
dependencies = [
"indexmap 2.0.2",
"serde",
@@ -5510,9 +5503,9 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
[[package]]
name = "tracing"
-version = "0.1.39"
+version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee2ef2af84856a50c1d430afce2fdded0a4ec7eda868db86409b4543df0797f9"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [
"log",
"pin-project-lite",
@@ -5543,12 +5536,12 @@ dependencies = [
[[package]]
name = "tracing-log"
-version = "0.1.3"
+version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2"
dependencies = [
- "lazy_static",
"log",
+ "once_cell",
"tracing-core",
]
@@ -5661,9 +5654,9 @@ checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
[[package]]
name = "untrusted"
-version = "0.7.1"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
[[package]]
name = "url"
@@ -5943,8 +5936,8 @@ dependencies = [
"webview2-com-macros",
"webview2-com-sys",
"windows 0.48.0",
- "windows-implement",
- "windows-interface",
+ "windows-implement 0.48.0",
+ "windows-interface 0.48.0",
]
[[package]]
@@ -6025,6 +6018,18 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+[[package]]
+name = "window-vibrancy"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5931735e675b972fada30c7a402915d4d827aa5ef6c929c133d640c4b785e963"
+dependencies = [
+ "cocoa 0.25.0",
+ "objc",
+ "raw-window-handle",
+ "windows-sys 0.48.0",
+]
+
[[package]]
name = "windows"
version = "0.44.0"
@@ -6040,8 +6045,8 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
dependencies = [
- "windows-implement",
- "windows-interface",
+ "windows-implement 0.48.0",
+ "windows-interface 0.48.0",
"windows-targets 0.48.5",
]
@@ -6052,6 +6057,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
dependencies = [
"windows-core",
+ "windows-implement 0.51.1",
+ "windows-interface 0.51.1",
"windows-targets 0.48.5",
]
@@ -6085,6 +6092,17 @@ dependencies = [
"syn 1.0.109",
]
+[[package]]
+name = "windows-implement"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb2b158efec5af20d8846836622f50a87e6556b9153a42772fa047f773c0e555"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
[[package]]
name = "windows-interface"
version = "0.48.0"
@@ -6096,6 +6114,17 @@ dependencies = [
"syn 1.0.109",
]
+[[package]]
+name = "windows-interface"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0546e63e1ce64c04403d2311fa0e3ab5ae3a367bd524b4a38d8d8d18c70cfa76"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
[[package]]
name = "windows-metadata"
version = "0.48.0"
@@ -6314,7 +6343,7 @@ dependencies = [
"webkit2gtk-sys",
"webview2-com",
"windows 0.48.0",
- "windows-implement",
+ "windows-implement 0.48.0",
]
[[package]]
@@ -6456,6 +6485,26 @@ dependencies = [
"zvariant",
]
+[[package]]
+name = "zerocopy"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81ba595b9f2772fbee2312de30eeb80ec773b4cb2f1e8098db024afadda6c06f"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "772666c41fb6dceaf520b564b962d738a8e1a83b41bd48945f50837aed78bb1d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.38",
+]
+
[[package]]
name = "zeroize"
version = "1.6.0"
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 049e6797..1559a253 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -18,7 +18,6 @@ tauri = { version = "2.0.0-alpha", features = [
"macos-private-api",
"native-tls-vendored",
] }
-tauri-plugin-app = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-cli = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-clipboard-manager = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-dialog = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
@@ -29,7 +28,6 @@ tauri-plugin-os = { git = "https://github.com/tauri-apps/plugins-workspace", bra
tauri-plugin-process = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-shell = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-updater = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
-tauri-plugin-window = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-single-instance = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-autostart = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
tauri-plugin-store = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 24b5a5ee..d59d0edc 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -114,7 +114,6 @@ fn main() {
.plugin(tauri_plugin_updater::Builder::new().build())?;
Ok(())
})
- .plugin(tauri_plugin_app::init())
.plugin(tauri_plugin_clipboard_manager::init())
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_fs::init())
@@ -125,7 +124,6 @@ fn main() {
.plugin(tauri_plugin_shell::init())
.plugin(tauri_plugin_upload::init())
.plugin(tauri_plugin_updater::Builder::new().build())
- .plugin(tauri_plugin_window::init())
.plugin(
tauri_plugin_sql::Builder::default()
.add_migrations(
diff --git a/src/libs/storage/instance.ts b/src/libs/storage/instance.ts
index a13eecab..cfe84e83 100644
--- a/src/libs/storage/instance.ts
+++ b/src/libs/storage/instance.ts
@@ -1,5 +1,5 @@
import { NDKEvent } from '@nostr-dev-kit/ndk';
-import { invoke } from '@tauri-apps/api';
+import { invoke } from '@tauri-apps/api/primitives';
import { Platform } from '@tauri-apps/plugin-os';
import Database from '@tauri-apps/plugin-sql';
diff --git a/src/shared/avatarUploader.tsx b/src/shared/avatarUploader.tsx
index f46f5369..1a870867 100644
--- a/src/shared/avatarUploader.tsx
+++ b/src/shared/avatarUploader.tsx
@@ -1,5 +1,6 @@
import { message, open } from '@tauri-apps/plugin-dialog';
import { readBinaryFile } from '@tauri-apps/plugin-fs';
+import { fetch } from '@tauri-apps/plugin-http';
import { Dispatch, SetStateAction, useState } from 'react';
import { LoaderIcon, PlusIcon } from '@shared/icons';
diff --git a/src/shared/bannerUploader.tsx b/src/shared/bannerUploader.tsx
index 84d88495..5ec88b5c 100644
--- a/src/shared/bannerUploader.tsx
+++ b/src/shared/bannerUploader.tsx
@@ -1,5 +1,6 @@
import { message, open } from '@tauri-apps/plugin-dialog';
import { readBinaryFile } from '@tauri-apps/plugin-fs';
+import { fetch } from '@tauri-apps/plugin-http';
import { Dispatch, SetStateAction, useState } from 'react';
import { LoaderIcon, PlusIcon } from '@shared/icons';
diff --git a/src/shared/notes/actions/zap.tsx b/src/shared/notes/actions/zap.tsx
index 08ba3d86..9b2828c2 100644
--- a/src/shared/notes/actions/zap.tsx
+++ b/src/shared/notes/actions/zap.tsx
@@ -1,7 +1,7 @@
import { webln } from '@getalby/sdk';
import { SendPaymentResponse } from '@getalby/sdk/dist/types';
import * as Dialog from '@radix-ui/react-dialog';
-import { invoke } from '@tauri-apps/api';
+import { invoke } from '@tauri-apps/api/primitives';
import { message } from '@tauri-apps/plugin-dialog';
import { QRCodeSVG } from 'qrcode.react';
import { useEffect, useRef, useState } from 'react';
diff --git a/src/shared/notes/kinds/articleDetail.tsx b/src/shared/notes/kinds/articleDetail.tsx
index 5cee404e..724a8cc4 100644
--- a/src/shared/notes/kinds/articleDetail.tsx
+++ b/src/shared/notes/kinds/articleDetail.tsx
@@ -1,6 +1,7 @@
import { NDKEvent } from '@nostr-dev-kit/ndk';
import ReactMarkdown from 'react-markdown';
import { Link } from 'react-router-dom';
+import rehypeExternalLinks from 'rehype-external-links';
import remarkGfm from 'remark-gfm';
import { Boost, Hashtag, Invoice, MentionUser } from '@shared/notes';
@@ -32,6 +33,7 @@ export function ArticleDetailNote({ event }: { event: NDKEvent }) {
{
const cleanURL = new URL(href);
@@ -59,7 +61,6 @@ export function ArticleDetailNote({ event }: { event: NDKEvent }) {
}
},
}}
- linkTarget={'_blank'}
>
{event.content}
diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx
index f061738d..2e14c2e1 100644
--- a/src/shared/notes/kinds/text.tsx
+++ b/src/shared/notes/kinds/text.tsx
@@ -1,6 +1,7 @@
import { memo } from 'react';
import ReactMarkdown from 'react-markdown';
import { Link } from 'react-router-dom';
+import rehypeExternalLinks from 'rehype-external-links';
import remarkGfm from 'remark-gfm';
import {
@@ -25,9 +26,9 @@ export function TextNote(props: { content?: string }) {
{props.content}
@@ -40,6 +41,7 @@ export function TextNote(props: { content?: string }) {
{
const cleanURL = new URL(href);
@@ -69,7 +71,6 @@ export function TextNote(props: { content?: string }) {
}}
disallowedElements={['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'pre', 'code']}
unwrapDisallowed={true}
- linkTarget={'_blank'}
>
{richContent.parsed}
diff --git a/src/shared/user.tsx b/src/shared/user.tsx
index 7d6baf71..3322d45f 100644
--- a/src/shared/user.tsx
+++ b/src/shared/user.tsx
@@ -4,6 +4,7 @@ import { minidenticon } from 'minidenticons';
import { memo } from 'react';
import ReactMarkdown from 'react-markdown';
import { Link } from 'react-router-dom';
+import rehypeExternalLinks from 'rehype-external-links';
import remarkGfm from 'remark-gfm';
import { RepostIcon, WorldIcon } from '@shared/icons';
@@ -168,10 +169,10 @@ export const User = memo(function User({
{user?.about || user?.bio || 'No bio'}
diff --git a/src/utils/hooks/useOpenGraph.ts b/src/utils/hooks/useOpenGraph.ts
index 320b94f4..12cb8e74 100644
--- a/src/utils/hooks/useOpenGraph.ts
+++ b/src/utils/hooks/useOpenGraph.ts
@@ -1,5 +1,5 @@
import { useQuery } from '@tanstack/react-query';
-import { invoke } from '@tauri-apps/api';
+import { invoke } from '@tauri-apps/api/primitives';
import { Opengraph } from '@utils/types';
From 555c8ec08aa41ef7f62292d345a82ce8a99edf7c Mon Sep 17 00:00:00 2001
From: reya
Date: Sat, 28 Oct 2023 07:35:39 +0700
Subject: [PATCH 02/14] migrate to tanstack query v5
---
package.json | 4 +-
pnpm-lock.yaml | 92 +++++++++----------
.../auth/components/features/followList.tsx | 14 ++-
src/app/auth/onboarding/enrich.tsx | 17 ++--
src/app/auth/onboarding/relays.tsx | 14 ++-
src/app/chats/chat.tsx | 10 +-
src/app/chats/components/chatListItem.tsx | 2 +-
src/app/chats/components/mediaUploader.tsx | 3 -
src/app/chats/index.tsx | 20 ++--
src/app/error.tsx | 8 --
src/app/explore/components/groupTitle.tsx | 2 +-
.../explore/components/userLatestPosts.tsx | 10 +-
src/app/explore/components/userWithDrawer.tsx | 2 +-
src/app/new/components/mentionPopupItem.tsx | 2 +-
src/app/notes/article.tsx | 2 +-
src/app/notes/text.tsx | 2 +-
src/app/relays/components/relayEventList.tsx | 14 +--
src/app/relays/components/relayForm.tsx | 5 +-
src/app/relays/components/relayList.tsx | 24 ++---
src/app/relays/components/userRelay.tsx | 16 ++--
src/app/settings/components/version.tsx | 15 +--
src/app/users/components/modal.tsx | 4 +-
src/app/users/components/stats.tsx | 18 ++--
src/app/users/index.tsx | 22 +++--
src/shared/accounts/active.tsx | 2 +-
src/shared/nip05.tsx | 20 ++--
src/shared/notes/child.tsx | 2 +-
src/shared/notes/kinds/repost.tsx | 16 ++--
src/shared/notes/mentions/note.tsx | 2 +-
src/shared/notes/metadata.tsx | 18 ++--
src/shared/notes/preview/link.tsx | 2 +-
src/shared/notes/stats.tsx | 13 +--
src/shared/notification/notifyNote.tsx | 2 +-
src/shared/user.tsx | 2 +-
src/shared/widgets/eventLoader.tsx | 4 +-
src/shared/widgets/global/articles.tsx | 12 +--
src/shared/widgets/global/files.tsx | 12 +--
src/shared/widgets/global/hashtag.tsx | 12 +--
src/shared/widgets/local/articles.tsx | 3 +-
src/shared/widgets/local/feeds.tsx | 3 +-
src/shared/widgets/local/files.tsx | 3 +-
src/shared/widgets/local/follows.tsx | 3 +-
src/shared/widgets/local/network.tsx | 3 +-
src/shared/widgets/local/thread.tsx | 2 +-
src/shared/widgets/local/user.tsx | 20 ++--
.../widgets/nostrBand/trendingAccounts.tsx | 20 ++--
.../widgets/nostrBand/trendingNotes.tsx | 20 ++--
src/shared/widgets/nostrBandUserProfile.tsx | 23 +++--
src/utils/hooks/useEvent.ts | 14 ++-
src/utils/hooks/useOpenGraph.ts | 18 ++--
src/utils/hooks/useProfile.ts | 22 ++---
51 files changed, 290 insertions(+), 305 deletions(-)
diff --git a/package.json b/package.json
index 802ee3d6..10d8edcb 100644
--- a/package.json
+++ b/package.json
@@ -63,7 +63,7 @@
"html-to-text": "^9.0.5",
"light-bolt11-decoder": "^3.0.0",
"lru-cache": "^10.0.1",
- "media-chrome": "^1.4.4",
+ "media-chrome": "^1.4.5",
"million": "^2.6.4",
"minidenticons": "^4.2.0",
"nostr-fetch": "^0.13.0",
@@ -86,7 +86,7 @@
"tauri-controls": "^0.2.0",
"tippy.js": "^6.3.7",
"tiptap-markdown": "^0.8.2",
- "virtua": "^0.15.4",
+ "virtua": "^0.15.6",
"zustand": "^4.4.4"
},
"devDependencies": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 0736a890..57e70a85 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -51,43 +51,43 @@ dependencies:
specifier: ^5.0.5
version: 5.0.5(react-dom@18.2.0)(react@18.2.0)
'@tauri-apps/api':
- specifier: ^2.0.0-alpha.9
+ specifier: 2.0.0-alpha.9
version: 2.0.0-alpha.9
'@tauri-apps/cli':
- specifier: ^2.0.0-alpha.16
+ specifier: 2.0.0-alpha.16
version: 2.0.0-alpha.16
'@tauri-apps/plugin-clipboard-manager':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-dialog':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-fs':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-http':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-notification':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-os':
- specifier: ^2.0.0-alpha.3
+ specifier: 2.0.0-alpha.3
version: 2.0.0-alpha.3
'@tauri-apps/plugin-process':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-shell':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-sql':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-updater':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-upload':
- specifier: ^2.0.0-alpha.2
+ specifier: 2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tiptap/extension-character-count':
specifier: ^2.1.12
@@ -141,8 +141,8 @@ dependencies:
specifier: ^10.0.1
version: 10.0.1
media-chrome:
- specifier: ^1.4.4
- version: 1.4.4
+ specifier: ^1.4.5
+ version: 1.4.5
million:
specifier: ^2.6.4
version: 2.6.4
@@ -210,8 +210,8 @@ dependencies:
specifier: ^0.8.2
version: 0.8.2(@tiptap/core@2.1.12)
virtua:
- specifier: ^0.15.4
- version: 0.15.4(react-dom@18.2.0)(react@18.2.0)
+ specifier: ^0.15.6
+ version: 0.15.6(react-dom@18.2.0)(react@18.2.0)
zustand:
specifier: ^4.4.4
version: 4.4.4(@types/react@18.2.33)(react@18.2.0)
@@ -2549,9 +2549,9 @@ packages:
prosemirror-schema-list: 1.3.0
prosemirror-state: 1.4.3
prosemirror-tables: 1.3.4
- prosemirror-trailing-node: 2.0.7(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.32.1)
+ prosemirror-trailing-node: 2.0.7(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.32.2)
prosemirror-transform: 1.8.0
- prosemirror-view: 1.32.1
+ prosemirror-view: 1.32.2
dev: false
/@tiptap/react@2.1.12(@tiptap/core@2.1.12)(@tiptap/pm@2.1.12)(react-dom@18.2.0)(react@18.2.0):
@@ -3047,16 +3047,16 @@ packages:
- '@swc/helpers'
dev: true
- /acorn-jsx@5.3.2(acorn@8.11.1):
+ /acorn-jsx@5.3.2(acorn@8.11.2):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
dependencies:
- acorn: 8.11.1
+ acorn: 8.11.2
dev: true
- /acorn@8.11.1:
- resolution: {integrity: sha512-IJTNCJMRHfRfb8un89z1QtS0x890C2QUrUxFMK8zy+RizcId6mfnqOf68Bu9YkDgpLYuvCm6aYbwDatXVZPjMQ==}
+ /acorn@8.11.2:
+ resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -3217,7 +3217,7 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.22.1
- caniuse-lite: 1.0.30001554
+ caniuse-lite: 1.0.30001555
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.0
@@ -3269,8 +3269,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001554
- electron-to-chromium: 1.4.568
+ caniuse-lite: 1.0.30001555
+ electron-to-chromium: 1.4.569
node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1)
@@ -3299,8 +3299,8 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
- /caniuse-lite@1.0.30001554:
- resolution: {integrity: sha512-A2E3U//MBwbJVzebddm1YfNp7Nud5Ip+IPn4BozBmn4KqVX7AvluoIDFWjsv5OkGnKUXQVmMSoMKLa3ScCblcQ==}
+ /caniuse-lite@1.0.30001555:
+ resolution: {integrity: sha512-NzbUFKUnJ3DTcq6YyZB6+qqhfD112uR3uoEnkmfzm2wVzUNsFkU7AwBjKQ654Sp5cau0JxhFyRSn/tQZ+XfygA==}
/case-anything@2.1.13:
resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==}
@@ -3674,8 +3674,8 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true
- /electron-to-chromium@1.4.568:
- resolution: {integrity: sha512-3TCOv8+BY6Ltpt1/CmGBMups2IdKOyfEmz4J8yIS4xLSeMm0Rf+psSaxLuswG9qMKt+XbNbmADybtXGpTFlbDg==}
+ /electron-to-chromium@1.4.569:
+ resolution: {integrity: sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==}
/emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
@@ -3988,8 +3988,8 @@ packages:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies:
- acorn: 8.11.1
- acorn-jsx: 5.3.2(acorn@8.11.1)
+ acorn: 8.11.2
+ acorn-jsx: 5.3.2(acorn@8.11.2)
eslint-visitor-keys: 3.4.3
dev: true
@@ -5026,8 +5026,8 @@ packages:
resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
dev: false
- /media-chrome@1.4.4:
- resolution: {integrity: sha512-L3EImWE2ft3dEXnku7mwEl71L8GWFvsnqQQsmtlbuLqekCkIACjL1KjLErReALB9JmrY19ffB4GeGZjLZDwALg==}
+ /media-chrome@1.4.5:
+ resolution: {integrity: sha512-WRi+4XV4oCx8nwUEhhKxqF78mdQDVTPHgq2g/Mkt8C8lmIaca9WwnahZ0MHx8fy8XAEaiIv1B25555lpvZncJQ==}
dev: false
/merge-stream@2.0.0:
@@ -5791,7 +5791,7 @@ packages:
dependencies:
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
- prosemirror-view: 1.32.1
+ prosemirror-view: 1.32.2
dev: false
/prosemirror-gapcursor@1.3.2:
@@ -5800,7 +5800,7 @@ packages:
prosemirror-keymap: 1.2.2
prosemirror-model: 1.19.3
prosemirror-state: 1.4.3
- prosemirror-view: 1.32.1
+ prosemirror-view: 1.32.2
dev: false
/prosemirror-history@1.3.2:
@@ -5808,7 +5808,7 @@ packages:
dependencies:
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
- prosemirror-view: 1.32.1
+ prosemirror-view: 1.32.2
rope-sequence: 1.3.4
dev: false
@@ -5867,7 +5867,7 @@ packages:
dependencies:
prosemirror-model: 1.19.3
prosemirror-transform: 1.8.0
- prosemirror-view: 1.32.1
+ prosemirror-view: 1.32.2
dev: false
/prosemirror-tables@1.3.4:
@@ -5877,10 +5877,10 @@ packages:
prosemirror-model: 1.19.3
prosemirror-state: 1.4.3
prosemirror-transform: 1.8.0
- prosemirror-view: 1.32.1
+ prosemirror-view: 1.32.2
dev: false
- /prosemirror-trailing-node@2.0.7(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.32.1):
+ /prosemirror-trailing-node@2.0.7(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.32.2):
resolution: {integrity: sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q==}
peerDependencies:
prosemirror-model: ^1.19.0
@@ -5892,7 +5892,7 @@ packages:
escape-string-regexp: 4.0.0
prosemirror-model: 1.19.3
prosemirror-state: 1.4.3
- prosemirror-view: 1.32.1
+ prosemirror-view: 1.32.2
dev: false
/prosemirror-transform@1.8.0:
@@ -5901,8 +5901,8 @@ packages:
prosemirror-model: 1.19.3
dev: false
- /prosemirror-view@1.32.1:
- resolution: {integrity: sha512-9SnB4HBgRczzTyIMZLPE1iszegL04hNfUyS8uPtP1RPxNM2NTCiIs8KwNsJU4nbZO9rxJTwVTv7Jm3zU4CR78A==}
+ /prosemirror-view@1.32.2:
+ resolution: {integrity: sha512-l2RQUGaiDI8SG8ZjWIkjT8yjGmNwdzMFMzQmxv/Kh8Vx+ICnz5R+K0mrOS16rhfjX7n2t4emU0goh7TerQC3mw==}
dependencies:
prosemirror-model: 1.19.3
prosemirror-state: 1.4.3
@@ -6795,7 +6795,7 @@ packages:
/unplugin@1.5.0:
resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==}
dependencies:
- acorn: 8.11.1
+ acorn: 8.11.2
chokidar: 3.5.3
webpack-sources: 3.2.3
webpack-virtual-modules: 0.5.0
@@ -6887,8 +6887,8 @@ packages:
vfile-message: 4.0.2
dev: false
- /virtua@0.15.4(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-gC52UMvipt5ejDuolszdMAIapoDZul3cpsYIznjEUUbws169/dFHRwzzoI7e5niViDBBt6e+N4RnicGdcuc0UQ==}
+ /virtua@0.15.6(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-j9EfyAmpp6VwuHmnXkWpzciHRdlY7XGPzZg3ZqOPFW+phNUnFQALYdrThc3CYHZFsj380ieIegdjPGS+Qbkuyg==}
peerDependencies:
react: '>=16.14.0'
react-dom: '>=16.14.0'
diff --git a/src/app/auth/components/features/followList.tsx b/src/app/auth/components/features/followList.tsx
index a6da52a3..1fcf7909 100644
--- a/src/app/auth/components/features/followList.tsx
+++ b/src/app/auth/components/features/followList.tsx
@@ -9,9 +9,9 @@ import { User } from '@shared/user';
export function FollowList() {
const { db } = useStorage();
const { ndk } = useNDK();
- const { status, data } = useQuery(
- ['follows'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['follows'],
+ queryFn: async () => {
const user = ndk.getUser({ hexpubkey: db.account.pubkey });
const follows = await user.follows();
const followsAsArr = [];
@@ -29,16 +29,14 @@ export function FollowList() {
return followsAsArr;
},
- {
- refetchOnWindowFocus: false,
- }
- );
+ refetchOnWindowFocus: false,
+ });
return (
Your follows
- {status === 'loading' ? (
+ {status === 'pending' ? (
) : (
diff --git a/src/app/auth/onboarding/enrich.tsx b/src/app/auth/onboarding/enrich.tsx
index 350a2698..37de605e 100644
--- a/src/app/auth/onboarding/enrich.tsx
+++ b/src/app/auth/onboarding/enrich.tsx
@@ -17,12 +17,15 @@ import { arrayToNIP02 } from '@utils/transform';
export function OnboardEnrichScreen() {
const { ndk } = useNDK();
const { db } = useStorage();
- const { status, data } = useQuery(['trending-profiles-widget'], async () => {
- const res = await fetch('https://api.nostr.band/v0/trending/profiles');
- if (!res.ok) {
- throw new Error('Error');
- }
- return res.json();
+ const { status, data } = useQuery({
+ queryKey: ['trending-profiles-widget'],
+ queryFn: async () => {
+ const res = await fetch('https://api.nostr.band/v0/trending/profiles');
+ if (!res.ok) {
+ throw new Error('Error');
+ }
+ return res.json();
+ },
});
const [loading, setLoading] = useState(false);
@@ -90,7 +93,7 @@ export function OnboardEnrichScreen() {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/app/auth/onboarding/relays.tsx b/src/app/auth/onboarding/relays.tsx
index 3c940fae..04f38471 100644
--- a/src/app/auth/onboarding/relays.tsx
+++ b/src/app/auth/onboarding/relays.tsx
@@ -24,15 +24,13 @@ export function OnboardRelaysScreen() {
const { db } = useStorage();
const { ndk } = useNDK();
const { getAllRelaysByUsers } = useNostr();
- const { status, data } = useQuery(
- ['relays'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['relays'],
+ queryFn: async () => {
return await getAllRelaysByUsers();
},
- {
- refetchOnWindowFocus: false,
- }
- );
+ refetchOnWindowFocus: false,
+ });
const toggleRelay = (relay: string) => {
if (relays.has(relay)) {
@@ -89,7 +87,7 @@ export function OnboardRelaysScreen() {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/app/chats/chat.tsx b/src/app/chats/chat.tsx
index 52571662..243cbae9 100644
--- a/src/app/chats/chat.tsx
+++ b/src/app/chats/chat.tsx
@@ -22,8 +22,12 @@ export function ChatScreen() {
const { ndk } = useNDK();
const { pubkey } = useParams();
const { fetchNIP04Messages } = useNostr();
- const { status, data } = useQuery(['nip04-dm', pubkey], async () => {
- return await fetchNIP04Messages(pubkey);
+ const { status, data } = useQuery({
+ queryKey: ['nip04-dm', pubkey],
+ queryFn: async () => {
+ return await fetchNIP04Messages(pubkey);
+ },
+ refetchOnWindowFocus: false,
});
const renderItem = useCallback(
@@ -69,7 +73,7 @@ export function ChatScreen() {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/app/chats/components/chatListItem.tsx b/src/app/chats/components/chatListItem.tsx
index 6d5e2f0d..99f1707d 100644
--- a/src/app/chats/components/chatListItem.tsx
+++ b/src/app/chats/components/chatListItem.tsx
@@ -19,7 +19,7 @@ export const ChatListItem = memo(function ChatListItem({ event }: { event: NDKEv
const svgURI =
'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(event.pubkey, 90, 50));
- if (status === 'loading') {
+ if (status === 'pending') {
return (
diff --git a/src/app/chats/components/mediaUploader.tsx b/src/app/chats/components/mediaUploader.tsx
index 54127889..de4b8ac6 100644
--- a/src/app/chats/components/mediaUploader.tsx
+++ b/src/app/chats/components/mediaUploader.tsx
@@ -3,14 +3,11 @@ import { Dispatch, SetStateAction, useState } from 'react';
import { LoaderIcon, MediaIcon } from '@shared/icons';
-import { useNostr } from '@utils/hooks/useNostr';
-
export function MediaUploader({
setState,
}: {
setState: Dispatch
>;
}) {
- const { upload } = useNostr();
const [loading, setLoading] = useState(false);
const uploadMedia = async () => {
diff --git a/src/app/chats/index.tsx b/src/app/chats/index.tsx
index ea5ed2f7..67698c9a 100644
--- a/src/app/chats/index.tsx
+++ b/src/app/chats/index.tsx
@@ -11,18 +11,16 @@ import { useNostr } from '@utils/hooks/useNostr';
export function ChatsScreen() {
const { getAllNIP04Chats } = useNostr();
- const { status, data } = useQuery(
- ['nip04-chats'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['nip04-chats'],
+ queryFn: async () => {
return await getAllNIP04Chats();
},
- {
- refetchOnWindowFocus: false,
- refetchOnMount: false,
- refetchOnReconnect: false,
- staleTime: Infinity,
- }
- );
+ refetchOnWindowFocus: false,
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ staleTime: Infinity,
+ });
const renderItem = useCallback(
(event: NDKEvent) => {
@@ -43,7 +41,7 @@ export function ChatsScreen() {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/app/error.tsx b/src/app/error.tsx
index 815bef80..8b667ec8 100644
--- a/src/app/error.tsx
+++ b/src/app/error.tsx
@@ -8,7 +8,6 @@ interface RouteError {
interface DebugInfo {
os: null | string;
- version: null | string;
appDir: null | string;
}
@@ -18,24 +17,20 @@ export function ErrorScreen() {
const [debugInfo, setDebugInfo] = useState
({
os: null,
- version: null,
appDir: null,
});
useEffect(() => {
async function getInformation() {
const { platform, version } = await import('@tauri-apps/plugin-os');
- const { getVersion } = await import('@tauri-apps/plugin-app');
const { appConfigDir } = await import('@tauri-apps/api/path');
const platformName = await platform();
const osVersion = await version();
- const appVersion = await getVersion();
const appDir = await appConfigDir();
setDebugInfo({
os: platformName + ' ' + osVersion,
- version: appVersion,
appDir: appDir,
});
}
@@ -59,9 +54,6 @@ export function ErrorScreen() {
Current location: {location.pathname}
-
- App version: {debugInfo.version}
-
Platform: {debugInfo.os}
diff --git a/src/app/explore/components/groupTitle.tsx b/src/app/explore/components/groupTitle.tsx
index 8a6ca858..1d9c1ca6 100644
--- a/src/app/explore/components/groupTitle.tsx
+++ b/src/app/explore/components/groupTitle.tsx
@@ -5,7 +5,7 @@ import { useProfile } from '@utils/hooks/useProfile';
export const GroupTitle = memo(function GroupTitle({ pubkey }: { pubkey: string }) {
const { status, user } = useProfile(pubkey);
- if (status === 'loading') {
+ if (status === 'pending') {
return
;
}
diff --git a/src/app/explore/components/userLatestPosts.tsx b/src/app/explore/components/userLatestPosts.tsx
index 4a6f18bc..62b553c2 100644
--- a/src/app/explore/components/userLatestPosts.tsx
+++ b/src/app/explore/components/userLatestPosts.tsx
@@ -16,8 +16,12 @@ import { useNostr } from '@utils/hooks/useNostr';
export function UserLatestPosts({ pubkey }: { pubkey: string }) {
const { getEventsByPubkey } = useNostr();
- const { status, data } = useQuery(['user-posts', pubkey], async () => {
- return await getEventsByPubkey(pubkey);
+ const { status, data } = useQuery({
+ queryKey: ['user-posts', pubkey],
+ queryFn: async () => {
+ return await getEventsByPubkey(pubkey);
+ },
+ refetchOnWindowFocus: false,
});
const renderItem = useCallback(
@@ -60,7 +64,7 @@ export function UserLatestPosts({ pubkey }: { pubkey: string }) {
Latest post
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/app/explore/components/userWithDrawer.tsx b/src/app/explore/components/userWithDrawer.tsx
index 54ac60a9..a2271c4e 100644
--- a/src/app/explore/components/userWithDrawer.tsx
+++ b/src/app/explore/components/userWithDrawer.tsx
@@ -84,7 +84,7 @@ export const UserWithDrawer = memo(function UserWithDrawer({
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/app/new/components/mentionPopupItem.tsx b/src/app/new/components/mentionPopupItem.tsx
index de27f95e..c2fa6614 100644
--- a/src/app/new/components/mentionPopupItem.tsx
+++ b/src/app/new/components/mentionPopupItem.tsx
@@ -6,7 +6,7 @@ import { displayNpub } from '@utils/shortenKey';
export function MentionPopupItem({ pubkey, embed }: { pubkey: string; embed?: string }) {
const { status, user } = useProfile(pubkey, embed);
- if (status === 'loading') {
+ if (status === 'pending') {
return (
diff --git a/src/app/notes/article.tsx b/src/app/notes/article.tsx
index 7b636f5e..77a73e34 100644
--- a/src/app/notes/article.tsx
+++ b/src/app/notes/article.tsx
@@ -72,7 +72,7 @@ export function ArticleNoteScreen() {
- {status === 'loading' ? (
+ {status === 'pending' ? (
Loading...
) : (
diff --git a/src/app/notes/text.tsx b/src/app/notes/text.tsx
index 24ea353d..8d832a96 100644
--- a/src/app/notes/text.tsx
+++ b/src/app/notes/text.tsx
@@ -91,7 +91,7 @@ export function TextNoteScreen() {
- {status === 'loading' ? (
+ {status === 'pending' ? (
Loading...
) : (
diff --git a/src/app/relays/components/relayEventList.tsx b/src/app/relays/components/relayEventList.tsx
index 7333a2cd..399e1666 100644
--- a/src/app/relays/components/relayEventList.tsx
+++ b/src/app/relays/components/relayEventList.tsx
@@ -17,9 +17,9 @@ import {
export function RelayEventList({ relayUrl }: { relayUrl: string }) {
const { fetcher } = useNDK();
- const { status, data } = useQuery(
- ['relay-event'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['relay-event'],
+ queryFn: async () => {
const url = 'wss://' + relayUrl;
const events = await fetcher.fetchLatestEvents(
[url],
@@ -30,8 +30,8 @@ export function RelayEventList({ relayUrl }: { relayUrl: string }) {
);
return events as unknown as NDKEvent[];
},
- { refetchOnWindowFocus: false }
- );
+ refetchOnWindowFocus: false,
+ });
const renderItem = useCallback(
(event: NDKEvent) => {
@@ -70,7 +70,7 @@ export function RelayEventList({ relayUrl }: { relayUrl: string }) {
return (
- {status === 'loading' ? (
+ {status === 'pending' ? (
@@ -78,7 +78,7 @@ export function RelayEventList({ relayUrl }: { relayUrl: string }) {
) : (
-
+
{data.map((item) => renderItem(item))}
diff --git a/src/app/relays/components/relayForm.tsx b/src/app/relays/components/relayForm.tsx
index 7bb6ea4b..63115414 100644
--- a/src/app/relays/components/relayForm.tsx
+++ b/src/app/relays/components/relayForm.tsx
@@ -25,7 +25,10 @@ export function RelayForm() {
const res = await db.createRelay(url);
if (!res) return setError("You're already using this relay");
- queryClient.invalidateQueries(['user-relay']);
+ queryClient.invalidateQueries({
+ queryKey: ['user-relay'],
+ });
+
setError('');
setUrl('');
} else {
diff --git a/src/app/relays/components/relayList.tsx b/src/app/relays/components/relayList.tsx
index c9723bf5..e92221e4 100644
--- a/src/app/relays/components/relayList.tsx
+++ b/src/app/relays/components/relayList.tsx
@@ -17,18 +17,16 @@ export function RelayList() {
const { getAllRelaysByUsers } = useNostr();
const { db } = useStorage();
- const { status, data } = useQuery(
- ['relays'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['relays'],
+ queryFn: async () => {
return await getAllRelaysByUsers();
},
- {
- refetchOnWindowFocus: false,
- refetchOnMount: false,
- refetchOnReconnect: false,
- staleTime: Infinity,
- }
- );
+ refetchOnWindowFocus: false,
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ staleTime: Infinity,
+ });
const inspectRelay = (relayUrl: string) => {
const url = new URL(relayUrl);
@@ -40,12 +38,14 @@ export function RelayList() {
const res = await db.createRelay(url);
if (!res) await message("You're aldready connected to this relay");
- queryClient.invalidateQueries(['user-relay']);
+ queryClient.invalidateQueries({
+ queryKey: ['user-relay'],
+ });
};
return (
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/app/relays/components/userRelay.tsx b/src/app/relays/components/userRelay.tsx
index ad9af7c0..9c8e97ea 100644
--- a/src/app/relays/components/userRelay.tsx
+++ b/src/app/relays/components/userRelay.tsx
@@ -12,22 +12,24 @@ export function UserRelay() {
const { relayUrls } = useNDK();
const { db } = useStorage();
- const { status, data } = useQuery(
- ['user-relay'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['user-relay'],
+ queryFn: async () => {
return await db.getExplicitRelayUrls();
},
- { refetchOnWindowFocus: false }
- );
+ refetchOnWindowFocus: false,
+ });
const removeRelay = async (relayUrl: string) => {
await db.removeRelay(relayUrl);
- queryClient.invalidateQueries(['user-relay']);
+ queryClient.invalidateQueries({
+ queryKey: ['user-relay'],
+ });
};
return (
- {status === 'loading' ? (
+ {status === 'pending' ? (
Loading...
) : (
diff --git a/src/app/settings/components/version.tsx b/src/app/settings/components/version.tsx
index e199311b..ac5ac2ac 100644
--- a/src/app/settings/components/version.tsx
+++ b/src/app/settings/components/version.tsx
@@ -1,17 +1,4 @@
-import { getVersion } from '@tauri-apps/plugin-app';
-import { useEffect, useState } from 'react';
-
export function VersionSetting() {
- const [version, setVersion] = useState
('');
-
- useEffect(() => {
- async function checkVersion() {
- const appVersion = await getVersion();
- setVersion(appVersion);
- }
- checkVersion();
- }, []);
-
return (
@@ -21,7 +8,7 @@ export function VersionSetting() {
- {version}
+ 2
);
diff --git a/src/app/users/components/modal.tsx b/src/app/users/components/modal.tsx
index 454805b8..4765ae11 100644
--- a/src/app/users/components/modal.tsx
+++ b/src/app/users/components/modal.tsx
@@ -210,7 +210,9 @@ export function EditProfileModal() {
if (publishedRelays) {
// invalid cache
- queryClient.invalidateQueries(['user', db.account.pubkey]);
+ queryClient.invalidateQueries({
+ queryKey: ['user', db.account.pubkey]
+ });
// reset form
reset();
// reset state
diff --git a/src/app/users/components/stats.tsx b/src/app/users/components/stats.tsx
index 26367520..a2c99998 100644
--- a/src/app/users/components/stats.tsx
+++ b/src/app/users/components/stats.tsx
@@ -5,15 +5,19 @@ import { LoaderIcon } from '@shared/icons';
import { compactNumber } from '@utils/number';
export function UserStats({ pubkey }: { pubkey: string }) {
- const { status, data } = useQuery(['user-metadata', pubkey], async () => {
- const res = await fetch(`https://api.nostr.band/v0/stats/profile/${pubkey}`);
- if (!res.ok) {
- throw new Error('Error');
- }
- return await res.json();
+ const { status, data } = useQuery({
+ queryKey: ['user-metadata', pubkey],
+
+ ...async () => {
+ const res = await fetch(`https://api.nostr.band/v0/stats/profile/${pubkey}`);
+ if (!res.ok) {
+ throw new Error('Error');
+ }
+ return await res.json();
+ },
});
- if (status === 'loading') {
+ if (status === 'pending') {
return (
diff --git a/src/app/users/index.tsx b/src/app/users/index.tsx
index 5fb5dcbc..d2c09b3c 100644
--- a/src/app/users/index.tsx
+++ b/src/app/users/index.tsx
@@ -19,14 +19,18 @@ import {
export function UserScreen() {
const { pubkey } = useParams();
const { ndk } = useNDK();
- const { status, data } = useQuery(['user-feed', pubkey], async () => {
- const events = await ndk.fetchEvents({
- kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Article],
- authors: [pubkey],
- limit: 50,
- });
- const sorted = [...events].sort((a, b) => b.created_at - a.created_at);
- return sorted;
+ const { status, data } = useQuery({
+ queryKey: ['user-feed', pubkey],
+ queryFn: async () => {
+ const events = await ndk.fetchEvents({
+ kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Article],
+ authors: [pubkey],
+ limit: 50,
+ });
+ const sorted = [...events].sort((a, b) => b.created_at - a.created_at);
+ return sorted;
+ },
+ refetchOnWindowFocus: false,
});
// render event match event kind
@@ -73,7 +77,7 @@ export function UserScreen() {
Latest posts
- {status === 'loading' ? (
+ {status === 'pending' ? (
Loading...
) : data.length === 0 ? (
diff --git a/src/shared/accounts/active.tsx b/src/shared/accounts/active.tsx
index 5a9658ec..cd6c5984 100644
--- a/src/shared/accounts/active.tsx
+++ b/src/shared/accounts/active.tsx
@@ -94,7 +94,7 @@ export function ActiveAccount() {
);
}, []);
- if (status === 'loading') {
+ if (status === 'pending') {
return (
);
diff --git a/src/shared/nip05.tsx b/src/shared/nip05.tsx
index 4ba38545..a570eb4b 100644
--- a/src/shared/nip05.tsx
+++ b/src/shared/nip05.tsx
@@ -20,9 +20,9 @@ export const NIP05 = memo(function NIP05({
nip05: string;
className?: string;
}) {
- const { status, data } = useQuery(
- ['nip05', nip05],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['nip05', nip05],
+ queryFn: async () => {
try {
const localPath = nip05.split('@')[0];
const service = nip05.split('@')[1];
@@ -47,15 +47,13 @@ export const NIP05 = memo(function NIP05({
throw new Error(`Failed to verify NIP-05, error: ${e}`);
}
},
- {
- refetchOnMount: false,
- refetchOnReconnect: false,
- refetchOnWindowFocus: false,
- staleTime: Infinity,
- }
- );
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ refetchOnWindowFocus: false,
+ staleTime: Infinity,
+ });
- if (status === 'loading') {
+ if (status === 'pending') {
;
}
diff --git a/src/shared/notes/child.tsx b/src/shared/notes/child.tsx
index e9221cc8..7f5fffe5 100644
--- a/src/shared/notes/child.tsx
+++ b/src/shared/notes/child.tsx
@@ -30,7 +30,7 @@ export function ChildNote({ id, root }: { id: string; root?: string }) {
}
};
- if (status === 'loading') {
+ if (status === 'pending') {
return (
<>
diff --git a/src/shared/notes/kinds/repost.tsx b/src/shared/notes/kinds/repost.tsx
index b80e73be..fd095bfb 100644
--- a/src/shared/notes/kinds/repost.tsx
+++ b/src/shared/notes/kinds/repost.tsx
@@ -28,9 +28,9 @@ export function Repost({
event.content.length > 0 ? JSON.parse(event.content) : null;
const { ndk } = useNDK();
- const { status, isError, data } = useQuery(
- ['repost', event.id],
- async () => {
+ const { status, isError, data } = useQuery({
+ queryKey: ['repost', event.id],
+ queryFn: async () => {
const id = event.tags.find((el) => el[0] === 'e')[1];
if (!id) throw new Error('wrong id');
@@ -39,11 +39,9 @@ export function Repost({
return ndkEvent;
},
- {
- enabled: embedEvent === null,
- refetchOnWindowFocus: false,
- }
- );
+ enabled: embedEvent === null,
+ refetchOnWindowFocus: false,
+ });
const renderKind = useCallback((repostEvent: NDKEvent) => {
switch (repostEvent.kind) {
@@ -87,7 +85,7 @@ export function Repost({
);
}
- if (status === 'loading') {
+ if (status === 'pending') {
return (
diff --git a/src/shared/notes/mentions/note.tsx b/src/shared/notes/mentions/note.tsx
index bce2ee38..1e463446 100644
--- a/src/shared/notes/mentions/note.tsx
+++ b/src/shared/notes/mentions/note.tsx
@@ -46,7 +46,7 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
}
};
- if (status === 'loading') {
+ if (status === 'pending') {
return (
diff --git a/src/shared/notes/metadata.tsx b/src/shared/notes/metadata.tsx
index cd4c46a5..8d6de8c5 100644
--- a/src/shared/notes/metadata.tsx
+++ b/src/shared/notes/metadata.tsx
@@ -17,9 +17,9 @@ export function NoteMetadata({ id }: { id: string }) {
const { db } = useStorage();
const { ndk } = useNDK();
- const { status, data } = useQuery(
- ['note-metadata', id],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['note-metadata', id],
+ queryFn: async () => {
let replies = 0;
let zap = 0;
const users = [];
@@ -53,14 +53,12 @@ export function NoteMetadata({ id }: { id: string }) {
return { replies, users, zap };
},
- {
- enabled: !!ndk,
- refetchOnWindowFocus: false,
- refetchOnReconnect: false,
- }
- );
+ enabled: !!ndk,
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
+ });
- if (status === 'loading') {
+ if (status === 'pending') {
return (
diff --git a/src/shared/notes/preview/link.tsx b/src/shared/notes/preview/link.tsx
index 8652e917..eeecbc70 100644
--- a/src/shared/notes/preview/link.tsx
+++ b/src/shared/notes/preview/link.tsx
@@ -8,7 +8,7 @@ export function LinkPreview({ urls }: { urls: string[] }) {
return (
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/notes/stats.tsx b/src/shared/notes/stats.tsx
index 8c24bf14..147a06c5 100644
--- a/src/shared/notes/stats.tsx
+++ b/src/shared/notes/stats.tsx
@@ -10,9 +10,9 @@ import { compactNumber } from '@utils/number';
export function NoteStats({ id }: { id: string }) {
const { ndk } = useNDK();
- const { status, data } = useQuery(
- ['note-stats', id],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['note-stats', id],
+ queryFn: async () => {
let reactions = 0;
let reposts = 0;
let zaps = 0;
@@ -48,10 +48,11 @@ export function NoteStats({ id }: { id: string }) {
return { reposts, reactions, zaps };
},
- { refetchOnWindowFocus: false, refetchOnReconnect: false }
- );
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
+ });
- if (status === 'loading') {
+ if (status === 'pending') {
return (
diff --git a/src/shared/notification/notifyNote.tsx b/src/shared/notification/notifyNote.tsx
index 9ec26ea5..44466e75 100644
--- a/src/shared/notification/notifyNote.tsx
+++ b/src/shared/notification/notifyNote.tsx
@@ -62,7 +62,7 @@ export function NotifyNote({ event }: { event: NDKEvent }) {
}
};
- if (status === 'loading') {
+ if (status === 'pending') {
return (
diff --git a/src/shared/user.tsx b/src/shared/user.tsx
index 3322d45f..65b2f364 100644
--- a/src/shared/user.tsx
+++ b/src/shared/user.tsx
@@ -46,7 +46,7 @@ export const User = memo(function User({
const svgURI =
'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(pubkey, 90, 50));
- if (status === 'loading') {
+ if (status === 'pending') {
if (variant === 'avatar') {
return (
diff --git a/src/shared/widgets/eventLoader.tsx b/src/shared/widgets/eventLoader.tsx
index 0e373c69..76b6e089 100644
--- a/src/shared/widgets/eventLoader.tsx
+++ b/src/shared/widgets/eventLoader.tsx
@@ -29,7 +29,9 @@ export function EventLoader({ firstTime }: { firstTime: boolean }) {
setProgress(100);
setIsFetched();
// invalidate queries
- queryClient.invalidateQueries(['local-network-widget']);
+ queryClient.invalidateQueries({
+ queryKey: ['local-network-widget']
+ });
await db.updateLastLogin();
}
}
diff --git a/src/shared/widgets/global/articles.tsx b/src/shared/widgets/global/articles.tsx
index 7d202cd6..cc79f203 100644
--- a/src/shared/widgets/global/articles.tsx
+++ b/src/shared/widgets/global/articles.tsx
@@ -14,9 +14,9 @@ import { Widget } from '@utils/types';
export function GlobalArticlesWidget({ params }: { params: Widget }) {
const { ndk } = useNDK();
- const { status, data } = useQuery(
- ['global-articles'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['global-articles'],
+ queryFn: async () => {
const events = await ndk.fetchEvents({
kinds: [NDKKind.Article],
limit: 200,
@@ -24,8 +24,8 @@ export function GlobalArticlesWidget({ params }: { params: Widget }) {
const sortedEvents = [...events].sort((x, y) => y.created_at - x.created_at);
return sortedEvents;
},
- { refetchOnWindowFocus: false }
- );
+ refetchOnWindowFocus: false,
+ });
// render event match event kind
const renderItem = useCallback(
@@ -43,7 +43,7 @@ export function GlobalArticlesWidget({ params }: { params: Widget }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/global/files.tsx b/src/shared/widgets/global/files.tsx
index 05011ea2..d6628b17 100644
--- a/src/shared/widgets/global/files.tsx
+++ b/src/shared/widgets/global/files.tsx
@@ -15,9 +15,9 @@ import { Widget } from '@utils/types';
export function GlobalFilesWidget({ params }: { params: Widget }) {
const { ndk } = useNDK();
- const { status, data } = useQuery(
- ['global-file-sharing'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['global-file-sharing'],
+ queryFn: async () => {
const events = await ndk.fetchEvents({
// @ts-expect-error, NDK not support file metadata yet
kinds: [1063],
@@ -26,8 +26,8 @@ export function GlobalFilesWidget({ params }: { params: Widget }) {
const sortedEvents = [...events].sort((x, y) => y.created_at - x.created_at);
return sortedEvents;
},
- { refetchOnWindowFocus: false }
- );
+ refetchOnWindowFocus: false,
+ });
// render event match event kind
const renderItem = useCallback(
@@ -45,7 +45,7 @@ export function GlobalFilesWidget({ params }: { params: Widget }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/global/hashtag.tsx b/src/shared/widgets/global/hashtag.tsx
index 13c31ce5..99c2b67f 100644
--- a/src/shared/widgets/global/hashtag.tsx
+++ b/src/shared/widgets/global/hashtag.tsx
@@ -22,9 +22,9 @@ import { Widget } from '@utils/types';
export function GlobalHashtagWidget({ params }: { params: Widget }) {
const { ndk } = useNDK();
- const { status, data } = useQuery(
- ['hashtag-' + params.title],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['hashtag-' + params.title],
+ queryFn: async () => {
const events = await ndk.fetchEvents({
kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Article],
'#t': [params.content],
@@ -33,8 +33,8 @@ export function GlobalHashtagWidget({ params }: { params: Widget }) {
const sortedEvents = [...events].sort((x, y) => y.created_at - x.created_at);
return sortedEvents;
},
- { refetchOnWindowFocus: false }
- );
+ refetchOnWindowFocus: false,
+ });
// render event match event kind
const renderItem = useCallback(
@@ -75,7 +75,7 @@ export function GlobalHashtagWidget({ params }: { params: Widget }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/local/articles.tsx b/src/shared/widgets/local/articles.tsx
index a4892c53..78a0ced6 100644
--- a/src/shared/widgets/local/articles.tsx
+++ b/src/shared/widgets/local/articles.tsx
@@ -17,6 +17,7 @@ export function LocalArticlesWidget({ params }: { params: Widget }) {
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
useInfiniteQuery({
queryKey: ['local-articles'],
+ initialPageParam: 0,
queryFn: async ({ pageParam = 0 }) => {
return await db.getAllEventsByKinds([NDKKind.Article], 20, pageParam);
},
@@ -45,7 +46,7 @@ export function LocalArticlesWidget({ params }: { params: Widget }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/local/feeds.tsx b/src/shared/widgets/local/feeds.tsx
index c4cd52cd..c69fa1fe 100644
--- a/src/shared/widgets/local/feeds.tsx
+++ b/src/shared/widgets/local/feeds.tsx
@@ -24,6 +24,7 @@ export function LocalFeedsWidget({ params }: { params: Widget }) {
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
useInfiniteQuery({
queryKey: ['group-feeds-' + params.id],
+ initialPageParam: 0,
queryFn: async ({ pageParam = 0 }) => {
const authors = JSON.parse(params.content);
return await db.getAllEventsByAuthors(authors, 20, pageParam);
@@ -81,7 +82,7 @@ export function LocalFeedsWidget({ params }: { params: Widget }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/local/files.tsx b/src/shared/widgets/local/files.tsx
index 7beec3d2..541a1c05 100644
--- a/src/shared/widgets/local/files.tsx
+++ b/src/shared/widgets/local/files.tsx
@@ -17,6 +17,7 @@ export function LocalFilesWidget({ params }: { params: Widget }) {
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
useInfiniteQuery({
queryKey: ['local-file-sharing'],
+ initialPageParam: 0,
queryFn: async ({ pageParam = 0 }) => {
return await db.getAllEventsByKinds([1063], 20, pageParam);
},
@@ -45,7 +46,7 @@ export function LocalFilesWidget({ params }: { params: Widget }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/local/follows.tsx b/src/shared/widgets/local/follows.tsx
index 9d9b6326..f69833a7 100644
--- a/src/shared/widgets/local/follows.tsx
+++ b/src/shared/widgets/local/follows.tsx
@@ -24,6 +24,7 @@ export function LocalFollowsWidget({ params }: { params: Widget }) {
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
useInfiniteQuery({
queryKey: ['follows-' + params.title],
+ initialPageParam: 0,
queryFn: async ({ pageParam = 0 }) => {
return await db.getAllEventsByAuthors(db.account.follows, 20, pageParam);
},
@@ -80,7 +81,7 @@ export function LocalFollowsWidget({ params }: { params: Widget }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/local/network.tsx b/src/shared/widgets/local/network.tsx
index 3c34eb1a..7f6c8138 100644
--- a/src/shared/widgets/local/network.tsx
+++ b/src/shared/widgets/local/network.tsx
@@ -29,6 +29,7 @@ export function LocalNetworkWidget() {
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
useInfiniteQuery({
queryKey: ['local-network-widget'],
+ initialPageParam: 0,
queryFn: async ({ pageParam = 0 }) => {
return await db.getAllEvents(20, pageParam);
},
@@ -136,7 +137,7 @@ export function LocalNetworkWidget() {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/local/thread.tsx b/src/shared/widgets/local/thread.tsx
index 63683f1c..bff4be31 100644
--- a/src/shared/widgets/local/thread.tsx
+++ b/src/shared/widgets/local/thread.tsx
@@ -43,7 +43,7 @@ export function LocalThreadWidget({ params }: { params: Widget }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/local/user.tsx b/src/shared/widgets/local/user.tsx
index 975a1382..c436ebc6 100644
--- a/src/shared/widgets/local/user.tsx
+++ b/src/shared/widgets/local/user.tsx
@@ -23,9 +23,9 @@ import { Widget } from '@utils/types';
export function LocalUserWidget({ params }: { params: Widget }) {
const { ndk } = useNDK();
- const { status, data } = useQuery(
- ['user-posts', params.content],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['user-posts', params.content],
+ queryFn: async () => {
const events = await ndk.fetchEvents({
// @ts-expect-error, NDK not support file metadata yet
kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
@@ -35,13 +35,11 @@ export function LocalUserWidget({ params }: { params: Widget }) {
const sortedEvents = [...events].sort((x, y) => y.created_at - x.created_at);
return sortedEvents;
},
- {
- staleTime: Infinity,
- refetchOnMount: false,
- refetchOnReconnect: false,
- refetchOnWindowFocus: false,
- }
- );
+ staleTime: Infinity,
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ refetchOnWindowFocus: false,
+ });
// render event match event kind
const renderItem = useCallback(
@@ -90,7 +88,7 @@ export function LocalUserWidget({ params }: { params: Widget }) {
Latest posts
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/nostrBand/trendingAccounts.tsx b/src/shared/widgets/nostrBand/trendingAccounts.tsx
index 2c38c311..4a0e9d13 100644
--- a/src/shared/widgets/nostrBand/trendingAccounts.tsx
+++ b/src/shared/widgets/nostrBand/trendingAccounts.tsx
@@ -13,9 +13,9 @@ interface Response {
}
export function TrendingAccountsWidget({ params }: { params: Widget }) {
- const { status, data } = useQuery(
- ['trending-profiles-widget'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['trending-profiles-widget'],
+ queryFn: async () => {
const res = await fetch('https://api.nostr.band/v0/trending/profiles');
if (!res.ok) {
throw new Error('Error');
@@ -24,19 +24,17 @@ export function TrendingAccountsWidget({ params }: { params: Widget }) {
if (!json.profiles) return [];
return json.profiles;
},
- {
- refetchOnMount: false,
- refetchOnReconnect: false,
- refetchOnWindowFocus: false,
- staleTime: Infinity,
- }
- );
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ refetchOnWindowFocus: false,
+ staleTime: Infinity,
+ });
return (
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/nostrBand/trendingNotes.tsx b/src/shared/widgets/nostrBand/trendingNotes.tsx
index c5f2adf3..46beb1ad 100644
--- a/src/shared/widgets/nostrBand/trendingNotes.tsx
+++ b/src/shared/widgets/nostrBand/trendingNotes.tsx
@@ -14,9 +14,9 @@ interface Response {
}
export function TrendingNotesWidget({ params }: { params: Widget }) {
- const { status, data } = useQuery(
- ['trending-notes-widget'],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['trending-notes-widget'],
+ queryFn: async () => {
const res = await fetch('https://api.nostr.band/v0/trending/notes');
if (!res.ok) {
throw new Error('failed to fecht trending notes');
@@ -25,19 +25,17 @@ export function TrendingNotesWidget({ params }: { params: Widget }) {
if (!json.notes) return null;
return json.notes;
},
- {
- refetchOnMount: false,
- refetchOnReconnect: false,
- refetchOnWindowFocus: false,
- staleTime: Infinity,
- }
- );
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ refetchOnWindowFocus: false,
+ staleTime: Infinity,
+ });
return (
- {status === 'loading' ? (
+ {status === 'pending' ? (
diff --git a/src/shared/widgets/nostrBandUserProfile.tsx b/src/shared/widgets/nostrBandUserProfile.tsx
index 19cc3a5e..97b045c0 100644
--- a/src/shared/widgets/nostrBandUserProfile.tsx
+++ b/src/shared/widgets/nostrBandUserProfile.tsx
@@ -3,6 +3,7 @@ import { useQuery } from '@tanstack/react-query';
import { useEffect, useState } from 'react';
import { toast } from 'sonner';
+import { useNDK } from '@libs/ndk/provider';
import { useStorage } from '@libs/storage/provider';
import { FollowIcon, UnfollowIcon } from '@shared/icons';
@@ -18,20 +19,18 @@ export interface Profile {
export function NostrBandUserProfile({ data }: { data: Profile }) {
const { db } = useStorage();
- const { ndk } = useStorage();
- const { status, data: userStats } = useQuery(
- ['user-stats', data.pubkey],
- async () => {
+ const { ndk } = useNDK();
+ const { status, data: userStats } = useQuery({
+ queryKey: ['user-stats', data.pubkey],
+ queryFn: async () => {
const res = await fetch(`https://api.nostr.band/v0/stats/profile/${data.pubkey}`);
return res.json();
},
- {
- refetchOnMount: false,
- refetchOnReconnect: false,
- refetchOnWindowFocus: false,
- staleTime: Infinity,
- }
- );
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ refetchOnWindowFocus: false,
+ staleTime: Infinity,
+ });
const embedProfile = data.profile ? JSON.parse(data.profile.content) : null;
const profile = embedProfile;
@@ -137,7 +136,7 @@ export function NostrBandUserProfile({ data }: { data: Profile }) {
- {status === 'loading' ? (
+ {status === 'pending' ? (
Loading...
) : (
diff --git a/src/utils/hooks/useEvent.ts b/src/utils/hooks/useEvent.ts
index 04439286..31cfc918 100644
--- a/src/utils/hooks/useEvent.ts
+++ b/src/utils/hooks/useEvent.ts
@@ -12,9 +12,9 @@ export function useEvent(
) {
const { db } = useStorage();
const { ndk } = useNDK();
- const { status, data } = useQuery(
- ['event', id],
- async () => {
+ const { status, data } = useQuery({
+ queryKey: ['event', id],
+ queryFn: async () => {
// return event refer from naddr
if (naddr) {
const rEvents = await ndk.fetchEvents({
@@ -45,11 +45,9 @@ export function useEvent(
return event;
},
- {
- enabled: !!ndk,
- refetchOnWindowFocus: false,
- }
- );
+ enabled: !!ndk,
+ refetchOnWindowFocus: false,
+ });
return { status, data };
}
diff --git a/src/utils/hooks/useOpenGraph.ts b/src/utils/hooks/useOpenGraph.ts
index 12cb8e74..eb65a860 100644
--- a/src/utils/hooks/useOpenGraph.ts
+++ b/src/utils/hooks/useOpenGraph.ts
@@ -4,22 +4,20 @@ import { invoke } from '@tauri-apps/api/primitives';
import { Opengraph } from '@utils/types';
export function useOpenGraph(url: string) {
- const { status, data, error } = useQuery(
- ['opg', url],
- async () => {
+ const { status, data, error } = useQuery({
+ queryKey: ['opg', url],
+ queryFn: async () => {
const res: Opengraph = await invoke('opengraph', { url });
if (!res) {
throw new Error('fetch preview failed');
}
return res;
},
- {
- staleTime: Infinity,
- refetchOnWindowFocus: false,
- refetchOnMount: false,
- refetchOnReconnect: false,
- }
- );
+ staleTime: Infinity,
+ refetchOnWindowFocus: false,
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ });
return {
status,
diff --git a/src/utils/hooks/useProfile.ts b/src/utils/hooks/useProfile.ts
index 2630fbf3..b2fa2e7d 100644
--- a/src/utils/hooks/useProfile.ts
+++ b/src/utils/hooks/useProfile.ts
@@ -9,9 +9,9 @@ export function useProfile(pubkey: string, embed?: string) {
status,
data: user,
error,
- } = useQuery(
- ['user', pubkey],
- async () => {
+ } = useQuery({
+ queryKey: ['user', pubkey],
+ queryFn: async () => {
if (embed) {
const profile: NDKUserProfile = JSON.parse(embed);
return profile;
@@ -21,15 +21,13 @@ export function useProfile(pubkey: string, embed?: string) {
const user = ndk.getUser({ hexpubkey: cleanPubkey });
return await user.fetchProfile();
},
- {
- enabled: !!ndk,
- staleTime: Infinity,
- refetchOnMount: false,
- refetchOnWindowFocus: false,
- refetchOnReconnect: false,
- retry: 2,
- }
- );
+ enabled: !!ndk,
+ staleTime: Infinity,
+ refetchOnMount: false,
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
+ retry: 2,
+ });
return { status, user, error };
}
From 60b803f419de658d39a96fc2798f82c0ec087b28 Mon Sep 17 00:00:00 2001
From: reya
Date: Sat, 28 Oct 2023 07:51:42 +0700
Subject: [PATCH 03/14] unify upload function
---
src/app/chats/components/mediaUploader.tsx | 13 ++++--
src/app/new/components/mediaUploader.tsx | 52 +++-------------------
src/shared/avatarUploader.tsx | 45 ++++---------------
src/shared/bannerUploader.tsx | 45 ++++---------------
src/utils/hooks/useNostr.ts | 39 ++++++++++++++++
5 files changed, 73 insertions(+), 121 deletions(-)
diff --git a/src/app/chats/components/mediaUploader.tsx b/src/app/chats/components/mediaUploader.tsx
index de4b8ac6..165b9470 100644
--- a/src/app/chats/components/mediaUploader.tsx
+++ b/src/app/chats/components/mediaUploader.tsx
@@ -3,20 +3,25 @@ import { Dispatch, SetStateAction, useState } from 'react';
import { LoaderIcon, MediaIcon } from '@shared/icons';
+import { useNostr } from '@utils/hooks/useNostr';
+
export function MediaUploader({
setState,
}: {
setState: Dispatch>;
}) {
+ const { upload } = useNostr();
const [loading, setLoading] = useState(false);
const uploadMedia = async () => {
setLoading(true);
- const image = await upload(null);
- if (image.url) {
- setState((prev: string) => `${prev}\n${image.url}`);
+
+ const image = await upload(['mp4', 'mp3', 'webm', 'mkv', 'avi', 'mov']);
+
+ if (image) {
+ setState((prev: string) => `${prev}\n${image}`);
+ setLoading(false);
}
- setLoading(false);
};
return (
diff --git a/src/app/new/components/mediaUploader.tsx b/src/app/new/components/mediaUploader.tsx
index 947b64ee..89cdba11 100644
--- a/src/app/new/components/mediaUploader.tsx
+++ b/src/app/new/components/mediaUploader.tsx
@@ -1,11 +1,13 @@
-import { message, open } from '@tauri-apps/plugin-dialog';
-import { readBinaryFile } from '@tauri-apps/plugin-fs';
+import { message } from '@tauri-apps/plugin-dialog';
import { Editor } from '@tiptap/react';
import { useState } from 'react';
import { MediaIcon } from '@shared/icons';
+import { useNostr } from '@utils/hooks/useNostr';
+
export function MediaUploader({ editor }: { editor: Editor }) {
+ const { upload } = useNostr();
const [loading, setLoading] = useState(false);
const uploadToNostrBuild = async () => {
@@ -13,52 +15,12 @@ export function MediaUploader({ editor }: { editor: Editor }) {
// start loading
setLoading(true);
- const selected = await open({
- multiple: false,
- filters: [
- {
- name: 'Media',
- extensions: [
- 'png',
- 'jpeg',
- 'jpg',
- 'gif',
- 'mp4',
- 'mp3',
- 'webm',
- 'mkv',
- 'avi',
- 'mov',
- ],
- },
- ],
- });
+ const image = await upload(['mp4', 'mp3', 'webm', 'mkv', 'avi', 'mov']);
- if (!selected) {
- setLoading(false);
- return;
- }
-
- const file = await readBinaryFile(selected.path);
- const blob = new Blob([file]);
-
- const data = new FormData();
- data.append('fileToUpload', blob);
- data.append('submit', 'Upload Image');
-
- const res = await fetch('https://nostr.build/api/v2/upload/files', {
- method: 'POST',
- body: data,
- });
-
- if (res.ok) {
- const json = await res.json();
- const content = json.data[0];
-
- editor.commands.setImage({ src: content.url });
+ if (image) {
+ editor.commands.setImage({ src: image });
editor.commands.createParagraphNear();
- // stop loading
setLoading(false);
}
} catch (e) {
diff --git a/src/shared/avatarUploader.tsx b/src/shared/avatarUploader.tsx
index 1a870867..f5e3ea3f 100644
--- a/src/shared/avatarUploader.tsx
+++ b/src/shared/avatarUploader.tsx
@@ -1,15 +1,16 @@
-import { message, open } from '@tauri-apps/plugin-dialog';
-import { readBinaryFile } from '@tauri-apps/plugin-fs';
-import { fetch } from '@tauri-apps/plugin-http';
+import { message } from '@tauri-apps/plugin-dialog';
import { Dispatch, SetStateAction, useState } from 'react';
import { LoaderIcon, PlusIcon } from '@shared/icons';
+import { useNostr } from '@utils/hooks/useNostr';
+
export function AvatarUploader({
setPicture,
}: {
setPicture: Dispatch>;
}) {
+ const { upload } = useNostr();
const [loading, setLoading] = useState(false);
const uploadAvatar = async () => {
@@ -17,42 +18,14 @@ export function AvatarUploader({
// start loading
setLoading(true);
- const selected = await open({
- multiple: false,
- filters: [
- {
- name: 'Image',
- extensions: ['png', 'jpeg', 'jpg', 'gif'],
- },
- ],
- });
+ const image = await upload();
- if (!selected) {
- setLoading(false);
- return;
- }
-
- const file = await readBinaryFile(selected.path);
- const blob = new Blob([file]);
-
- const data = new FormData();
- data.append('fileToUpload', blob);
- data.append('submit', 'Upload Image');
-
- const res = await fetch('https://nostr.build/api/v2/upload/files', {
- method: 'POST',
- body: data,
- });
-
- if (res.ok) {
- const json = await res.json();
- const content = json.data[0];
-
- setPicture(content.url);
-
- // stop loading
+ if (image) {
+ setPicture(image);
setLoading(false);
}
+
+ return;
} catch (e) {
// stop loading
setLoading(false);
diff --git a/src/shared/bannerUploader.tsx b/src/shared/bannerUploader.tsx
index 5ec88b5c..b3e308be 100644
--- a/src/shared/bannerUploader.tsx
+++ b/src/shared/bannerUploader.tsx
@@ -1,15 +1,16 @@
-import { message, open } from '@tauri-apps/plugin-dialog';
-import { readBinaryFile } from '@tauri-apps/plugin-fs';
-import { fetch } from '@tauri-apps/plugin-http';
+import { message } from '@tauri-apps/plugin-dialog';
import { Dispatch, SetStateAction, useState } from 'react';
import { LoaderIcon, PlusIcon } from '@shared/icons';
+import { useNostr } from '@utils/hooks/useNostr';
+
export function BannerUploader({
setBanner,
}: {
setBanner: Dispatch>;
}) {
+ const { upload } = useNostr();
const [loading, setLoading] = useState(false);
const uploadBanner = async () => {
@@ -17,42 +18,14 @@ export function BannerUploader({
// start loading
setLoading(true);
- const selected = await open({
- multiple: false,
- filters: [
- {
- name: 'Image',
- extensions: ['png', 'jpeg', 'jpg', 'gif'],
- },
- ],
- });
+ const image = await upload();
- if (!selected) {
- setLoading(false);
- return;
- }
-
- const file = await readBinaryFile(selected.path);
- const blob = new Blob([file]);
-
- const data = new FormData();
- data.append('fileToUpload', blob);
- data.append('submit', 'Upload Image');
-
- const res = await fetch('https://nostr.build/api/v2/upload/files', {
- method: 'POST',
- body: data,
- });
-
- if (res.ok) {
- const json = await res.json();
- const content = json.data[0];
-
- setBanner(content.url);
-
- // stop loading
+ if (image) {
+ setBanner(image);
setLoading(false);
}
+
+ return;
} catch (e) {
// stop loading
setLoading(false);
diff --git a/src/utils/hooks/useNostr.ts b/src/utils/hooks/useNostr.ts
index 4bd9a316..a02b996e 100644
--- a/src/utils/hooks/useNostr.ts
+++ b/src/utils/hooks/useNostr.ts
@@ -1,4 +1,7 @@
import { NDKEvent, NDKFilter, NDKKind, NDKSubscription } from '@nostr-dev-kit/ndk';
+import { open } from '@tauri-apps/plugin-dialog';
+import { readBinaryFile } from '@tauri-apps/plugin-fs';
+import { fetch } from '@tauri-apps/plugin-http';
import { LRUCache } from 'lru-cache';
import { NostrEventExt } from 'nostr-fetch';
import { useMemo } from 'react';
@@ -239,6 +242,41 @@ export function useNostr() {
return res;
};
+ const upload = async (ext: string[] = []) => {
+ const defaultExts = ['png', 'jpeg', 'jpg', 'gif'].concat(ext);
+
+ const selected = await open({
+ multiple: false,
+ filters: [
+ {
+ name: 'Image',
+ extensions: defaultExts,
+ },
+ ],
+ });
+
+ if (!selected) return null;
+
+ const file = await readBinaryFile(selected.path);
+ const blob = new Blob([file]);
+
+ const data = new FormData();
+ data.append('fileToUpload', blob);
+ data.append('submit', 'Upload Image');
+
+ const res = await fetch('https://nostr.build/api/v2/upload/files', {
+ method: 'POST',
+ body: data,
+ });
+
+ if (!res.ok) return null;
+
+ const json = await res.json();
+ const content = json.data[0];
+
+ return content.url as string;
+ };
+
return {
sub,
getAllNIP04Chats,
@@ -250,5 +288,6 @@ export function useNostr() {
fetchNIP04Messages,
fetchAllReplies,
createZap,
+ upload,
};
}
From 6685d9af382c5d305f0bee2357504390e8703547 Mon Sep 17 00:00:00 2001
From: reya
Date: Sat, 28 Oct 2023 08:29:38 +0700
Subject: [PATCH 04/14] update user component
---
src/shared/user.tsx | 139 ++++++++++++++++++++++++----------
src/utils/hooks/useProfile.ts | 3 +-
2 files changed, 103 insertions(+), 39 deletions(-)
diff --git a/src/shared/user.tsx b/src/shared/user.tsx
index 65b2f364..f9df835e 100644
--- a/src/shared/user.tsx
+++ b/src/shared/user.tsx
@@ -2,10 +2,7 @@ import * as Avatar from '@radix-ui/react-avatar';
import * as HoverCard from '@radix-ui/react-hover-card';
import { minidenticon } from 'minidenticons';
import { memo } from 'react';
-import ReactMarkdown from 'react-markdown';
import { Link } from 'react-router-dom';
-import rehypeExternalLinks from 'rehype-external-links';
-import remarkGfm from 'remark-gfm';
import { RepostIcon, WorldIcon } from '@shared/icons';
import { NIP05 } from '@shared/nip05';
@@ -46,39 +43,16 @@ export const User = memo(function User({
const svgURI =
'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(pubkey, 90, 50));
- if (status === 'pending') {
- if (variant === 'avatar') {
+ if (variant === 'mention') {
+ if (status === 'pending') {
return (
-
- );
- }
-
- if (variant === 'mention' || variant === 'notify') {
- return (
-
-
+
);
}
- if (variant === 'stacked') {
- return (
-
- );
- }
-
- return (
-
- );
- }
-
- if (variant === 'mention') {
return (
@@ -113,6 +87,15 @@ export const User = memo(function User({
}
if (variant === 'notify') {
+ if (status === 'pending') {
+ return (
+
+ );
+ }
+
return (
@@ -143,6 +126,19 @@ export const User = memo(function User({
}
if (variant === 'large') {
+ if (status === 'pending') {
+ return (
+
+ );
+ }
+
return (
@@ -167,15 +163,9 @@ export const User = memo(function User({
{user?.name || user?.display_name || user?.displayName}
-
+
{user?.about || user?.bio || 'No bio'}
-
+
{user?.website ? (
@@ -195,6 +185,18 @@ export const User = memo(function User({
}
if (variant === 'simple') {
+ if (status === 'pending') {
+ return (
+
+ );
+ }
+
return (
@@ -227,6 +229,12 @@ export const User = memo(function User({
}
if (variant === 'avatar') {
+ if (status === 'pending') {
+ return (
+
+ );
+ }
+
return (
+ );
+ }
+
return (
+ );
+ }
+
return (
+ );
+ }
+
return (
+
+
+
+
+
+ );
+ }
+
return (
@@ -353,6 +393,18 @@ export const User = memo(function User({
}
if (variant === 'thread') {
+ if (status === 'pending') {
+ return (
+
+ );
+ }
+
return (
@@ -386,6 +438,17 @@ export const User = memo(function User({
);
}
+ if (status === 'pending') {
+ return (
+
+ );
+ }
+
return (
diff --git a/src/utils/hooks/useProfile.ts b/src/utils/hooks/useProfile.ts
index b2fa2e7d..6f73237e 100644
--- a/src/utils/hooks/useProfile.ts
+++ b/src/utils/hooks/useProfile.ts
@@ -17,8 +17,9 @@ export function useProfile(pubkey: string, embed?: string) {
return profile;
}
- const cleanPubkey = pubkey.replace('-', '');
+ const cleanPubkey = pubkey.replace(/[^a-zA-Z0-9]/g, '');
const user = ndk.getUser({ hexpubkey: cleanPubkey });
+
return await user.fetchProfile();
},
enabled: !!ndk,
From ace58ecdd56b175a3f7ac138c6d10ce3ce011fb2 Mon Sep 17 00:00:00 2001
From: reya
Date: Sat, 28 Oct 2023 14:36:12 +0700
Subject: [PATCH 05/14] refactor text parser
---
pnpm-lock.yaml | 26 ++---
src/shared/notes/kinds/text.tsx | 81 ++-------------
src/shared/user.tsx | 4 +-
src/utils/parser.ts | 124 -----------------------
src/utils/parser.tsx | 173 ++++++++++++++++++++++++++++++++
src/utils/types.d.ts | 3 +-
6 files changed, 200 insertions(+), 211 deletions(-)
delete mode 100644 src/utils/parser.ts
create mode 100644 src/utils/parser.tsx
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 57e70a85..11781526 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -51,43 +51,43 @@ dependencies:
specifier: ^5.0.5
version: 5.0.5(react-dom@18.2.0)(react@18.2.0)
'@tauri-apps/api':
- specifier: 2.0.0-alpha.9
+ specifier: ^2.0.0-alpha.9
version: 2.0.0-alpha.9
'@tauri-apps/cli':
- specifier: 2.0.0-alpha.16
+ specifier: ^2.0.0-alpha.16
version: 2.0.0-alpha.16
'@tauri-apps/plugin-clipboard-manager':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-dialog':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-fs':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-http':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-notification':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-os':
- specifier: 2.0.0-alpha.3
+ specifier: ^2.0.0-alpha.3
version: 2.0.0-alpha.3
'@tauri-apps/plugin-process':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-shell':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-sql':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-updater':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tauri-apps/plugin-upload':
- specifier: 2.0.0-alpha.2
+ specifier: ^2.0.0-alpha.2
version: 2.0.0-alpha.2
'@tiptap/extension-character-count':
specifier: ^2.1.12
diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx
index 2e14c2e1..bddf6f85 100644
--- a/src/shared/notes/kinds/text.tsx
+++ b/src/shared/notes/kinds/text.tsx
@@ -1,84 +1,23 @@
import { memo } from 'react';
-import ReactMarkdown from 'react-markdown';
-import { Link } from 'react-router-dom';
-import rehypeExternalLinks from 'rehype-external-links';
-import remarkGfm from 'remark-gfm';
-import {
- Boost,
- Hashtag,
- ImagePreview,
- Invoice,
- LinkPreview,
- MentionNote,
- MentionUser,
- VideoPreview,
-} from '@shared/notes';
+import { ImagePreview, LinkPreview, MentionNote, VideoPreview } from '@shared/notes';
import { parser } from '@utils/parser';
export function TextNote(props: { content?: string }) {
- const richContent = parser(props.content) ?? null;
-
- if (!richContent) {
- return (
-
-
- {props.content}
-
-
- );
- }
+ const richContent = parser(props.content);
return (
-
{
- const cleanURL = new URL(href);
- cleanURL.search = '';
- return (
-
- {cleanURL.hostname + cleanURL.pathname}
-
- );
- },
- del: ({ children }) => {
- const key = children[0] as string;
- if (typeof key !== 'string') return;
- if (key.startsWith('pub') && key.length > 50 && key.length < 100) {
- return ;
- }
- if (key.startsWith('tag')) {
- return ;
- }
- if (key.startsWith('boost')) {
- return ;
- }
- if (key.startsWith('lnbc')) {
- return ;
- }
- },
- }}
- disallowedElements={['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'pre', 'code']}
- unwrapDisallowed={true}
- >
+
{richContent.parsed}
-
- {richContent.images.length > 0 && }
- {richContent.videos.length > 0 && }
- {richContent.links.length > 0 && }
- {richContent.notes.length > 0 &&
- richContent.notes.map((note: string) => )}
+
+ {richContent.images.length ? : null}
+ {richContent.videos.length ? : null}
+ {richContent.links.length ? : null}
+ {richContent.notes.map((note: string) => (
+
+ ))}
);
}
diff --git a/src/shared/user.tsx b/src/shared/user.tsx
index f9df835e..7371be2b 100644
--- a/src/shared/user.tsx
+++ b/src/shared/user.tsx
@@ -440,9 +440,9 @@ export const User = memo(function User({
if (status === 'pending') {
return (
-
+
-
diff --git a/src/utils/parser.ts b/src/utils/parser.ts
deleted file mode 100644
index ffafdd24..00000000
--- a/src/utils/parser.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { nip19 } from 'nostr-tools';
-import { AddressPointer, EventPointer, ProfilePointer } from 'nostr-tools/lib/nip19';
-
-import { RichContent } from '@utils/types';
-
-function isURL(string: string) {
- try {
- const url = new URL(string);
- if (url.protocol.length > 0) {
- if (url.protocol === 'https:' || url.protocol === 'http:') {
- return true;
- } else {
- return false;
- }
- }
- return true;
- } catch (e) {
- return false;
- }
-}
-
-export function parser(eventContent: string) {
- if (!eventContent) return '';
-
- try {
- const content: RichContent = {
- parsed: null,
- images: [],
- videos: [],
- links: [],
- notes: [],
- };
-
- const parse = eventContent.split(/\s/gm).map((word) => {
- // url
- if (isURL(word)) {
- const url = new URL(word);
- url.search = '';
-
- if (url.pathname.match(/\.(jpg|jpeg|gif|png|webp|avif)$/)) {
- // image url
- content.images.push(word);
- // remove url from original content
- return word.replace(word, '');
- }
-
- if (url.pathname.match(/\.(mp4|mov|webm|wmv|flv|mts|avi|ogv|mkv|mp3|m3u8)$/)) {
- // video
- content.videos.push(word);
- // remove url from original content
- return word.replace(word, '');
- }
-
- content.links.push(url.toString());
- }
-
- // hashtag
- if (word.startsWith('#') && word.length > 1) {
- return word.replace(word, `~tag-${word}~`);
- }
-
- // boost
- if (word.startsWith('$prism') && word.length > 1) {
- return word.replace(word, `~boost-${word}~`);
- }
-
- // nostr account references (depreciated)
- if (word.startsWith('@npub1')) {
- const npub = word.replace('@', '').replace(/[^a-zA-Z0-9 ]/g, '');
- return word.replace(word, `~pub-${nip19.decode(npub).data}~`);
- }
-
- // nostr account references
- if (word.startsWith('nostr:npub1') || word.startsWith('npub1')) {
- const npub = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- return word.replace(word, `~pub-${nip19.decode(npub).data}~`);
- }
-
- // nostr profile references
- if (word.startsWith('nostr:nprofile1') || word.startsWith('nprofile1')) {
- const nprofile = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- const decoded = nip19.decode(nprofile).data as ProfilePointer;
- return word.replace(word, `~pub-${decoded.pubkey}~`);
- }
-
- // nostr account references
- if (word.startsWith('nostr:note1') || word.startsWith('note1')) {
- const note = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- content.notes.push(nip19.decode(note).data as string);
- return word.replace(word, '');
- }
-
- // nostr event references
- if (word.startsWith('nostr:nevent1') || word.startsWith('nevent1')) {
- const nevent = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- const decoded = nip19.decode(nevent).data as EventPointer;
- content.notes.push(decoded.id);
- return word.replace(word, '');
- }
-
- // nostr address references
- if (word.startsWith('nostr:naddr1') || word.startsWith('naddr1')) {
- const naddr = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- const decoded = nip19.decode(naddr).data as AddressPointer;
- return word.replace(word, `~pub-${decoded.pubkey}~`);
- }
-
- // lightning invoice
- if (word.startsWith('lnbc') && word.length > 60) {
- return word.replace(word, `~lnbc-${word}~`);
- }
-
- // normal word
- return word;
- });
-
- // update content with parsed version
- content.parsed = parse.join(' ');
-
- return content;
- } catch (e) {
- console.error('cannot parse content, error: ', e);
- }
-}
diff --git a/src/utils/parser.tsx b/src/utils/parser.tsx
new file mode 100644
index 00000000..2441dcf7
--- /dev/null
+++ b/src/utils/parser.tsx
@@ -0,0 +1,173 @@
+import { nip19 } from 'nostr-tools';
+import {
+ AddressPointer,
+ EventPointer,
+ ProfilePointer,
+} from 'nostr-tools/lib/types/nip19';
+import { Link } from 'react-router-dom';
+import reactStringReplace from 'react-string-replace';
+
+import { Boost, Hashtag, Invoice, MentionUser } from '@shared/notes';
+
+import { RichContent } from '@utils/types';
+
+function isURL(string: string) {
+ try {
+ const url = new URL(string);
+ if (url.protocol.length > 0) {
+ if (url.protocol === 'https:' || url.protocol === 'http:') {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+export function parser(eventContent: string) {
+ const content: RichContent = {
+ parsed: null,
+ images: [],
+ videos: [],
+ links: [],
+ notes: [],
+ };
+
+ const parsed = eventContent.split(/\s/gm).map((word) => {
+ // nostr note references
+ if (word.startsWith('nostr:note1') || word.startsWith('note1')) {
+ const note = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ content.notes.push(nip19.decode(note).data as string);
+ return word.replace(word, ' ');
+ }
+
+ // nostr event references
+ if (word.startsWith('nostr:nevent1') || word.startsWith('nevent1')) {
+ const nevent = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ const decoded = nip19.decode(nevent).data as EventPointer;
+ content.notes.push(decoded.id);
+ return word.replace(word, ' ');
+ }
+
+ // url
+ if (isURL(word)) {
+ const url = new URL(word);
+ url.search = '';
+
+ if (url.pathname.match(/\.(jpg|jpeg|gif|png|webp|avif)$/)) {
+ // image url
+ content.images.push(word);
+ // remove url from original content
+ return word.replace(word, ' ');
+ }
+
+ if (url.pathname.match(/\.(mp4|mov|webm|wmv|flv|mts|avi|ogv|mkv|mp3|m3u8)$/)) {
+ // video url
+ content.videos.push(word);
+ // remove url from original content
+ return word.replace(word, ' ');
+ }
+
+ // normal url
+ if (content.links.length < 1) {
+ content.links.push(url.toString());
+ return word.replace(word, ' ');
+ } else {
+ return reactStringReplace(word, word, (match, i) => (
+ <>
+ {' '}
+
+ {word}
+ {' '}
+ >
+ ));
+ }
+ }
+
+ // hashtag
+ if (word.startsWith('#') && word.length > 1) {
+ return reactStringReplace(word, word, (match, i) => (
+ <>
+ {' '}
+
{' '}
+ >
+ ));
+ }
+
+ // boost
+ if (word.startsWith('$prism') && word.length > 1) {
+ return reactStringReplace(word, word, (match, i) => (
+ <>
+ {' '}
+
{' '}
+ >
+ ));
+ }
+
+ // nostr account references (depreciated)
+ if (word.startsWith('@npub1')) {
+ const npub = word.replace('@', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ return reactStringReplace(word, word, (match, i) => (
+ <>
+ {' '}
+
{' '}
+ >
+ ));
+ }
+
+ // nostr account references
+ if (word.startsWith('nostr:npub1') || word.startsWith('npub1')) {
+ const npub = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ return reactStringReplace(word, word, (match, i) => (
+ <>
+ {' '}
+
{' '}
+ >
+ ));
+ }
+
+ // nostr profile references
+ if (word.startsWith('nostr:nprofile1') || word.startsWith('nprofile1')) {
+ const nprofile = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ const decoded = nip19.decode(nprofile).data as ProfilePointer;
+ return reactStringReplace(word, word, (match, i) => (
+ <>
+ {' '}
+
{' '}
+ >
+ ));
+ }
+
+ // nostr address references
+ if (word.startsWith('nostr:naddr1') || word.startsWith('naddr1')) {
+ const naddr = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ const decoded = nip19.decode(naddr).data as AddressPointer;
+ return reactStringReplace(word, word, (match, i) => (
+ <>
+ {' '}
+
{' '}
+ >
+ ));
+ }
+
+ // lightning invoice
+ if (word.startsWith('lnbc') && word.length > 60) {
+ return reactStringReplace(word, word, (match, i) => (
+ <>
+ {' '}
+
{' '}
+ >
+ ));
+ }
+
+ // normal word
+ return ' ' + word + ' ';
+ });
+
+ // update content with parsed version
+ content.parsed = parsed;
+ return content;
+}
diff --git a/src/utils/types.d.ts b/src/utils/types.d.ts
index 9c42afa2..a9e13585 100644
--- a/src/utils/types.d.ts
+++ b/src/utils/types.d.ts
@@ -1,8 +1,9 @@
import { type NDKEvent, type NDKUserProfile } from '@nostr-dev-kit/ndk';
import { type Response } from '@tauri-apps/plugin-http';
+import { ReactNode } from 'react';
export interface RichContent {
- parsed: string;
+ parsed: string | ReactNode[];
images: string[];
videos: string[];
links: string[];
From 0b25a4a04b3b2fe144147d260edb8d930cc445b3 Mon Sep 17 00:00:00 2001
From: reya
Date: Sun, 29 Oct 2023 11:07:05 +0700
Subject: [PATCH 06/14] add ndk cache tauri
---
.../20231028083224_add_ndk_cache_table.sql | 27 ++++
src-tauri/src/main.rs | 20 ++-
src/libs/ndk/cache.ts | 96 +++++---------
src/libs/ndk/instance.ts | 4 +-
src/libs/storage/instance.ts | 119 +++++++++++++++++-
src/shared/user.tsx | 2 +-
src/shared/widgets/eventLoader.tsx | 15 ++-
src/shared/widgets/local/notification.tsx | 7 +-
src/utils/hooks/useEvent.ts | 14 +--
src/utils/hooks/useNostr.ts | 3 +-
src/utils/hooks/useProfile.ts | 2 -
src/utils/types.d.ts | 24 ++++
12 files changed, 236 insertions(+), 97 deletions(-)
create mode 100644 src-tauri/migrations/20231028083224_add_ndk_cache_table.sql
diff --git a/src-tauri/migrations/20231028083224_add_ndk_cache_table.sql b/src-tauri/migrations/20231028083224_add_ndk_cache_table.sql
new file mode 100644
index 00000000..d1440e3d
--- /dev/null
+++ b/src-tauri/migrations/20231028083224_add_ndk_cache_table.sql
@@ -0,0 +1,27 @@
+-- Add migration script here
+CREATE TABLE
+ ndk_users (
+ pubkey TEXT NOT NULL PRIMARY KEY,
+ profile TEXT,
+ createdAt NUMBER
+ );
+
+CREATE TABLE
+ ndk_events (
+ id TEXT NOT NULL PRIMARY KEY,
+ pubkey TEXT,
+ content TEXT,
+ kind NUMBER,
+ createdAt NUMBER,
+ relay TEXT,
+ event TEXT
+ );
+
+CREATE TABLE
+ ndk_eventtags (
+ id TEXT NOT NULL PRIMARY KEY,
+ eventId TEXT,
+ tag TEXT,
+ value TEXT,
+ tagValue TEXT
+ );
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index d59d0edc..34938251 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -128,12 +128,20 @@ fn main() {
tauri_plugin_sql::Builder::default()
.add_migrations(
"sqlite:lume_v2.db",
- vec![Migration {
- version: 20230418013219,
- description: "initial data",
- sql: include_str!("../migrations/20230418013219_initial_data.sql"),
- kind: MigrationKind::Up,
- }],
+ vec![
+ Migration {
+ version: 20230418013219,
+ description: "initial data",
+ sql: include_str!("../migrations/20230418013219_initial_data.sql"),
+ kind: MigrationKind::Up,
+ },
+ Migration {
+ version: 20231028083224,
+ description: "add ndk cache table",
+ sql: include_str!("../migrations/20231028083224_add_ndk_cache_table.sql"),
+ kind: MigrationKind::Up,
+ },
+ ],
)
.build(),
)
diff --git a/src/libs/ndk/cache.ts b/src/libs/ndk/cache.ts
index 782c0b1a..b5c2450f 100644
--- a/src/libs/ndk/cache.ts
+++ b/src/libs/ndk/cache.ts
@@ -5,60 +5,30 @@ import type {
NDKFilter,
NDKSubscription,
NDKUserProfile,
+ NostrEvent,
} from '@nostr-dev-kit/ndk';
-import _debug from 'debug';
+import { LRUCache } from 'lru-cache';
import { matchFilter } from 'nostr-tools';
-import { LRUCache } from 'typescript-lru-cache';
-import { createDatabase, db } from './db';
+import { LumeStorage } from '@libs/storage/instance';
-export { db } from './db';
-
-interface NDKCacheAdapterDexieOptions {
- /**
- * The name of the database to use
- */
- dbName?: string;
-
- /**
- * Debug instance to use for logging
- */
- debug?: debug.IDebugger;
-
- /**
- * The number of seconds to store events in Dexie (IndexedDB) before they expire
- * Defaults to 3600 seconds (1 hour)
- */
- expirationTime?: number;
-
- /**
- * Number of profiles to keep in an LRU cache
- */
- profileCacheSize?: number | 'disabled';
-}
-
-export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
- public debug: debug.Debugger;
- private expirationTime;
- readonly locking;
+export default class NDKCacheAdapterTauri implements NDKCacheAdapter {
+ public db: LumeStorage;
public profiles?: LRUCache;
private dirtyProfiles: Set = new Set();
+ readonly locking: boolean;
- constructor(opts: NDKCacheAdapterDexieOptions = {}) {
- createDatabase(opts.dbName || 'ndk');
- this.debug = opts.debug || _debug('ndk:dexie-adapter');
+ constructor(db: LumeStorage) {
+ this.db = db;
this.locking = true;
- this.expirationTime = opts.expirationTime || 3600;
- if (opts.profileCacheSize !== 'disabled') {
- this.profiles = new LRUCache({
- maxSize: opts.profileCacheSize || 100000,
- });
+ this.profiles = new LRUCache({
+ max: 100000,
+ });
- setInterval(() => {
- this.dumpProfiles();
- }, 1000 * 10);
- }
+ setInterval(() => {
+ this.dumpProfiles();
+ }, 1000 * 10);
}
public async query(subscription: NDKSubscription): Promise {
@@ -73,9 +43,9 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
let profile = this.profiles.get(pubkey);
if (!profile) {
- const user = await db.users.get({ pubkey });
+ const user = await this.db.getCacheUser(pubkey);
if (user) {
- profile = user.profile;
+ profile = user.profile as NDKUserProfile;
this.profiles.set(pubkey, profile);
}
}
@@ -126,7 +96,7 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
if (event.isParamReplaceable()) {
const replaceableId = `${event.kind}:${event.pubkey}:${event.tagId()}`;
- const existingEvent = await db.events.where({ id: replaceableId }).first();
+ const existingEvent = await this.db.getCacheEvent(replaceableId);
if (
existingEvent &&
event.created_at &&
@@ -137,7 +107,7 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
}
if (addEvent) {
- db.events.put({
+ this.db.setCacheEvent({
id: event.tagId(),
pubkey: event.pubkey,
content: event.content,
@@ -153,7 +123,7 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
event.tags.forEach((tag) => {
if (tag[0].length !== 1) return;
- db.eventTags.put({
+ this.db.setCacheEventTag({
id: `${event.id}:${tag[0]}:${tag[1]}`,
eventId: event.id,
tag: tag[0],
@@ -182,9 +152,9 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
if (hasAllKeys && filter.authors) {
for (const pubkey of filter.authors) {
- const events = await db.events.where({ pubkey }).toArray();
+ const events = await this.db.getCacheEventsByPubkey(pubkey);
for (const event of events) {
- let rawEvent;
+ let rawEvent: NostrEvent;
try {
rawEvent = JSON.parse(event.event);
} catch (e) {
@@ -218,9 +188,9 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
if (hasAllKeys && filter.kinds) {
for (const kind of filter.kinds) {
- const events = await db.events.where({ kind }).toArray();
+ const events = await this.db.getCacheEventsByKind(kind);
for (const event of events) {
- let rawEvent;
+ let rawEvent: NostrEvent;
try {
rawEvent = JSON.parse(event.event);
} catch (e) {
@@ -252,10 +222,10 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
if (hasAllKeys && filter.ids) {
for (const id of filter.ids) {
- const event = await db.events.where({ id }).first();
+ const event = await this.db.getCacheEvent(id);
if (!event) continue;
- let rawEvent;
+ let rawEvent: NostrEvent;
try {
rawEvent = JSON.parse(event.event);
} catch (e) {
@@ -295,10 +265,10 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
for (const author of filter.authors) {
for (const dTag of filter['#d']) {
const replaceableId = `${kind}:${author}:${dTag}`;
- const event = await db.events.where({ id: replaceableId }).first();
+ const event = await this.db.getCacheEvent(replaceableId);
if (!event) continue;
- let rawEvent;
+ let rawEvent: NostrEvent;
try {
rawEvent = JSON.parse(event.event);
} catch (e) {
@@ -335,10 +305,10 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
if (filter.kinds && filter.authors) {
for (const kind of filter.kinds) {
for (const author of filter.authors) {
- const events = await db.events.where({ kind, pubkey: author }).toArray();
+ const events = await this.db.getCacheEventsByKindAndAuthor(kind, author);
for (const event of events) {
- let rawEvent;
+ let rawEvent: NostrEvent;
try {
rawEvent = JSON.parse(event.event);
} catch (e) {
@@ -400,12 +370,12 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
}
for (const value of values) {
- const eventTags = await db.eventTags.where({ tagValue: tag + value }).toArray();
+ const eventTags = await this.db.getCacheEventTagsByTagValue(tag + value);
if (!eventTags.length) continue;
const eventIds = eventTags.map((t) => t.eventId);
- const events = await db.events.where('id').anyOf(eventIds).toArray();
+ const events = await this.db.getCacheEvents(eventIds);
for (const event of events) {
let rawEvent;
try {
@@ -441,13 +411,13 @@ export default class NDKCacheAdapterDexie implements NDKCacheAdapter {
profiles.push({
pubkey,
- profile,
+ profile: JSON.stringify(profile),
createdAt: Date.now(),
});
}
if (profiles.length) {
- await db.users.bulkPut(profiles);
+ await this.db.setCacheProfiles(profiles);
}
this.dirtyProfiles.clear();
diff --git a/src/libs/ndk/instance.ts b/src/libs/ndk/instance.ts
index 1fc844c9..56d5f0e4 100644
--- a/src/libs/ndk/instance.ts
+++ b/src/libs/ndk/instance.ts
@@ -1,11 +1,11 @@
import NDK, { NDKNip46Signer, NDKPrivateKeySigner } from '@nostr-dev-kit/ndk';
-import NDKCacheAdapterDexie from '@nostr-dev-kit/ndk-cache-dexie';
import { ndkAdapter } from '@nostr-fetch/adapter-ndk';
import { message } from '@tauri-apps/plugin-dialog';
import { fetch } from '@tauri-apps/plugin-http';
import { NostrFetcher } from 'nostr-fetch';
import { useEffect, useMemo, useState } from 'react';
+import NDKCacheAdapterTauri from '@libs/ndk/cache';
import { useStorage } from '@libs/storage/provider';
export const NDKInstance = () => {
@@ -77,7 +77,7 @@ export const NDKInstance = () => {
const outboxSetting = await db.getSettingValue('outbox');
const explicitRelayUrls = await getExplicitRelays();
- const dexieAdapter = new NDKCacheAdapterDexie({ dbName: 'lume_ndkcache' });
+ const dexieAdapter = new NDKCacheAdapterTauri(db);
const instance = new NDK({
explicitRelayUrls,
cacheAdapter: dexieAdapter,
diff --git a/src/libs/storage/instance.ts b/src/libs/storage/instance.ts
index cfe84e83..d973222f 100644
--- a/src/libs/storage/instance.ts
+++ b/src/libs/storage/instance.ts
@@ -6,7 +6,15 @@ import Database from '@tauri-apps/plugin-sql';
import { FULL_RELAYS } from '@stores/constants';
import { rawEvent } from '@utils/transform';
-import { Account, DBEvent, Relays, Widget } from '@utils/types';
+import type {
+ Account,
+ DBEvent,
+ NDKCacheEvent,
+ NDKCacheEventTag,
+ NDKCacheUser,
+ Relays,
+ Widget,
+} from '@utils/types';
export class LumeStorage {
public db: Database;
@@ -37,6 +45,115 @@ export class LumeStorage {
return await invoke('secure_remove', { key });
}
+ public async getCacheUser(pubkey: string) {
+ const results: Array = await this.db.select(
+ 'SELECT * FROM ndk_users WHERE pubkey = $1 ORDER BY pubkey DESC LIMIT 1;',
+ [pubkey]
+ );
+
+ if (results.length < 1) return null;
+
+ if (typeof results[0].profile === 'string')
+ results[0].profile = JSON.parse(results[0].profile);
+
+ return results[0];
+ }
+
+ public async getCacheEvent(id: string) {
+ const results: Array = await this.db.select(
+ 'SELECT * FROM ndk_events WHERE id = $1 ORDER BY id DESC LIMIT 1;',
+ [id]
+ );
+
+ if (results.length < 1) return null;
+ return results[0];
+ }
+
+ public async getCacheEvents(ids: string[]) {
+ const idsArr = `'${ids.join("','")}'`;
+
+ const results: Array = await this.db.select(
+ `SELECT * FROM ndk_events WHERE id IN (${idsArr}) ORDER BY id;`
+ );
+
+ if (results.length < 1) return [];
+ return results;
+ }
+
+ public async getCacheEventsByPubkey(pubkey: string) {
+ const results: Array = await this.db.select(
+ 'SELECT * FROM ndk_events WHERE pubkey = $1 ORDER BY id;',
+ [pubkey]
+ );
+
+ if (results.length < 1) return [];
+ return results;
+ }
+
+ public async getCacheEventsByKind(kind: number) {
+ const results: Array = await this.db.select(
+ 'SELECT * FROM ndk_events WHERE kind = $1 ORDER BY id;',
+ [kind]
+ );
+
+ if (results.length < 1) return [];
+ return results;
+ }
+
+ public async getCacheEventsByKindAndAuthor(kind: number, pubkey: string) {
+ const results: Array = await this.db.select(
+ 'SELECT * FROM ndk_events WHERE kind = $1 AND pubkey = $2 ORDER BY id;',
+ [kind, pubkey]
+ );
+
+ if (results.length < 1) return [];
+ return results;
+ }
+
+ public async getCacheEventTagsByTagValue(tagValue: string) {
+ const results: Array = await this.db.select(
+ 'SELECT * FROM ndk_eventtags WHERE tagValue = $1 ORDER BY id;',
+ [tagValue]
+ );
+
+ if (results.length < 1) return [];
+ return results;
+ }
+
+ public async setCacheEvent({
+ id,
+ pubkey,
+ content,
+ kind,
+ createdAt,
+ relay,
+ event,
+ }: NDKCacheEvent) {
+ return await this.db.execute(
+ 'INSERT OR IGNORE INTO ndk_events (id, pubkey, content, kind, createdAt, relay, event) VALUES ($1, $2, $3, $4, $5, $6, $7);',
+ [id, pubkey, content, kind, createdAt, relay, event]
+ );
+ }
+
+ public async setCacheEventTag({ id, eventId, tag, value, tagValue }: NDKCacheEventTag) {
+ return await this.db.execute(
+ 'INSERT OR IGNORE INTO ndk_eventtags (id, eventId, tag, value, tagValue) VALUES ($1, $2, $3, $4, $5);',
+ [id, eventId, tag, value, tagValue]
+ );
+ }
+
+ public async setCacheProfiles(profiles: Array) {
+ return await Promise.all(
+ profiles.map(
+ async (profile) =>
+ await this.db.execute(
+ 'INSERT OR IGNORE INTO ndk_users (pubkey, profile, createdAt) VALUES ($1, $2, $3);',
+ [profile.pubkey, profile.profile, profile.createdAt]
+ )
+ )
+ );
+ }
+
public async checkAccount() {
const result: Array<{ total: string }> = await this.db.select(
'SELECT COUNT(*) AS "total" FROM accounts;'
diff --git a/src/shared/user.tsx b/src/shared/user.tsx
index 7371be2b..02449461 100644
--- a/src/shared/user.tsx
+++ b/src/shared/user.tsx
@@ -189,7 +189,7 @@ export const User = memo(function User({
return (
-
+
diff --git a/src/shared/widgets/eventLoader.tsx b/src/shared/widgets/eventLoader.tsx
index 76b6e089..3917af3a 100644
--- a/src/shared/widgets/eventLoader.tsx
+++ b/src/shared/widgets/eventLoader.tsx
@@ -19,19 +19,18 @@ export function EventLoader({ firstTime }: { firstTime: boolean }) {
useEffect(() => {
async function getEvents() {
const events = await getAllEventsSinceLastLogin();
- console.log('total new events has found: ', events.data.length);
+ console.log('total new events has found: ', events.length);
- const promises = await Promise.all(
- events.data.map(async (event) => await db.createEvent(event))
- );
-
- if (promises) {
+ if (events) {
setProgress(100);
setIsFetched();
+
// invalidate queries
- queryClient.invalidateQueries({
- queryKey: ['local-network-widget']
+ await queryClient.invalidateQueries({
+ queryKey: ['local-network-widget'],
});
+
+ // update last login time, use for next fetch
await db.updateLastLogin();
}
}
diff --git a/src/shared/widgets/local/notification.tsx b/src/shared/widgets/local/notification.tsx
index b0134c56..ce969d37 100644
--- a/src/shared/widgets/local/notification.tsx
+++ b/src/shared/widgets/local/notification.tsx
@@ -10,6 +10,7 @@ import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
import { useActivities } from '@stores/activities';
+import { useWidgets } from '@stores/widgets';
import { useNostr } from '@utils/hooks/useNostr';
import { Widget } from '@utils/types';
@@ -23,6 +24,8 @@ export function LocalNotificationWidget({ params }: { params: Widget }) {
state.setActivities,
]);
+ const isFetched = useWidgets((state) => state.isFetched);
+
const renderEvent = useCallback(
(event: NDKEvent) => {
if (event.pubkey === db.account.pubkey) return null;
@@ -37,8 +40,8 @@ export function LocalNotificationWidget({ params }: { params: Widget }) {
setActivities(events);
}
- getActivities();
- }, []);
+ if (isFetched) getActivities();
+ }, [isFetched]);
return (
diff --git a/src/utils/hooks/useEvent.ts b/src/utils/hooks/useEvent.ts
index 31cfc918..b4b00dab 100644
--- a/src/utils/hooks/useEvent.ts
+++ b/src/utils/hooks/useEvent.ts
@@ -3,14 +3,12 @@ import { useQuery } from '@tanstack/react-query';
import { AddressPointer } from 'nostr-tools/lib/types/nip19';
import { useNDK } from '@libs/ndk/provider';
-import { useStorage } from '@libs/storage/provider';
export function useEvent(
id: undefined | string,
naddr?: undefined | AddressPointer,
embed?: undefined | string
) {
- const { db } = useStorage();
const { ndk } = useNDK();
const { status, data } = useQuery({
queryKey: ['event', id],
@@ -33,20 +31,16 @@ export function useEvent(
return event;
}
- // get event from db
- const dbEvent = await db.getEventByID(id);
- if (dbEvent) return dbEvent;
-
- // get event from relay if event in db not present
+ // get event from relay
const event = await ndk.fetchEvent(id);
if (!event) return Promise.reject(new Error('event not found'));
- await db.createEvent(event);
-
return event;
},
- enabled: !!ndk,
refetchOnWindowFocus: false,
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ staleTime: Infinity,
});
return { status, data };
diff --git a/src/utils/hooks/useNostr.ts b/src/utils/hooks/useNostr.ts
index a02b996e..ed44e08e 100644
--- a/src/utils/hooks/useNostr.ts
+++ b/src/utils/hooks/useNostr.ts
@@ -186,10 +186,9 @@ export function useNostr() {
{ since: since }
)) as unknown as NDKEvent[];
- return { status: 'ok', message: 'fetch completed', data: events };
+ return events;
} catch (e) {
console.error('prefetch events failed, error: ', e);
- return { status: 'failed', message: e };
}
};
diff --git a/src/utils/hooks/useProfile.ts b/src/utils/hooks/useProfile.ts
index 6f73237e..498d0897 100644
--- a/src/utils/hooks/useProfile.ts
+++ b/src/utils/hooks/useProfile.ts
@@ -22,12 +22,10 @@ export function useProfile(pubkey: string, embed?: string) {
return await user.fetchProfile();
},
- enabled: !!ndk,
staleTime: Infinity,
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
- retry: 2,
});
return { status, user, error };
diff --git a/src/utils/types.d.ts b/src/utils/types.d.ts
index a9e13585..ba8794ae 100644
--- a/src/utils/types.d.ts
+++ b/src/utils/types.d.ts
@@ -115,3 +115,27 @@ export interface Resources {
title: string;
data: Array;
}
+
+export interface NDKCacheUser {
+ pubkey: string;
+ profile: string | NDKUserProfile;
+ createdAt: number;
+}
+
+export interface NDKCacheEvent {
+ id: string;
+ pubkey: string;
+ content: string;
+ kind: number;
+ createdAt: number;
+ relay: string;
+ event: string;
+}
+
+export interface NDKCacheEventTag {
+ id: string;
+ eventId: string;
+ tag: string;
+ value: string;
+ tagValue: string;
+}
From e7738fb128f17c0ea1d04fb6113551b0ada20e5b Mon Sep 17 00:00:00 2001
From: reya
Date: Mon, 30 Oct 2023 16:29:49 +0700
Subject: [PATCH 07/14] refactor newsfeed widget
---
package.json | 2 +
pnpm-lock.yaml | 36 ++++
src/app/space/index.tsx | 4 +-
src/main.jsx | 20 +-
src/shared/notes/kinds/repost.tsx | 30 +--
src/shared/notes/skeleton.tsx | 14 +-
src/shared/notes/wrapper.tsx | 26 ++-
src/shared/widgets/eventLoader.tsx | 78 --------
src/shared/widgets/index.ts | 3 +-
src/shared/widgets/local/follows.tsx | 2 -
src/shared/widgets/local/network.tsx | 184 -----------------
src/shared/widgets/newsfeed.tsx | 187 ++++++++++++++++++
.../widgets/{local => }/notification.tsx | 7 +-
src/stores/widgets.ts | 2 +
vite.config.ts | 8 +-
15 files changed, 277 insertions(+), 326 deletions(-)
delete mode 100644 src/shared/widgets/eventLoader.tsx
delete mode 100644 src/shared/widgets/local/network.tsx
create mode 100644 src/shared/widgets/newsfeed.tsx
rename src/shared/widgets/{local => }/notification.tsx (93%)
diff --git a/package.json b/package.json
index 10d8edcb..0b7e1437 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,9 @@
"@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-toolbar": "^1.0.4",
"@radix-ui/react-tooltip": "^1.0.7",
+ "@tanstack/query-sync-storage-persister": "^5.4.3",
"@tanstack/react-query": "^5.0.5",
+ "@tanstack/react-query-persist-client": "^5.4.3",
"@tauri-apps/api": "^2.0.0-alpha.9",
"@tauri-apps/cli": "^2.0.0-alpha.16",
"@tauri-apps/plugin-clipboard-manager": "^2.0.0-alpha.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 11781526..b3f5fdfd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -47,9 +47,15 @@ dependencies:
'@radix-ui/react-tooltip':
specifier: ^1.0.7
version: 1.0.7(@types/react-dom@18.2.14)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@tanstack/query-sync-storage-persister':
+ specifier: ^5.4.3
+ version: 5.4.3
'@tanstack/react-query':
specifier: ^5.0.5
version: 5.0.5(react-dom@18.2.0)(react@18.2.0)
+ '@tanstack/react-query-persist-client':
+ specifier: ^5.4.3
+ version: 5.4.3(@tanstack/react-query@5.0.5)(react-dom@18.2.0)(react@18.2.0)
'@tauri-apps/api':
specifier: ^2.0.0-alpha.9
version: 2.0.0-alpha.9
@@ -2096,6 +2102,36 @@ packages:
resolution: {integrity: sha512-MThCETMkHDHTnFZHp71L+SqTtD5d6XHftFCVR1xRJdWM3qGrlQ2VCXaj0SKVcyJej2e1Opa2c7iknu1llxCDNQ==}
dev: false
+ /@tanstack/query-core@5.4.3:
+ resolution: {integrity: sha512-fnI9ORjcuLGm1sNrKatKIosRQUpuqcD4SV7RqRSVmj8JSicX2aoMyKryHEBpVQvf6N4PaBVgBxQomjsbsGPssQ==}
+ dev: false
+
+ /@tanstack/query-persist-client-core@5.4.3:
+ resolution: {integrity: sha512-0MZazQMVXmmVyf/ce2ug0CoSkT02VA4ZhkT3F1/tIINxGuH2KlhKWQc9puqJzTazUpXfRdBK9+lMPqpkA16FEQ==}
+ dependencies:
+ '@tanstack/query-core': 5.4.3
+ dev: false
+
+ /@tanstack/query-sync-storage-persister@5.4.3:
+ resolution: {integrity: sha512-53e2O8lLaeBZ26myG6zQt5Ix16XmkcqJrsrSP2ZZzP5Ii6XwBq061djaEMTNbWYenYpmDqQIxAye/J6zQZ0QiA==}
+ dependencies:
+ '@tanstack/query-core': 5.4.3
+ '@tanstack/query-persist-client-core': 5.4.3
+ dev: false
+
+ /@tanstack/react-query-persist-client@5.4.3(@tanstack/react-query@5.0.5)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-gpusG6IG6rnmdRT3onSjmRVG60K3BlsdUQifBVeLdi4uen1rvRAiB5a7jr4hFVMItzS9C4jBxJMWt/DmZpy6Ow==}
+ peerDependencies:
+ '@tanstack/react-query': ^5.4.3
+ react: ^18.0.0
+ react-dom: ^18.0.0
+ dependencies:
+ '@tanstack/query-persist-client-core': 5.4.3
+ '@tanstack/react-query': 5.0.5(react-dom@18.2.0)(react@18.2.0)
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
/@tanstack/react-query@5.0.5(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-ZG0Q4HZ0iuI8mWiZ2/MdVYPHbrmAVhMn7+gLOkxJh6zLIgCL4luSZlohzN5Xt4MjxfxxWioO1nemwpudaTsmQg==}
peerDependencies:
diff --git a/src/app/space/index.tsx b/src/app/space/index.tsx
index 97c1557f..5ffee4d6 100644
--- a/src/app/space/index.tsx
+++ b/src/app/space/index.tsx
@@ -16,10 +16,10 @@ import {
LocalFeedsWidget,
LocalFilesWidget,
LocalFollowsWidget,
- LocalNetworkWidget,
LocalNotificationWidget,
LocalThreadWidget,
LocalUserWidget,
+ NewsfeedWidget,
TrendingAccountsWidget,
TrendingNotesWidget,
XfeedsWidget,
@@ -44,7 +44,7 @@ export function SpaceScreen() {
if (!widget) return;
switch (widget.kind) {
case WidgetKinds.local.network:
- return ;
+ return ;
case WidgetKinds.local.follows:
return ;
case WidgetKinds.local.feeds:
diff --git a/src/main.jsx b/src/main.jsx
index 1e152d8e..88fe7483 100644
--- a/src/main.jsx
+++ b/src/main.jsx
@@ -1,4 +1,6 @@
-import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
+import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister';
+import { QueryClient } from '@tanstack/react-query';
+import { PersistQueryClientProvider } from '@tanstack/react-query-persist-client';
import { createRoot } from 'react-dom/client';
import { Toaster } from 'sonner';
@@ -7,18 +9,28 @@ import { StorageProvider } from '@libs/storage/provider';
import App from './app';
-const queryClient = new QueryClient();
+const queryClient = new QueryClient({
+ defaultOptions: {
+ queries: {
+ gcTime: 1000 * 60 * 60 * 24, // 24 hours
+ },
+ },
+});
+
+const persister = createSyncStoragePersister({
+ storage: window.localStorage,
+});
const container = document.getElementById('root');
const root = createRoot(container);
root.render(
-
+
-
+
);
diff --git a/src/shared/notes/kinds/repost.tsx b/src/shared/notes/kinds/repost.tsx
index fd095bfb..45645ef7 100644
--- a/src/shared/notes/kinds/repost.tsx
+++ b/src/shared/notes/kinds/repost.tsx
@@ -2,7 +2,6 @@ import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
import { useQuery } from '@tanstack/react-query';
import { nip19 } from 'nostr-tools';
import { memo, useCallback } from 'react';
-import { twMerge } from 'tailwind-merge';
import { useNDK } from '@libs/ndk/provider';
@@ -17,13 +16,7 @@ import {
} from '@shared/notes';
import { User } from '@shared/user';
-export function Repost({
- event,
- lighter = false,
-}: {
- event: NDKEvent;
- lighter?: boolean;
-}) {
+export function Repost({ event }: { event: NDKEvent }) {
const embedEvent: null | NDKEvent =
event.content.length > 0 ? JSON.parse(event.content) : null;
@@ -59,12 +52,7 @@ export function Repost({
if (embedEvent) {
return (
-
+
-
+
@@ -133,12 +116,7 @@ export function Repost({
return (
-
+
diff --git a/src/shared/notes/skeleton.tsx b/src/shared/notes/skeleton.tsx
index a0385c2b..6fdde6ce 100644
--- a/src/shared/notes/skeleton.tsx
+++ b/src/shared/notes/skeleton.tsx
@@ -2,17 +2,17 @@ export function NoteSkeleton() {
return (
-
+
diff --git a/src/shared/notes/wrapper.tsx b/src/shared/notes/wrapper.tsx
index 27d6d5b5..464e4eb3 100644
--- a/src/shared/notes/wrapper.tsx
+++ b/src/shared/notes/wrapper.tsx
@@ -1,6 +1,5 @@
import { NDKEvent } from '@nostr-dev-kit/ndk';
-import { ReactElement, cloneElement } from 'react';
-import { twMerge } from 'tailwind-merge';
+import { ReactElement, cloneElement, useMemo } from 'react';
import { ChildNote, NoteActions } from '@shared/notes';
import { User } from '@shared/user';
@@ -8,25 +7,22 @@ import { User } from '@shared/user';
export function NoteWrapper({
event,
children,
- root,
- reply,
- lighter = false,
}: {
event: NDKEvent;
children: ReactElement;
- repost?: boolean;
- root?: string;
- reply?: string;
- lighter?: boolean;
}) {
+ const root = useMemo(() => {
+ if (event.tags?.[0]?.[0] === 'e' && !event.tags?.[0]?.[3]) {
+ return event.tags[0][1];
+ }
+ return event.tags.find((el) => el[3] === 'root')?.[1];
+ }, [event]);
+
+ const reply = useMemo(() => event.tags.find((el) => el[3] === 'reply')?.[1], []);
+
return (
-
+
{root && }
{reply && }
diff --git a/src/shared/widgets/eventLoader.tsx b/src/shared/widgets/eventLoader.tsx
deleted file mode 100644
index 3917af3a..00000000
--- a/src/shared/widgets/eventLoader.tsx
+++ /dev/null
@@ -1,78 +0,0 @@
-import { useQueryClient } from '@tanstack/react-query';
-import { useEffect, useState } from 'react';
-
-import { useStorage } from '@libs/storage/provider';
-
-import { useWidgets } from '@stores/widgets';
-
-import { useNostr } from '@utils/hooks/useNostr';
-
-export function EventLoader({ firstTime }: { firstTime: boolean }) {
- const { db } = useStorage();
- const { getAllEventsSinceLastLogin } = useNostr();
-
- const [progress, setProgress] = useState(0);
-
- const queryClient = useQueryClient();
- const setIsFetched = useWidgets((state) => state.setIsFetched);
-
- useEffect(() => {
- async function getEvents() {
- const events = await getAllEventsSinceLastLogin();
- console.log('total new events has found: ', events.length);
-
- if (events) {
- setProgress(100);
- setIsFetched();
-
- // invalidate queries
- await queryClient.invalidateQueries({
- queryKey: ['local-network-widget'],
- });
-
- // update last login time, use for next fetch
- await db.updateLastLogin();
- }
- }
-
- // only start download if progress === 0
- if (progress === 0) getEvents();
-
- // auto increase progress after 2 secs
- setInterval(() => setProgress((prev) => (prev += 5)), 2000);
- }, []);
-
- return (
-
-
-
- {firstTime ? (
-
-
👋
-
- Hello, this is the first time you're using Lume
-
-
- Lume is downloading all events since the last 24 hours. It will auto
- refresh when it done, please be patient
-
-
- ) : (
-
-
- Downloading all events while you're away...
-
-
- )}
-
-
-
-
- );
-}
diff --git a/src/shared/widgets/index.ts b/src/shared/widgets/index.ts
index 0402c585..61bb53fb 100644
--- a/src/shared/widgets/index.ts
+++ b/src/shared/widgets/index.ts
@@ -6,7 +6,6 @@ export * from './local/thread';
export * from './local/files';
export * from './local/articles';
export * from './local/follows';
-export * from './local/notification';
export * from './global/articles';
export * from './global/files';
export * from './global/hashtag';
@@ -16,3 +15,5 @@ export * from './tmp/feeds';
export * from './tmp/hashtag';
export * from './other/learnNostr';
export * from './eventLoader';
+export * from './newsfeed';
+export * from './notification';
diff --git a/src/shared/widgets/local/follows.tsx b/src/shared/widgets/local/follows.tsx
index f69833a7..cb2836fb 100644
--- a/src/shared/widgets/local/follows.tsx
+++ b/src/shared/widgets/local/follows.tsx
@@ -46,8 +46,6 @@ export function LocalFollowsWidget({ params }: { params: Widget }) {
diff --git a/src/shared/widgets/local/network.tsx b/src/shared/widgets/local/network.tsx
deleted file mode 100644
index 7f6c8138..00000000
--- a/src/shared/widgets/local/network.tsx
+++ /dev/null
@@ -1,184 +0,0 @@
-import { NDKEvent, NDKFilter, NDKKind } from '@nostr-dev-kit/ndk';
-import { useInfiniteQuery } from '@tanstack/react-query';
-import { useCallback, useEffect, useMemo } from 'react';
-import { VList } from 'virtua';
-
-import { useStorage } from '@libs/storage/provider';
-
-import { ArrowRightCircleIcon, ArrowRightIcon, LoaderIcon } from '@shared/icons';
-import {
- MemoizedArticleNote,
- MemoizedFileNote,
- MemoizedRepost,
- MemoizedTextNote,
- NoteWrapper,
- UnknownNote,
-} from '@shared/notes';
-import { NoteSkeleton } from '@shared/notes/skeleton';
-import { TitleBar } from '@shared/titleBar';
-import { EventLoader, WidgetWrapper } from '@shared/widgets';
-
-import { WidgetKinds, useWidgets } from '@stores/widgets';
-
-import { useNostr } from '@utils/hooks/useNostr';
-import { DBEvent } from '@utils/types';
-
-export function LocalNetworkWidget() {
- const { sub } = useNostr();
- const { db } = useStorage();
- const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
- useInfiniteQuery({
- queryKey: ['local-network-widget'],
- initialPageParam: 0,
- queryFn: async ({ pageParam = 0 }) => {
- return await db.getAllEvents(20, pageParam);
- },
- getNextPageParam: (lastPage) => lastPage.nextCursor,
- });
-
- const setWidget = useWidgets((state) => state.setWidget);
- const isFetched = useWidgets((state) => state.isFetched);
- const dbEvents = useMemo(
- () => (data ? data.pages.flatMap((d: { data: DBEvent[] }) => d.data) : []),
- [data]
- );
-
- // render event match event kind
- const renderItem = useCallback(
- (dbEvent: DBEvent) => {
- const event: NDKEvent = JSON.parse(dbEvent.event as string);
- switch (event.kind) {
- case NDKKind.Text:
- return (
-
-
-
- );
- case NDKKind.Repost:
- return
;
- case 1063:
- return (
-
-
-
- );
- case NDKKind.Article:
- return (
-
-
-
- );
- default:
- return (
-
-
-
- );
- }
- },
- [dbEvents]
- );
-
- const openTrendingWidgets = async () => {
- setWidget(db, {
- kind: WidgetKinds.nostrBand.trendingAccounts,
- title: 'Trending Accounts',
- content: '',
- });
- };
-
- // subscribe for new event
- // sub will be managed by lru-cache
- useEffect(() => {
- if (db.account && db.account.circles.length > 0 && dbEvents.length > 0) {
- const filter: NDKFilter = {
- kinds: [NDKKind.Text, NDKKind.Repost],
- authors: db.account.circles,
- since: Math.floor(Date.now() / 1000),
- };
-
- sub(filter, async (event) => {
- await db.createEvent(event);
- });
- }
- }, [data]);
-
- if (db.account.circles.length < 1) {
- return (
-
-
-
-
👋
-
You have not follow anyone yet
-
- If you are new to Nostr, you can click button below to open trending users
- and start follow some of theme
-
-
openTrendingWidgets()}
- className="mt-4 inline-flex h-9 w-max items-center justify-center gap-2 rounded-lg bg-blue-500 px-3 font-semibold text-white hover:bg-blue-600"
- >
- Open trending
-
-
-
-
-
- );
- }
-
- return (
-
-
-
- {status === 'pending' ? (
-
- ) : dbEvents.length === 0 ? (
-
- ) : (
-
- {!isFetched ? : null}
- {dbEvents.map((item) => renderItem(item))}
-
- {dbEvents.length > 0 ? (
-
fetchNextPage()}
- disabled={!hasNextPage || isFetchingNextPage}
- className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
- >
- {isFetchingNextPage ? (
- <>
- Loading...
-
- >
- ) : hasNextPage ? (
- <>
-
- Load more
- >
- ) : (
- <>
-
- Nothing more to load
- >
- )}
-
- ) : null}
-
-
-
- )}
-
-
- );
-}
diff --git a/src/shared/widgets/newsfeed.tsx b/src/shared/widgets/newsfeed.tsx
new file mode 100644
index 00000000..fa6a7f74
--- /dev/null
+++ b/src/shared/widgets/newsfeed.tsx
@@ -0,0 +1,187 @@
+import { NDKEvent, NDKFilter, NDKKind } from '@nostr-dev-kit/ndk';
+import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
+import { useCallback, useEffect } from 'react';
+import { VList } from 'virtua';
+
+import { useNDK } from '@libs/ndk/provider';
+import { useStorage } from '@libs/storage/provider';
+
+import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
+import {
+ MemoizedArticleNote,
+ MemoizedFileNote,
+ MemoizedRepost,
+ MemoizedTextNote,
+ NoteSkeleton,
+ NoteWrapper,
+ UnknownNote,
+} from '@shared/notes';
+import { TitleBar } from '@shared/titleBar';
+import { WidgetWrapper } from '@shared/widgets';
+
+import { nHoursAgo } from '@utils/date';
+import { useNostr } from '@utils/hooks/useNostr';
+
+export function NewsfeedWidget() {
+ const { db } = useStorage();
+ const { sub } = useNostr();
+ const { relayUrls, ndk, fetcher } = useNDK();
+ const { status, data } = useQuery({
+ queryKey: ['newsfeed'],
+ queryFn: async ({ signal }: { signal: AbortSignal }) => {
+ const rootIds = new Set();
+ const dedupQueue = new Set();
+
+ const events = await fetcher.fetchAllEvents(
+ relayUrls,
+ {
+ kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
+ authors: db.account.circles,
+ },
+ {
+ since: db.account.last_login_at === 0 ? nHoursAgo(4) : db.account.last_login_at,
+ },
+ { abortSignal: signal }
+ );
+
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
+
+ ndkEvents.forEach((event) => {
+ const tags = event.tags.filter((el) => el[0] === 'e');
+ if (tags && tags.length > 0) {
+ const rootId = tags.filter((el) => el[3] === 'root')[1] ?? tags[0][1];
+ if (rootIds.has(rootId)) return dedupQueue.add(event.id);
+ rootIds.add(rootId);
+ }
+ });
+
+ return ndkEvents
+ .filter((event) => !dedupQueue.has(event.id))
+ .sort((a, b) => b.created_at - a.created_at);
+ },
+ });
+
+ const queryClient = useQueryClient();
+ const mutation = useMutation({
+ mutationFn: async () => {
+ const currentLastEvent = data.at(-1);
+ const lastCreatedAt = currentLastEvent.created_at - 1;
+
+ const rootIds = new Set();
+ const dedupQueue = new Set();
+
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
+ authors: db.account.circles,
+ },
+ 100,
+ {
+ asOf: lastCreatedAt,
+ }
+ );
+
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
+
+ ndkEvents.forEach((event) => {
+ const tags = event.tags.filter((el) => el[0] === 'e');
+ if (tags && tags.length > 0) {
+ const rootId = tags.filter((el) => el[3] === 'root')[1] ?? tags[0][1];
+ if (rootIds.has(rootId)) return dedupQueue.add(event.id);
+ rootIds.add(rootId);
+ }
+ });
+
+ return ndkEvents
+ .filter((event) => !dedupQueue.has(event.id))
+ .sort((a, b) => b.created_at - a.created_at);
+ },
+ onSuccess: async (data) => {
+ queryClient.setQueryData(['newsfeed'], (old: NDKEvent[]) => [...old, ...data]);
+ },
+ });
+
+ const renderItem = useCallback((event: NDKEvent) => {
+ switch (event.kind) {
+ case NDKKind.Text:
+ return (
+
+
+
+ );
+ case NDKKind.Repost:
+ return
;
+ case 1063:
+ return (
+
+
+
+ );
+ case NDKKind.Article:
+ return (
+
+
+
+ );
+ default:
+ return (
+
+
+
+ );
+ }
+ }, []);
+
+ useEffect(() => {
+ if (db.account && db.account.circles.length > 0) {
+ const filter: NDKFilter = {
+ kinds: [NDKKind.Text, NDKKind.Repost],
+ authors: db.account.circles,
+ since: Math.floor(Date.now() / 1000),
+ };
+
+ sub(filter, async (event) => {
+ queryClient.setQueryData(['newsfeed'], (old: NDKEvent[]) => [event, ...old]);
+ });
+ }
+ }, []);
+
+ return (
+
+
+
+ {status === 'pending' ? (
+
+ ) : (
+ data.map((item) => renderItem(item))
+ )}
+
+ {data ? (
+
mutation.mutate()}
+ className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
+ >
+
+ Load more
+
+ ) : null}
+
+
+
+ );
+}
diff --git a/src/shared/widgets/local/notification.tsx b/src/shared/widgets/notification.tsx
similarity index 93%
rename from src/shared/widgets/local/notification.tsx
rename to src/shared/widgets/notification.tsx
index ce969d37..b0134c56 100644
--- a/src/shared/widgets/local/notification.tsx
+++ b/src/shared/widgets/notification.tsx
@@ -10,7 +10,6 @@ import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
import { useActivities } from '@stores/activities';
-import { useWidgets } from '@stores/widgets';
import { useNostr } from '@utils/hooks/useNostr';
import { Widget } from '@utils/types';
@@ -24,8 +23,6 @@ export function LocalNotificationWidget({ params }: { params: Widget }) {
state.setActivities,
]);
- const isFetched = useWidgets((state) => state.isFetched);
-
const renderEvent = useCallback(
(event: NDKEvent) => {
if (event.pubkey === db.account.pubkey) return null;
@@ -40,8 +37,8 @@ export function LocalNotificationWidget({ params }: { params: Widget }) {
setActivities(events);
}
- if (isFetched) getActivities();
- }, [isFetched]);
+ getActivities();
+ }, []);
return (
diff --git a/src/stores/widgets.ts b/src/stores/widgets.ts
index 1b6f3adb..d572b053 100644
--- a/src/stores/widgets.ts
+++ b/src/stores/widgets.ts
@@ -132,12 +132,14 @@ export const useWidgets = create()(
fetchWidgets: async (db: LumeStorage) => {
const dbWidgets = await db.getWidgets();
+ /*
dbWidgets.unshift({
id: '9998',
title: 'Notification',
content: '',
kind: WidgetKinds.local.notification,
});
+ */
dbWidgets.unshift({
id: '9999',
diff --git a/vite.config.ts b/vite.config.ts
index 7d785431..c1c99d70 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -1,10 +1,14 @@
import react from '@vitejs/plugin-react-swc';
-//import million from 'million/compiler';
+import million from 'million/compiler';
import { defineConfig } from 'vite';
import viteTsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
- plugins: [/*million.vite({ auto: true, mute: true }),*/ react(), viteTsconfigPaths()],
+ plugins: [
+ million.vite({ optimize: false, auto: true, mute: true }),
+ react(),
+ viteTsconfigPaths(),
+ ],
envPrefix: ['VITE_', 'TAURI_'],
build: {
target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13',
From fd5ecc18a9ee29d34a6559d99c653cc831a4c0d3 Mon Sep 17 00:00:00 2001
From: reya
Date: Wed, 1 Nov 2023 08:07:49 +0700
Subject: [PATCH 08/14] refactor all widgets
---
src/app/auth/onboarding/hashtag.tsx | 2 +-
src/app/space/components/toggle.tsx | 21 ++-
src/app/space/components/widgetList.tsx | 104 ++++++------
src/app/space/index.tsx | 166 +++++++++++--------
src/libs/storage/instance.ts | 3 +-
src/shared/accounts/active.tsx | 79 +---------
src/shared/navigation.tsx | 4 +-
src/shared/notes/actions.tsx | 11 +-
src/shared/notes/kinds/file.tsx | 10 +-
src/shared/notes/kinds/text.tsx | 12 +-
src/shared/notes/mentions/hashtag.tsx | 23 +--
src/shared/notes/mentions/invoice.tsx | 4 +-
src/shared/notes/mentions/note.tsx | 25 ++-
src/shared/notes/mentions/user.tsx | 20 +--
src/shared/notes/metadata.tsx | 18 +--
src/shared/notes/preview/link.tsx | 16 +-
src/shared/notification/notifyNote.tsx | 24 +--
src/shared/titleBar.tsx | 6 +-
src/shared/widgets/global/articles.tsx | 110 ++++++++-----
src/shared/widgets/global/files.tsx | 114 +++++++++-----
src/shared/widgets/global/hashtag.tsx | 164 +++++++++++--------
src/shared/widgets/index.ts | 4 -
src/shared/widgets/local/articles.tsx | 126 ++++++++-------
src/shared/widgets/local/feeds.tsx | 201 +++++++++++-------------
src/shared/widgets/local/files.tsx | 130 +++++++--------
src/shared/widgets/local/follows.tsx | 140 -----------------
src/shared/widgets/local/user.tsx | 20 ++-
src/shared/widgets/newsfeed.tsx | 173 +++++++++-----------
src/shared/widgets/notification.tsx | 182 ++++++++++++++++-----
src/shared/widgets/other/learnNostr.tsx | 70 ---------
src/shared/widgets/tmp/feeds.tsx | 14 +-
src/shared/widgets/tmp/hashtag.tsx | 18 +--
src/stores/activities.ts | 32 ----
src/stores/constants.ts | 103 ++++++++++++
src/stores/widgets.ts | 183 ---------------------
src/utils/hooks/useNostr.ts | 5 +-
src/utils/hooks/useWidget.ts | 30 ++++
37 files changed, 1096 insertions(+), 1271 deletions(-)
delete mode 100644 src/shared/widgets/local/follows.tsx
delete mode 100644 src/shared/widgets/other/learnNostr.tsx
delete mode 100644 src/stores/activities.ts
delete mode 100644 src/stores/widgets.ts
create mode 100644 src/utils/hooks/useWidget.ts
diff --git a/src/app/auth/onboarding/hashtag.tsx b/src/app/auth/onboarding/hashtag.tsx
index 1175ecf4..5a4b8de3 100644
--- a/src/app/auth/onboarding/hashtag.tsx
+++ b/src/app/auth/onboarding/hashtag.tsx
@@ -6,8 +6,8 @@ import { useStorage } from '@libs/storage/provider';
import { ArrowLeftIcon, CheckCircleIcon, LoaderIcon } from '@shared/icons';
+import { WidgetKinds } from '@stores/constants';
import { useOnboarding } from '@stores/onboarding';
-import { WidgetKinds } from '@stores/widgets';
const data = [
{ hashtag: '#bitcoin' },
diff --git a/src/app/space/components/toggle.tsx b/src/app/space/components/toggle.tsx
index 931de796..9fe73b43 100644
--- a/src/app/space/components/toggle.tsx
+++ b/src/app/space/components/toggle.tsx
@@ -1,23 +1,20 @@
-import { useStorage } from '@libs/storage/provider';
+import { PlusIcon } from '@shared/icons';
+import { WidgetWrapper } from '@shared/widgets';
-import { HandArrowDownIcon, PlusIcon } from '@shared/icons';
+import { WidgetKinds } from '@stores/constants';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { useWidget } from '@utils/hooks/useWidget';
export function ToggleWidgetList() {
- const { db } = useStorage();
- const setWidget = useWidgets((state) => state.setWidget);
+ const { addWidget } = useWidget();
return (
-
-
-
-
-
+
+
- setWidget(db, { kind: WidgetKinds.tmp.list, title: '', content: '' })
+ addWidget.mutate({ kind: WidgetKinds.tmp.list, title: '', content: '' })
}
className="inline-flex h-9 items-center gap-2 rounded-full bg-neutral-200 px-3 text-neutral-900 hover:bg-neutral-300 dark:bg-neutral-800 dark:text-neutral-100 dark:hover:bg-neutral-700"
>
@@ -25,6 +22,6 @@ export function ToggleWidgetList() {
Add widget
-
+
);
}
diff --git a/src/app/space/components/widgetList.tsx b/src/app/space/components/widgetList.tsx
index 4229f931..0ace2c0a 100644
--- a/src/app/space/components/widgetList.tsx
+++ b/src/app/space/components/widgetList.tsx
@@ -1,7 +1,5 @@
import { useCallback } from 'react';
-import { useStorage } from '@libs/storage/provider';
-
import {
ArticleIcon,
BellIcon,
@@ -13,22 +11,15 @@ import {
TrendingIcon,
} from '@shared/icons';
import { TitleBar } from '@shared/titleBar';
+import { WidgetWrapper } from '@shared/widgets';
-import { DefaultWidgets, WidgetKinds, useWidgets } from '@stores/widgets';
+import { DefaultWidgets, WidgetKinds } from '@stores/constants';
-import { Widget, WidgetGroup, WidgetGroupItem } from '@utils/types';
+import { useWidget } from '@utils/hooks/useWidget';
+import { Widget, WidgetGroup } from '@utils/types';
export function WidgetList({ params }: { params: Widget }) {
- const { db } = useStorage();
- const [setWidget, removeWidget] = useWidgets((state) => [
- state.setWidget,
- state.removeWidget,
- ]);
-
- const openWidget = (widget: WidgetGroupItem) => {
- setWidget(db, { kind: widget.kind, title: widget.title, content: '' });
- removeWidget(db, params.id);
- };
+ const { addWidget } = useWidget();
const renderIcon = useCallback(
(kind: number) => {
@@ -71,52 +62,51 @@ export function WidgetList({ params }: { params: Widget }) {
[DefaultWidgets]
);
- const renderItem = useCallback(
- (row: WidgetGroup, index: number) => {
- return (
-
-
- {row.title}
-
-
- {row.data.map((item, index) => (
-
openWidget(item)}
- key={index}
- className="group flex items-center gap-2.5 px-4 hover:bg-neutral-200 dark:hover:bg-neutral-800"
- >
- {item.icon ? (
-
-
-
- ) : (
-
- {renderIcon(item.kind)}
-
- )}
-
-
- {item.title}
-
-
- {item.description}
-
+ const renderItem = useCallback((row: WidgetGroup, index: number) => {
+ return (
+
+
+ {row.title}
+
+
+ {row.data.map((item, index) => (
+
+ addWidget.mutate({ kind: item.kind, title: item.title, content: '' })
+ }
+ key={index}
+ className="group flex items-center gap-2.5 px-4 hover:bg-neutral-200 dark:hover:bg-neutral-800"
+ >
+ {item.icon ? (
+
+
-
- ))}
-
+ ) : (
+
+ {renderIcon(item.kind)}
+
+ )}
+
+
+ {item.title}
+
+
+ {item.description}
+
+
+
+ ))}
- );
- },
- [DefaultWidgets]
- );
+
+ );
+ }, []);
return (
-
+
@@ -139,6 +129,6 @@ export function WidgetList({ params }: { params: Widget }) {
-
+
);
}
diff --git a/src/app/space/index.tsx b/src/app/space/index.tsx
index 5ffee4d6..dd63dc9b 100644
--- a/src/app/space/index.tsx
+++ b/src/app/space/index.tsx
@@ -1,4 +1,5 @@
-import { useCallback, useEffect, useRef } from 'react';
+import { useQuery } from '@tanstack/react-query';
+import { useCallback, useRef, useState } from 'react';
import { VList, VListHandle } from 'virtua';
import { ToggleWidgetList } from '@app/space/components/toggle';
@@ -11,99 +12,134 @@ import {
GlobalArticlesWidget,
GlobalFilesWidget,
GlobalHashtagWidget,
- LearnNostrWidget,
LocalArticlesWidget,
LocalFeedsWidget,
LocalFilesWidget,
- LocalFollowsWidget,
- LocalNotificationWidget,
LocalThreadWidget,
LocalUserWidget,
NewsfeedWidget,
+ NotificationWidget,
TrendingAccountsWidget,
TrendingNotesWidget,
XfeedsWidget,
XhashtagWidget,
} from '@shared/widgets';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { WidgetKinds } from '@stores/constants';
import { Widget } from '@utils/types';
export function SpaceScreen() {
+ const ref = useRef
(null);
+ const [selectedIndex, setSelectedIndex] = useState(-1);
+
const { db } = useStorage();
- const vlistRef = useRef(null);
+ const { status, data } = useQuery({
+ queryKey: ['widgets'],
+ queryFn: async () => {
+ const dbWidgets = await db.getWidgets();
+ const defaultWidgets = [
+ {
+ id: '9998',
+ title: 'Notification',
+ content: '',
+ kind: WidgetKinds.local.notification,
+ },
+ {
+ id: '9999',
+ title: 'Newsfeed',
+ content: '',
+ kind: WidgetKinds.local.network,
+ },
+ ];
- const [widgets, fetchWidgets] = useWidgets((state) => [
- state.widgets,
- state.fetchWidgets,
- ]);
-
- const renderItem = useCallback(
- (widget: Widget) => {
- if (!widget) return;
- switch (widget.kind) {
- case WidgetKinds.local.network:
- return ;
- case WidgetKinds.local.follows:
- return ;
- case WidgetKinds.local.feeds:
- return ;
- case WidgetKinds.local.files:
- return ;
- case WidgetKinds.local.articles:
- return ;
- case WidgetKinds.local.user:
- return ;
- case WidgetKinds.local.thread:
- return ;
- case WidgetKinds.global.hashtag:
- return ;
- case WidgetKinds.global.articles:
- return ;
- case WidgetKinds.global.files:
- return ;
- case WidgetKinds.nostrBand.trendingAccounts:
- return ;
- case WidgetKinds.nostrBand.trendingNotes:
- return ;
- case WidgetKinds.tmp.xfeed:
- return ;
- case WidgetKinds.tmp.xhashtag:
- return ;
- case WidgetKinds.tmp.list:
- return ;
- case WidgetKinds.other.learnNostr:
- return ;
- case WidgetKinds.local.notification:
- return ;
- default:
- return null;
- }
+ return [...defaultWidgets, ...dbWidgets];
},
- [widgets]
- );
+ refetchOnMount: false,
+ refetchOnReconnect: false,
+ refetchOnWindowFocus: false,
+ staleTime: Infinity,
+ });
- useEffect(() => {
- fetchWidgets(db);
+ const renderItem = useCallback((widget: Widget) => {
+ switch (widget.kind) {
+ case WidgetKinds.local.feeds:
+ return ;
+ case WidgetKinds.local.files:
+ return ;
+ case WidgetKinds.local.articles:
+ return ;
+ case WidgetKinds.local.user:
+ return ;
+ case WidgetKinds.local.thread:
+ return ;
+ case WidgetKinds.global.hashtag:
+ return ;
+ case WidgetKinds.global.articles:
+ return ;
+ case WidgetKinds.global.files:
+ return ;
+ case WidgetKinds.nostrBand.trendingAccounts:
+ return ;
+ case WidgetKinds.nostrBand.trendingNotes:
+ return ;
+ case WidgetKinds.tmp.xfeed:
+ return ;
+ case WidgetKinds.tmp.xhashtag:
+ return ;
+ case WidgetKinds.tmp.list:
+ return ;
+ case WidgetKinds.local.notification:
+ return ;
+ case WidgetKinds.local.network:
+ return ;
+ default:
+ return null;
+ }
}, []);
+ if (status === 'pending') {
+ return (
+
+
+
+ );
+ }
+
return (
{
+ if (!ref.current) return;
+ switch (e.code) {
+ case 'ArrowLeft': {
+ e.preventDefault();
+ const prevIndex = Math.max(selectedIndex - 1, 0);
+ setSelectedIndex(prevIndex);
+ ref.current.scrollToIndex(prevIndex, {
+ align: 'center',
+ smooth: true,
+ });
+ break;
+ }
+ case 'ArrowRight': {
+ e.preventDefault();
+ const nextIndex = Math.min(selectedIndex + 1, data.length - 1);
+ setSelectedIndex(nextIndex);
+ ref.current.scrollToIndex(nextIndex, {
+ align: 'center',
+ smooth: true,
+ });
+ break;
+ }
+ }
+ }}
>
- {!widgets ? (
-
-
-
- ) : (
- widgets.map((widget) => renderItem(widget))
- )}
+ {data.map((widget) => renderItem(widget))}
);
diff --git a/src/libs/storage/instance.ts b/src/libs/storage/instance.ts
index d973222f..3e7a0250 100644
--- a/src/libs/storage/instance.ts
+++ b/src/libs/storage/instance.ts
@@ -254,7 +254,8 @@ export class LumeStorage {
}
public async removeWidget(id: string) {
- return await this.db.execute('DELETE FROM widgets WHERE id = $1;', [id]);
+ const res = await this.db.execute('DELETE FROM widgets WHERE id = $1;', [id]);
+ if (res) return id;
}
public async createEvent(event: NDKEvent) {
diff --git a/src/shared/accounts/active.tsx b/src/shared/accounts/active.tsx
index cd6c5984..85dd7dc7 100644
--- a/src/shared/accounts/active.tsx
+++ b/src/shared/accounts/active.tsx
@@ -1,99 +1,22 @@
-import { NDKFilter, NDKKind } from '@nostr-dev-kit/ndk';
import * as Avatar from '@radix-ui/react-avatar';
import { minidenticon } from 'minidenticons';
-import { useEffect } from 'react';
-import { Link, useLocation } from 'react-router-dom';
+import { Link } from 'react-router-dom';
-import { useNDK } from '@libs/ndk/provider';
import { useStorage } from '@libs/storage/provider';
import { AccountMoreActions } from '@shared/accounts/more';
import { NetworkStatusIndicator } from '@shared/networkStatusIndicator';
-import { useActivities } from '@stores/activities';
-
-import { useNostr } from '@utils/hooks/useNostr';
import { useProfile } from '@utils/hooks/useProfile';
-import { sendNativeNotification } from '@utils/notification';
export function ActiveAccount() {
const { db } = useStorage();
- const { ndk } = useNDK();
const { status, user } = useProfile(db.account.pubkey);
- const { sub } = useNostr();
-
- const location = useLocation();
- const addActivity = useActivities((state) => state.addActivity);
- const addNewMessage = useActivities((state) => state.addNewMessage);
const svgURI =
'data:image/svg+xml;utf8,' +
encodeURIComponent(minidenticon(db.account.pubkey, 90, 50));
- useEffect(() => {
- const filter: NDKFilter = {
- kinds: [
- NDKKind.Text,
- NDKKind.EncryptedDirectMessage,
- NDKKind.Repost,
- NDKKind.Reaction,
- NDKKind.Zap,
- ],
- since: Math.floor(Date.now() / 1000),
- '#p': [db.account.pubkey],
- };
-
- sub(
- filter,
- async (event) => {
- console.log('receive event: ', event.id);
-
- if (event.kind !== NDKKind.EncryptedDirectMessage) {
- addActivity(event);
- }
-
- const user = ndk.getUser({ hexpubkey: event.pubkey });
- await user.fetchProfile();
-
- switch (event.kind) {
- case NDKKind.Text:
- return await sendNativeNotification(
- `${user.profile.displayName || user.profile.name} has replied to your note`
- );
- case NDKKind.EncryptedDirectMessage: {
- if (location.pathname !== '/chats') {
- addNewMessage();
- return await sendNativeNotification(
- `${
- user.profile.displayName || user.profile.name
- } has send you a encrypted message`
- );
- } else {
- break;
- }
- }
- case NDKKind.Repost:
- return await sendNativeNotification(
- `${user.profile.displayName || user.profile.name} has reposted to your note`
- );
- case NDKKind.Reaction:
- return await sendNativeNotification(
- `${user.profile.displayName || user.profile.name} has reacted ${
- event.content
- } to your note`
- );
- case NDKKind.Zap:
- return await sendNativeNotification(
- `${user.profile.displayName || user.profile.name} has zapped to your note`
- );
- default:
- break;
- }
- },
- false
- );
- }, []);
-
if (status === 'pending') {
return (
diff --git a/src/shared/navigation.tsx b/src/shared/navigation.tsx
index 1a1108a6..f814441c 100644
--- a/src/shared/navigation.tsx
+++ b/src/shared/navigation.tsx
@@ -11,12 +11,10 @@ import {
RelayIcon,
} from '@shared/icons';
-import { useActivities } from '@stores/activities';
-
import { compactNumber } from '@utils/number';
export function Navigation() {
- const newMessages = useActivities((state) => state.newMessages);
+ const newMessages = 0;
return (
diff --git a/src/shared/notes/actions.tsx b/src/shared/notes/actions.tsx
index b99b58e4..2c399257 100644
--- a/src/shared/notes/actions.tsx
+++ b/src/shared/notes/actions.tsx
@@ -1,14 +1,14 @@
import * as Tooltip from '@radix-ui/react-tooltip';
-import { useStorage } from '@libs/storage/provider';
-
import { FocusIcon } from '@shared/icons';
import { NoteReaction } from '@shared/notes/actions/reaction';
import { NoteReply } from '@shared/notes/actions/reply';
import { NoteRepost } from '@shared/notes/actions/repost';
import { NoteZap } from '@shared/notes/actions/zap';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { WidgetKinds } from '@stores/constants';
+
+import { useWidget } from '@utils/hooks/useWidget';
export function NoteActions({
id,
@@ -21,8 +21,7 @@ export function NoteActions({
extraButtons?: boolean;
root?: string;
}) {
- const { db } = useStorage();
- const setWidget = useWidgets((state) => state.setWidget);
+ const { addWidget } = useWidget();
return (
@@ -40,7 +39,7 @@ export function NoteActions({
- setWidget(db, {
+ addWidget.mutate({
kind: WidgetKinds.local.thread,
title: 'Thread',
content: id,
diff --git a/src/shared/notes/kinds/file.tsx b/src/shared/notes/kinds/file.tsx
index 174a4aaa..5084ee92 100644
--- a/src/shared/notes/kinds/file.tsx
+++ b/src/shared/notes/kinds/file.tsx
@@ -4,8 +4,6 @@ import {
MediaController,
MediaMuteButton,
MediaPlayButton,
- MediaSeekBackwardButton,
- MediaSeekForwardButton,
MediaTimeDisplay,
MediaTimeRange,
MediaVolumeRange,
@@ -37,19 +35,19 @@ export function FileNote(props: { event?: NDKEvent }) {
if (type === 'video') {
return (
-
+
-
-
diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx
index bddf6f85..47064ec0 100644
--- a/src/shared/notes/kinds/text.tsx
+++ b/src/shared/notes/kinds/text.tsx
@@ -4,12 +4,20 @@ import { ImagePreview, LinkPreview, MentionNote, VideoPreview } from '@shared/no
import { parser } from '@utils/parser';
-export function TextNote(props: { content?: string }) {
+export function TextNote(props: { content?: string; truncate?: boolean }) {
const richContent = parser(props.content);
+ if (props.truncate) {
+ return (
+
+ {props.content}
+
+ );
+ }
+
return (
-
+
{richContent.parsed}
{richContent.images.length ?
: null}
diff --git a/src/shared/notes/mentions/hashtag.tsx b/src/shared/notes/mentions/hashtag.tsx
index d5e204eb..8fd9dad7 100644
--- a/src/shared/notes/mentions/hashtag.tsx
+++ b/src/shared/notes/mentions/hashtag.tsx
@@ -1,24 +1,15 @@
-import { useStorage } from '@libs/storage/provider';
+import { WidgetKinds } from '@stores/constants';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { useWidget } from '@utils/hooks/useWidget';
export function Hashtag({ tag }: { tag: string }) {
- const { db } = useStorage();
- const setWidget = useWidgets((state) => state.setWidget);
+ const { addWidget } = useWidget();
return (
-
- setWidget(db, {
- kind: WidgetKinds.global.hashtag,
- title: tag,
- content: tag.replace('#', ''),
- })
- }
- onKeyDown={() =>
- setWidget(db, {
+ addWidget.mutate({
kind: WidgetKinds.global.hashtag,
title: tag,
content: tag.replace('#', ''),
@@ -27,6 +18,6 @@ export function Hashtag({ tag }: { tag: string }) {
className="cursor-default break-all text-blue-500 hover:text-blue-600"
>
{tag}
-
+
);
}
diff --git a/src/shared/notes/mentions/invoice.tsx b/src/shared/notes/mentions/invoice.tsx
index f8133d46..d9c11f0c 100644
--- a/src/shared/notes/mentions/invoice.tsx
+++ b/src/shared/notes/mentions/invoice.tsx
@@ -3,8 +3,8 @@ import { memo } from 'react';
export const Invoice = memo(function Invoice({ invoice }: { invoice: string }) {
return (
-
+
-
+
);
});
diff --git a/src/shared/notes/mentions/note.tsx b/src/shared/notes/mentions/note.tsx
index 1e463446..e5de7205 100644
--- a/src/shared/notes/mentions/note.tsx
+++ b/src/shared/notes/mentions/note.tsx
@@ -2,8 +2,6 @@ import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
import { nip19 } from 'nostr-tools';
import { memo } from 'react';
-import { useStorage } from '@libs/storage/provider';
-
import {
ArticleNote,
FileNote,
@@ -14,20 +12,23 @@ import {
} from '@shared/notes';
import { User } from '@shared/user';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { WidgetKinds } from '@stores/constants';
import { useEvent } from '@utils/hooks/useEvent';
+import { useWidget } from '@utils/hooks/useWidget';
export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
- const { db } = useStorage();
const { status, data } = useEvent(id);
-
- const setWidget = useWidgets((state) => state.setWidget);
+ const { addWidget } = useWidget();
const openThread = (event, thread: string) => {
const selection = window.getSelection();
if (selection.toString().length === 0) {
- setWidget(db, { kind: WidgetKinds.local.thread, title: 'Thread', content: thread });
+ addWidget.mutate({
+ kind: WidgetKinds.local.thread,
+ title: 'Thread',
+ content: thread,
+ });
} else {
event.stopPropagation();
}
@@ -74,15 +75,13 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
}
return (
- openThread(e, id)}
- onKeyDown={(e) => openThread(e, id)}
- role="button"
- tabIndex={0}
className="mt-3 cursor-default rounded-lg border border-neutral-300 bg-neutral-200 p-3 dark:border-neutral-700 dark:bg-neutral-800"
>
-
{renderKind(data)}
-
+ {renderKind(data)}
+
);
});
diff --git a/src/shared/notes/mentions/user.tsx b/src/shared/notes/mentions/user.tsx
index 80a9679f..b659ab8b 100644
--- a/src/shared/notes/mentions/user.tsx
+++ b/src/shared/notes/mentions/user.tsx
@@ -1,30 +1,26 @@
import { memo } from 'react';
-import { useStorage } from '@libs/storage/provider';
-
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { WidgetKinds } from '@stores/constants';
import { useProfile } from '@utils/hooks/useProfile';
+import { useWidget } from '@utils/hooks/useWidget';
export const MentionUser = memo(function MentionUser({ pubkey }: { pubkey: string }) {
- const { db } = useStorage();
const { user } = useProfile(pubkey);
-
- const setWidget = useWidgets((state) => state.setWidget);
+ const { addWidget } = useWidget();
return (
-
- setWidget(db, {
+ addWidget.mutate({
kind: WidgetKinds.local.user,
title: user?.name || user?.display_name || user?.displayName,
content: pubkey,
})
}
onKeyDown={() =>
- setWidget(db, {
+ addWidget.mutate({
kind: WidgetKinds.local.user,
title: user?.name || user?.display_name || user?.displayName,
content: pubkey,
@@ -38,6 +34,6 @@ export const MentionUser = memo(function MentionUser({ pubkey }: { pubkey: strin
user?.displayName ||
user?.username ||
'unknown')}
-
+
);
});
diff --git a/src/shared/notes/metadata.tsx b/src/shared/notes/metadata.tsx
index 8d6de8c5..035ef8eb 100644
--- a/src/shared/notes/metadata.tsx
+++ b/src/shared/notes/metadata.tsx
@@ -3,19 +3,13 @@ import { useQuery } from '@tanstack/react-query';
import { decode } from 'light-bolt11-decoder';
import { useNDK } from '@libs/ndk/provider';
-import { useStorage } from '@libs/storage/provider';
import { LoaderIcon } from '@shared/icons';
import { User } from '@shared/user';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
-
import { compactNumber } from '@utils/number';
export function NoteMetadata({ id }: { id: string }) {
- const setWidget = useWidgets((state) => state.setWidget);
-
- const { db } = useStorage();
const { ndk } = useNDK();
const { status, data } = useQuery({
queryKey: ['note-metadata', id],
@@ -89,17 +83,7 @@ export function NoteMetadata({ id }: { id: string }) {
-
- setWidget(db, {
- kind: WidgetKinds.local.thread,
- title: 'Thread',
- content: id,
- })
- }
- className="text-neutral-600 dark:text-neutral-400"
- >
+
{data.replies} replies
·
diff --git a/src/shared/notes/preview/link.tsx b/src/shared/notes/preview/link.tsx
index eeecbc70..2a488fd4 100644
--- a/src/shared/notes/preview/link.tsx
+++ b/src/shared/notes/preview/link.tsx
@@ -2,6 +2,10 @@ import { Link } from 'react-router-dom';
import { useOpenGraph } from '@utils/hooks/useOpenGraph';
+function isImage(url: string) {
+ return /^https?:\/\/.+\.(jpg|jpeg|png|webp|avif)$/.test(url);
+}
+
export function LinkPreview({ urls }: { urls: string[] }) {
const { status, data, error } = useOpenGraph(urls[0]);
const domain = new URL(urls[0]);
@@ -37,25 +41,25 @@ export function LinkPreview({ urls }: { urls: string[] }) {
) : (
<>
- {data.image && (
+ {isImage(data.image) ? (
- )}
-
-
+ ) : null}
+
+
{data.title && (
{data.title}
)}
- {data.description && (
+ {data.description ? (
{data.description}
- )}
+ ) : null}
{domain.hostname}
diff --git a/src/shared/notification/notifyNote.tsx b/src/shared/notification/notifyNote.tsx
index 44466e75..f6ebcd6c 100644
--- a/src/shared/notification/notifyNote.tsx
+++ b/src/shared/notification/notifyNote.tsx
@@ -1,7 +1,5 @@
import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
-import { useStorage } from '@libs/storage/provider';
-
import {
ArticleNote,
FileNote,
@@ -11,33 +9,37 @@ import {
} from '@shared/notes';
import { User } from '@shared/user';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { WidgetKinds } from '@stores/constants';
import { formatCreatedAt } from '@utils/createdAt';
import { useEvent } from '@utils/hooks/useEvent';
+import { useWidget } from '@utils/hooks/useWidget';
export function NotifyNote({ event }: { event: NDKEvent }) {
const createdAt = formatCreatedAt(event.created_at, false);
const rootEventId = event.tags.find((el) => el[0] === 'e')?.[1];
- const { db } = useStorage();
const { status, data } = useEvent(rootEventId);
-
- const setWidget = useWidgets((state) => state.setWidget);
+ const { addWidget } = useWidget();
const openThread = (event, thread: string) => {
const selection = window.getSelection();
if (selection.toString().length === 0) {
- setWidget(db, { kind: WidgetKinds.local.thread, title: 'Thread', content: thread });
+ addWidget.mutate({
+ kind: WidgetKinds.local.thread,
+ title: 'Thread',
+ content: thread,
+ });
} else {
event.stopPropagation();
}
};
const renderKind = (event: NDKEvent) => {
+ if (!event) return null;
switch (event.kind) {
case NDKKind.Text:
- return ;
+ return ;
case NDKKind.Article:
return ;
case 1063:
@@ -88,13 +90,13 @@ export function NotifyNote({ event }: { event: NDKEvent }) {
{event.kind === 1 ? : null}
openThread(e, data.id)}
- onKeyDown={(e) => openThread(e, data.id)}
+ onClick={(e) => openThread(e, data?.id)}
+ onKeyDown={(e) => openThread(e, data?.id)}
role="button"
tabIndex={0}
className="cursor-default rounded-lg border border-neutral-300 bg-neutral-200 p-3 dark:border-neutral-700 dark:bg-neutral-800"
>
-
+
{renderKind(data)}
diff --git a/src/shared/titleBar.tsx b/src/shared/titleBar.tsx
index fe3fbb92..7bb8d3ba 100644
--- a/src/shared/titleBar.tsx
+++ b/src/shared/titleBar.tsx
@@ -3,11 +3,11 @@ import { useStorage } from '@libs/storage/provider';
import { CancelIcon } from '@shared/icons';
import { User } from '@shared/user';
-import { useWidgets } from '@stores/widgets';
+import { useWidget } from '@utils/hooks/useWidget';
export function TitleBar({ id, title }: { id?: string; title?: string }) {
const { db } = useStorage();
- const remove = useWidgets((state) => state.removeWidget);
+ const { removeWidget } = useWidget();
return (
@@ -33,7 +33,7 @@ export function TitleBar({ id, title }: { id?: string; title?: string }) {
{id !== '9999' ? (
remove(db, id)}
+ onClick={() => removeWidget.mutate(id)}
className="inline-flex h-6 w-6 shrink-0 items-center justify-center rounded text-neutral-900 backdrop-blur-xl hover:bg-neutral-100 dark:text-neutral-100 dark:hover:bg-neutral-900"
>
diff --git a/src/shared/widgets/global/articles.tsx b/src/shared/widgets/global/articles.tsx
index cc79f203..35fb77ee 100644
--- a/src/shared/widgets/global/articles.tsx
+++ b/src/shared/widgets/global/articles.tsx
@@ -1,58 +1,70 @@
import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
-import { useQuery } from '@tanstack/react-query';
-import { useCallback } from 'react';
+import { useInfiniteQuery } from '@tanstack/react-query';
+import { useMemo } from 'react';
import { VList } from 'virtua';
import { useNDK } from '@libs/ndk/provider';
-import { LoaderIcon } from '@shared/icons';
+import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
import { ArticleNote, NoteWrapper } from '@shared/notes';
import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
+import { FETCH_LIMIT } from '@stores/constants';
+
import { Widget } from '@utils/types';
export function GlobalArticlesWidget({ params }: { params: Widget }) {
- const { ndk } = useNDK();
- const { status, data } = useQuery({
- queryKey: ['global-articles'],
- queryFn: async () => {
- const events = await ndk.fetchEvents({
- kinds: [NDKKind.Article],
- limit: 200,
- });
- const sortedEvents = [...events].sort((x, y) => y.created_at - x.created_at);
- return sortedEvents;
- },
- refetchOnWindowFocus: false,
- });
+ const { ndk, relayUrls, fetcher } = useNDK();
+ const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
+ useInfiniteQuery({
+ queryKey: ['global-articles'],
+ initialPageParam: 0,
+ queryFn: async ({
+ signal,
+ pageParam,
+ }: {
+ signal: AbortSignal;
+ pageParam: number;
+ }) => {
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [NDKKind.Article],
+ },
+ FETCH_LIMIT,
+ { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
+ );
- // render event match event kind
- const renderItem = useCallback(
- (event: NDKEvent) => {
- return (
-
-
-
- );
- },
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
+
+ return ndkEvents.sort((a, b) => b.created_at - a.created_at);
+ },
+ getNextPageParam: (lastPage) => {
+ const lastEvent = lastPage.at(-1);
+ if (!lastEvent) return;
+ return lastEvent.created_at - 1;
+ },
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
+ });
+
+ const allEvents = useMemo(
+ () => (data ? data.pages.flatMap((page) => page) : []),
[data]
);
return (
-
+
{status === 'pending' ? (
-
-
-
-
- Loading article...
-
-
+
+
- ) : data.length === 0 ? (
+ ) : allEvents.length === 0 ? (
@@ -67,12 +79,32 @@ export function GlobalArticlesWidget({ params }: { params: Widget }) {
) : (
-
- {data.map((item) => renderItem(item))}
-
-
+ allEvents.map((item) => (
+
+
+
+ ))
)}
-
+
+ {hasNextPage ? (
+
fetchNextPage()}
+ disabled={!hasNextPage || isFetchingNextPage}
+ className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
+ >
+ {isFetchingNextPage ? (
+
+ ) : (
+ <>
+
+ Load more
+ >
+ )}
+
+ ) : null}
+
+
);
}
diff --git a/src/shared/widgets/global/files.tsx b/src/shared/widgets/global/files.tsx
index d6628b17..eefc7a6f 100644
--- a/src/shared/widgets/global/files.tsx
+++ b/src/shared/widgets/global/files.tsx
@@ -1,66 +1,76 @@
import { NDKEvent } from '@nostr-dev-kit/ndk';
-import { useQuery } from '@tanstack/react-query';
-import { useCallback } from 'react';
+import { useInfiniteQuery } from '@tanstack/react-query';
+import { useMemo } from 'react';
import { VList } from 'virtua';
import { useNDK } from '@libs/ndk/provider';
-import { LoaderIcon } from '@shared/icons';
+import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
import { FileNote, NoteWrapper } from '@shared/notes';
import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
-import { nHoursAgo } from '@utils/date';
+import { FETCH_LIMIT } from '@stores/constants';
+
import { Widget } from '@utils/types';
export function GlobalFilesWidget({ params }: { params: Widget }) {
- const { ndk } = useNDK();
- const { status, data } = useQuery({
- queryKey: ['global-file-sharing'],
- queryFn: async () => {
- const events = await ndk.fetchEvents({
- // @ts-expect-error, NDK not support file metadata yet
- kinds: [1063],
- since: nHoursAgo(24),
- });
- const sortedEvents = [...events].sort((x, y) => y.created_at - x.created_at);
- return sortedEvents;
- },
- refetchOnWindowFocus: false,
- });
+ const { ndk, relayUrls, fetcher } = useNDK();
+ const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
+ useInfiniteQuery({
+ queryKey: ['global-files'],
+ initialPageParam: 0,
+ queryFn: async ({
+ signal,
+ pageParam,
+ }: {
+ signal: AbortSignal;
+ pageParam: number;
+ }) => {
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [1063],
+ },
+ FETCH_LIMIT,
+ { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
+ );
- // render event match event kind
- const renderItem = useCallback(
- (event: NDKEvent) => {
- return (
-
-
-
- );
- },
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
+
+ return ndkEvents.sort((a, b) => b.created_at - a.created_at);
+ },
+ getNextPageParam: (lastPage) => {
+ const lastEvent = lastPage.at(-1);
+ if (!lastEvent) return;
+ return lastEvent.created_at - 1;
+ },
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
+ });
+
+ const allEvents = useMemo(
+ () => (data ? data.pages.flatMap((page) => page) : []),
[data]
);
return (
-
+
{status === 'pending' ? (
-
-
-
-
- Loading file sharing event...
-
-
+
+
- ) : data.length === 0 ? (
+ ) : allEvents.length === 0 ? (
- Oops, it looks like there are no file sharing events.
+ Oops, it looks like there are no files.
You can close this widget
@@ -69,12 +79,32 @@ export function GlobalFilesWidget({ params }: { params: Widget }) {
) : (
-
- {data.map((item) => renderItem(item))}
-
-
+ allEvents.map((item) => (
+
+
+
+ ))
)}
-
+
+ {hasNextPage ? (
+
fetchNextPage()}
+ disabled={!hasNextPage || isFetchingNextPage}
+ className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
+ >
+ {isFetchingNextPage ? (
+
+ ) : (
+ <>
+
+ Load more
+ >
+ )}
+
+ ) : null}
+
+
);
}
diff --git a/src/shared/widgets/global/hashtag.tsx b/src/shared/widgets/global/hashtag.tsx
index 99c2b67f..f1b88abe 100644
--- a/src/shared/widgets/global/hashtag.tsx
+++ b/src/shared/widgets/global/hashtag.tsx
@@ -1,11 +1,11 @@
import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
-import { useQuery } from '@tanstack/react-query';
-import { useCallback } from 'react';
+import { useInfiniteQuery } from '@tanstack/react-query';
+import { useCallback, useMemo } from 'react';
import { VList } from 'virtua';
import { useNDK } from '@libs/ndk/provider';
-import { LoaderIcon } from '@shared/icons';
+import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
import {
ArticleNote,
FileNote,
@@ -17,74 +17,94 @@ import {
import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
-import { nHoursAgo } from '@utils/date';
+import { FETCH_LIMIT } from '@stores/constants';
+
import { Widget } from '@utils/types';
export function GlobalHashtagWidget({ params }: { params: Widget }) {
- const { ndk } = useNDK();
- const { status, data } = useQuery({
- queryKey: ['hashtag-' + params.title],
- queryFn: async () => {
- const events = await ndk.fetchEvents({
- kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Article],
- '#t': [params.content],
- since: nHoursAgo(24),
- });
- const sortedEvents = [...events].sort((x, y) => y.created_at - x.created_at);
- return sortedEvents;
- },
- refetchOnWindowFocus: false,
- });
+ const { ndk, relayUrls, fetcher } = useNDK();
+ const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
+ useInfiniteQuery({
+ queryKey: ['hashtag-' + params.title],
+ initialPageParam: 0,
+ queryFn: async ({
+ signal,
+ pageParam,
+ }: {
+ signal: AbortSignal;
+ pageParam: number;
+ }) => {
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
+ '#t': [params.content],
+ },
+ FETCH_LIMIT,
+ { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
+ );
- // render event match event kind
- const renderItem = useCallback(
- (event: NDKEvent) => {
- switch (event.kind) {
- case NDKKind.Text:
- return (
-
-
-
- );
- case NDKKind.Repost:
- return
;
- case 1063:
- return (
-
-
-
- );
- case NDKKind.Article:
- return (
-
-
-
- );
- default:
- return (
-
-
-
- );
- }
- },
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
+
+ return ndkEvents.sort((a, b) => b.created_at - a.created_at);
+ },
+ getNextPageParam: (lastPage) => {
+ const lastEvent = lastPage.at(-1);
+ if (!lastEvent) return;
+ return lastEvent.created_at - 1;
+ },
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
+ });
+
+ const allEvents = useMemo(
+ () => (data ? data.pages.flatMap((page) => page) : []),
[data]
);
+ // render event match event kind
+ const renderItem = useCallback((event: NDKEvent) => {
+ switch (event.kind) {
+ case NDKKind.Text:
+ return (
+
+
+
+ );
+ case NDKKind.Repost:
+ return
;
+ case 1063:
+ return (
+
+
+
+ );
+ case NDKKind.Article:
+ return (
+
+
+
+ );
+ default:
+ return (
+
+
+
+ );
+ }
+ }, []);
+
return (
-
+
{status === 'pending' ? (
-
-
-
- Loading event related to the hashtag {params.title}...
-
-
+
- ) : data.length === 0 ? (
+ ) : allEvents.length === 0 ? (
@@ -93,18 +113,34 @@ export function GlobalHashtagWidget({ params }: { params: Widget }) {
Oops, it looks like there are no events related to {params.title}.
- You can close this widget or try with other hashtag
+ You can close this widget
) : (
-
- {data.map((item) => renderItem(item))}
-
-
+ allEvents.map((item) => renderItem(item))
)}
-
+
+ {hasNextPage ? (
+
fetchNextPage()}
+ disabled={!hasNextPage || isFetchingNextPage}
+ className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
+ >
+ {isFetchingNextPage ? (
+
+ ) : (
+ <>
+
+ Load more
+ >
+ )}
+
+ ) : null}
+
+
);
}
diff --git a/src/shared/widgets/index.ts b/src/shared/widgets/index.ts
index 61bb53fb..f23db79a 100644
--- a/src/shared/widgets/index.ts
+++ b/src/shared/widgets/index.ts
@@ -1,11 +1,9 @@
export * from './wrapper';
export * from './local/feeds';
-export * from './local/network';
export * from './local/user';
export * from './local/thread';
export * from './local/files';
export * from './local/articles';
-export * from './local/follows';
export * from './global/articles';
export * from './global/files';
export * from './global/hashtag';
@@ -13,7 +11,5 @@ export * from './nostrBand/trendingNotes';
export * from './nostrBand/trendingAccounts';
export * from './tmp/feeds';
export * from './tmp/hashtag';
-export * from './other/learnNostr';
-export * from './eventLoader';
export * from './newsfeed';
export * from './notification';
diff --git a/src/shared/widgets/local/articles.tsx b/src/shared/widgets/local/articles.tsx
index 78a0ced6..6bc44dc6 100644
--- a/src/shared/widgets/local/articles.tsx
+++ b/src/shared/widgets/local/articles.tsx
@@ -1,8 +1,9 @@
import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
import { useInfiniteQuery } from '@tanstack/react-query';
-import { useCallback, useMemo } from 'react';
+import { useMemo } from 'react';
import { VList } from 'virtua';
+import { useNDK } from '@libs/ndk/provider';
import { useStorage } from '@libs/storage/provider';
import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
@@ -10,52 +11,63 @@ import { ArticleNote, NoteWrapper } from '@shared/notes';
import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
-import { DBEvent, Widget } from '@utils/types';
+import { FETCH_LIMIT } from '@stores/constants';
+
+import { Widget } from '@utils/types';
export function LocalArticlesWidget({ params }: { params: Widget }) {
const { db } = useStorage();
+ const { ndk, relayUrls, fetcher } = useNDK();
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
useInfiniteQuery({
queryKey: ['local-articles'],
initialPageParam: 0,
- queryFn: async ({ pageParam = 0 }) => {
- return await db.getAllEventsByKinds([NDKKind.Article], 20, pageParam);
+ queryFn: async ({
+ signal,
+ pageParam,
+ }: {
+ signal: AbortSignal;
+ pageParam: number;
+ }) => {
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [NDKKind.Article],
+ authors: db.account.circles,
+ },
+ FETCH_LIMIT,
+ { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
+ );
+
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
+
+ return ndkEvents.sort((a, b) => b.created_at - a.created_at);
},
- getNextPageParam: (lastPage) => lastPage.nextCursor,
+ getNextPageParam: (lastPage) => {
+ const lastEvent = lastPage.at(-1);
+ if (!lastEvent) return;
+ return lastEvent.created_at - 1;
+ },
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
});
- const dbEvents = useMemo(
- () => (data ? data.pages.flatMap((d: { data: DBEvent[] }) => d.data) : []),
- [data]
- );
-
- // render event match event kind
- const renderItem = useCallback(
- (dbEvent: DBEvent) => {
- const event: NDKEvent = JSON.parse(dbEvent.event as string);
- return (
-
-
-
- );
- },
+ const allEvents = useMemo(
+ () => (data ? data.pages.flatMap((page) => page) : []),
[data]
);
return (
-
+
{status === 'pending' ? (
-
-
-
-
- Loading article...
-
-
+
+
- ) : dbEvents.length === 0 ? (
+ ) : allEvents.length === 0 ? (
@@ -70,38 +82,32 @@ export function LocalArticlesWidget({ params }: { params: Widget }) {
) : (
-
- {dbEvents.map((item) => renderItem(item))}
-
- {dbEvents.length > 0 ? (
-
fetchNextPage()}
- disabled={!hasNextPage || isFetchingNextPage}
- className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
- >
- {isFetchingNextPage ? (
- <>
- Loading...
-
- >
- ) : hasNextPage ? (
- <>
-
- Load more
- >
- ) : (
- <>
-
- Nothing more to load
- >
- )}
-
- ) : null}
-
-
-
+ allEvents.map((item) => (
+
+
+
+ ))
)}
-
+
+ {hasNextPage ? (
+
fetchNextPage()}
+ disabled={!hasNextPage || isFetchingNextPage}
+ className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
+ >
+ {isFetchingNextPage ? (
+
+ ) : (
+ <>
+
+ Load more
+ >
+ )}
+
+ ) : null}
+
+
);
}
diff --git a/src/shared/widgets/local/feeds.tsx b/src/shared/widgets/local/feeds.tsx
index c69fa1fe..29979aa9 100644
--- a/src/shared/widgets/local/feeds.tsx
+++ b/src/shared/widgets/local/feeds.tsx
@@ -3,141 +3,132 @@ import { useInfiniteQuery } from '@tanstack/react-query';
import { useCallback, useMemo } from 'react';
import { VList } from 'virtua';
-import { useStorage } from '@libs/storage/provider';
+import { useNDK } from '@libs/ndk/provider';
import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
import {
- ArticleNote,
- FileNote,
+ MemoizedArticleNote,
+ MemoizedFileNote,
+ MemoizedRepost,
+ MemoizedTextNote,
+ NoteSkeleton,
NoteWrapper,
- Repost,
- TextNote,
UnknownNote,
} from '@shared/notes';
import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
-import { DBEvent, Widget } from '@utils/types';
+import { FETCH_LIMIT } from '@stores/constants';
+
+import { Widget } from '@utils/types';
export function LocalFeedsWidget({ params }: { params: Widget }) {
- const { db } = useStorage();
+ const { relayUrls, ndk, fetcher } = useNDK();
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
useInfiniteQuery({
queryKey: ['group-feeds-' + params.id],
initialPageParam: 0,
- queryFn: async ({ pageParam = 0 }) => {
- const authors = JSON.parse(params.content);
- return await db.getAllEventsByAuthors(authors, 20, pageParam);
+ queryFn: async ({
+ signal,
+ pageParam,
+ }: {
+ signal: AbortSignal;
+ pageParam: number;
+ }) => {
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
+ authors: JSON.parse(params.content),
+ },
+ FETCH_LIMIT,
+ { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
+ );
+
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
+
+ return ndkEvents.sort((a, b) => b.created_at - a.created_at);
},
- getNextPageParam: (lastPage) => lastPage.nextCursor,
+ getNextPageParam: (lastPage) => {
+ const lastEvent = lastPage.at(-1);
+ if (!lastEvent) return;
+ return lastEvent.created_at - 1;
+ },
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
});
- const dbEvents = useMemo(
- () => (data ? data.pages.flatMap((d: { data: DBEvent[] }) => d.data) : []),
+ const allEvents = useMemo(
+ () => (data ? data.pages.flatMap((page) => page) : []),
[data]
);
- // render event match event kind
- const renderItem = useCallback(
- (dbEvent: DBEvent) => {
- const event: NDKEvent = JSON.parse(dbEvent.event as string);
- switch (event.kind) {
- case NDKKind.Text:
- return (
-
-
-
- );
- case NDKKind.Repost:
- return
;
- case 1063:
- return (
-
-
-
- );
- case NDKKind.Article:
- return (
-
-
-
- );
- default:
- return (
-
-
-
- );
- }
- },
- [dbEvents]
- );
+ const renderItem = useCallback((event: NDKEvent) => {
+ switch (event.kind) {
+ case NDKKind.Text:
+ return (
+
+
+
+ );
+ case NDKKind.Repost:
+ return
;
+ case 1063:
+ return (
+
+
+
+ );
+ case NDKKind.Article:
+ return (
+
+
+
+ );
+ default:
+ return (
+
+
+
+ );
+ }
+ }, []);
return (
-
+
{status === 'pending' ? (
-
-
-
-
- Loading newsfeed...
-
-
-
- ) : dbEvents.length === 0 ? (
-
-
-
-
-
- Oops, it looks like there are no posts.
-
-
- You can close this widget
-
-
+
) : (
-
- {dbEvents.map((item) => renderItem(item))}
-
- {dbEvents.length > 0 ? (
-
fetchNextPage()}
- disabled={!hasNextPage || isFetchingNextPage}
- className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
- >
- {isFetchingNextPage ? (
- <>
- Loading...
-
- >
- ) : hasNextPage ? (
- <>
-
- Load more
- >
- ) : (
- <>
-
- Nothing more to load
- >
- )}
-
- ) : null}
-
-
-
+ allEvents.map((item) => renderItem(item))
)}
-
+
+ {hasNextPage ? (
+
fetchNextPage()}
+ disabled={!hasNextPage || isFetchingNextPage}
+ className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
+ >
+ {isFetchingNextPage ? (
+
+ ) : (
+ <>
+
+ Load more
+ >
+ )}
+
+ ) : null}
+
+
);
}
diff --git a/src/shared/widgets/local/files.tsx b/src/shared/widgets/local/files.tsx
index 541a1c05..e36dc59a 100644
--- a/src/shared/widgets/local/files.tsx
+++ b/src/shared/widgets/local/files.tsx
@@ -1,8 +1,9 @@
import { NDKEvent } from '@nostr-dev-kit/ndk';
import { useInfiniteQuery } from '@tanstack/react-query';
-import { useCallback, useMemo } from 'react';
+import { useMemo } from 'react';
import { VList } from 'virtua';
+import { useNDK } from '@libs/ndk/provider';
import { useStorage } from '@libs/storage/provider';
import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
@@ -10,58 +11,69 @@ import { FileNote, NoteWrapper } from '@shared/notes';
import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
-import { DBEvent, Widget } from '@utils/types';
+import { FETCH_LIMIT } from '@stores/constants';
+
+import { Widget } from '@utils/types';
export function LocalFilesWidget({ params }: { params: Widget }) {
const { db } = useStorage();
+ const { ndk, relayUrls, fetcher } = useNDK();
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
useInfiniteQuery({
- queryKey: ['local-file-sharing'],
+ queryKey: ['local-files'],
initialPageParam: 0,
- queryFn: async ({ pageParam = 0 }) => {
- return await db.getAllEventsByKinds([1063], 20, pageParam);
+ queryFn: async ({
+ signal,
+ pageParam,
+ }: {
+ signal: AbortSignal;
+ pageParam: number;
+ }) => {
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [1063],
+ authors: db.account.circles,
+ },
+ FETCH_LIMIT,
+ { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
+ );
+
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
+
+ return ndkEvents.sort((a, b) => b.created_at - a.created_at);
},
- getNextPageParam: (lastPage) => lastPage.nextCursor,
+ getNextPageParam: (lastPage) => {
+ const lastEvent = lastPage.at(-1);
+ if (!lastEvent) return;
+ return lastEvent.created_at - 1;
+ },
+ refetchOnWindowFocus: false,
+ refetchOnReconnect: false,
});
- const dbEvents = useMemo(
- () => (data ? data.pages.flatMap((d: { data: DBEvent[] }) => d.data) : []),
- [data]
- );
-
- // render event match event kind
- const renderItem = useCallback(
- (dbEvent: DBEvent) => {
- const event: NDKEvent = JSON.parse(dbEvent.event as string);
- return (
-
-
-
- );
- },
+ const allEvents = useMemo(
+ () => (data ? data.pages.flatMap((page) => page) : []),
[data]
);
return (
-
+
{status === 'pending' ? (
-
-
-
-
- Loading file sharing event...
-
-
+
+
- ) : dbEvents.length === 0 ? (
+ ) : allEvents.length === 0 ? (
- Oops, it looks like there are no file sharing events.
+ Oops, it looks like there are no files.
You can close this widget
@@ -70,38 +82,32 @@ export function LocalFilesWidget({ params }: { params: Widget }) {
) : (
-
- {dbEvents.map((item) => renderItem(item))}
-
- {dbEvents.length > 0 ? (
-
fetchNextPage()}
- disabled={!hasNextPage || isFetchingNextPage}
- className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
- >
- {isFetchingNextPage ? (
- <>
- Loading...
-
- >
- ) : hasNextPage ? (
- <>
-
- Load more
- >
- ) : (
- <>
-
- Nothing more to load
- >
- )}
-
- ) : null}
-
-
-
+ allEvents.map((item) => (
+
+
+
+ ))
)}
-
+
+ {hasNextPage ? (
+
fetchNextPage()}
+ disabled={!hasNextPage || isFetchingNextPage}
+ className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
+ >
+ {isFetchingNextPage ? (
+
+ ) : (
+ <>
+
+ Load more
+ >
+ )}
+
+ ) : null}
+
+
);
}
diff --git a/src/shared/widgets/local/follows.tsx b/src/shared/widgets/local/follows.tsx
deleted file mode 100644
index cb2836fb..00000000
--- a/src/shared/widgets/local/follows.tsx
+++ /dev/null
@@ -1,140 +0,0 @@
-import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
-import { useInfiniteQuery } from '@tanstack/react-query';
-import { useCallback, useMemo } from 'react';
-import { VList } from 'virtua';
-
-import { useStorage } from '@libs/storage/provider';
-
-import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
-import {
- MemoizedArticleNote,
- MemoizedFileNote,
- MemoizedRepost,
- MemoizedTextNote,
- NoteWrapper,
- UnknownNote,
-} from '@shared/notes';
-import { TitleBar } from '@shared/titleBar';
-import { WidgetWrapper } from '@shared/widgets';
-
-import { DBEvent, Widget } from '@utils/types';
-
-export function LocalFollowsWidget({ params }: { params: Widget }) {
- const { db } = useStorage();
- const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
- useInfiniteQuery({
- queryKey: ['follows-' + params.title],
- initialPageParam: 0,
- queryFn: async ({ pageParam = 0 }) => {
- return await db.getAllEventsByAuthors(db.account.follows, 20, pageParam);
- },
- getNextPageParam: (lastPage) => lastPage.nextCursor,
- });
-
- const dbEvents = useMemo(
- () => (data ? data.pages.flatMap((d: { data: DBEvent[] }) => d.data) : []),
- [data]
- );
-
- // render event match event kind
- const renderItem = useCallback(
- (dbEvent: DBEvent) => {
- const event: NDKEvent = JSON.parse(dbEvent.event as string);
- switch (event.kind) {
- case NDKKind.Text:
- return (
-
-
-
- );
- case NDKKind.Repost:
- return
;
- case 1063:
- return (
-
-
-
- );
- case NDKKind.Article:
- return (
-
-
-
- );
- default:
- return (
-
-
-
- );
- }
- },
- [dbEvents]
- );
-
- return (
-
-
-
- {status === 'pending' ? (
-
-
-
-
- Loading post...
-
-
-
- ) : dbEvents.length === 0 ? (
-
-
-
-
-
- Oops, it looks like there are no posts.
-
-
- You can close this widget
-
-
-
-
- ) : (
-
- {dbEvents.map((item) => renderItem(item))}
-
- {dbEvents.length > 0 ? (
-
fetchNextPage()}
- disabled={!hasNextPage || isFetchingNextPage}
- className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
- >
- {isFetchingNextPage ? (
- <>
- Loading...
-
- >
- ) : hasNextPage ? (
- <>
-
- Load more
- >
- ) : (
- <>
-
- Nothing more to load
- >
- )}
-
- ) : null}
-
-
-
- )}
-
-
- );
-}
diff --git a/src/shared/widgets/local/user.tsx b/src/shared/widgets/local/user.tsx
index c436ebc6..4f6311f7 100644
--- a/src/shared/widgets/local/user.tsx
+++ b/src/shared/widgets/local/user.tsx
@@ -26,14 +26,30 @@ export function LocalUserWidget({ params }: { params: Widget }) {
const { status, data } = useQuery({
queryKey: ['user-posts', params.content],
queryFn: async () => {
+ const rootIds = new Set();
+ const dedupQueue = new Set();
+
const events = await ndk.fetchEvents({
// @ts-expect-error, NDK not support file metadata yet
kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
authors: [params.content],
since: nHoursAgo(24),
});
- const sortedEvents = [...events].sort((x, y) => y.created_at - x.created_at);
- return sortedEvents;
+
+ const ndkEvents = [...events];
+
+ ndkEvents.forEach((event) => {
+ const tags = event.tags.filter((el) => el[0] === 'e');
+ if (tags && tags.length > 0) {
+ const rootId = tags.filter((el) => el[3] === 'root')[1] ?? tags[0][1];
+ if (rootIds.has(rootId)) return dedupQueue.add(event.id);
+ rootIds.add(rootId);
+ }
+ });
+
+ return ndkEvents
+ .filter((event) => !dedupQueue.has(event.id))
+ .sort((a, b) => b.created_at - a.created_at);
},
staleTime: Infinity,
refetchOnMount: false,
diff --git a/src/shared/widgets/newsfeed.tsx b/src/shared/widgets/newsfeed.tsx
index fa6a7f74..ab080eae 100644
--- a/src/shared/widgets/newsfeed.tsx
+++ b/src/shared/widgets/newsfeed.tsx
@@ -1,6 +1,6 @@
import { NDKEvent, NDKFilter, NDKKind } from '@nostr-dev-kit/ndk';
-import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
-import { useCallback, useEffect } from 'react';
+import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query';
+import { useCallback, useEffect, useMemo } from 'react';
import { VList } from 'virtua';
import { useNDK } from '@libs/ndk/provider';
@@ -19,92 +19,66 @@ import {
import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
-import { nHoursAgo } from '@utils/date';
import { useNostr } from '@utils/hooks/useNostr';
export function NewsfeedWidget() {
+ const queryClient = useQueryClient();
+
const { db } = useStorage();
const { sub } = useNostr();
const { relayUrls, ndk, fetcher } = useNDK();
- const { status, data } = useQuery({
- queryKey: ['newsfeed'],
- queryFn: async ({ signal }: { signal: AbortSignal }) => {
- const rootIds = new Set();
- const dedupQueue = new Set();
+ const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
+ useInfiniteQuery({
+ queryKey: ['newsfeed'],
+ initialPageParam: 0,
+ queryFn: async ({
+ signal,
+ pageParam,
+ }: {
+ signal: AbortSignal;
+ pageParam: number;
+ }) => {
+ const rootIds = new Set();
+ const dedupQueue = new Set();
- const events = await fetcher.fetchAllEvents(
- relayUrls,
- {
- kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
- authors: db.account.circles,
- },
- {
- since: db.account.last_login_at === 0 ? nHoursAgo(4) : db.account.last_login_at,
- },
- { abortSignal: signal }
- );
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
+ authors: db.account.circles,
+ },
+ 50,
+ { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
+ );
- const ndkEvents = events.map((event) => {
- return new NDKEvent(ndk, event);
- });
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
- ndkEvents.forEach((event) => {
- const tags = event.tags.filter((el) => el[0] === 'e');
- if (tags && tags.length > 0) {
- const rootId = tags.filter((el) => el[3] === 'root')[1] ?? tags[0][1];
- if (rootIds.has(rootId)) return dedupQueue.add(event.id);
- rootIds.add(rootId);
- }
- });
+ ndkEvents.forEach((event) => {
+ const tags = event.tags.filter((el) => el[0] === 'e');
+ if (tags && tags.length > 0) {
+ const rootId = tags.filter((el) => el[3] === 'root')[1] ?? tags[0][1];
+ if (rootIds.has(rootId)) return dedupQueue.add(event.id);
+ rootIds.add(rootId);
+ }
+ });
- return ndkEvents
- .filter((event) => !dedupQueue.has(event.id))
- .sort((a, b) => b.created_at - a.created_at);
- },
- });
+ return ndkEvents
+ .filter((event) => !dedupQueue.has(event.id))
+ .sort((a, b) => b.created_at - a.created_at);
+ },
+ getNextPageParam: (lastPage) => {
+ const lastEvent = lastPage.at(-1);
+ if (!lastEvent) return;
+ return lastEvent.created_at - 1;
+ },
+ });
- const queryClient = useQueryClient();
- const mutation = useMutation({
- mutationFn: async () => {
- const currentLastEvent = data.at(-1);
- const lastCreatedAt = currentLastEvent.created_at - 1;
-
- const rootIds = new Set();
- const dedupQueue = new Set();
-
- const events = await fetcher.fetchLatestEvents(
- relayUrls,
- {
- kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article],
- authors: db.account.circles,
- },
- 100,
- {
- asOf: lastCreatedAt,
- }
- );
-
- const ndkEvents = events.map((event) => {
- return new NDKEvent(ndk, event);
- });
-
- ndkEvents.forEach((event) => {
- const tags = event.tags.filter((el) => el[0] === 'e');
- if (tags && tags.length > 0) {
- const rootId = tags.filter((el) => el[3] === 'root')[1] ?? tags[0][1];
- if (rootIds.has(rootId)) return dedupQueue.add(event.id);
- rootIds.add(rootId);
- }
- });
-
- return ndkEvents
- .filter((event) => !dedupQueue.has(event.id))
- .sort((a, b) => b.created_at - a.created_at);
- },
- onSuccess: async (data) => {
- queryClient.setQueryData(['newsfeed'], (old: NDKEvent[]) => [...old, ...data]);
- },
- });
+ const allEvents = useMemo(
+ () => (data ? data.pages.flatMap((page) => page) : []),
+ [data]
+ );
const renderItem = useCallback((event: NDKEvent) => {
switch (event.kind) {
@@ -138,46 +112,55 @@ export function NewsfeedWidget() {
}, []);
useEffect(() => {
- if (db.account && db.account.circles.length > 0) {
+ if (status === 'success' && db.account && db.account.circles.length > 0) {
+ queryClient.fetchQuery({ queryKey: ['notification'] });
+
const filter: NDKFilter = {
kinds: [NDKKind.Text, NDKKind.Repost],
authors: db.account.circles,
since: Math.floor(Date.now() / 1000),
};
- sub(filter, async (event) => {
- queryClient.setQueryData(['newsfeed'], (old: NDKEvent[]) => [event, ...old]);
- });
+ sub(
+ filter,
+ async (event) => {
+ queryClient.setQueryData(['newsfeed'], (old: NDKEvent[]) => [event, ...old]);
+ },
+ false,
+ 'newsfeed'
+ );
}
- }, []);
+ }, [status]);
return (
{status === 'pending' ? (
-
-
-
-
+
) : (
- data.map((item) => renderItem(item))
+ allEvents.map((item) => renderItem(item))
)}
- {data ? (
+ {hasNextPage ? (
mutation.mutate()}
+ onClick={() => fetchNextPage()}
+ disabled={!hasNextPage || isFetchingNextPage}
className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
>
-
- Load more
+ {isFetchingNextPage ? (
+
+ ) : (
+ <>
+
+ Load more
+ >
+ )}
) : null}
diff --git a/src/shared/widgets/notification.tsx b/src/shared/widgets/notification.tsx
index b0134c56..104226d5 100644
--- a/src/shared/widgets/notification.tsx
+++ b/src/shared/widgets/notification.tsx
@@ -1,59 +1,145 @@
-import { NDKEvent } from '@nostr-dev-kit/ndk';
-import { useCallback, useEffect } from 'react';
+import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
+import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query';
+import { useCallback, useEffect, useMemo } from 'react';
import { VList } from 'virtua';
+import { useNDK } from '@libs/ndk/provider';
import { useStorage } from '@libs/storage/provider';
-import { LoaderIcon } from '@shared/icons';
+import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
+import { NoteSkeleton } from '@shared/notes';
import { NotifyNote } from '@shared/notification/notifyNote';
import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets';
-import { useActivities } from '@stores/activities';
-
import { useNostr } from '@utils/hooks/useNostr';
-import { Widget } from '@utils/types';
+import { sendNativeNotification } from '@utils/notification';
+
+export function NotificationWidget() {
+ const queryClient = useQueryClient();
-export function LocalNotificationWidget({ params }: { params: Widget }) {
const { db } = useStorage();
- const { getAllActivities } = useNostr();
+ const { sub } = useNostr();
+ const { ndk, relayUrls, fetcher } = useNDK();
+ const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
+ useInfiniteQuery({
+ queryKey: ['notification'],
+ initialPageParam: 0,
+ queryFn: async ({
+ signal,
+ pageParam,
+ }: {
+ signal: AbortSignal;
+ pageParam: number;
+ }) => {
+ const events = await fetcher.fetchLatestEvents(
+ relayUrls,
+ {
+ kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Reaction, NDKKind.Zap],
+ '#p': [db.account.pubkey],
+ },
+ 50,
+ { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
+ );
- const [activities, setActivities] = useActivities((state) => [
- state.activities,
- state.setActivities,
- ]);
+ const ndkEvents = events.map((event) => {
+ return new NDKEvent(ndk, event);
+ });
- const renderEvent = useCallback(
- (event: NDKEvent) => {
- if (event.pubkey === db.account.pubkey) return null;
- return
;
- },
- [activities]
+ return ndkEvents.sort((a, b) => b.created_at - a.created_at);
+ },
+ getNextPageParam: (lastPage) => {
+ const lastEvent = lastPage.at(-1);
+ if (!lastEvent) return;
+ return lastEvent.created_at - 1;
+ },
+ enabled: false,
+ });
+
+ const allEvents = useMemo(
+ () => (data ? data.pages.flatMap((page) => page) : []),
+ [data]
);
- useEffect(() => {
- async function getActivities() {
- const events = await getAllActivities(48);
- setActivities(events);
- }
-
- getActivities();
+ const renderEvent = useCallback((event: NDKEvent) => {
+ if (event.pubkey === db.account.pubkey) return null;
+ return
;
}, []);
+ useEffect(() => {
+ if (status === 'success' && db.account) {
+ const filter = {
+ kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Reaction, NDKKind.Zap],
+ '#p': [db.account.pubkey],
+ since: Math.floor(Date.now() / 1000),
+ };
+
+ sub(
+ filter,
+ async (event) => {
+ queryClient.setQueryData(['notification'], (old: NDKEvent[]) => [
+ event,
+ ...old,
+ ]);
+
+ const user = ndk.getUser({ hexpubkey: event.pubkey });
+ await user.fetchProfile();
+
+ switch (event.kind) {
+ case NDKKind.Text:
+ return await sendNativeNotification(
+ `${
+ user.profile.displayName || user.profile.name
+ } has replied to your note`
+ );
+ case NDKKind.EncryptedDirectMessage: {
+ if (location.pathname !== '/chats') {
+ return await sendNativeNotification(
+ `${
+ user.profile.displayName || user.profile.name
+ } has send you a encrypted message`
+ );
+ } else {
+ break;
+ }
+ }
+ case NDKKind.Repost:
+ return await sendNativeNotification(
+ `${
+ user.profile.displayName || user.profile.name
+ } has reposted to your note`
+ );
+ case NDKKind.Reaction:
+ return await sendNativeNotification(
+ `${user.profile.displayName || user.profile.name} has reacted ${
+ event.content
+ } to your note`
+ );
+ case NDKKind.Zap:
+ return await sendNativeNotification(
+ `${user.profile.displayName || user.profile.name} has zapped to your note`
+ );
+ default:
+ break;
+ }
+ },
+ false,
+ 'notification'
+ );
+ }
+ }, [status]);
+
return (
-
-
- {!activities ? (
-
-
-
-
- Loading...
-
+
+
+ {status === 'pending' ? (
+
- ) : activities.length < 1 ? (
+ ) : allEvents.length < 1 ? (
🎉
@@ -61,12 +147,28 @@ export function LocalNotificationWidget({ params }: { params: Widget }) {
) : (
-
- {activities.map((event) => renderEvent(event))}
-
-
+ allEvents.map((event) => renderEvent(event))
)}
-
+
+ {hasNextPage ? (
+
fetchNextPage()}
+ disabled={!hasNextPage || isFetchingNextPage}
+ className="inline-flex h-10 w-max items-center justify-center gap-2 rounded-full bg-blue-500 px-6 font-medium text-white hover:bg-blue-600 focus:outline-none"
+ >
+ {isFetchingNextPage ? (
+
+ ) : (
+ <>
+
+ Load more
+ >
+ )}
+
+ ) : null}
+
+
);
}
diff --git a/src/shared/widgets/other/learnNostr.tsx b/src/shared/widgets/other/learnNostr.tsx
deleted file mode 100644
index 0888a746..00000000
--- a/src/shared/widgets/other/learnNostr.tsx
+++ /dev/null
@@ -1,70 +0,0 @@
-import { useNavigate } from 'react-router-dom';
-
-import { ArrowRightIcon } from '@shared/icons';
-import { TitleBar } from '@shared/titleBar';
-import { WidgetWrapper } from '@shared/widgets';
-
-import { useResources } from '@stores/resources';
-
-import { Widget } from '@utils/types';
-
-export function LearnNostrWidget({ params }: { params: Widget }) {
- const navigate = useNavigate();
- const openResource = useResources((state) => state.openResource);
- const resources = useResources((state) => state.resources);
- const seens = useResources((state) => state.seens);
-
- const open = (naddr: string) => {
- // add resource to seen list
- openResource(naddr);
- // redirect
- navigate(`/notes/article/${naddr}`);
- };
-
- return (
-
-
-
- {resources.map((resource, index) => (
-
-
- {resource.title}
-
-
- {resource.data.length ? (
- resource.data.map((item, index) => (
-
open(item.id)}
- className="flex items-center justify-between rounded-xl bg-neutral-100 px-4 py-3 hover:bg-neutral-200 dark:bg-neutral-900 dark:hover:bg-neutral-800"
- >
-
-
- {item.title}
-
- {seens.has(item.id) ? (
-
Readed
- ) : (
-
- Unread
-
- )}
-
-
-
- ))
- ) : (
-
-
- More resources are coming, stay tuned.
-
-
- )}
-
-
- ))}
-
-
- );
-}
diff --git a/src/shared/widgets/tmp/feeds.tsx b/src/shared/widgets/tmp/feeds.tsx
index d046c159..2178a404 100644
--- a/src/shared/widgets/tmp/feeds.tsx
+++ b/src/shared/widgets/tmp/feeds.tsx
@@ -5,17 +5,15 @@ import { useStorage } from '@libs/storage/provider';
import { ArrowRightCircleIcon, CheckCircleIcon } from '@shared/icons';
import { User } from '@shared/user';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { WidgetKinds } from '@stores/constants';
+import { useWidget } from '@utils/hooks/useWidget';
import { Widget } from '@utils/types';
export function XfeedsWidget({ params }: { params: Widget }) {
const { db } = useStorage();
+ const { addWidget, removeWidget } = useWidget();
- const [setWidget, removeWidget] = useWidgets((state) => [
- state.setWidget,
- state.removeWidget,
- ]);
const [title, setTitle] = useState
('');
const [groups, setGroups] = useState>([]);
@@ -28,17 +26,17 @@ export function XfeedsWidget({ params }: { params: Widget }) {
};
const cancel = () => {
- removeWidget(db, params.id);
+ removeWidget.mutate(params.id);
};
const submit = async () => {
- setWidget(db, {
+ addWidget.mutate({
kind: WidgetKinds.local.feeds,
title: title || 'Group',
content: JSON.stringify(groups),
});
// remove temp widget
- removeWidget(db, params.id);
+ removeWidget.mutate(params.id);
};
return (
diff --git a/src/shared/widgets/tmp/hashtag.tsx b/src/shared/widgets/tmp/hashtag.tsx
index 973dd9a7..278abd4a 100644
--- a/src/shared/widgets/tmp/hashtag.tsx
+++ b/src/shared/widgets/tmp/hashtag.tsx
@@ -1,11 +1,10 @@
import { Resolver, useForm } from 'react-hook-form';
-import { useStorage } from '@libs/storage/provider';
-
import { ArrowRightCircleIcon } from '@shared/icons';
-import { WidgetKinds, useWidgets } from '@stores/widgets';
+import { WidgetKinds } from '@stores/constants';
+import { useWidget } from '@utils/hooks/useWidget';
import { Widget } from '@utils/types';
type FormValues = {
@@ -27,12 +26,7 @@ const resolver: Resolver = async (values) => {
};
export function XhashtagWidget({ params }: { params: Widget }) {
- const [setWidget, removeWidget] = useWidgets((state) => [
- state.setWidget,
- state.removeWidget,
- ]);
-
- const { db } = useStorage();
+ const { addWidget, removeWidget } = useWidget();
const {
register,
setError,
@@ -41,18 +35,18 @@ export function XhashtagWidget({ params }: { params: Widget }) {
} = useForm({ resolver });
const cancel = () => {
- removeWidget(db, params.id);
+ removeWidget.mutate(params.id);
};
const onSubmit = async (data: FormValues) => {
try {
- setWidget(db, {
+ addWidget.mutate({
kind: WidgetKinds.global.hashtag,
title: data.hashtag,
content: data.hashtag.replace('#', ''),
});
// remove temp widget
- removeWidget(db, params.id);
+ removeWidget.mutate(params.id);
} catch (e) {
setError('hashtag', {
type: 'custom',
diff --git a/src/stores/activities.ts b/src/stores/activities.ts
deleted file mode 100644
index 0265a9e5..00000000
--- a/src/stores/activities.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { NDKEvent } from '@nostr-dev-kit/ndk';
-import { create } from 'zustand';
-
-interface ActivitiesState {
- activities: Array;
- newMessages: number;
- setActivities: (events: NDKEvent[]) => void;
- addActivity: (event: NDKEvent) => void;
- addNewMessage: () => void;
- clearNewMessage: () => void;
-}
-
-export const useActivities = create((set) => ({
- activities: null,
- newMessages: 0,
- setActivities: (events: NDKEvent[]) => {
- set(() => ({
- activities: events,
- }));
- },
- addActivity: (event: NDKEvent) => {
- set((state) => ({
- activities: state.activities ? [event, ...state.activities] : [event],
- }));
- },
- addNewMessage: () => {
- set((state) => ({ newMessages: state.newMessages + 1 }));
- },
- clearNewMessage: () => {
- set(() => ({ newMessages: 0 }));
- },
-}));
diff --git a/src/stores/constants.ts b/src/stores/constants.ts
index 5a76cdfc..46bc3f2c 100644
--- a/src/stores/constants.ts
+++ b/src/stores/constants.ts
@@ -1,3 +1,5 @@
+import { WidgetGroup } from '@utils/types';
+
export const FULL_RELAYS = [
'wss://relay.damus.io',
'wss://relay.primal.net',
@@ -5,3 +7,104 @@ export const FULL_RELAYS = [
'wss://relay.nostr.band/all',
'wss://nostr.mutinywallet.com',
];
+
+export const FETCH_LIMIT = 50;
+
+export const WidgetKinds = {
+ local: {
+ network: 100,
+ feeds: 101,
+ files: 102,
+ articles: 103,
+ user: 104,
+ thread: 105,
+ follows: 106,
+ notification: 107,
+ },
+ global: {
+ feeds: 1000,
+ files: 1001,
+ articles: 1002,
+ hashtag: 1003,
+ },
+ nostrBand: {
+ trendingAccounts: 1,
+ trendingNotes: 2,
+ },
+ other: {
+ learnNostr: 90000,
+ },
+ tmp: {
+ list: 10000,
+ xfeed: 10001,
+ xhashtag: 10002,
+ },
+};
+
+export const DefaultWidgets: Array = [
+ {
+ title: 'Circles / Follows',
+ data: [
+ {
+ kind: WidgetKinds.tmp.xfeed,
+ title: 'Group feeds',
+ description: 'All posts from specific people you want to keep up with',
+ },
+ {
+ kind: WidgetKinds.local.files,
+ title: 'Files',
+ description: 'All files shared by people in your circle',
+ },
+ {
+ kind: WidgetKinds.local.articles,
+ title: 'Articles',
+ description: 'All articles shared by people in your circle',
+ },
+ ],
+ },
+ {
+ title: 'Global',
+ data: [
+ {
+ kind: WidgetKinds.tmp.xhashtag,
+ title: 'Hashtag',
+ description: 'All posts have a specific hashtag',
+ },
+ {
+ kind: WidgetKinds.global.files,
+ title: 'Files',
+ description: 'All files shared by people in your current relay set',
+ },
+ {
+ kind: WidgetKinds.global.articles,
+ title: 'Articles',
+ description: 'All articles shared by people in your current relay set',
+ },
+ ],
+ },
+ {
+ title: 'nostr.band',
+ data: [
+ {
+ kind: WidgetKinds.nostrBand.trendingAccounts,
+ title: 'Accounts',
+ description: 'Trending accounts from the last 24 hours',
+ },
+ {
+ kind: WidgetKinds.nostrBand.trendingNotes,
+ title: 'Notes',
+ description: 'Trending notes from the last 24 hours',
+ },
+ ],
+ },
+ {
+ title: 'Other',
+ data: [
+ {
+ kind: WidgetKinds.local.notification,
+ title: 'Notification',
+ description: 'Everything happens around you',
+ },
+ ],
+ },
+];
diff --git a/src/stores/widgets.ts b/src/stores/widgets.ts
deleted file mode 100644
index d572b053..00000000
--- a/src/stores/widgets.ts
+++ /dev/null
@@ -1,183 +0,0 @@
-import { create } from 'zustand';
-import { createJSONStorage, persist } from 'zustand/middleware';
-
-import { LumeStorage } from '@libs/storage/instance';
-
-import { Widget, WidgetGroup } from '@utils/types';
-
-interface WidgetState {
- widgets: null | Array;
- isFetched: boolean;
- fetchWidgets: (db: LumeStorage) => void;
- setWidget: (db: LumeStorage, { kind, title, content }: Widget) => void;
- removeWidget: (db: LumeStorage, id: string) => void;
- reorderWidget: (id: string, position: number) => void;
- setIsFetched: () => void;
-}
-
-export const WidgetKinds = {
- local: {
- network: 100,
- feeds: 101,
- files: 102,
- articles: 103,
- user: 104,
- thread: 105,
- follows: 106,
- notification: 107,
- },
- global: {
- feeds: 1000,
- files: 1001,
- articles: 1002,
- hashtag: 1003,
- },
- nostrBand: {
- trendingAccounts: 1,
- trendingNotes: 2,
- },
- other: {
- learnNostr: 90000,
- },
- tmp: {
- list: 10000,
- xfeed: 10001,
- xhashtag: 10002,
- },
-};
-
-export const DefaultWidgets: Array = [
- {
- title: 'Circles / Follows',
- data: [
- {
- kind: WidgetKinds.tmp.xfeed,
- title: 'Group feeds',
- description: 'All posts from specific people you want to keep up with',
- },
- {
- kind: WidgetKinds.local.files,
- title: 'Files',
- description: 'All files shared by people in your circle',
- },
- {
- kind: WidgetKinds.local.articles,
- title: 'Articles',
- description: 'All articles shared by people in your circle',
- },
- {
- kind: WidgetKinds.local.follows,
- title: 'Follows',
- description: 'All posts from people you are following',
- },
- ],
- },
- {
- title: 'Global',
- data: [
- {
- kind: WidgetKinds.tmp.xhashtag,
- title: 'Hashtag',
- description: 'All posts have a specific hashtag',
- },
- {
- kind: WidgetKinds.global.files,
- title: 'Files',
- description: 'All files shared by people in your current relay set',
- },
- {
- kind: WidgetKinds.global.articles,
- title: 'Articles',
- description: 'All articles shared by people in your current relay set',
- },
- ],
- },
- {
- title: 'nostr.band',
- data: [
- {
- kind: WidgetKinds.nostrBand.trendingAccounts,
- title: 'Accounts',
- description: 'Trending accounts from the last 24 hours',
- },
- {
- kind: WidgetKinds.nostrBand.trendingNotes,
- title: 'Notes',
- description: 'Trending notes from the last 24 hours',
- },
- ],
- },
- {
- title: 'Other',
- data: [
- {
- kind: WidgetKinds.local.notification,
- title: 'Notification',
- description: 'Everything happens around you',
- },
- {
- kind: WidgetKinds.other.learnNostr,
- title: 'Learn Nostr',
- description: 'All things you need to know about Nostr',
- },
- ],
- },
-];
-
-export const useWidgets = create()(
- persist(
- (set) => ({
- widgets: null,
- isFetched: false,
- fetchWidgets: async (db: LumeStorage) => {
- const dbWidgets = await db.getWidgets();
-
- /*
- dbWidgets.unshift({
- id: '9998',
- title: 'Notification',
- content: '',
- kind: WidgetKinds.local.notification,
- });
- */
-
- dbWidgets.unshift({
- id: '9999',
- title: '',
- content: '',
- kind: WidgetKinds.local.network,
- });
-
- set({ widgets: dbWidgets });
- },
- setWidget: async (db: LumeStorage, { kind, title, content }: Widget) => {
- const widget: Widget = await db.createWidget(kind, title, content);
- set((state) => ({ widgets: [...state.widgets, widget] }));
- },
- removeWidget: async (db: LumeStorage, id: string) => {
- await db.removeWidget(id);
- set((state) => ({ widgets: state.widgets.filter((widget) => widget.id !== id) }));
- },
- reorderWidget: (id: string, position: number) => {
- set((state) => {
- const widgets = [...state.widgets];
- const widget = widgets.find((widget) => widget.id === id);
- if (!widget) return { widgets };
-
- const idx = widgets.indexOf(widget);
- widgets.splice(idx, 1);
- widgets.splice(position, 0, widget);
-
- return { widgets };
- });
- },
- setIsFetched: () => {
- set({ isFetched: true });
- },
- }),
- {
- name: 'widgets',
- storage: createJSONStorage(() => sessionStorage),
- }
- )
-);
diff --git a/src/utils/hooks/useNostr.ts b/src/utils/hooks/useNostr.ts
index ed44e08e..00145054 100644
--- a/src/utils/hooks/useNostr.ts
+++ b/src/utils/hooks/useNostr.ts
@@ -29,11 +29,12 @@ export function useNostr() {
const sub = async (
filter: NDKFilter,
callback: (event: NDKEvent) => void,
- groupable?: boolean
+ groupable?: boolean,
+ subKey?: string
) => {
if (!ndk) throw new Error('NDK instance not found');
- const key = JSON.stringify(filter);
+ const key = subKey ?? JSON.stringify(filter);
if (!subManager.get(key)) {
const subEvent = ndk.subscribe(filter, {
closeOnEose: false,
diff --git a/src/utils/hooks/useWidget.ts b/src/utils/hooks/useWidget.ts
new file mode 100644
index 00000000..b2203162
--- /dev/null
+++ b/src/utils/hooks/useWidget.ts
@@ -0,0 +1,30 @@
+import { useMutation, useQueryClient } from '@tanstack/react-query';
+
+import { useStorage } from '@libs/storage/provider';
+
+import { Widget } from '@utils/types';
+
+export function useWidget() {
+ const { db } = useStorage();
+ const queryClient = useQueryClient();
+
+ const addWidget = useMutation({
+ mutationFn: async (widget: Widget) => {
+ return await db.createWidget(widget.kind, widget.title, widget.content);
+ },
+ onSuccess: (data) => {
+ queryClient.setQueryData(['widgets'], (old: Widget[]) => [...old, data]);
+ },
+ });
+
+ const removeWidget = useMutation({
+ mutationFn: async (id: string) => {
+ return await db.removeWidget(id);
+ },
+ onSuccess: () => {
+ queryClient.invalidateQueries({ queryKey: ['widgets'] });
+ },
+ });
+
+ return { addWidget, removeWidget };
+}
From e218ebee8906a0e3ad89cbaa8bac689be6cf874b Mon Sep 17 00:00:00 2001
From: reya
Date: Wed, 1 Nov 2023 10:05:08 +0700
Subject: [PATCH 09/14] refactor text parser
---
package.json | 2 +
pnpm-lock.yaml | 74 +++++++-----
src/shared/notes/kinds/text.tsx | 37 +++++-
src/shared/notes/mentions/note.tsx | 7 +-
src/shared/widgets/newsfeed.tsx | 8 +-
src/shared/widgets/notification.tsx | 11 +-
src/utils/parser.ts | 132 +++++++++++++++++++++
src/utils/parser.tsx | 173 ----------------------------
src/utils/types.d.ts | 3 +-
9 files changed, 234 insertions(+), 213 deletions(-)
create mode 100644 src/utils/parser.ts
delete mode 100644 src/utils/parser.tsx
diff --git a/package.json b/package.json
index 0b7e1437..b2767e85 100644
--- a/package.json
+++ b/package.json
@@ -63,8 +63,10 @@
"destr": "^2.0.2",
"framer-motion": "^10.16.4",
"html-to-text": "^9.0.5",
+ "immer": "^10.0.3",
"light-bolt11-decoder": "^3.0.0",
"lru-cache": "^10.0.1",
+ "markdown-to-jsx": "^7.3.2",
"media-chrome": "^1.4.5",
"million": "^2.6.4",
"minidenticons": "^4.2.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b3f5fdfd..5a0dd272 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -140,12 +140,18 @@ dependencies:
html-to-text:
specifier: ^9.0.5
version: 9.0.5
+ immer:
+ specifier: ^10.0.3
+ version: 10.0.3
light-bolt11-decoder:
specifier: ^3.0.0
version: 3.0.0
lru-cache:
specifier: ^10.0.1
version: 10.0.1
+ markdown-to-jsx:
+ specifier: ^7.3.2
+ version: 7.3.2(react@18.2.0)
media-chrome:
specifier: ^1.4.5
version: 1.4.5
@@ -193,7 +199,7 @@ dependencies:
version: 1.1.1
reactflow:
specifier: ^11.9.4
- version: 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ version: 11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
rehype-external-links:
specifier: ^3.0.0
version: 3.0.0
@@ -220,7 +226,7 @@ dependencies:
version: 0.15.6(react-dom@18.2.0)(react@18.2.0)
zustand:
specifier: ^4.4.4
- version: 4.4.4(@types/react@18.2.33)(react@18.2.0)
+ version: 4.4.4(@types/react@18.2.33)(immer@10.0.3)(react@18.2.0)
devDependencies:
'@tailwindcss/typography':
@@ -1792,39 +1798,39 @@ packages:
'@babel/runtime': 7.23.2
dev: false
- /@reactflow/background@11.3.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/background@11.3.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-bgwvqWxF09chwmdkyClpYEMaewBspdwjgLbbFlLf4SpWPFMYyuvCBQrcISsvy/EDEWO9i3Uj9ktgGAhvtSQsmA==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/controls@11.2.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/controls@11.2.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-x6e5p9iHjC6gd+4SoZ3DOOp0F1MefGKQ8hT6yPVdqxfo1+rV2WhrWvrX/MCoEu12Dp7457LdLfa0giy3aho8tQ==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/core@11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/core@11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Ko7nKPOYalwDTTbRHi2+QXDiidSAcpUzGN3G+0B+QysLZkcaPCkpkMjjHiDC4c/Z1BJBzs1FRJg/T6BXaBnYkg==}
peerDependencies:
react: '>=17'
@@ -1840,19 +1846,19 @@ packages:
d3-zoom: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/minimap@11.7.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/minimap@11.7.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Jo1R+uDey9IV7O2s3m0gK2+cZpg9M8hq2EZJb3NGfOSzMAPhj3mby0fNJIgTzycreuht0TpA51c2YfjGI3YIOw==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
'@types/d3-selection': 3.0.8
'@types/d3-zoom': 3.0.6
classcat: 5.0.4
@@ -1860,41 +1866,41 @@ packages:
d3-zoom: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/node-resizer@2.2.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/node-resizer@2.2.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-+p271/hAsM5M1+RQTWW/02pbNkCHeGXwxGimIlL1tMIagyuko0NX2vOz2B8jxJnPKlF09Wj18BcXBNUm3nDcSg==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
d3-drag: 3.0.0
d3-selection: 3.0.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
dev: false
- /@reactflow/node-toolbar@1.3.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
+ /@reactflow/node-toolbar@1.3.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-TfcmpXHRBb2mUfzKGjburiU6FWqRME9pPFs1OwIC1z5e9BjupQhNDEKEk8XHi7PKL/mAiDfwuGXaM1BVVFuPqw==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
classcat: 5.0.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- zustand: 4.4.4(@types/react@18.2.33)(react@18.2.0)
+ zustand: 4.4.4(@types/react@18.2.33)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
- immer
@@ -4445,6 +4451,10 @@ packages:
engines: {node: '>= 4'}
dev: true
+ /immer@10.0.3:
+ resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==}
+ dev: false
+
/import-fresh@3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
@@ -4922,6 +4932,15 @@ packages:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: false
+ /markdown-to-jsx@7.3.2(react@18.2.0):
+ resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==}
+ engines: {node: '>= 10'}
+ peerDependencies:
+ react: '>= 0.14.0'
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/mdast-util-find-and-replace@3.0.1:
resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
dependencies:
@@ -6122,18 +6141,18 @@ packages:
loose-envify: 1.4.0
dev: false
- /reactflow@11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0):
+ /reactflow@11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-IHAKBkJngNvU9y1vZ5Nw9rvA3Z+zc9geTgQQIi9qq9Y9knGLlDDr9KfsjbFMew9AycAAgVg8TvBEakF4IT5lqg==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
dependencies:
- '@reactflow/background': 11.3.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/controls': 11.2.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/core': 11.9.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/minimap': 11.7.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/node-resizer': 2.2.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
- '@reactflow/node-toolbar': 1.3.4(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/background': 11.3.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/controls': 11.2.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/core': 11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/minimap': 11.7.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/node-resizer': 2.2.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
+ '@reactflow/node-toolbar': 1.3.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
@@ -7117,7 +7136,7 @@ packages:
engines: {node: '>=10'}
dev: true
- /zustand@4.4.4(@types/react@18.2.33)(react@18.2.0):
+ /zustand@4.4.4(@types/react@18.2.33)(immer@10.0.3)(react@18.2.0):
resolution: {integrity: sha512-5UTUIAiHMNf5+mFp7/AnzJXS7+XxktULFN0+D1sCiZWyX7ZG+AQpqs2qpYrynRij4QvoDdCD+U+bmg/cG3Ucxw==}
engines: {node: '>=12.7.0'}
peerDependencies:
@@ -7133,6 +7152,7 @@ packages:
optional: true
dependencies:
'@types/react': 18.2.33
+ immer: 10.0.3
react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx
index 47064ec0..857c5fc0 100644
--- a/src/shared/notes/kinds/text.tsx
+++ b/src/shared/notes/kinds/text.tsx
@@ -1,6 +1,16 @@
+import Markdown from 'markdown-to-jsx';
import { memo } from 'react';
-import { ImagePreview, LinkPreview, MentionNote, VideoPreview } from '@shared/notes';
+import {
+ Boost,
+ Hashtag,
+ ImagePreview,
+ Invoice,
+ LinkPreview,
+ MentionNote,
+ MentionUser,
+ VideoPreview,
+} from '@shared/notes';
import { parser } from '@utils/parser';
@@ -17,9 +27,30 @@ export function TextNote(props: { content?: string; truncate?: boolean }) {
return (
-
+ str,
+ forceBlock: true,
+ enforceAtxHeadings: true,
+ }}
+ className="break-p prose prose-neutral max-w-none select-text whitespace-pre-line leading-normal dark:prose-invert prose-headings:mb-1 prose-headings:mt-3 prose-p:mb-0 prose-p:mt-0 prose-p:last:mb-1 prose-a:font-normal prose-a:text-blue-500 prose-blockquote:mb-1 prose-blockquote:mt-1 prose-blockquote:border-l-[2px] prose-blockquote:border-blue-500 prose-blockquote:pl-2 prose-pre:whitespace-pre-wrap prose-pre:bg-white/10 prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-ul:mt-1 prose-img:mb-2 prose-img:mt-3 prose-hr:mx-0 prose-hr:my-2 hover:prose-a:text-blue-600 prose-a:hover:underline"
+ >
{richContent.parsed}
-
+
{richContent.images.length ?
: null}
{richContent.videos.length ?
: null}
{richContent.links.length ?
: null}
diff --git a/src/shared/notes/mentions/note.tsx b/src/shared/notes/mentions/note.tsx
index e5de7205..059d5019 100644
--- a/src/shared/notes/mentions/note.tsx
+++ b/src/shared/notes/mentions/note.tsx
@@ -75,13 +75,14 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
}
return (
-
openThread(e, id)}
className="mt-3 cursor-default rounded-lg border border-neutral-300 bg-neutral-200 p-3 dark:border-neutral-700 dark:bg-neutral-800"
>
{renderKind(data)}
-
+
);
});
diff --git a/src/shared/widgets/newsfeed.tsx b/src/shared/widgets/newsfeed.tsx
index ab080eae..12a9c510 100644
--- a/src/shared/widgets/newsfeed.tsx
+++ b/src/shared/widgets/newsfeed.tsx
@@ -124,7 +124,13 @@ export function NewsfeedWidget() {
sub(
filter,
async (event) => {
- queryClient.setQueryData(['newsfeed'], (old: NDKEvent[]) => [event, ...old]);
+ queryClient.setQueryData(
+ ['newsfeed'],
+ (prev: { pageParams: number; pages: Array }) => ({
+ ...prev,
+ pages: [[event], ...prev.pages],
+ })
+ );
},
false,
'newsfeed'
diff --git a/src/shared/widgets/notification.tsx b/src/shared/widgets/notification.tsx
index 104226d5..2265803f 100644
--- a/src/shared/widgets/notification.tsx
+++ b/src/shared/widgets/notification.tsx
@@ -77,10 +77,13 @@ export function NotificationWidget() {
sub(
filter,
async (event) => {
- queryClient.setQueryData(['notification'], (old: NDKEvent[]) => [
- event,
- ...old,
- ]);
+ queryClient.setQueryData(
+ ['notification'],
+ (prev: { pageParams: number; pages: Array }) => ({
+ ...prev,
+ pages: [[event], ...prev.pages],
+ })
+ );
const user = ndk.getUser({ hexpubkey: event.pubkey });
await user.fetchProfile();
diff --git a/src/utils/parser.ts b/src/utils/parser.ts
new file mode 100644
index 00000000..42d1fac4
--- /dev/null
+++ b/src/utils/parser.ts
@@ -0,0 +1,132 @@
+import { nip19 } from 'nostr-tools';
+import {
+ AddressPointer,
+ EventPointer,
+ ProfilePointer,
+} from 'nostr-tools/lib/types/nip19';
+
+import { RichContent } from '@utils/types';
+
+function isURL(string: string) {
+ try {
+ const url = new URL(string);
+ if (url.protocol.length > 0) {
+ if (url.protocol === 'https:' || url.protocol === 'http:') {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+export function parser(content: string) {
+ const richContent: RichContent = {
+ parsed: null,
+ images: [],
+ videos: [],
+ links: [],
+ notes: [],
+ };
+
+ const parsed = content
+ .trim()
+ .split(/(\s+)/)
+ .map((word) => {
+ // url
+ if (isURL(word)) {
+ const url = new URL(word);
+ url.search = '';
+
+ if (url.pathname.match(/\.(jpg|jpeg|gif|png|webp|avif)$/)) {
+ // image url
+ richContent.images.push(word);
+ // remove url from original content
+ return word.replace(word, '');
+ }
+
+ if (url.pathname.match(/\.(mp4|mov|webm|wmv|flv|mts|avi|ogv|mkv|mp3|m3u8)$/)) {
+ // video url
+ richContent.videos.push(word);
+ // remove url from original content
+ return word.replace(word, '');
+ }
+
+ // normal url
+ if (richContent.links.length < 1) {
+ richContent.links.push(url.toString());
+ }
+ }
+
+ // hashtag
+ if (word.startsWith('#') && word.length > 1) {
+ return word.replace(word, ` `);
+ }
+
+ // boost
+ if (word.startsWith('$prism') && word.length > 1) {
+ return word.replace(word, ` `);
+ }
+
+ // nostr account references (depreciated)
+ if (word.startsWith('@npub1')) {
+ const npub = word.replace('@', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ return word.replace(
+ word,
+ ` `
+ );
+ }
+
+ // nostr account references
+ if (word.startsWith('nostr:npub1') || word.startsWith('npub1')) {
+ const npub = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ return word.replace(
+ word,
+ ` `
+ );
+ }
+
+ // nostr profile references
+ if (word.startsWith('nostr:nprofile1') || word.startsWith('nprofile1')) {
+ const nprofile = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ const decoded = nip19.decode(nprofile).data as ProfilePointer;
+ return word.replace(word, ` `);
+ }
+
+ // nostr address references
+ if (word.startsWith('nostr:naddr1') || word.startsWith('naddr1')) {
+ const naddr = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ const decoded = nip19.decode(naddr).data as AddressPointer;
+ return word.replace(word, ` `);
+ }
+
+ // lightning invoice
+ if (word.startsWith('lnbc') && word.length > 60) {
+ return word.replace(word, ` `);
+ }
+
+ // nostr note references
+ if (word.startsWith('nostr:note1') || word.startsWith('note1')) {
+ const note = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ richContent.notes.push(nip19.decode(note).data as string);
+ return word.replace(word, '');
+ }
+
+ // nostr event references
+ if (word.startsWith('nostr:nevent1') || word.startsWith('nevent1')) {
+ const nevent = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
+ const decoded = nip19.decode(nevent).data as EventPointer;
+ richContent.notes.push(decoded.id);
+ return word.replace(word, '');
+ }
+
+ return word;
+ });
+
+ // update content with parsed version
+ richContent.parsed = parsed.join(' ').trim();
+ return richContent;
+}
diff --git a/src/utils/parser.tsx b/src/utils/parser.tsx
deleted file mode 100644
index 2441dcf7..00000000
--- a/src/utils/parser.tsx
+++ /dev/null
@@ -1,173 +0,0 @@
-import { nip19 } from 'nostr-tools';
-import {
- AddressPointer,
- EventPointer,
- ProfilePointer,
-} from 'nostr-tools/lib/types/nip19';
-import { Link } from 'react-router-dom';
-import reactStringReplace from 'react-string-replace';
-
-import { Boost, Hashtag, Invoice, MentionUser } from '@shared/notes';
-
-import { RichContent } from '@utils/types';
-
-function isURL(string: string) {
- try {
- const url = new URL(string);
- if (url.protocol.length > 0) {
- if (url.protocol === 'https:' || url.protocol === 'http:') {
- return true;
- } else {
- return false;
- }
- }
- return true;
- } catch (e) {
- return false;
- }
-}
-
-export function parser(eventContent: string) {
- const content: RichContent = {
- parsed: null,
- images: [],
- videos: [],
- links: [],
- notes: [],
- };
-
- const parsed = eventContent.split(/\s/gm).map((word) => {
- // nostr note references
- if (word.startsWith('nostr:note1') || word.startsWith('note1')) {
- const note = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- content.notes.push(nip19.decode(note).data as string);
- return word.replace(word, ' ');
- }
-
- // nostr event references
- if (word.startsWith('nostr:nevent1') || word.startsWith('nevent1')) {
- const nevent = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- const decoded = nip19.decode(nevent).data as EventPointer;
- content.notes.push(decoded.id);
- return word.replace(word, ' ');
- }
-
- // url
- if (isURL(word)) {
- const url = new URL(word);
- url.search = '';
-
- if (url.pathname.match(/\.(jpg|jpeg|gif|png|webp|avif)$/)) {
- // image url
- content.images.push(word);
- // remove url from original content
- return word.replace(word, ' ');
- }
-
- if (url.pathname.match(/\.(mp4|mov|webm|wmv|flv|mts|avi|ogv|mkv|mp3|m3u8)$/)) {
- // video url
- content.videos.push(word);
- // remove url from original content
- return word.replace(word, ' ');
- }
-
- // normal url
- if (content.links.length < 1) {
- content.links.push(url.toString());
- return word.replace(word, ' ');
- } else {
- return reactStringReplace(word, word, (match, i) => (
- <>
- {' '}
-
- {word}
- {' '}
- >
- ));
- }
- }
-
- // hashtag
- if (word.startsWith('#') && word.length > 1) {
- return reactStringReplace(word, word, (match, i) => (
- <>
- {' '}
- {' '}
- >
- ));
- }
-
- // boost
- if (word.startsWith('$prism') && word.length > 1) {
- return reactStringReplace(word, word, (match, i) => (
- <>
- {' '}
- {' '}
- >
- ));
- }
-
- // nostr account references (depreciated)
- if (word.startsWith('@npub1')) {
- const npub = word.replace('@', '').replace(/[^a-zA-Z0-9 ]/g, '');
- return reactStringReplace(word, word, (match, i) => (
- <>
- {' '}
- {' '}
- >
- ));
- }
-
- // nostr account references
- if (word.startsWith('nostr:npub1') || word.startsWith('npub1')) {
- const npub = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- return reactStringReplace(word, word, (match, i) => (
- <>
- {' '}
- {' '}
- >
- ));
- }
-
- // nostr profile references
- if (word.startsWith('nostr:nprofile1') || word.startsWith('nprofile1')) {
- const nprofile = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- const decoded = nip19.decode(nprofile).data as ProfilePointer;
- return reactStringReplace(word, word, (match, i) => (
- <>
- {' '}
- {' '}
- >
- ));
- }
-
- // nostr address references
- if (word.startsWith('nostr:naddr1') || word.startsWith('naddr1')) {
- const naddr = word.replace('nostr:', '').replace(/[^a-zA-Z0-9 ]/g, '');
- const decoded = nip19.decode(naddr).data as AddressPointer;
- return reactStringReplace(word, word, (match, i) => (
- <>
- {' '}
- {' '}
- >
- ));
- }
-
- // lightning invoice
- if (word.startsWith('lnbc') && word.length > 60) {
- return reactStringReplace(word, word, (match, i) => (
- <>
- {' '}
- {' '}
- >
- ));
- }
-
- // normal word
- return ' ' + word + ' ';
- });
-
- // update content with parsed version
- content.parsed = parsed;
- return content;
-}
diff --git a/src/utils/types.d.ts b/src/utils/types.d.ts
index ba8794ae..0c427925 100644
--- a/src/utils/types.d.ts
+++ b/src/utils/types.d.ts
@@ -1,9 +1,8 @@
import { type NDKEvent, type NDKUserProfile } from '@nostr-dev-kit/ndk';
import { type Response } from '@tauri-apps/plugin-http';
-import { ReactNode } from 'react';
export interface RichContent {
- parsed: string | ReactNode[];
+ parsed: string;
images: string[];
videos: string[];
links: string[];
From f2dddf97f582bc133c5751970aab935c175b1ee7 Mon Sep 17 00:00:00 2001
From: reya
Date: Wed, 1 Nov 2023 13:01:52 +0700
Subject: [PATCH 10/14] polish
---
package.json | 4 -
pnpm-lock.yaml | 679 +----------------------
src/app/space/components/widgetList.tsx | 31 +-
src/shared/notes/kinds/articleDetail.tsx | 41 +-
src/shared/notes/kinds/file.tsx | 78 +--
src/shared/notes/kinds/text.tsx | 2 +-
src/shared/notes/mentions/note.tsx | 6 +-
src/shared/notes/preview/image.tsx | 2 +-
src/shared/notes/preview/link.tsx | 105 ++--
src/shared/notes/preview/video.tsx | 2 +-
src/stores/constants.ts | 2 +-
11 files changed, 115 insertions(+), 837 deletions(-)
diff --git a/package.json b/package.json
index b2767e85..6b28367f 100644
--- a/package.json
+++ b/package.json
@@ -79,12 +79,8 @@
"react-dom": "^18.2.0",
"react-hook-form": "^7.47.0",
"react-hotkeys-hook": "^4.4.1",
- "react-markdown": "^9.0.0",
"react-router-dom": "^6.17.0",
- "react-string-replace": "^1.1.1",
"reactflow": "^11.9.4",
- "rehype-external-links": "^3.0.0",
- "remark-gfm": "^4.0.0",
"sonner": "^1.0.3",
"tailwind-scrollbar": "^3.0.5",
"tauri-controls": "^0.2.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5a0dd272..9476c679 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -188,24 +188,12 @@ dependencies:
react-hotkeys-hook:
specifier: ^4.4.1
version: 4.4.1(react-dom@18.2.0)(react@18.2.0)
- react-markdown:
- specifier: ^9.0.0
- version: 9.0.0(@types/react@18.2.33)(react@18.2.0)
react-router-dom:
specifier: ^6.17.0
version: 6.17.0(react-dom@18.2.0)(react@18.2.0)
- react-string-replace:
- specifier: ^1.1.1
- version: 1.1.1
reactflow:
specifier: ^11.9.4
version: 11.9.4(@types/react@18.2.33)(immer@10.0.3)(react-dom@18.2.0)(react@18.2.0)
- rehype-external-links:
- specifier: ^3.0.0
- version: 3.0.0
- remark-gfm:
- specifier: ^4.0.0
- version: 4.0.0
sonner:
specifier: ^1.0.3
version: 1.0.3(react-dom@18.2.0)(react@18.2.0)
@@ -2847,22 +2835,10 @@ packages:
'@types/d3-zoom': 3.0.6
dev: false
- /@types/debug@4.1.10:
- resolution: {integrity: sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA==}
- dependencies:
- '@types/ms': 0.7.33
- dev: false
-
/@types/geojson@7946.0.12:
resolution: {integrity: sha512-uK2z1ZHJyC0nQRbuovXFt4mzXDwf27vQeUWNhfKGwRcWW429GOhP8HxUHlM6TLH4bzmlv/HlEjpvJh3JfmGsAA==}
dev: false
- /@types/hast@3.0.2:
- resolution: {integrity: sha512-B5hZHgHsXvfCoO3xgNJvBnX7N8p86TqQeGKXcokW4XXi+qY4vxxPSFYofytvVmpFxzPv7oxDQzjg5Un5m2/xiw==}
- dependencies:
- '@types/unist': 3.0.1
- dev: false
-
/@types/html-to-text@9.0.3:
resolution: {integrity: sha512-ImzcLdHN3+zghCoZcA+vWd/t0GhM10S7lnvSq9YA6lbo4HGK10WIJ7n+NI7mbeVZeUtgrmK5fXM66kZcws1oHA==}
dev: true
@@ -2882,20 +2858,10 @@ packages:
'@types/mdurl': 1.0.4
dev: false
- /@types/mdast@4.0.2:
- resolution: {integrity: sha512-tYR83EignvhYO9iU3kDg8V28M0jqyh9zzp5GV+EO+AYnyUl3P5ltkTeJuTiFZQFz670FSb3EwT/6LQdX+UdKfw==}
- dependencies:
- '@types/unist': 3.0.1
- dev: false
-
/@types/mdurl@1.0.4:
resolution: {integrity: sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==}
dev: false
- /@types/ms@0.7.33:
- resolution: {integrity: sha512-AuHIyzR5Hea7ij0P9q7vx7xu4z0C28ucwjAZC0ja7JhINyCnOw8/DnvAPQQ9TfOlCtZAmCERKQX9+o1mgQhuOQ==}
- dev: false
-
/@types/node@20.8.9:
resolution: {integrity: sha512-UzykFsT3FhHb1h7yD4CA4YhBHq545JC0YnEz41xkipN88eKQtL6rSgocL5tbAP6Ola9Izm/Aw4Ora8He4x0BHg==}
dependencies:
@@ -2936,10 +2902,6 @@ packages:
resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==}
dev: false
- /@types/unist@3.0.1:
- resolution: {integrity: sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==}
- dev: false
-
/@types/youtube-player@5.5.9:
resolution: {integrity: sha512-l2Q7ESxMv6HK2jc6I1qwMMGbh5bpHYQVCpXs0GsFmzaXoPibX50pHzs+PGfmegDY8TvmMGKWBgGI16ytqK6iIw==}
dev: true
@@ -3077,6 +3039,7 @@ packages:
/@ungap/structured-clone@1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ dev: true
/@vitejs/plugin-react-swc@3.4.0(vite@4.5.0):
resolution: {integrity: sha512-m7UaA4Uvz82N/0EOVpZL4XsFIakRqrFKeSNxa1FBLSXGvWrWRBwmZb4qxk+ZIVAZcW3c3dn5YosomDgx62XWcQ==}
@@ -3283,10 +3246,6 @@ packages:
dequal: 2.0.3
dev: true
- /bail@2.0.2:
- resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
- dev: false
-
/balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -3349,10 +3308,6 @@ packages:
engines: {node: '>=12.13'}
dev: false
- /ccount@2.0.1:
- resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
- dev: false
-
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
@@ -3374,10 +3329,6 @@ packages:
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
dev: true
- /character-entities@2.0.2:
- resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
- dev: false
-
/chokidar@3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
@@ -3438,10 +3389,6 @@ packages:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
dev: true
- /comma-separated-tokens@2.0.3:
- resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
- dev: false
-
/commander@11.1.0:
resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
engines: {node: '>=16'}
@@ -3602,12 +3549,6 @@ packages:
dependencies:
ms: 2.1.2
- /decode-named-character-reference@1.0.2:
- resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
- dependencies:
- character-entities: 2.0.2
- dev: false
-
/deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
dev: true
@@ -3638,6 +3579,7 @@ packages:
/dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
+ dev: true
/destr@2.0.2:
resolution: {integrity: sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==}
@@ -3647,12 +3589,6 @@ packages:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
dev: false
- /devlop@1.1.0:
- resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
- dependencies:
- dequal: 2.0.3
- dev: false
-
/dexie@3.2.4:
resolution: {integrity: sha512-VKoTQRSv7+RnffpOJ3Dh6ozknBqzWw/F3iqMdsZg958R0AS8AnY9x9d1lbwENr0gzeGJHXKcGhAMRaqys6SxqA==}
engines: {node: '>=6.0'}
@@ -3894,11 +3830,6 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
- /escape-string-regexp@5.0.0:
- resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
- engines: {node: '>=12'}
- dev: false
-
/eslint-config-prettier@9.0.0(eslint@8.52.0):
resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
hasBin: true
@@ -4088,10 +4019,6 @@ packages:
type: 2.7.2
dev: false
- /extend@3.0.2:
- resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
- dev: false
-
/fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -4378,32 +4305,6 @@ packages:
dependencies:
function-bind: 1.1.2
- /hast-util-is-element@3.0.0:
- resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
- dependencies:
- '@types/hast': 3.0.2
- dev: false
-
- /hast-util-to-jsx-runtime@2.2.0:
- resolution: {integrity: sha512-wSlp23N45CMjDg/BPW8zvhEi3R+8eRE1qFbjEyAUzMCzu2l1Wzwakq+Tlia9nkCtEl5mDxa7nKHsvYJ6Gfn21A==}
- dependencies:
- '@types/hast': 3.0.2
- '@types/unist': 3.0.1
- comma-separated-tokens: 2.0.3
- hast-util-whitespace: 3.0.0
- property-information: 6.3.0
- space-separated-tokens: 2.0.2
- style-to-object: 0.4.4
- unist-util-position: 5.0.0
- vfile-message: 4.0.2
- dev: false
-
- /hast-util-whitespace@3.0.0:
- resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
- dependencies:
- '@types/hast': 3.0.2
- dev: false
-
/html-to-text@9.0.5:
resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==}
engines: {node: '>=14'}
@@ -4415,10 +4316,6 @@ packages:
selderee: 0.11.0
dev: false
- /html-url-attributes@3.0.0:
- resolution: {integrity: sha512-/sXbVCWayk6GDVg3ctOX6nxaVj7So40FcFAnWlWGNAB1LpYKcV5Cd10APjPjW80O7zYW2MsjBV4zZ7IZO5fVow==}
- dev: false
-
/htmlparser2@8.0.2:
resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
dependencies:
@@ -4477,10 +4374,6 @@ packages:
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
- /inline-style-parser@0.1.1:
- resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
- dev: false
-
/internal-slot@1.0.6:
resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==}
engines: {node: '>= 0.4'}
@@ -4496,11 +4389,6 @@ packages:
loose-envify: 1.4.0
dev: false
- /is-absolute-url@4.0.1:
- resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dev: false
-
/is-array-buffer@3.0.2:
resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
dependencies:
@@ -4613,11 +4501,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /is-plain-obj@4.1.0:
- resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
- engines: {node: '>=12'}
- dev: false
-
/is-plain-object@2.0.4:
resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
engines: {node: '>=0.10.0'}
@@ -4881,10 +4764,6 @@ packages:
wrap-ansi: 8.1.0
dev: true
- /longest-streak@3.1.0:
- resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
- dev: false
-
/loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -4928,10 +4807,6 @@ packages:
uc.micro: 1.0.6
dev: false
- /markdown-table@3.0.3:
- resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
- dev: false
-
/markdown-to-jsx@7.3.2(react@18.2.0):
resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==}
engines: {node: '>= 10'}
@@ -4941,142 +4816,6 @@ packages:
react: 18.2.0
dev: false
- /mdast-util-find-and-replace@3.0.1:
- resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
- dependencies:
- '@types/mdast': 4.0.2
- escape-string-regexp: 5.0.0
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
- dev: false
-
- /mdast-util-from-markdown@2.0.0:
- resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==}
- dependencies:
- '@types/mdast': 4.0.2
- '@types/unist': 3.0.1
- decode-named-character-reference: 1.0.2
- devlop: 1.1.0
- mdast-util-to-string: 4.0.0
- micromark: 4.0.0
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-decode-string: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- unist-util-stringify-position: 4.0.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /mdast-util-gfm-autolink-literal@2.0.0:
- resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==}
- dependencies:
- '@types/mdast': 4.0.2
- ccount: 2.0.1
- devlop: 1.1.0
- mdast-util-find-and-replace: 3.0.1
- micromark-util-character: 2.0.1
- dev: false
-
- /mdast-util-gfm-footnote@2.0.0:
- resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
- dependencies:
- '@types/mdast': 4.0.2
- devlop: 1.1.0
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
- micromark-util-normalize-identifier: 2.0.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /mdast-util-gfm-strikethrough@2.0.0:
- resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
- dependencies:
- '@types/mdast': 4.0.2
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /mdast-util-gfm-table@2.0.0:
- resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
- dependencies:
- '@types/mdast': 4.0.2
- devlop: 1.1.0
- markdown-table: 3.0.3
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /mdast-util-gfm-task-list-item@2.0.0:
- resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
- dependencies:
- '@types/mdast': 4.0.2
- devlop: 1.1.0
- mdast-util-from-markdown: 2.0.0
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /mdast-util-gfm@3.0.0:
- resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
- dependencies:
- mdast-util-from-markdown: 2.0.0
- mdast-util-gfm-autolink-literal: 2.0.0
- mdast-util-gfm-footnote: 2.0.0
- mdast-util-gfm-strikethrough: 2.0.0
- mdast-util-gfm-table: 2.0.0
- mdast-util-gfm-task-list-item: 2.0.0
- mdast-util-to-markdown: 2.1.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /mdast-util-phrasing@4.0.0:
- resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==}
- dependencies:
- '@types/mdast': 4.0.2
- unist-util-is: 6.0.0
- dev: false
-
- /mdast-util-to-hast@13.0.2:
- resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==}
- dependencies:
- '@types/hast': 3.0.2
- '@types/mdast': 4.0.2
- '@ungap/structured-clone': 1.2.0
- devlop: 1.1.0
- micromark-util-sanitize-uri: 2.0.0
- trim-lines: 3.0.1
- unist-util-position: 5.0.0
- unist-util-visit: 5.0.0
- dev: false
-
- /mdast-util-to-markdown@2.1.0:
- resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
- dependencies:
- '@types/mdast': 4.0.2
- '@types/unist': 3.0.1
- longest-streak: 3.1.0
- mdast-util-phrasing: 4.0.0
- mdast-util-to-string: 4.0.0
- micromark-util-decode-string: 2.0.0
- unist-util-visit: 5.0.0
- zwitch: 2.0.4
- dev: false
-
- /mdast-util-to-string@4.0.0:
- resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
- dependencies:
- '@types/mdast': 4.0.2
- dev: false
-
/mdurl@1.0.1:
resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
dev: false
@@ -5093,253 +4832,6 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- /micromark-core-commonmark@2.0.0:
- resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==}
- dependencies:
- decode-named-character-reference: 1.0.2
- devlop: 1.1.0
- micromark-factory-destination: 2.0.0
- micromark-factory-label: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-factory-title: 2.0.0
- micromark-factory-whitespace: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-chunked: 2.0.0
- micromark-util-classify-character: 2.0.0
- micromark-util-html-tag-name: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-subtokenize: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-extension-gfm-autolink-literal@2.0.0:
- resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-extension-gfm-footnote@2.0.0:
- resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==}
- dependencies:
- devlop: 1.1.0
- micromark-core-commonmark: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-extension-gfm-strikethrough@2.0.0:
- resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==}
- dependencies:
- devlop: 1.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-classify-character: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-extension-gfm-table@2.0.0:
- resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==}
- dependencies:
- devlop: 1.1.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-extension-gfm-tagfilter@2.0.0:
- resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
- dependencies:
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-extension-gfm-task-list-item@2.0.1:
- resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==}
- dependencies:
- devlop: 1.1.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-extension-gfm@3.0.0:
- resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
- dependencies:
- micromark-extension-gfm-autolink-literal: 2.0.0
- micromark-extension-gfm-footnote: 2.0.0
- micromark-extension-gfm-strikethrough: 2.0.0
- micromark-extension-gfm-table: 2.0.0
- micromark-extension-gfm-tagfilter: 2.0.0
- micromark-extension-gfm-task-list-item: 2.0.1
- micromark-util-combine-extensions: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-factory-destination@2.0.0:
- resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-factory-label@2.0.0:
- resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
- dependencies:
- devlop: 1.1.0
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-factory-space@2.0.0:
- resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-factory-title@2.0.0:
- resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
- dependencies:
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-factory-whitespace@2.0.0:
- resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
- dependencies:
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-util-character@2.0.1:
- resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==}
- dependencies:
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-util-chunked@2.0.0:
- resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
- dependencies:
- micromark-util-symbol: 2.0.0
- dev: false
-
- /micromark-util-classify-character@2.0.0:
- resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-util-combine-extensions@2.0.0:
- resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
- dependencies:
- micromark-util-chunked: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-util-decode-numeric-character-reference@2.0.1:
- resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
- dependencies:
- micromark-util-symbol: 2.0.0
- dev: false
-
- /micromark-util-decode-string@2.0.0:
- resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
- dependencies:
- decode-named-character-reference: 1.0.2
- micromark-util-character: 2.0.1
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-symbol: 2.0.0
- dev: false
-
- /micromark-util-encode@2.0.0:
- resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
- dev: false
-
- /micromark-util-html-tag-name@2.0.0:
- resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
- dev: false
-
- /micromark-util-normalize-identifier@2.0.0:
- resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
- dependencies:
- micromark-util-symbol: 2.0.0
- dev: false
-
- /micromark-util-resolve-all@2.0.0:
- resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
- dependencies:
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-util-sanitize-uri@2.0.0:
- resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
- dependencies:
- micromark-util-character: 2.0.1
- micromark-util-encode: 2.0.0
- micromark-util-symbol: 2.0.0
- dev: false
-
- /micromark-util-subtokenize@2.0.0:
- resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==}
- dependencies:
- devlop: 1.1.0
- micromark-util-chunked: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- dev: false
-
- /micromark-util-symbol@2.0.0:
- resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
- dev: false
-
- /micromark-util-types@2.0.0:
- resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
- dev: false
-
- /micromark@4.0.0:
- resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
- dependencies:
- '@types/debug': 4.1.10
- debug: 4.3.4
- decode-named-character-reference: 1.0.2
- devlop: 1.1.0
- micromark-core-commonmark: 2.0.0
- micromark-factory-space: 2.0.0
- micromark-util-character: 2.0.1
- micromark-util-chunked: 2.0.0
- micromark-util-combine-extensions: 2.0.0
- micromark-util-decode-numeric-character-reference: 2.0.1
- micromark-util-encode: 2.0.0
- micromark-util-normalize-identifier: 2.0.0
- micromark-util-resolve-all: 2.0.0
- micromark-util-sanitize-uri: 2.0.0
- micromark-util-subtokenize: 2.0.0
- micromark-util-symbol: 2.0.0
- micromark-util-types: 2.0.0
- transitivePeerDependencies:
- - supports-color
- dev: false
-
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
engines: {node: '>=8.6'}
@@ -5817,10 +5309,6 @@ packages:
react-is: 16.13.1
dev: true
- /property-information@6.3.0:
- resolution: {integrity: sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==}
- dev: false
-
/prosemirror-changeset@2.2.1:
resolution: {integrity: sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==}
dependencies:
@@ -6031,29 +5519,6 @@ packages:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
dev: true
- /react-markdown@9.0.0(@types/react@18.2.33)(react@18.2.0):
- resolution: {integrity: sha512-v6yNf3AB8GfJ8lCpUvzxAXKxgsHpdmWPlcVRQ6Nocsezp255E/IDrF31kLQsPJeB/cKto/geUwjU36wH784FCA==}
- peerDependencies:
- '@types/react': '>=18'
- react: '>=18'
- dependencies:
- '@types/hast': 3.0.2
- '@types/react': 18.2.33
- devlop: 1.1.0
- hast-util-to-jsx-runtime: 2.2.0
- html-url-attributes: 3.0.0
- mdast-util-to-hast: 13.0.2
- micromark-util-sanitize-uri: 2.0.0
- react: 18.2.0
- remark-parse: 11.0.0
- remark-rehype: 11.0.0
- unified: 11.0.4
- unist-util-visit: 5.0.0
- vfile: 6.0.1
- transitivePeerDependencies:
- - supports-color
- dev: false
-
/react-remove-scroll-bar@2.3.4(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==}
engines: {node: '>=10'}
@@ -6112,11 +5577,6 @@ packages:
react: 18.2.0
dev: false
- /react-string-replace@1.1.1:
- resolution: {integrity: sha512-26TUbLzLfHQ5jO5N7y3Mx88eeKo0Ml0UjCQuX4BMfOd/JX+enQqlKpL1CZnmjeBRvQE8TR+ds9j1rqx9CxhKHQ==}
- engines: {node: '>=0.12.0'}
- dev: false
-
/react-style-singleton@2.2.1(@types/react@18.2.33)(react@18.2.0):
resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==}
engines: {node: '>=10'}
@@ -6195,59 +5655,6 @@ packages:
set-function-name: 2.0.1
dev: true
- /rehype-external-links@3.0.0:
- resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==}
- dependencies:
- '@types/hast': 3.0.2
- '@ungap/structured-clone': 1.2.0
- hast-util-is-element: 3.0.0
- is-absolute-url: 4.0.1
- space-separated-tokens: 2.0.2
- unist-util-visit: 5.0.0
- dev: false
-
- /remark-gfm@4.0.0:
- resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
- dependencies:
- '@types/mdast': 4.0.2
- mdast-util-gfm: 3.0.0
- micromark-extension-gfm: 3.0.0
- remark-parse: 11.0.0
- remark-stringify: 11.0.0
- unified: 11.0.4
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /remark-parse@11.0.0:
- resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
- dependencies:
- '@types/mdast': 4.0.2
- mdast-util-from-markdown: 2.0.0
- micromark-util-types: 2.0.0
- unified: 11.0.4
- transitivePeerDependencies:
- - supports-color
- dev: false
-
- /remark-rehype@11.0.0:
- resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==}
- dependencies:
- '@types/hast': 3.0.2
- '@types/mdast': 4.0.2
- mdast-util-to-hast: 13.0.2
- unified: 11.0.4
- vfile: 6.0.1
- dev: false
-
- /remark-stringify@11.0.0:
- resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
- dependencies:
- '@types/mdast': 4.0.2
- mdast-util-to-markdown: 2.1.0
- unified: 11.0.4
- dev: false
-
/resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -6435,10 +5842,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /space-separated-tokens@2.0.2:
- resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- dev: false
-
/string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
@@ -6516,12 +5919,6 @@ packages:
engines: {node: '>=8'}
dev: true
- /style-to-object@0.4.4:
- resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
- dependencies:
- inline-style-parser: 0.1.1
- dev: false
-
/sucrase@3.34.0:
resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
engines: {node: '>=8'}
@@ -6661,14 +6058,6 @@ packages:
dependencies:
is-number: 7.0.0
- /trim-lines@3.0.1:
- resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
- dev: false
-
- /trough@2.1.0:
- resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
- dev: false
-
/ts-api-utils@1.0.3(typescript@5.2.2):
resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
engines: {node: '>=16.13.0'}
@@ -6802,51 +6191,6 @@ packages:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
dev: true
- /unified@11.0.4:
- resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
- dependencies:
- '@types/unist': 3.0.1
- bail: 2.0.2
- devlop: 1.1.0
- extend: 3.0.2
- is-plain-obj: 4.1.0
- trough: 2.1.0
- vfile: 6.0.1
- dev: false
-
- /unist-util-is@6.0.0:
- resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
- dependencies:
- '@types/unist': 3.0.1
- dev: false
-
- /unist-util-position@5.0.0:
- resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
- dependencies:
- '@types/unist': 3.0.1
- dev: false
-
- /unist-util-stringify-position@4.0.0:
- resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
- dependencies:
- '@types/unist': 3.0.1
- dev: false
-
- /unist-util-visit-parents@6.0.1:
- resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
- dependencies:
- '@types/unist': 3.0.1
- unist-util-is: 6.0.0
- dev: false
-
- /unist-util-visit@5.0.0:
- resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
- dependencies:
- '@types/unist': 3.0.1
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
- dev: false
-
/unplugin@1.5.0:
resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==}
dependencies:
@@ -6927,21 +6271,6 @@ packages:
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- /vfile-message@4.0.2:
- resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
- dependencies:
- '@types/unist': 3.0.1
- unist-util-stringify-position: 4.0.0
- dev: false
-
- /vfile@6.0.1:
- resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
- dependencies:
- '@types/unist': 3.0.1
- unist-util-stringify-position: 4.0.0
- vfile-message: 4.0.2
- dev: false
-
/virtua@0.15.6(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-j9EfyAmpp6VwuHmnXkWpzciHRdlY7XGPzZg3ZqOPFW+phNUnFQALYdrThc3CYHZFsj380ieIegdjPGS+Qbkuyg==}
peerDependencies:
@@ -7156,7 +6485,3 @@ packages:
react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
-
- /zwitch@2.0.4:
- resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
- dev: false
diff --git a/src/app/space/components/widgetList.tsx b/src/app/space/components/widgetList.tsx
index 0ace2c0a..31c8fab5 100644
--- a/src/app/space/components/widgetList.tsx
+++ b/src/app/space/components/widgetList.tsx
@@ -16,10 +16,15 @@ import { WidgetWrapper } from '@shared/widgets';
import { DefaultWidgets, WidgetKinds } from '@stores/constants';
import { useWidget } from '@utils/hooks/useWidget';
-import { Widget, WidgetGroup } from '@utils/types';
+import { Widget, WidgetGroup, WidgetGroupItem } from '@utils/types';
export function WidgetList({ params }: { params: Widget }) {
- const { addWidget } = useWidget();
+ const { addWidget, removeWidget } = useWidget();
+
+ const open = (item: WidgetGroupItem) => {
+ addWidget.mutate({ kind: item.kind, title: item.title, content: '' });
+ removeWidget.mutate(params.id);
+ };
const renderIcon = useCallback(
(kind: number) => {
@@ -65,20 +70,16 @@ export function WidgetList({ params }: { params: Widget }) {
const renderItem = useCallback((row: WidgetGroup, index: number) => {
return (
-
- {row.title}
-
-
+
{row.title}
+
{row.data.map((item, index) => (
- addWidget.mutate({ kind: item.kind, title: item.title, content: '' })
- }
+ onClick={() => open(item)}
key={index}
className="group flex items-center gap-2.5 px-4 hover:bg-neutral-200 dark:hover:bg-neutral-800"
>
{item.icon ? (
-
+
) : (
-
+
{renderIcon(item.kind)}
)}
@@ -94,7 +95,7 @@ export function WidgetList({ params }: { params: Widget }) {
{item.title}
-
+
{item.description}
@@ -108,7 +109,7 @@ export function WidgetList({ params }: { params: Widget }) {
return (
-
+
{DefaultWidgets.map((row: WidgetGroup, index: number) =>
renderItem(row, index)
@@ -117,10 +118,10 @@ export function WidgetList({ params }: { params: Widget }) {
Build your own widget{' '}
-
+
Coming soon
diff --git a/src/shared/notes/kinds/articleDetail.tsx b/src/shared/notes/kinds/articleDetail.tsx
index 724a8cc4..b6ba3e98 100644
--- a/src/shared/notes/kinds/articleDetail.tsx
+++ b/src/shared/notes/kinds/articleDetail.tsx
@@ -1,10 +1,4 @@
import { NDKEvent } from '@nostr-dev-kit/ndk';
-import ReactMarkdown from 'react-markdown';
-import { Link } from 'react-router-dom';
-import rehypeExternalLinks from 'rehype-external-links';
-import remarkGfm from 'remark-gfm';
-
-import { Boost, Hashtag, Invoice, MentionUser } from '@shared/notes';
export function ArticleDetailNote({ event }: { event: NDKEvent }) {
/*const metadata = useMemo(() => {
@@ -30,39 +24,8 @@ export function ArticleDetailNote({ event }: { event: NDKEvent }) {
}, [event.id]);*/
return (
-
{
- const cleanURL = new URL(href);
- cleanURL.search = '';
- return (
-
- {cleanURL.hostname + cleanURL.pathname}
-
- );
- },
- del: ({ children }) => {
- const key = children[0] as string;
- if (typeof key !== 'string') return;
- if (key.startsWith('pub') && key.length > 50 && key.length < 100) {
- return ;
- }
- if (key.startsWith('tag')) {
- return ;
- }
- if (key.startsWith('boost')) {
- return ;
- }
- if (key.startsWith('lnbc')) {
- return ;
- }
- },
- }}
- >
+
{event.content}
-
+
);
}
diff --git a/src/shared/notes/kinds/file.tsx b/src/shared/notes/kinds/file.tsx
index 5084ee92..e18740db 100644
--- a/src/shared/notes/kinds/file.tsx
+++ b/src/shared/notes/kinds/file.tsx
@@ -1,4 +1,6 @@
import { NDKEvent } from '@nostr-dev-kit/ndk';
+import { downloadDir } from '@tauri-apps/api/path';
+import { download } from '@tauri-apps/plugin-upload';
import {
MediaControlBar,
MediaController,
@@ -9,7 +11,9 @@ import {
MediaVolumeRange,
} from 'media-chrome/dist/react';
import { memo } from 'react';
-import { Link } from 'react-router-dom';
+
+import { DownloadIcon } from '@shared/icons';
+import { LinkPreview } from '@shared/notes';
import { fileType } from '@utils/nip94';
@@ -17,56 +21,58 @@ export function FileNote(props: { event?: NDKEvent }) {
const url = props.event.tags.find((el) => el[0] === 'url')[1];
const type = fileType(url);
+ const downloadImage = async (url: string) => {
+ const downloadDirPath = await downloadDir();
+ const filename = url.substring(url.lastIndexOf('/') + 1);
+ return await download(url, downloadDirPath + `/${filename}`);
+ };
+
if (type === 'image') {
return (
-
+
+
downloadImage(url)}
+ className="absolute right-2 top-2 hidden h-10 w-10 items-center justify-center rounded-lg bg-black/50 backdrop-blur-xl group-hover:inline-flex hover:bg-blue-500"
+ >
+
+
);
}
if (type === 'video') {
return (
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
);
}
return (
-
-
- {url}
-
+
+
);
}
diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx
index 857c5fc0..1c90e4c8 100644
--- a/src/shared/notes/kinds/text.tsx
+++ b/src/shared/notes/kinds/text.tsx
@@ -26,7 +26,7 @@ export function TextNote(props: { content?: string; truncate?: boolean }) {
}
return (
-
+
+
);
@@ -58,7 +58,7 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
if (status === 'error') {
const noteLink = `https://njump.me/${nip19.noteEncode(id)}`;
return (
-
+
@@ -79,7 +79,7 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) {
openThread(e, id)}
- className="mt-3 cursor-default rounded-lg border border-neutral-300 bg-neutral-200 p-3 dark:border-neutral-700 dark:bg-neutral-800"
+ className="w-full cursor-default rounded-lg border border-neutral-300 bg-neutral-200 p-3 dark:border-neutral-700 dark:bg-neutral-800"
>
{renderKind(data)}
diff --git a/src/shared/notes/preview/image.tsx b/src/shared/notes/preview/image.tsx
index 9f9d740c..cfc7f42c 100644
--- a/src/shared/notes/preview/image.tsx
+++ b/src/shared/notes/preview/image.tsx
@@ -11,7 +11,7 @@ export function ImagePreview({ urls }: { urls: string[] }) {
};
return (
-
+
{urls.map((url) => (
- {status === 'pending' ? (
-
-
-
-
-
-
- {domain.hostname}
-
-
+ if (status === 'pending') {
+ return (
+
+
+
+
+
+
+ {domain.hostname}
+
- ) : (
-
- {error ? (
-
-
- Can't fetch open graph, click to open webpage
-
-
- {domain.hostname}
-
-
- ) : (
- <>
- {isImage(data.image) ? (
-
- ) : null}
-
-
- {data.title && (
-
- {data.title}
-
- )}
- {data.description ? (
-
- {data.description}
-
- ) : null}
-
-
- {domain.hostname}
-
-
- >
+
+ );
+ }
+
+ return (
+
+ {isImage(data.image) ? (
+
+ ) : null}
+
+
+ {data.title && (
+
+ {data.title}
+
)}
-
- )}
-
+ {data.description ? (
+
+ {data.description}
+
+ ) : null}
+
+
+ {domain.hostname}
+
+
+
);
}
diff --git a/src/shared/notes/preview/video.tsx b/src/shared/notes/preview/video.tsx
index 681da5a1..4b5f61ac 100644
--- a/src/shared/notes/preview/video.tsx
+++ b/src/shared/notes/preview/video.tsx
@@ -11,7 +11,7 @@ import { memo } from 'react';
export const VideoPreview = memo(function VideoPreview({ urls }: { urls: string[] }) {
return (
-
+
{urls.map((url) => (
= [
{
- title: 'Circles / Follows',
+ title: 'Local',
data: [
{
kind: WidgetKinds.tmp.xfeed,
From 3ad6830bfb51edf1b21683c8a107dbaf563e90a2 Mon Sep 17 00:00:00 2001
From: reya
Date: Wed, 1 Nov 2023 14:58:20 +0700
Subject: [PATCH 11/14] update title bar
---
src/shared/titleBar.tsx | 84 ++++++++++++++++++-----------
src/shared/widgets/newsfeed.tsx | 2 +-
src/shared/widgets/notification.tsx | 2 +-
3 files changed, 54 insertions(+), 34 deletions(-)
diff --git a/src/shared/titleBar.tsx b/src/shared/titleBar.tsx
index 7bb8d3ba..b3f23467 100644
--- a/src/shared/titleBar.tsx
+++ b/src/shared/titleBar.tsx
@@ -5,42 +5,62 @@ import { User } from '@shared/user';
import { useWidget } from '@utils/hooks/useWidget';
-export function TitleBar({ id, title }: { id?: string; title?: string }) {
+export function TitleBar({
+ id,
+ title,
+ isLive,
+}: {
+ id?: string;
+ title?: string;
+ isLive?: boolean;
+}) {
const { db } = useStorage();
const { removeWidget } = useWidget();
return (
-
-
- {id === '9999' ? (
-
- {db.account.circles
- ?.slice(0, 10)
- .map((item) =>
)}
- {db.account.circles?.length > 10 ? (
-
-
- +{db.account.circles?.length - 10}
-
-
- ) : null}
-
- ) : (
-
- {title}
-
- )}
- {id !== '9999' ? (
-
removeWidget.mutate(id)}
- className="inline-flex h-6 w-6 shrink-0 items-center justify-center rounded text-neutral-900 backdrop-blur-xl hover:bg-neutral-100 dark:text-neutral-100 dark:hover:bg-neutral-900"
- >
-
-
- ) : (
-
- )}
+
+
+ {isLive ? (
+
+ ) : null}
+
+
+ {id === '9999' ? (
+
+ {db.account.circles
+ ?.slice(0, 8)
+ .map((item) =>
)}
+ {db.account.circles?.length > 8 ? (
+
+
+ +{db.account.circles?.length - 8}
+
+
+ ) : null}
+
+ ) : (
+
+ {title}
+
+ )}
+
+
+ {id !== '9999' ? (
+ removeWidget.mutate(id)}
+ className="inline-flex h-6 w-6 shrink-0 items-center justify-center rounded text-neutral-900 backdrop-blur-xl hover:bg-neutral-100 dark:text-neutral-100 dark:hover:bg-neutral-900"
+ >
+
+
+ ) : null}
+
);
}
diff --git a/src/shared/widgets/newsfeed.tsx b/src/shared/widgets/newsfeed.tsx
index 12a9c510..75774a52 100644
--- a/src/shared/widgets/newsfeed.tsx
+++ b/src/shared/widgets/newsfeed.tsx
@@ -140,7 +140,7 @@ export function NewsfeedWidget() {
return (
-
+
{status === 'pending' ? (
diff --git a/src/shared/widgets/notification.tsx b/src/shared/widgets/notification.tsx
index 2265803f..034cb520 100644
--- a/src/shared/widgets/notification.tsx
+++ b/src/shared/widgets/notification.tsx
@@ -134,7 +134,7 @@ export function NotificationWidget() {
return (
-
+
{status === 'pending' ? (
From 2f8aa66ff68a8a0307feb96b3721f3f1b6759138 Mon Sep 17 00:00:00 2001
From: reya
Date: Wed, 1 Nov 2023 15:08:22 +0700
Subject: [PATCH 12/14] bump version
---
package.json | 2 +-
src-tauri/Cargo.lock | 2 +-
src-tauri/Cargo.toml | 2 +-
src-tauri/tauri.conf.json | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/package.json b/package.json
index 6b28367f..09bca313 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "lume",
"description": "the communication app",
"private": true,
- "version": "2.0.0",
+ "version": "2.0.1",
"scripts": {
"dev": "vite",
"build": "vite build",
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index e45b1c15..49636955 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -2518,7 +2518,7 @@ dependencies = [
[[package]]
name = "lume"
-version = "2.0.0"
+version = "2.0.1"
dependencies = [
"keyring",
"serde",
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 1559a253..b4ee8403 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "lume"
-version = "2.0.0"
+version = "2.0.1"
description = "the communication app"
authors = ["Ren Amamiya"]
license = "GPL-3.0"
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 5e2504cf..b34272ad 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -9,7 +9,7 @@
},
"package": {
"productName": "Lume",
- "version": "2.0.0"
+ "version": "2.0.1"
},
"plugins": {
"fs": {
From c8d04f46955316584c5416d4ef3621b4df7e2fd4 Mon Sep 17 00:00:00 2001
From: reya
Date: Wed, 1 Nov 2023 15:24:46 +0700
Subject: [PATCH 13/14] support tiff image
---
src/utils/nip94.ts | 2 +-
src/utils/parser.ts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/utils/nip94.ts b/src/utils/nip94.ts
index 8582a319..c22ad6d9 100644
--- a/src/utils/nip94.ts
+++ b/src/utils/nip94.ts
@@ -1,5 +1,5 @@
export function fileType(url: string) {
- if (url.match(/\.(jpg|jpeg|gif|png|webp|avif)$/)) {
+ if (url.match(/\.(jpg|jpeg|gif|png|webp|avif|tiff)$/)) {
return 'image';
}
diff --git a/src/utils/parser.ts b/src/utils/parser.ts
index 42d1fac4..296f93e2 100644
--- a/src/utils/parser.ts
+++ b/src/utils/parser.ts
@@ -41,7 +41,7 @@ export function parser(content: string) {
const url = new URL(word);
url.search = '';
- if (url.pathname.match(/\.(jpg|jpeg|gif|png|webp|avif)$/)) {
+ if (url.pathname.match(/\.(jpg|jpeg|gif|png|webp|avif|tiff)$/)) {
// image url
richContent.images.push(word);
// remove url from original content
From f01074ea9fb0f937038672e71c6147fc77ebb3ec Mon Sep 17 00:00:00 2001
From: reya
Date: Wed, 1 Nov 2023 15:37:50 +0700
Subject: [PATCH 14/14] fix article
---
src/app/notes/article.tsx | 4 +-
src/shared/notes/kinds/article.tsx | 48 ++++++++++-----------
src/shared/notes/kinds/articleDetail.tsx | 55 +++++++++++++-----------
src/shared/notes/kinds/text.tsx | 5 +++
4 files changed, 62 insertions(+), 50 deletions(-)
diff --git a/src/app/notes/article.tsx b/src/app/notes/article.tsx
index 77a73e34..1d79ab3c 100644
--- a/src/app/notes/article.tsx
+++ b/src/app/notes/article.tsx
@@ -12,11 +12,11 @@ import { User } from '@shared/user';
import { useEvent } from '@utils/hooks/useEvent';
export function ArticleNoteScreen() {
+ const { id } = useParams();
+
const navigate = useNavigate();
const replyRef = useRef(null);
- const { id } = useParams();
-
const naddr = id.startsWith('naddr') ? (nip19.decode(id).data as AddressPointer) : null;
const { status, data } = useEvent(id, naddr);
diff --git a/src/shared/notes/kinds/article.tsx b/src/shared/notes/kinds/article.tsx
index 4dc94cc5..4f62ea5e 100644
--- a/src/shared/notes/kinds/article.tsx
+++ b/src/shared/notes/kinds/article.tsx
@@ -2,8 +2,6 @@ import { NDKEvent } from '@nostr-dev-kit/ndk';
import { memo, useMemo } from 'react';
import { Link } from 'react-router-dom';
-import { Image } from '@shared/image';
-
export function ArticleNote(props: { event?: NDKEvent }) {
const metadata = useMemo(() => {
const title = props.event.tags.find((tag) => tag[0] === 'title')?.[1];
@@ -28,28 +26,30 @@ export function ArticleNote(props: { event?: NDKEvent }) {
}, [props.event.id]);
return (
-
-
- {metadata.image && (
-
- )}
-
-
- {metadata.title}
-
- {metadata.summary ? (
-
- {metadata.summary}
-
- ) : null}
-
- {metadata.publishedAt.toString()}
-
-
+
+ {metadata.image && (
+
+ )}
+
+
+ {metadata.title}
+
+ {metadata.summary ? (
+
+ {metadata.summary}
+
+ ) : null}
+
+ {metadata.publishedAt.toString()}
+
);
diff --git a/src/shared/notes/kinds/articleDetail.tsx b/src/shared/notes/kinds/articleDetail.tsx
index b6ba3e98..4fc5f6b6 100644
--- a/src/shared/notes/kinds/articleDetail.tsx
+++ b/src/shared/notes/kinds/articleDetail.tsx
@@ -1,31 +1,38 @@
import { NDKEvent } from '@nostr-dev-kit/ndk';
+import Markdown from 'markdown-to-jsx';
+
+import { Boost, Hashtag, Invoice, MentionUser } from '@shared/notes';
export function ArticleDetailNote({ event }: { event: NDKEvent }) {
- /*const metadata = useMemo(() => {
- const title = event.tags.find((tag) => tag[0] === 'title')?.[1];
- const image = event.tags.find((tag) => tag[0] === 'image')?.[1];
- const summary = event.tags.find((tag) => tag[0] === 'summary')?.[1];
-
- let publishedAt: Date | string | number = event.tags.find(
- (tag) => tag[0] === 'published_at'
- )?.[1];
- if (publishedAt) {
- publishedAt = new Date(parseInt(publishedAt)).toLocaleDateString('en-US');
- } else {
- publishedAt = new Date(event.created_at * 1000).toLocaleDateString('en-US');
- }
-
- return {
- title,
- image,
- publishedAt,
- summary,
- };
- }, [event.id]);*/
-
return (
-
+ str,
+ forceBlock: true,
+ enforceAtxHeadings: true,
+ }}
+ className="break-p prose prose-neutral max-w-none select-text whitespace-pre-line leading-normal dark:prose-invert prose-headings:mb-1 prose-headings:mt-3 prose-p:mb-0 prose-p:mt-0 prose-p:last:mb-1 prose-a:font-normal prose-a:text-blue-500 prose-blockquote:mb-1 prose-blockquote:mt-1 prose-blockquote:border-l-[2px] prose-blockquote:border-blue-500 prose-blockquote:pl-2 prose-pre:whitespace-pre-wrap prose-pre:bg-white/10 prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-ul:mt-1 prose-img:mb-2 prose-img:mt-3 prose-hr:mx-0 prose-hr:my-2 hover:prose-a:text-blue-500"
+ >
{event.content}
-
+
);
}
diff --git a/src/shared/notes/kinds/text.tsx b/src/shared/notes/kinds/text.tsx
index 1c90e4c8..f8e8b211 100644
--- a/src/shared/notes/kinds/text.tsx
+++ b/src/shared/notes/kinds/text.tsx
@@ -42,6 +42,11 @@ export function TextNote(props: { content?: string; truncate?: boolean }) {
Invoice: {
component: Invoice,
},
+ a: {
+ props: {
+ target: '_blank',
+ },
+ },
},
slugify: (str) => str,
forceBlock: true,