This commit is contained in:
reya 2023-11-05 15:19:51 +07:00
parent dad388c6ab
commit 701712e7b8
21 changed files with 384 additions and 485 deletions

View File

@ -33,8 +33,8 @@
"@radix-ui/react-toolbar": "^1.0.4", "@radix-ui/react-toolbar": "^1.0.4",
"@radix-ui/react-tooltip": "^1.0.7", "@radix-ui/react-tooltip": "^1.0.7",
"@tanstack/query-sync-storage-persister": "^5.4.3", "@tanstack/query-sync-storage-persister": "^5.4.3",
"@tanstack/react-query": "^5.4.3", "@tanstack/react-query": "^5.7.0",
"@tanstack/react-query-persist-client": "^5.4.3", "@tanstack/react-query-persist-client": "^5.7.0",
"@tauri-apps/api": "2.0.0-alpha.11", "@tauri-apps/api": "2.0.0-alpha.11",
"@tauri-apps/cli": "2.0.0-alpha.17", "@tauri-apps/cli": "2.0.0-alpha.17",
"@tauri-apps/plugin-clipboard-manager": "2.0.0-alpha.3", "@tauri-apps/plugin-clipboard-manager": "2.0.0-alpha.3",
@ -64,12 +64,12 @@
"destr": "^2.0.2", "destr": "^2.0.2",
"framer-motion": "^10.16.4", "framer-motion": "^10.16.4",
"html-to-text": "^9.0.5", "html-to-text": "^9.0.5",
"idb-keyval": "^6.2.1",
"immer": "^10.0.3", "immer": "^10.0.3",
"light-bolt11-decoder": "^3.0.0", "light-bolt11-decoder": "^3.0.0",
"lru-cache": "^10.0.1", "lru-cache": "^10.0.1",
"markdown-to-jsx": "^7.3.2", "markdown-to-jsx": "^7.3.2",
"media-chrome": "^1.5.0", "media-chrome": "^1.5.2",
"million": "^2.6.4",
"minidenticons": "^4.2.0", "minidenticons": "^4.2.0",
"nostr-fetch": "^0.13.1", "nostr-fetch": "^0.13.1",
"nostr-tools": "^1.17.0", "nostr-tools": "^1.17.0",
@ -78,7 +78,7 @@
"react": "^18.2.0", "react": "^18.2.0",
"react-currency-input-field": "^3.6.11", "react-currency-input-field": "^3.6.11",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-hook-form": "^7.47.0", "react-hook-form": "^7.48.1",
"react-hotkeys-hook": "^4.4.1", "react-hotkeys-hook": "^4.4.1",
"react-medium-image-zoom": "^5.1.8", "react-medium-image-zoom": "^5.1.8",
"react-router-dom": "^6.18.0", "react-router-dom": "^6.18.0",
@ -89,8 +89,8 @@
"tauri-controls": "^0.2.0", "tauri-controls": "^0.2.0",
"tippy.js": "^6.3.7", "tippy.js": "^6.3.7",
"tiptap-markdown": "^0.8.3", "tiptap-markdown": "^0.8.3",
"virtua": "^0.16.0", "virtua": "^0.16.1",
"zustand": "^4.4.5" "zustand": "^4.4.6"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/typography": "^0.5.10", "@tailwindcss/typography": "^0.5.10",
@ -108,7 +108,7 @@
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"csstype": "^3.1.2", "csstype": "^3.1.2",
"encoding": "^0.1.13", "encoding": "^0.1.13",
"eslint": "^8.52.0", "eslint": "^8.53.0",
"eslint-config-prettier": "^9.0.0", "eslint-config-prettier": "^9.0.0",
"eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-jsx-a11y": "^6.8.0",
"eslint-plugin-react": "^7.33.2", "eslint-plugin-react": "^7.33.2",

View File

