diff --git a/default.conf b/default.conf index 86620390b46..87387483ddf 100644 --- a/default.conf +++ b/default.conf @@ -11,18 +11,11 @@ server { try_files $uri /widget.html; } - location /embed { - try_files $uri /embed.html; - } - location /docs { try_files $uri /docs.html; } - location /oss { - try_files $uri /oss.html; - } location /pricing { try_files $uri /pricing.html; diff --git a/next-env.d.ts b/next-env.d.ts index fd36f9494e2..4f11a03dc6c 100644 --- a/next-env.d.ts +++ b/next-env.d.ts @@ -1,6 +1,5 @@ /// /// -/// // NOTE: This file should not be edited // see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/next.config.js b/next.config.js index e9e1d8ff063..211ca052c8d 100644 --- a/next.config.js +++ b/next.config.js @@ -14,6 +14,9 @@ const config = { compiler: { styledComponents: true, }, + experimental: { + optimizePackageImports: ["@mantine/core", "@mantine/hooks"], + }, webpack: config => { config.resolve.fallback = { fs: false }; config.output.webassemblyModuleFilename = "static/wasm/[modulehash].wasm"; diff --git a/package.json b/package.json index 2fd03b71395..aaecb4d5c0b 100644 --- a/package.json +++ b/package.json @@ -14,17 +14,18 @@ "analyze": "ANALYZE=true npm run build" }, "dependencies": { - "@mantine/code-highlight": "^7.4.1", - "@mantine/core": "^7.4.1", - "@mantine/hooks": "^7.4.1", + "@mantine/code-highlight": "^7.5.1", + "@mantine/core": "^7.5.1", + "@mantine/dropzone": "^7.5.1", + "@mantine/hooks": "^7.5.1", "@monaco-editor/react": "^4.6.0", - "@sentry/nextjs": "^7.94.1", - "@supabase/auth-helpers-nextjs": "^0.8.7", + "@sentry/nextjs": "^7.99.0", + "@supabase/auth-helpers-nextjs": "^0.9.0", "@supabase/auth-helpers-react": "^0.4.2", "@supabase/supabase-js": "^2.39.3", "@tanstack/react-query": "^4.36.1", - "allotment": "^1.19.5", - "axios": "^1.6.5", + "allotment": "^1.20.0", + "axios": "^1.6.7", "dayjs": "^1.11.10", "gofmt.js": "^0.0.2", "html-to-image": "^1.11.11", @@ -44,8 +45,8 @@ "lodash.unset": "^4.5.2", "lodash.update": "^4.10.2", "maketypes": "^1.1.2", - "million": "^2.6.4", - "next": "13.5.6", + "million": "^3.0.2", + "next": "14.1.0", "pako": "^2.1.0", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -73,9 +74,9 @@ "@types/lodash.set": "^4.3.9", "@types/lodash.unset": "^4.5.9", "@types/lodash.update": "^4.10.9", - "@types/node": "^20.4.7", + "@types/node": "^20.11.16", "@types/pako": "^2.0.3", - "@types/react": "18.2.45", + "@types/react": "18.2.51", "@types/react-dom": "^18.2.18", "eslint": "8.56.0", "eslint-config-next": "14.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4dc26a6633f..3b1e6be799d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,23 +6,26 @@ settings: dependencies: '@mantine/code-highlight': - specifier: ^7.4.1 - version: 7.4.1(@mantine/core@7.4.1)(@mantine/hooks@7.4.1)(react-dom@18.2.0)(react@18.2.0) + specifier: ^7.5.1 + version: 7.5.1(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0) '@mantine/core': - specifier: ^7.4.1 - version: 7.4.1(@mantine/hooks@7.4.1)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) + specifier: ^7.5.1 + version: 7.5.1(@mantine/hooks@7.5.1)(@types/react@18.2.51)(react-dom@18.2.0)(react@18.2.0) + '@mantine/dropzone': + specifier: ^7.5.1 + version: 7.5.1(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0) '@mantine/hooks': - specifier: ^7.4.1 - version: 7.4.1(react@18.2.0) + specifier: ^7.5.1 + version: 7.5.1(react@18.2.0) '@monaco-editor/react': specifier: ^4.6.0 version: 4.6.0(monaco-editor@0.45.0)(react-dom@18.2.0)(react@18.2.0) '@sentry/nextjs': - specifier: ^7.94.1 - version: 7.94.1(next@14.1.0)(react@18.2.0) + specifier: ^7.99.0 + version: 7.99.0(next@14.1.0)(react@18.2.0) '@supabase/auth-helpers-nextjs': - specifier: ^0.8.7 - version: 0.8.7(@supabase/supabase-js@2.39.3) + specifier: ^0.9.0 + version: 0.9.0(@supabase/supabase-js@2.39.3) '@supabase/auth-helpers-react': specifier: ^0.4.2 version: 0.4.2(@supabase/supabase-js@2.39.3) @@ -33,11 +36,11 @@ dependencies: specifier: ^4.36.1 version: 4.36.1(react-dom@18.2.0)(react@18.2.0) allotment: - specifier: ^1.19.5 - version: 1.19.5(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.20.0 + version: 1.20.0(react-dom@18.2.0)(react@18.2.0) axios: - specifier: ^1.6.5 - version: 1.6.5 + specifier: ^1.6.7 + version: 1.6.7 dayjs: specifier: ^1.11.10 version: 1.11.10 @@ -96,11 +99,11 @@ dependencies: specifier: ^1.1.2 version: 1.1.2 million: - specifier: ^2.6.4 - version: 2.6.4 + specifier: ^3.0.2 + version: 3.0.2 next: - specifier: 13.5.6 - version: 13.5.6(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0) + specifier: 14.1.0 + version: 14.1.0(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) pako: specifier: ^2.1.0 version: 2.1.0 @@ -121,7 +124,7 @@ dependencies: version: 5.0.1(react@18.2.0) react-json-tree: specifier: ^0.18.0 - version: 0.18.0(@types/react@18.2.48)(react@18.2.0) + version: 0.18.0(@types/react@18.2.51)(react@18.2.0) react-linkify-it: specifier: ^1.0.8 version: 1.0.8(react@18.2.0) @@ -144,8 +147,8 @@ dependencies: specifier: ^3.2.0 version: 3.2.0(react@18.2.0) zustand: - specifier: ^4.5.0 - version: 4.5.0(@types/react@18.2.48)(react@18.2.0) + specifier: ^4.4.7 + version: 4.5.0(@types/react@18.2.51)(react@18.2.0) devDependencies: '@next/bundle-analyzer': @@ -153,7 +156,7 @@ devDependencies: version: 14.1.0 '@trivago/prettier-plugin-sort-imports': specifier: ^4.3.0 - version: 4.3.0(prettier@3.2.2) + version: 4.3.0(prettier@3.2.4) '@types/js-yaml': specifier: ^4.0.9 version: 4.0.9 @@ -179,14 +182,14 @@ devDependencies: specifier: ^4.10.9 version: 4.10.9 '@types/node': - specifier: ^20.4.7 - version: 20.4.7 + specifier: ^20.11.16 + version: 20.11.16 '@types/pako': specifier: ^2.0.3 version: 2.0.3 '@types/react': - specifier: 18.2.48 - version: 18.2.48 + specifier: 18.2.51 + version: 18.2.51 '@types/react-dom': specifier: ^18.2.18 version: 18.2.18 @@ -194,27 +197,23 @@ devDependencies: specifier: 8.56.0 version: 8.56.0 eslint-config-next: - specifier: 14.1.0 - version: 14.1.0(eslint@8.56.0)(typescript@5.3.3) + specifier: 14.0.4 + version: 14.0.4(eslint@8.56.0)(typescript@5.3.3) eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) + specifier: ^8.10.0 + version: 8.10.0(eslint@8.56.0) eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.1.3(eslint-config-prettier@8.10.0)(eslint@8.56.0)(prettier@3.2.2) + version: 5.1.3(eslint-config-prettier@8.10.0)(eslint@8.56.0)(prettier@3.2.4) + eslint-plugin-unused-imports: + specifier: ^3.0.0 + version: 3.0.0(eslint@8.56.0) prettier: - specifier: ^3.2.4 - version: 3.2.4 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3) -======= specifier: ^3.2.2 - version: 3.2.2 + version: 3.2.4 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.4.7)(typescript@5.3.3) ->>>>>>> bcfcc1c (feat: enable ai) + version: 10.9.2(@types/node@20.11.16)(typescript@5.3.3) typescript: specifier: 5.3.3 version: 5.3.3 @@ -231,7 +230,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 dev: false /@babel/code-frame@7.23.5: @@ -246,20 +245,20 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/core@7.23.9: + resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.23.5 '@babel/generator': 7.23.6 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.7 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9) + '@babel/helpers': 7.23.9 + '@babel/parser': 7.23.9 + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 convert-source-map: 2.0.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -282,9 +281,9 @@ packages: resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 jsesc: 2.5.2 /@babel/helper-compilation-targets@7.23.6: @@ -293,7 +292,7 @@ packages: dependencies: '@babel/compat-data': 7.23.5 '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 + browserslist: 4.22.3 lru-cache: 5.1.1 semver: 6.3.1 dev: false @@ -319,16 +318,16 @@ packages: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -336,16 +335,11 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: false - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.6 + '@babel/types': 7.23.9 dev: false /@babel/helper-split-export-declaration@7.22.6: @@ -367,13 +361,13 @@ packages: engines: {node: '>=6.9.0'} dev: false - /@babel/helpers@7.23.7: - resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} + /@babel/helpers@7.23.9: + resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 transitivePeerDependencies: - supports-color dev: false @@ -393,24 +387,12 @@ packages: dependencies: '@babel/types': 7.17.0 - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + /@babel/parser@7.23.9: + resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + engines: {node: '>=6.0.0'} + hasBin: true dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.9 dev: false /@babel/runtime@7.23.6: @@ -420,12 +402,11 @@ packages: regenerator-runtime: 0.14.1 dev: false - /@babel/runtime@7.23.8: - resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} + /@babel/runtime@7.23.9: + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - dev: true /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} @@ -435,6 +416,15 @@ packages: '@babel/parser': 7.23.6 '@babel/types': 7.23.6 + /@babel/template@7.23.9: + resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + dev: false + /@babel/traverse@7.23.2: resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} engines: {node: '>=6.9.0'} @@ -453,8 +443,8 @@ packages: - supports-color dev: true - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + /@babel/traverse@7.23.9: + resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.23.5 @@ -463,8 +453,8 @@ packages: '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -486,6 +476,14 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + /@babel/types@7.23.9: + resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -563,26 +561,31 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@floating-ui/core@1.5.2: - resolution: {integrity: sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==} + /@fastify/busboy@2.1.0: + resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} + engines: {node: '>=14'} + dev: false + + /@floating-ui/core@1.6.0: + resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==} dependencies: - '@floating-ui/utils': 0.1.6 + '@floating-ui/utils': 0.2.1 dev: false - /@floating-ui/dom@1.5.3: - resolution: {integrity: sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==} + /@floating-ui/dom@1.6.1: + resolution: {integrity: sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==} dependencies: - '@floating-ui/core': 1.5.2 - '@floating-ui/utils': 0.1.6 + '@floating-ui/core': 1.6.0 + '@floating-ui/utils': 0.2.1 dev: false - /@floating-ui/react-dom@2.0.4(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==} + /@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/dom': 1.5.3 + '@floating-ui/dom': 1.6.1 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -593,15 +596,15 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' dependencies: - '@floating-ui/react-dom': 2.0.4(react-dom@18.2.0)(react@18.2.0) + '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) aria-hidden: 1.2.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) tabbable: 6.2.0 dev: false - /@floating-ui/utils@0.1.6: - resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} + /@floating-ui/utils@0.2.1: + resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} dev: false /@humanwhocodes/config-array@0.11.13: @@ -624,25 +627,13 @@ packages: resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} dev: true - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - dependencies: - string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true - /@jridgewell/gen-mapping@0.3.3: resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 + '@jridgewell/trace-mapping': 0.3.22 /@jridgewell/resolve-uri@3.1.1: resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} @@ -655,8 +646,8 @@ packages: /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} dependencies: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 @@ -686,44 +677,59 @@ packages: call-bind: 1.0.5 dev: false - /@mantine/code-highlight@7.4.1(@mantine/core@7.4.1)(@mantine/hooks@7.4.1)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-zfUZuwP2hXnz3BC1H2tH/clc00NS36XQMmkMeVLTKDl8mU3vMiDPxjsODvrieLbat7rUfqaD9mqhJShwCL1D/g==} + /@mantine/code-highlight@7.5.1(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-zCdJ911r7WacTC8aQb66oB299jhcnQCQ8uS1kXYioUvJ/lOc0aiFh659KokmUvIL6ZdowCvffwaodiUFDZcqBw==} peerDependencies: - '@mantine/core': 7.4.1 - '@mantine/hooks': 7.4.1 + '@mantine/core': 7.5.1 + '@mantine/hooks': 7.5.1 react: ^18.2.0 react-dom: ^18.2.0 dependencies: - '@mantine/core': 7.4.1(@mantine/hooks@7.4.1)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0) - '@mantine/hooks': 7.4.1(react@18.2.0) + '@mantine/core': 7.5.1(@mantine/hooks@7.5.1)(@types/react@18.2.51)(react-dom@18.2.0)(react@18.2.0) + '@mantine/hooks': 7.5.1(react@18.2.0) clsx: 2.0.0 highlight.js: 11.9.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /@mantine/core@7.4.1(@mantine/hooks@7.4.1)(@types/react@18.2.45)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-crz9BemmwR8V/h6db9FgznCp0Ssp6rCUYkBBO4JprpH8NDSEblHyWcZZo43IuA1vZptp8eyrhRNJ4nfe8CAYFQ==} + /@mantine/core@7.5.1(@mantine/hooks@7.5.1)(@types/react@18.2.51)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-V7apuQuRubqxTRXb1uxOM43K7tkLRzpbb1ONJ/sj8QRp/26bShkdYp7EVuSKyrQ8DQ5EGYyBBGyzBOQARh41gA==} peerDependencies: - '@mantine/hooks': 7.4.1 + '@mantine/hooks': 7.5.1 react: ^18.2.0 react-dom: ^18.2.0 dependencies: '@floating-ui/react': 0.24.8(react-dom@18.2.0)(react@18.2.0) - '@mantine/hooks': 7.4.1(react@18.2.0) + '@mantine/hooks': 7.5.1(react@18.2.0) clsx: 2.0.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-number-format: 5.3.1(react-dom@18.2.0)(react@18.2.0) - react-remove-scroll: 2.5.7(@types/react@18.2.48)(react@18.2.0) - react-textarea-autosize: 8.5.3(@types/react@18.2.48)(react@18.2.0) + react-remove-scroll: 2.5.7(@types/react@18.2.51)(react@18.2.0) + react-textarea-autosize: 8.5.3(@types/react@18.2.51)(react@18.2.0) type-fest: 3.13.1 transitivePeerDependencies: - '@types/react' dev: false - /@mantine/hooks@7.4.1(react@18.2.0): - resolution: {integrity: sha512-7gV9YR+xZ1L69MGVaSNwV0gaxIz4bCZuGxXTtnuaamDcO/4YiNDtmvdD7/jC/RTa1iJMnZ6YiYrcPXLOn+8saQ==} + /@mantine/dropzone@7.5.1(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pUQt7EwhDkTWbj4OLCbsvbkbp1vCXS6nGm8Y4pTrca1vR9S4+hilR6oULEY0UbQgHq+hfsWKDtnlhLkf45tJXA==} + peerDependencies: + '@mantine/core': 7.5.1 + '@mantine/hooks': 7.5.1 + react: ^18.2.0 + react-dom: ^18.2.0 + dependencies: + '@mantine/core': 7.5.1(@mantine/hooks@7.5.1)(@types/react@18.2.51)(react-dom@18.2.0)(react@18.2.0) + '@mantine/hooks': 7.5.1(react@18.2.0) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-dropzone-esm: 15.0.1(react@18.2.0) + dev: false + + /@mantine/hooks@7.5.1(react@18.2.0): + resolution: {integrity: sha512-LfrEOkX8U2KbkYAU5BMA7FPbMva/TSd65c45W35wHSx3iqYMsoPN9+Ll1zc/HT0XNFp73jGet9cU7VREbAl0/A==} peerDependencies: react: ^18.2.0 dependencies: @@ -765,10 +771,10 @@ packages: resolution: {integrity: sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==} dev: false - /@next/eslint-plugin-next@14.1.0: - resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} + /@next/eslint-plugin-next@14.0.4: + resolution: {integrity: sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==} dependencies: - glob: 10.3.10 + glob: 7.1.7 dev: true /@next/swc-darwin-arm64@14.1.0: @@ -873,13 +879,6 @@ packages: fastq: 1.16.0 dev: true - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true - optional: true - /@pkgr/utils@2.4.2: resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -933,48 +932,49 @@ packages: resolution: {integrity: sha512-Jh4t/593gxs0lJZ/z3NnasKlplXT2f+4y/LZYuaKZW5KAaiVFL/fThhs+17EbUd53jUVJ0QudYCBGbN/psvaqg==} dev: true - /@sentry-internal/feedback@7.94.1: - resolution: {integrity: sha512-NlJn/TEX1MOPfY4bb6FU0Equ6YuaewZ+lIAqYt3HuEoYI7nYApeRGaPuVLkkezN0cmI7oU/+pJ7v83PtYXCFZw==} + /@sentry-internal/feedback@7.99.0: + resolution: {integrity: sha512-exIO1o+bE0MW4z30FxC0cYzJ4ZHSMlDPMHCBDPzU+MWGQc/fb8s58QUrx5Dnm6HTh9G3H+YlroCxIo9u0GSwGQ==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.94.1 - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry/core': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 dev: false - /@sentry-internal/replay-canvas@7.94.1: - resolution: {integrity: sha512-kCFxdIJTbo2z8wnAQ3IqNVI8y2lSOtaSSZeBgeqiertro8Pe/DS8AXUnhXnAQkluM2i2koA+AgUo6/4bUeZXuQ==} + /@sentry-internal/replay-canvas@7.99.0: + resolution: {integrity: sha512-PoIkfusToDq0snfl2M6HJx/1KJYtXxYhQplrn11kYadO04SdG0XGXf4h7wBTMEQ7LDEAtQyvsOu4nEQtTO3YjQ==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.94.1 - '@sentry/replay': 7.94.1 - '@sentry/types': 7.94.1 + '@sentry/core': 7.99.0 + '@sentry/replay': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 dev: false - /@sentry-internal/tracing@7.94.1: - resolution: {integrity: sha512-znxCdrz7tPXm9Bwoe46PW72Zr0Iv7bXT6+b2LNg5fxWiCQVBbQFrMuVvtXEmHxeRRJVEgTh/4TdulB7wrtQIUQ==} + /@sentry-internal/tracing@7.99.0: + resolution: {integrity: sha512-z3JQhHjoM1KdM20qrHwRClKJrNLr2CcKtCluq7xevLtXHJWNAQQbafnWD+Aoj85EWXBzKt9yJMv2ltcXJ+at+w==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.94.1 - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry/core': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 dev: false - /@sentry/browser@7.94.1: - resolution: {integrity: sha512-IUR8B/AEPEzLijZ4Uo5qJsgmIBnCudBqAWd3zAiuk3TWYYOQUEvleddFxffN3n6pFhGx3ArksB+AIQBruttLGA==} + /@sentry/browser@7.99.0: + resolution: {integrity: sha512-bgfoUv3wkwwLgN5YUOe0ibB3y268ZCnamZh6nLFqnY/UBKC1+FXWFdvzVON/XKUm62LF8wlpCybOf08ebNj2yg==} engines: {node: '>=8'} dependencies: - '@sentry-internal/feedback': 7.94.1 - '@sentry-internal/replay-canvas': 7.94.1 - '@sentry-internal/tracing': 7.94.1 - '@sentry/core': 7.94.1 - '@sentry/replay': 7.94.1 - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry-internal/feedback': 7.99.0 + '@sentry-internal/replay-canvas': 7.99.0 + '@sentry-internal/tracing': 7.99.0 + '@sentry/core': 7.99.0 + '@sentry/replay': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 dev: false - /@sentry/cli@1.77.1: - resolution: {integrity: sha512-OtJ7U9LeuPUAY/xow9wwcjM9w42IJIpDtClTKI/RliE685vd/OJUIpiAvebHNthDYpQynvwb/0iuF4fonh+CKw==} + /@sentry/cli@1.77.3: + resolution: {integrity: sha512-c3eDqcDRmy4TFz2bFU5Y6QatlpoBPPa8cxBooaS4aMQpnIdLYPF1xhyyiW0LQlDUNc3rRjNF7oN5qKoaRoMTQQ==} engines: {node: '>= 8'} hasBin: true requiresBuild: true @@ -990,26 +990,26 @@ packages: - supports-color dev: false - /@sentry/core@7.94.1: - resolution: {integrity: sha512-4sjiMnkbGpv9O98YHVZe7fHNwwdYl+zLoCOoEOadtrJ1EYYvnK/MSixN2HJF7g/0s22xd4xY958QyNIRVR+Iiw==} + /@sentry/core@7.99.0: + resolution: {integrity: sha512-vOAtzcAXEUtS/oW7wi3wMkZ3hsb5Ch96gKyrrj/mXdOp2zrcwdNV6N9/pawq2E9P/7Pw8AXw4CeDZztZrjQLuA==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 dev: false - /@sentry/integrations@7.94.1: - resolution: {integrity: sha512-Fw7OxLlGkrVAVO9WtBJezrb5IxxItCTuefv2IfKku+A5EhHtH1AhXYjQynmt0TLLYIUlyBWiatpOngBzS2wSxw==} + /@sentry/integrations@7.99.0: + resolution: {integrity: sha512-q4Nwpc27DTWlR7nDerd1o6KHlT/0usK+3xfBTZ1feVIAHCxt6ohCyZdoQ97+4kQiJJdX47MEmJYsXUlj62yZNg==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.94.1 - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry/core': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 localforage: 1.10.0 dev: false - /@sentry/nextjs@7.94.1(next@14.1.0)(react@18.2.0): - resolution: {integrity: sha512-OOQP/UW82NHnICsUxiVe3tAVfDdvzipxw8F2tZEpqR5Dq6CQ5EGNHMfuGln6wIQFpIdTuLgNwZBRFttHEJ4y8w==} + /@sentry/nextjs@7.99.0(next@14.1.0)(react@18.2.0): + resolution: {integrity: sha512-8eeEPFJjRBiCp2sFUhDLQFdWFagQ2yBvmALZIOIuoMei69N+clYVSxz84beeztbLal0zvRadJO5LAkBCb6d66Q==} engines: {node: '>=8'} peerDependencies: next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0 @@ -1020,16 +1020,16 @@ packages: optional: true dependencies: '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) - '@sentry/core': 7.94.1 - '@sentry/integrations': 7.94.1 - '@sentry/node': 7.94.1 - '@sentry/react': 7.94.1(react@18.2.0) - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 - '@sentry/vercel-edge': 7.94.1 + '@sentry/core': 7.99.0 + '@sentry/integrations': 7.99.0 + '@sentry/node': 7.99.0 + '@sentry/react': 7.99.0(react@18.2.0) + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 + '@sentry/vercel-edge': 7.99.0 '@sentry/webpack-plugin': 1.21.0 chalk: 3.0.0 - next: 14.1.0(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0) + next: 14.1.0(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 resolve: 1.22.8 rollup: 2.78.0 @@ -1039,75 +1039,75 @@ packages: - supports-color dev: false - /@sentry/node@7.94.1: - resolution: {integrity: sha512-30nyrfVbY1vNoWg5ptGW+soykU532VvKLuXiKty3SKEXjp5bv23JrCcVtuwp9KrW4josHOJbxZUqeNni85YplQ==} + /@sentry/node@7.99.0: + resolution: {integrity: sha512-34wYtLddnPcQ8qvKq62AfxowaMFw+GMUZGv7fIs9FxeBqqqn6Ckl0gFCTADudIIBQ3rSbmN7sHJIXdyiQv+pcw==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.94.1 - '@sentry/core': 7.94.1 - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry-internal/tracing': 7.99.0 + '@sentry/core': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 dev: false - /@sentry/react@7.94.1(react@18.2.0): - resolution: {integrity: sha512-7uzmsssy4Y/syIxVDrSWBWoukSsqR+/BqUO98A78NCWZsG9gxDXvD+l7D/o1u6TVkZo6i1z0NNybb1CtB73hug==} + /@sentry/react@7.99.0(react@18.2.0): + resolution: {integrity: sha512-RtHwgzMHJhzJfSQpVG0SDPQYMTGDX3Q37/YWI59S4ALMbSW4/F6n/eQAvGVYZKbh2UCSqgFuRWaXOYkSZT17wA==} engines: {node: '>=8'} peerDependencies: react: 15.x || 16.x || 17.x || 18.x dependencies: - '@sentry/browser': 7.94.1 - '@sentry/core': 7.94.1 - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry/browser': 7.99.0 + '@sentry/core': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 dev: false - /@sentry/replay@7.94.1: - resolution: {integrity: sha512-4wf3CZ1LR2Neh9IiZD0rY8AORS5Dc5HlKfMug026f8KM2aeoDyneM2JFBnPT/ulRnbD2gNciV+kdZiRd5K5jiw==} + /@sentry/replay@7.99.0: + resolution: {integrity: sha512-gyN/I2WpQrLAZDT+rScB/0jnFL2knEVBo8U8/OVt8gNP20Pq8T/rDZKO/TG0cBfvULDUbJj2P4CJryn2p/O2rA==} engines: {node: '>=12'} dependencies: - '@sentry-internal/tracing': 7.94.1 - '@sentry/core': 7.94.1 - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry-internal/tracing': 7.99.0 + '@sentry/core': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 dev: false - /@sentry/types@7.94.1: - resolution: {integrity: sha512-A7CdEXFSgGyWv2BT2p9cAvJfb+dypvOtsY8ZvZvdPLUa7kqCV7ndhURUqKjvMBzsL2GParHn3ehDTl2eVc7pvA==} + /@sentry/types@7.99.0: + resolution: {integrity: sha512-94qwOw4w40sAs5mCmzcGyj8ZUu/KhnWnuMZARRq96k+SjRW/tHFAOlIdnFSrt3BLPvSOK7R3bVAskZQ0N4FTmA==} engines: {node: '>=8'} dev: false - /@sentry/utils@7.94.1: - resolution: {integrity: sha512-gQ2EaMpUU1gGH3S+iqpog9gkXbCo8tlhGYA9a5FUtEtER3D3OAlp8dGFwClwzWDAwzjdLT1+X55zmEptU1cP/A==} + /@sentry/utils@7.99.0: + resolution: {integrity: sha512-cYZy5WNTkWs5GgggGnjfGqC44CWir0pAv4GVVSx0fsup4D4pMKBJPrtub15f9uC+QkUf3vVkqwpBqeFxtmJQTQ==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.94.1 + '@sentry/types': 7.99.0 dev: false - /@sentry/vercel-edge@7.94.1: - resolution: {integrity: sha512-W+ICIbDuky/Oj0IB17PtBBBj89XGS9a/tiH0Ldoy9peem3Ug4ucgfPxkdjF28hhmY1dA8rDp+aGRCv51/Ydcbg==} + /@sentry/vercel-edge@7.99.0: + resolution: {integrity: sha512-9Uw3Iuy8KMlcv71ifnaguwndb1NkHeOAbYcBEeq9W+n0f5ocFZvMlnwszSlVNAL3cK+hlpcBhelXNAO/mBWCfg==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.94.1 - '@sentry/core': 7.94.1 - '@sentry/types': 7.94.1 - '@sentry/utils': 7.94.1 + '@sentry-internal/tracing': 7.99.0 + '@sentry/core': 7.99.0 + '@sentry/types': 7.99.0 + '@sentry/utils': 7.99.0 dev: false /@sentry/webpack-plugin@1.21.0: resolution: {integrity: sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==} engines: {node: '>= 8'} dependencies: - '@sentry/cli': 1.77.1 + '@sentry/cli': 1.77.3 webpack-sources: 3.2.3 transitivePeerDependencies: - encoding - supports-color dev: false - /@supabase/auth-helpers-nextjs@0.8.7(@supabase/supabase-js@2.39.3): - resolution: {integrity: sha512-iYdOjFo0GkRvha340l8JdCiBiyXQuG9v8jnq7qMJ/2fakrskRgHTCOt7ryWbip1T6BExcWKC8SoJrhCzPOxhhg==} + /@supabase/auth-helpers-nextjs@0.9.0(@supabase/supabase-js@2.39.3): + resolution: {integrity: sha512-V+UKFngSCkzAucX3Zi5D4TRiJZUUx0RDme7W217nIkwhCTvJY7Ih2L1cgnAMihQost2YYgTzJ7DrUzz4mm8i8A==} peerDependencies: '@supabase/supabase-js': ^2.19.0 dependencies: @@ -1218,7 +1218,7 @@ packages: use-sync-external-store: 1.2.0(react@18.2.0) dev: false - /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.2): + /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.4): resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} peerDependencies: '@vue/compiler-sfc': 3.x @@ -1233,7 +1233,7 @@ packages: '@babel/types': 7.17.0 javascript-natural-sort: 0.7.1 lodash: 4.17.21 - prettier: 3.2.2 + prettier: 3.2.4 transitivePeerDependencies: - supports-color dev: true @@ -1273,7 +1273,7 @@ packages: /@types/jsonwebtoken@9.0.5: resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} dependencies: - '@types/node': 20.11.5 + '@types/node': 20.11.16 dev: true /@types/jxon@2.0.5: @@ -1313,8 +1313,10 @@ packages: /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - /@types/node@20.4.7: - resolution: {integrity: sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==} + /@types/node@20.11.16: + resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} + dependencies: + undici-types: 5.26.5 /@types/pako@2.0.3: resolution: {integrity: sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q==} @@ -1330,11 +1332,11 @@ packages: /@types/react-dom@18.2.18: resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 dev: true - /@types/react@18.2.48: - resolution: {integrity: sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==} + /@types/react@18.2.51: + resolution: {integrity: sha512-XeoMaU4CzyjdRr3c4IQQtiH7Rpo18V07rYZUucEZQwOUEtGgTXv7e6igQiQ+xnV6MbMe1qjEmKdgMNnfppnXfg==} dependencies: '@types/prop-types': 15.7.11 '@types/scheduler': 0.16.8 @@ -1350,11 +1352,11 @@ packages: /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.4.7 + '@types/node': 20.11.16 dev: false - /@typescript-eslint/parser@6.15.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-MkgKNnsjC6QwcMdlNAel24jjkEO/0hQaMDLqP4S9zq5HBAUJNQB6y+3DwLjX7b3l2b37eNAxMPLwb3/kh8VKdA==} + /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1443,12 +1445,12 @@ packages: resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} engines: {node: '>=0.4.0'} hasBin: true + dev: true /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -1468,8 +1470,8 @@ packages: uri-js: 4.4.1 dev: true - /allotment@1.19.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lQDeuqMkEEzITT56NAXNOWxRXycqVyV62w3X7jVZQS9n+cznDx6RLJMD1cnWcRMfCdPUmAj07FAIR69ueytxDQ==} + /allotment@1.20.0(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-G02sKgkSCIMpQozuuEkBHblv4aWVGrHQJuOgfCZn3YtHrvmfzS5+mu1N5eWUkpucu/JMl/0FmeCta662RtyaAw==} peerDependencies: react: ^17.0.0 || ^18.0.0 react-dom: ^17.0.0 || ^18.0.0 @@ -1494,11 +1496,6 @@ packages: engines: {node: '>=8'} dev: true - /ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - dev: true - /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1511,11 +1508,6 @@ packages: dependencies: color-convert: 2.0.1 - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true - /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} @@ -1642,8 +1634,8 @@ packages: engines: {node: '>=4'} dev: true - /axios@1.6.5: - resolution: {integrity: sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==} + /axios@1.6.7: + resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} dependencies: follow-redirects: 1.15.5 form-data: 4.0.0 @@ -1703,15 +1695,15 @@ packages: dependencies: fill-range: 7.0.1 - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + /browserslist@4.22.3: + resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001571 - electron-to-chromium: 1.4.623 + caniuse-lite: 1.0.30001583 + electron-to-chromium: 1.4.655 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) + update-browserslist-db: 1.0.13(browserslist@4.22.3) dev: false /buffer-equal-constant-time@1.0.1: @@ -1757,12 +1749,8 @@ packages: resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} dev: false - /caniuse-lite@1.0.30001571: - resolution: {integrity: sha512-tYq/6MoXhdezDLFZuCO/TKboTzuQ/xR5cFdgXPfDtM7/kchBO3b4VWghE/OAi/DV7tTdhmLjZiZBZi1fA/GheQ==} - dev: false - - /caniuse-lite@1.0.30001579: - resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + /caniuse-lite@1.0.30001583: + resolution: {integrity: sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==} dev: false /chalk@2.4.2: @@ -2099,18 +2087,14 @@ packages: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} dev: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true - /ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: safe-buffer: 5.2.1 dev: false - /electron-to-chromium@1.4.623: - resolution: {integrity: sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==} + /electron-to-chromium@1.4.655: + resolution: {integrity: sha512-2yszojF7vIZ68adIOvzV4bku8OZad9w5H9xF3ZAMZjPuOjBarlflUkjN6DggdV+L71WZuKUfKUhov/34+G5QHg==} dev: false /elkjs@0.8.2: @@ -2123,10 +2107,6 @@ packages: tape: 4.17.0 dev: false - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true - /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} dev: true @@ -2244,8 +2224,8 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-next@14.1.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==} + /eslint-config-next@14.0.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 typescript: '>=3.3.1' @@ -2253,7 +2233,7 @@ packages: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 14.1.0 + '@next/eslint-plugin-next': 14.0.4 '@rushstack/eslint-patch': 1.7.0 '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 @@ -2269,8 +2249,8 @@ packages: - supports-color dev: true - /eslint-config-prettier@9.1.0(eslint@8.56.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + /eslint-config-prettier@8.10.0(eslint@8.56.0): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -2382,7 +2362,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.23.8 + '@babel/runtime': 7.23.9 aria-query: 5.3.0 array-includes: 3.1.7 array.prototype.flatmap: 1.3.2 @@ -2401,7 +2381,7 @@ packages: object.fromentries: 2.0.7 dev: true - /eslint-plugin-prettier@5.1.3(eslint-config-prettier@8.10.0)(eslint@8.56.0)(prettier@3.2.2): + /eslint-plugin-prettier@5.1.3(eslint-config-prettier@8.10.0)(eslint@8.56.0)(prettier@3.2.4): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -2417,7 +2397,7 @@ packages: dependencies: eslint: 8.56.0 eslint-config-prettier: 8.10.0(eslint@8.56.0) - prettier: 3.2.2 + prettier: 3.2.4 prettier-linter-helpers: 1.0.0 synckit: 0.8.6 dev: true @@ -2700,14 +2680,6 @@ packages: dependencies: is-callable: 1.2.7 - /foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - dev: true - /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -2814,16 +2786,15 @@ packages: is-glob: 4.0.3 dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 dev: true /glob@7.2.3: @@ -3143,11 +3114,6 @@ packages: number-is-nan: 1.0.1 dev: false - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true - /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -3290,15 +3256,6 @@ packages: set-function-name: 2.0.1 dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - dev: true - /javascript-natural-sort@0.7.1: resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} dev: true @@ -3581,11 +3538,6 @@ packages: dependencies: js-tokens: 4.0.0 - /lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} - dev: true - /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: @@ -3633,19 +3585,18 @@ packages: picomatch: 2.3.1 dev: true - /million@2.6.4: - resolution: {integrity: sha512-voUkdd/jHWrG+7NS+mX49Pat+POKdgGW78V7pYMSrTaOjUitR6ySEcAci8hn17Rsx1IMI3+5w41dkADM1J1ZEg==} + /million@3.0.2: + resolution: {integrity: sha512-qOYPx2M+zxDn3oq4oVubiRtD9KL9cMad/f6Vs8V03FfocKfV6AV8fIYzD8I2vvNc2h9jIbVnUIU7QspbYrzTsw==} hasBin: true dependencies: - '@babel/core': 7.23.7 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.7) - '@babel/types': 7.23.6 + '@babel/core': 7.23.9 + '@babel/types': 7.23.9 + '@rollup/pluginutils': 5.1.0(rollup@2.78.0) kleur: 4.1.5 - rollup: 3.29.4 + undici: 6.6.0 unplugin: 1.6.0 transitivePeerDependencies: + - rollup - supports-color dev: false @@ -3693,11 +3644,6 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true - /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -3746,7 +3692,7 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /next@14.1.0(@babel/core@7.23.7)(react-dom@18.2.0)(react@18.2.0): + /next@14.1.0(@babel/core@7.23.9)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==} engines: {node: '>=18.17.0'} hasBin: true @@ -3764,12 +3710,12 @@ packages: '@next/env': 14.1.0 '@swc/helpers': 0.5.2 busboy: 1.6.0 - caniuse-lite: 1.0.30001579 + caniuse-lite: 1.0.30001583 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.23.7)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.23.9)(react@18.2.0) optionalDependencies: '@next/swc-darwin-arm64': 14.1.0 '@next/swc-darwin-x64': 14.1.0 @@ -4028,14 +3974,6 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - lru-cache: 10.1.0 - minipass: 7.0.4 - dev: true - /path-type@1.1.0: resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} engines: {node: '>=0.10.0'} @@ -4104,8 +4042,8 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.2.2: - resolution: {integrity: sha512-HTByuKZzw7utPiDO523Tt2pLtEyK7OibUD9suEJQrPUCYQqrHr74GGX6VidMrovbf/I50mPqr8j/II6oBAuc5A==} + /prettier@3.2.4: + resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} hasBin: true dev: true @@ -4179,6 +4117,16 @@ packages: scheduler: 0.23.0 dev: false + /react-dropzone-esm@15.0.1(react@18.2.0): + resolution: {integrity: sha512-RdeGpqwHnoV/IlDFpQji7t7pTtlC2O1i/Br0LWkRZ9hYtLyce814S71h5NolnCZXsIN5wrZId6+8eQj2EBnEzg==} + engines: {node: '>= 10.13'} + peerDependencies: + react: '>= 16.8 || 18.0.0' + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + dev: false + /react-fast-compare@3.2.2: resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} dev: false @@ -4212,7 +4160,7 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - /react-json-tree@0.18.0(@types/react@18.2.48)(react@18.2.0): + /react-json-tree@0.18.0(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-Qe6HKSXrr++n9Y31nkRJ3XvQMATISpqigH1vEKhLwB56+nk5thTP0ITThpjxY6ZG/ubpVq/aEHIcyLP/OPHxeA==} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4220,7 +4168,7 @@ packages: dependencies: '@babel/runtime': 7.23.6 '@types/lodash': 4.14.202 - '@types/react': 18.2.48 + '@types/react': 18.2.51 react: 18.2.0 react-base16-styling: 0.9.1 dev: false @@ -4244,7 +4192,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /react-remove-scroll-bar@2.3.4(@types/react@18.2.48)(react@18.2.0): + /react-remove-scroll-bar@2.3.4(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} engines: {node: '>=10'} peerDependencies: @@ -4254,13 +4202,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.51)(react@18.2.0) tslib: 2.6.2 dev: false - /react-remove-scroll@2.5.7(@types/react@18.2.48)(react@18.2.0): + /react-remove-scroll@2.5.7(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} engines: {node: '>=10'} peerDependencies: @@ -4270,13 +4218,13 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.2.48)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) + react-remove-scroll-bar: 2.3.4(@types/react@18.2.51)(react@18.2.0) + react-style-singleton: 2.2.1(@types/react@18.2.51)(react@18.2.0) tslib: 2.6.2 - use-callback-ref: 1.3.0(@types/react@18.2.48)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.2.48)(react@18.2.0) + use-callback-ref: 1.3.1(@types/react@18.2.51)(react@18.2.0) + use-sidecar: 1.1.2(@types/react@18.2.51)(react@18.2.0) dev: false /react-simple-typewriter@5.0.1(react-dom@18.2.0)(react@18.2.0): @@ -4290,7 +4238,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /react-style-singleton@2.2.1(@types/react@18.2.48)(react@18.2.0): + /react-style-singleton@2.2.1(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} engines: {node: '>=10'} peerDependencies: @@ -4300,23 +4248,23 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 get-nonce: 1.0.1 invariant: 2.2.4 react: 18.2.0 tslib: 2.6.2 dev: false - /react-textarea-autosize@8.5.3(@types/react@18.2.48)(react@18.2.0): + /react-textarea-autosize@8.5.3(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} engines: {node: '>=10'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.23.6 + '@babel/runtime': 7.23.9 react: 18.2.0 use-composed-ref: 1.3.0(react@18.2.0) - use-latest: 1.2.1(@types/react@18.2.48)(react@18.2.0) + use-latest: 1.2.1(@types/react@18.2.51)(react@18.2.0) transitivePeerDependencies: - '@types/react' dev: false @@ -4486,14 +4434,6 @@ packages: fsevents: 2.3.3 dev: false - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: false - /run-applescript@5.0.0: resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} engines: {node: '>=12'} @@ -4611,11 +4551,6 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true - /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: @@ -4693,24 +4628,6 @@ packages: strip-ansi: 3.0.1 dev: false - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - dev: true - - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - dev: true - /string.prototype.matchall@4.0.10: resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} dependencies: @@ -4761,13 +4678,6 @@ packages: ansi-regex: 5.0.1 dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - dependencies: - ansi-regex: 6.0.1 - dev: true - /strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} @@ -4815,7 +4725,7 @@ packages: tslib: 2.5.0 dev: false - /styled-jsx@5.1.1(@babel/core@7.23.7)(react@18.2.0): + /styled-jsx@5.1.1(@babel/core@7.23.9)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: @@ -4828,7 +4738,7 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.23.7 + '@babel/core': 7.23.9 client-only: 0.0.1 react: 18.2.0 dev: false @@ -4940,7 +4850,7 @@ packages: tslib: 2.6.2 dev: false - /ts-node@10.9.2(@types/node@20.4.7)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.11.16)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -4959,7 +4869,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.5 + '@types/node': 20.11.16 acorn: 8.11.2 acorn-walk: 8.3.1 arg: 4.1.3 @@ -5060,6 +4970,13 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /undici@6.6.0: + resolution: {integrity: sha512-p8VvLAgnx6g9pydV0GG/kciSx3ZCq5PLeEU4yefjoZCc1HSeiMxbrFzYIZlgSMrX3l0CoTJ37C6edu13acE40A==} + engines: {node: '>=18.0'} + dependencies: + '@fastify/busboy': 2.1.0 + dev: false + /undoo@0.5.0: resolution: {integrity: sha512-SPlDcde+AUHoFKeVlH2uBJxqVkw658I4WR2rPoygC1eRCzm3GeoP8S6xXZVJeBVOQQid8X2xUBW0N4tOvvHH3Q==} dependencies: @@ -5070,7 +4987,7 @@ packages: /unplugin@1.6.0: resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==} dependencies: - acorn: 8.11.2 + acorn: 8.11.3 chokidar: 3.5.3 webpack-sources: 3.2.3 webpack-virtual-modules: 0.6.1 @@ -5081,13 +4998,13 @@ packages: engines: {node: '>=8'} dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.2): + /update-browserslist-db@1.0.13(browserslist@4.22.3): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.2 + browserslist: 4.22.3 escalade: 3.1.1 picocolors: 1.0.0 dev: false @@ -5098,8 +5015,8 @@ packages: punycode: 2.3.1 dev: true - /use-callback-ref@1.3.0(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} + /use-callback-ref@1.3.1(@types/react@18.2.51)(react@18.2.0): + resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} engines: {node: '>=10'} peerDependencies: '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -5108,7 +5025,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 react: 18.2.0 tslib: 2.6.2 dev: false @@ -5121,7 +5038,7 @@ packages: react: 18.2.0 dev: false - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.48)(react@18.2.0): + /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} peerDependencies: '@types/react': '*' @@ -5130,11 +5047,11 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 react: 18.2.0 dev: false - /use-latest@1.2.1(@types/react@18.2.48)(react@18.2.0): + /use-latest@1.2.1(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} peerDependencies: '@types/react': '*' @@ -5143,9 +5060,9 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 react: 18.2.0 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.48)(react@18.2.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.51)(react@18.2.0) dev: false /use-long-press@3.2.0(react@18.2.0): @@ -5167,7 +5084,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /use-sidecar@1.1.2(@types/react@18.2.48)(react@18.2.0): + /use-sidecar@1.1.2(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} peerDependencies: @@ -5177,7 +5094,7 @@ packages: '@types/react': optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 detect-node-es: 1.1.0 react: 18.2.0 tslib: 2.6.2 @@ -5310,24 +5227,6 @@ packages: strip-ansi: 3.0.1 dev: false - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -5408,7 +5307,7 @@ packages: engines: {node: '>=10'} dev: true - /zustand@4.5.0(@types/react@18.2.48)(react@18.2.0): + /zustand@4.5.0(@types/react@18.2.51)(react@18.2.0): resolution: {integrity: sha512-zlVFqS5TQ21nwijjhJlx4f9iGrXSL0o/+Dpy4txAP22miJ8Ti6c1Ol1RLNN98BMib83lmDH/2KmLwaNXpjrO1A==} engines: {node: '>=12.7.0'} peerDependencies: @@ -5423,7 +5322,7 @@ packages: react: optional: true dependencies: - '@types/react': 18.2.48 + '@types/react': 18.2.51 react: 18.2.0 use-sync-external-store: 1.2.0(react@18.2.0) dev: false diff --git a/public/assets/404.svg b/public/assets/404.svg deleted file mode 100644 index 98b33a9e4b5..00000000000 --- a/public/assets/404.svg +++ /dev/null @@ -1 +0,0 @@ -startled \ No newline at end of file diff --git a/public/assets/jsoncrack-screenshot.webp b/public/assets/jsoncrack-screenshot.webp deleted file mode 100644 index 9cdcd23f626..00000000000 Binary files a/public/assets/jsoncrack-screenshot.webp and /dev/null differ diff --git a/public/assets/rocket_ship.webp b/public/assets/rocket_ship.webp deleted file mode 100644 index c055b2f7f68..00000000000 Binary files a/public/assets/rocket_ship.webp and /dev/null differ diff --git a/src/app/404/page.tsx b/src/app/404/page.tsx deleted file mode 100644 index a911e0f75e9..00000000000 --- a/src/app/404/page.tsx +++ /dev/null @@ -1,58 +0,0 @@ -"use client"; - -import React from "react"; -import Head from "next/head"; -import { useRouter } from "next/navigation"; -import { Button, Text, Title } from "@mantine/core"; -import styled from "styled-components"; -import Layout from "src/layout/Layout"; - -const StyledNotFound = styled.div` - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - margin-top: 0 40px; - text-align: center; -`; - -const StyledMessage = styled.h4` - color: ${({ theme }) => theme.FULL_WHITE}; - font-size: 25px; - font-weight: 800; - margin: 10px 0; -`; - -const StyledSubMessage = styled.div` - width: 50%; - color: ${({ theme }) => theme.SILVER}; - margin-bottom: 25px; -`; - -const StyledImageWrapper = styled.div` - width: 300px; -`; - -const NotFound: React.FC = () => { - const { push } = useRouter(); - - return ( - - - - - - - not found - - WIZARDS BEHIND CURTAINS? - Looks like you're lost, let's head back to the home! - - - - ); -}; - -export default NotFound; diff --git a/src/app/docs/page.tsx b/src/app/docs/page.tsx index e0d7956b853..8cb21b55d24 100644 --- a/src/app/docs/page.tsx +++ b/src/app/docs/page.tsx @@ -43,7 +43,7 @@ const Docs = () => { Documentation - JSON Crack - + Documentation diff --git a/src/app/editor/page.tsx b/src/app/editor/page.tsx index ff2e0af680b..3384f5991c6 100644 --- a/src/app/editor/page.tsx +++ b/src/app/editor/page.tsx @@ -14,7 +14,7 @@ import useJson from "src/store/useJson"; const Panes = dynamic(() => import("src/containers/Editor/Panes")); -export const StyledPageWrapper = styled.div` +const StyledPageWrapper = styled.div` height: calc(100vh - 27px); width: 100%; @@ -23,7 +23,7 @@ export const StyledPageWrapper = styled.div` } `; -export const StyledEditorWrapper = styled.div` +const StyledEditorWrapper = styled.div` width: 100%; height: 100%; overflow: hidden; diff --git a/src/app/global-error.tsx b/src/app/global-error.tsx new file mode 100644 index 00000000000..94ff39d33c8 --- /dev/null +++ b/src/app/global-error.tsx @@ -0,0 +1,37 @@ +"use client"; + +import React from "react"; +import Head from "next/head"; +import { Button, Stack, Text, Title } from "@mantine/core"; +import Layout from "src/layout/Layout"; + +const GlobalError = ({ + error, + reset, +}: { + error: Error & { digest?: string }; + reset: () => void; +}) => { + return ( + <Layout> + <Head> + <meta name="robots" content="noindex,nofollow" /> + </Head> + <Stack mt={100} justify="center" align="center"> + <Title fz={150} style={{ fontFamily: "monospace" }}> + 500 + + Something bad just happened... + + Our servers could not handle your request. Don't worry, our development team was + already notified. Try refreshing the page. + + + + + ); +}; + +export default GlobalError; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 64279818864..a943eef266a 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,5 +1,7 @@ import React from "react"; import { Metadata } from "next"; +import { ColorSchemeScript } from "@mantine/core"; +import "@mantine/core/styles.css"; import StyledComponentsRegistry from "src/lib/registry"; import CustomAppInit from "./CustomAppInit"; @@ -37,6 +39,9 @@ export const viewport = { export default function Layout({ children }: { children: React.ReactNode }) { return ( + + + {children} diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx index 2c6f5f1e419..5e7269a3a96 100644 --- a/src/app/not-found.tsx +++ b/src/app/not-found.tsx @@ -1,45 +1,32 @@ "use client"; import React from "react"; -import { Metadata } from "next"; -import { redirect } from "next/navigation"; -import { Button, Text, Title } from "@mantine/core"; -import styled from "styled-components"; +import Head from "next/head"; +import Link from "next/link"; +import { Button, Stack, Text, Title } from "@mantine/core"; import Layout from "src/layout/Layout"; -const StyledNotFound = styled.div` - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - margin-top: 0 40px; - text-align: center; -`; - -const StyledImageWrapper = styled.div` - width: 300px; -`; - -export const metadata: Metadata = { - robots: { - index: false, - follow: false, - }, -}; - export default function NotFound() { return ( - - - not found - - WIZARDS BEHIND CURTAINS? - Looks like you're lost, let's head back to the home! - - + + + + + + 404 + + Nothing to see here + + Page you are trying to open does not exist. You may have mistyped the address, or the page + has been moved to another URL. If you think this is an error contact support. + + + + + ); } diff --git a/src/app/page.tsx b/src/app/page.tsx index 031811f7d22..5fd67ac8d04 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -3,7 +3,7 @@ import React from "react"; import Head from "next/head"; import Link from "next/link"; -import { Button, Group, Stack, Text } from "@mantine/core"; +import { Button, Group, Stack } from "@mantine/core"; import styled from "styled-components"; import { FaChevronRight } from "react-icons/fa"; import { Typewriter } from "react-simple-typewriter"; @@ -33,7 +33,7 @@ const StyledHeroSectionBody = styled.div` overflow: hidden; backdrop-filter: blur(1px); -webkit-backdrop-filter: blur(1px); - height: calc(100vh - 111px); + height: calc(100vh - 112px); text-align: center; @media only screen and (max-width: 1200px) { @@ -41,13 +41,13 @@ const StyledHeroSectionBody = styled.div` } `; -const StyledHighlightedText = styled(Text)` +const StyledHighlightedText = styled.span` font-size: 40px; font-weight: 800; display: inline; - background-color: gray; - background-image: linear-gradient(45deg, gray, slategray); + background-color: #252525; + background-image: linear-gradient(5deg, #545050, #fff7f8); background-size: 100%; -webkit-background-clip: text; background-clip: text; @@ -138,7 +138,7 @@ const HeroSection = () => ( ); -export const HomePage = () => { +export default function Page() { return ( @@ -147,6 +147,4 @@ export const HomePage = () => { ); -}; - -export default HomePage; +} diff --git a/src/app/pricing/page.tsx b/src/app/pricing/page.tsx index 4b3809a27e3..8257c2c91e8 100644 --- a/src/app/pricing/page.tsx +++ b/src/app/pricing/page.tsx @@ -211,11 +211,11 @@ const Pricing = () => { - - Join alpha test of JC AI{" "} + + Join alpha test of AI{" "} - + diff --git a/src/components/PromptInput/index.tsx b/src/components/PromptInput/index.tsx index 0851b542332..db2c4819013 100644 --- a/src/components/PromptInput/index.tsx +++ b/src/components/PromptInput/index.tsx @@ -1,5 +1,14 @@ import React from "react"; -import { ActionIcon, TextInput, Loader, Tooltip, HoverCard, Flex, Badge } from "@mantine/core"; +import { + ActionIcon, + TextInput, + Loader, + Tooltip, + HoverCard, + Flex, + Badge, + Text, +} from "@mantine/core"; import { getHotkeyHandler } from "@mantine/hooks"; import styled from "styled-components"; import { FunctionsHttpError } from "@supabase/supabase-js"; @@ -39,7 +48,7 @@ const StyledPromptInput = styled(TextInput)` } ::placeholder { - color: ${({ theme }) => theme.PROMPT_PLACEHOLDER_COLOR}; + color: ${({ theme }) => theme.PROMPT_PLACEHOLDER_COLOR} !important; } `; diff --git a/src/containers/Editor/BottomBar.tsx b/src/containers/Editor/BottomBar.tsx index 214e1e55d11..85a641f2936 100644 --- a/src/containers/Editor/BottomBar.tsx +++ b/src/containers/Editor/BottomBar.tsx @@ -154,6 +154,7 @@ export const BottomBar = () => { setHasChanges, setVisible, user, + pathname, ]); const setPrivate = async () => { diff --git a/src/containers/Modals/ImportModal/index.tsx b/src/containers/Modals/ImportModal/index.tsx index 3da9465f9e2..7847adb0ffd 100644 --- a/src/containers/Modals/ImportModal/index.tsx +++ b/src/containers/Modals/ImportModal/index.tsx @@ -1,61 +1,37 @@ import React from "react"; -import { Modal, Group, Button, TextInput, Stack, Divider, ModalProps } from "@mantine/core"; +import { + Modal, + Group, + Button, + TextInput, + Stack, + Divider, + ModalProps, + Paper, + Text, +} from "@mantine/core"; +import { Dropzone } from "@mantine/dropzone"; import styled from "styled-components"; import toast from "react-hot-toast"; import { AiOutlineUpload } from "react-icons/ai"; +import { FileFormat } from "src/enums/file.enum"; import useFile from "src/store/useFile"; -const StyledUploadWrapper = styled.label` - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - background: ${({ theme }) => theme.GRID_BG_COLOR}; - border: 2px dashed ${({ theme }) => theme.BACKGROUND_TERTIARY}; - border-radius: 5px; - min-height: 200px; - padding: 16px; - cursor: pointer; - - input[type="file"] { - display: none; - } -`; - const StyledFileName = styled.span` padding-top: 14px; color: ${({ theme }) => theme.INTERACTIVE_NORMAL}; `; -const StyledUploadMessage = styled.h3` - color: ${({ theme }) => theme.INTERACTIVE_ACTIVE}; - margin-bottom: 0; -`; - export const ImportModal: React.FC = ({ opened, onClose }) => { - const setContents = useFile(state => state.setContents); const [url, setURL] = React.useState(""); - const [jsonFile, setJsonFile] = React.useState(null); - - const handleFileChange = (e: React.ChangeEvent) => { - if (e.target.files) setJsonFile(e.target.files?.item(0)); - }; + const [file, setFile] = React.useState(null); - const handleFileDrag = (e: React.DragEvent) => { - e.preventDefault(); - - if (e.type === "drop" && e.dataTransfer.files.length) { - if (e.dataTransfer.files[0].type === "application/json") { - setJsonFile(e.dataTransfer.files[0]); - } else { - toast.error("Please upload JSON file!"); - } - } - }; + const setContents = useFile(state => state.setContents); + const setFormat = useFile(state => state.setFormat); const handleImportFile = () => { if (url) { - setJsonFile(null); + setFile(null); toast.loading("Loading...", { id: "toastFetch" }); return fetch(url) @@ -66,21 +42,31 @@ export const ImportModal: React.FC = ({ opened, onClose }) => { }) .catch(() => toast.error("Failed to fetch JSON!")) .finally(() => toast.dismiss("toastFetch")); - } - - if (jsonFile) { - const reader = new FileReader(); + } else if (file) { + const lastIndex = file.name.lastIndexOf("."); + const format = file.name.substring(lastIndex + 1); + setFormat(format as FileFormat); - reader.readAsText(jsonFile, "UTF-8"); - reader.onload = function (data) { - if (typeof data.target?.result === "string") setContents({ contents: data.target?.result }); + file.text().then(text => { + setContents({ contents: text }); + setFile(null); + setURL(""); onClose(); - }; + }); } }; return ( - + { + setFile(null); + setURL(""); + onClose(); + }} + centered + > = ({ opened, onClose }) => { placeholder="URL of JSON to fetch" data-autofocus /> - - - - Click Here to Upload JSON - {jsonFile?.name ?? "None"} - + + setFile(files[0])} + onReject={files => toast.error(`Unable to load file ${files[0].file.name}`)} + maxSize={500 * 1024} + maxFiles={1} + p="md" + accept={[ + "application/json", + "application/x-yaml", + "text/csv", + "application/xml", + "application/toml", + ]} + > + + + Drop here or click to upload files + + (Max 500 Kb) + + + {file?.name ?? "None"} + + + + - diff --git a/src/containers/Modals/JWTModal/index.tsx b/src/containers/Modals/JWTModal/index.tsx index 782366429bd..420f91bb95a 100644 --- a/src/containers/Modals/JWTModal/index.tsx +++ b/src/containers/Modals/JWTModal/index.tsx @@ -1,5 +1,5 @@ import React from "react"; -import { Modal, Button, ModalProps, Textarea, Divider } from "@mantine/core"; +import { Modal, Button, ModalProps, Textarea, Divider, Group } from "@mantine/core"; import { decode } from "jsonwebtoken"; import useFile from "src/store/useFile"; @@ -23,13 +23,13 @@ export const JWTModal: React.FC = ({ opened, onClose }) => { value={token} onChange={e => setToken(e.target.value)} autosize - minRows={4} + minRows={5} data-autofocus /> - - + + + + ); }; diff --git a/src/containers/Modals/ReviewModal/index.tsx b/src/containers/Modals/ReviewModal/index.tsx index b4116914054..d5f2e559c1e 100644 --- a/src/containers/Modals/ReviewModal/index.tsx +++ b/src/containers/Modals/ReviewModal/index.tsx @@ -41,6 +41,8 @@ export const ReviewModal: React.FC = ({ opened, onClose }) => { minLength={10} maxLength={500} minRows={5} + maxRows={10} + autosize /> 500/{review.length} diff --git a/src/containers/Toolbar/FileMenu.tsx b/src/containers/Toolbar/FileMenu.tsx new file mode 100644 index 00000000000..550bfe6582f --- /dev/null +++ b/src/containers/Toolbar/FileMenu.tsx @@ -0,0 +1,42 @@ +import React from "react"; +import { Flex, Menu } from "@mantine/core"; +import { CgChevronDown } from "react-icons/cg"; +import useFile from "src/store/useFile"; +import useModal from "src/store/useModal"; +import * as Styles from "./styles"; + +export const FileMenu = () => { + const setVisible = useModal(state => state.setVisible); + const getContents = useFile(state => state.getContents); + const getFormat = useFile(state => state.getFormat); + + const handleSave = () => { + const a = document.createElement("a"); + const file = new Blob([getContents()], { type: "text/plain" }); + + a.href = window.URL.createObjectURL(file); + a.download = `jsoncrack.${getFormat()}`; + a.click(); + }; + + return ( + + + + + File + + + + + + setVisible("import")(true)}> + Import + + + Export + + + + ); +}; diff --git a/src/containers/Toolbar/OptionsMenu.tsx b/src/containers/Toolbar/OptionsMenu.tsx index f01243c7801..d1edaf8da3b 100644 --- a/src/containers/Toolbar/OptionsMenu.tsx +++ b/src/containers/Toolbar/OptionsMenu.tsx @@ -70,19 +70,17 @@ export const OptionsMenu = () => { > Dark Mode - {premium && ( - } - onClick={() => toggleAI(!aiEnabled)} - > - - JSON Crack AI{" "} - - Alpha - - - - )} + } + onClick={() => toggleAI(!aiEnabled)} + > + + JSON Crack AI + + Alpha + + + ); diff --git a/src/containers/Toolbar/ViewMenu.tsx b/src/containers/Toolbar/ViewMenu.tsx index bde24c9ac6c..04667cc6220 100644 --- a/src/containers/Toolbar/ViewMenu.tsx +++ b/src/containers/Toolbar/ViewMenu.tsx @@ -1,12 +1,14 @@ import React from "react"; -import { Menu, Flex, Text } from "@mantine/core"; +import { Menu, Flex, Text, SegmentedControl } from "@mantine/core"; import { useHotkeys } from "@mantine/hooks"; import ReactGA from "react-ga4"; import toast from "react-hot-toast"; -import { CgChevronDown, CgArrowsShrinkH, CgArrowsMergeAltH } from "react-icons/cg"; +import { CgChevronDown } from "react-icons/cg"; import { VscExpandAll, VscCollapseAll, VscTarget } from "react-icons/vsc"; +import { ViewMode } from "src/enums/viewMode.enum"; import useToggleHide from "src/hooks/useToggleHide"; import { getNextDirection } from "src/lib/utils/graph/getNextDirection"; +import useConfig from "src/store/useConfig"; import useGraph from "src/store/useGraph"; import * as Styles from "./styles"; @@ -20,19 +22,14 @@ function rotateLayout(direction: "LEFT" | "RIGHT" | "DOWN" | "UP") { export const ViewMenu = () => { const { validateHiddenNodes } = useToggleHide(); const [coreKey, setCoreKey] = React.useState("CTRL"); - const toggleFold = useGraph(state => state.toggleFold); const setDirection = useGraph(state => state.setDirection); const direction = useGraph(state => state.direction); const expandGraph = useGraph(state => state.expandGraph); const collapseGraph = useGraph(state => state.collapseGraph); const focusFirstNode = useGraph(state => state.focusFirstNode); - const foldNodes = useGraph(state => state.foldNodes); const graphCollapsed = useGraph(state => state.graphCollapsed); - - const toggleFoldNodes = () => { - toggleFold(!foldNodes); - toast(`${foldNodes ? "Unfolded" : "Folded"} nodes`); - }; + const viewMode = useConfig(state => state.viewMode); + const setViewMode = useConfig(state => state.setViewMode); const toggleDirection = () => { const nextDirection = getNextDirection(direction || "RIGHT"); @@ -49,7 +46,6 @@ export const ViewMenu = () => { useHotkeys([ ["mod+shift+d", toggleDirection], - ["mod+shift+f", toggleFoldNodes], ["mod+shift+c", toggleExpandCollapseGraph], [ "mod+f", @@ -76,66 +72,63 @@ export const ViewMenu = () => { - { - toggleDirection(); - ReactGA.event({ - action: "toggle_layout_direction", - category: "User", - label: "Tools", - }); - }} - leftSection={} - rightSection={ - - {coreKey} Shift D - - } - > - Rotate Layout - - { - toggleFoldNodes(); - ReactGA.event({ - action: "toggle_fold_nodes", - category: "User", - label: "Tools", - }); - }} - leftSection={foldNodes ? : } - rightSection={ - - {coreKey} Shift F - - } - > - {foldNodes ? "Unfold" : "Fold"} Nodes - - { - toggleExpandCollapseGraph(); - ReactGA.event({ - action: "toggle_collapse_nodes", - category: "User", - label: "Tools", - }); - }} - leftSection={graphCollapsed ? : } - rightSection={ - - {coreKey} Shift C - - } - > - {graphCollapsed ? "Expand" : "Collapse"} Nodes - - }> - Focus to First Node - + setViewMode(e as ViewMode)} + data={[ + { value: ViewMode.Graph, label: "Graph" }, + { value: ViewMode.Tree, label: "Tree" }, + ]} + fullWidth + /> + {viewMode === ViewMode.Graph && ( + <> + { + toggleDirection(); + ReactGA.event({ + action: "toggle_layout_direction", + category: "User", + label: "Tools", + }); + }} + leftSection={} + rightSection={ + + {coreKey} Shift D + + } + > + Rotate Layout + + { + toggleExpandCollapseGraph(); + ReactGA.event({ + action: "toggle_collapse_nodes", + category: "User", + label: "Tools", + }); + }} + leftSection={graphCollapsed ? : } + rightSection={ + + {coreKey} Shift C + + } + > + {graphCollapsed ? "Expand" : "Collapse"} Nodes + + }> + Focus to First Node + + + )} ); diff --git a/src/containers/Toolbar/ViewModeMenu.tsx b/src/containers/Toolbar/ViewModeMenu.tsx deleted file mode 100644 index 43294c54317..00000000000 --- a/src/containers/Toolbar/ViewModeMenu.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import React from "react"; -import { Menu, Flex, SegmentedControl } from "@mantine/core"; -import { CgChevronDown } from "react-icons/cg"; -import { ViewMode } from "src/enums/viewMode.enum"; -import useConfig from "src/store/useConfig"; -import * as Styles from "./styles"; - -export const ViewModeMenu = () => { - const viewMode = useConfig(state => state.viewMode); - const setViewMode = useConfig(state => state.setViewMode); - - return ( - - - - - View Mode - - - - - setViewMode(e as ViewMode)} - data={[ - { value: ViewMode.Graph, label: "Graph" }, - { value: ViewMode.Tree, label: "Tree" }, - ]} - /> - - - ); -}; diff --git a/src/containers/Toolbar/index.tsx b/src/containers/Toolbar/index.tsx index 36c65d6e635..267775a4980 100644 --- a/src/containers/Toolbar/index.tsx +++ b/src/containers/Toolbar/index.tsx @@ -8,15 +8,14 @@ import { SearchInput } from "src/components/SearchInput"; import { FileFormat } from "src/enums/file.enum"; import { JSONCrackLogo } from "src/layout/JsonCrackLogo"; import useFile from "src/store/useFile"; -import useJson from "src/store/useJson"; import useModal from "src/store/useModal"; import useUser from "src/store/useUser"; import { AccountMenu } from "./AccountMenu"; +import { FileMenu } from "./FileMenu"; import { Logo } from "./Logo"; import { OptionsMenu } from "./OptionsMenu"; import { ToolsMenu } from "./ToolsMenu"; import { ViewMenu } from "./ViewMenu"; -import { ViewModeMenu } from "./ViewModeMenu"; import { ZoomMenu } from "./ZoomMenu"; import * as Styles from "./styles"; @@ -31,22 +30,11 @@ function fullscreenBrowser() { } export const Toolbar: React.FC<{ isWidget?: boolean }> = ({ isWidget = false }) => { - const getJson = useJson(state => state.getJson); const setVisible = useModal(state => state.setVisible); - const setFormat = useFile(state => state.setFormat); const format = useFile(state => state.format); const premium = useUser(state => state.premium); - const handleSave = () => { - const a = document.createElement("a"); - const file = new Blob([getJson()], { type: "text/plain" }); - - a.href = window.URL.createObjectURL(file); - a.download = "jsoncrack.json"; - a.click(); - }; - return ( {isWidget && } @@ -74,18 +62,12 @@ export const Toolbar: React.FC<{ isWidget?: boolean }> = ({ isWidget = false }) ]} /> - - setVisible("import")(true)}> - Import - + setVisible("cloud")(true)}> Cloud - - Download - )} diff --git a/src/layout/Navbar/index.tsx b/src/layout/Navbar/index.tsx index 7f6c7ca4d05..38d96629004 100644 --- a/src/layout/Navbar/index.tsx +++ b/src/layout/Navbar/index.tsx @@ -271,7 +271,7 @@ export const Navbar = () => { - + Unlock premium features now with ~30% discount on the Premium plan! diff --git a/src/lib/utils/data/encode.ts b/src/lib/utils/data/encode.ts new file mode 100644 index 00000000000..66f0e9b7706 --- /dev/null +++ b/src/lib/utils/data/encode.ts @@ -0,0 +1,89 @@ +import { deflate, inflate } from "pako"; + +// fast, Buffer-compatible implem +export const toByteString = (data: string | Uint8Array | ArrayBuffer): Promise => { + return new Promise((resolve, reject) => { + const blob = + typeof data === "string" + ? new Blob([new TextEncoder().encode(data)]) + : new Blob([data instanceof Uint8Array ? data : new Uint8Array(data)]); + const reader = new FileReader(); + reader.onload = event => { + if (!event.target || typeof event.target.result !== "string") { + return reject(new Error("couldn't convert to byte string")); + } + resolve(event.target.result); + }; + reader.readAsBinaryString(blob); + }); +}; + +type EncodedData = { + encoded: string; + encoding: "bstring"; + /** whether text is compressed (zlib) */ + compressed: boolean; + /** version for potential migration purposes */ + version?: string; +}; + +/** + * Encodes (and potentially compresses via zlib) text to byte string + */ +export const encode = async ({ + text, + compress, +}: { + text: string; + /** defaults to `true`. If compression fails, falls back to bstring alone. */ + compress?: boolean; +}): Promise => { + let deflated!: string; + if (compress !== false) { + try { + deflated = await toByteString(deflate(text)); + } catch (error: any) { + console.error("encode: cannot deflate", error); + } + } + return { + version: "1", + encoding: "bstring", + compressed: !!deflated, + encoded: deflated || (await toByteString(text)), + }; +}; + +const byteStringToArrayBuffer = (byteString: string) => { + const buffer = new ArrayBuffer(byteString.length); + const bufferView = new Uint8Array(buffer); + for (let i = 0, len = byteString.length; i < len; i++) { + bufferView[i] = byteString.charCodeAt(i); + } + return buffer; +}; + +const byteStringToString = (byteString: string) => { + return new TextDecoder("utf-8").decode(byteStringToArrayBuffer(byteString)); +}; + +export const decode = async (data: EncodedData): Promise => { + let decoded: string; + + switch (data.encoding) { + case "bstring": + // if compressed, do not double decode the bstring + decoded = data.compressed ? data.encoded : await byteStringToString(data.encoded); + break; + default: + throw new Error(`decode: unknown encoding "${data.encoding}"`); + } + + if (data.compressed) { + return inflate(new Uint8Array(byteStringToArrayBuffer(decoded)), { + to: "string", + }); + } + + return decoded; +}; diff --git a/src/lib/utils/graph/calculateNodeSize.ts b/src/lib/utils/graph/calculateNodeSize.ts index a7b30184353..181ab8df130 100644 --- a/src/lib/utils/graph/calculateNodeSize.ts +++ b/src/lib/utils/graph/calculateNodeSize.ts @@ -1,6 +1,5 @@ import { firaMono } from "src/constants/fonts"; import useConfig from "src/store/useConfig"; -import useGraph from "src/store/useGraph"; type Text = string | [string, string][]; type Size = { width: number; height: number }; @@ -53,11 +52,10 @@ const sizeCache = new Map(); setInterval(() => sizeCache.clear(), 120_000); export const calculateNodeSize = (text: Text, isParent = false) => { - const { foldNodes } = useGraph.getState(); const { imagePreviewEnabled } = useConfig.getState(); const isImage = isContentImage(text) && imagePreviewEnabled; - const cacheKey = [text, isParent, foldNodes].toString(); + const cacheKey = [text, isParent].toString(); // check cache if data already exists if (sizeCache.has(cacheKey)) { @@ -74,8 +72,6 @@ export const calculateNodeSize = (text: Text, isParent = false) => { sizes.height = 80; } - if (foldNodes) sizes.width = 300; - if (isParent && foldNodes) sizes.width = 170; if (isParent) sizes.width += 100; if (sizes.width > 700) sizes.width = 700; diff --git a/src/pages/_error.tsx b/src/pages/_error.tsx deleted file mode 100644 index 5246e70c54a..00000000000 --- a/src/pages/_error.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react"; -import { useRouter } from "next/router"; -import { Button } from "@mantine/core"; -import styled from "styled-components"; - -const StyledNotFound = styled.div` - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - margin-top: 0 40px; - text-align: center; -`; - -const StyledMessage = styled.h4` - color: ${({ theme }) => theme.FULL_WHITE}; - font-size: 25px; - font-weight: 800; - margin: 10px 0; -`; - -const StyledSubMessage = styled.div` - width: 50%; - color: ${({ theme }) => theme.SILVER}; - margin-bottom: 25px; -`; - -const StyledImageWrapper = styled.div` - width: 300px; -`; - -const NotFound: React.FC = () => { - const router = useRouter(); - - return ( - - - not found - - WIZARDS BEHIND CURTAINS? - - Looks like you're lost, let's head back to the home! - - - - ); -}; - -export default NotFound; diff --git a/src/store/useGraph.ts b/src/store/useGraph.ts index da8f043f4f2..075744f91ac 100644 --- a/src/store/useGraph.ts +++ b/src/store/useGraph.ts @@ -12,7 +12,6 @@ export interface Graph { direction: CanvasDirection; loading: boolean; graphCollapsed: boolean; - foldNodes: boolean; fullscreen: boolean; collapseAll: boolean; nodes: NodeData[]; @@ -29,7 +28,6 @@ const initialStates: Graph = { direction: "RIGHT", loading: true, graphCollapsed: false, - foldNodes: false, fullscreen: false, collapseAll: false, nodes: [], @@ -54,7 +52,6 @@ interface GraphActions { collapseGraph: () => void; getCollapsedNodeIds: () => string[]; getCollapsedEdgeIds: () => string[]; - toggleFold: (value: boolean) => void; toggleFullscreen: (value: boolean) => void; toggleCollapseAll: (value: boolean) => void; zoomIn: () => void; @@ -215,10 +212,6 @@ const useGraph = create((set, get) => ({ viewPort?.camera?.centerFitElementIntoView(canvas); } }, - toggleFold: foldNodes => { - set({ foldNodes }); - get().setGraph(); - }, toggleFullscreen: fullscreen => set({ fullscreen }), setViewPort: viewPort => set({ viewPort }), }));