diff --git a/package.json b/package.json index b340d8b0..3b64ae54 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "lume", "private": true, - "version": "1.0.1", + "version": "1.1.0", "scripts": { "dev": "vite", "build": "vite build", @@ -9,7 +9,8 @@ "add-migrate": "cd src-tauri/ && sqlx migrate add", "prepare": "husky install", "lint": "eslint ./src --fix", - "format": "prettier ./src --write" + "format": "prettier ./src --write", + "dep-update": "pnpm update && cd src-tauri/ && cargo update" }, "lint-staged": { "**/*.{ts, tsx}": "eslint --fix", @@ -17,67 +18,80 @@ }, "dependencies": { "@headlessui/react": "^1.7.15", - "@nostr-dev-kit/ndk": "^0.7.5", + "@nostr-dev-kit/ndk": "^0.7.7", + "@nostr-fetch/adapter-ndk": "^0.11.0", + "@radix-ui/react-dialog": "^1.0.4", "@radix-ui/react-popover": "^1.0.6", "@radix-ui/react-tooltip": "^1.0.6", - "@tanstack/react-query": "^4.29.19", - "@tanstack/react-query-devtools": "^4.29.19", + "@tanstack/react-query": "^4.32.0", + "@tanstack/react-query-devtools": "^4.32.0", "@tanstack/react-virtual": "3.0.0-beta.54", "@tauri-apps/api": "^1.4.0", + "@tiptap/extension-image": "^2.0.4", + "@tiptap/extension-mention": "^2.0.4", + "@tiptap/extension-placeholder": "^2.0.4", + "@tiptap/pm": "^2.0.4", + "@tiptap/react": "^2.0.4", + "@tiptap/starter-kit": "^2.0.4", + "@tiptap/suggestion": "^2.0.4", "cheerio": "1.0.0-rc.12", "dayjs": "^1.11.9", "destr": "^1.2.2", - "framer-motion": "^10.12.18", + "framer-motion": "^10.13.1", "get-urls": "^11.0.0", + "html-to-text": "^9.0.5", "immer": "^10.0.2", "light-bolt11-decoder": "^3.0.0", - "nostr-tools": "^1.12.1", + "nostr-fetch": "^0.12.2", + "nostr-tools": "^1.13.1", + "qrcode.react": "^3.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-hook-form": "^7.45.1", + "react-hook-form": "^7.45.2", "react-hotkeys-hook": "^4.4.1", + "react-markdown": "^8.0.7", "react-player": "^2.12.0", - "react-router-dom": "^6.14.1", + "react-router-dom": "^6.14.2", "react-string-replace": "^1.1.1", - "react-virtuoso": "^4.3.11", - "slate": "^0.94.1", - "slate-history": "^0.93.0", - "slate-react": "^0.94.2", - "tailwind-merge": "^1.13.2", + "react-virtuoso": "^4.4.2", + "remark-gfm": "^3.0.1", + "tailwind-merge": "^1.14.0", "tauri-plugin-autostart-api": "github:tauri-apps/tauri-plugin-autostart#v1", "tauri-plugin-sql-api": "github:tauri-apps/tauri-plugin-sql", "tauri-plugin-stronghold-api": "github:tauri-apps/tauri-plugin-stronghold#v1", + "tauri-plugin-upload-api": "github:tauri-apps/tauri-plugin-upload#v1", + "tippy.js": "^6.3.7", "zustand": "^4.3.9" }, "devDependencies": { "@tailwindcss/typography": "^0.5.9", "@tauri-apps/cli": "^1.4.0", - "@trivago/prettier-plugin-sort-imports": "^4.1.1", - "@types/node": "^18.16.19", - "@types/react": "^18.2.14", - "@types/react-dom": "^18.2.6", + "@trivago/prettier-plugin-sort-imports": "^4.2.0", + "@types/node": "^18.17.0", + "@types/react": "^18.2.16", + "@types/react-dom": "^18.2.7", "@types/youtube-player": "^5.5.7", - "@typescript-eslint/eslint-plugin": "^5.61.0", - "@typescript-eslint/parser": "^5.61.0", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", "@vitejs/plugin-react-swc": "^3.3.2", "autoprefixer": "^10.4.14", "cross-env": "^7.0.3", "csstype": "^3.1.2", "encoding": "^0.1.13", - "eslint": "^8.44.0", + "eslint": "^8.45.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react": "^7.33.0", "eslint-plugin-simple-import-sort": "^10.0.0", "husky": "^8.0.3", "lint-staged": "^13.2.3", - "postcss": "^8.4.25", + "postcss": "^8.4.27", "prettier": "^2.8.8", "prettier-plugin-tailwindcss": "^0.3.0", "prop-types": "^15.8.1", - "tailwindcss": "^3.3.2", + "tailwindcss": "^3.3.3", "typescript": "^4.9.5", - "vite": "^4.4.2", + "vite": "^4.4.7", "vite-plugin-top-level-await": "^1.3.1", "vite-tsconfig-paths": "^4.2.0" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 815d383e..aa99d45a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,26 +5,53 @@ dependencies: specifier: ^1.7.15 version: 1.7.15(react-dom@18.2.0)(react@18.2.0) '@nostr-dev-kit/ndk': - specifier: ^0.7.5 - version: 0.7.5(typescript@4.9.5) + specifier: ^0.7.7 + version: 0.7.7(typescript@4.9.5) + '@nostr-fetch/adapter-ndk': + specifier: ^0.11.0 + version: 0.11.0(@nostr-dev-kit/ndk@0.7.7)(nostr-fetch@0.12.2) + '@radix-ui/react-dialog': + specifier: ^1.0.4 + version: 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-popover': specifier: ^1.0.6 - version: 1.0.6(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-tooltip': specifier: ^1.0.6 - version: 1.0.6(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) + version: 1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query': - specifier: ^4.29.19 - version: 4.29.19(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.32.0 + version: 4.32.0(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-query-devtools': - specifier: ^4.29.19 - version: 4.29.19(@tanstack/react-query@4.29.19)(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.32.0 + version: 4.32.0(@tanstack/react-query@4.32.0)(react-dom@18.2.0)(react@18.2.0) '@tanstack/react-virtual': specifier: 3.0.0-beta.54 version: 3.0.0-beta.54(react@18.2.0) '@tauri-apps/api': specifier: ^1.4.0 version: 1.4.0 + '@tiptap/extension-image': + specifier: ^2.0.4 + version: 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-mention': + specifier: ^2.0.4 + version: 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4)(@tiptap/suggestion@2.0.4) + '@tiptap/extension-placeholder': + specifier: ^2.0.4 + version: 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + '@tiptap/pm': + specifier: ^2.0.4 + version: 2.0.4(@tiptap/core@2.0.4) + '@tiptap/react': + specifier: ^2.0.4 + version: 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4)(react-dom@18.2.0)(react@18.2.0) + '@tiptap/starter-kit': + specifier: ^2.0.4 + version: 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/suggestion': + specifier: ^2.0.4 + version: 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) cheerio: specifier: 1.0.0-rc.12 version: 1.0.0-rc.12 @@ -35,20 +62,29 @@ dependencies: specifier: ^1.2.2 version: 1.2.2 framer-motion: - specifier: ^10.12.18 - version: 10.12.18(react-dom@18.2.0)(react@18.2.0) + specifier: ^10.13.1 + version: 10.13.1(react-dom@18.2.0)(react@18.2.0) get-urls: specifier: ^11.0.0 version: 11.0.0 + html-to-text: + specifier: ^9.0.5 + version: 9.0.5 immer: specifier: ^10.0.2 version: 10.0.2 light-bolt11-decoder: specifier: ^3.0.0 version: 3.0.0 + nostr-fetch: + specifier: ^0.12.2 + version: 0.12.2 nostr-tools: - specifier: ^1.12.1 - version: 1.12.1 + specifier: ^1.13.1 + version: 1.13.1 + qrcode.react: + specifier: ^3.1.0 + version: 3.1.0(react@18.2.0) react: specifier: ^18.2.0 version: 18.2.0 @@ -56,44 +92,47 @@ dependencies: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) react-hook-form: - specifier: ^7.45.1 - version: 7.45.1(react@18.2.0) + specifier: ^7.45.2 + version: 7.45.2(react@18.2.0) react-hotkeys-hook: 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.16)(react@18.2.0) react-player: specifier: ^2.12.0 version: 2.12.0(react@18.2.0) react-router-dom: - specifier: ^6.14.1 - version: 6.14.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^6.14.2 + version: 6.14.2(react-dom@18.2.0)(react@18.2.0) react-string-replace: specifier: ^1.1.1 version: 1.1.1 react-virtuoso: - specifier: ^4.3.11 - version: 4.3.11(react-dom@18.2.0)(react@18.2.0) - slate: - specifier: ^0.94.1 - version: 0.94.1 - slate-history: - specifier: ^0.93.0 - version: 0.93.0(slate@0.94.1) - slate-react: - specifier: ^0.94.2 - version: 0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1) + specifier: ^4.4.2 + version: 4.4.2(react-dom@18.2.0)(react@18.2.0) + remark-gfm: + specifier: ^3.0.1 + version: 3.0.1 tailwind-merge: - specifier: ^1.13.2 - version: 1.13.2 + specifier: ^1.14.0 + version: 1.14.0 tauri-plugin-autostart-api: specifier: github:tauri-apps/tauri-plugin-autostart#v1 - version: github.com/tauri-apps/tauri-plugin-autostart/f409102d516cdac20bb7dde4300a0e495c61d6f2 + version: github.com/tauri-apps/tauri-plugin-autostart/5f6b99fda5afc1e38976307b1cbede15a572c57d tauri-plugin-sql-api: specifier: github:tauri-apps/tauri-plugin-sql - version: github.com/tauri-apps/tauri-plugin-sql/91195cd53a9599e3c043aee2490c0d5bd7989f18 + version: github.com/tauri-apps/tauri-plugin-sql/a956efd2ddba019ceaebe4a38b7d0352bad19884 tauri-plugin-stronghold-api: specifier: github:tauri-apps/tauri-plugin-stronghold#v1 - version: github.com/tauri-apps/tauri-plugin-stronghold/910f0dcda71336f75e284c84bbabe05ed2491128 + version: github.com/tauri-apps/tauri-plugin-stronghold/2e60980e85f6313a63c35e08a1b2078f3af9c724 + tauri-plugin-upload-api: + specifier: github:tauri-apps/tauri-plugin-upload#v1 + version: github.com/tauri-apps/tauri-plugin-upload/0323acf546ecb4121ff54dfccf6153c7715741a8 + tippy.js: + specifier: ^6.3.7 + version: 6.3.7 zustand: specifier: ^4.3.9 version: 4.3.9(immer@10.0.2)(react@18.2.0) @@ -101,37 +140,37 @@ dependencies: devDependencies: '@tailwindcss/typography': specifier: ^0.5.9 - version: 0.5.9(tailwindcss@3.3.2) + version: 0.5.9(tailwindcss@3.3.3) '@tauri-apps/cli': specifier: ^1.4.0 version: 1.4.0 '@trivago/prettier-plugin-sort-imports': - specifier: ^4.1.1 - version: 4.1.1(prettier@2.8.8) + specifier: ^4.2.0 + version: 4.2.0(prettier@2.8.8) '@types/node': - specifier: ^18.16.19 - version: 18.16.19 + specifier: ^18.17.0 + version: 18.17.0 '@types/react': - specifier: ^18.2.14 - version: 18.2.14 + specifier: ^18.2.16 + version: 18.2.16 '@types/react-dom': - specifier: ^18.2.6 - version: 18.2.6 + specifier: ^18.2.7 + version: 18.2.7 '@types/youtube-player': specifier: ^5.5.7 version: 5.5.7 '@typescript-eslint/eslint-plugin': - specifier: ^5.61.0 - version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@4.9.5) + specifier: ^5.62.0 + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@4.9.5) '@typescript-eslint/parser': - specifier: ^5.61.0 - version: 5.61.0(eslint@8.44.0)(typescript@4.9.5) + specifier: ^5.62.0 + version: 5.62.0(eslint@8.45.0)(typescript@4.9.5) '@vitejs/plugin-react-swc': specifier: ^3.3.2 - version: 3.3.2(vite@4.4.2) + version: 3.3.2(vite@4.4.7) autoprefixer: specifier: ^10.4.14 - version: 10.4.14(postcss@8.4.25) + version: 10.4.14(postcss@8.4.27) cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -142,20 +181,20 @@ devDependencies: specifier: ^0.1.13 version: 0.1.13 eslint: - specifier: ^8.44.0 - version: 8.44.0 + specifier: ^8.45.0 + version: 8.45.0 eslint-config-prettier: specifier: ^8.8.0 - version: 8.8.0(eslint@8.44.0) + version: 8.8.0(eslint@8.45.0) eslint-plugin-jsx-a11y: specifier: ^6.7.1 - version: 6.7.1(eslint@8.44.0) + version: 6.7.1(eslint@8.45.0) eslint-plugin-react: - specifier: ^7.32.2 - version: 7.32.2(eslint@8.44.0) + specifier: ^7.33.0 + version: 7.33.0(eslint@8.45.0) eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.44.0) + version: 10.0.0(eslint@8.45.0) husky: specifier: ^8.0.3 version: 8.0.3 @@ -163,32 +202,32 @@ devDependencies: specifier: ^13.2.3 version: 13.2.3 postcss: - specifier: ^8.4.25 - version: 8.4.25 + specifier: ^8.4.27 + version: 8.4.27 prettier: specifier: ^2.8.8 version: 2.8.8 prettier-plugin-tailwindcss: specifier: ^0.3.0 - version: 0.3.0(@trivago/prettier-plugin-sort-imports@4.1.1)(prettier@2.8.8) + version: 0.3.0(@trivago/prettier-plugin-sort-imports@4.2.0)(prettier@2.8.8) prop-types: specifier: ^15.8.1 version: 15.8.1 tailwindcss: - specifier: ^3.3.2 - version: 3.3.2 + specifier: ^3.3.3 + version: 3.3.3 typescript: specifier: ^4.9.5 version: 4.9.5 vite: - specifier: ^4.4.2 - version: 4.4.2(@types/node@18.16.19) + specifier: ^4.4.7 + version: 4.4.7(@types/node@18.17.0) vite-plugin-top-level-await: specifier: ^1.3.1 - version: 1.3.1(vite@4.4.2) + version: 1.3.1(vite@4.4.7) vite-tsconfig-paths: specifier: ^4.2.0 - version: 4.2.0(typescript@4.9.5)(vite@4.4.2) + version: 4.2.0(typescript@4.9.5)(vite@4.4.7) packages: @@ -201,12 +240,48 @@ packages: engines: {node: '>=10'} dev: true + /@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.18 + dev: false + /@babel/code-frame@7.22.5: resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/highlight': 7.22.5 + /@babel/compat-data@7.22.9: + resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/core@7.22.9: + resolution: {integrity: sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helpers': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + convert-source-map: 1.9.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: resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} engines: {node: '>=6.9.0'} @@ -216,10 +291,33 @@ packages: source-map: 0.5.7 dev: true + /@babel/generator@7.22.9: + resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: false + + /@babel/helper-compilation-targets@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.9 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: false + /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-function-name@7.22.5: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} @@ -227,31 +325,76 @@ packages: dependencies: '@babel/template': 7.22.5 '@babel/types': 7.22.5 - dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: true + + /@babel/helper-module-imports@7.22.5: + resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + dev: false + + /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.9): + resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + 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.22.5 + dev: false /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - dev: true /@babel/helper-string-parser@7.22.5: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} - dev: true /@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.22.5: + resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} + engines: {node: '>=6.9.0'} + dev: false + + /@babel/helpers@7.22.6: + resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} @@ -266,7 +409,47 @@ packages: hasBin: true dependencies: '@babel/types': 7.17.0 - dev: true + + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.22.9): + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) + dev: false + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.9): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: false /@babel/runtime@7.22.6: resolution: {integrity: sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==} @@ -281,7 +464,6 @@ packages: '@babel/code-frame': 7.22.5 '@babel/parser': 7.22.7 '@babel/types': 7.22.5 - dev: true /@babel/traverse@7.17.3: resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} @@ -301,13 +483,30 @@ packages: - supports-color dev: true + /@babel/traverse@7.22.8: + resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.9 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.7 + '@babel/types': 7.22.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/types@7.17.0: resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 - dev: true /@babel/types@7.22.5: resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} @@ -316,7 +515,6 @@ packages: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 - dev: true /@emotion/is-prop-valid@0.8.8: resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} @@ -340,8 +538,8 @@ packages: dev: false optional: true - /@esbuild/android-arm64@0.18.11: - resolution: {integrity: sha512-snieiq75Z1z5LJX9cduSAjUr7vEI1OdlzFPMw0HH5YI7qQHDd3qs+WZoMrWYDsfRJSq36lIA6mfZBkvL46KoIw==} + /@esbuild/android-arm64@0.18.16: + resolution: {integrity: sha512-wsCqSPqLz+6Ov+OM4EthU43DyYVVyfn15S4j1bJzylDpc1r1jZFFfJQNfDuT8SlgwuqpmpJXK4uPlHGw6ve7eA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -358,8 +556,8 @@ packages: dev: false optional: true - /@esbuild/android-arm@0.18.11: - resolution: {integrity: sha512-q4qlUf5ucwbUJZXF5tEQ8LF7y0Nk4P58hOsGk3ucY0oCwgQqAnqXVbUuahCddVHfrxmpyewRpiTHwVHIETYu7Q==} + /@esbuild/android-arm@0.18.16: + resolution: {integrity: sha512-gCHjjQmA8L0soklKbLKA6pgsLk1byULuHe94lkZDzcO3/Ta+bbeewJioEn1Fr7kgy9NWNFy/C+MrBwC6I/WCug==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -376,8 +574,8 @@ packages: dev: false optional: true - /@esbuild/android-x64@0.18.11: - resolution: {integrity: sha512-iPuoxQEV34+hTF6FT7om+Qwziv1U519lEOvekXO9zaMMlT9+XneAhKL32DW3H7okrCOBQ44BMihE8dclbZtTuw==} + /@esbuild/android-x64@0.18.16: + resolution: {integrity: sha512-ldsTXolyA3eTQ1//4DS+E15xl0H/3DTRJaRL0/0PgkqDsI0fV/FlOtD+h0u/AUJr+eOTlZv4aC9gvfppo3C4sw==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -394,8 +592,8 @@ packages: dev: false optional: true - /@esbuild/darwin-arm64@0.18.11: - resolution: {integrity: sha512-Gm0QkI3k402OpfMKyQEEMG0RuW2LQsSmI6OeO4El2ojJMoF5NLYb3qMIjvbG/lbMeLOGiW6ooU8xqc+S0fgz2w==} + /@esbuild/darwin-arm64@0.18.16: + resolution: {integrity: sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -412,8 +610,8 @@ packages: dev: false optional: true - /@esbuild/darwin-x64@0.18.11: - resolution: {integrity: sha512-N15Vzy0YNHu6cfyDOjiyfJlRJCB/ngKOAvoBf1qybG3eOq0SL2Lutzz9N7DYUbb7Q23XtHPn6lMDF6uWbGv9Fw==} + /@esbuild/darwin-x64@0.18.16: + resolution: {integrity: sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -430,8 +628,8 @@ packages: dev: false optional: true - /@esbuild/freebsd-arm64@0.18.11: - resolution: {integrity: sha512-atEyuq6a3omEY5qAh5jIORWk8MzFnCpSTUruBgeyN9jZq1K/QI9uke0ATi3MHu4L8c59CnIi4+1jDKMuqmR71A==} + /@esbuild/freebsd-arm64@0.18.16: + resolution: {integrity: sha512-x35fCebhe9s979DGKbVAwXUOcTmCIE32AIqB9CB1GralMIvxdnMLAw5CnID17ipEw9/3MvDsusj/cspYt2ZLNQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -448,8 +646,8 @@ packages: dev: false optional: true - /@esbuild/freebsd-x64@0.18.11: - resolution: {integrity: sha512-XtuPrEfBj/YYYnAAB7KcorzzpGTvOr/dTtXPGesRfmflqhA4LMF0Gh/n5+a9JBzPuJ+CGk17CA++Hmr1F/gI0Q==} + /@esbuild/freebsd-x64@0.18.16: + resolution: {integrity: sha512-YM98f+PeNXF3GbxIJlUsj+McUWG1irguBHkszCIwfr3BXtXZsXo0vqybjUDFfu9a8Wr7uUD/YSmHib+EeGAFlg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -466,8 +664,8 @@ packages: dev: false optional: true - /@esbuild/linux-arm64@0.18.11: - resolution: {integrity: sha512-c6Vh2WS9VFKxKZ2TvJdA7gdy0n6eSy+yunBvv4aqNCEhSWVor1TU43wNRp2YLO9Vng2G+W94aRz+ILDSwAiYog==} + /@esbuild/linux-arm64@0.18.16: + resolution: {integrity: sha512-XIqhNUxJiuy+zsR77+H5Z2f7s4YRlriSJKtvx99nJuG5ATuJPjmZ9n0ANgnGlPCpXGSReFpgcJ7O3SMtzIFeiQ==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -484,8 +682,8 @@ packages: dev: false optional: true - /@esbuild/linux-arm@0.18.11: - resolution: {integrity: sha512-Idipz+Taso/toi2ETugShXjQ3S59b6m62KmLHkJlSq/cBejixmIydqrtM2XTvNCywFl3VC7SreSf6NV0i6sRyg==} + /@esbuild/linux-arm@0.18.16: + resolution: {integrity: sha512-b5ABb+5Ha2C9JkeZXV+b+OruR1tJ33ePmv9ZwMeETSEKlmu/WJ45XTTG+l6a2KDsQtJJ66qo/hbSGBtk0XVLHw==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -502,8 +700,8 @@ packages: dev: false optional: true - /@esbuild/linux-ia32@0.18.11: - resolution: {integrity: sha512-S3hkIF6KUqRh9n1Q0dSyYcWmcVa9Cg+mSoZEfFuzoYXXsk6196qndrM+ZiHNwpZKi3XOXpShZZ+9dfN5ykqjjw==} + /@esbuild/linux-ia32@0.18.16: + resolution: {integrity: sha512-no+pfEpwnRvIyH+txbBAWtjxPU9grslmTBfsmDndj7bnBmr55rOo/PfQmRfz7Qg9isswt1FP5hBbWb23fRWnow==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -520,8 +718,8 @@ packages: dev: false optional: true - /@esbuild/linux-loong64@0.18.11: - resolution: {integrity: sha512-MRESANOoObQINBA+RMZW+Z0TJWpibtE7cPFnahzyQHDCA9X9LOmGh68MVimZlM9J8n5Ia8lU773te6O3ILW8kw==} + /@esbuild/linux-loong64@0.18.16: + resolution: {integrity: sha512-Zbnczs9ZXjmo0oZSS0zbNlJbcwKXa/fcNhYQjahDs4Xg18UumpXG/lwM2lcSvHS3mTrRyCYZvJbmzYc4laRI1g==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -538,8 +736,8 @@ packages: dev: false optional: true - /@esbuild/linux-mips64el@0.18.11: - resolution: {integrity: sha512-qVyPIZrXNMOLYegtD1u8EBccCrBVshxMrn5MkuFc3mEVsw7CCQHaqZ4jm9hbn4gWY95XFnb7i4SsT3eflxZsUg==} + /@esbuild/linux-mips64el@0.18.16: + resolution: {integrity: sha512-YMF7hih1HVR/hQVa/ot4UVffc5ZlrzEb3k2ip0nZr1w6fnYypll9td2qcoMLvd3o8j3y6EbJM3MyIcXIVzXvQQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -556,8 +754,8 @@ packages: dev: false optional: true - /@esbuild/linux-ppc64@0.18.11: - resolution: {integrity: sha512-T3yd8vJXfPirZaUOoA9D2ZjxZX4Gr3QuC3GztBJA6PklLotc/7sXTOuuRkhE9W/5JvJP/K9b99ayPNAD+R+4qQ==} + /@esbuild/linux-ppc64@0.18.16: + resolution: {integrity: sha512-Wkz++LZ29lDwUyTSEnzDaaP5OveOgTU69q9IyIw9WqLRxM4BjTBjz9un4G6TOvehWpf/J3gYVFN96TjGHrbcNQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -574,8 +772,8 @@ packages: dev: false optional: true - /@esbuild/linux-riscv64@0.18.11: - resolution: {integrity: sha512-evUoRPWiwuFk++snjH9e2cAjF5VVSTj+Dnf+rkO/Q20tRqv+644279TZlPK8nUGunjPAtQRCj1jQkDAvL6rm2w==} + /@esbuild/linux-riscv64@0.18.16: + resolution: {integrity: sha512-LFMKZ30tk78/mUv1ygvIP+568bwf4oN6reG/uczXnz6SvFn4e2QUFpUpZY9iSJT6Qpgstrhef/nMykIXZtZWGQ==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -592,8 +790,8 @@ packages: dev: false optional: true - /@esbuild/linux-s390x@0.18.11: - resolution: {integrity: sha512-/SlRJ15XR6i93gRWquRxYCfhTeC5PdqEapKoLbX63PLCmAkXZHY2uQm2l9bN0oPHBsOw2IswRZctMYS0MijFcg==} + /@esbuild/linux-s390x@0.18.16: + resolution: {integrity: sha512-3ZC0BgyYHYKfZo3AV2/66TD/I9tlSBaW7eWTEIkrQQKfJIifKMMttXl9FrAg+UT0SGYsCRLI35Gwdmm96vlOjg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -610,8 +808,8 @@ packages: dev: false optional: true - /@esbuild/linux-x64@0.18.11: - resolution: {integrity: sha512-xcncej+wF16WEmIwPtCHi0qmx1FweBqgsRtEL1mSHLFR6/mb3GEZfLQnx+pUDfRDEM4DQF8dpXIW7eDOZl1IbA==} + /@esbuild/linux-x64@0.18.16: + resolution: {integrity: sha512-xu86B3647DihHJHv/wx3NCz2Dg1gjQ8bbf9cVYZzWKY+gsvxYmn/lnVlqDRazObc3UMwoHpUhNYaZset4X8IPA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -628,8 +826,8 @@ packages: dev: false optional: true - /@esbuild/netbsd-x64@0.18.11: - resolution: {integrity: sha512-aSjMHj/F7BuS1CptSXNg6S3M4F3bLp5wfFPIJM+Km2NfIVfFKhdmfHF9frhiCLIGVzDziggqWll0B+9AUbud/Q==} + /@esbuild/netbsd-x64@0.18.16: + resolution: {integrity: sha512-uVAgpimx9Ffw3xowtg/7qQPwHFx94yCje+DoBx+LNm2ePDpQXHrzE+Sb0Si2VBObYz+LcRps15cq+95YM7gkUw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -646,8 +844,8 @@ packages: dev: false optional: true - /@esbuild/openbsd-x64@0.18.11: - resolution: {integrity: sha512-tNBq+6XIBZtht0xJGv7IBB5XaSyvYPCm1PxJ33zLQONdZoLVM0bgGqUrXnJyiEguD9LU4AHiu+GCXy/Hm9LsdQ==} + /@esbuild/openbsd-x64@0.18.16: + resolution: {integrity: sha512-6OjCQM9wf7z8/MBi6BOWaTL2AS/SZudsZtBziXMtNI8r/U41AxS9x7jn0ATOwVy08OotwkPqGRMkpPR2wcTJXA==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -664,8 +862,8 @@ packages: dev: false optional: true - /@esbuild/sunos-x64@0.18.11: - resolution: {integrity: sha512-kxfbDOrH4dHuAAOhr7D7EqaYf+W45LsAOOhAet99EyuxxQmjbk8M9N4ezHcEiCYPaiW8Dj3K26Z2V17Gt6p3ng==} + /@esbuild/sunos-x64@0.18.16: + resolution: {integrity: sha512-ZoNkruFYJp9d1LbUYCh8awgQDvB9uOMZqlQ+gGEZR7v6C+N6u7vPr86c+Chih8niBR81Q/bHOSKGBK3brJyvkQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -682,8 +880,8 @@ packages: dev: false optional: true - /@esbuild/win32-arm64@0.18.11: - resolution: {integrity: sha512-Sh0dDRyk1Xi348idbal7lZyfSkjhJsdFeuC13zqdipsvMetlGiFQNdO+Yfp6f6B4FbyQm7qsk16yaZk25LChzg==} + /@esbuild/win32-arm64@0.18.16: + resolution: {integrity: sha512-+j4anzQ9hrs+iqO+/wa8UE6TVkKua1pXUb0XWFOx0FiAj6R9INJ+WE//1/Xo6FG1vB5EpH3ko+XcgwiDXTxcdw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -700,8 +898,8 @@ packages: dev: false optional: true - /@esbuild/win32-ia32@0.18.11: - resolution: {integrity: sha512-o9JUIKF1j0rqJTFbIoF4bXj6rvrTZYOrfRcGyL0Vm5uJ/j5CkBD/51tpdxe9lXEDouhRgdr/BYzUrDOvrWwJpg==} + /@esbuild/win32-ia32@0.18.16: + resolution: {integrity: sha512-5PFPmq3sSKTp9cT9dzvI67WNfRZGvEVctcZa1KGjDDu4n3H8k59Inbk0du1fz0KrAbKKNpJbdFXQMDUz7BG4rQ==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -718,8 +916,8 @@ packages: dev: false optional: true - /@esbuild/win32-x64@0.18.11: - resolution: {integrity: sha512-rQI4cjLHd2hGsM1LqgDI7oOCYbQ6IBOVsX9ejuRMSze0GqXUG2ekwiKkiBU1pRGSeCqFFHxTrcEydB2Hyoz9CA==} + /@esbuild/win32-x64@0.18.16: + resolution: {integrity: sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -727,17 +925,17 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.44.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.45.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.44.0 + eslint: 8.45.0 eslint-visitor-keys: 3.4.1 - /@eslint-community/regexpp@4.5.1: - resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + /@eslint-community/regexpp@4.6.1: + resolution: {integrity: sha512-O7x6dMstWLn2ktjcoiNLDkAGG2EjveHL+Vvc+n0fXumkJYAcSqcVYKtwDU+hDZ0uDUsnUagSYaZrOLAYE8un1A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} /@eslint/eslintrc@2.1.0: @@ -746,7 +944,7 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.6.0 + espree: 9.6.1 globals: 13.20.0 ignore: 5.2.4 import-fresh: 3.3.0 @@ -764,8 +962,8 @@ packages: resolution: {integrity: sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==} dev: false - /@floating-ui/dom@1.4.4: - resolution: {integrity: sha512-21hhDEPOiWkGp0Ys4Wi6Neriah7HweToKra626CIK712B5m9qkdz54OP9gVldUg+URnBTpv/j/bi/skmGdstXQ==} + /@floating-ui/dom@1.4.5: + resolution: {integrity: sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==} dependencies: '@floating-ui/core': 1.3.1 dev: false @@ -776,7 +974,7 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.4.4 + '@floating-ui/dom': 1.4.5 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -836,45 +1034,83 @@ packages: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 '@jridgewell/trace-mapping': 0.3.18 - dev: true /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true /@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - dev: true - /@juggle/resize-observer@3.4.0: - resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - dev: false - - /@noble/curves@1.0.0: - resolution: {integrity: sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==} + /@linaria/core@4.2.10: + resolution: {integrity: sha512-S1W01W7L4SQnGpWzp8awyCpPIYUOEJ+OLjjXqKpIXOU+ozPwBt86Mjjdas9aZccVhNBWDja74cMCUAVp8yUpDQ==} + engines: {node: ^12.16.0 || >=13.7.0} dependencies: - '@noble/hashes': 1.3.0 + '@linaria/logger': 4.5.0 + '@linaria/tags': 4.5.3 + '@linaria/utils': 4.5.2 + transitivePeerDependencies: + - supports-color dev: false - /@noble/hashes@1.3.0: - resolution: {integrity: sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==} + /@linaria/logger@4.5.0: + resolution: {integrity: sha512-XdQLk242Cpcsc9a3Cz1ktOE5ysTo2TpxdeFQEPwMm8Z/+F/S6ZxBDdHYJL09srXWz3hkJr3oS2FPuMZNH1HIxw==} + engines: {node: ^12.16.0 || >=13.7.0} + dependencies: + debug: 4.3.4 + picocolors: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@linaria/tags@4.5.3: + resolution: {integrity: sha512-BYk52rzUsmEvokW5H0tMfv0QZ8cFbxOJuyMuri59Eo74KIT2sfO8Z9SyGzxu20oebK9G3bE2hQIBnLuwEqoI5A==} + engines: {node: ^12.16.0 || >=13.7.0} + dependencies: + '@babel/generator': 7.22.9 + '@linaria/logger': 4.5.0 + '@linaria/utils': 4.5.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@linaria/utils@4.5.2: + resolution: {integrity: sha512-LM8bfZ/T2izOSs9fKzgaZcp6Dan+LGZFwYsjXMuZcYtg3fkyV4xolcltK+9WN3icttlhF+aBRXMRZ/qwcsZMMA==} + engines: {node: ^12.16.0 || >=13.7.0} + dependencies: + '@babel/core': 7.22.9 + '@babel/generator': 7.22.9 + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.22.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.8 + '@babel/types': 7.22.5 + '@linaria/logger': 4.5.0 + babel-merge: 3.0.0(@babel/core@7.22.9) + find-up: 5.0.0 + minimatch: 9.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@noble/curves@1.1.0: + resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} + dependencies: + '@noble/hashes': 1.3.1 dev: false /@noble/hashes@1.3.1: @@ -882,6 +1118,10 @@ packages: engines: {node: '>= 16'} dev: false + /@noble/secp256k1@1.7.1: + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + dev: false + /@noble/secp256k1@2.0.0: resolution: {integrity: sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==} dev: false @@ -904,25 +1144,25 @@ packages: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - /@nostr-dev-kit/ndk@0.7.5(typescript@4.9.5): - resolution: {integrity: sha512-P3hcvWq0jMlTBiasMtcqP2FclGwVks1LIwhRhyJb5XesLEYvnWh1wBWnx3+UQCj9uuu7fBMkmrY7AAi3CTuaXA==} + /@nostr-dev-kit/ndk@0.7.7(typescript@4.9.5): + resolution: {integrity: sha512-IRTW16q40zzuSBkpYpDUcZJRrbw26JTeicfZN6O/2Gw7D2w6Pe42VqFwpbcP9xOnFPEGP2eNV6SwXQ3y0tjBtw==} dependencies: '@noble/hashes': 1.3.1 '@noble/secp256k1': 2.0.0 '@scure/base': 1.1.1 - '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@4.9.5) - '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@4.9.5) debug: 4.3.4 esbuild: 0.17.19 esbuild-plugin-alias: 0.2.1 - eslint: 8.44.0 - eslint-config-prettier: 8.8.0(eslint@8.44.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.44.0) + eslint: 8.45.0 + eslint-config-prettier: 8.8.0(eslint@8.45.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.62.0)(eslint@8.45.0) esm-loader-typescript: 1.0.5 eventemitter3: 5.0.1 light-bolt11-decoder: 3.0.0 node-fetch: 3.3.1 - nostr-tools: 1.12.1 + nostr-tools: 1.13.1 tsd: 0.28.1 utf8-buffer: 1.0.0 websocket-polyfill: 0.0.3 @@ -933,6 +1173,31 @@ packages: - typescript dev: false + /@nostr-fetch/adapter-ndk@0.11.0(@nostr-dev-kit/ndk@0.7.7)(nostr-fetch@0.12.2): + resolution: {integrity: sha512-Otl7SEzm9ecqyHB10bpYXBu1qpqJEnipp7dZ4qcA9LeJAtM38fnYKUD34HX0JXA9EDjtc6VS5UNZe544xC9GCg==} + peerDependencies: + '@nostr-dev-kit/ndk': ^0.5.0 + nostr-fetch: ^0.11.0 + dependencies: + '@nostr-dev-kit/ndk': 0.7.7(typescript@4.9.5) + '@nostr-fetch/kernel': 0.11.0 + nostr-fetch: 0.12.2 + dev: false + + /@nostr-fetch/kernel@0.11.0: + resolution: {integrity: sha512-OQGAfrGckWkUmFBbE85hq/njVmFrWP21uO8XgXQ1ISS7yrD2N5zcOs1XXXRnaTwIMCv25E8s5Gsgf0AhVWtDEw==} + dependencies: + '@noble/hashes': 1.3.1 + '@noble/secp256k1': 1.7.1 + dev: false + + /@nostr-fetch/kernel@0.12.2: + resolution: {integrity: sha512-ja7StOV33NmdtAMGfQIS0/R0dAkLRm3QxN6u/YAQdp5mXER4BYxiQKxUS/dCoTCSX986MH2zp9Fm0f76u4VaNQ==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + dev: false + /@npmcli/fs@3.1.0: resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -947,13 +1212,17 @@ packages: dev: false optional: true + /@popperjs/core@2.11.8: + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + dev: false + /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: '@babel/runtime': 7.22.6 dev: false - /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-arrow@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==} peerDependencies: '@types/react': '*' @@ -967,14 +1236,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 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.14)(react@18.2.0): + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' @@ -984,11 +1253,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-context@1.0.1(@types/react@18.2.14)(react@18.2.0): + /@radix-ui/react-context@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' @@ -998,11 +1267,45 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-dialog@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-hJtRy/jPULGQZceSAP2Re6/4NpKo8im6V8P2hUqZsdFiSL8l35kYsw3qbRI6Ay5mQd2+wlLqje770eq+RJ3yZg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + dependencies: + '@babel/runtime': 7.22.6 + '@radix-ui/primitive': 1.0.1 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 + 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.16)(react@18.2.0) + dev: false + + /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==} peerDependencies: '@types/react': '*' @@ -1017,17 +1320,17 @@ packages: dependencies: '@babel/runtime': 7.22.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 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.14)(react@18.2.0): + /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==} peerDependencies: '@types/react': '*' @@ -1037,11 +1340,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==} peerDependencies: '@types/react': '*' @@ -1055,16 +1358,16 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 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.14)(react@18.2.0): + /@radix-ui/react-id@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' @@ -1074,12 +1377,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-popover@1.0.6(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popover@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-cZ4defGpkZ0qTRtlIBzJLSzL6ht7ofhhW4i1+pkemjV1IKXm0wgCRnee154qlV6r9Ttunmh2TNZhMfV2bavUyA==} peerDependencies: '@types/react': '*' @@ -1094,27 +1397,27 @@ packages: dependencies: '@babel/runtime': 7.22.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 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.14)(react@18.2.0) + react-remove-scroll: 2.5.5(@types/react@18.2.16)(react@18.2.0) dev: false - /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==} peerDependencies: '@types/react': '*' @@ -1129,22 +1432,22 @@ packages: dependencies: '@babel/runtime': 7.22.6 '@floating-ui/react-dom': 2.0.1(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.14)(react@18.2.0) + '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.16)(react@18.2.0) '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==} peerDependencies: '@types/react': '*' @@ -1158,14 +1461,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 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.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==} peerDependencies: '@types/react': '*' @@ -1179,15 +1482,15 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 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.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==} peerDependencies: '@types/react': '*' @@ -1201,14 +1504,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 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.14)(react@18.2.0): + /@radix-ui/react-slot@1.0.2(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' @@ -1218,12 +1521,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-tooltip@1.0.6(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-DmNFOiwEc2UDigsYj6clJENma58OelxD24O4IODoZ+3sQc3Zb+L8w1EP+y9laTuKCLAysPw4fD6/v0j4KNV8rg==} peerDependencies: '@types/react': '*' @@ -1238,24 +1541,24 @@ packages: dependencies: '@babel/runtime': 7.22.6 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-context': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-id': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@radix-ui/react-slot': 1.0.2(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-context': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-id': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-presence': 1.0.1(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@radix-ui/react-slot': 1.0.2(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 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.14)(react@18.2.0): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' @@ -1265,11 +1568,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.14)(react@18.2.0): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' @@ -1279,12 +1582,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.14)(react@18.2.0): + /@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==} peerDependencies: '@types/react': '*' @@ -1294,12 +1597,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.14)(react@18.2.0): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' @@ -1309,11 +1612,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.14)(react@18.2.0): + /@radix-ui/react-use-rect@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==} peerDependencies: '@types/react': '*' @@ -1324,11 +1627,11 @@ packages: dependencies: '@babel/runtime': 7.22.6 '@radix-ui/rect': 1.0.1 - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-use-size@1.0.1(@types/react@18.2.14)(react@18.2.0): + /@radix-ui/react-use-size@1.0.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' @@ -1338,12 +1641,12 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.14)(react@18.2.0) - '@types/react': 18.2.14 + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.16)(react@18.2.0) + '@types/react': 18.2.16 react: 18.2.0 dev: false - /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + /@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==} peerDependencies: '@types/react': '*' @@ -1357,9 +1660,9 @@ packages: optional: true dependencies: '@babel/runtime': 7.22.6 - '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) - '@types/react': 18.2.14 - '@types/react-dom': 18.2.6 + '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.16)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.16 + '@types/react-dom': 18.2.7 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -1370,8 +1673,39 @@ packages: '@babel/runtime': 7.22.6 dev: false - /@remix-run/router@1.7.1: - resolution: {integrity: sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==} + /@remirror/core-constants@2.0.2: + resolution: {integrity: sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==} + dev: false + + /@remirror/core-helpers@2.0.4: + resolution: {integrity: sha512-aYoiJ8x/Sxc4OIZCcZI2tSa92rOufzpDkVTHtwh8+HEsGj0PumUrXbwVd3jHZRSoOUNYNG8fPnOmzuVOsO9CMQ==} + dependencies: + '@linaria/core': 4.2.10 + '@remirror/core-constants': 2.0.2 + '@remirror/types': 1.0.1 + '@types/object.omit': 3.0.0 + '@types/object.pick': 1.3.2 + '@types/throttle-debounce': 2.1.0 + case-anything: 2.1.13 + dash-get: 1.0.2 + deepmerge: 4.3.1 + fast-deep-equal: 3.1.3 + make-error: 1.3.6 + object.omit: 3.0.0 + object.pick: 1.3.0 + throttle-debounce: 3.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@remirror/types@1.0.1: + resolution: {integrity: sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==} + dependencies: + type-fest: 2.19.0 + dev: false + + /@remix-run/router@1.7.2: + resolution: {integrity: sha512-7Lcn7IqGMV+vizMPoEl5F0XDshcdDYtMI6uJLQdQz5CfZAwy3vvGKYSUk789qndt5dEC4HfSjviSYlSoHGL2+A==} engines: {node: '>=14'} dev: false @@ -1389,27 +1723,34 @@ packages: resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} dev: false - /@scure/bip32@1.3.0: - resolution: {integrity: sha512-bcKpo1oj54hGholplGLpqPHRbIsnbixFtc06nwuNM5/dwSXOq/AAYoIBRsBmnZJSdfeNW5rnff7NTAz3ZCqR9Q==} + /@scure/bip32@1.3.1: + resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} dependencies: - '@noble/curves': 1.0.0 - '@noble/hashes': 1.3.0 + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 '@scure/base': 1.1.1 dev: false - /@scure/bip39@1.2.0: - resolution: {integrity: sha512-SX/uKq52cuxm4YFXWFaVByaSHJh2w3BnokVSeUJVCv6K7WulT9u2BuNRBhuFl8vAuYnzx9bEu9WgpcNYTrYieg==} + /@scure/bip39@1.2.1: + resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: - '@noble/hashes': 1.3.0 + '@noble/hashes': 1.3.1 '@scure/base': 1.1.1 dev: false + /@selderee/plugin-htmlparser2@0.11.0: + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: false - /@swc/core-darwin-arm64@1.3.68: - resolution: {integrity: sha512-Z5pNxeuP2NxpOHTzDQkJs0wAPLnTlglZnR3WjObijwvdwT/kw1Y5EPDKM/BVSIeG40SPMkDLBbI0aj0qyXzrBA==} + /@swc/core-darwin-arm64@1.3.70: + resolution: {integrity: sha512-31+mcl0dgdRHvZRjhLOK9V6B+qJ7nxDZYINr9pBlqGWxknz37Vld5KK19Kpr79r0dXUZvaaelLjCnJk9dA2PcQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -1417,8 +1758,8 @@ packages: dev: true optional: true - /@swc/core-darwin-x64@1.3.68: - resolution: {integrity: sha512-ZHl42g6yXhfX4PzAQ0BNvBXpt/OcbAHfubWRN6eXELK3fiNnxL7QBW1if7iizlq6iA+Mj1pwHyyUit1pz0+fgA==} + /@swc/core-darwin-x64@1.3.70: + resolution: {integrity: sha512-GMFJ65E18zQC80t0os+TZvI+8lbRuitncWVge/RXmXbVLPRcdykP4EJ87cqzcG5Ah0z18/E0T+ixD6jHRisrYQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -1426,8 +1767,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm-gnueabihf@1.3.68: - resolution: {integrity: sha512-Mk8f6KCOQ2CNAR4PtWajIjS6XKSSR7ZYDOCf1GXRxhS3qEyQH7V8elWvqWYqHcT4foO60NUmxA/NOM/dQrdO1A==} + /@swc/core-linux-arm-gnueabihf@1.3.70: + resolution: {integrity: sha512-wjhCwS8LCiAq2VedF1b4Bryyw68xZnfMED4pLRazAl8BaUlDFANfRBORNunxlfHQj4V3x39IaiLgCZRHMdzXBg==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -1435,8 +1776,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-gnu@1.3.68: - resolution: {integrity: sha512-RhBllggh9t9sIxaRgRcGrVaS7fDk6KsIqR6b9+dwU5OyDr4ZyHWw1ZaH/1/HAebuXYhNBjoNUiRtca6lKRIPgQ==} + /@swc/core-linux-arm64-gnu@1.3.70: + resolution: {integrity: sha512-9D/Rx67cAOnMiexvCqARxvhj7coRajTp5HlJHuf+rfwMqI2hLhpO9/pBMQxBUAWxODO/ksQ/OF+GJRjmtWw/2A==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1444,8 +1785,8 @@ packages: dev: true optional: true - /@swc/core-linux-arm64-musl@1.3.68: - resolution: {integrity: sha512-8K3zjU+tFgn6yGDEeD343gkKaHU9dhz77NiVkI1VzwRaT/Ag5pwl5eMQ1yStm8koNFzn3zq6rGjHfI5g2yI5Wg==} + /@swc/core-linux-arm64-musl@1.3.70: + resolution: {integrity: sha512-gkjxBio7XD+1GlQVVyPP/qeFkLu83VhRHXaUrkNYpr5UZG9zZurBERT9nkS6Y+ouYh+Q9xmw57aIyd2KvD2zqQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1453,8 +1794,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-gnu@1.3.68: - resolution: {integrity: sha512-4xAnvsBOyeTL0AB8GWlRKDM/hsysJ5jr5qvdKKI3rZfJgnnxl/xSX6TJKPsJ8gygfUJ3BmfCbmUmEyeDZ3YPvA==} + /@swc/core-linux-x64-gnu@1.3.70: + resolution: {integrity: sha512-/nCly+V4xfMVwfEUoLLAukxUSot/RcSzsf6GdsGTjFcrp5sZIntAjokYRytm3VT1c2TK321AfBorsi9R5w8Y7Q==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1462,8 +1803,8 @@ packages: dev: true optional: true - /@swc/core-linux-x64-musl@1.3.68: - resolution: {integrity: sha512-RCpaBo1fcpy1EFdjF+I7N4lfzOaHXVV0iMw/ABM+0PD6tp3V/9pxsguaZyeAHyEiUlDA6PZ4TfXv5zfnXEgW4Q==} + /@swc/core-linux-x64-musl@1.3.70: + resolution: {integrity: sha512-HoOsPJbt361KGKaivAK0qIiYARkhzlxeAfvF5NlnKxkIMOZpQ46Lwj3tR0VWohKbrhS+cYKFlVuDi5XnDkx0XA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1471,8 +1812,8 @@ packages: dev: true optional: true - /@swc/core-win32-arm64-msvc@1.3.68: - resolution: {integrity: sha512-v2WZvXrSslYEpY1nqpItyamL4DyaJinmOkXvM8Bc1LLKU5rGuvmBdjUYg/5Y+o0AUynuiWubpgHNOkBWiCvfqw==} + /@swc/core-win32-arm64-msvc@1.3.70: + resolution: {integrity: sha512-hm4IBK/IaRil+aj1cWU6f0GyAdHpw/Jr5nyFYLM2c/tt7w2t5hgb8NjzM2iM84lOClrig1fG6edj2vCF1dFzNQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -1480,8 +1821,8 @@ packages: dev: true optional: true - /@swc/core-win32-ia32-msvc@1.3.68: - resolution: {integrity: sha512-HH5NJrIdzkJs+1xxprie0qSCMBeL9yeEhcC1yZTzYv8bwmabOUSdtKIqS55iYP/2hLWn9CTbvKPmLOIhCopW3Q==} + /@swc/core-win32-ia32-msvc@1.3.70: + resolution: {integrity: sha512-5cgKUKIT/9Fp5fCA+zIjYCQ4dSvjFYOeWGZR3QiTXGkC4bGa1Ji9SEPyeIAX0iruUnKjYaZB9RvHK2tNn7RLrQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -1489,8 +1830,8 @@ packages: dev: true optional: true - /@swc/core-win32-x64-msvc@1.3.68: - resolution: {integrity: sha512-9HZVtLQUgK8r/yXQdwe0VBexbIcrY6+fBROhs7AAPWdewpaUeLkwQEJk6TbYr9CQuHw26FFGg6SjwAiqXF+kgQ==} + /@swc/core-win32-x64-msvc@1.3.70: + resolution: {integrity: sha512-LE8lW46+TQBzVkn2mHBlk8DIElPIZ2dO5P8AbJiARNBAnlqQWu67l9gWM89UiZ2l33J2cI37pHzON3tKnT8f9g==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -1498,8 +1839,8 @@ packages: dev: true optional: true - /@swc/core@1.3.68: - resolution: {integrity: sha512-njGQuJO+Wy06dEayt70cf0c/KI3HGjm4iW9LLViVLBuYNzJ4SSdNfzejludzufu6im+dsDJ0i3QjgWhAIcVHMQ==} + /@swc/core@1.3.70: + resolution: {integrity: sha512-LWVWlEDLlOD25PvA2NEz41UzdwXnlDyBiZbe69s3zM0DfCPwZXLUm79uSqH9ItsOjTrXSL5/1+XUL6C/BZwChA==} engines: {node: '>=10'} requiresBuild: true peerDependencies: @@ -1508,19 +1849,19 @@ packages: '@swc/helpers': optional: true optionalDependencies: - '@swc/core-darwin-arm64': 1.3.68 - '@swc/core-darwin-x64': 1.3.68 - '@swc/core-linux-arm-gnueabihf': 1.3.68 - '@swc/core-linux-arm64-gnu': 1.3.68 - '@swc/core-linux-arm64-musl': 1.3.68 - '@swc/core-linux-x64-gnu': 1.3.68 - '@swc/core-linux-x64-musl': 1.3.68 - '@swc/core-win32-arm64-msvc': 1.3.68 - '@swc/core-win32-ia32-msvc': 1.3.68 - '@swc/core-win32-x64-msvc': 1.3.68 + '@swc/core-darwin-arm64': 1.3.70 + '@swc/core-darwin-x64': 1.3.70 + '@swc/core-linux-arm-gnueabihf': 1.3.70 + '@swc/core-linux-arm64-gnu': 1.3.70 + '@swc/core-linux-arm64-musl': 1.3.70 + '@swc/core-linux-x64-gnu': 1.3.70 + '@swc/core-linux-x64-musl': 1.3.70 + '@swc/core-win32-arm64-msvc': 1.3.70 + '@swc/core-win32-ia32-msvc': 1.3.70 + '@swc/core-win32-x64-msvc': 1.3.70 dev: true - /@tailwindcss/typography@0.5.9(tailwindcss@3.3.2): + /@tailwindcss/typography@0.5.9(tailwindcss@3.3.3): resolution: {integrity: sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==} peerDependencies: tailwindcss: '>=3.0.0 || insiders' @@ -1529,7 +1870,7 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.3.2 + tailwindcss: 3.3.3 dev: true /@tanstack/match-sorter-utils@8.8.4: @@ -1539,27 +1880,27 @@ packages: remove-accents: 0.4.2 dev: false - /@tanstack/query-core@4.29.19: - resolution: {integrity: sha512-uPe1DukeIpIHpQi6UzIgBcXsjjsDaLnc7hF+zLBKnaUlh7jFE/A+P8t4cU4VzKPMFB/C970n/9SxtpO5hmIRgw==} + /@tanstack/query-core@4.32.0: + resolution: {integrity: sha512-ei4IYwL2kmlKSlCw9WgvV7PpXi0MiswVwfQRxawhJA690zWO3dU49igaQ/UMTl+Jy9jj9dK5IKAYvbX7kUvviQ==} dev: false - /@tanstack/react-query-devtools@4.29.19(@tanstack/react-query@4.29.19)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-rL2xqTPr+7gJvVGwyq8E8CWqqw950N4lZ6ffJeNX0qqymKHxHW1FM6nZaYt7Aufs/bXH0m1L9Sj3kDGQbp0rwg==} + /@tanstack/react-query-devtools@4.32.0(@tanstack/react-query@4.32.0)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rOmWqzKzRmQrQULV5Ova2FGEEPT76FZA3hz8T+LFkvp3ehw9ugSZ1BosgRJ7AFCeir+5pcNvFwILy4pDK8HpRw==} peerDependencies: - '@tanstack/react-query': 4.29.19 + '@tanstack/react-query': 4.32.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: '@tanstack/match-sorter-utils': 8.8.4 - '@tanstack/react-query': 4.29.19(react-dom@18.2.0)(react@18.2.0) + '@tanstack/react-query': 4.32.0(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - superjson: 1.12.4 + superjson: 1.13.1 use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /@tanstack/react-query@4.29.19(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-XiTIOHHQ5Cw1WUlHaD4fmVUMhoWjuNJlAeJGq7eM4BraI5z7y8WkZO+NR8PSuRnQGblpuVdjClQbDFtwxTtTUw==} + /@tanstack/react-query@4.32.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-B8WUMcByYAH9500ENejDCATOmEZhqjtS9wsfiQ3BNa+s+yAynY8SESI8WWHhSqUmjd0pmCSFRP6BOUGSda3QXA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -1570,7 +1911,7 @@ packages: react-native: optional: true dependencies: - '@tanstack/query-core': 4.29.19 + '@tanstack/query-core': 4.32.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) use-sync-external-store: 1.2.0(react@18.2.0) @@ -1701,16 +2042,310 @@ packages: '@tauri-apps/cli-win32-x64-msvc': 1.4.0 dev: true + /@tiptap/core@2.0.4(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-2YOMjRqoBGEP4YGgYpuPuBBJHMeqKOhLnS0WVwjVP84zOmMgZ7A8M6ILC9Xr7Q/qHZCvyBGWOSsI7+3HsEzzYQ==} + peerDependencies: + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + dev: false + + /@tiptap/extension-blockquote@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-z5qfuLi04OgCBI6/odzB2vhulT/wpjymYOnON65vLXGZZbUw4cbPloykhqgWvQp+LzKH+HBhl4fz53d5CgnbOA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-bold@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-CWSQy1uWkVsen8HUsqhm+oEIxJrCiCENABUbhaVcJL/MqhnP4Trrh1B6O00Yfoc0XToPRRibDaHMFs4A3MSO0g==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-bubble-menu@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-+cRZwj0YINNNDElSAiX1pvY2K98S2j9MQW2dXV5oLqsJhqGPZsKxVo8I1u7ZtqUla3QE1V18RYPAzVgTiMRkBg==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + tippy.js: 6.3.7 + dev: false + + /@tiptap/extension-bullet-list@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-JSZKBVTaKSuLl5fR4EKE4dOINOrgeRHYA25Vj6cWjgdvpTw5ef7vcUdn9yP4JwTmLRI+VnnMlYL3rqigU3iZNg==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-code-block@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-In2tV3rgm/MznVF0N7qYsYugPWSzhZHaCRCWcFKNvllMExpo91bUWvk+hXaIhhPxvuqGIVezjybwrYuU3bJW0g==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + dev: false + + /@tiptap/extension-code@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-HuwJSJkipZf4hkns9witv1CABNIPiB9C8lgAQXK4xJKcoUQChcnljEL+PQ2NqeEeMTEeV3nG3A/0QafH0pgTgg==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-document@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-mCj2fAhnNhIHttPSqfTPSSTGwClGaPYvhT56Ij/Pi4iCrWjPXzC4XnIkIHSS34qS2tJN4XJzr/z7lm3NeLkF1w==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-dropcursor@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-1OmKBv/E+nJo2vsosvu8KwFiBB+gZM1pY61qc7JbwEKHSYAxUFHfvLkIA0IQ53Z0DHMrFSKgWmHEcbnqtGevCA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + dev: false + + /@tiptap/extension-floating-menu@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-0YRE738k+kNKuSHhAb3jj9ZQ7Kda78RYRr+cX2jrQVueIMKebPIY07eBt6JcKmob9V9vcNn9qLtBfmygfcPUQg==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + tippy.js: 6.3.7 + dev: false + + /@tiptap/extension-gapcursor@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-VxmKfBQjSSu1mNvHlydA4dJW/zawGKyqmnryiFNcUV9s+/HWLR5i9SiUl4wJM/B8sG8cQxClne5/LrCAeGNYuA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + dev: false + + /@tiptap/extension-hard-break@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-4j8BZa6diuoRytWoIc7j25EYWWut5TZDLbb+OVURdkHnsF8B8zeNTo55W40CdwSaSyTtXtxbTIldV80ShQarGQ==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-heading@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-EfitUbew5ljH3xVlBXAxqqcJ4rjv15b8379LYOV6KQCf+Y1wY0gy9Q8wXSnrsAagqrvqipja4Ihn3OZeyIM+CA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-history@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-3GAUszn1xZx3vniHMiX9BSKmfvb5QOb0oSLXInN+hx80CgJDIHqIFuhx2dyV9I/HWpa0cTxaLWj64kfDzb1JVg==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + dev: false + + /@tiptap/extension-horizontal-rule@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-OMx2ImQseKbSUjPbbRCuYGOJshxYedh9giWAqwgWWokhYkH4nGxXn5m7+Laj+1wLre4bnWgHWVY4wMGniEj3aw==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + dev: false + + /@tiptap/extension-image@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-5iQ96pt9xppM8sWzwhGgc99PPoYPQuokTaCXAQKDI0Y1CFCjZ+/duUG3al1VUMpBXsjJw3/RVO1+7CEhRTd3mA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-italic@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-C/6+qs4Jh8xERRP0wcOopA1+emK8MOkBE4RQx5NbPnT2iCpERP0GlmHBFQIjaYPctZgKFHxsCfRnneS5Xe76+A==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-list-item@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-tSkbLgRo1QMNDJttWs9FeRywkuy5T2HdLKKfUcUNzT3s0q5AqIJl7VyimsBL4A6MUfN1qQMZCMHB4pM9Mkluww==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-mention@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4)(@tiptap/suggestion@2.0.4): + resolution: {integrity: sha512-6IpG4BoylcfZhooKRx12PMSwLN9Nt5Baxh/4HcH0wknNZHINlAqslL8kIZ09vzeS9REP77T4oRTZFjYBINV1Ig==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + '@tiptap/suggestion': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/suggestion': 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-ordered-list@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-Kfg+8k9p4iJCUKP/yIa18LfUpl9trURSMP/HX3/yQTz9Ul1vDrjxeFjSE5uWNvupcXRAM24js+aYrCmV7zpU+Q==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-paragraph@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-nDxpopi9WigVqpfi8nU3B0fWYB14EMvKIkutNZo8wJvKGTZufNI8hw66wupIx/jZH1gFxEa5dHerw6aSYuWjgQ==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-placeholder@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-Y8hjUYBGTbytgrsplSZdHGciqbuVHQX+h0JcuvVaIlAy1kR7hmbxJLqL8tNa7qLtTqo2MfS2942OtSv85JOCzA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + dev: false + + /@tiptap/extension-strike@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-Men7LK6N/Dh3/G4/z2Z9WkDHM2Gxx1XyxYix2ZMf5CnqY37SeDNUnGDqit65pdIN3Y/TQnOZTkKSBilSAtXfJA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/extension-text@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-i8/VFlVZh7TkAI49KKX5JmC0tM8RGwyg5zUpozxYbLdCOv07AkJt+E1fLJty9mqH4Y5HJMNnyNxsuZ9Ol/ySRA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + dev: false + + /@tiptap/pm@2.0.4(@tiptap/core@2.0.4): + resolution: {integrity: sha512-DNgxntpEaiW7ciW0BTNTL0TFqAreZTrAROWakI4XaYRAyi5H9NfZW8jmwGwMBkoZ1KB3pfy+jT/Bisy4okEQGQ==} + peerDependencies: + '@tiptap/core': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + prosemirror-changeset: 2.2.1 + prosemirror-collab: 1.3.1 + prosemirror-commands: 1.5.2 + prosemirror-dropcursor: 1.8.1 + prosemirror-gapcursor: 1.3.2 + prosemirror-history: 1.3.2 + prosemirror-inputrules: 1.2.1 + prosemirror-keymap: 1.2.2 + prosemirror-markdown: 1.11.1 + prosemirror-menu: 1.2.2 + prosemirror-model: 1.19.3 + prosemirror-schema-basic: 1.2.2 + prosemirror-schema-list: 1.3.0 + prosemirror-state: 1.4.3 + prosemirror-tables: 1.3.4 + prosemirror-trailing-node: 2.0.5(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.31.6) + prosemirror-transform: 1.7.3 + prosemirror-view: 1.31.6 + transitivePeerDependencies: + - supports-color + dev: false + + /@tiptap/react@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-NcrZL4Tu3+1Xfj/us5AOD7+kJhwYo2XViOB2iRRnfwS80PUtiLWDis6o3ngMGot/jBWzaMn4gofXnMWHtFdIAw==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/extension-bubble-menu': 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + '@tiptap/extension-floating-menu': 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /@tiptap/starter-kit@2.0.4(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-9WtVXhujyp5cOlE7qlcQMFr0FEx3Cvo1isvfQGzhKKPzXa3rR7FT8bnOFsten31/Ia/uwvGXAvRDQy24YfHdNA==} + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/extension-blockquote': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-bold': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-bullet-list': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-code': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-code-block': 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + '@tiptap/extension-document': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-dropcursor': 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + '@tiptap/extension-gapcursor': 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + '@tiptap/extension-hard-break': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-heading': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-history': 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + '@tiptap/extension-horizontal-rule': 2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4) + '@tiptap/extension-italic': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-list-item': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-ordered-list': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-paragraph': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-strike': 2.0.4(@tiptap/core@2.0.4) + '@tiptap/extension-text': 2.0.4(@tiptap/core@2.0.4) + transitivePeerDependencies: + - '@tiptap/pm' + dev: false + + /@tiptap/suggestion@2.0.4(@tiptap/core@2.0.4)(@tiptap/pm@2.0.4): + resolution: {integrity: sha512-C5LGGjH8VFET34V7vKkqlwpSzrPl+7oAcj9h+P3jvJQ076iYpmpnMtz6dNLSFGKpHp5mtyl4RoJzh7lTvlfyiA==} + peerDependencies: + '@tiptap/core': ^2.0.0 + '@tiptap/pm': ^2.0.0 + dependencies: + '@tiptap/core': 2.0.4(@tiptap/pm@2.0.4) + '@tiptap/pm': 2.0.4(@tiptap/core@2.0.4) + dev: false + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} dev: false - /@trivago/prettier-plugin-sort-imports@4.1.1(prettier@2.8.8): - resolution: {integrity: sha512-dQ2r2uzNr1x6pJsuh/8x0IRA3CBUB+pWEW3J/7N98axqt7SQSm+2fy0FLNXvXGg77xEDC7KHxJlHfLYyi7PDcw==} + /@trivago/prettier-plugin-sort-imports@4.2.0(prettier@2.8.8): + resolution: {integrity: sha512-YBepjbt+ZNBVmN3ev1amQH3lWCmHyt5qTbLCp/syXJRu/Kw2koXh44qayB1gMRxcL/gV8egmjN5xWSrYyfUtyw==} peerDependencies: '@vue/compiler-sfc': 3.x - prettier: 2.x + prettier: 2.x - 3.x peerDependenciesMeta: '@vue/compiler-sfc': optional: true @@ -1730,6 +2365,12 @@ packages: resolution: {integrity: sha512-YQi2lvZSI+xidKeUjlbv6b6Zw7qB3aXHw5oGJLs5OOGAEqKIOvz5UIAkWyg0bJbkSUWPBEtaOHpVxU4EYBO1Jg==} dev: false + /@types/debug@4.1.8: + resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} + dependencies: + '@types/ms': 0.7.31 + dev: false + /@types/eslint@7.29.0: resolution: {integrity: sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==} dependencies: @@ -1741,8 +2382,10 @@ packages: resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} dev: false - /@types/is-hotkey@0.1.7: - resolution: {integrity: sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ==} + /@types/hast@2.3.5: + resolution: {integrity: sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg==} + dependencies: + '@types/unist': 2.0.7 dev: false /@types/json-schema@7.0.12: @@ -1752,32 +2395,46 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: false - /@types/lodash@4.14.195: - resolution: {integrity: sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==} + /@types/mdast@3.0.12: + resolution: {integrity: sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg==} + dependencies: + '@types/unist': 2.0.7 dev: false /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: false - /@types/node@18.16.19: - resolution: {integrity: sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==} + /@types/ms@0.7.31: + resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} + dev: false + + /@types/node@18.17.0: + resolution: {integrity: sha512-GXZxEtOxYGFchyUzxvKI14iff9KZ2DI+A6a37o6EQevtg6uO9t+aUZKcaC1Te5Ng1OnLM7K9NVVj+FbecD9cJg==} dev: true /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: false + /@types/object.omit@3.0.0: + resolution: {integrity: sha512-I27IoPpH250TUzc9FzXd0P1BV/BMJuzqD3jOz98ehf9dQqGkxlq+hO1bIqZGWqCg5bVOy0g4AUVJtnxe0klDmw==} + dev: false + + /@types/object.pick@1.3.2: + resolution: {integrity: sha512-sn7L+qQ6RLPdXRoiaE7bZ/Ek+o4uICma/lBFPyJEKDTPTBP1W8u0c4baj3EiS4DiqLs+Hk+KUGvMVJtAw3ePJg==} + dev: false + /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} - /@types/react-dom@18.2.6: - resolution: {integrity: sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==} + /@types/react-dom@18.2.7: + resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} dependencies: - '@types/react': 18.2.14 + '@types/react': 18.2.16 - /@types/react@18.2.14: - resolution: {integrity: sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==} + /@types/react@18.2.16: + resolution: {integrity: sha512-LLFWr12ZhBJ4YVw7neWLe6Pk7Ey5R9OCydfuMsz1L8bZxzaawJj2p06Q8/EFEHDeTBQNFLF62X+CG7B2zIyu0Q==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.3 @@ -1789,12 +2446,20 @@ packages: /@types/semver@7.5.0: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/throttle-debounce@2.1.0: + resolution: {integrity: sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==} + dev: false + + /@types/unist@2.0.7: + resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==} + dev: false + /@types/youtube-player@5.5.7: resolution: {integrity: sha512-W8F4eoTIvzXeNrT3JroQPimZLXnlJA8smYygHZUKFPVoYwgs/OhJkA1VBhL3iSs57OQkuINqHlY4SmMT5wtnJg==} dev: true - /@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.44.0)(typescript@4.9.5): - resolution: {integrity: sha512-A5l/eUAug103qtkwccSCxn8ZRwT+7RXWkFECdA4Cvl1dOlDUgTpAOfSEElZn2uSUxhdDpnCdetrf0jvU4qrL+g==} + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.45.0)(typescript@4.9.5): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -1804,13 +2469,13 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 5.61.0 - '@typescript-eslint/type-utils': 5.61.0(eslint@8.44.0)(typescript@4.9.5) - '@typescript-eslint/utils': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@eslint-community/regexpp': 4.6.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.45.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@4.9.5) debug: 4.3.4 - eslint: 8.44.0 + eslint: 8.45.0 graphemer: 1.4.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -1820,8 +2485,8 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@5.61.0(eslint@8.44.0)(typescript@4.9.5): - resolution: {integrity: sha512-yGr4Sgyh8uO6fSi9hw3jAFXNBHbCtKKFMdX2IkT3ZqpKmtAq3lHS4ixB/COFuAIJpwl9/AqF7j72ZDWYKmIfvg==} + /@typescript-eslint/parser@5.62.0(eslint@8.45.0)(typescript@4.9.5): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1830,24 +2495,24 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.61.0 - '@typescript-eslint/types': 5.61.0 - '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) debug: 4.3.4 - eslint: 8.44.0 + eslint: 8.45.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/scope-manager@5.61.0: - resolution: {integrity: sha512-W8VoMjoSg7f7nqAROEmTt6LoBpn81AegP7uKhhW5KzYlehs8VV0ZW0fIDVbcZRcaP3aPSW+JZFua+ysQN+m/Nw==} + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.61.0 - '@typescript-eslint/visitor-keys': 5.61.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 - /@typescript-eslint/type-utils@5.61.0(eslint@8.44.0)(typescript@4.9.5): - resolution: {integrity: sha512-kk8u//r+oVK2Aj3ph/26XdH0pbAkC2RiSjUYhKD+PExemG4XSjpGFeyZ/QM8lBOa7O8aGOU+/yEbMJgQv/DnCg==} + /@typescript-eslint/type-utils@5.62.0(eslint@8.45.0)(typescript@4.9.5): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1856,21 +2521,21 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) - '@typescript-eslint/utils': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.45.0)(typescript@4.9.5) debug: 4.3.4 - eslint: 8.44.0 + eslint: 8.45.0 tsutils: 3.21.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/types@5.61.0: - resolution: {integrity: sha512-ldyueo58KjngXpzloHUog/h9REmHl59G1b3a5Sng1GfBo14BkS3ZbMEb3693gnP1k//97lh7bKsp6/V/0v1veQ==} + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@typescript-eslint/typescript-estree@5.61.0(typescript@4.9.5): - resolution: {integrity: sha512-Fud90PxONnnLZ36oR5ClJBLTLfU4pIWBmnvGwTbEa2cXIqj70AEDEmOmpkFComjBZ/037ueKrOdHuYmSFVD7Rw==} + /@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1878,8 +2543,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.61.0 - '@typescript-eslint/visitor-keys': 5.61.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1889,39 +2554,39 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@5.61.0(eslint@8.44.0)(typescript@4.9.5): - resolution: {integrity: sha512-mV6O+6VgQmVE6+xzlA91xifndPW9ElFW8vbSF0xCT/czPXVhwDewKila1jOyRwa9AE19zKnrr7Cg5S3pJVrTWQ==} + /@typescript-eslint/utils@5.62.0(eslint@8.45.0)(typescript@4.9.5): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.61.0 - '@typescript-eslint/types': 5.61.0 - '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.9.5) - eslint: 8.44.0 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) + eslint: 8.45.0 eslint-scope: 5.1.1 semver: 7.5.4 transitivePeerDependencies: - supports-color - typescript - /@typescript-eslint/visitor-keys@5.61.0: - resolution: {integrity: sha512-50XQ5VdbWrX06mQXhy93WywSFZZGsv3EOjq+lqp6WC2t+j3mb6A9xYVdrRxafvK88vg9k9u+CT4l6D8PEatjKg==} + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.61.0 + '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.1 - /@vitejs/plugin-react-swc@3.3.2(vite@4.4.2): + /@vitejs/plugin-react-swc@3.3.2(vite@4.4.7): resolution: {integrity: sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==} peerDependencies: vite: ^4 dependencies: - '@swc/core': 1.3.68 - vite: 4.4.2(@types/node@18.16.19) + '@swc/core': 1.3.70 + vite: 4.4.7(@types/node@18.17.0) transitivePeerDependencies: - '@swc/helpers' dev: true @@ -2047,7 +2712,7 @@ packages: resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} engines: {node: '>=10'} dependencies: - tslib: 2.6.0 + tslib: 2.6.1 dev: false /aria-query@5.3.0: @@ -2068,7 +2733,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 get-intrinsic: 1.2.1 is-string: 1.0.7 @@ -2082,7 +2747,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 /array.prototype.flatmap@1.3.1: @@ -2091,7 +2756,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 /array.prototype.tosorted@1.1.1: @@ -2099,11 +2764,22 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 es-shim-unscopables: 1.0.0 get-intrinsic: 1.2.1 dev: true + /arraybuffer.prototype.slice@1.0.1: + resolution: {integrity: sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.0 + call-bind: 1.0.2 + define-properties: 1.2.0 + get-intrinsic: 1.2.1 + is-array-buffer: 3.0.2 + is-shared-array-buffer: 1.0.2 + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -2118,7 +2794,7 @@ packages: engines: {node: '>=8'} dev: true - /autoprefixer@10.4.14(postcss@8.4.25): + /autoprefixer@10.4.14(postcss@8.4.27): resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -2126,11 +2802,11 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.9 - caniuse-lite: 1.0.30001514 + caniuse-lite: 1.0.30001517 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.25 + postcss: 8.4.27 postcss-value-parser: 4.2.0 dev: true @@ -2149,6 +2825,20 @@ packages: dequal: 2.0.3 dev: true + /babel-merge@3.0.0(@babel/core@7.22.9): + resolution: {integrity: sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + deepmerge: 2.2.1 + object.omit: 3.0.0 + dev: false + + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -2184,11 +2874,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001514 - electron-to-chromium: 1.4.454 + caniuse-lite: 1.0.30001517 + electron-to-chromium: 1.4.469 node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.9) - dev: true /bufferutil@4.0.7: resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} @@ -2245,9 +2934,17 @@ packages: engines: {node: '>=6'} dev: false - /caniuse-lite@1.0.30001514: - resolution: {integrity: sha512-ENcIpYBmwAAOm/V2cXgM7rZUrKKaqisZl4ZAI520FIkqGXUxJjmaIssbRW5HVVR5tyV6ygTLIm15aU8LUmQSaQ==} - dev: true + /caniuse-lite@1.0.30001517: + resolution: {integrity: sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==} + + /case-anything@2.1.13: + resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} + 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==} @@ -2269,6 +2966,10 @@ 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 + /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: @@ -2370,6 +3071,10 @@ packages: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + dev: false + /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -2380,10 +3085,6 @@ packages: engines: {node: '>= 6'} dev: true - /compute-scroll-into-view@1.0.20: - resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==} - dev: false - /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -2391,6 +3092,10 @@ packages: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: false + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: false + /copy-anything@3.0.5: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} @@ -2405,6 +3110,10 @@ packages: semver: 7.5.4 dev: false + /crelt@1.0.6: + resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} + dev: false + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} @@ -2419,7 +3128,7 @@ packages: dependencies: nice-try: 1.0.5 path-key: 2.0.1 - semver: 5.7.1 + semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 dev: false @@ -2467,6 +3176,10 @@ packages: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true + /dash-get@1.0.2: + resolution: {integrity: sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==} + dev: false + /data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -2522,9 +3235,20 @@ packages: engines: {node: '>=0.10.0'} dev: false + /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==} + /deepmerge@2.2.1: + resolution: {integrity: sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==} + engines: {node: '>=0.10.0'} + dev: false + /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -2549,7 +3273,6 @@ packages: /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - dev: true /destr@1.2.2: resolution: {integrity: sha512-lrbCJwD9saUQrqUfXvl6qoM+QN3W7tLV5pAOs+OqOmopCCz/JkE05MHedJR1xfk4IAnZuJXPVuN5+7jNA2ZCiA==} @@ -2568,17 +3291,17 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: false + /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'} dependencies: path-type: 4.0.0 - /direction@1.0.4: - resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} - hasBin: true - dev: false - /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true @@ -2625,9 +3348,8 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /electron-to-chromium@1.4.454: - resolution: {integrity: sha512-pmf1rbAStw8UEQ0sr2cdJtWl48ZMuPD9Sto8HVQOq9vx9j2WgDEN6lYoaqFvqEHYOmGA9oRGn7LqWI9ta0YugQ==} - dev: true + /electron-to-chromium@1.4.469: + resolution: {integrity: sha512-HRN9XQjElxJBrdDky5iiUUr3eDwXGTg6Cp4IV8MuNc8VqMkYSneSnIe6poFKx9PsNzkudCgaWCBVxwDqirwQWQ==} /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2640,6 +3362,11 @@ packages: dependencies: iconv-lite: 0.6.3 + /entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + dev: false + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2660,11 +3387,12 @@ packages: is-arrayish: 0.2.1 dev: false - /es-abstract@1.21.2: - resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} + /es-abstract@1.22.1: + resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.0 + arraybuffer.prototype.slice: 1.0.1 available-typed-arrays: 1.0.5 call-bind: 1.0.2 es-set-tostringtag: 2.0.1 @@ -2685,19 +3413,23 @@ packages: is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 is-weakref: 1.0.2 object-inspect: 1.12.3 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.5.0 + safe-array-concat: 1.0.0 safe-regex-test: 1.0.0 string.prototype.trim: 1.2.7 string.prototype.trimend: 1.0.6 string.prototype.trimstart: 1.0.6 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 unbox-primitive: 1.0.2 - which-typed-array: 1.1.9 + which-typed-array: 1.1.11 /es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} @@ -2779,40 +3511,39 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: false - /esbuild@0.18.11: - resolution: {integrity: sha512-i8u6mQF0JKJUlGR3OdFLKldJQMMs8OqM9Cc3UCi9XXziJ9WERM5bfkHaEAy0YAvPRMgqSW55W7xYn84XtEFTtA==} + /esbuild@0.18.16: + resolution: {integrity: sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.18.11 - '@esbuild/android-arm64': 0.18.11 - '@esbuild/android-x64': 0.18.11 - '@esbuild/darwin-arm64': 0.18.11 - '@esbuild/darwin-x64': 0.18.11 - '@esbuild/freebsd-arm64': 0.18.11 - '@esbuild/freebsd-x64': 0.18.11 - '@esbuild/linux-arm': 0.18.11 - '@esbuild/linux-arm64': 0.18.11 - '@esbuild/linux-ia32': 0.18.11 - '@esbuild/linux-loong64': 0.18.11 - '@esbuild/linux-mips64el': 0.18.11 - '@esbuild/linux-ppc64': 0.18.11 - '@esbuild/linux-riscv64': 0.18.11 - '@esbuild/linux-s390x': 0.18.11 - '@esbuild/linux-x64': 0.18.11 - '@esbuild/netbsd-x64': 0.18.11 - '@esbuild/openbsd-x64': 0.18.11 - '@esbuild/sunos-x64': 0.18.11 - '@esbuild/win32-arm64': 0.18.11 - '@esbuild/win32-ia32': 0.18.11 - '@esbuild/win32-x64': 0.18.11 + '@esbuild/android-arm': 0.18.16 + '@esbuild/android-arm64': 0.18.16 + '@esbuild/android-x64': 0.18.16 + '@esbuild/darwin-arm64': 0.18.16 + '@esbuild/darwin-x64': 0.18.16 + '@esbuild/freebsd-arm64': 0.18.16 + '@esbuild/freebsd-x64': 0.18.16 + '@esbuild/linux-arm': 0.18.16 + '@esbuild/linux-arm64': 0.18.16 + '@esbuild/linux-ia32': 0.18.16 + '@esbuild/linux-loong64': 0.18.16 + '@esbuild/linux-mips64el': 0.18.16 + '@esbuild/linux-ppc64': 0.18.16 + '@esbuild/linux-riscv64': 0.18.16 + '@esbuild/linux-s390x': 0.18.16 + '@esbuild/linux-x64': 0.18.16 + '@esbuild/netbsd-x64': 0.18.16 + '@esbuild/openbsd-x64': 0.18.16 + '@esbuild/sunos-x64': 0.18.16 + '@esbuild/win32-arm64': 0.18.16 + '@esbuild/win32-ia32': 0.18.16 + '@esbuild/win32-x64': 0.18.16 dev: true /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} @@ -2822,13 +3553,18 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-config-prettier@8.8.0(eslint@8.44.0): + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: false + + /eslint-config-prettier@8.8.0(eslint@8.45.0): resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.44.0 + eslint: 8.45.0 /eslint-formatter-pretty@4.1.0: resolution: {integrity: sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==} @@ -2854,7 +3590,7 @@ packages: - supports-color dev: false - /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint@8.44.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint@8.45.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -2875,15 +3611,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@4.9.5) debug: 3.2.7 - eslint: 8.44.0 + eslint: 8.45.0 eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: false - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.61.0)(eslint@8.44.0): + /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.62.0)(eslint@8.45.0): resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: @@ -2893,22 +3629,22 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.61.0(eslint@8.44.0)(typescript@4.9.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.45.0)(typescript@4.9.5) array-includes: 3.1.6 array.prototype.flat: 1.3.1 array.prototype.flatmap: 1.3.1 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.44.0 + eslint: 8.45.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.7)(eslint@8.44.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint@8.45.0) has: 1.0.3 is-core-module: 2.12.1 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 resolve: 1.22.2 - semver: 6.3.0 + semver: 6.3.1 tsconfig-paths: 3.14.2 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -2916,7 +3652,7 @@ packages: - supports-color dev: false - /eslint-plugin-jsx-a11y@6.7.1(eslint@8.44.0): + /eslint-plugin-jsx-a11y@6.7.1(eslint@8.45.0): resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: @@ -2931,18 +3667,18 @@ packages: axobject-query: 3.2.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.44.0 + eslint: 8.45.0 has: 1.0.3 jsx-ast-utils: 3.3.4 language-tags: 1.0.5 minimatch: 3.1.2 object.entries: 1.1.6 object.fromentries: 2.0.6 - semver: 6.3.0 + semver: 6.3.1 dev: true - /eslint-plugin-react@7.32.2(eslint@8.44.0): - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} + /eslint-plugin-react@7.33.0(eslint@8.45.0): + resolution: {integrity: sha512-qewL/8P34WkY8jAqdQxsiL82pDUeT7nhs8IsuXgfgnsEloKCT4miAV9N9kGtx7/KM9NH/NCGUE7Edt9iGxLXFw==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -2951,7 +3687,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.44.0 + eslint: 8.45.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.4 minimatch: 3.1.2 @@ -2961,16 +3697,16 @@ packages: object.values: 1.1.6 prop-types: 15.8.1 resolve: 2.0.0-next.4 - semver: 6.3.0 + semver: 6.3.1 string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-simple-import-sort@10.0.0(eslint@8.44.0): + /eslint-plugin-simple-import-sort@10.0.0(eslint@8.45.0): resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} peerDependencies: eslint: '>=5.0.0' dependencies: - eslint: 8.44.0 + eslint: 8.45.0 dev: true /eslint-rule-docs@1.1.235: @@ -2984,8 +3720,8 @@ packages: esrecurse: 4.3.0 estraverse: 4.3.0 - /eslint-scope@7.2.0: - resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + /eslint-scope@7.2.1: + resolution: {integrity: sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 @@ -2995,13 +3731,13 @@ packages: resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint@8.44.0: - resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} + /eslint@8.45.0: + resolution: {integrity: sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.44.0) - '@eslint-community/regexpp': 4.5.1 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.45.0) + '@eslint-community/regexpp': 4.6.1 '@eslint/eslintrc': 2.1.0 '@eslint/js': 8.44.0 '@humanwhocodes/config-array': 0.11.10 @@ -3013,9 +3749,9 @@ packages: debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.0 + eslint-scope: 7.2.1 eslint-visitor-keys: 3.4.1 - espree: 9.6.0 + espree: 9.6.1 esquery: 1.5.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -3025,7 +3761,6 @@ packages: globals: 13.20.0 graphemer: 1.4.0 ignore: 5.2.4 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -3037,7 +3772,6 @@ packages: natural-compare: 1.4.0 optionator: 0.9.3 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -3051,8 +3785,8 @@ packages: typescript: 5.1.6 dev: false - /espree@9.6.0: - resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.10.0 @@ -3112,11 +3846,15 @@ 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==} - /fast-glob@3.3.0: - resolution: {integrity: sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==} + /fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3205,8 +3943,8 @@ packages: resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} dev: true - /framer-motion@10.12.18(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-cfhiUpPbj+0eEWKjuD+5cz5cMqH71xOtMxGiS/cSGfHn2OlHIEAqFnFyzEMENw5PxWR9bMVhatzzpD6lexmHZQ==} + /framer-motion@10.13.1(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-uiKsaLEoySeln3eOPy8wUB3FkNtRRiVga5xJOkgs7C0sHVyvpJajXJFSoabt+emBojgnMQY0epnjl0ppoYPxkQ==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -3218,7 +3956,7 @@ packages: dependencies: react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - tslib: 2.6.0 + tslib: 2.6.1 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 dev: false @@ -3257,7 +3995,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 functions-have-names: 1.2.3 /functions-have-names@1.2.3: @@ -3277,6 +4015,11 @@ packages: wide-align: 1.1.5 dev: false + /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.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} dependencies: @@ -3331,7 +4074,7 @@ packages: hasBin: true dependencies: foreground-child: 3.1.1 - jackspeak: 2.2.1 + jackspeak: 2.2.2 minimatch: 9.0.3 minipass: 5.0.0 path-scurry: 1.10.1 @@ -3361,7 +4104,6 @@ packages: /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - dev: true /globals@13.20.0: resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} @@ -3381,7 +4123,7 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.0 + fast-glob: 3.3.1 ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 @@ -3447,6 +4189,10 @@ packages: dependencies: function-bind: 1.1.1 + /hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} + dev: false + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: false @@ -3458,6 +4204,17 @@ packages: lru-cache: 6.0.0 dev: false + /html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + dev: false + /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: @@ -3523,10 +4280,6 @@ packages: resolution: {integrity: sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==} dev: false - /immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - dev: false - /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -3551,6 +4304,10 @@ 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 + /install-artifact-from-github@1.3.3: resolution: {integrity: sha512-x79SL0d8WOi1ZjXSTUqqs0GPQZ92YArJAN9O46wgU9wdH2U9ecyyhB9YGDbPe2OLV4ptmt6AZYRQZ2GydQZosQ==} hasBin: true @@ -3589,7 +4346,7 @@ packages: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -3614,6 +4371,11 @@ packages: call-bind: 1.0.2 has-tostringtag: 1.0.0 + /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'} @@ -3629,6 +4391,13 @@ packages: dependencies: has-tostringtag: 1.0.0 + /is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: false + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -3648,10 +4417,6 @@ packages: dependencies: is-extglob: 2.1.1 - /is-hotkey@0.1.8: - resolution: {integrity: sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ==} - dev: false - /is-lambda@1.0.1: resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} dev: false @@ -3679,9 +4444,16 @@ packages: engines: {node: '>=0.10.0'} dev: false - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + /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'} + dependencies: + isobject: 3.0.1 dev: false /is-regex@1.1.4: @@ -3713,15 +4485,11 @@ packages: dependencies: has-symbols: 1.0.3 - /is-typed-array@1.1.10: - resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + /is-typed-array@1.1.12: + resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + which-typed-array: 1.1.11 /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -3742,11 +4510,19 @@ packages: engines: {node: '>=12.13'} dev: false + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /jackspeak@2.2.1: - resolution: {integrity: sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==} + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: false + + /jackspeak@2.2.2: + resolution: {integrity: sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==} engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 @@ -3791,7 +4567,6 @@ packages: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true - dev: true /json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} @@ -3814,6 +4589,12 @@ packages: minimist: 1.2.8 dev: false + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: false + /jsx-ast-utils@3.3.4: resolution: {integrity: sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==} engines: {node: '>=4.0'} @@ -3829,6 +4610,11 @@ packages: engines: {node: '>=0.10.0'} dev: false + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true @@ -3839,6 +4625,10 @@ packages: language-subtag-registry: 0.3.22 dev: true + /leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + dev: false + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3860,6 +4650,12 @@ packages: /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + /linkify-it@4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + dependencies: + uc.micro: 1.0.6 + dev: false + /lint-staged@13.2.3: resolution: {integrity: sha512-zVVEXLuQIhr1Y7R7YAWx4TZLdvuzk7DnmrsTNL0fax6Z3jrpFcas+vKbzxhhvp6TA55m1SQuWkpzI1qbfDZbAg==} engines: {node: ^14.13.1 || >=16.0.0} @@ -3942,6 +4738,7 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} @@ -3961,6 +4758,10 @@ packages: wrap-ansi: 6.2.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 @@ -3972,6 +4773,12 @@ packages: engines: {node: 14 || >=16.14} 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: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -3983,6 +4790,10 @@ packages: engines: {node: '>=12'} dev: false + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: false + /make-fetch-happen@11.1.1: resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -4016,6 +4827,156 @@ packages: engines: {node: '>=8'} dev: false + /markdown-it@13.0.1: + resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 3.0.1 + linkify-it: 4.0.1 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: false + + /markdown-table@3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + dev: false + + /mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + 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.12 + escape-string-regexp: 5.0.0 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + 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 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-autolink-literal@1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} + dependencies: + '@types/mdast': 3.0.12 + ccount: 2.0.1 + mdast-util-find-and-replace: 2.2.2 + micromark-util-character: 1.2.0 + dev: false + + /mdast-util-gfm-footnote@1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + micromark-util-normalize-identifier: 1.1.0 + dev: false + + /mdast-util-gfm-strikethrough@1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-to-markdown: 1.5.0 + dev: false + + /mdast-util-gfm-table@1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} + dependencies: + '@types/mdast': 3.0.12 + markdown-table: 3.0.3 + mdast-util-from-markdown: 1.3.1 + mdast-util-to-markdown: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-gfm-task-list-item@1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} + dependencies: + '@types/mdast': 3.0.12 + 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 + transitivePeerDependencies: + - supports-color + dev: false + + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} + dependencies: + '@types/mdast': 3.0.12 + unist-util-is: 5.2.1 + dev: false + + /mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} + dependencies: + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.2.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 + dev: false + + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} + dependencies: + '@types/mdast': 3.0.12 + '@types/unist': 2.0.7 + 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 + zwitch: 2.0.4 + dev: false + + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.12 + dev: false + + /mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + dev: false + /memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} dev: false @@ -4051,6 +5012,253 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + 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 + dev: false + + /micromark-extension-gfm-autolink-literal@1.0.5: + resolution: {integrity: sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==} + 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 + dev: false + + /micromark-extension-gfm-footnote@1.1.2: + resolution: {integrity: sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==} + 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 + dev: false + + /micromark-extension-gfm-strikethrough@1.0.7: + resolution: {integrity: sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==} + 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 + dev: false + + /micromark-extension-gfm-table@1.0.7: + resolution: {integrity: sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==} + 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 + dev: false + + /micromark-extension-gfm-tagfilter@1.0.2: + resolution: {integrity: sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-extension-gfm-task-list-item@1.0.5: + resolution: {integrity: sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==} + 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 + dev: false + + /micromark-extension-gfm@2.0.3: + resolution: {integrity: sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==} + 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 + dev: false + + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + 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 + dev: false + + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} + 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 + dev: false + + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} + dependencies: + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + 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 + dev: false + + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: false + + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: false + + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} + dependencies: + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false + + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: false + + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: false + + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + dependencies: + '@types/debug': 4.1.8 + 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 + transitivePeerDependencies: + - supports-color + dev: false + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -4163,6 +5371,11 @@ packages: hasBin: true dev: false + /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 @@ -4252,7 +5465,6 @@ packages: /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: true /nopt@6.0.0: resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} @@ -4267,7 +5479,7 @@ packages: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.2 - semver: 5.7.1 + semver: 5.7.2 validate-npm-package-license: 3.0.4 dev: false @@ -4296,14 +5508,20 @@ packages: engines: {node: '>=12.20'} dev: false - /nostr-tools@1.12.1: - resolution: {integrity: sha512-ZeoV7g3jBUAlb4mKa3C+6hrc84htPkbebMShfGNgV4vAiz18e/sQukUBFL6vb/+sxZy+dBQFkRwsJIaVFs8Gfw==} + /nostr-fetch@0.12.2: + resolution: {integrity: sha512-0WH0LlaPcIvG5gOIwrGtzRwHpaZ+JQxH0XG7EjQcKpviePVmVKWK7UAGuzuWJj/V0iSqnDGOLSQ+HSEBjGVCEQ==} dependencies: - '@noble/curves': 1.0.0 - '@noble/hashes': 1.3.0 + '@nostr-fetch/kernel': 0.12.2 + dev: false + + /nostr-tools@1.13.1: + resolution: {integrity: sha512-DTwpbxTH1/ar+afWd4gmVdpHH8CF290kdaxi00Llra88SHE6e38XuyzlRABVTcrBaceLMnoDdHmV3x16MoEFJg==} + dependencies: + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 '@scure/base': 1.1.1 - '@scure/bip32': 1.3.0 - '@scure/bip39': 1.2.0 + '@scure/bip32': 1.3.1 + '@scure/bip39': 1.2.1 dev: false /npm-run-all@4.1.5: @@ -4376,7 +5594,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 dev: true /object.fromentries@2.0.6: @@ -4385,23 +5603,37 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 dev: true /object.hasown@1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 dev: true + /object.omit@3.0.0: + resolution: {integrity: sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 1.0.1 + dev: false + + /object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + /object.values@1.1.6: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -4433,6 +5665,10 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 + /orderedmap@2.1.1: + resolution: {integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==} + dev: false + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4507,6 +5743,13 @@ packages: entities: 4.5.0 dev: false + /parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -4551,9 +5794,12 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + /peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + dev: false + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -4593,29 +5839,29 @@ packages: irregular-plurals: 3.5.0 dev: false - /postcss-import@15.1.0(postcss@8.4.25): + /postcss-import@15.1.0(postcss@8.4.27): resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.25 + postcss: 8.4.27 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.2 dev: true - /postcss-js@4.0.1(postcss@8.4.25): + /postcss-js@4.0.1(postcss@8.4.27): resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.25 + postcss: 8.4.27 dev: true - /postcss-load-config@4.0.1(postcss@8.4.25): + /postcss-load-config@4.0.1(postcss@8.4.27): resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} engines: {node: '>= 14'} peerDependencies: @@ -4628,17 +5874,17 @@ packages: optional: true dependencies: lilconfig: 2.1.0 - postcss: 8.4.25 + postcss: 8.4.27 yaml: 2.3.1 dev: true - /postcss-nested@6.0.1(postcss@8.4.25): + /postcss-nested@6.0.1(postcss@8.4.27): resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.25 + postcss: 8.4.27 postcss-selector-parser: 6.0.13 dev: true @@ -4662,8 +5908,8 @@ packages: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.25: - resolution: {integrity: sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw==} + /postcss@8.4.27: + resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.6 @@ -4675,7 +5921,7 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier-plugin-tailwindcss@0.3.0(@trivago/prettier-plugin-sort-imports@4.1.1)(prettier@2.8.8): + /prettier-plugin-tailwindcss@0.3.0(@trivago/prettier-plugin-sort-imports@4.2.0)(prettier@2.8.8): resolution: {integrity: sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA==} engines: {node: '>=12.17.0'} peerDependencies: @@ -4727,7 +5973,7 @@ packages: prettier-plugin-twig-melody: optional: true dependencies: - '@trivago/prettier-plugin-sort-imports': 4.1.1(prettier@2.8.8) + '@trivago/prettier-plugin-sort-imports': 4.2.0(prettier@2.8.8) prettier: 2.8.8 dev: true @@ -4761,10 +6007,167 @@ packages: object-assign: 4.1.1 react-is: 16.13.1 + /property-information@6.2.0: + resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} + dev: false + + /prosemirror-changeset@2.2.1: + resolution: {integrity: sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==} + dependencies: + prosemirror-transform: 1.7.3 + dev: false + + /prosemirror-collab@1.3.1: + resolution: {integrity: sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==} + dependencies: + prosemirror-state: 1.4.3 + dev: false + + /prosemirror-commands@1.5.2: + resolution: {integrity: sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==} + dependencies: + prosemirror-model: 1.19.3 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.7.3 + dev: false + + /prosemirror-dropcursor@1.8.1: + resolution: {integrity: sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==} + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.7.3 + prosemirror-view: 1.31.6 + dev: false + + /prosemirror-gapcursor@1.3.2: + resolution: {integrity: sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==} + dependencies: + prosemirror-keymap: 1.2.2 + prosemirror-model: 1.19.3 + prosemirror-state: 1.4.3 + prosemirror-view: 1.31.6 + dev: false + + /prosemirror-history@1.3.2: + resolution: {integrity: sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==} + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.7.3 + prosemirror-view: 1.31.6 + rope-sequence: 1.3.4 + dev: false + + /prosemirror-inputrules@1.2.1: + resolution: {integrity: sha512-3LrWJX1+ULRh5SZvbIQlwZafOXqp1XuV21MGBu/i5xsztd+9VD15x6OtN6mdqSFI7/8Y77gYUbQ6vwwJ4mr6QQ==} + dependencies: + prosemirror-state: 1.4.3 + prosemirror-transform: 1.7.3 + dev: false + + /prosemirror-keymap@1.2.2: + resolution: {integrity: sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==} + dependencies: + prosemirror-state: 1.4.3 + w3c-keyname: 2.2.8 + dev: false + + /prosemirror-markdown@1.11.1: + resolution: {integrity: sha512-CLOieKoaSSEusKyYcXIj8v2qHGLW+tnuffci+8678Sen48NEFQE7M3o0Nx0gj9v63iVDj+yLibj2gCe8eb3jIw==} + dependencies: + markdown-it: 13.0.1 + prosemirror-model: 1.19.3 + dev: false + + /prosemirror-menu@1.2.2: + resolution: {integrity: sha512-437HIWTq4F9cTX+kPfqZWWm+luJm95Aut/mLUy+9OMrOml0bmWDS26ceC6SNfb2/S94et1sZ186vLO7pDHzxSw==} + dependencies: + crelt: 1.0.6 + prosemirror-commands: 1.5.2 + prosemirror-history: 1.3.2 + prosemirror-state: 1.4.3 + dev: false + + /prosemirror-model@1.19.3: + resolution: {integrity: sha512-tgSnwN7BS7/UM0sSARcW+IQryx2vODKX4MI7xpqY2X+iaepJdKBPc7I4aACIsDV/LTaTjt12Z56MhDr9LsyuZQ==} + dependencies: + orderedmap: 2.1.1 + dev: false + + /prosemirror-schema-basic@1.2.2: + resolution: {integrity: sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==} + dependencies: + prosemirror-model: 1.19.3 + dev: false + + /prosemirror-schema-list@1.3.0: + resolution: {integrity: sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==} + dependencies: + prosemirror-model: 1.19.3 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.7.3 + dev: false + + /prosemirror-state@1.4.3: + resolution: {integrity: sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==} + dependencies: + prosemirror-model: 1.19.3 + prosemirror-transform: 1.7.3 + prosemirror-view: 1.31.6 + dev: false + + /prosemirror-tables@1.3.4: + resolution: {integrity: sha512-z6uLSQ1BLC3rgbGwZmpfb+xkdvD7W/UOsURDfognZFYaTtc0gsk7u/t71Yijp2eLflVpffMk6X0u0+u+MMDvIw==} + dependencies: + prosemirror-keymap: 1.2.2 + prosemirror-model: 1.19.3 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.7.3 + prosemirror-view: 1.31.6 + dev: false + + /prosemirror-trailing-node@2.0.5(prosemirror-model@1.19.3)(prosemirror-state@1.4.3)(prosemirror-view@1.31.6): + resolution: {integrity: sha512-V3CJLAmlLr73N6rLVzuM1jU0wlbKFMA+I3DG3zTlFah651A9dDTkXWFGNKAo0uhPI7ajFmQLhlLC1lie/6d9sA==} + peerDependencies: + prosemirror-model: ^1.19.0 + prosemirror-state: ^1.4.2 + prosemirror-view: ^1.31.2 + dependencies: + '@remirror/core-constants': 2.0.2 + '@remirror/core-helpers': 2.0.4 + escape-string-regexp: 4.0.0 + prosemirror-model: 1.19.3 + prosemirror-state: 1.4.3 + prosemirror-view: 1.31.6 + transitivePeerDependencies: + - supports-color + dev: false + + /prosemirror-transform@1.7.3: + resolution: {integrity: sha512-qDapyx5lqYfxVeUWEw0xTGgeP2S8346QtE7DxkalsXlX89lpzkY6GZfulgfHyk1n4tf74sZ7CcXgcaCcGjsUtA==} + dependencies: + prosemirror-model: 1.19.3 + dev: false + + /prosemirror-view@1.31.6: + resolution: {integrity: sha512-wwgErp+EWnuW4kGAYKrt90hhOetaoWpYNdOpnuQMXo1m4x/+uhauFeQoCCm8J30ZqAa4LgIER4yzKSO545gRfA==} + dependencies: + prosemirror-model: 1.19.3 + prosemirror-state: 1.4.3 + prosemirror-transform: 1.7.3 + dev: false + /punycode@2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} + /qrcode.react@3.1.0(react@18.2.0): + resolution: {integrity: sha512-oyF+Urr3oAMUG/OiOuONL3HXM+53wvuH3mtIWQrYmsXoAq0DkvZp2RYUWFSMFtbdOpuS++9v+WAkzNVkMlNW6Q==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4798,8 +6201,8 @@ packages: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} dev: false - /react-hook-form@7.45.1(react@18.2.0): - resolution: {integrity: sha512-6dWoFJwycbuFfw/iKMcl+RdAOAOHDiF11KWYhNDRN/OkUt+Di5qsZHwA0OwsVnu9y135gkHpTw9DJA+WzCeR9w==} + /react-hook-form@7.45.2(react@18.2.0): + resolution: {integrity: sha512-9s45OdTaKN+4NSTbXVqeDITd/nwIg++nxJGL8+OD5uf1DxvhsXQ641kaYHk5K28cpIOTYm71O/fYk7rFaygb3A==} engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 @@ -4824,6 +6227,33 @@ packages: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: false + /react-markdown@8.0.7(@types/react@18.2.16)(react@18.2.0): + resolution: {integrity: sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + dependencies: + '@types/hast': 2.3.5 + '@types/prop-types': 15.7.5 + '@types/react': 18.2.16 + '@types/unist': 2.0.7 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 2.0.1 + prop-types: 15.8.1 + property-information: 6.2.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.1 + unified: 10.1.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: false + /react-player@2.12.0(react@18.2.0): resolution: {integrity: sha512-rymLRz/2GJJD+Wc01S7S+i9pGMFYnNmQibR2gVE3KmHJCBNN8BhPAlOPTGZtn1uKpJ6p4RPLlzPQ1OLreXd8gw==} peerDependencies: @@ -4837,7 +6267,7 @@ packages: react-fast-compare: 3.2.2 dev: false - /react-remove-scroll-bar@2.3.4(@types/react@18.2.14)(react@18.2.0): + /react-remove-scroll-bar@2.3.4(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -4847,13 +6277,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.2.14)(react@18.2.0) - tslib: 2.6.0 + react-style-singleton: 2.2.1(@types/react@18.2.16)(react@18.2.0) + tslib: 2.6.1 dev: false - /react-remove-scroll@2.5.5(@types/react@18.2.14)(react@18.2.0): + /react-remove-scroll@2.5.5(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==} engines: {node: '>=10'} peerDependencies: @@ -4863,35 +6293,35 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.2.14)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.2.14)(react@18.2.0) - tslib: 2.6.0 - use-callback-ref: 1.3.0(@types/react@18.2.14)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.2.14)(react@18.2.0) + react-remove-scroll-bar: 2.3.4(@types/react@18.2.16)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.16)(react@18.2.0) + tslib: 2.6.1 + use-callback-ref: 1.3.0(@types/react@18.2.16)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.16)(react@18.2.0) dev: false - /react-router-dom@6.14.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==} + /react-router-dom@6.14.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-5pWX0jdKR48XFZBuJqHosX3AAHjRAzygouMTyimnBPOLdY3WjzUSKhus2FVMihUFWzeLebDgr4r8UeQFAct7Bg==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.7.1 + '@remix-run/router': 1.7.2 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - react-router: 6.14.1(react@18.2.0) + react-router: 6.14.2(react@18.2.0) dev: false - /react-router@6.14.1(react@18.2.0): - resolution: {integrity: sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==} + /react-router@6.14.2(react@18.2.0): + resolution: {integrity: sha512-09Zss2dE2z+T1D03IheqAFtK4UzQyX8nFPWx6jkwdYzGLXd5ie06A6ezS2fO6zJfEb/SpG6UocN2O1hfD+2urQ==} engines: {node: '>=14'} peerDependencies: react: '>=16.8' dependencies: - '@remix-run/router': 1.7.1 + '@remix-run/router': 1.7.2 react: 18.2.0 dev: false @@ -4900,7 +6330,7 @@ packages: engines: {node: '>=0.12.0'} dev: false - /react-style-singleton@2.2.1(@types/react@18.2.14)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -4910,15 +6340,15 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.14 + '@types/react': 18.2.16 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 - tslib: 2.6.0 + tslib: 2.6.1 dev: false - /react-virtuoso@4.3.11(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-0YrCvQ5GsIKRcN34GxrzhSJGuMNI+hGxWci5cTVuPQ8QWTEsrKfCyqm7YNBMmV3pu7onG1YVUBo86CyCXdejXg==} + /react-virtuoso@4.4.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9uChSRSK5bTbKTxzuta4RqhfrlZSVHI/v8fHwmv3jmImS8FjdZ4Mzgqz9JKUp/yQo3dIHkR2QwidQeqxgYzPhQ==} engines: {node: '>=10'} peerDependencies: react: '>=16 || >=17 || >= 18' @@ -5004,6 +6434,36 @@ packages: define-properties: 1.2.0 functions-have-names: 1.2.3 + /remark-gfm@3.0.1: + resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-gfm: 2.0.2 + micromark-extension-gfm: 2.0.3 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} + dependencies: + '@types/mdast': 3.0.12 + mdast-util-from-markdown: 1.3.1 + unified: 10.1.2 + transitivePeerDependencies: + - supports-color + dev: false + + /remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} + dependencies: + '@types/hast': 2.3.5 + '@types/mdast': 3.0.12 + mdast-util-to-hast: 12.3.0 + unified: 10.1.2 + dev: false + /remove-accents@0.4.2: resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} dev: false @@ -5056,14 +6516,18 @@ packages: dependencies: glob: 7.2.3 - /rollup@3.26.2: - resolution: {integrity: sha512-6umBIGVz93er97pMgQO08LuH3m6PUb3jlDUUGFsNJB6VgTCUaDFpupf5JfU30529m/UKOgmiX+uY6Sx8cOYpLA==} + /rollup@3.26.3: + resolution: {integrity: sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 dev: true + /rope-sequence@1.3.4: + resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} + dev: false + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -5072,9 +6536,25 @@ packages: /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.0 + tslib: 2.6.1 dev: true + /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.0: + resolution: {integrity: sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + has-symbols: 1.0.3 + isarray: 2.0.5 + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false @@ -5095,19 +6575,19 @@ packages: loose-envify: 1.4.0 dev: false - /scroll-into-view-if-needed@2.2.31: - resolution: {integrity: sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==} + /selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} dependencies: - compute-scroll-into-view: 1.0.20 + parseley: 0.12.1 dev: false - /semver@5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true dev: false - /semver@6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true /semver@7.5.4: @@ -5166,44 +6646,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - /slate-history@0.93.0(slate@0.94.1): - resolution: {integrity: sha512-Gr1GMGPipRuxIz41jD2/rbvzPj8eyar56TVMyJBvBeIpQSSjNISssvGNDYfJlSWM8eaRqf6DAcxMKzsLCYeX6g==} - peerDependencies: - slate: '>=0.65.3' - dependencies: - is-plain-object: 5.0.0 - slate: 0.94.1 - dev: false - - /slate-react@0.94.2(react-dom@18.2.0)(react@18.2.0)(slate@0.94.1): - resolution: {integrity: sha512-4wDSuTuGBkdQ609CS55uc2Yhfa5but21usBgAtCVhPJQazL85kzN2vUUYTmGb7d/mpP9tdnJiVPopIyhqlRJ8Q==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - slate: '>=0.65.3' - dependencies: - '@juggle/resize-observer': 3.4.0 - '@types/is-hotkey': 0.1.7 - '@types/lodash': 4.14.195 - direction: 1.0.4 - is-hotkey: 0.1.8 - is-plain-object: 5.0.0 - lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - scroll-into-view-if-needed: 2.2.31 - slate: 0.94.1 - tiny-invariant: 1.0.6 - dev: false - - /slate@0.94.1: - resolution: {integrity: sha512-GH/yizXr1ceBoZ9P9uebIaHe3dC/g6Plpf9nlUwnvoyf6V1UOYrRwkabtOCd3ZfIGxomY4P7lfgLr7FPH8/BKA==} - dependencies: - immer: 9.0.21 - is-plain-object: 5.0.0 - tiny-warning: 1.0.3 - dev: false - /slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -5264,6 +6706,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + dev: false + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -5319,7 +6765,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 get-intrinsic: 1.2.1 has-symbols: 1.0.3 internal-slot: 1.0.5 @@ -5333,7 +6779,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 dev: false /string.prototype.trim@1.2.7: @@ -5342,21 +6788,21 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /string.prototype.trimend@1.0.6: resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /string.prototype.trimstart@1.0.6: resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 define-properties: 1.2.0 - es-abstract: 1.21.2 + es-abstract: 1.22.1 /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -5397,8 +6843,14 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /sucrase@3.32.0: - resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==} + /style-to-object@0.4.1: + resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==} + dependencies: + inline-style-parser: 0.1.1 + dev: false + + /sucrase@3.34.0: + resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} engines: {node: '>=8'} hasBin: true dependencies: @@ -5411,8 +6863,8 @@ packages: ts-interface-checker: 0.1.13 dev: true - /superjson@1.12.4: - resolution: {integrity: sha512-vkpPQAxdCg9SLfPv5GPC5fnGrui/WryktoN9O5+Zif/14QIMjw+RITf/5LbBh+9QpBFb3KNvJth+puz2H8o6GQ==} + /superjson@1.13.1: + resolution: {integrity: sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==} engines: {node: '>=10'} dependencies: copy-anything: 3.0.5 @@ -5442,12 +6894,12 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /tailwind-merge@1.13.2: - resolution: {integrity: sha512-R2/nULkdg1VR/EL4RXg4dEohdoxNUJGLMnWIQnPKL+O9Twu7Cn3Rxi4dlXkDzZrEGtR+G+psSXFouWlpTyLhCQ==} + /tailwind-merge@1.14.0: + resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} dev: false - /tailwindcss@3.3.2: - resolution: {integrity: sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==} + /tailwindcss@3.3.3: + resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -5456,7 +6908,7 @@ packages: chokidar: 3.5.3 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.0 + fast-glob: 3.3.1 glob-parent: 6.0.2 is-glob: 4.0.3 jiti: 1.19.1 @@ -5465,15 +6917,14 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.25 - postcss-import: 15.1.0(postcss@8.4.25) - postcss-js: 4.0.1(postcss@8.4.25) - postcss-load-config: 4.0.1(postcss@8.4.25) - postcss-nested: 6.0.1(postcss@8.4.25) + postcss: 8.4.27 + postcss-import: 15.1.0(postcss@8.4.27) + postcss-js: 4.0.1(postcss@8.4.27) + postcss-load-config: 4.0.1(postcss@8.4.27) + postcss-nested: 6.0.1(postcss@8.4.27) postcss-selector-parser: 6.0.13 - postcss-value-parser: 4.2.0 resolve: 1.22.2 - sucrase: 3.32.0 + sucrase: 3.34.0 transitivePeerDependencies: - ts-node dev: true @@ -5506,16 +6957,19 @@ packages: any-promise: 1.3.0 dev: true + /throttle-debounce@3.0.1: + resolution: {integrity: sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==} + engines: {node: '>=10'} + dev: false + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /tiny-invariant@1.0.6: - resolution: {integrity: sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA==} - dev: false - - /tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + /tippy.js@6.3.7: + resolution: {integrity: sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==} + dependencies: + '@popperjs/core': 2.11.8 dev: false /tlds@1.240.0: @@ -5526,7 +6980,6 @@ packages: /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: true /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} @@ -5534,17 +6987,25 @@ packages: dependencies: is-number: 7.0.0 + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false + /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} dev: false + /trough@2.1.0: + resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} + dev: false + /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /tsconfck@2.1.1(typescript@4.9.5): - resolution: {integrity: sha512-ZPCkJBKASZBmBUNqGHmRhdhM8pJYDdOXp4nRgj/O0JwUwsMq50lCDRQP/M5GBNAA0elPrq4gAeu4dkaVCuKWww==} + /tsconfck@2.1.2(typescript@4.9.5): + resolution: {integrity: sha512-ghqN1b0puy3MhhviwO2kGF8SeMDNhEbnKxjK7h6+fvY9JAxqvXi8y5NAHSQv687OVboS2uZIByzGd45/YxrRHg==} engines: {node: ^14.13.1 || ^16 || >=18} hasBin: true peerDependencies: @@ -5582,8 +7043,8 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.6.0: - resolution: {integrity: sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==} + /tslib@2.6.1: + resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} /tstl@2.5.13: resolution: {integrity: sha512-h9wayHHFI5+yqt8iau0vqH96cTNhezhZ/Fk/hrIdpfkiMu3lg9nzyvMfs5bIdX51IVzZO6DudLqhkL/rVXpT6g==} @@ -5627,6 +7088,11 @@ packages: engines: {node: '>=8'} dev: false + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: false + /type@1.2.0: resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} dev: false @@ -5635,12 +7101,39 @@ packages: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: false + /typed-array-buffer@1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.1 + is-typed-array: 1.1.12 + + /typed-array-byte-length@1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + + /typed-array-byte-offset@1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.12 + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.2 for-each: 0.3.3 - is-typed-array: 1.1.10 + is-typed-array: 1.1.12 /typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} @@ -5659,6 +7152,10 @@ packages: hasBin: true dev: false + /uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: false + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -5667,6 +7164,18 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + dependencies: + '@types/unist': 2.0.7 + bail: 2.0.2 + extend: 3.0.2 + is-buffer: 2.0.5 + is-plain-obj: 4.1.0 + trough: 2.1.0 + vfile: 5.3.7 + dev: false + /unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5681,6 +7190,43 @@ packages: imurmurhash: 0.1.4 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==} + dependencies: + '@types/unist': 2.0.7 + dev: false + + /unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} + dependencies: + '@types/unist': 2.0.7 + dev: false + + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.7 + dev: false + + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + dependencies: + '@types/unist': 2.0.7 + unist-util-is: 5.2.1 + dev: false + + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + dependencies: + '@types/unist': 2.0.7 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + dev: false + /update-browserslist-db@1.0.11(browserslist@4.21.9): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true @@ -5690,7 +7236,6 @@ packages: browserslist: 4.21.9 escalade: 3.1.1 picocolors: 1.0.0 - dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -5711,7 +7256,7 @@ packages: tlds: 1.240.0 dev: false - /use-callback-ref@1.3.0(@types/react@18.2.14)(react@18.2.0): + /use-callback-ref@1.3.0(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} peerDependencies: @@ -5721,12 +7266,12 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.14 + '@types/react': 18.2.16 react: 18.2.0 - tslib: 2.6.0 + tslib: 2.6.1 dev: false - /use-sidecar@1.1.2(@types/react@18.2.14)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.2.16)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -5736,10 +7281,10 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.14 + '@types/react': 18.2.16 detect-node-es: 1.1.0 react: 18.2.0 - tslib: 2.6.0 + tslib: 2.6.1 dev: false /use-sync-external-store@1.2.0(react@18.2.0): @@ -5771,6 +7316,17 @@ packages: hasBin: true dev: true + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.1.0 + kleur: 4.1.5 + sade: 1.8.1 + dev: false + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: @@ -5778,21 +7334,37 @@ packages: spdx-expression-parse: 3.0.1 dev: false - /vite-plugin-top-level-await@1.3.1(vite@4.4.2): + /vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} + dependencies: + '@types/unist': 2.0.7 + unist-util-stringify-position: 3.0.3 + dev: false + + /vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} + dependencies: + '@types/unist': 2.0.7 + is-buffer: 2.0.5 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 + dev: false + + /vite-plugin-top-level-await@1.3.1(vite@4.4.7): resolution: {integrity: sha512-55M1h4NAwkrpxPNOJIBzKZFihqLUzIgnElLSmPNPMR2Fn9+JHKaNg3sVX1Fq+VgvuBksQYxiD3OnwQAUu7kaPQ==} peerDependencies: vite: '>=2.8' dependencies: '@rollup/plugin-virtual': 3.0.1 - '@swc/core': 1.3.68 + '@swc/core': 1.3.70 uuid: 9.0.0 - vite: 4.4.2(@types/node@18.16.19) + vite: 4.4.7(@types/node@18.17.0) transitivePeerDependencies: - '@swc/helpers' - rollup dev: true - /vite-tsconfig-paths@4.2.0(typescript@4.9.5)(vite@4.4.2): + /vite-tsconfig-paths@4.2.0(typescript@4.9.5)(vite@4.4.7): resolution: {integrity: sha512-jGpus0eUy5qbbMVGiTxCL1iB9ZGN6Bd37VGLJU39kTDD6ZfULTTb1bcc5IeTWqWJKiWV5YihCaibeASPiGi8kw==} peerDependencies: vite: '*' @@ -5802,15 +7374,15 @@ packages: dependencies: debug: 4.3.4 globrex: 0.1.2 - tsconfck: 2.1.1(typescript@4.9.5) - vite: 4.4.2(@types/node@18.16.19) + tsconfck: 2.1.2(typescript@4.9.5) + vite: 4.4.7(@types/node@18.17.0) transitivePeerDependencies: - supports-color - typescript dev: true - /vite@4.4.2(@types/node@18.16.19): - resolution: {integrity: sha512-zUcsJN+UvdSyHhYa277UHhiJ3iq4hUBwHavOpsNUGsTgjBeoBlK8eDt+iT09pBq0h9/knhG/SPrZiM7cGmg7NA==} + /vite@4.4.7(@types/node@18.17.0): + resolution: {integrity: sha512-6pYf9QJ1mHylfVh39HpuSfMPojPSKVxZvnclX1K1FyZ1PXDOcLBibdq5t1qxJSnL63ca8Wf4zts6mD8u8oc9Fw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -5837,14 +7409,18 @@ packages: terser: optional: true dependencies: - '@types/node': 18.16.19 - esbuild: 0.18.11 - postcss: 8.4.25 - rollup: 3.26.2 + '@types/node': 18.17.0 + esbuild: 0.18.16 + postcss: 8.4.27 + rollup: 3.26.3 optionalDependencies: fsevents: 2.3.2 dev: true + /w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + dev: false + /web-streams-polyfill@3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} @@ -5882,8 +7458,8 @@ packages: is-string: 1.0.7 is-symbol: 1.0.4 - /which-typed-array@1.1.9: - resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + /which-typed-array@1.1.11: + resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.5 @@ -5891,7 +7467,6 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - is-typed-array: 1.1.10 /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} @@ -5947,6 +7522,10 @@ packages: engines: {node: '>=0.10.32'} dev: false + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: false + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} @@ -5981,26 +7560,38 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - github.com/tauri-apps/tauri-plugin-autostart/f409102d516cdac20bb7dde4300a0e495c61d6f2: - resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-autostart/tar.gz/f409102d516cdac20bb7dde4300a0e495c61d6f2} + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + dev: false + + github.com/tauri-apps/tauri-plugin-autostart/5f6b99fda5afc1e38976307b1cbede15a572c57d: + resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-autostart/tar.gz/5f6b99fda5afc1e38976307b1cbede15a572c57d} name: tauri-plugin-autostart-api version: 0.0.0 dependencies: '@tauri-apps/api': 1.4.0 dev: false - github.com/tauri-apps/tauri-plugin-sql/91195cd53a9599e3c043aee2490c0d5bd7989f18: - resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-sql/tar.gz/91195cd53a9599e3c043aee2490c0d5bd7989f18} + github.com/tauri-apps/tauri-plugin-sql/a956efd2ddba019ceaebe4a38b7d0352bad19884: + resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-sql/tar.gz/a956efd2ddba019ceaebe4a38b7d0352bad19884} name: tauri-plugin-sql-api version: 0.0.0 dependencies: '@tauri-apps/api': 1.4.0 dev: false - github.com/tauri-apps/tauri-plugin-stronghold/910f0dcda71336f75e284c84bbabe05ed2491128: - resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-stronghold/tar.gz/910f0dcda71336f75e284c84bbabe05ed2491128} + github.com/tauri-apps/tauri-plugin-stronghold/2e60980e85f6313a63c35e08a1b2078f3af9c724: + resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-stronghold/tar.gz/2e60980e85f6313a63c35e08a1b2078f3af9c724} name: tauri-plugin-stronghold-api version: 0.0.0 dependencies: '@tauri-apps/api': 1.4.0 dev: false + + github.com/tauri-apps/tauri-plugin-upload/0323acf546ecb4121ff54dfccf6153c7715741a8: + resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-upload/tar.gz/0323acf546ecb4121ff54dfccf6153c7715741a8} + name: tauri-plugin-upload-api + version: 0.0.0 + dependencies: + '@tauri-apps/api': 1.4.0 + dev: false diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 21930210..642cbee1 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -75,15 +75,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "aho-corasick" -version = "0.7.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" -dependencies = [ - "memchr", -] - [[package]] name = "aho-corasick" version = "1.0.2" @@ -110,9 +101,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56fc6cf8dc8c4158eed8649f9b8b0ea1518eb62b544fe9490d66fa0b349eafe9" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" [[package]] name = "android-tzdata" @@ -130,10 +121,59 @@ dependencies = [ ] [[package]] -name = "anyhow" -version = "1.0.71" +name = "anstream" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is-terminal", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" + +[[package]] +name = "anstyle-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "anstyle-wincon" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188" +dependencies = [ + "anstyle", + "windows-sys 0.48.0", +] + +[[package]] +name = "anyhow" +version = "1.0.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854" [[package]] name = "arrayref" @@ -177,7 +217,7 @@ dependencies = [ "async-lock", "async-task", "concurrent-queue", - "fastrand", + "fastrand 1.9.0", "futures-lite", "slab", ] @@ -249,7 +289,7 @@ checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -260,13 +300,13 @@ checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" [[package]] name = "async-trait" -version = "0.1.71" +version = "0.1.72" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf" +checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -308,17 +348,6 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi 0.1.19", - "libc", - "winapi", -] - [[package]] name = "auto-launch" version = "0.4.0" @@ -461,7 +490,7 @@ dependencies = [ "async-lock", "async-task", "atomic-waker", - "fastrand", + "fastrand 1.9.0", "futures-lite", "log", ] @@ -550,18 +579,18 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.4" +version = "1.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" dependencies = [ "serde", ] [[package]] name = "cargo-platform" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27" +checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479" dependencies = [ "serde", ] @@ -686,42 +715,44 @@ dependencies = [ [[package]] name = "clap" -version = "3.2.25" +version = "4.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123" +checksum = "5fd304a20bff958a57f04c4e96a2e7594cc4490a0e809cbd48bb6437edaa452d" dependencies = [ - "atty", - "bitflags 1.3.2", + "clap_builder", "clap_derive", - "clap_lex", - "indexmap 1.9.3", "once_cell", +] + +[[package]] +name = "clap_builder" +version = "4.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c6a3f08f1fe5662a35cfe393aec09c4df95f60ee93b7556505260f75eee9e1" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", "strsim", - "termcolor", - "textwrap", ] [[package]] name = "clap_derive" -version = "3.2.25" +version = "4.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008" +checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050" dependencies = [ "heck 0.4.1", - "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.27", ] [[package]] name = "clap_lex" -version = "0.2.4" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" -dependencies = [ - "os_str_bytes", -] +checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] name = "clipboard-win" @@ -771,6 +802,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + [[package]] name = "combine" version = "4.6.6" @@ -805,9 +842,9 @@ dependencies = [ [[package]] name = "const-oid" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6340df57935414636969091153f35f68d9f00bbc8fb4a9c6054706c213e6c6bc" +checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747" [[package]] name = "constant_time_eq" @@ -987,7 +1024,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -1024,9 +1061,9 @@ dependencies = [ [[package]] name = "darling" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944" +checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" dependencies = [ "darling_core", "darling_macro", @@ -1034,27 +1071,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb" +checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] name = "darling_macro" -version = "0.20.1" +version = "0.20.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a" +checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" dependencies = [ "darling_core", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -1168,9 +1205,9 @@ checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] name = "dtoa" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "519b83cd10f5f6e969625a409f735182bea5558cd8b64c655806ceaae36f1999" +checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dtoa-short" @@ -1203,9 +1240,9 @@ dependencies = [ [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" dependencies = [ "serde", ] @@ -1268,14 +1305,14 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] name = "equivalent" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" @@ -1334,6 +1371,12 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764" + [[package]] name = "fd-lock" version = "3.0.13" @@ -1341,7 +1384,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef033ed5e9bad94e55838ca0ca906db0e043f517adda0c8b79c7a8c66c93c1b5" dependencies = [ "cfg-if", - "rustix 0.38.3", + "rustix 0.38.4", "windows-sys 0.48.0", ] @@ -1503,7 +1546,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -1520,7 +1563,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -1794,11 +1837,11 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc" +checksum = "1391ab1f92ffcc08911957149833e682aa3fe252b9f45f966d2ef972274c97df" dependencies = [ - "aho-corasick 0.7.20", + "aho-corasick", "bstr", "fnv", "log", @@ -1936,15 +1979,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - [[package]] name = "hermit-abi" version = "0.3.2" @@ -2006,7 +2040,7 @@ checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" dependencies = [ "bytes", "fnv", - "itoa 1.0.8", + "itoa 1.0.9", ] [[package]] @@ -2053,7 +2087,7 @@ dependencies = [ "http-body", "httparse", "httpdate", - "itoa 1.0.8", + "itoa 1.0.9", "pin-project-lite", "socket2", "tokio", @@ -2199,7 +2233,7 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi", "libc", "windows-sys 0.48.0", ] @@ -2232,9 +2266,9 @@ dependencies = [ [[package]] name = "iota-crypto" -version = "0.21.2" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d22b9d6f6b7601c3fcff97cdf6298cbfdd6fb44812b4e6f82a016152be1c891" +checksum = "c5d5a986d972c3a703d48ced24fdc0bf16fb2d02959ff4b152fa77b9132f6fb0" dependencies = [ "autocfg", ] @@ -2263,6 +2297,17 @@ version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix 0.38.4", + "windows-sys 0.48.0", +] + [[package]] name = "itertools" version = "0.10.5" @@ -2280,9 +2325,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "javascriptcore-rs" @@ -2492,7 +2537,7 @@ dependencies = [ [[package]] name = "lume" -version = "1.0.1" +version = "1.1.0" dependencies = [ "cocoa", "objc", @@ -2507,6 +2552,7 @@ dependencies = [ "tauri-plugin-single-instance", "tauri-plugin-sql", "tauri-plugin-stronghold", + "tauri-plugin-upload", ] [[package]] @@ -2517,9 +2563,9 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" [[package]] name = "mac-notification-sys" -version = "0.5.6" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5" +checksum = "abc434554ad0e640d772f7f262aa28e61d485212533d3673abe5f3d1729bd42a" dependencies = [ "cc", "dirs-next", @@ -2846,9 +2892,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", "libm", @@ -2860,7 +2906,7 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.3.2", + "hermit-abi", "libc", ] @@ -2978,7 +3024,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -3020,12 +3066,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "os_str_bytes" -version = "6.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac" - [[package]] name = "overload" version = "0.1.1" @@ -3088,9 +3128,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b27ab7be369122c218afc2079489cdcb4b517c0a3fc386ff11e1fedfcc2b35" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" [[package]] name = "pathdiff" @@ -3237,7 +3277,7 @@ checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -3281,14 +3321,14 @@ checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "plist" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590" +checksum = "bdc0001cfea3db57a2e24bc0d818e9e20e554b5f97fabb9bc231dc240269ae06" dependencies = [ "base64 0.21.2", "indexmap 1.9.3", "line-wrap", - "quick-xml 0.28.2", + "quick-xml 0.29.0", "serde", "time", ] @@ -3399,9 +3439,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.64" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] @@ -3426,18 +3466,18 @@ dependencies = [ [[package]] name = "quick-xml" -version = "0.28.2" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1" +checksum = "81b9228215d82c7b61490fec1de287136b5de6f5700f6e58ea9ad61a7964ca51" dependencies = [ "memchr", ] [[package]] name = "quote" -version = "1.0.29" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" dependencies = [ "proc-macro2", ] @@ -3561,6 +3601,17 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "read-progress-stream" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6435842fc2fea44b528719eb8c32203bbc1bb2f5b619fbe0c0a3d8350fd8d2a8" +dependencies = [ + "bytes", + "futures", + "pin-project-lite", +] + [[package]] name = "redox_syscall" version = "0.2.16" @@ -3596,10 +3647,10 @@ version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575" dependencies = [ - "aho-corasick 1.0.2", + "aho-corasick", "memchr", - "regex-automata 0.3.2", - "regex-syntax 0.7.3", + "regex-automata 0.3.3", + "regex-syntax 0.7.4", ] [[package]] @@ -3613,13 +3664,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83d3daa6976cffb758ec878f108ba0e062a45b2d6ca3a2cca965338855476caf" +checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310" dependencies = [ - "aho-corasick 1.0.2", + "aho-corasick", "memchr", - "regex-syntax 0.7.3", + "regex-syntax 0.7.4", ] [[package]] @@ -3630,9 +3681,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846" +checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2" [[package]] name = "remove_dir_all" @@ -3791,9 +3842,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.3" +version = "0.38.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac5ffa1efe7548069688cd7028f32591853cd7b5b756d41bcffd2353e4fc75b4" +checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5" dependencies = [ "bitflags 2.3.3", "errno", @@ -3804,12 +3855,12 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.3" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b19faa85ecb5197342b54f987b142fb3e30d0c90da40f80ef4fa9a726e6676ed" +checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36" dependencies = [ "ring", - "rustls-webpki 0.101.1", + "rustls-webpki", "sct", ] @@ -3822,16 +3873,6 @@ dependencies = [ "base64 0.21.2", ] -[[package]] -name = "rustls-webpki" -version = "0.100.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b" -dependencies = [ - "ring", - "untrusted", -] - [[package]] name = "rustls-webpki" version = "0.101.1" @@ -3844,9 +3885,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "rustyline" @@ -3874,9 +3915,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "safemem" @@ -3910,9 +3951,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" @@ -3926,9 +3967,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ "bitflags 1.3.2", "core-foundation", @@ -3939,9 +3980,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -3969,53 +4010,53 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.169" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd51c3db8f9500d531e6c12dd0fd4ad13d133e9117f5aebac3cdbb8b6d9824b0" +checksum = "5d25439cd7397d044e2748a6fe2432b5e85db703d6d097bd014b3c0ad1ebff0b" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.169" +version = "1.0.175" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27738cfea0d944ab72c3ed01f3d5f23ec4322af8a1431e40ce630e4c01ea74fd" +checksum = "b23f7ade6f110613c0d63858ddb8b94c1041f550eab58a16b371bdf2c9c80ab4" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] name = "serde_json" -version = "1.0.100" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1e14e89be7aa4c4b78bdbdc9eb5bf8517829a600ae8eaa39a6e1d960b5185c" +checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b" dependencies = [ - "itoa 1.0.8", + "itoa 1.0.9", "ryu", "serde", ] [[package]] name = "serde_repr" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d89a8107374290037607734c0b73a85db7ed80cae314b3c5791f192a496e731" +checksum = "e168eaaf71e8f9bd6037feb05190485708e019f4fd87d161b3c0a0d37daf85e5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -4034,16 +4075,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.8", + "itoa 1.0.9", "ryu", "serde", ] [[package]] name = "serde_with" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f02d8aa6e3c385bf084924f660ce2a3a6bd333ba55b35e8590b321f35d88513" +checksum = "21e47d95bc83ed33b2ecf84f4187ad1ab9685d18ff28db000c99deac8ce180e3" dependencies = [ "base64 0.21.2", "chrono", @@ -4057,14 +4098,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.0.0" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc7d5d3932fb12ce722ee5e64dd38c504efba37567f0c402f6ca728c3b8b070" +checksum = "ea3cee93715c2e266b9338b7544da68a9f24e227722ba482bd1c024367c77c65" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -4145,9 +4186,9 @@ dependencies = [ [[package]] name = "signal-hook" -version = "0.3.15" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" dependencies = [ "libc", "signal-hook-registry", @@ -4174,9 +4215,9 @@ dependencies = [ [[package]] name = "simd-adler32" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "siphasher" @@ -4275,9 +4316,9 @@ dependencies = [ [[package]] name = "sqlx" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ef53c86d2066e04f0ac6b1364f16d13d82388e2d07f11a5c71782345555761" +checksum = "8e58421b6bc416714d5115a2ca953718f6c621a51b68e4f4922aea5a4391a721" dependencies = [ "sqlx-core", "sqlx-macros", @@ -4288,9 +4329,9 @@ dependencies = [ [[package]] name = "sqlx-cli" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c8afd6085e14de2e4a4efa62e1294ae6bd2ca46f842033f4bce4276c620c12" +checksum = "f53103960be705bebdbe2314d6c06f05a6a64934998c3c6844f3347437890abc" dependencies = [ "anyhow", "async-trait", @@ -4314,9 +4355,9 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a22fd81e9c1ad53c562edb869ff042b215d4eadefefc4784bacfbfd19835945" +checksum = "dd4cef4251aabbae751a3710927945901ee1d97ee96d757f6880ebb9a79bfd53" dependencies = [ "ahash 0.8.3", "atoi", @@ -4358,9 +4399,9 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00bb7c096a202b8164c175614cbfb79fe0e1e0a3d50e0374526183ef2974e4a2" +checksum = "208e3165167afd7f3881b16c1ef3f2af69fa75980897aac8874a0696516d12c2" dependencies = [ "proc-macro2", "quote", @@ -4371,9 +4412,9 @@ dependencies = [ [[package]] name = "sqlx-macros-core" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d644623ab9699014e5b3cb61a040d16caa50fd477008f63f1399ae35498a58" +checksum = "8a4a8336d278c62231d87f24e8a7a74898156e34c1c18942857be2acb29c7dfc" dependencies = [ "dotenvy", "either", @@ -4397,9 +4438,9 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8264c59b28b6858796acfcedc660aa4c9075cc6e4ec8eb03cdca2a3e725726db" +checksum = "8ca69bf415b93b60b80dc8fda3cb4ef52b2336614d8da2de5456cc942a110482" dependencies = [ "atoi", "base64 0.21.2", @@ -4418,7 +4459,7 @@ dependencies = [ "hex", "hkdf", "hmac", - "itoa 1.0.8", + "itoa 1.0.9", "log", "md-5", "memchr", @@ -4440,9 +4481,9 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cab6147b81ca9213a7578f1b4c9d24c449a53953cd2222a7b5d7cd29a5c3139" +checksum = "a0db2df1b8731c3651e204629dd55e52adbae0462fa1bdcbed56a2302c18181e" dependencies = [ "atoi", "base64 0.21.2", @@ -4459,7 +4500,7 @@ dependencies = [ "hkdf", "hmac", "home", - "itoa 1.0.8", + "itoa 1.0.9", "log", "md-5", "memchr", @@ -4480,9 +4521,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fba60afa64718104b71eec6984f8779d4caffff3b30cde91a75843c7efc126" +checksum = "be4c21bf34c7cae5b283efb3ac1bcc7670df7561124dc2f8bdc0b59be40f79a2" dependencies = [ "atoi", "flume", @@ -4556,9 +4597,9 @@ dependencies = [ [[package]] name = "stringprep" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" +checksum = "db3737bde7edce97102e0e2b15365bf7a20bfdb5f60f4f9e8d7004258a51a8da" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -4647,9 +4688,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.24" +version = "2.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36ccaf716a23c35ff908f91c971a86a9a71af5998c1d8f10e828d9f55f68ac00" +checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" dependencies = [ "proc-macro2", "quote", @@ -4757,9 +4798,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +checksum = "ec96d2ffad078296368d46ff1cb309be1c23c513b4ab0e22a45de0185275ac96" dependencies = [ "filetime", "libc", @@ -4768,9 +4809,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.8" +version = "0.12.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1c7f239eb94671427157bd93b3694320f3668d4e1eff08c7285366fd777fac" +checksum = "1d2faeef5759ab89935255b1a4cd98e0baf99d1085e37d36599c625dac49ae8e" [[package]] name = "tauri" @@ -4889,7 +4930,7 @@ dependencies = [ [[package]] name = "tauri-plugin-autostart" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0d0ed7b9075ee21f37d787217fba3ef0784b2449" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#92514cca47bdc361257b623f6369ecf826e3ef4f" dependencies = [ "auto-launch", "log", @@ -4902,7 +4943,7 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0d0ed7b9075ee21f37d787217fba3ef0784b2449" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#92514cca47bdc361257b623f6369ecf826e3ef4f" dependencies = [ "log", "serde", @@ -4916,7 +4957,7 @@ dependencies = [ [[package]] name = "tauri-plugin-sql" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0d0ed7b9075ee21f37d787217fba3ef0784b2449" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#92514cca47bdc361257b623f6369ecf826e3ef4f" dependencies = [ "futures-core", "log", @@ -4932,10 +4973,10 @@ dependencies = [ [[package]] name = "tauri-plugin-stronghold" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#0d0ed7b9075ee21f37d787217fba3ef0784b2449" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#92514cca47bdc361257b623f6369ecf826e3ef4f" dependencies = [ "hex", - "iota-crypto 0.21.2", + "iota-crypto 0.23.0", "iota_stronghold", "log", "serde", @@ -4945,6 +4986,23 @@ dependencies = [ "zeroize", ] +[[package]] +name = "tauri-plugin-upload" +version = "0.0.0" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#92514cca47bdc361257b623f6369ecf826e3ef4f" +dependencies = [ + "futures-util", + "log", + "read-progress-stream", + "reqwest", + "serde", + "serde_json", + "tauri", + "thiserror", + "tokio", + "tokio-util", +] + [[package]] name = "tauri-runtime" version = "0.14.0" @@ -5037,15 +5095,14 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.6.0" +version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998" dependencies = [ - "autocfg", "cfg-if", - "fastrand", + "fastrand 2.0.0", "redox_syscall 0.3.5", - "rustix 0.37.23", + "rustix 0.38.4", "windows-sys 0.48.0", ] @@ -5060,21 +5117,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "termcolor" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "textwrap" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" - [[package]] name = "thin-slice" version = "0.1.1" @@ -5083,22 +5125,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.43" +version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -5117,7 +5159,7 @@ version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446" dependencies = [ - "itoa 1.0.8", + "itoa 1.0.9", "serde", "time-core", "time-macros", @@ -5179,7 +5221,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -5249,9 +5291,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.19.12" +version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ "indexmap 2.0.0", "serde", @@ -5287,7 +5329,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] @@ -5377,9 +5419,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "unicode-normalization" @@ -5450,9 +5492,9 @@ checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" [[package]] name = "uuid" -version = "1.4.0" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d023da39d1fde5a8a3fe1f3e01ca9632ada0a63e9797de55a879d6e2236277be" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" dependencies = [ "getrandom 0.2.10", ] @@ -5565,7 +5607,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", "wasm-bindgen-shared", ] @@ -5599,7 +5641,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5682,11 +5724,11 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.23.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338" +checksum = "b291546d5d9d1eab74f069c77749f2cb8504a12caa20f0f2de93ddbf6f411888" dependencies = [ - "rustls-webpki 0.100.1", + "rustls-webpki", ] [[package]] @@ -6084,9 +6126,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" [[package]] name = "winnow" -version = "0.4.9" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81a2094c43cc94775293eaa0e499fbc30048a6d824ac82c0351a8c0bf9112529" +checksum = "25b5872fa2e10bd067ae946f927e726d7d603eaeb6e02fa6a350e0722d2b8c11" dependencies = [ "memchr", ] @@ -6282,7 +6324,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.24", + "syn 2.0.27", ] [[package]] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index a9363a2c..4e74410a 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "lume" -version = "1.0.1" +version = "1.1.0" description = "nostr client" authors = ["Ren Amamiya"] license = "" @@ -16,10 +16,11 @@ tauri-build = { version = "1.2", features = [] } [dependencies] serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -tauri = { version = "1.2", features = [ "path-all", "fs-read-dir", "fs-read-file", "clipboard-read-text", "clipboard-write-text", "dialog-open", "http-all", "http-multipart", "notification-all", "os-all", "process-relaunch", "shell-open", "system-tray", "updater", "window-close", "window-start-dragging"] } +tauri = { version = "1.2", features = [ "fs-write-file", "window-create", "path-all", "fs-read-dir", "fs-read-file", "clipboard-read-text", "clipboard-write-text", "dialog-open", "http-all", "http-multipart", "notification-all", "os-all", "process-relaunch", "shell-open", "system-tray", "updater", "window-close", "window-start-dragging"] } tauri-plugin-single-instance = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } tauri-plugin-autostart = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } tauri-plugin-stronghold = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } +tauri-plugin-upload = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } sqlx-cli = {version = "0.7.0", default-features = false, features = ["sqlite"] } rust-argon2 = "1.0" rand = "0.8.5" diff --git a/src-tauri/icons/128x128.png b/src-tauri/icons/128x128.png index 03cfe369..4c19f5e6 100644 Binary files a/src-tauri/icons/128x128.png and b/src-tauri/icons/128x128.png differ diff --git a/src-tauri/icons/128x128@2x.png b/src-tauri/icons/128x128@2x.png index c7f8bfa1..dc7c765a 100644 Binary files a/src-tauri/icons/128x128@2x.png and b/src-tauri/icons/128x128@2x.png differ diff --git a/src-tauri/icons/32x32.png b/src-tauri/icons/32x32.png index 1a6d3ef1..25100e65 100644 Binary files a/src-tauri/icons/32x32.png and b/src-tauri/icons/32x32.png differ diff --git a/src-tauri/icons/Square107x107Logo.png b/src-tauri/icons/Square107x107Logo.png index 99ecd21c..4b462a0c 100644 Binary files a/src-tauri/icons/Square107x107Logo.png and b/src-tauri/icons/Square107x107Logo.png differ diff --git a/src-tauri/icons/Square142x142Logo.png b/src-tauri/icons/Square142x142Logo.png index ca79759d..10a78c2c 100644 Binary files a/src-tauri/icons/Square142x142Logo.png and b/src-tauri/icons/Square142x142Logo.png differ diff --git a/src-tauri/icons/Square150x150Logo.png b/src-tauri/icons/Square150x150Logo.png index efcc7708..c7d034a8 100644 Binary files a/src-tauri/icons/Square150x150Logo.png and b/src-tauri/icons/Square150x150Logo.png differ diff --git a/src-tauri/icons/Square284x284Logo.png b/src-tauri/icons/Square284x284Logo.png index 4fe39c0d..9d8be2e2 100644 Binary files a/src-tauri/icons/Square284x284Logo.png and b/src-tauri/icons/Square284x284Logo.png differ diff --git a/src-tauri/icons/Square30x30Logo.png b/src-tauri/icons/Square30x30Logo.png index 9a2dc485..3d25fcfc 100644 Binary files a/src-tauri/icons/Square30x30Logo.png and b/src-tauri/icons/Square30x30Logo.png differ diff --git a/src-tauri/icons/Square310x310Logo.png b/src-tauri/icons/Square310x310Logo.png index aa42e081..4a84395d 100644 Binary files a/src-tauri/icons/Square310x310Logo.png and b/src-tauri/icons/Square310x310Logo.png differ diff --git a/src-tauri/icons/Square44x44Logo.png b/src-tauri/icons/Square44x44Logo.png index 28430083..03437e38 100644 Binary files a/src-tauri/icons/Square44x44Logo.png and b/src-tauri/icons/Square44x44Logo.png differ diff --git a/src-tauri/icons/Square71x71Logo.png b/src-tauri/icons/Square71x71Logo.png index a5ef5c43..0075d730 100644 Binary files a/src-tauri/icons/Square71x71Logo.png and b/src-tauri/icons/Square71x71Logo.png differ diff --git a/src-tauri/icons/Square89x89Logo.png b/src-tauri/icons/Square89x89Logo.png index e2540512..f9276a47 100644 Binary files a/src-tauri/icons/Square89x89Logo.png and b/src-tauri/icons/Square89x89Logo.png differ diff --git a/src-tauri/icons/StoreLogo.png b/src-tauri/icons/StoreLogo.png index 81b41833..0f2bfd2f 100644 Binary files a/src-tauri/icons/StoreLogo.png and b/src-tauri/icons/StoreLogo.png differ diff --git a/src-tauri/icons/app-icon.png b/src-tauri/icons/app-icon.png deleted file mode 100644 index 736deec5..00000000 Binary files a/src-tauri/icons/app-icon.png and /dev/null differ diff --git a/src-tauri/icons/icon.icns b/src-tauri/icons/icon.icns index 9abf120b..2b2188d0 100644 Binary files a/src-tauri/icons/icon.icns and b/src-tauri/icons/icon.icns differ diff --git a/src-tauri/icons/icon.ico b/src-tauri/icons/icon.ico index d3c59a35..6061f7a3 100644 Binary files a/src-tauri/icons/icon.ico and b/src-tauri/icons/icon.ico differ diff --git a/src-tauri/icons/icon.png b/src-tauri/icons/icon.png index 1dd8cfd8..e19e6e13 100644 Binary files a/src-tauri/icons/icon.png and b/src-tauri/icons/icon.png differ diff --git a/src-tauri/migrations/20230718072634_clean_up_old_tables.sql b/src-tauri/migrations/20230718072634_clean_up_old_tables.sql new file mode 100644 index 00000000..707d2f9c --- /dev/null +++ b/src-tauri/migrations/20230718072634_clean_up_old_tables.sql @@ -0,0 +1,6 @@ +-- Add migration script here +DROP TABLE IF EXISTS blacklist; + +DROP TABLE IF EXISTS channel_messages; + +DROP TABLE IF EXISTS channels; \ No newline at end of file diff --git a/src-tauri/migrations/20230725010250_update_default_relays.sql b/src-tauri/migrations/20230725010250_update_default_relays.sql new file mode 100644 index 00000000..5c427e5d --- /dev/null +++ b/src-tauri/migrations/20230725010250_update_default_relays.sql @@ -0,0 +1,6 @@ +-- Add migration script here +UPDATE settings +SET + value = '["wss://relayable.org","wss://relay.damus.io","wss://relay.nostr.band/all","wss://nostr.mutinywallet.com"]' +WHERE + key = 'relays'; \ No newline at end of file diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index f8a53515..010d8dd7 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -107,6 +107,18 @@ fn main() { sql: include_str!("../migrations/20230619082415_add_replies.sql"), kind: MigrationKind::Up, }, + Migration { + version: 20230718072634, + description: "clean up", + sql: include_str!("../migrations/20230718072634_clean_up_old_tables.sql"), + kind: MigrationKind::Up, + }, + Migration { + version: 20230725010250, + description: "update default relays", + sql: include_str!("../migrations/20230725010250_update_default_relays.sql"), + kind: MigrationKind::Up, + }, ], ) .build(), @@ -115,8 +127,8 @@ fn main() { tauri_plugin_stronghold::Builder::new(|password| { let config = argon2::Config { lanes: 2, - mem_cost: 50_000, - time_cost: 30, + mem_cost: 10_000, + time_cost: 10, thread_mode: argon2::ThreadMode::from_threads(2), variant: argon2::Variant::Argon2id, ..Default::default() @@ -144,6 +156,7 @@ fn main() { .emit_all("single-instance", Payload { args: argv, cwd }) .unwrap(); })) + .plugin(tauri_plugin_upload::init()) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 82f04ba3..f236ce63 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "Lume", - "version": "1.0.1" + "version": "1.1.0" }, "tauri": { "allowlist": { @@ -28,6 +28,7 @@ "all": false, "readFile": true, "readDir": true, + "writeFile": true, "scope": [ "$APPDATA/*", "$DATA/*", @@ -62,7 +63,8 @@ }, "window": { "startDragging": true, - "close": true + "close": true, + "create": true }, "process": { "all": false, diff --git a/src/app.tsx b/src/app.tsx index 509838f4..e63da582 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -15,7 +15,7 @@ import { OnboardingScreen } from '@app/auth/onboarding'; import { UnlockScreen } from '@app/auth/unlock'; import { WelcomeScreen } from '@app/auth/welcome'; import { ChannelScreen } from '@app/channel'; -import { ChatScreen } from '@app/chat'; +import { ChatScreen } from '@app/chats'; import { ErrorScreen } from '@app/error'; import { NoteScreen } from '@app/note'; import { Root } from '@app/root'; @@ -24,7 +24,7 @@ import { GeneralSettingsScreen } from '@app/settings/general'; import { ShortcutsSettingsScreen } from '@app/settings/shortcuts'; import { SpaceScreen } from '@app/space'; import { TrendingScreen } from '@app/trending'; -import { UserScreen } from '@app/user'; +import { UserScreen } from '@app/users'; import { AppLayout } from '@shared/appLayout'; import { AuthLayout } from '@shared/authLayout'; @@ -84,8 +84,8 @@ const router = createBrowserRouter([ { path: 'space', element: }, { path: 'trending', element: }, { path: 'note/:id', element: }, - { path: 'user/:pubkey', element: }, - { path: 'chat/:pubkey', element: }, + { path: 'users/:pubkey', element: }, + { path: 'chats/:pubkey', element: }, { path: 'channel/:id', element: }, ], }, diff --git a/src/app/auth/components/user.tsx b/src/app/auth/components/user.tsx index eaf81702..0cd962b3 100644 --- a/src/app/auth/components/user.tsx +++ b/src/app/auth/components/user.tsx @@ -24,7 +24,7 @@ export function User({ pubkey, fallback }: { pubkey: string; fallback?: string }
{pubkey}
- {user.name || user.displayName || user.display_name} + {user?.name || user?.displayName || user?.display_name} - - {user.nip05?.toLowerCase() || shortenKey(pubkey)} + + {user?.nip05?.toLowerCase() || shortenKey(pubkey)}
diff --git a/src/app/auth/create/step-1.tsx b/src/app/auth/create/step-1.tsx index e3533890..31b8f04c 100644 --- a/src/app/auth/create/step-1.tsx +++ b/src/app/auth/create/step-1.tsx @@ -1,4 +1,5 @@ import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { BaseDirectory, writeTextFile } from '@tauri-apps/api/fs'; import { generatePrivateKey, getPublicKey, nip19 } from 'nostr-tools'; import { useMemo, useState } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -19,6 +20,7 @@ export function CreateStep1Screen() { const [privkeyInput, setPrivkeyInput] = useState('password'); const [loading, setLoading] = useState(false); + const [downloaded, setDownloaded] = useState(false); const privkey = useMemo(() => generatePrivateKey(), []); const pubkey = getPublicKey(privkey); @@ -34,6 +36,17 @@ export function CreateStep1Screen() { } }; + const download = async () => { + await writeTextFile( + 'lume-keys.txt', + `Public key: ${pubkey}\nPrivate key: ${privkey}`, + { + dir: BaseDirectory.Download, + } + ); + setDownloaded(true); + }; + const account = useMutation({ mutationFn: (data: { npub: string; @@ -68,9 +81,7 @@ export function CreateStep1Screen() { return (
-

- Lume is auto-generated key for you -

+

Save your access key!

@@ -110,14 +121,26 @@ export function CreateStep1Screen() { )}
+
+

+ Your private key is your password. If you lose this key, you will lose + access to your account! Copy it and keep it in a safe place. There is no way + to reset your private key. +

+
+
+
+ +
-
); diff --git a/src/app/auth/create/step-2.tsx b/src/app/auth/create/step-2.tsx index 19388650..dd915c96 100644 --- a/src/app/auth/create/step-2.tsx +++ b/src/app/auth/create/step-2.tsx @@ -32,12 +32,9 @@ export function CreateStep2Screen() { const [passwordInput, setPasswordInput] = useState('password'); const [loading, setLoading] = useState(false); - const [privkey, setPassword] = useStronghold((state) => [ - state.privkey, - state.setPassword, - ]); - const pubkey = useOnboarding((state) => state.privkey); + const privkey = useStronghold((state) => state.privkey); + const pubkey = useOnboarding((state) => state.pubkey); const { save } = useSecureStorage(); @@ -60,9 +57,6 @@ export function CreateStep2Screen() { const onSubmit = async (data: { [x: string]: string }) => { setLoading(true); if (data.password.length > 3) { - // add password to local state - setPassword(data.password); - // save privkey to secure storage await save(pubkey, privkey, data.password); diff --git a/src/app/auth/create/step-3.tsx b/src/app/auth/create/step-3.tsx index e370ec7c..2f2271a6 100644 --- a/src/app/auth/create/step-3.tsx +++ b/src/app/auth/create/step-3.tsx @@ -24,12 +24,13 @@ export function CreateStep3Screen() { formState: { isDirty, isValid }, } = useForm(); - const onSubmit = (data: any) => { + const onSubmit = (data: { name: string; about: string }) => { setLoading(true); try { const profile = { ...data, username: data.name, + name: data.name, display_name: data.name, bio: data.about, }; diff --git a/src/app/auth/create/step-4.tsx b/src/app/auth/create/step-4.tsx index b99a08b2..21356b8a 100644 --- a/src/app/auth/create/step-4.tsx +++ b/src/app/auth/create/step-4.tsx @@ -12,9 +12,9 @@ import { usePublish } from '@utils/hooks/usePublish'; export function CreateStep4Screen() { const navigate = useNavigate(); - const publish = usePublish(); const profile = useOnboarding((state) => state.profile); + const { publish } = usePublish(); const { account } = useAccount(); const [username, setUsername] = useState(''); diff --git a/src/app/auth/create/step-5.tsx b/src/app/auth/create/step-5.tsx index fd86eeff..85abb199 100644 --- a/src/app/auth/create/step-5.tsx +++ b/src/app/auth/create/step-5.tsx @@ -114,11 +114,11 @@ const INITIAL_LIST = [ export function CreateStep5Screen() { const queryClient = useQueryClient(); const navigate = useNavigate(); - const publish = usePublish(); const [loading, setLoading] = useState(false); const [follows, setFollows] = useState([]); + const { publish } = usePublish(); const { account } = useAccount(); const { status, data } = useQuery(['trending-profiles'], async () => { const res = await fetch('https://api.nostr.band/v0/trending/profiles'); @@ -137,7 +137,7 @@ export function CreateStep5Screen() { }; const update = useMutation({ - mutationFn: (follows: any) => { + mutationFn: (follows: string[]) => { return updateAccount('follows', follows, account.pubkey); }, onSuccess: () => { diff --git a/src/app/auth/import/step-2.tsx b/src/app/auth/import/step-2.tsx index 3d5cd54c..5dfab3cc 100644 --- a/src/app/auth/import/step-2.tsx +++ b/src/app/auth/import/step-2.tsx @@ -32,11 +32,8 @@ export function ImportStep2Screen() { const [passwordInput, setPasswordInput] = useState('password'); const [loading, setLoading] = useState(false); - const [privkey, setPassword] = useStronghold((state) => [ - state.privkey, - state.setPassword, - ]); + const privkey = useStronghold((state) => state.privkey); const pubkey = useOnboarding((state) => state.pubkey); const { save } = useSecureStorage(); @@ -60,9 +57,6 @@ export function ImportStep2Screen() { const onSubmit = async (data: { [x: string]: string }) => { setLoading(true); if (data.password.length > 3) { - // add password to local state - setPassword(data.password); - // save privkey to secure storage await save(pubkey, privkey, data.password); @@ -115,9 +109,9 @@ export function ImportStep2Screen() {

- Password is use to secure your key store in local machine, when you move - to other clients, you just need to copy your private key as nsec or - hexstring + Password is use to unlock app and secure your key store in local machine. + When you move to other clients, you just need to copy your private key as + nsec or hexstring

diff --git a/src/app/auth/migrate.tsx b/src/app/auth/migrate.tsx index ed174eee..034f90c3 100644 --- a/src/app/auth/migrate.tsx +++ b/src/app/auth/migrate.tsx @@ -33,13 +33,10 @@ const resolver: Resolver = async (values) => { export function MigrateScreen() { const queryClient = useQueryClient(); const navigate = useNavigate(); + const setPrivkey = useStronghold((state) => state.setPrivkey); const [passwordInput, setPasswordInput] = useState('password'); const [loading, setLoading] = useState(false); - const [setPassword, setPrivkey] = useStronghold((state) => [ - state.setPassword, - state.setPrivkey, - ]); const { account } = useAccount(); const { save } = useSecureStorage(); @@ -63,9 +60,6 @@ export function MigrateScreen() { const onSubmit = async (data: { [x: string]: string }) => { setLoading(true); if (data.password.length > 3) { - // add password to local state - setPassword(data.password); - // load private in secure storage try { // save privkey to secure storage diff --git a/src/app/auth/onboarding.tsx b/src/app/auth/onboarding.tsx index e25fbf2c..dc53955d 100644 --- a/src/app/auth/onboarding.tsx +++ b/src/app/auth/onboarding.tsx @@ -9,10 +9,11 @@ import { useAccount } from '@utils/hooks/useAccount'; import { usePublish } from '@utils/hooks/usePublish'; export function OnboardingScreen() { - const publish = usePublish(); const navigate = useNavigate(); + const { publish } = usePublish(); const { status, account } = useAccount(); + const [loading, setLoading] = useState(false); const submit = async () => { @@ -21,8 +22,7 @@ export function OnboardingScreen() { // publish event publish({ - content: - 'Running Lume, fighting for better future, join us here: https://lume.nu', + content: 'Running Lume, join with me #nostr #lume : https://lume.nu', kind: 1, tags: [], }); @@ -37,15 +37,16 @@ export function OnboardingScreen() { return (
-
+

👋 Hello, welcome you to Lume

- You're a part of better future that we're fighting + You're a part of Nostr community now

- If Lume gets your attention, please help us spread via button below + If Lume gets your attention, please help us spread it and don't forget + invite your friend join with you, we can have fun togother

@@ -54,18 +55,15 @@ export function OnboardingScreen() { )}
-

Running Lume, fighting for better future

-

- join us here:{' '} - - https://lume.nu - -

+

Running Lume, join with me #nostr #lume

+ + https://lume.nu +
@@ -84,16 +82,16 @@ export function OnboardingScreen() { ) : ( <> - Publish + Spread )} - Skip for now + Skip
diff --git a/src/app/auth/unlock.tsx b/src/app/auth/unlock.tsx index 5c65b33b..7867c7da 100644 --- a/src/app/auth/unlock.tsx +++ b/src/app/auth/unlock.tsx @@ -29,13 +29,10 @@ const resolver: Resolver = async (values) => { export function UnlockScreen() { const navigate = useNavigate(); + const setPrivkey = useStronghold((state) => state.setPrivkey); const [passwordInput, setPasswordInput] = useState('password'); const [loading, setLoading] = useState(false); - const [setPrivkey, setPassword] = useStronghold((state) => [ - state.setPrivkey, - state.setPassword, - ]); const { account } = useAccount(); const { load } = useSecureStorage(); @@ -59,9 +56,6 @@ export function UnlockScreen() { const onSubmit = async (data: { [x: string]: string }) => { setLoading(true); if (data.password.length > 3) { - // add password to local state - setPassword(data.password); - // load private in secure storage try { const privkey = await load(account.pubkey, data.password); @@ -99,7 +93,7 @@ export function UnlockScreen() { @@ -104,7 +104,7 @@ export function NewMessageModal() { diff --git a/src/app/chat/components/self.tsx b/src/app/chats/components/self.tsx similarity index 93% rename from src/app/chat/components/self.tsx rename to src/app/chats/components/self.tsx index f1a29ac2..54f9a834 100644 --- a/src/app/chat/components/self.tsx +++ b/src/app/chats/components/self.tsx @@ -8,7 +8,7 @@ import { DEFAULT_AVATAR } from '@stores/constants'; import { useProfile } from '@utils/hooks/useProfile'; import { shortenKey } from '@utils/shortenKey'; -export function ChatsListSelfItem({ data }: { data: any }) { +export function ChatsListSelfItem({ data }: { data: { pubkey: string } }) { const { status, user } = useProfile(data.pubkey); if (status === 'loading') { @@ -24,7 +24,7 @@ export function ChatsListSelfItem({ data }: { data: any }) { return ( twMerge( diff --git a/src/app/chat/components/sidebar.tsx b/src/app/chats/components/sidebar.tsx similarity index 97% rename from src/app/chat/components/sidebar.tsx rename to src/app/chats/components/sidebar.tsx index 56f9cb7a..d417a1f1 100644 --- a/src/app/chat/components/sidebar.tsx +++ b/src/app/chats/components/sidebar.tsx @@ -33,7 +33,7 @@ export function ChatSidebar({ pubkey }: { pubkey: string }) {

{user?.bio || user?.about}

View full profile diff --git a/src/app/chats/components/unknowns.tsx b/src/app/chats/components/unknowns.tsx new file mode 100644 index 00000000..25d9e934 --- /dev/null +++ b/src/app/chats/components/unknowns.tsx @@ -0,0 +1,117 @@ +import { Dialog, Transition } from '@headlessui/react'; +import { Fragment, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { User } from '@app/auth/components/user'; + +import { CancelIcon, StrangersIcon } from '@shared/icons'; + +import { compactNumber } from '@utils/number'; +import { Chats } from '@utils/types'; + +export function UnknownsModal({ data }: { data: Chats[] }) { + const navigate = useNavigate(); + const [isOpen, setIsOpen] = useState(false); + + const closeModal = () => { + setIsOpen(false); + }; + + const openModal = () => { + setIsOpen(true); + }; + + const openChat = (pubkey: string) => { + closeModal(); + navigate(`/app/chats/${pubkey}`); + }; + + return ( + <> + + + + +
+ +
+ + +
+
+
+ + {data.length} unknowns + + +
+ + All messages from people you not follow + +
+
+
+ {data.map((user) => ( +
+ +
+ +
+
+ ))} +
+
+
+
+
+
+ + ); +} diff --git a/src/app/chat/hooks/useDecryptMessage.tsx b/src/app/chats/hooks/useDecryptMessage.tsx similarity index 100% rename from src/app/chat/hooks/useDecryptMessage.tsx rename to src/app/chats/hooks/useDecryptMessage.tsx diff --git a/src/app/chat/index.tsx b/src/app/chats/index.tsx similarity index 95% rename from src/app/chat/index.tsx rename to src/app/chats/index.tsx index 7036bc37..9cfa8436 100644 --- a/src/app/chat/index.tsx +++ b/src/app/chats/index.tsx @@ -4,9 +4,9 @@ import { useCallback, useEffect, useRef } from 'react'; import { useParams } from 'react-router-dom'; import { Virtuoso } from 'react-virtuoso'; -import { ChatMessageForm } from '@app/chat/components/messages/form'; -import { ChatMessageItem } from '@app/chat/components/messages/item'; -import { ChatSidebar } from '@app/chat/components/sidebar'; +import { ChatMessageForm } from '@app/chats/components/messages/form'; +import { ChatMessageItem } from '@app/chats/components/messages/item'; +import { ChatSidebar } from '@app/chats/components/sidebar'; import { useNDK } from '@libs/ndk/provider'; import { createChat, getChatMessages } from '@libs/storage'; diff --git a/src/app/note/index.tsx b/src/app/note/index.tsx index 4e1009d3..bd019934 100644 --- a/src/app/note/index.tsx +++ b/src/app/note/index.tsx @@ -1,12 +1,7 @@ -import { useQuery } from '@tanstack/react-query'; import { useParams } from 'react-router-dom'; import { useLiveThread } from '@app/space/hooks/useLiveThread'; -import { getNoteByID } from '@libs/storage'; - -import { Kind1 } from '@shared/notes/contents/kind1'; -import { Kind1063 } from '@shared/notes/contents/kind1063'; import { NoteMetadata } from '@shared/notes/metadata'; import { NoteReplyForm } from '@shared/notes/replies/form'; import { RepliesList } from '@shared/notes/replies/list'; @@ -14,16 +9,12 @@ import { NoteSkeleton } from '@shared/notes/skeleton'; import { User } from '@shared/user'; import { useAccount } from '@utils/hooks/useAccount'; -import { parser } from '@utils/parser'; +import { useEvent } from '@utils/hooks/useEvent'; export function NoteScreen() { const { id } = useParams(); const { account } = useAccount(); - const { status, data } = useQuery(['thread', id], async () => { - const res = await getNoteByID(id); - res['content'] = parser(res); - return res; - }); + const { status, data } = useEvent(id); useLiveThread(id); @@ -41,9 +32,7 @@ export function NoteScreen() {
- {data.kind === 1 && } - {data.kind === 1063 && } - +
@@ -52,7 +41,7 @@ export function NoteScreen() {
)}
- +
diff --git a/src/app/root.tsx b/src/app/root.tsx index 5d0ba5d2..dc389bf9 100644 --- a/src/app/root.tsx +++ b/src/app/root.tsx @@ -1,53 +1,67 @@ -import { NDKFilter } from '@nostr-dev-kit/ndk'; -import { useEffect, useRef } from 'react'; +import { NDKUser } from '@nostr-dev-kit/ndk'; +import { nip19 } from 'nostr-tools'; +import { useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { useNDK } from '@libs/ndk/provider'; -import { prefetchEvents } from '@libs/ndk/utils'; import { countTotalNotes, createChat, createNote, getLastLogin, + updateAccount, updateLastLogin, } from '@libs/storage'; -import { LoaderIcon, LumeIcon } from '@shared/icons'; +import { LoaderIcon } from '@shared/icons'; -import { dateToUnix, getHourAgo } from '@utils/date'; +import { nHoursAgo } from '@utils/date'; import { useAccount } from '@utils/hooks/useAccount'; const totalNotes = await countTotalNotes(); const lastLogin = await getLastLogin(); export function Root() { - const now = useRef(new Date()); const navigate = useNavigate(); - const { ndk } = useNDK(); + const { ndk, relayUrls, fetcher } = useNDK(); const { status, account } = useAccount(); + async function getFollows() { + const authors: string[] = []; + + const user = ndk.getUser({ hexpubkey: account.pubkey }); + const follows = await user.follows(); + + follows.forEach((follow: NDKUser) => { + authors.push(nip19.decode(follow.npub).data as string); + }); + + // update follows in db + await updateAccount('follows', authors, account.pubkey); + + return authors; + } + async function fetchNotes() { try { - const follows = JSON.parse(account.follows); + const follows = await getFollows(); if (follows.length > 0) { let since: number; - if (totalNotes === 0 || lastLogin === 0) { - since = dateToUnix(getHourAgo(48, now.current)); + since = nHoursAgo(48); } else { since = lastLogin; } - const filter: NDKFilter = { - kinds: [1, 6], - authors: follows, - since: since, - }; - - const events = await prefetchEvents(ndk, filter); - for (const event of events) { + const events = fetcher.allEventsIterator( + relayUrls, + { kinds: [1], authors: follows }, + { since: since }, + { skipVerification: true } + ); + for await (const event of events) { await createNote( event.id, event.pubkey, @@ -67,20 +81,23 @@ export function Root() { async function fetchChats() { try { - const sendFilter: NDKFilter = { - kinds: [4], - authors: [account.pubkey], - since: lastLogin, - }; + const sendMessages = await fetcher.fetchAllEvents( + relayUrls, + { + kinds: [4], + authors: [account.pubkey], + }, + { since: lastLogin } + ); - const receiveFilter: NDKFilter = { - kinds: [4], - '#p': [account.pubkey], - since: lastLogin, - }; - - const sendMessages = await prefetchEvents(ndk, sendFilter); - const receiveMessages = await prefetchEvents(ndk, receiveFilter); + const receiveMessages = await fetcher.fetchAllEvents( + relayUrls, + { + kinds: [4], + '#p': [account.pubkey], + }, + { since: lastLogin } + ); const events = [...sendMessages, ...receiveMessages]; for (const event of events) { @@ -158,27 +175,24 @@ export function Root() { }, [status]); return ( -
-
+
+
-
-
- +
+
+
-

- Here's an interesting fact: +

+ Prefetching data...

-

- Bitcoin and Nostr can be used by anyone, and no one can stop you! +

+ This may take a few seconds, please don't close app.

-
- -
diff --git a/src/app/space/components/add.tsx b/src/app/space/components/add.tsx index 861bbc78..557e3628 100644 --- a/src/app/space/components/add.tsx +++ b/src/app/space/components/add.tsx @@ -1,4 +1,5 @@ import { AddFeedBlock } from '@app/space/components/addFeed'; +import { AddHashTagBlock } from '@app/space/components/addHashtag'; import { AddImageBlock } from '@app/space/components/addImage'; export function AddBlock() { @@ -6,6 +7,7 @@ export function AddBlock() {
+
); } diff --git a/src/app/space/components/addFeed.tsx b/src/app/space/components/addFeed.tsx index 33ced7ad..62073538 100644 --- a/src/app/space/components/addFeed.tsx +++ b/src/app/space/components/addFeed.tsx @@ -12,7 +12,7 @@ import { createBlock } from '@libs/storage'; import { CancelIcon, CheckCircleIcon, CommandIcon, LoaderIcon } from '@shared/icons'; -import { DEFAULT_AVATAR } from '@stores/constants'; +import { BLOCK_KINDS, DEFAULT_AVATAR } from '@stores/constants'; import { ADD_FEEDBLOCK_SHORTCUT } from '@stores/shortcuts'; import { useAccount } from '@utils/hooks/useAccount'; @@ -38,7 +38,7 @@ export function AddFeedBlock() { useHotkeys(ADD_FEEDBLOCK_SHORTCUT, () => openModal()); const block = useMutation({ - mutationFn: (data: any) => { + mutationFn: (data: { kind: number; title: string; content: string }) => { return createBlock(data.kind, data.title, data.content); }, onSuccess: () => { @@ -53,7 +53,7 @@ export function AddFeedBlock() { formState: { isDirty, isValid }, } = useForm(); - const onSubmit = (data: any) => { + const onSubmit = (data: { kind: number; title: string; content: string }) => { setLoading(true); selected.forEach((item, index) => { @@ -64,7 +64,7 @@ export function AddFeedBlock() { // insert to database block.mutate({ - kind: 1, + kind: BLOCK_KINDS.feed, title: data.title, content: JSON.stringify(selected), }); @@ -81,7 +81,7 @@ export function AddFeedBlock() { + + + +
+ +
+ + +
+
+
+ + Create hashtag block + + +
+ + Pin the hashtag you want to keep follow up + +
+
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+
+
+ + ); +} diff --git a/src/app/space/components/addImage.tsx b/src/app/space/components/addImage.tsx index 476b7b08..06967381 100644 --- a/src/app/space/components/addImage.tsx +++ b/src/app/space/components/addImage.tsx @@ -1,37 +1,30 @@ import { Dialog, Transition } from '@headlessui/react'; -import { NDKEvent, NDKPrivateKeySigner } from '@nostr-dev-kit/ndk'; import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { open } from '@tauri-apps/api/dialog'; -import { Body, fetch } from '@tauri-apps/api/http'; import { Fragment, useEffect, useRef, useState } from 'react'; import { useForm } from 'react-hook-form'; import { useHotkeys } from 'react-hotkeys-hook'; -import { useNDK } from '@libs/ndk/provider'; import { createBlock } from '@libs/storage'; -import { CancelIcon, CommandIcon } from '@shared/icons'; +import { CancelIcon, CommandIcon, LoaderIcon } from '@shared/icons'; import { Image } from '@shared/image'; -import { DEFAULT_AVATAR } from '@stores/constants'; +import { BLOCK_KINDS, DEFAULT_AVATAR } from '@stores/constants'; import { ADD_IMAGEBLOCK_SHORTCUT } from '@stores/shortcuts'; -import { createBlobFromFile } from '@utils/createBlobFromFile'; -import { dateToUnix } from '@utils/date'; -import { useAccount } from '@utils/hooks/useAccount'; import { usePublish } from '@utils/hooks/usePublish'; +import { useImageUploader } from '@utils/hooks/useUploader'; export function AddImageBlock() { const queryClient = useQueryClient(); - const publish = usePublish(); + const upload = useImageUploader(); + + const { publish } = usePublish(); const [loading, setLoading] = useState(false); const [isOpen, setIsOpen] = useState(false); const [image, setImage] = useState(''); - const { ndk } = useNDK(); - const { account } = useAccount(); - const tags = useRef(null); const openModal = () => { @@ -52,56 +45,8 @@ export function AddImageBlock() { formState: { isDirty, isValid }, } = useForm(); - const openFileDialog = async () => { - const selected: any = await open({ - multiple: false, - filters: [ - { - name: 'Image', - extensions: ['png', 'jpeg', 'jpg'], - }, - ], - }); - - if (Array.isArray(selected)) { - // user selected multiple files - } else if (selected === null) { - // user cancelled the selection - } else { - const filename = selected.split('/').pop(); - const file = await createBlobFromFile(selected); - const buf = await file.arrayBuffer(); - - const res: any = await fetch('https://void.cat/upload?cli=false', { - method: 'POST', - timeout: 5, - headers: { - accept: '*/*', - 'Content-Type': 'application/octet-stream', - 'V-Filename': filename, - 'V-Description': 'Upload from https://lume.nu', - 'V-Strip-Metadata': 'true', - }, - body: Body.bytes(buf), - }); - - if (res.ok) { - const imageURL = `https://void.cat/d/${res.data.file.id}.webp`; - tags.current = [ - ['url', imageURL], - ['m', res.data.file.metadata.mimeType], - ['x', res.data.file.metadata.digest], - ['size', res.data.file.metadata.size], - ['magnet', res.data.file.metadata.magnetLink], - ]; - - setImage(imageURL); - } - } - }; - const block = useMutation({ - mutationFn: (data: any) => { + mutationFn: (data: { kind: number; title: string; content: string }) => { return createBlock(data.kind, data.title, data.content); }, onSuccess: () => { @@ -109,14 +54,21 @@ export function AddImageBlock() { }, }); - const onSubmit = async (data: any) => { + const uploadImage = async () => { + const image = await upload(null); + if (image.url) { + setImage(image.url); + } + }; + + const onSubmit = async (data: { kind: number; title: string; content: string }) => { setLoading(true); // publish file metedata await publish({ content: data.title, kind: 1063, tags: tags.current }); // mutate - block.mutate({ kind: 0, title: data.title, content: data.content }); + block.mutate({ kind: BLOCK_KINDS.image, title: data.title, content: data.content }); setLoading(false); // reset form @@ -134,7 +86,7 @@ export function AddImageBlock() { -
- )}
- {rowVirtualizer - .getVirtualItems() - .map((virtualRow) => renderItem(virtualRow.index))} + {itemsVirtualizer.map((virtualRow) => renderItem(virtualRow.index))}
)} diff --git a/src/app/space/components/blocks/hashtag.tsx b/src/app/space/components/blocks/hashtag.tsx new file mode 100644 index 00000000..33e14fa7 --- /dev/null +++ b/src/app/space/components/blocks/hashtag.tsx @@ -0,0 +1,87 @@ +import { useQuery } from '@tanstack/react-query'; +import { useVirtualizer } from '@tanstack/react-virtual'; +import { useRef } from 'react'; + +import { useNDK } from '@libs/ndk/provider'; + +import { NoteKind_1, NoteSkeleton } from '@shared/notes'; +import { TitleBar } from '@shared/titleBar'; + +import { nHoursAgo } from '@utils/date'; +import { Block, LumeEvent } from '@utils/types'; + +export function HashtagBlock({ params }: { params: Block }) { + const { relayUrls, fetcher } = useNDK(); + const { status, data } = useQuery(['hashtag', params.content], async () => { + const events = (await fetcher.fetchAllEvents( + relayUrls, + { kinds: [1], '#t': [params.content] }, + { since: nHoursAgo(48) } + )) as unknown as LumeEvent[]; + return events; + }); + + const parentRef = useRef(); + const rowVirtualizer = useVirtualizer({ + count: data ? data.length : 0, + getScrollElement: () => parentRef.current, + estimateSize: () => 400, + }); + + const itemsVirtualizer = rowVirtualizer.getVirtualItems(); + + return ( +
+ +
+ {status === 'loading' ? ( +
+
+ +
+
+ ) : itemsVirtualizer.length === 0 ? ( +
+
+
+

+ No new posts about this hashtag in 48 hours ago +

+
+
+
+ ) : ( +
+
+ {itemsVirtualizer.map((virtualRow) => ( +
+ +
+ ))} +
+
+ )} +
+
+ ); +} diff --git a/src/app/space/components/blocks/image.tsx b/src/app/space/components/blocks/image.tsx index 05202221..890961cc 100644 --- a/src/app/space/components/blocks/image.tsx +++ b/src/app/space/components/blocks/image.tsx @@ -1,23 +1,13 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; - -import { removeBlock } from '@libs/storage'; - import { CancelIcon } from '@shared/icons'; import { Image } from '@shared/image'; import { DEFAULT_AVATAR } from '@stores/constants'; -export function ImageBlock({ params }: { params: any }) { - const queryClient = useQueryClient(); +import { useBlock } from '@utils/hooks/useBlock'; +import { Block } from '@utils/types'; - const block = useMutation({ - mutationFn: (id: string) => { - return removeBlock(id); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['blocks'] }); - }, - }); +export function ImageBlock({ params }: { params: Block }) { + const { remove } = useBlock(); return (
@@ -27,7 +17,7 @@ export function ImageBlock({ params }: { params: any }) {

{params.title}

- ) : followed ? ( - - ) : ( - - )} - - Message - - - - {account && account.pubkey === pubkey && } -
-
-
-

- {user?.about} -

- -
-
-
-
- - - - {({ selected }) => ( - - )} - - - - - - - - -
- - - ); -} diff --git a/src/app/users/components/feed.tsx b/src/app/users/components/feed.tsx new file mode 100644 index 00000000..49e47b4f --- /dev/null +++ b/src/app/users/components/feed.tsx @@ -0,0 +1,85 @@ +import { useQuery } from '@tanstack/react-query'; +import { useVirtualizer } from '@tanstack/react-virtual'; +import { useRef } from 'react'; + +import { useNDK } from '@libs/ndk/provider'; + +import { NoteKind_1, NoteSkeleton } from '@shared/notes'; + +import { nHoursAgo } from '@utils/date'; +import { LumeEvent } from '@utils/types'; + +export function UserFeed({ pubkey }: { pubkey: string }) { + const parentRef = useRef(); + + const { fetcher, relayUrls } = useNDK(); + const { status, data } = useQuery(['user-feed', pubkey], async () => { + const events = await fetcher.fetchAllEvents( + relayUrls, + { kinds: [1], authors: [pubkey] }, + { since: nHoursAgo(48) }, + { sort: true } + ); + return events as unknown as LumeEvent[]; + }); + + const rowVirtualizer = useVirtualizer({ + count: data ? data.length : 0, + getScrollElement: () => parentRef.current, + estimateSize: () => 400, + }); + + const itemsVirtualizer = rowVirtualizer.getVirtualItems(); + + return ( +
+ {status === 'loading' ? ( +
+
+ +
+
+ ) : itemsVirtualizer.length === 0 ? ( +
+
+
+

+ No new posts about this hashtag in 48 hours ago +

+
+
+
+ ) : ( +
+
+ {itemsVirtualizer.map((virtualRow) => ( +
+ +
+ ))} +
+
+ )} +
+ ); +} diff --git a/src/app/user/components/metadata.tsx b/src/app/users/components/metadata.tsx similarity index 91% rename from src/app/user/components/metadata.tsx rename to src/app/users/components/metadata.tsx index 25e0a435..a471e7e9 100644 --- a/src/app/user/components/metadata.tsx +++ b/src/app/users/components/metadata.tsx @@ -19,13 +19,13 @@ export function UserMetadata({ pubkey }: { pubkey: string }) {
- {data.stats[pubkey].followers_pubkey_count ?? 0} + {compactNumber.format(data.stats[pubkey].followers_pubkey_count) ?? 0} Followers
- {data.stats[pubkey].pub_following_pubkey_count ?? 0} + {compactNumber.format(data.stats[pubkey].pub_following_pubkey_count) ?? 0} Following
diff --git a/src/app/users/components/profile.tsx b/src/app/users/components/profile.tsx new file mode 100644 index 00000000..916ce9b2 --- /dev/null +++ b/src/app/users/components/profile.tsx @@ -0,0 +1,125 @@ +import { useEffect, useState } from 'react'; +import { Link } from 'react-router-dom'; + +import { UserMetadata } from '@app/users/components/metadata'; + +import { EditProfileModal } from '@shared/editProfileModal'; +import { Image } from '@shared/image'; + +import { DEFAULT_AVATAR } from '@stores/constants'; + +import { useAccount } from '@utils/hooks/useAccount'; +import { useProfile } from '@utils/hooks/useProfile'; +import { useSocial } from '@utils/hooks/useSocial'; +import { shortenKey } from '@utils/shortenKey'; + +export function UserProfile({ pubkey }: { pubkey: string }) { + const { user } = useProfile(pubkey); + const { account } = useAccount(); + const { status, userFollows, follow, unfollow } = useSocial(); + + const [followed, setFollowed] = useState(false); + + const followUser = (pubkey: string) => { + try { + follow(pubkey); + + // update state + setFollowed(true); + } catch (error) { + console.log(error); + } + }; + + const unfollowUser = (pubkey: string) => { + try { + unfollow(pubkey); + + // update state + setFollowed(false); + } catch (error) { + console.log(error); + } + }; + + useEffect(() => { + if (status === 'success' && userFollows) { + if (userFollows.includes(pubkey)) { + setFollowed(true); + } + } + }, [status]); + + return ( + <> +
+ {'banner'} +
+
+ {pubkey} +
+
+
+
+ {user?.displayName || user?.name || 'No name'} +
+ + {user?.nip05 || shortenKey(pubkey)} + +
+
+ {status === 'loading' ? ( + + ) : followed ? ( + + ) : ( + + )} + + Message + + + {account && account.pubkey === pubkey && } +
+
+
+

+ {user?.about || user?.bio} +

+ +
+
+
+ + ); +} diff --git a/src/app/users/index.tsx b/src/app/users/index.tsx new file mode 100644 index 00000000..ba38f446 --- /dev/null +++ b/src/app/users/index.tsx @@ -0,0 +1,99 @@ +import { useQuery } from '@tanstack/react-query'; +import { useVirtualizer } from '@tanstack/react-virtual'; +import { useRef } from 'react'; +import { useParams } from 'react-router-dom'; + +import { useNDK } from '@libs/ndk/provider'; + +import { NoteKind_1, NoteSkeleton } from '@shared/notes'; + +import { nHoursAgo } from '@utils/date'; +import { LumeEvent } from '@utils/types'; + +import { UserProfile } from './components/profile'; + +export function UserScreen() { + const parentRef = useRef(); + + const { pubkey } = useParams(); + const { fetcher, relayUrls } = useNDK(); + const { status, data } = useQuery(['user-feed', pubkey], async () => { + const events = await fetcher.fetchAllEvents( + relayUrls, + { kinds: [1], authors: [pubkey] }, + { since: nHoursAgo(48) }, + { sort: true } + ); + return events as unknown as LumeEvent[]; + }); + + const rowVirtualizer = useVirtualizer({ + count: data ? data.length : 0, + getScrollElement: () => parentRef.current, + estimateSize: () => 400, + }); + + const itemsVirtualizer = rowVirtualizer.getVirtualItems(); + + return ( +
+
+ +
+
+

Latest posts

+ 48 hours ago +
+
+ {status === 'loading' ? ( +
+
+ +
+
+ ) : itemsVirtualizer.length === 0 ? ( +
+
+
+

+ No new posts about this hashtag in 48 hours ago +

+
+
+
+ ) : ( +
+
+ {itemsVirtualizer.map((virtualRow) => ( +
+ +
+ ))} +
+
+
+ )} +
+
+
+ ); +} diff --git a/src/index.css b/src/index.css index 72148ca3..dfcc6b3b 100644 --- a/src/index.css +++ b/src/index.css @@ -15,7 +15,23 @@ button { } .markdown { - @apply prose prose-zinc max-w-none select-text break-words dark:prose-invert prose-p:mb-2 prose-p:mt-0 prose-p:leading-tight prose-p:last:mb-0 prose-a:font-normal prose-a:leading-tight prose-a:text-fuchsia-500 hover:prose-a:text-fuchsia-600 prose-blockquote:m-0 prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-li:leading-tight prose-hr:mx-0 prose-hr:my-2; + @apply prose prose-zinc max-w-none select-text hyphens-auto dark:prose-invert prose-p:mb-2 prose-p:mt-0 prose-p:break-words prose-p:[word-break:break-word] prose-p:last:mb-0 prose-a:break-words prose-a:break-all prose-a:font-normal prose-a:leading-tight prose-a:text-fuchsia-400 prose-a:after:content-['_↗'] hover:prose-a:text-fuchsia-500 prose-blockquote:m-0 prose-pre:whitespace-pre-wrap prose-pre:break-words prose-pre:break-all prose-ol:m-0 prose-ol:mb-1 prose-ul:mb-1 prose-li:leading-tight prose-img:mb-2 prose-img:mt-3 prose-hr:mx-0 prose-hr:my-2; +} + +.ProseMirror p.is-empty::before { + @apply text-zinc-500; + content: attr(data-placeholder); + float: left; + height: 0; + pointer-events: none; +} + +.ProseMirror img.ProseMirror-selectednode { + @apply outline-fuchsia-500; +} + +iframe { + height: auto !important; } /* For Webkit-based browsers (Chrome, Safari and Opera) */ diff --git a/src/libs/ndk/instance.ts b/src/libs/ndk/instance.ts index cbd3ecb5..d73572ad 100644 --- a/src/libs/ndk/instance.ts +++ b/src/libs/ndk/instance.ts @@ -1,15 +1,18 @@ // source: https://github.com/nostr-dev-kit/ndk-react/ import NDK from '@nostr-dev-kit/ndk'; +import { ndkAdapter } from '@nostr-fetch/adapter-ndk'; +import { NostrFetcher, normalizeRelayUrlSet } from 'nostr-fetch'; import { useEffect, useState } from 'react'; import { getSetting } from '@libs/storage'; const setting = await getSetting('relays'); -const relays = JSON.parse(setting); +const relays = normalizeRelayUrlSet(JSON.parse(setting)); export const NDKInstance = () => { const [ndk, setNDK] = useState(undefined); const [relayUrls, setRelayUrls] = useState(relays); + const [fetcher, setFetcher] = useState(undefined); useEffect(() => { loadNdk(relays); @@ -26,11 +29,13 @@ export const NDKInstance = () => { setNDK(ndkInstance); setRelayUrls(explicitRelayUrls); + setFetcher(NostrFetcher.withCustomPool(ndkAdapter(ndkInstance))); } return { ndk, relayUrls, + fetcher, loadNdk, }; }; diff --git a/src/libs/ndk/provider.tsx b/src/libs/ndk/provider.tsx index bb74bd49..6ebef78f 100644 --- a/src/libs/ndk/provider.tsx +++ b/src/libs/ndk/provider.tsx @@ -1,5 +1,6 @@ // source: https://github.com/nostr-dev-kit/ndk-react/ import NDK from '@nostr-dev-kit/ndk'; +import { NostrFetcher } from 'nostr-fetch'; import { PropsWithChildren, createContext, useContext } from 'react'; import { NDKInstance } from '@libs/ndk/instance'; @@ -7,17 +8,19 @@ import { NDKInstance } from '@libs/ndk/instance'; interface NDKContext { ndk: NDK; relayUrls: string[]; + fetcher: NostrFetcher; loadNdk: (_: string[]) => void; } const NDKContext = createContext({ ndk: new NDK({}), relayUrls: [], + fetcher: undefined, loadNdk: undefined, }); const NDKProvider = ({ children }: PropsWithChildren) => { - const { ndk, relayUrls, loadNdk } = NDKInstance(); + const { ndk, relayUrls, fetcher, loadNdk } = NDKInstance(); if (ndk) return ( @@ -25,6 +28,7 @@ const NDKProvider = ({ children }: PropsWithChildren) => { value={{ ndk, relayUrls, + fetcher, loadNdk, }} > diff --git a/src/libs/ndk/utils.tsx b/src/libs/ndk/utils.tsx deleted file mode 100644 index 78beb34f..00000000 --- a/src/libs/ndk/utils.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import NDK, { NDKEvent, NDKFilter } from '@nostr-dev-kit/ndk'; - -export async function prefetchEvents( - ndk: NDK, - filter: NDKFilter -): Promise> { - return new Promise((resolve) => { - const events: Map = new Map(); - - const relaySetSubscription = ndk.subscribe(filter, { - closeOnEose: true, - }); - - relaySetSubscription.on('event', (event: NDKEvent) => { - event.ndk = ndk; - events.set(event.tagId(), event); - }); - - relaySetSubscription.on('eose', () => { - setTimeout(() => resolve(new Set(events.values())), 3000); - }); - }); -} diff --git a/src/libs/storage.tsx b/src/libs/storage.tsx index 00e69c1c..69dd8dab 100644 --- a/src/libs/storage.tsx +++ b/src/libs/storage.tsx @@ -1,7 +1,9 @@ -import { NDKUserProfile } from '@nostr-dev-kit/ndk'; +import destr from 'destr'; import Database from 'tauri-plugin-sql-api'; +import { parser } from '@utils/parser'; import { getParentID } from '@utils/transform'; +import { Account, Block, Chats, LumeEvent, Profile, Settings } from '@utils/types'; let db: null | Database = null; @@ -18,7 +20,9 @@ export async function connect(): Promise { // get active account export async function getActiveAccount() { const db = await connect(); - const result: any = await db.select('SELECT * FROM accounts WHERE is_active = 1;'); + const result: Array = await db.select( + 'SELECT * FROM accounts WHERE is_active = 1;' + ); if (result.length > 0) { return result[0]; } else { @@ -29,9 +33,10 @@ export async function getActiveAccount() { // get all accounts export async function getAccounts() { const db = await connect(); - return await db.select( + const result: Array = await db.select( 'SELECT * FROM accounts WHERE is_active = 0 ORDER BY created_at DESC;' ); + return result; } // create account @@ -49,8 +54,8 @@ export async function createAccount( if (res) { await createBlock( 0, - 'Preserve your freedom', - 'https://void.cat/d/949GNg7ZjSLHm2eTR3jZqv' + 'Have fun together!', + 'https://void.cat/d/N5KUHEQCVg7SywXUPiJ7yq.jpg' ); } const getAccount = await getActiveAccount(); @@ -80,7 +85,7 @@ export async function countTotalChannels() { // count total notes export async function countTotalNotes() { const db = await connect(); - const result = await db.select( + const result: Array<{ total: string }> = await db.select( 'SELECT COUNT(*) AS "total" FROM notes WHERE kind IN (1, 6);' ); return parseInt(result[0].total); @@ -92,11 +97,19 @@ export async function getNotes(limit: number, offset: number) { const totalNotes = await countTotalNotes(); const nextCursor = offset + limit; - const notes: any = { data: null, nextCursor: 0 }; - const query: any = await db.select( + const notes: { data: LumeEvent[] | null; nextCursor: number } = { + data: null, + nextCursor: 0, + }; + + const query: LumeEvent[] = await db.select( `SELECT * FROM notes WHERE kind IN (1, 6, 1063) GROUP BY parent_id ORDER BY created_at DESC LIMIT "${limit}" OFFSET "${offset}";` ); + query.forEach( + (el) => (el.tags = typeof el.tags === 'string' ? destr(el.tags) : el.tags) + ); + notes['data'] = query; notes['nextCursor'] = Math.round(totalNotes / nextCursor) > 1 ? nextCursor : undefined; @@ -106,11 +119,16 @@ export async function getNotes(limit: number, offset: number) { // get all notes by pubkey export async function getNotesByPubkey(pubkey: string) { const db = await connect(); - const res: any = await db.select( + + const query: LumeEvent[] = await db.select( `SELECT * FROM notes WHERE pubkey == "${pubkey}" AND kind IN (1, 6, 1063) GROUP BY parent_id ORDER BY created_at DESC;` ); - return res; + query.forEach( + (el) => (el.tags = typeof el.tags === 'string' ? destr(el.tags) : el.tags) + ); + + return query; } // get all notes by authors @@ -121,11 +139,19 @@ export async function getNotesByAuthors(authors: string, limit: number, offset: const array = JSON.parse(authors); const finalArray = `'${array.join("','")}'`; - const notes: any = { data: null, nextCursor: 0 }; - const query: any = await db.select( + const notes: { data: LumeEvent[] | null; nextCursor: number } = { + data: null, + nextCursor: 0, + }; + + const query: LumeEvent[] = await db.select( `SELECT * FROM notes WHERE pubkey IN (${finalArray}) AND kind IN (1, 6, 1063) GROUP BY parent_id ORDER BY created_at DESC LIMIT "${limit}" OFFSET "${offset}";` ); + query.forEach( + (el) => (el.tags = typeof el.tags === 'string' ? destr(el.tags) : el.tags) + ); + notes['data'] = query; notes['nextCursor'] = Math.round(totalNotes / nextCursor) > 1 ? nextCursor : undefined; @@ -135,8 +161,15 @@ export async function getNotesByAuthors(authors: string, limit: number, offset: // get note by id export async function getNoteByID(event_id: string) { const db = await connect(); - const result = await db.select(`SELECT * FROM notes WHERE event_id = "${event_id}";`); - return result[0]; + const result: LumeEvent[] = await db.select( + `SELECT * FROM notes WHERE event_id = "${event_id}";` + ); + if (result[0]) { + if (result[0].kind === 1) result[0]['content'] = parser(result[0]); + return result[0]; + } else { + return null; + } } // create note @@ -144,7 +177,7 @@ export async function createNote( event_id: string, pubkey: string, kind: number, - tags: any, + tags: string[][], content: string, created_at: number ) { @@ -161,7 +194,7 @@ export async function createNote( // get note replies export async function getReplies(parent_id: string) { const db = await connect(); - const result: any = await db.select( + const result: Array = await db.select( `SELECT * FROM replies WHERE parent_id = "${parent_id}" ORDER BY created_at DESC;` ); return result; @@ -173,7 +206,7 @@ export async function createReplyNote( event_id: string, pubkey: string, kind: number, - tags: any, + tags: string[][], content: string, created_at: number ) { @@ -272,11 +305,32 @@ export async function getChannelUsers(channel_id: string) { export async function getChats() { const db = await connect(); const account = await getActiveAccount(); - const result: any = await db.select( + const follows = + typeof account.follows === 'string' ? JSON.parse(account.follows) : account.follows; + + const chats: { follows: Array | null; unknowns: Array | null } = { + follows: [], + unknowns: [], + }; + + let result: Array = await db.select( `SELECT DISTINCT sender_pubkey FROM chats WHERE receiver_pubkey = "${account.pubkey}" ORDER BY created_at DESC;` ); - const newArr: any = result.map((v) => ({ ...v, new_messages: 0 })); - return newArr; + + result = result.map((v) => ({ ...v, new_messages: 0 })); + result = result.sort((a, b) => a.new_messages - b.new_messages); + + chats.follows = result.filter((el) => { + return follows.some((i) => { + return i === el.sender_pubkey; + }); + }); + + chats.unknowns = result.filter( + (el) => !chats.follows.includes(el) && el.sender_pubkey !== account.pubkey + ); + + return chats; } // get chat messages @@ -284,7 +338,7 @@ export async function getChatMessages(receiver_pubkey: string, sender_pubkey: st const db = await connect(); let receiver = []; - const sender: any = await db.select( + const sender: Array = await db.select( `SELECT * FROM chats WHERE sender_pubkey = "${sender_pubkey}" AND receiver_pubkey = "${receiver_pubkey}";` ); @@ -321,7 +375,9 @@ export async function createChat( // get setting export async function getSetting(key: string) { const db = await connect(); - const result = await db.select(`SELECT value FROM settings WHERE key = "${key}";`); + const result: Array = await db.select( + `SELECT value FROM settings WHERE key = "${key}";` + ); return result[0]?.value; } @@ -334,7 +390,9 @@ export async function updateSetting(key: string, value: string | number) { // get last login export async function getLastLogin() { const db = await connect(); - const result = await db.select(`SELECT value FROM settings WHERE key = "last_login";`); + const result: Array = await db.select( + `SELECT value FROM settings WHERE key = "last_login";` + ); if (result[0]) { return parseInt(result[0].value); } else { @@ -350,56 +408,22 @@ export async function updateLastLogin(value: number) { ); } -// get blacklist by kind and account id -export async function getBlacklist(account_id: number, kind: number) { - const db = await connect(); - return await db.select( - `SELECT * FROM blacklist WHERE account_id = "${account_id}" AND kind = "${kind}";` - ); -} - -// get active blacklist by kind and account id -export async function getActiveBlacklist(account_id: number, kind: number) { - const db = await connect(); - return await db.select( - `SELECT content FROM blacklist WHERE account_id = "${account_id}" AND kind = "${kind}" AND status = 1;` - ); -} - -// add to blacklist -export async function addToBlacklist( - account_id: number, - content: string, - kind: number, - status?: number -) { - const db = await connect(); - return await db.execute( - 'INSERT OR IGNORE INTO blacklist (account_id, content, kind, status) VALUES (?, ?, ?, ?);', - [account_id, content, kind, status || 1] - ); -} - -// update item in blacklist -export async function updateItemInBlacklist(content: string, status: number) { - const db = await connect(); - return await db.execute( - `UPDATE blacklist SET status = "${status}" WHERE content = "${content}";` - ); -} - // get all blocks export async function getBlocks() { const db = await connect(); - const activeAccount = await getActiveAccount(); - const result: any = await db.select( - `SELECT * FROM blocks WHERE account_id = "${activeAccount.id}" ORDER BY created_at DESC;` + const account = await getActiveAccount(); + const result: Array = await db.select( + `SELECT * FROM blocks WHERE account_id = "${account.id}" ORDER BY created_at DESC;` ); return result; } // create block -export async function createBlock(kind: number, title: string, content: any) { +export async function createBlock( + kind: number, + title: string, + content: string | string[] +) { const db = await connect(); const activeAccount = await getActiveAccount(); return await db.execute( @@ -437,12 +461,29 @@ export async function createMetadata(id: string, pubkey: string, content: string ); } -// get metadata +export async function getAllMetadata() { + const db = await connect(); + const result: LumeEvent[] = await db.select(`SELECT * FROM metadata;`); + const users: Profile[] = result.map((el) => { + const profile: Profile = destr(el.content); + return { + pubkey: el.pubkey, + ident: profile.name || profile.display_name || profile.username || 'anon', + picture: + profile.picture || + profile.image || + 'https://void.cat/d/5VKmKyuHyxrNMf9bWSVPih.jpg', + }; + }); + return users; +} + +// get user metadata export async function getUserMetadata(pubkey: string) { const db = await connect(); - const result = await db.select(`SELECT content FROM metadata WHERE id = "${pubkey}";`); + const result = await db.select(`SELECT * FROM metadata WHERE pubkey = "${pubkey}";`); if (result[0]) { - return JSON.parse(result[0].content); + return { ...result[0], ...JSON.parse(result[0].content) } as Profile; } else { return null; } diff --git a/src/main.tsx b/src/main.tsx index 2af63494..6c5beca5 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,4 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; -import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; import { createRoot } from 'react-dom/client'; import { NDKProvider } from '@libs/ndk/provider'; @@ -25,6 +24,5 @@ root.render( - ); diff --git a/src/shared/accounts/active.tsx b/src/shared/accounts/active.tsx index ec83e404..60eb1d7f 100644 --- a/src/shared/accounts/active.tsx +++ b/src/shared/accounts/active.tsx @@ -92,9 +92,9 @@ export function ActiveAccount({ data }: { data: any }) { } return ( - + {data.npub} { - const selected: any = await open({ - multiple: false, - filters: [ - { - name: 'Image', - extensions: ['png', 'jpeg', 'jpg', 'gif'], - }, - ], - }); - if (Array.isArray(selected)) { - // user selected multiple files - } else if (selected === null) { - // user cancelled the selection - } else { - setLoading(true); - - const filename = selected.split('/').pop(); - const file = await createBlobFromFile(selected); - const buf = await file.arrayBuffer(); - - const res: { data: { file: { id: string } } } = await fetch( - 'https://void.cat/upload?cli=false', - { - method: 'POST', - timeout: 5, - headers: { - accept: '*/*', - 'Content-Type': 'application/octet-stream', - 'V-Filename': filename, - 'V-Description': 'Upload from https://lume.nu', - 'V-Strip-Metadata': 'true', - }, - body: Body.bytes(buf), - } - ); - const image = `https://void.cat/d/${res.data.file.id}.jpg`; - + const uploadAvatar = async () => { + const image = await upload(null); + if (image.url) { // update parent state - setPicture(image); + setPicture(image.url); // disable loader setLoading(false); @@ -58,7 +22,7 @@ export function AvatarUploader({ setPicture }: { setPicture: any }) { return ( + + )} + + +
+ + +
+ + ); +} diff --git a/src/shared/composer/imageUploader.tsx b/src/shared/composer/imageUploader.tsx deleted file mode 100644 index ca966546..00000000 --- a/src/shared/composer/imageUploader.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import { open } from '@tauri-apps/api/dialog'; -import { listen } from '@tauri-apps/api/event'; -import { Body, fetch } from '@tauri-apps/api/http'; -import { useCallback, useEffect, useState } from 'react'; -import { Transforms } from 'slate'; -import { useSlateStatic } from 'slate-react'; - -import { PlusCircleIcon } from '@shared/icons'; - -import { createBlobFromFile } from '@utils/createBlobFromFile'; - -export function ImageUploader() { - const editor = useSlateStatic(); - const [loading, setLoading] = useState(false); - - const insertImage = (editor, url) => { - const image = { type: 'image', url, children: [{ text: url }] }; - Transforms.insertNodes(editor, image); - }; - - const uploadToVoidCat = useCallback( - async (filepath) => { - const filename = filepath.split('/').pop(); - const file = await createBlobFromFile(filepath); - const buf = await file.arrayBuffer(); - - try { - const res: { data: { file: { id: string } } } = await fetch( - 'https://void.cat/upload?cli=false', - { - method: 'POST', - timeout: 5, - headers: { - accept: '*/*', - 'Content-Type': 'application/octet-stream', - 'V-Filename': filename, - 'V-Description': 'Uploaded from https://lume.nu', - 'V-Strip-Metadata': 'true', - }, - body: Body.bytes(buf), - } - ); - const image = `https://void.cat/d/${res.data.file.id}.webp`; - // update parent state - insertImage(editor, image); - // reset loading state - setLoading(false); - } catch (error) { - // reset loading state - setLoading(false); - // handle error - if (error instanceof SyntaxError) { - // Unexpected token < in JSON - console.log('There was a SyntaxError', error); - } else { - console.log('There was an error', error); - } - } - }, - [editor] - ); - - const openFileDialog = async () => { - const selected: any = await open({ - multiple: false, - filters: [ - { - name: 'Image', - extensions: ['png', 'jpeg', 'jpg', 'gif'], - }, - ], - }); - if (Array.isArray(selected)) { - // user selected multiple files - } else if (selected === null) { - // user cancelled the selection - } else { - setLoading(true); - // upload file - uploadToVoidCat(selected); - } - }; - - useEffect(() => { - async function initFileDrop() { - const unlisten = await listen('tauri://file-drop', (event) => { - // set loading state - setLoading(true); - // upload file - uploadToVoidCat(event.payload[0]); - }); - - return () => { - unlisten(); - }; - } - - initFileDrop(); - }, [uploadToVoidCat]); - - return ( - - ); -} diff --git a/src/shared/composer/index.tsx b/src/shared/composer/index.tsx new file mode 100644 index 00000000..6fea9ecb --- /dev/null +++ b/src/shared/composer/index.tsx @@ -0,0 +1,6 @@ +export * from './user'; +export * from './modal'; +export * from './composer'; +export * from './mention/list'; +export * from './mention/item'; +export * from './mention/suggestion'; diff --git a/src/shared/composer/mention/item.tsx b/src/shared/composer/mention/item.tsx new file mode 100644 index 00000000..adea39fc --- /dev/null +++ b/src/shared/composer/mention/item.tsx @@ -0,0 +1,31 @@ +import { Image } from '@shared/image'; + +import { DEFAULT_AVATAR } from '@stores/constants'; + +import { displayNpub } from '@utils/shortenKey'; +import { Profile } from '@utils/types'; + +export function MentionItem({ profile }: { profile: Profile }) { + return ( +
+
+ {profile.pubkey} +
+
+
+ {profile.ident || ( +
+ )} +
+ + {displayNpub(profile.pubkey, 16)} + +
+
+ ); +} diff --git a/src/shared/composer/mention/list.tsx b/src/shared/composer/mention/list.tsx new file mode 100644 index 00000000..97b2c7bb --- /dev/null +++ b/src/shared/composer/mention/list.tsx @@ -0,0 +1,75 @@ +import { NDKUserProfile } from '@nostr-dev-kit/ndk'; +import { forwardRef, useEffect, useImperativeHandle, useState } from 'react'; +import { twMerge } from 'tailwind-merge'; + +import { MentionItem } from '@shared/composer'; + +export const MentionList = forwardRef((props: any, ref: any) => { + const [selectedIndex, setSelectedIndex] = useState(0); + + const selectItem = (index) => { + const item = props.items[index]; + + if (item) { + props.command({ id: item }); + } + }; + + const upHandler = () => { + setSelectedIndex((selectedIndex + props.items.length - 1) % props.items.length); + }; + + const downHandler = () => { + setSelectedIndex((selectedIndex + 1) % props.items.length); + }; + + const enterHandler = () => { + selectItem(selectedIndex); + }; + + useEffect(() => setSelectedIndex(0), [props.items]); + + useImperativeHandle(ref, () => ({ + onKeyDown: ({ event }) => { + if (event.key === 'ArrowUp') { + upHandler(); + return true; + } + + if (event.key === 'ArrowDown') { + downHandler(); + return true; + } + + if (event.key === 'Enter') { + enterHandler(); + return true; + } + + return false; + }, + })); + + return ( +
+ {props.items.length ? ( + props.items.map((item: NDKUserProfile, index: number) => ( + + )) + ) : ( +
No result
+ )} +
+ ); +}); + +MentionList.displayName = 'MentionList'; diff --git a/src/shared/composer/mention/suggestion.tsx b/src/shared/composer/mention/suggestion.tsx new file mode 100644 index 00000000..66d1479c --- /dev/null +++ b/src/shared/composer/mention/suggestion.tsx @@ -0,0 +1,71 @@ +import { ReactRenderer } from '@tiptap/react'; +import tippy from 'tippy.js'; + +import { getAllMetadata } from '@libs/storage'; + +import { MentionList } from '@shared/composer'; + +const users = await getAllMetadata(); + +export const Suggestion = { + items: ({ query }) => { + return users + .filter((item) => item.ident.toLowerCase().startsWith(query.toLowerCase())) + .slice(0, 5); + }, + + render: () => { + let component; + let popup; + + return { + onStart: (props) => { + component = new ReactRenderer(MentionList, { + props, + editor: props.editor, + }); + + if (!props.clientRect) { + return; + } + + popup = tippy('body', { + getReferenceClientRect: props.clientRect, + appendTo: () => document.body, + content: component.element, + showOnCreate: true, + interactive: true, + trigger: 'manual', + placement: 'bottom-start', + }); + }, + + onUpdate(props) { + component.updateProps(props); + + if (!props.clientRect) { + return; + } + + popup[0].setProps({ + getReferenceClientRect: props.clientRect, + }); + }, + + onKeyDown(props) { + if (props.event.key === 'Escape') { + popup[0].hide(); + + return true; + } + + return component.ref?.onKeyDown(props); + }, + + onExit() { + popup[0].destroy(); + component.destroy(); + }, + }; + }, +}; diff --git a/src/shared/composer/modal.tsx b/src/shared/composer/modal.tsx index 4060710f..341942ad 100644 --- a/src/shared/composer/modal.tsx +++ b/src/shared/composer/modal.tsx @@ -3,8 +3,7 @@ import { Fragment } from 'react'; import { useHotkeys } from 'react-hotkeys-hook'; import { Button } from '@shared/button'; -import { Post } from '@shared/composer/types/post'; -import { User } from '@shared/composer/user'; +import { Composer, ComposerUser } from '@shared/composer'; import { CancelIcon, ChevronDownIcon, @@ -17,9 +16,8 @@ import { COMPOSE_SHORTCUT } from '@stores/shortcuts'; import { useAccount } from '@utils/hooks/useAccount'; -export function Composer() { +export function ComposerModal() { const { account } = useAccount(); - const [toggle, open] = useComposer((state) => [state.toggleModal, state.open]); const closeModal = () => { @@ -31,7 +29,7 @@ export function Composer() { return ( <> @@ -60,7 +58,7 @@ export function Composer() {
-
{account && }
+ {account && }
New Post - +
-
-
+
- {account && } +
diff --git a/src/shared/composer/types/post.tsx b/src/shared/composer/types/post.tsx deleted file mode 100644 index 27d06f65..00000000 --- a/src/shared/composer/types/post.tsx +++ /dev/null @@ -1,170 +0,0 @@ -import { useCallback, useMemo, useState } from 'react'; -import { Node, Transforms, createEditor } from 'slate'; -import { withHistory } from 'slate-history'; -import { Editable, ReactEditor, Slate, useSlateStatic, withReact } from 'slate-react'; - -import { Button } from '@shared/button'; -import { ImageUploader } from '@shared/composer/imageUploader'; -import { CancelIcon, TrashIcon } from '@shared/icons'; -import { MentionNote } from '@shared/notes/mentions/note'; - -import { useComposer } from '@stores/composer'; -import { FULL_RELAYS } from '@stores/constants'; - -import { usePublish } from '@utils/hooks/usePublish'; - -const withImages = (editor) => { - const { isVoid } = editor; - - editor.isVoid = (element) => { - return element.type === 'image' ? true : isVoid(element); - }; - - return editor; -}; - -const ImagePreview = ({ - attributes, - children, - element, -}: { - attributes: any; - children: any; - element: any; -}) => { - const editor: any = useSlateStatic(); - const path = ReactEditor.findPath(editor, element); - - return ( -
- {children} -
- {element.url} - -
-
- ); -}; - -export function Post() { - const publish = usePublish(); - const editor = useMemo(() => withReact(withImages(withHistory(createEditor()))), []); - - const [reply, clearReply, toggle] = useComposer((state) => [ - state.reply, - state.clearReply, - state.toggleModal, - ]); - const [content, setContent] = useState([ - { - children: [ - { - text: '', - }, - ], - }, - ]); - - const serialize = useCallback((nodes: Node[]) => { - return nodes.map((n) => Node.string(n)).join('\n'); - }, []); - - const removeReply = () => { - clearReply(); - }; - - const submit = async () => { - let tags: string[][] = []; - - if (reply.id && reply.pubkey) { - if (reply.root && reply.root !== reply.id) { - tags = [ - ['e', reply.id, FULL_RELAYS[0], 'root'], - ['e', reply.root, FULL_RELAYS[0], 'reply'], - ['p', reply.pubkey], - ]; - } else { - tags = [ - ['e', reply.id, FULL_RELAYS[0], 'root'], - ['p', reply.pubkey], - ]; - } - } else { - tags = []; - } - - // serialize content - const serializedContent = serialize(content); - - // publish message - await publish({ content: serializedContent, kind: 1, tags }); - - // close modal - toggle(false); - }; - - const renderElement = useCallback((props) => { - switch (props.element.type) { - case 'image': - if (props.element.url) { - return ; - } - break; - default: - return

{props.children}

; - } - }, []); - - return ( - -
-
-
-
-
-
- - {reply.id && ( -
- - -
- )} -
-
-
- - -
-
- - ); -} diff --git a/src/shared/composer/user.tsx b/src/shared/composer/user.tsx index b8f3a85b..75cea627 100644 --- a/src/shared/composer/user.tsx +++ b/src/shared/composer/user.tsx @@ -4,12 +4,12 @@ import { DEFAULT_AVATAR } from '@stores/constants'; import { useProfile } from '@utils/hooks/useProfile'; -export function User({ pubkey }: { pubkey: string }) { +export function ComposerUser({ pubkey }: { pubkey: string }) { const { user } = useProfile(pubkey); return ( -
-
+
+
+
+ + +
+ + + + Open thread + + + + + + )} +
+ + ); +} diff --git a/src/shared/notes/actions/reaction.tsx b/src/shared/notes/actions/reaction.tsx new file mode 100644 index 00000000..4fa7d31c --- /dev/null +++ b/src/shared/notes/actions/reaction.tsx @@ -0,0 +1,141 @@ +import * as Popover from '@radix-ui/react-popover'; +import { useCallback, useEffect, useState } from 'react'; + +import { ReactionIcon } from '@shared/icons'; + +import { usePublish } from '@utils/hooks/usePublish'; + +const REACTIONS = [ + { + content: '👏', + img: 'https://raw.githubusercontent.com/Tarikul-Islam-Anik/Animated-Fluent-Emojis/master/Emojis/Hand%20gestures/Clapping%20Hands.png', + }, + { + content: '🤪', + img: 'https://raw.githubusercontent.com/Tarikul-Islam-Anik/Animated-Fluent-Emojis/master/Emojis/Smilies/Face%20with%20Tongue.png', + }, + { + content: '😮', + img: 'https://raw.githubusercontent.com/Tarikul-Islam-Anik/Animated-Fluent-Emojis/master/Emojis/Smilies/Face%20with%20Open%20Mouth.png', + }, + { + content: '😢', + img: 'https://raw.githubusercontent.com/Tarikul-Islam-Anik/Animated-Fluent-Emojis/master/Emojis/Smilies/Crying%20Face.png', + }, + { + content: '🤡', + img: 'https://raw.githubusercontent.com/Tarikul-Islam-Anik/Animated-Fluent-Emojis/master/Emojis/Smilies/Clown%20Face.png', + }, +]; + +export function NoteReaction({ id, pubkey }: { id: string; pubkey: string }) { + const [open, setOpen] = useState(false); + const [reaction, setReaction] = useState(null); + + const { publish } = usePublish(); + + const getReactionImage = (content: string) => { + const reaction: { img: string } = REACTIONS.find((el) => el.content === content); + return reaction.img; + }; + + const react = async (content: string) => { + setReaction(content); + + const event = await publish({ + content: content, + kind: 7, + tags: [ + ['e', id], + ['p', pubkey], + ], + }); + + if (event) { + setOpen(false); + } + }; + + return ( + + + + + + +
+ + + + + +
+ +
+
+
+ ); +} diff --git a/src/shared/notes/actions/reply.tsx b/src/shared/notes/actions/reply.tsx new file mode 100644 index 00000000..3962ca35 --- /dev/null +++ b/src/shared/notes/actions/reply.tsx @@ -0,0 +1,37 @@ +import * as Tooltip from '@radix-ui/react-tooltip'; + +import { ReplyIcon } from '@shared/icons'; + +import { useComposer } from '@stores/composer'; + +export function NoteReply({ + id, + pubkey, + root, +}: { + id: string; + pubkey: string; + root?: string; +}) { + const setReply = useComposer((state) => state.setReply); + + return ( + + + + + + + Quick reply + + + + + ); +} diff --git a/src/shared/notes/actions/repost.tsx b/src/shared/notes/actions/repost.tsx new file mode 100644 index 00000000..0a08324a --- /dev/null +++ b/src/shared/notes/actions/repost.tsx @@ -0,0 +1,39 @@ +import * as Tooltip from '@radix-ui/react-tooltip'; + +import { RepostIcon } from '@shared/icons'; + +import { FULL_RELAYS } from '@stores/constants'; + +import { usePublish } from '@utils/hooks/usePublish'; + +export function NoteRepost({ id, pubkey }: { id: string; pubkey: string }) { + const { publish } = usePublish(); + + const submit = async () => { + const tags = [ + ['e', id, FULL_RELAYS[0], 'root'], + ['p', pubkey], + ]; + await publish({ content: '', kind: 6, tags: tags }); + }; + + return ( + + + + + + + Repost + + + + + ); +} diff --git a/src/shared/notes/actions/zap.tsx b/src/shared/notes/actions/zap.tsx new file mode 100644 index 00000000..8a0cc708 --- /dev/null +++ b/src/shared/notes/actions/zap.tsx @@ -0,0 +1,198 @@ +import { NostrEvent } from '@nostr-dev-kit/ndk'; +import * as Dialog from '@radix-ui/react-dialog'; +import { QRCodeSVG } from 'qrcode.react'; +import { useState } from 'react'; +import { twMerge } from 'tailwind-merge'; + +import { Button } from '@shared/button'; +import { CancelIcon, ZapIcon } from '@shared/icons'; + +import { useEvent } from '@utils/hooks/useEvent'; +import { usePublish } from '@utils/hooks/usePublish'; + +export function NoteZap({ id }: { id: string }) { + const { createZap } = usePublish(); + const { data: event } = useEvent(id); + + const [amount, setAmount] = useState(null); + const [invoice, setInvoice] = useState(null); + + const selected = (num: number) => { + if (amount === num) return true; + return false; + }; + + const createZapRequest = async () => { + const res = await createZap(event as unknown as NostrEvent, amount); + if (res) setInvoice(res); + }; + + return ( + + + + + + +
+ +
+
+ + Zap (Beta) + + + Send tip with Bitcoin via Lightning + +
+ + + +
+
+ {!invoice ? ( + <> +
+ + + + + + +
+
+ +
+ + ) : ( +
+
+ +
+
+

+ Scan to pay +

+ + You must use Bitcoin wallet which support Lightning +
+ such as: Blue Wallet, Bitkit, Phoenix,... +
+
+
+ )} +
+
+
+
+
+ ); +} diff --git a/src/shared/notes/content.tsx b/src/shared/notes/content.tsx new file mode 100644 index 00000000..9b315961 --- /dev/null +++ b/src/shared/notes/content.tsx @@ -0,0 +1,38 @@ +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; + +import { + Hashtag, + ImagePreview, + LinkPreview, + MentionNote, + MentionUser, + VideoPreview, +} from '@shared/notes'; + +import { Content } from '@utils/types'; + +export function NoteContent({ content }: { content: Content }) { + return ( + <> + { + const key = children[0] as string; + if (key.startsWith('pub')) return ; + if (key.startsWith('tag')) return ; + }, + }} + > + {content?.parsed} + + {content?.images?.length > 0 && } + {content?.videos?.length > 0 && } + {content?.links?.length > 0 && } + {content?.notes?.length > 0 && + content?.notes.map((note: string) => )} + + ); +} diff --git a/src/shared/notes/contents/kind1.tsx b/src/shared/notes/contents/kind1.tsx deleted file mode 100644 index 53d94191..00000000 --- a/src/shared/notes/contents/kind1.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { ReactNode } from 'react'; - -import { MentionNote } from '@shared/notes/mentions/note'; -import { ImagePreview } from '@shared/notes/preview/image'; -import { LinkPreview } from '@shared/notes/preview/link'; -import { VideoPreview } from '@shared/notes/preview/video'; - -export function Kind1({ - content, - truncate = false, -}: { - content: { - original: string; - parsed: ReactNode[]; - notes: string[]; - images: string[]; - videos: string[]; - links: string[]; - }; - truncate?: boolean; -}) { - return ( - <> -
- {content.parsed} -
- {content.images.length > 0 && ( - - )} - {content.videos.length > 0 && } - {content.links.length > 0 && } - {content.notes.length > 0 && - content.notes.map((note: string) => )} - - ); -} diff --git a/src/shared/notes/contents/kind1063.tsx b/src/shared/notes/contents/kind1063.tsx deleted file mode 100644 index ea5d7f82..00000000 --- a/src/shared/notes/contents/kind1063.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { NDKTag } from '@nostr-dev-kit/ndk'; - -import { Image } from '@shared/image'; - -function isImage(url: string) { - return /\.(jpg|jpeg|gif|png|webp|avif)$/.test(url); -} - -export function Kind1063({ metadata }: { metadata: NDKTag[] }) { - const url = metadata[0][1]; - - return ( -
- {isImage(url) && ( - image - )} -
- ); -} diff --git a/src/shared/notes/hashtag.tsx b/src/shared/notes/hashtag.tsx new file mode 100644 index 00000000..50ea04de --- /dev/null +++ b/src/shared/notes/hashtag.tsx @@ -0,0 +1,23 @@ +import { BLOCK_KINDS } from '@stores/constants'; + +import { useBlock } from '@utils/hooks/useBlock'; + +export function Hashtag({ tag }: { tag: string }) { + const { add } = useBlock(); + + return ( + + ); +} diff --git a/src/shared/notes/index.tsx b/src/shared/notes/index.tsx new file mode 100644 index 00000000..2024abfc --- /dev/null +++ b/src/shared/notes/index.tsx @@ -0,0 +1,27 @@ +export * from './actions/reaction'; +export * from './actions/reply'; +export * from './actions/repost'; +export * from './actions/zap'; +export * from './mentions/note'; +export * from './mentions/user'; +export * from './preview/image'; +export * from './preview/link'; +export * from './preview/video'; +export * from './replies/form'; +export * from './replies/item'; +export * from './replies/list'; +export * from './replies/sub'; +export * from './kinds/kind1'; +export * from './kinds/kind1063'; +export * from './metadata'; +export * from './users/mini'; +export * from './users/repost'; +export * from './users/thread'; +export * from './kinds/thread'; +export * from './kinds/repost'; +export * from './kinds/sub'; +export * from './skeleton'; +export * from './actions'; +export * from './content'; +export * from './hashtag'; +export * from './stats'; diff --git a/src/shared/notes/kinds/kind1.tsx b/src/shared/notes/kinds/kind1.tsx new file mode 100644 index 00000000..f6bc0c0c --- /dev/null +++ b/src/shared/notes/kinds/kind1.tsx @@ -0,0 +1,39 @@ +import { useMemo } from 'react'; + +import { NoteActions, NoteContent, NoteMetadata } from '@shared/notes'; +import { User } from '@shared/user'; + +import { parser } from '@utils/parser'; +import { LumeEvent } from '@utils/types'; + +export function NoteKind_1({ + event, + skipMetadata = false, +}: { + event: LumeEvent; + skipMetadata?: boolean; +}) { + const content = useMemo(() => parser(event), [event.id]); + + return ( +
+
+
+ +
+
+
+ + +
+
+ {!skipMetadata ? ( + + ) : ( +
+ )} +
+
+
+ ); +} diff --git a/src/shared/notes/kinds/kind1063.tsx b/src/shared/notes/kinds/kind1063.tsx new file mode 100644 index 00000000..3027ef4f --- /dev/null +++ b/src/shared/notes/kinds/kind1063.tsx @@ -0,0 +1,38 @@ +import { Image } from '@shared/image'; +import { NoteActions, NoteMetadata } from '@shared/notes'; +import { User } from '@shared/user'; + +import { LumeEvent } from '@utils/types'; + +function isImage(url: string) { + return /\.(jpg|jpeg|gif|png|webp|avif)$/.test(url); +} + +export function NoteKind_1063({ event }: { event: LumeEvent }) { + const url = event.tags[0][1]; + + return ( +
+
+
+ +
+
+
+ {isImage(url) && ( + image + )} + +
+
+ +
+
+
+ ); +} diff --git a/src/shared/notes/kinds/repost.tsx b/src/shared/notes/kinds/repost.tsx new file mode 100644 index 00000000..6b92eddb --- /dev/null +++ b/src/shared/notes/kinds/repost.tsx @@ -0,0 +1,54 @@ +import { + NoteActions, + NoteContent, + NoteMetadata, + NoteSkeleton, + RepostUser, +} from '@shared/notes'; +import { User } from '@shared/user'; + +import { useEvent } from '@utils/hooks/useEvent'; +import { getRepostID } from '@utils/transform'; +import { LumeEvent } from '@utils/types'; + +export function Repost({ event }: { event: LumeEvent }) { + const repostID = getRepostID(event.tags); + const { status, data } = useEvent(repostID, event.content); + + if (status === 'loading') { + return ( +
+ +
+ ); + } + + if (status === 'error') { + return ( +
+

Failed to fetch

+
+ ); + } + + return ( +
+
+
+
+ + +
+
+
+
+ + +
+
+ +
+
+
+ ); +} diff --git a/src/shared/notes/kinds/sub.tsx b/src/shared/notes/kinds/sub.tsx new file mode 100644 index 00000000..42228d78 --- /dev/null +++ b/src/shared/notes/kinds/sub.tsx @@ -0,0 +1,40 @@ +import { NoteActions, NoteContent, NoteSkeleton } from '@shared/notes'; +import { User } from '@shared/user'; + +import { useEvent } from '@utils/hooks/useEvent'; + +export function SubNote({ id, root }: { id: string; root?: string }) { + const { status, data } = useEvent(id); + + if (status === 'loading') { + return ( +
+ +
+ ); + } + + if (status === 'error') { + return ( +
+

Failed to fetch

+
+ ); + } + + return ( + <> +
+
+ +
+
+
+ + +
+
+
+ + ); +} diff --git a/src/shared/notes/kinds/thread.tsx b/src/shared/notes/kinds/thread.tsx new file mode 100644 index 00000000..383947b3 --- /dev/null +++ b/src/shared/notes/kinds/thread.tsx @@ -0,0 +1,39 @@ +import { useMemo } from 'react'; + +import { NoteActions, NoteContent, NoteMetadata, SubNote } from '@shared/notes'; +import { User } from '@shared/user'; + +import { parser } from '@utils/parser'; +import { LumeEvent } from '@utils/types'; + +export function NoteThread({ + event, + root, + reply, +}: { + event: LumeEvent; + root: string; + reply: string; +}) { + const content = useMemo(() => parser(event), [event.id]); + + return ( +
+
+
{root && }
+
{reply && }
+
+ +
+
+
+ + +
+
+ +
+
+
+ ); +} diff --git a/src/shared/notes/kinds/unsupport.tsx b/src/shared/notes/kinds/unsupport.tsx new file mode 100644 index 00000000..8566bb6d --- /dev/null +++ b/src/shared/notes/kinds/unsupport.tsx @@ -0,0 +1,36 @@ +import { NoteActions, NoteMetadata } from '@shared/notes'; +import { User } from '@shared/user'; + +import { LumeEvent } from '@utils/types'; + +export function NoteKindUnsupport({ event }: { event: LumeEvent }) { + return ( +
+
+
+ +
+
+
+
+
+ + Kind: {event.kind} + +

+ Lume isn't fully support this kind +

+
+
+

{event.content.toString()}

+
+
+ +
+
+ +
+
+
+ ); +} diff --git a/src/shared/notes/mentions/note.tsx b/src/shared/notes/mentions/note.tsx index 671412c7..ac392ead 100644 --- a/src/shared/notes/mentions/note.tsx +++ b/src/shared/notes/mentions/note.tsx @@ -1,32 +1,23 @@ -import { useMutation, useQueryClient } from '@tanstack/react-query'; import { memo } from 'react'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; -import { createBlock } from '@libs/storage'; - -import { Kind1 } from '@shared/notes/contents/kind1'; -import { Kind1063 } from '@shared/notes/contents/kind1063'; -import { NoteSkeleton } from '@shared/notes/skeleton'; +import { MentionUser, NoteSkeleton } from '@shared/notes'; import { User } from '@shared/user'; +import { BLOCK_KINDS } from '@stores/constants'; + +import { useBlock } from '@utils/hooks/useBlock'; import { useEvent } from '@utils/hooks/useEvent'; export const MentionNote = memo(function MentionNote({ id }: { id: string }) { - const queryClient = useQueryClient(); + const { add } = useBlock(); const { status, data } = useEvent(id); - const block = useMutation({ - mutationFn: (data: any) => { - return createBlock(data.kind, data.title, data.content); - }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['blocks'] }); - }, - }); - - const openThread = (event: any, thread: string) => { + const openThread = (event, thread: string) => { const selection = window.getSelection(); if (selection.toString().length === 0) { - block.mutate({ kind: 2, title: 'Thread', content: thread }); + add.mutate({ kind: BLOCK_KINDS.thread, title: 'Thread', content: thread }); } else { event.stopPropagation(); } @@ -38,31 +29,37 @@ export const MentionNote = memo(function MentionNote({ id }: { id: string }) { onKeyDown={(e) => openThread(e, id)} role="button" tabIndex={0} - className="mt-3 rounded-lg border-t border-zinc-700/50 bg-zinc-800/50 px-3 py-3" + className="mb-2 mt-3 cursor-default rounded-lg border-t border-zinc-700/50 bg-zinc-800/50 px-3 py-3" > {status === 'loading' ? ( ) : status === 'success' ? ( <> -
- {data.kind === 1 && } - {data.kind === 1063 && } - {data.kind !== 1 && data.kind !== 1063 && ( -
-
- - Kind: {data.kind} - -

- Lume isn't fully support this kind in newsfeed -

-
-
-

{data.content}

-
-
- )} +
+ { + const key = children[0] as string; + if (key.startsWith('pub')) return ; + if (key.startsWith('tag')) + return ( + + ); + }, + }} + > + {data?.content?.parsed?.length > 160 + ? data.content.parsed.substring(0, 160) + '...' + : data.content.parsed} +
) : ( diff --git a/src/shared/notes/mentions/user.tsx b/src/shared/notes/mentions/user.tsx index 0ca6109b..798d2ae7 100644 --- a/src/shared/notes/mentions/user.tsx +++ b/src/shared/notes/mentions/user.tsx @@ -1,17 +1,26 @@ -import { Link } from 'react-router-dom'; +import { BLOCK_KINDS } from '@stores/constants'; +import { useBlock } from '@utils/hooks/useBlock'; import { useProfile } from '@utils/hooks/useProfile'; -import { shortenKey } from '@utils/shortenKey'; +import { displayNpub } from '@utils/shortenKey'; export function MentionUser({ pubkey }: { pubkey: string }) { + const { add } = useBlock(); const { user } = useProfile(pubkey); return ( - + add.mutate({ + kind: BLOCK_KINDS.user, + title: user?.nip05 || user?.name || user?.displayNam, + content: pubkey, + }) + } + className="break-words font-normal text-blue-400 no-underline hover:text-blue-500" > - @{user?.name || user?.displayName || shortenKey(pubkey)} - + {'@' + user?.name || user?.displayName || displayNpub(pubkey, 16)} + ); } diff --git a/src/shared/notes/metadata.tsx b/src/shared/notes/metadata.tsx index 7f39aec6..ae60cbaf 100644 --- a/src/shared/notes/metadata.tsx +++ b/src/shared/notes/metadata.tsx @@ -1,165 +1,117 @@ import { NDKEvent, NDKFilter } from '@nostr-dev-kit/ndk'; -import * as Tooltip from '@radix-ui/react-tooltip'; -import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import { useQuery } from '@tanstack/react-query'; import { decode } from 'light-bolt11-decoder'; import { useNDK } from '@libs/ndk/provider'; -import { createBlock, createReplyNote } from '@libs/storage'; +import { createReplyNote } from '@libs/storage'; -import { LoaderIcon, ReplyIcon, RepostIcon, ZapIcon } from '@shared/icons'; -import { ThreadIcon } from '@shared/icons/thread'; -import { NoteReply } from '@shared/notes/metadata/reply'; -import { NoteRepost } from '@shared/notes/metadata/repost'; -import { NoteZap } from '@shared/notes/metadata/zap'; +import { LoaderIcon } from '@shared/icons'; +import { MiniUser } from '@shared/notes/users/mini'; -export function NoteMetadata({ - id, - rootID, - eventPubkey, -}: { - id: string; - rootID?: string; - eventPubkey: string; -}) { - const queryClient = useQueryClient(); +import { BLOCK_KINDS } from '@stores/constants'; +import { useBlock } from '@utils/hooks/useBlock'; +import { compactNumber } from '@utils/number'; + +export function NoteMetadata({ id }: { id: string }) { + const { add } = useBlock(); const { ndk } = useNDK(); - const { status, data } = useQuery(['note-metadata', id], async () => { - let replies = 0; - let reposts = 0; - let zap = 0; + const { status, data } = useQuery( + ['note-metadata', id], + async () => { + let replies = 0; + let zap = 0; + const users = []; - const filter: NDKFilter = { - '#e': [id], - kinds: [1, 6, 9735], - }; + const filter: NDKFilter = { + '#e': [id], + kinds: [1, 9735], + }; - const events = await ndk.fetchEvents(filter); - events.forEach((event: NDKEvent) => { - switch (event.kind) { - case 1: - replies += 1; - createReplyNote( - id, - event.id, - event.pubkey, - event.kind, - event.tags, - event.content, - event.created_at - ); - break; - case 6: - reposts += 1; - break; - case 9735: { - const bolt11 = event.tags.find((tag) => tag[0] === 'bolt11')[1]; - if (bolt11) { - const decoded = decode(bolt11); - const amount = decoded.sections.find((item) => item.name === 'amount'); - const sats = amount.value / 1000; - zap += sats; + const events = await ndk.fetchEvents(filter); + events.forEach((event: NDKEvent) => { + switch (event.kind) { + case 1: + replies += 1; + if (users.length < 3) users.push(event.pubkey); + createReplyNote( + id, + event.id, + event.pubkey, + event.kind, + event.tags, + event.content, + event.created_at + ); + break; + case 9735: { + const bolt11 = event.tags.find((tag) => tag[0] === 'bolt11')[1]; + if (bolt11) { + const decoded = decode(bolt11); + const amount = decoded.sections.find((item) => item.name === 'amount'); + const sats = amount.value / 1000; + zap += sats; + } + break; } - break; + default: + break; } - default: - break; - } - }); + }); - return { replies, reposts, zap }; - }); - - const block = useMutation({ - mutationFn: (data: any) => { - return createBlock(data.kind, data.title, data.content); + return { replies, users, zap }; }, - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: ['blocks'] }); - }, - }); - - const openThread = (thread: string) => { - block.mutate({ kind: 2, title: 'Thread', content: thread }); - }; + { refetchOnWindowFocus: false, refetchOnReconnect: false } + ); if (status === 'loading') { return ( -
-
- - -
-
- - -
-
- - +
+
+
+
); } return ( - -
-
- - - -
- - - - - - - Open thread - - - - -
-
+
+ {data.replies > 0 ? ( + <> +
+
+
+
+ {data.users?.map((user, index) => ( + + ))} +
+
+
+ + · +

+ + {compactNumber.format(data.zap)} + {' '} + zaps +

+
+
+ + ) : ( +
+ )} +
); } diff --git a/src/shared/notes/metadata/reply.tsx b/src/shared/notes/metadata/reply.tsx deleted file mode 100644 index 2e552cdc..00000000 --- a/src/shared/notes/metadata/reply.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import * as Tooltip from '@radix-ui/react-tooltip'; - -import { ReplyIcon } from '@shared/icons'; - -import { useComposer } from '@stores/composer'; - -import { compactNumber } from '@utils/number'; - -export function NoteReply({ - id, - rootID, - pubkey, - replies, -}: { - id: string; - rootID?: string; - pubkey: string; - replies: number; -}) { - const setReply = useComposer((state) => state.setReply); - - return ( - - - - - Quick reply - - - - - ); -} diff --git a/src/shared/notes/metadata/repost.tsx b/src/shared/notes/metadata/repost.tsx deleted file mode 100644 index 84affa8d..00000000 --- a/src/shared/notes/metadata/repost.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import * as Tooltip from '@radix-ui/react-tooltip'; - -import { RepostIcon } from '@shared/icons'; - -import { FULL_RELAYS } from '@stores/constants'; - -import { usePublish } from '@utils/hooks/usePublish'; -import { compactNumber } from '@utils/number'; - -export function NoteRepost({ - id, - pubkey, - reposts, -}: { - id: string; - pubkey: string; - reposts: number; -}) { - const publish = usePublish(); - - const submit = async () => { - const tags = [ - ['e', id, FULL_RELAYS[0], 'root'], - ['p', pubkey], - ]; - await publish({ content: '', kind: 6, tags: tags }); - }; - - return ( - - - - - Repost - - - - - ); -} diff --git a/src/shared/notes/metadata/zap.tsx b/src/shared/notes/metadata/zap.tsx deleted file mode 100644 index 3ae2a0fe..00000000 --- a/src/shared/notes/metadata/zap.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import * as Tooltip from '@radix-ui/react-tooltip'; - -import { ZapIcon } from '@shared/icons'; - -import { compactNumber } from '@utils/number'; - -export function NoteZap({ zaps }: { zaps: number }) { - return ( - - - - - Coming Soon - - - - - ); -} diff --git a/src/shared/notes/note.tsx b/src/shared/notes/note.tsx deleted file mode 100644 index 8cdd5dfe..00000000 --- a/src/shared/notes/note.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { useMemo } from 'react'; - -import { Kind1 } from '@shared/notes/contents/kind1'; -import { Kind1063 } from '@shared/notes/contents/kind1063'; -import { NoteMetadata } from '@shared/notes/metadata'; -import { NoteParent } from '@shared/notes/parent'; -import { Repost } from '@shared/notes/repost'; -import { User } from '@shared/user'; - -import { parser } from '@utils/parser'; -import { LumeEvent } from '@utils/types'; - -interface Note { - event: LumeEvent; - skipMetadata?: boolean; -} - -export function Note({ event, skipMetadata = false }: Note) { - const isRepost = event.kind === 6; - - const renderParent = useMemo(() => { - if (!isRepost && event.parent_id && event.parent_id !== event.event_id) { - return ; - } else { - return null; - } - }, [event.parent_id]); - - const renderRepost = useMemo(() => { - if (isRepost) { - return ; - } else { - return null; - } - }, [event.kind]); - - const renderContent = useMemo(() => { - switch (event.kind) { - case 1: { - const content = parser(event); - return ; - } - case 6: - return null; - case 1063: - return ; - default: - return ( -
-
- - Kind: {event.kind} - -

- Lume isn't fully support this kind in newsfeed -

-
-
-

{event.content}

-
-
- ); - } - }, [event.kind]); - - return ( -
-
- {renderParent} -
- -
- {renderContent} - {!isRepost && !skipMetadata ? ( - - ) : ( -
- )} -
-
- {renderRepost} -
-
- ); -} diff --git a/src/shared/notes/parent.tsx b/src/shared/notes/parent.tsx deleted file mode 100644 index ac9eb95b..00000000 --- a/src/shared/notes/parent.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Kind1 } from '@shared/notes/contents/kind1'; -import { Kind1063 } from '@shared/notes/contents/kind1063'; -import { NoteMetadata } from '@shared/notes/metadata'; -import { NoteSkeleton } from '@shared/notes/skeleton'; -import { User } from '@shared/user'; - -import { useEvent } from '@utils/hooks/useEvent'; - -export function NoteParent({ id }: { id: string }) { - const { status, data } = useEvent(id); - - return ( -
-
- {status === 'loading' ? ( - - ) : status === 'success' ? ( - <> - -
- {data.kind === 1 && } - {data.kind === 1063 && } - {data.kind !== 1 && data.kind !== 1063 && ( -
-
- - Kind: {data.kind} - -

- Lume isn't fully support this kind in newsfeed -

-
-
-

{data.content || data.toString()}

-
-
- )} - -
- - ) : ( -

Failed to fetch event

- )} -
- ); -} diff --git a/src/shared/notes/preview/image.tsx b/src/shared/notes/preview/image.tsx index 43df8a58..b3fb99f9 100644 --- a/src/shared/notes/preview/image.tsx +++ b/src/shared/notes/preview/image.tsx @@ -1,11 +1,21 @@ +import { downloadDir } from '@tauri-apps/api/path'; +import { download } from 'tauri-plugin-upload-api'; + +import { DownloadIcon } from '@shared/icons'; import { Image } from '@shared/image'; export function ImagePreview({ urls, truncate }: { urls: string[]; truncate?: boolean }) { + const downloadImage = async (url: string) => { + const downloadDirPath = await downloadDir(); + const filename = url.substring(url.lastIndexOf('/') + 1); + return await download(url, downloadDirPath + `/${filename}`); + }; + return ( -
+
{urls.map((url) => ( -
+
+
))}
diff --git a/src/shared/notes/preview/link.tsx b/src/shared/notes/preview/link.tsx index 7d43883f..4d443422 100644 --- a/src/shared/notes/preview/link.tsx +++ b/src/shared/notes/preview/link.tsx @@ -3,11 +3,11 @@ import { Image } from '@shared/image'; import { useOpenGraph } from '@utils/hooks/useOpenGraph'; export function LinkPreview({ urls }: { urls: string[] }) { - const domain = new URL(urls[0]); const { status, data, error } = useOpenGraph(urls[0]); + const domain = new URL(urls[0]); return ( -
+
{status === 'loading' ? (
@@ -21,7 +21,7 @@ export function LinkPreview({ urls }: { urls: string[] }) {
) : ( ) : ( <> - {urls[0]} + {data.images?.[0] && ( + {urls[0]} + )}
{data.title} diff --git a/src/shared/notes/preview/video.tsx b/src/shared/notes/preview/video.tsx index c5c0ebf1..320cd412 100644 --- a/src/shared/notes/preview/video.tsx +++ b/src/shared/notes/preview/video.tsx @@ -2,7 +2,7 @@ import ReactPlayer from 'react-player/es6'; export function VideoPreview({ urls }: { urls: string[] }) { return ( -
+
{urls.map((url) => ( { - const tags = [['e', rootID, FULL_RELAYS[0], 'root']]; + const tags = [['e', id, FULL_RELAYS[0], 'reply']]; // publish event publish({ content: value, kind: 1, tags }); @@ -31,36 +26,36 @@ export function NoteReplyForm({ }; return ( -
+