@ -51,11 +51,11 @@ dependencies:
specifier: ^5.4.3 specifier: ^5.4.3
version: 5.4.3 version: 5.4.3
'@tanstack/react-query': '@tanstack/react-query':
specifier: ^5.4.3 specifier: ^5.7.0
version: 5.4.3(react-dom@18.2.0)(react@18.2.0) version: 5.7.0(react-dom@18.2.0)(react@18.2.0)
'@tanstack/react-query-persist-client': '@tanstack/react-query-persist-client':
specifier: ^5.4.3 specifier: ^5.7.0
version: 5.4.3(@tanstack/react-query@5.4.3)(react-dom@18.2.0)(react@18.2.0) version: 5.7.0(@tanstack/react-query@5.7.0)(react-dom@18.2.0)(react@18.2.0)
'@tauri-apps/api': '@tauri-apps/api':
specifier: 2.0.0-alpha.11 specifier: 2.0.0-alpha.11
version: 2.0.0-alpha.11 version: 2.0.0-alpha.11
@ -143,6 +143,9 @@ dependencies:
html-to-text: html-to-text:
specifier: ^9.0.5 specifier: ^9.0.5
version: 9.0.5 version: 9.0.5
idb-keyval:
specifier: ^6.2.1
version: 6.2.1
immer: immer:
specifier: ^10.0.3 specifier: ^10.0.3
version: 10.0.3 version: 10.0.3
@ -156,11 +159,8 @@ dependencies:
specifier: ^7.3.2 specifier: ^7.3.2
version: 7.3.2(react@18.2.0) version: 7.3.2(react@18.2.0)
media-chrome: media-chrome:
specifier: ^1.5.0 specifier: ^1.5.2
version: 1.5.0 version: 1.5.2
million:
specifier: ^2.6.4
version: 2.6.4
minidenticons: minidenticons:
specifier: ^4.2.0 specifier: ^4.2.0
version: 4.2.0 version: 4.2.0
@ -186,8 +186,8 @@ dependencies:
specifier: ^18.2.0 specifier: ^18.2.0
version: 18.2.0(react@18.2.0) version: 18.2.0(react@18.2.0)
react-hook-form: react-hook-form:
specifier: ^7.47.0 specifier: ^7.48.1
version: 7.47.0(react@18.2.0) version: 7.48.1(react@18.2.0)
react-hotkeys-hook: react-hotkeys-hook:
specifier: ^4.4.1 specifier: ^4.4.1
version: 4.4.1(react-dom@18.2.0)(react@18.2.0) version: 4.4.1(react-dom@18.2.0)(react@18.2.0)
@ -219,11 +219,11 @@ dependencies:
specifier: ^0.8.3 specifier: ^0.8.3
version: 0.8.3(@tiptap/core@2.1.12) version: 0.8.3(@tiptap/core@2.1.12)
virtua: virtua:
specifier: ^0.16.0 specifier: ^0.16.1
version: 0.16.0(react-dom@18.2.0)(react@18.2.0) version: 0.16.1(react-dom@18.2.0)(react@18.2.0)
zustand: zustand:
specifier: ^4.4.5 specifier: ^4.4.6
version: 4.4.5(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0) version: 4.4.6(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0)
devDependencies: devDependencies:
'@tailwindcss/typography': '@tailwindcss/typography':
@ -249,10 +249,10 @@ devDependencies:
version: 5.5.9 version: 5.5.9
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^6.9.1 specifier: ^6.9.1
version: 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2) version: 6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.53.0)(typescript@5.2.2)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^6.9.1 specifier: ^6.9.1
version: 6.9.1(eslint@8.52.0)(typescript@5.2.2) version: 6.9.1(eslint@8.53.0)(typescript@5.2.2)
'@vitejs/plugin-react-swc': '@vitejs/plugin-react-swc':
specifier: ^3.4.1 specifier: ^3.4.1
version: 3.4.1(vite@4.5.0) version: 3.4.1(vite@4.5.0)
@ -272,20 +272,20 @@ devDependencies:
specifier: ^0.1.13 specifier: ^0.1.13
version: 0.1.13 version: 0.1.13
eslint: eslint:
specifier: ^8.52.0 specifier: ^8.53.0
version: 8.52.0 version: 8.53.0
eslint-config-prettier: eslint-config-prettier:
specifier: ^9.0.0 specifier: ^9.0.0
version: 9.0.0(eslint@8.52.0) version: 9.0.0(eslint@8.53.0)
eslint-plugin-jsx-a11y: eslint-plugin-jsx-a11y:
specifier: ^6.8.0 specifier: ^6.8.0
version: 6.8.0(eslint@8.52.0) version: 6.8.0(eslint@8.53.0)
eslint-plugin-react: eslint-plugin-react:
specifier: ^7.33.2 specifier: ^7.33.2
version: 7.33.2(eslint@8.52.0) version: 7.33.2(eslint@8.53.0)
eslint-plugin-simple-import-sort: eslint-plugin-simple-import-sort:
specifier: ^10.0.0 specifier: ^10.0.0
version: 10.0.0(eslint@8.52.0) version: 10.0.0(eslint@8.53.0)
husky: husky:
specifier: ^8.0.3 specifier: ^8.0.3
version: 8.0.3 version: 8.0.3
@ -331,48 +331,13 @@ packages:
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
engines: {node: '>=10'} engines: {node: '>=10'}
/@ampproject/remapping@2.2.1:
resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
engines: {node: '>=6.0.0'}
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20
dev: false
/@babel/code-frame@7.22.13: /@babel/code-frame@7.22.13:
resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/highlight': 7.22.20 '@babel/highlight': 7.22.20
chalk: 2.4.2 chalk: 2.4.2
dev: true
/@babel/compat-data@7.23.2:
resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/core@7.23.2:
resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
'@babel/code-frame': 7.22.13
'@babel/generator': 7.23.0
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2)
'@babel/helpers': 7.23.2
'@babel/parser': 7.23.0
'@babel/template': 7.22.15
'@babel/traverse': 7.23.2
'@babel/types': 7.23.0
convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
dev: false
/@babel/generator@7.17.7: /@babel/generator@7.17.7:
resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==}
@ -391,21 +356,12 @@ packages:
'@jridgewell/gen-mapping': 0.3.3 '@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.20 '@jridgewell/trace-mapping': 0.3.20
jsesc: 2.5.2 jsesc: 2.5.2
dev: true
/@babel/helper-compilation-targets@7.22.15:
resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/compat-data': 7.23.2
'@babel/helper-validator-option': 7.22.15
browserslist: 4.22.1
lru-cache: 5.1.1
semver: 6.3.1
dev: false
/@babel/helper-environment-visitor@7.22.20: /@babel/helper-environment-visitor@7.22.20:
resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-function-name@7.23.0: /@babel/helper-function-name@7.23.0:
resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
@ -413,75 +369,31 @@ packages:
dependencies: dependencies:
'@babel/template': 7.22.15 '@babel/template': 7.22.15
'@babel/types': 7.23.0 '@babel/types': 7.23.0
dev: true
/@babel/helper-hoist-variables@7.22.5: /@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.0 '@babel/types': 7.23.0
dev: true
/@babel/helper-module-imports@7.22.15:
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.0
dev: false
/@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2):
resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.22.15
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
'@babel/helper-validator-identifier': 7.22.20
dev: false
/@babel/helper-plugin-utils@7.22.5:
resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helper-simple-access@7.22.5:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/types': 7.23.0
dev: false
/@babel/helper-split-export-declaration@7.22.6: /@babel/helper-split-export-declaration@7.22.6:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dependencies: dependencies:
'@babel/types': 7.23.0 '@babel/types': 7.23.0
dev: true
/@babel/helper-string-parser@7.22.5: /@babel/helper-string-parser@7.22.5:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-validator-identifier@7.22.20: /@babel/helper-validator-identifier@7.22.20:
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
dev: true
/@babel/helper-validator-option@7.22.15:
resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==}
engines: {node: '>=6.9.0'}
dev: false
/@babel/helpers@7.23.2:
resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.15
'@babel/traverse': 7.23.2
'@babel/types': 7.23.0
transitivePeerDependencies:
- supports-color
dev: false
/@babel/highlight@7.22.20: /@babel/highlight@7.22.20:
resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==}
@ -490,6 +402,7 @@ packages:
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.22.20
chalk: 2.4.2 chalk: 2.4.2
js-tokens: 4.0.0 js-tokens: 4.0.0
dev: true
/@babel/parser@7.23.0: /@babel/parser@7.23.0:
resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==}
@ -497,26 +410,7 @@ packages:
hasBin: true hasBin: true
dependencies: dependencies:
'@babel/types': 7.17.0 '@babel/types': 7.17.0
dev: true
/@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.2):
resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: false
/@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.2):
resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.23.2
'@babel/helper-plugin-utils': 7.22.5
dev: false
/@babel/runtime@7.23.2: /@babel/runtime@7.23.2:
resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==}
@ -531,6 +425,7 @@ packages:
'@babel/code-frame': 7.22.13 '@babel/code-frame': 7.22.13
'@babel/parser': 7.23.0 '@babel/parser': 7.23.0
'@babel/types': 7.23.0 '@babel/types': 7.23.0
dev: true
/@babel/traverse@7.23.2: /@babel/traverse@7.23.2:
resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==}
@ -548,6 +443,7 @@ packages:
globals: 11.12.0 globals: 11.12.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true
/@babel/types@7.17.0: /@babel/types@7.17.0:
resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==}
@ -555,6 +451,7 @@ packages:
dependencies: dependencies:
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0 to-fast-properties: 2.0.0
dev: true
/@babel/types@7.23.0: /@babel/types@7.23.0:
resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==}
@ -563,6 +460,7 @@ packages:
'@babel/helper-string-parser': 7.22.5 '@babel/helper-string-parser': 7.22.5
'@babel/helper-validator-identifier': 7.22.20 '@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0 to-fast-properties: 2.0.0
dev: true
/@emotion/is-prop-valid@0.8.8: /@emotion/is-prop-valid@0.8.8:
resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==}
@ -776,13 +674,13 @@ packages:
dev: true dev: true
optional: true optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.52.0): /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
dependencies: dependencies:
eslint: 8.52.0 eslint: 8.53.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
dev: true dev: true
@ -791,8 +689,8 @@ packages:
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
dev: true dev: true
/@eslint/eslintrc@2.1.2: /@eslint/eslintrc@2.1.3:
resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dependencies: dependencies:
ajv: 6.12.6 ajv: 6.12.6
@ -808,8 +706,8 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@eslint/js@8.52.0: /@eslint/js@8.53.0:
resolution: {integrity: sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==} resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
@ -1824,7 +1722,7 @@ packages:
classcat: 5.0.4 classcat: 5.0.4
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
zustand: 4.4.5(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0) zustand: 4.4.6(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
- immer - immer
@ -1840,7 +1738,7 @@ packages:
classcat: 5.0.4 classcat: 5.0.4
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
zustand: 4.4.5(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0) zustand: 4.4.6(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
- immer - immer
@ -1862,7 +1760,7 @@ packages:
d3-zoom: 3.0.0 d3-zoom: 3.0.0
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
zustand: 4.4.5(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0) zustand: 4.4.6(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
- immer - immer
@ -1882,7 +1780,7 @@ packages:
d3-zoom: 3.0.0 d3-zoom: 3.0.0
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
zustand: 4.4.5(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0) zustand: 4.4.6(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
- immer - immer
@ -1900,7 +1798,7 @@ packages:
d3-selection: 3.0.0 d3-selection: 3.0.0
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
zustand: 4.4.5(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0) zustand: 4.4.6(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
- immer - immer
@ -1916,7 +1814,7 @@ packages:
classcat: 5.0.4 classcat: 5.0.4
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
zustand: 4.4.5(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0) zustand: 4.4.6(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/react' - '@types/react'
- immer - immer
@ -2137,21 +2035,21 @@ packages:
'@tanstack/query-persist-client-core': 5.4.3 '@tanstack/query-persist-client-core': 5.4.3
dev: false dev: false
/@tanstack/react-query-persist-client@5.4.3(@tanstack/react-query@5.4.3)(react-dom@18.2.0)(react@18.2.0): /@tanstack/react-query-persist-client@5.7.0(@tanstack/react-query@5.7.0)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-gpusG6IG6rnmdRT3onSjmRVG60K3BlsdUQifBVeLdi4uen1rvRAiB5a7jr4hFVMItzS9C4jBxJMWt/DmZpy6Ow==} resolution: {integrity: sha512-wcGu5z3nvJnFNEQ2zEe62N+HmjvImML2x3IPeZsieS6kLk097t7kcJjjppRcM6OgM4cPljUFXVhBboONGeMXXA==}
peerDependencies: peerDependencies:
'@tanstack/react-query': ^5.4.3 '@tanstack/react-query': ^5.7.0
react: ^18.0.0 react: ^18.0.0
react-dom: ^18.0.0 react-dom: ^18.0.0
dependencies: dependencies:
'@tanstack/query-persist-client-core': 5.4.3 '@tanstack/query-persist-client-core': 5.4.3
'@tanstack/react-query': 5.4.3(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query': 5.7.0(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0 react: 18.2.0
react-dom: 18.2.0(react@18.2.0) react-dom: 18.2.0(react@18.2.0)
dev: false dev: false
/@tanstack/react-query@5.4.3(react-dom@18.2.0)(react@18.2.0): /@tanstack/react-query@5.7.0(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-4aSOrRNa6yEmf7mws5QPTVMn8Lp7L38tFoTZ0c1ZmhIvbr8GIA0WT7X5N3yz/nuK8hUtjw9cAzBr4BPDZZ+tzA==} resolution: {integrity: sha512-f6F9OdW4MC0bwlYPXop114ngkkZtg650TeJpR2/ME9q/iJ/59dg2+LoGHEdHk2w1mNAdiuiPFYzCcl2WNkFiiw==}
peerDependencies: peerDependencies:
react: ^18.0.0 react: ^18.0.0
react-dom: ^18.0.0 react-dom: ^18.0.0
@ -2680,8 +2578,8 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@types/d3-array@3.0.9: /@types/d3-array@3.2.0:
resolution: {integrity: sha512-mZowFN3p64ajCJJ4riVYlOjNlBJv3hctgAY01pjw3qTnJePD8s9DZmYDzhHKvzfCYvdjwylkU38+Vdt7Cu2FDA==} resolution: {integrity: sha512-tjU8juPSfhMnu6mJZPOCVVGba4rZoE0tjHDPb81PYwA8CzbaFscGjgkUM7juUJu6iWA1cCVWNEVwxZ5HN9Jj8Q==}
dev: false dev: false
/@types/d3-axis@3.0.5: /@types/d3-axis@3.0.5:
@ -2707,7 +2605,7 @@ packages:
/@types/d3-contour@3.0.5: /@types/d3-contour@3.0.5:
resolution: {integrity: sha512-wLvjwdOQVd1NL1IcW90CCt1VtpeZ3V20p/OTXlkT8uAiprrJnq2PNNnRNe1QCez4U9aMU29Z14zpJQVLW1+Lcg==} resolution: {integrity: sha512-wLvjwdOQVd1NL1IcW90CCt1VtpeZ3V20p/OTXlkT8uAiprrJnq2PNNnRNe1QCez4U9aMU29Z14zpJQVLW1+Lcg==}
dependencies: dependencies:
'@types/d3-array': 3.0.9 '@types/d3-array': 3.2.0
'@types/geojson': 7946.0.12 '@types/geojson': 7946.0.12
dev: false dev: false
@ -2827,7 +2725,7 @@ packages:
/@types/d3@7.4.2: /@types/d3@7.4.2:
resolution: {integrity: sha512-Y4g2Yb30ZJmmtqAJTqMRaqXwRawfvpdpVmyEYEcyGNhrQI/Zvkq3k7yE1tdN07aFSmNBfvmegMQ9Fe2qy9ZMhw==} resolution: {integrity: sha512-Y4g2Yb30ZJmmtqAJTqMRaqXwRawfvpdpVmyEYEcyGNhrQI/Zvkq3k7yE1tdN07aFSmNBfvmegMQ9Fe2qy9ZMhw==}
dependencies: dependencies:
'@types/d3-array': 3.0.9 '@types/d3-array': 3.2.0
'@types/d3-axis': 3.0.5 '@types/d3-axis': 3.0.5
'@types/d3-brush': 3.0.5 '@types/d3-brush': 3.0.5
'@types/d3-chord': 3.0.5 '@types/d3-chord': 3.0.5
@ -2930,7 +2828,7 @@ packages:
resolution: {integrity: sha512-l2Q7ESxMv6HK2jc6I1qwMMGbh5bpHYQVCpXs0GsFmzaXoPibX50pHzs+PGfmegDY8TvmMGKWBgGI16ytqK6iIw==} resolution: {integrity: sha512-l2Q7ESxMv6HK2jc6I1qwMMGbh5bpHYQVCpXs0GsFmzaXoPibX50pHzs+PGfmegDY8TvmMGKWBgGI16ytqK6iIw==}
dev: true dev: true
/@typescript-eslint/eslint-plugin@6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.52.0)(typescript@5.2.2): /@typescript-eslint/eslint-plugin@6.9.1(@typescript-eslint/parser@6.9.1)(eslint@8.53.0)(typescript@5.2.2):
resolution: {integrity: sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==} resolution: {integrity: sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
@ -2942,13 +2840,13 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 6.9.1(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/parser': 6.9.1(eslint@8.53.0)(typescript@5.2.2)
'@typescript-eslint/scope-manager': 6.9.1 '@typescript-eslint/scope-manager': 6.9.1
'@typescript-eslint/type-utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/type-utils': 6.9.1(eslint@8.53.0)(typescript@5.2.2)
'@typescript-eslint/utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/utils': 6.9.1(eslint@8.53.0)(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.9.1 '@typescript-eslint/visitor-keys': 6.9.1
debug: 4.3.4 debug: 4.3.4
eslint: 8.52.0 eslint: 8.53.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.2.4 ignore: 5.2.4
natural-compare: 1.4.0 natural-compare: 1.4.0
@ -2959,7 +2857,7 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/parser@6.9.1(eslint@8.52.0)(typescript@5.2.2): /@typescript-eslint/parser@6.9.1(eslint@8.53.0)(typescript@5.2.2):
resolution: {integrity: sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==} resolution: {integrity: sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
@ -2974,7 +2872,7 @@ packages:
'@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2)
'@typescript-eslint/visitor-keys': 6.9.1 '@typescript-eslint/visitor-keys': 6.9.1
debug: 4.3.4 debug: 4.3.4
eslint: 8.52.0 eslint: 8.53.0
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -2988,7 +2886,7 @@ packages:
'@typescript-eslint/visitor-keys': 6.9.1 '@typescript-eslint/visitor-keys': 6.9.1
dev: true dev: true
/@typescript-eslint/type-utils@6.9.1(eslint@8.52.0)(typescript@5.2.2): /@typescript-eslint/type-utils@6.9.1(eslint@8.53.0)(typescript@5.2.2):
resolution: {integrity: sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==} resolution: {integrity: sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
@ -2999,9 +2897,9 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2)
'@typescript-eslint/utils': 6.9.1(eslint@8.52.0)(typescript@5.2.2) '@typescript-eslint/utils': 6.9.1(eslint@8.53.0)(typescript@5.2.2)
debug: 4.3.4 debug: 4.3.4
eslint: 8.52.0 eslint: 8.53.0
ts-api-utils: 1.0.3(typescript@5.2.2) ts-api-utils: 1.0.3(typescript@5.2.2)
typescript: 5.2.2 typescript: 5.2.2
transitivePeerDependencies: transitivePeerDependencies:
@ -3034,19 +2932,19 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/utils@6.9.1(eslint@8.52.0)(typescript@5.2.2): /@typescript-eslint/utils@6.9.1(eslint@8.53.0)(typescript@5.2.2):
resolution: {integrity: sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==} resolution: {integrity: sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies: peerDependencies:
eslint: ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0)
'@types/json-schema': 7.0.14 '@types/json-schema': 7.0.14
'@types/semver': 7.5.4 '@types/semver': 7.5.4
'@typescript-eslint/scope-manager': 6.9.1 '@typescript-eslint/scope-manager': 6.9.1
'@typescript-eslint/types': 6.9.1 '@typescript-eslint/types': 6.9.1
'@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2) '@typescript-eslint/typescript-estree': 6.9.1(typescript@5.2.2)
eslint: 8.52.0 eslint: 8.53.0
semver: 7.5.4 semver: 7.5.4
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -3088,6 +2986,7 @@ packages:
resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
hasBin: true hasBin: true
dev: true
/ajv@6.12.6: /ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@ -3120,6 +3019,7 @@ packages:
engines: {node: '>=4'} engines: {node: '>=4'}
dependencies: dependencies:
color-convert: 1.9.3 color-convert: 1.9.3
dev: true
/ansi-styles@4.3.0: /ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@ -3246,7 +3146,7 @@ packages:
postcss: ^8.1.0 postcss: ^8.1.0
dependencies: dependencies:
browserslist: 4.22.1 browserslist: 4.22.1
caniuse-lite: 1.0.30001559 caniuse-lite: 1.0.30001561
fraction.js: 4.3.7 fraction.js: 4.3.7
normalize-range: 0.1.2 normalize-range: 0.1.2
picocolors: 1.0.0 picocolors: 1.0.0
@ -3294,10 +3194,11 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true hasBin: true
dependencies: dependencies:
caniuse-lite: 1.0.30001559 caniuse-lite: 1.0.30001561
electron-to-chromium: 1.4.574 electron-to-chromium: 1.4.576
node-releases: 2.0.13 node-releases: 2.0.13
update-browserslist-db: 1.0.13(browserslist@4.22.1) update-browserslist-db: 1.0.13(browserslist@4.22.1)
dev: true
/bufferutil@4.0.8: /bufferutil@4.0.8:
resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==}
@ -3324,8 +3225,9 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
/caniuse-lite@1.0.30001559: /caniuse-lite@1.0.30001561:
resolution: {integrity: sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==} resolution: {integrity: sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==}
dev: true
/case-anything@2.1.13: /case-anything@2.1.13:
resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==}
@ -3339,6 +3241,7 @@ packages:
ansi-styles: 3.2.1 ansi-styles: 3.2.1
escape-string-regexp: 1.0.5 escape-string-regexp: 1.0.5
supports-color: 5.5.0 supports-color: 5.5.0
dev: true
/chalk@4.1.2: /chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@ -3400,6 +3303,7 @@ packages:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies: dependencies:
color-name: 1.1.3 color-name: 1.1.3
dev: true
/color-convert@2.0.1: /color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@ -3410,6 +3314,7 @@ packages:
/color-name@1.1.3: /color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
dev: true
/color-name@1.1.4: /color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
@ -3431,10 +3336,6 @@ packages:
/concat-map@0.0.1: /concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
/convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
dev: false
/crelt@1.0.6: /crelt@1.0.6:
resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
dev: false dev: false
@ -3682,8 +3583,9 @@ packages:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
dev: true dev: true
/electron-to-chromium@1.4.574: /electron-to-chromium@1.4.576:
resolution: {integrity: sha512-bg1m8L0n02xRzx4LsTTMbBPiUd9yIR+74iPtS/Ao65CuXvhVZHP0ym1kSdDG3yHFDXqHQQBKujlN1AQ8qZnyFg==} resolution: {integrity: sha512-yXsZyXJfAqzWk1WKryr0Wl0MN2D47xodPvEEwlVePBnhU5E7raevLQR+E6b9JAD3GfL/7MbAL9ZtWQQPcLx7wA==}
dev: true
/emoji-regex@9.2.2: /emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
@ -3851,25 +3753,27 @@ packages:
/escalade@3.1.1: /escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'} engines: {node: '>=6'}
dev: true
/escape-string-regexp@1.0.5: /escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'} engines: {node: '>=0.8.0'}
dev: true
/escape-string-regexp@4.0.0: /escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'} engines: {node: '>=10'}
/eslint-config-prettier@9.0.0(eslint@8.52.0): /eslint-config-prettier@9.0.0(eslint@8.53.0):
resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
eslint: '>=7.0.0' eslint: '>=7.0.0'
dependencies: dependencies:
eslint: 8.52.0 eslint: 8.53.0
dev: true dev: true
/eslint-plugin-jsx-a11y@6.8.0(eslint@8.52.0): /eslint-plugin-jsx-a11y@6.8.0(eslint@8.53.0):
resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==}
engines: {node: '>=4.0'} engines: {node: '>=4.0'}
peerDependencies: peerDependencies:
@ -3885,7 +3789,7 @@ packages:
damerau-levenshtein: 1.0.8 damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2 emoji-regex: 9.2.2
es-iterator-helpers: 1.0.15 es-iterator-helpers: 1.0.15
eslint: 8.52.0 eslint: 8.53.0
hasown: 2.0.0 hasown: 2.0.0
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
language-tags: 1.0.9 language-tags: 1.0.9
@ -3894,7 +3798,7 @@ packages:
object.fromentries: 2.0.7 object.fromentries: 2.0.7
dev: true dev: true
/eslint-plugin-react@7.33.2(eslint@8.52.0): /eslint-plugin-react@7.33.2(eslint@8.53.0):
resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
engines: {node: '>=4'} engines: {node: '>=4'}
peerDependencies: peerDependencies:
@ -3905,7 +3809,7 @@ packages:
array.prototype.tosorted: 1.1.2 array.prototype.tosorted: 1.1.2
doctrine: 2.1.0 doctrine: 2.1.0
es-iterator-helpers: 1.0.15 es-iterator-helpers: 1.0.15
eslint: 8.52.0 eslint: 8.53.0
estraverse: 5.3.0 estraverse: 5.3.0
jsx-ast-utils: 3.3.5 jsx-ast-utils: 3.3.5
minimatch: 3.1.2 minimatch: 3.1.2
@ -3919,12 +3823,12 @@ packages:
string.prototype.matchall: 4.0.10 string.prototype.matchall: 4.0.10
dev: true dev: true
/eslint-plugin-simple-import-sort@10.0.0(eslint@8.52.0): /eslint-plugin-simple-import-sort@10.0.0(eslint@8.53.0):
resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==}
peerDependencies: peerDependencies:
eslint: '>=5.0.0' eslint: '>=5.0.0'
dependencies: dependencies:
eslint: 8.52.0 eslint: 8.53.0
dev: true dev: true
/eslint-scope@7.2.2: /eslint-scope@7.2.2:
@ -3940,15 +3844,15 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/eslint@8.52.0: /eslint@8.53.0:
resolution: {integrity: sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==} resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
hasBin: true hasBin: true
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.52.0) '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0)
'@eslint-community/regexpp': 4.10.0 '@eslint-community/regexpp': 4.10.0
'@eslint/eslintrc': 2.1.2 '@eslint/eslintrc': 2.1.3
'@eslint/js': 8.52.0 '@eslint/js': 8.53.0
'@humanwhocodes/config-array': 0.11.13 '@humanwhocodes/config-array': 0.11.13
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8 '@nodelib/fs.walk': 1.2.8
@ -4179,11 +4083,6 @@ packages:
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
dev: true dev: true
/gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
dev: false
/get-intrinsic@1.2.2: /get-intrinsic@1.2.2:
resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
dependencies: dependencies:
@ -4247,6 +4146,7 @@ packages:
/globals@11.12.0: /globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'} engines: {node: '>=4'}
dev: true
/globals@13.23.0: /globals@13.23.0:
resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==}
@ -4295,6 +4195,7 @@ packages:
/has-flag@3.0.0: /has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'} engines: {node: '>=4'}
dev: true
/has-flag@4.0.0: /has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@ -4368,6 +4269,10 @@ packages:
safer-buffer: 2.1.2 safer-buffer: 2.1.2
dev: true dev: true
/idb-keyval@6.2.1:
resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==}
dev: false
/ignore@5.2.4: /ignore@5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
engines: {node: '>= 4'} engines: {node: '>= 4'}
@ -4643,6 +4548,7 @@ packages:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'} engines: {node: '>=4'}
hasBin: true hasBin: true
dev: true
/json-buffer@3.0.1: /json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@ -4656,12 +4562,6 @@ packages:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
dev: true dev: true
/json5@2.2.3:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
dev: false
/jsx-ast-utils@3.3.5: /jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'} engines: {node: '>=4.0'}
@ -4678,11 +4578,6 @@ packages:
json-buffer: 3.0.1 json-buffer: 3.0.1
dev: true dev: true
/kleur@4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
dev: false
/language-subtag-registry@0.3.22: /language-subtag-registry@0.3.22:
resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
dev: true dev: true
@ -4801,12 +4696,6 @@ packages:
engines: {node: 14 || >=16.14} engines: {node: 14 || >=16.14}
dev: false dev: false
/lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
dependencies:
yallist: 3.1.1
dev: false
/lru-cache@6.0.0: /lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -4846,8 +4735,8 @@ packages:
resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
dev: false dev: false
/media-chrome@1.5.0: /media-chrome@1.5.2:
resolution: {integrity: sha512-SHNADjnslaSOOETAfphH0kQyMLnkdxjPGxQ/QUlk9AeiHHBZCNSU+7y0sKWHoYBdC0fM3SIgqaS+qb99ObSVdQ==} resolution: {integrity: sha512-wMWYZXjRqXhv2gYR2arQAMphDXLVVPVmyLQFeI0NjBhKQ36oZujqGiiNBhP3leE4ol+t8oXoziPamt2qAeGpxw==}
dev: false dev: false
/merge-stream@2.0.0: /merge-stream@2.0.0:
@ -4865,22 +4754,6 @@ packages:
braces: 3.0.2 braces: 3.0.2
picomatch: 2.3.1 picomatch: 2.3.1
/million@2.6.4:
resolution: {integrity: sha512-voUkdd/jHWrG+7NS+mX49Pat+POKdgGW78V7pYMSrTaOjUitR6ySEcAci8hn17Rsx1IMI3+5w41dkADM1J1ZEg==}
hasBin: true
dependencies:
'@babel/core': 7.23.2
'@babel/generator': 7.23.0
'@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.2)
'@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.2)
'@babel/types': 7.23.0
kleur: 4.1.5
rollup: 3.29.4
unplugin: 1.5.0
transitivePeerDependencies:
- supports-color
dev: false
/mimic-fn@2.1.0: /mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'} engines: {node: '>=6'}
@ -4949,6 +4822,7 @@ packages:
/node-releases@2.0.13: /node-releases@2.0.13:
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
dev: true
/normalize-path@3.0.0: /normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
@ -5227,7 +5101,7 @@ packages:
dependencies: dependencies:
lilconfig: 2.1.0 lilconfig: 2.1.0
postcss: 8.4.31 postcss: 8.4.31
yaml: 2.3.3 yaml: 2.3.4
/postcss-nested@6.0.1(postcss@8.4.31): /postcss-nested@6.0.1(postcss@8.4.31):
resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
@ -5526,8 +5400,8 @@ packages:
scheduler: 0.23.0 scheduler: 0.23.0
dev: false dev: false
/react-hook-form@7.47.0(react@18.2.0): /react-hook-form@7.48.1(react@18.2.0):
resolution: {integrity: sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg==} resolution: {integrity: sha512-RPLOfCL+qC1lOTknh9OrgeFbchYUJ4KFgrqZTVHf0nRizcwzQUABrBIQk3SkujiqIXTs5xjP6eApc7FOpvpS1Q==}
engines: {node: '>=12.22.0'} engines: {node: '>=12.22.0'}
peerDependencies: peerDependencies:
react: ^16.8.0 || ^17 || ^18 react: ^16.8.0 || ^17 || ^18
@ -5751,6 +5625,7 @@ packages:
hasBin: true hasBin: true
optionalDependencies: optionalDependencies:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true
/rope-sequence@1.3.4: /rope-sequence@1.3.4:
resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==}
@ -5798,6 +5673,7 @@ packages:
/semver@6.3.1: /semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true hasBin: true
dev: true
/semver@7.5.4: /semver@7.5.4:
resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
@ -5982,6 +5858,7 @@ packages:
engines: {node: '>=4'} engines: {node: '>=4'}
dependencies: dependencies:
has-flag: 3.0.0 has-flag: 3.0.0
dev: true
/supports-color@7.2.0: /supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
@ -6096,6 +5973,7 @@ packages:
/to-fast-properties@2.0.0: /to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'} engines: {node: '>=4'}
dev: true
/to-regex-range@5.0.1: /to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@ -6236,15 +6114,6 @@ packages:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
dev: true dev: true
/unplugin@1.5.0:
resolution: {integrity: sha512-9ZdRwbh/4gcm1JTOkp9lAkIDrtOyOxgHmY7cjuwI8L/2RTikMcVG25GsZwNAgRuap3iDw2jeq7eoqtAsz5rW3A==}
dependencies:
acorn: 8.11.2
chokidar: 3.5.3
webpack-sources: 3.2.3
webpack-virtual-modules: 0.5.0
dev: false
/update-browserslist-db@1.0.13(browserslist@4.22.1): /update-browserslist-db@1.0.13(browserslist@4.22.1):
resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
hasBin: true hasBin: true
@ -6254,6 +6123,7 @@ packages:
browserslist: 4.22.1 browserslist: 4.22.1
escalade: 3.1.1 escalade: 3.1.1
picocolors: 1.0.0 picocolors: 1.0.0
dev: true
/uri-js@4.4.1: /uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@ -6316,8 +6186,8 @@ packages:
/util-deprecate@1.0.2: /util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
/virtua@0.16.0(react-dom@18.2.0)(react@18.2.0): /virtua@0.16.1(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-laq+Jpi6W73sXdXvLIxu+BLaFtUhP1Al25TJ/MwTHKTF5A9Kfs02xqHXsaLlh9WXk/eVbrwHt/+AM9U0dT6Hqg==} resolution: {integrity: sha512-PiJWO++uDo7efG+gSgedm8sC4aoPL0C7tLxM4bHs62SAPlF8n9NdvpRzgsRhhMj0HA319BXPPKPRvimg4n+2Yw==}
peerDependencies: peerDependencies:
react: '>=16.14.0' react: '>=16.14.0'
react-dom: '>=16.14.0' react-dom: '>=16.14.0'
@ -6388,15 +6258,6 @@ packages:
engines: {node: '>= 8'} engines: {node: '>= 8'}
dev: false dev: false
/webpack-sources@3.2.3:
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
engines: {node: '>=10.13.0'}
dev: false
/webpack-virtual-modules@0.5.0:
resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
dev: false
/websocket-polyfill@0.0.3: /websocket-polyfill@0.0.3:
resolution: {integrity: sha512-pF3kR8Uaoau78MpUmFfzbIRxXj9PeQrCuPepGE6JIsfsJ/o/iXr07Q2iQNzKSSblQJ0FiGWlS64N4pVSm+O3Dg==} resolution: {integrity: sha512-pF3kR8Uaoau78MpUmFfzbIRxXj9PeQrCuPepGE6JIsfsJ/o/iXr07Q2iQNzKSSblQJ0FiGWlS64N4pVSm+O3Dg==}
dependencies: dependencies:
@ -6493,10 +6354,6 @@ packages:
engines: {node: '>=0.10.32'} engines: {node: '>=0.10.32'}
dev: false dev: false
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
dev: false
/yallist@4.0.0: /yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true dev: true
@ -6504,14 +6361,19 @@ packages:
/yaml@2.3.3: /yaml@2.3.3:
resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==} resolution: {integrity: sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
dev: true
/yaml@2.3.4:
resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
engines: {node: '>= 14'}
/yocto-queue@0.1.0: /yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
dev: true dev: true
/zustand@4.4.5(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0): /zustand@4.4.6(@types/react@18.2.34)(immer@10.0.3)(react@18.2.0):
resolution: {integrity: sha512-jgIrBBLKncQW74PA2Lclct3gwD4aPughwGE4FqlXrv3rDqQox7JCn8rwUiFK6ygJcbBAvfTf8fF+ICg7HLD2FQ==} resolution: {integrity: sha512-Rb16eW55gqL4W2XZpJh0fnrATxYEG3Apl2gfHTyDSE965x/zxslTikpNch0JgNjJA9zK6gEFW8Fl6d1rTZaqgg==}
engines: {node: '>=12.7.0'} engines: {node: '>=12.7.0'}
peerDependencies: peerDependencies:
'@types/react': '>=16.8' '@types/react': '>=16.8'

View File

@ -100,7 +100,7 @@ export function SpaceScreen() {
if (status === 'pending') { if (status === 'pending') {
return ( return (
<div className="flex h-full w-full items-center justify-center"> <div className="flex h-full w-full items-center justify-center bg-white dark:bg-black">
<LoaderIcon className="h-5 w-5 animate-spin" /> <LoaderIcon className="h-5 w-5 animate-spin" />
</div> </div>
); );

View File

@ -28,9 +28,9 @@ const NDKProvider = ({ children }: PropsWithChildren<object>) => {
data-tauri-drag-region data-tauri-drag-region
className="flex h-screen w-screen items-center justify-center bg-neutral-50 dark:bg-neutral-950" className="flex h-screen w-screen items-center justify-center bg-neutral-50 dark:bg-neutral-950"
> >
<div className="flex flex-col items-center justify-center gap-2 text-center"> <div className="flex flex-col items-center justify-center gap-4 text-center">
<LoaderIcon className="h-7 w-7 animate-spin text-neutral-950 dark:text-neutral-50" /> <p className="text-xl font-medium">Connecting to relays...</p>
<p className="font-semibold">Connecting to relays</p> <LoaderIcon className="h-7 w-7 animate-spin" />
</div> </div>
</div> </div>
); );

View File

@ -60,11 +60,11 @@ const StorageProvider = ({ children }: PropsWithChildren<object>) => {
data-tauri-drag-region data-tauri-drag-region
className="flex h-screen w-screen items-center justify-center bg-neutral-50 dark:bg-neutral-950" className="flex h-screen w-screen items-center justify-center bg-neutral-50 dark:bg-neutral-950"
> >
<div className="flex flex-col items-center justify-center gap-2 text-center"> <div className="flex flex-col items-center justify-center gap-4 text-center">
<LoaderIcon className="h-7 w-7 animate-spin text-neutral-950 dark:text-neutral-50" /> <p className="text-xl font-medium">
<p className="font-semibold"> {isNewVersion ? 'Found a new version, updating' : 'Checking for updates...'}
{isNewVersion ? 'Found a new version, updating' : 'Checking for updates'}
</p> </p>
<LoaderIcon className="h-7 w-7 animate-spin" />
</div> </div>
</div> </div>
); );

View File

@ -31,7 +31,8 @@ root.render(
persister, persister,
dehydrateOptions: { dehydrateOptions: {
shouldDehydrateQuery: (query) => { shouldDehydrateQuery: (query) => {
if (query.queryKey !== 'widgets') return true; if (query.queryKey === 'widgets') return false;
return true;
}, },
}, },
}} }}

View File

@ -1,5 +1,6 @@
import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk'; import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
import { nip19 } from 'nostr-tools'; import { nip19 } from 'nostr-tools';
import { useCallback } from 'react';
import { import {
ArticleNote, ArticleNote,
@ -17,18 +18,21 @@ import { useEvent } from '@utils/hooks/useEvent';
export function ChildNote({ id, root }: { id: string; root?: string }) { export function ChildNote({ id, root }: { id: string; root?: string }) {
const { status, data } = useEvent(id); const { status, data } = useEvent(id);
const renderKind = (event: NDKEvent) => { const renderKind = useCallback(
switch (event.kind) { (event: NDKEvent) => {
case NDKKind.Text: switch (event.kind) {
return <TextNote content={event.content} />; case NDKKind.Text:
case NDKKind.Article: return <TextNote content={event.content} />;
return <ArticleNote event={event} />; case NDKKind.Article:
case 1063: return <ArticleNote event={event} />;
return <FileNote event={event} />; case 1063:
default: return <FileNote event={event} />;
return <UnknownNote event={event} />; default:
} return <UnknownNote event={event} />;
}; }
},
[id]
);
if (status === 'pending') { if (status === 'pending') {
return ( return (

View File

@ -4,11 +4,10 @@ import { download } from '@tauri-apps/plugin-upload';
import { import {
MediaControlBar, MediaControlBar,
MediaController, MediaController,
MediaFullscreenButton,
MediaMuteButton, MediaMuteButton,
MediaPlayButton, MediaPlayButton,
MediaTimeDisplay,
MediaTimeRange, MediaTimeRange,
MediaVolumeRange,
} from 'media-chrome/dist/react'; } from 'media-chrome/dist/react';
import { memo } from 'react'; import { memo } from 'react';
@ -56,9 +55,8 @@ export function FileNote(props: { event?: NDKEvent }) {
<MediaControlBar> <MediaControlBar>
<MediaPlayButton></MediaPlayButton> <MediaPlayButton></MediaPlayButton>
<MediaTimeRange></MediaTimeRange> <MediaTimeRange></MediaTimeRange>
<MediaTimeDisplay showDuration></MediaTimeDisplay>
<MediaMuteButton></MediaMuteButton> <MediaMuteButton></MediaMuteButton>
<MediaVolumeRange></MediaVolumeRange> <MediaFullscreenButton></MediaFullscreenButton>
</MediaControlBar> </MediaControlBar>
</MediaController> </MediaController>
); );

View File

@ -36,18 +36,21 @@ export function Repost({ event }: { event: NDKEvent }) {
refetchOnWindowFocus: false, refetchOnWindowFocus: false,
}); });
const renderKind = useCallback((repostEvent: NDKEvent) => { const renderKind = useCallback(
switch (repostEvent.kind) { (repostEvent: NDKEvent) => {
case NDKKind.Text: switch (repostEvent.kind) {
return <TextNote content={repostEvent.content} />; case NDKKind.Text:
case NDKKind.Article: return <TextNote content={repostEvent.content} />;
return <ArticleNote event={repostEvent} />; case NDKKind.Article:
case 1063: return <ArticleNote event={repostEvent} />;
return <FileNote event={repostEvent} />; case 1063:
default: return <FileNote event={repostEvent} />;
return <UnknownNote event={repostEvent} />; default:
} return <UnknownNote event={repostEvent} />;
}, []); }
},
[event.id]
);
if (embedEvent) { if (embedEvent) {
return ( return (

View File

@ -1,28 +1,21 @@
import { memo } from 'react'; import { memo } from 'react';
import { ImagePreview, LinkPreview, VideoPreview } from '@shared/notes';
import { useRichContent } from '@utils/hooks/useRichContent'; import { useRichContent } from '@utils/hooks/useRichContent';
export function TextNote(props: { content?: string; truncate?: boolean }) { export function TextNote(props: { content?: string; truncate?: boolean }) {
const { parsedContent, images, videos, linkPreview } = useRichContent(props.content); const { parsedContent } = useRichContent(props.content);
if (props.truncate) { if (props.truncate) {
return ( return (
<div className="break-p prose prose-neutral max-w-none select-text whitespace-pre-line leading-normal dark:prose-invert"> <div className="break-p select-text whitespace-pre-line leading-normal text-neutral-900 dark:text-neutral-100">
{props.content} {props.content}
</div> </div>
); );
} }
return ( return (
<div className="flex flex-col gap-3"> <div className="break-p select-text whitespace-pre-line leading-normal text-neutral-900 dark:text-neutral-100">
<div className="break-p prose prose-neutral max-w-none select-text whitespace-pre-line leading-normal dark:prose-invert prose-img:mb-0 prose-img:mt-0"> {parsedContent}
{parsedContent}
</div>
{images.length ? <ImagePreview urls={images} /> : null}
{videos.length ? <VideoPreview urls={videos} /> : null}
{linkPreview ? <LinkPreview url={linkPreview} /> : null}
</div> </div>
); );
} }

View File

@ -5,7 +5,7 @@ import Zoom from 'react-medium-image-zoom';
import { DownloadIcon } from '@shared/icons'; import { DownloadIcon } from '@shared/icons';
export function ImagePreview({ urls }: { urls: string[] }) { export function ImagePreview({ url }: { url: string }) {
const downloadImage = async (url: string) => { const downloadImage = async (url: string) => {
const downloadDirPath = await downloadDir(); const downloadDirPath = await downloadDir();
const filename = url.substring(url.lastIndexOf('/') + 1); const filename = url.substring(url.lastIndexOf('/') + 1);
@ -17,29 +17,25 @@ export function ImagePreview({ urls }: { urls: string[] }) {
}; };
return ( return (
<div className="flex w-full flex-col gap-2"> <Zoom key={url} zoomMargin={50}>
{urls.map((url) => ( <div className="group relative mt-2">
<Zoom key={url} zoomMargin={50}> <img
<div className="group relative"> src={url}
<img alt={url}
src={url} loading="lazy"
alt={url} decoding="async"
loading="lazy" style={{ contentVisibility: 'auto' }}
decoding="async" onError={fallback}
style={{ contentVisibility: 'auto' }} className="h-auto w-full rounded-lg border border-neutral-300/50 object-cover dark:border-neutral-700/50"
onError={fallback} />
className="h-auto w-full rounded-lg border border-neutral-300 object-cover dark:border-neutral-700" <button
/> type="button"
<button onClick={() => downloadImage(url)}
type="button" 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"
onClick={() => downloadImage(url)} >
className="absolute right-2 top-2 hidden h-10 w-10 items-center justify-center rounded-xl bg-black/50 backdrop-blur-xl group-hover:inline-flex hover:bg-blue-500" <DownloadIcon className="h-4 w-4 text-white" />
> </button>
<DownloadIcon className="h-4 w-4 text-white" /> </div>
</button> </Zoom>
</div>
</Zoom>
))}
</div>
); );
} }

View File

@ -12,7 +12,7 @@ export function LinkPreview({ url }: { url: string }) {
if (status === 'pending') { if (status === 'pending') {
return ( return (
<div className="flex w-full flex-col bg-neutral-200 dark:bg-neutral-800"> <div className="mt-2 flex w-full flex-col rounded-lg border border-neutral-300 bg-neutral-200 dark:border-neutral-700 dark:bg-neutral-800">
<div className="h-44 w-full animate-pulse bg-neutral-400 dark:bg-neutral-600" /> <div className="h-44 w-full animate-pulse bg-neutral-400 dark:bg-neutral-600" />
<div className="flex flex-col gap-2 px-3 py-3"> <div className="flex flex-col gap-2 px-3 py-3">
<div className="h-3 w-2/3 animate-pulse rounded bg-neutral-400 dark:bg-neutral-600" /> <div className="h-3 w-2/3 animate-pulse rounded bg-neutral-400 dark:bg-neutral-600" />
@ -30,7 +30,7 @@ export function LinkPreview({ url }: { url: string }) {
to={url} to={url}
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
className="flex w-full flex-col rounded-lg border border-neutral-300 bg-neutral-200 dark:border-neutral-700 dark:bg-neutral-800" className="mt-2 flex w-full flex-col rounded-lg border border-neutral-300 bg-neutral-200 dark:border-neutral-700 dark:bg-neutral-800"
> >
{isImage(data.image) ? ( {isImage(data.image) ? (
<img <img
@ -42,19 +42,19 @@ export function LinkPreview({ url }: { url: string }) {
<div className="flex flex-col items-start px-3 py-3"> <div className="flex flex-col items-start px-3 py-3">
<div className="flex flex-col items-start gap-1 text-left"> <div className="flex flex-col items-start gap-1 text-left">
{data.title && ( {data.title && (
<h5 className="line-clamp-1 text-base font-semibold text-neutral-900 dark:text-neutral-100"> <div className="line-clamp-1 text-base font-semibold text-neutral-900 dark:text-neutral-100">
{data.title} {data.title}
</h5> </div>
)} )}
{data.description ? ( {data.description ? (
<p className="mb-2.5 line-clamp-3 break-all text-sm text-neutral-700 dark:text-neutral-400"> <div className="mb-2 line-clamp-3 break-all text-sm text-neutral-700 dark:text-neutral-400">
{data.description} {data.description}
</p> </div>
) : null} ) : null}
</div> </div>
<span className="break-all text-sm text-neutral-600 dark:text-neutral-400"> <div className="break-all text-sm text-neutral-600 dark:text-neutral-400">
{domain.hostname} {domain.hostname}
</span> </div>
</div> </div>
</Link> </Link>
); );

View File

@ -1,28 +1,27 @@
import { import {
MediaControlBar, MediaControlBar,
MediaController, MediaController,
MediaFullscreenButton,
MediaLoadingIndicator,
MediaMuteButton, MediaMuteButton,
MediaPlayButton, MediaPlayButton,
MediaTimeDisplay,
MediaTimeRange, MediaTimeRange,
MediaVolumeRange,
} from 'media-chrome/dist/react'; } from 'media-chrome/dist/react';
export function VideoPreview({ urls }: { urls: string[] }) { export function VideoPreview({ url }: { url: string }) {
return ( return (
<div className="flex w-full flex-col gap-2"> <MediaController
{urls.map((url) => ( key={url}
<MediaController key={url} className="aspect-video overflow-hidden rounded-lg"> className="mt-2 aspect-video w-full overflow-hidden rounded-lg"
<video slot="media" src={url} preload="metadata" muted /> >
<MediaControlBar> <video slot="media" src={url} preload="metadata" muted />
<MediaPlayButton></MediaPlayButton> <MediaLoadingIndicator slot="centered-chrome"></MediaLoadingIndicator>
<MediaTimeRange></MediaTimeRange> <MediaControlBar>
<MediaTimeDisplay showDuration></MediaTimeDisplay> <MediaPlayButton></MediaPlayButton>
<MediaMuteButton></MediaMuteButton> <MediaTimeRange></MediaTimeRange>
<MediaVolumeRange></MediaVolumeRange> <MediaMuteButton></MediaMuteButton>
</MediaControlBar> <MediaFullscreenButton></MediaFullscreenButton>
</MediaController> </MediaControlBar>
))} </MediaController>
</div>
); );
} }

View File

@ -16,9 +16,12 @@ export function NoteWrapper({
return event.tags[0][1]; return event.tags[0][1];
} }
return event.tags.find((el) => el[3] === 'root')?.[1]; return event.tags.find((el) => el[3] === 'root')?.[1];
}, [event]); }, [event.id]);
const reply = useMemo(() => event.tags.find((el) => el[3] === 'reply')?.[1], []); const reply = useMemo(
() => event.tags.find((el) => el[3] === 'reply')?.[1],
[event.id]
);
return ( return (
<div className="h-min w-full px-3 pb-3"> <div className="h-min w-full px-3 pb-3">

View File

@ -1,7 +1,7 @@
import * as Avatar from '@radix-ui/react-avatar'; import * as Avatar from '@radix-ui/react-avatar';
import * as HoverCard from '@radix-ui/react-hover-card'; import * as HoverCard from '@radix-ui/react-hover-card';
import { minidenticon } from 'minidenticons'; import { minidenticon } from 'minidenticons';
import { memo } from 'react'; import { memo, useMemo } from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { RepostIcon, WorldIcon } from '@shared/icons'; import { RepostIcon, WorldIcon } from '@shared/icons';
@ -39,9 +39,11 @@ export const User = memo(function User({
}) { }) {
const { status, user } = useProfile(pubkey, embedProfile); const { status, user } = useProfile(pubkey, embedProfile);
const createdAt = formatCreatedAt(time, variant === 'chat'); const createdAt = useMemo(() => formatCreatedAt(time, variant === 'chat'), [pubkey]);
const svgURI = const svgURI = useMemo(
'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(pubkey, 90, 50)); () => 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(pubkey, 90, 50)),
[pubkey]
);
if (variant === 'mention') { if (variant === 'mention') {
if (status === 'pending') { if (status === 'pending') {

View File

@ -0,0 +1,77 @@
import { NDKEvent, NDKFilter, NDKKind, NDKSubscription } from '@nostr-dev-kit/ndk';
import { QueryStatus, useQueryClient } from '@tanstack/react-query';
import { forwardRef, useEffect, useState } from 'react';
import { VListHandle } from 'virtua';
import { useNDK } from '@libs/ndk/provider';
import { useStorage } from '@libs/storage/provider';
import { ChevronUpIcon } from '@shared/icons';
export const LiveUpdater = forwardRef(function LiveUpdater({
status,
ref,
}: {
status: QueryStatus;
ref: VListHandle;
}) {
const { db } = useStorage();
const { ndk } = useNDK();
const [events, setEvents] = useState<NDKEvent[]>([]);
const queryClient = useQueryClient();
const update = async () => {
await queryClient.setQueryData(
['newsfeed'],
(prev: { pageParams: number; pages: Array<NDKEvent[]> }) => ({
...prev,
pages: [[...events], ...prev.pages],
})
);
// reset
setEvents([]);
// scroll to top
ref.scrollToIndex(0, { smooth: true });
};
useEffect(() => {
let sub: NDKSubscription = undefined;
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 = ndk.subscribe(filter, { closeOnEose: false, groupable: false });
sub.addListener('event', (event: NDKEvent) =>
setEvents((prev) => [...prev, event])
);
}
return () => {
if (sub) sub.stop();
};
}, [status]);
if (!events.length) return null;
return (
<div className="absolute left-0 top-11 z-50 flex h-11 w-full items-center justify-center">
<button
type="button"
onClick={update}
className="inline-flex h-9 w-max items-center justify-center gap-1 rounded-full bg-blue-500 px-2.5 text-sm font-semibold text-white hover:bg-blue-600"
>
<ChevronUpIcon className="h-4 w-4" />
{events.length} posts
</button>
</div>
);
});

View File

@ -1,15 +1,13 @@
import { NDKEvent, NDKFilter, NDKKind, NDKSubscription } from '@nostr-dev-kit/ndk'; import { NDKEvent, NDKKind } from '@nostr-dev-kit/ndk';
import { useInfiniteQuery, useQueryClient } from '@tanstack/react-query'; import { useInfiniteQuery } from '@tanstack/react-query';
import { useCallback, useEffect, useMemo } from 'react'; import { useCallback, useMemo, useRef } from 'react';
import { VList } from 'virtua'; import { VList, VListHandle } from 'virtua';
import { useNDK } from '@libs/ndk/provider'; import { useNDK } from '@libs/ndk/provider';
import { useStorage } from '@libs/storage/provider'; import { useStorage } from '@libs/storage/provider';
import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons'; import { ArrowRightCircleIcon, LoaderIcon } from '@shared/icons';
import { import {
MemoizedArticleNote,
MemoizedFileNote,
MemoizedRepost, MemoizedRepost,
MemoizedTextNote, MemoizedTextNote,
NoteSkeleton, NoteSkeleton,
@ -19,9 +17,9 @@ import {
import { TitleBar } from '@shared/titleBar'; import { TitleBar } from '@shared/titleBar';
import { WidgetWrapper } from '@shared/widgets'; import { WidgetWrapper } from '@shared/widgets';
export function NewsfeedWidget() { import { LiveUpdater } from './liveUpdater';
const queryClient = useQueryClient();
export function NewsfeedWidget() {
const { db } = useStorage(); const { db } = useStorage();
const { relayUrls, ndk, fetcher } = useNDK(); const { relayUrls, ndk, fetcher } = useNDK();
const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } = const { status, data, hasNextPage, isFetchingNextPage, fetchNextPage } =
@ -41,10 +39,10 @@ export function NewsfeedWidget() {
const events = await fetcher.fetchLatestEvents( const events = await fetcher.fetchLatestEvents(
relayUrls, relayUrls,
{ {
kinds: [NDKKind.Text, NDKKind.Repost, 1063, NDKKind.Article], kinds: [NDKKind.Text, NDKKind.Repost],
authors: db.account.circles, authors: db.account.circles,
}, },
50, 20,
{ asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal } { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
); );
@ -70,79 +68,42 @@ export function NewsfeedWidget() {
if (!lastEvent) return; if (!lastEvent) return;
return lastEvent.created_at - 1; return lastEvent.created_at - 1;
}, },
refetchOnWindowFocus: false,
}); });
const ref = useRef<VListHandle>();
const allEvents = useMemo( const allEvents = useMemo(
() => (data ? data.pages.flatMap((page) => page) : []), () => (data ? data.pages.flatMap((page) => page) : []),
[data] [data]
); );
const renderItem = useCallback((event: NDKEvent) => { const renderItem = useCallback(
switch (event.kind) { (event: NDKEvent) => {
case NDKKind.Text: switch (event.kind) {
return ( case NDKKind.Text:
<NoteWrapper key={event.id} event={event}> return (
<MemoizedTextNote /> <NoteWrapper key={event.id} event={event}>
</NoteWrapper> <MemoizedTextNote />
); </NoteWrapper>
case NDKKind.Repost: );
return <MemoizedRepost key={event.id} event={event} />; case NDKKind.Repost:
case 1063: return <MemoizedRepost key={event.id} event={event} />;
return ( default:
<NoteWrapper key={event.id} event={event}> return (
<MemoizedFileNote /> <NoteWrapper key={event.id} event={event}>
</NoteWrapper> <UnknownNote />
); </NoteWrapper>
case NDKKind.Article: );
return ( }
<NoteWrapper key={event.id} event={event}> },
<MemoizedArticleNote /> [data]
</NoteWrapper> );
);
default:
return (
<NoteWrapper key={event.id} event={event}>
<UnknownNote />
</NoteWrapper>
);
}
}, []);
useEffect(() => {
let sub: NDKSubscription = undefined;
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 = ndk.subscribe(filter, { closeOnEose: false, groupable: false });
sub.addListener('event', async (event: NDKEvent) => {
await queryClient.setQueryData(
['newsfeed'],
(prev: { pageParams: number; pages: Array<NDKEvent[]> }) => ({
...prev,
pages: [[event], ...prev.pages],
})
);
});
}
return () => {
if (sub) sub.stop();
};
}, [status]);
console.log('RERENDER');
return ( return (
<WidgetWrapper> <WidgetWrapper>
<TitleBar id="9999" isLive /> <TitleBar id="9999" isLive />
<VList className="flex-1"> <LiveUpdater status={status} ref={ref} />
<VList className="flex-1" ref={ref} overscan={2}>
{status === 'pending' ? ( {status === 'pending' ? (
<div className="px-3 py-1.5"> <div className="px-3 py-1.5">
<div className="rounded-xl bg-neutral-100 px-3 py-3 dark:bg-neutral-900"> <div className="rounded-xl bg-neutral-100 px-3 py-3 dark:bg-neutral-900">

View File

@ -38,7 +38,7 @@ export function NotificationWidget() {
kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Reaction, NDKKind.Zap], kinds: [NDKKind.Text, NDKKind.Repost, NDKKind.Reaction, NDKKind.Zap],
'#p': [db.account.pubkey], '#p': [db.account.pubkey],
}, },
50, 20,
{ asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal } { asOf: pageParam === 0 ? undefined : pageParam, abortSignal: signal }
); );
@ -139,7 +139,7 @@ export function NotificationWidget() {
return ( return (
<WidgetWrapper> <WidgetWrapper>
<TitleBar id="9998" title="Notification" isLive /> <TitleBar id="9998" title="Notification" isLive />
<VList className="flex-1"> <VList className="flex-1" overscan={2}>
{status === 'pending' ? ( {status === 'pending' ? (
<div className="px-3 py-1.5"> <div className="px-3 py-1.5">
<div className="rounded-xl bg-neutral-100 px-3 py-3 dark:bg-neutral-900"> <div className="rounded-xl bg-neutral-100 px-3 py-3 dark:bg-neutral-900">

View File

@ -21,7 +21,7 @@ export function WidgetWrapper({
minWidth={420} minWidth={420}
maxWidth={600} maxWidth={600}
className={twMerge( className={twMerge(
'flex flex-col border-r-2 border-neutral-50 hover:border-neutral-100 dark:border-neutral-950 dark:hover:border-neutral-900', 'relative flex flex-col border-r-2 border-neutral-50 hover:border-neutral-100 dark:border-neutral-950 dark:hover:border-neutral-900',
className className
)} )}
enable={{ right: true }} enable={{ right: true }}

View File

@ -3,7 +3,14 @@ import { ReactNode } from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import reactStringReplace from 'react-string-replace'; import reactStringReplace from 'react-string-replace';
import { Hashtag, MentionNote, MentionUser } from '@shared/notes'; import {
Hashtag,
ImagePreview,
LinkPreview,
MentionNote,
MentionUser,
VideoPreview,
} from '@shared/notes';
const NOSTR_MENTIONS = [ const NOSTR_MENTIONS = [
'@npub1', '@npub1',
@ -42,17 +49,10 @@ export function useRichContent(content: string) {
const text = content; const text = content;
const words = text.split(/(\s+)/); const words = text.split(/(\s+)/);
const images = words const images = words.filter((word) => IMAGES.some((el) => word.endsWith(el)));
.filter((word) => IMAGES.some((el) => word.endsWith(el))) const videos = words.filter((word) => VIDEOS.some((el) => word.endsWith(el)));
.map((item: string) => item);
const videos = words
.filter((word) => VIDEOS.some((el) => word.endsWith(el)))
.map((item: string) => item);
const hashtags = words.filter((word) => word.startsWith('#')); const hashtags = words.filter((word) => word.startsWith('#'));
const events = words.filter((word) => NOSTR_EVENTS.some((el) => word.startsWith(el))); const events = words.filter((word) => NOSTR_EVENTS.some((el) => word.startsWith(el)));
const mentions = words.filter((word) => const mentions = words.filter((word) =>
NOSTR_MENTIONS.some((el) => word.startsWith(el)) NOSTR_MENTIONS.some((el) => word.startsWith(el))
); );
@ -60,15 +60,17 @@ export function useRichContent(content: string) {
try { try {
if (images.length) { if (images.length) {
images.forEach((image) => { images.forEach((image) => {
// @ts-expect-error, it is string at this time parsedContent = reactStringReplace(parsedContent, image, (match, i) => (
parsedContent = parsedContent.replace(image, ''); <ImagePreview key={match + i} url={match} />
));
}); });
} }
if (videos.length) { if (videos.length) {
videos.forEach((video) => { videos.forEach((video) => {
// @ts-expect-error, it is string at this time parsedContent = reactStringReplace(parsedContent, video, (match, i) => (
parsedContent = parsedContent.replace(video, ''); <VideoPreview key={match + i} url={match} />
));
}); });
} }
@ -82,7 +84,7 @@ export function useRichContent(content: string) {
if (events.length) { if (events.length) {
events.forEach((event) => { events.forEach((event) => {
const address = event.replace('nostr:', ''); const address = event.replace('nostr:', '').replace(/[^a-zA-Z0-9]/g, '');
const decoded = nip19.decode(address); const decoded = nip19.decode(address);
if (decoded.type === 'note') { if (decoded.type === 'note') {
@ -101,7 +103,10 @@ export function useRichContent(content: string) {
if (mentions.length) { if (mentions.length) {
mentions.forEach((mention) => { mentions.forEach((mention) => {
const address = mention.replace('nostr:', '').replace('@', ''); const address = mention
.replace('nostr:', '')
.replace('@', '')
.replace(/[^a-zA-Z0-9]/g, '');
const decoded = nip19.decode(address); const decoded = nip19.decode(address);
if (decoded.type === 'npub') { if (decoded.type === 'npub') {
@ -119,18 +124,18 @@ export function useRichContent(content: string) {
} }
parsedContent = reactStringReplace(parsedContent, /(https?:\/\/\S+)/g, (match, i) => { parsedContent = reactStringReplace(parsedContent, /(https?:\/\/\S+)/g, (match, i) => {
if (!linkPreview) {
linkPreview = match;
if (content.length < 500) return null;
}
const url = new URL(match); const url = new URL(match);
url.search = ''; url.search = '';
if (!linkPreview) {
linkPreview = match;
return <LinkPreview key={match + i} url={url.toString()} />;
}
return ( return (
<Link <Link
key={match + i} key={match + i}
to={url} to={url.toString()}
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
className="break-all font-normal text-blue-500 hover:text-blue-600" className="break-all font-normal text-blue-500 hover:text-blue-600"
@ -141,12 +146,12 @@ export function useRichContent(content: string) {
}); });
if (typeof parsedContent[0] === 'string') { if (typeof parsedContent[0] === 'string') {
parsedContent[0] = parsedContent[0].trim(); parsedContent[0] = parsedContent[0].trimStart();
} }
return { parsedContent, images, videos, linkPreview }; return { parsedContent };
} catch (e) { } catch (e) {
console.warn('[parser] parse failed: ', e); console.warn('[parser] parse failed: ', e);
return { parsedContent, images, videos, linkPreview }; return { parsedContent };
} }
} }

View File

@ -1,14 +1,9 @@
import react from '@vitejs/plugin-react-swc'; import react from '@vitejs/plugin-react-swc';
import million from 'million/compiler';
import { defineConfig } from 'vite'; import { defineConfig } from 'vite';
import viteTsconfigPaths from 'vite-tsconfig-paths'; import viteTsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({ export default defineConfig({
plugins: [ plugins: [react(), viteTsconfigPaths()],
million.vite({ optimize: false, auto: true, mute: true }),
react(),
viteTsconfigPaths(),
],
envPrefix: ['VITE_', 'TAURI_'], envPrefix: ['VITE_', 'TAURI_'],
build: { build: {
target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13', target: process.env.TAURI_PLATFORM === 'windows' ? 'chrome105' : 'safari13',