diff --git a/.env b/.env index 39b5f4fe4bcfa64bc04e2bc1079ca35f04ed5eab..8443be9ff582d3200bc967518837e930b83710df 100644 --- a/.env +++ b/.env @@ -1,4 +1,6 @@ +NEXT_PUBLIC_DOMAIN="https://aitube.at" + NEXT_PUBLIC_SHOW_BETA_FEATURES="false" NEXT_PUBLIC_DEVELOPER_MODE="false" diff --git a/README.md b/README.md index ec804f6dba112da3331c382845c280ac53491b33..78d577a813f88ea4da356dbc0ade835b3313ed97 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ --- -title: AI Tube +title: AiTube emoji: 🍿 colorFrom: red colorTo: red @@ -9,7 +9,7 @@ app_port: 3000 disable_embedding: false --- -# 🍿 AI Tube +# 🍿 AiTube ## FAQ @@ -19,7 +19,7 @@ There will be a UI to edit them in the future ### How often videos are generated? -There is a script (called the AI Tube Robot - code is also available, see my profile) which checks the Hugging Face platform every 5 minutes for new content. +There is a script (called the AiTube Robot - code is also available, see my profile) which checks the Hugging Face platform every 5 minutes for new content. However, once it starts generating a video, the bot will be kept busy for an hour or so (sometimes more), and during this time the other videos will wait patiently. @@ -27,7 +27,7 @@ and during this time the other videos will wait patiently. ### My video failed to generate! Is it lost? That's the beauty of the dataset system: as long as you keep your video in your dataset, -and it is not published yet (is not visible on the AI Tube home page), then for the AI Tube Robot it will still be marked as "TODO". +and it is not published yet (is not visible on the AiTube home page), then for the AiTube Robot it will still be marked as "TODO". So.. you normally have nothing to do (unless your video config or channel config is really damaged or invalid). @@ -42,7 +42,7 @@ This delay will be reduced in the future. ### Videos are taking too long to generate -AI Tube is about generating videos in the background, slowly. +AiTube is about generating videos in the background, slowly. It's the whole concept: to generate multi-minutes videos, with lot of stuff like audio, speech etc (if you are only interested in generate a 2 to 4 sec silent video, I suggest you use ComfyUI, Automatic1111 stable-diffusion-webui, or RunwayML or Pika Labs if your prefer commercial services). @@ -70,9 +70,9 @@ This is all new technology based on research tools, so sometimes they can crash, This is a bug, it will be fixed in the future but I haven't had the opportunity to take a look yet (the cause is that I don't generate the video based on audio length yet). -### Can I clone AI Tube or download it to run on my machine? +### Can I clone AiTube or download it to run on my machine? -AI Tube is designed to be a unique community and platform, not a downloadable tool or app. +AiTube is designed to be a unique community and platform, not a downloadable tool or app. Maybe one day there will be an offline version (similar to how my latent browser project worked), but for the moment the focus is on developing it as a community rather than a tool that can be cloned, rebranded, wrapped into ads by someone else etc. ### My video has been generated, but I don't see it anymore diff --git a/package-lock.json b/package-lock.json index 0f560f474ee91c017a66439eae159a47c6cbafb7..bbae859dfa9b334df3de1bbfa141c79c3f81bdc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,27 +9,34 @@ "version": "0.0.0", "dependencies": { "@huggingface/hub": "0.12.3-oauth", - "@huggingface/inference": "^2.6.4", "@jcoreio/async-throttle": "^1.6.0", - "@photo-sphere-viewer/core": "^5.5.1", - "@photo-sphere-viewer/video-plugin": "^5.5.1", + "@photo-sphere-viewer/core": "^5.7.2", + "@photo-sphere-viewer/equirectangular-video-adapter": "^5.7.2", + "@photo-sphere-viewer/gyroscope-plugin": "^5.7.2", + "@photo-sphere-viewer/markers-plugin": "^5.7.2-fix.1", + "@photo-sphere-viewer/overlays-plugin": "^5.7.2", + "@photo-sphere-viewer/resolution-plugin": "^5.7.2", + "@photo-sphere-viewer/settings-plugin": "^5.7.2", + "@photo-sphere-viewer/stereo-plugin": "^5.7.2", + "@photo-sphere-viewer/video-plugin": "^5.7.2", + "@photo-sphere-viewer/visible-range-plugin": "^5.7.2", "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-avatar": "^1.0.3", + "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-collapsible": "^1.0.3", - "@radix-ui/react-dialog": "^1.0.4", - "@radix-ui/react-dropdown-menu": "^2.0.5", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-menubar": "^1.0.3", - "@radix-ui/react-popover": "^1.0.6", - "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-menubar": "^1.0.4", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slider": "^1.1.2", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-switch": "^1.0.3", - "@radix-ui/react-toast": "^1.1.4", - "@radix-ui/react-tooltip": "^1.0.6", + "@radix-ui/react-toast": "^1.1.5", + "@radix-ui/react-tooltip": "^1.0.7", "@react-spring/web": "^9.7.3", "@types/lodash.debounce": "^4.0.9", "@types/node": "20.4.2", @@ -38,49 +45,49 @@ "@types/uuid": "^9.0.2", "@upstash/query": "^0.0.2", "@upstash/redis": "^1.28.3", - "alchemy-sdk": "^3.1.2", - "autoprefixer": "10.4.14", - "class-variance-authority": "^0.6.1", - "clsx": "^2.0.0", - "cmdk": "^0.2.0", + "alchemy-sdk": "^3.2.1", + "autoprefixer": "10.4.19", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "cmdk": "^1.0.0", "cookies-next": "^2.1.2", - "date-fns": "^2.30.0", + "date-fns": "^3.6.0", "eslint": "8.45.0", "eslint-config-next": "13.4.10", "fastest-levenshtein": "^1.0.16", + "gsplat": "^1.2.3", "hash-wasm": "^4.11.0", "lodash.debounce": "^4.0.8", "lucide-react": "^0.260.0", "markdown-yaml-metadata-parser": "^3.0.0", "minisearch": "^6.3.0", - "next": "^14.1.0", - "photo-sphere-viewer-lensflare-plugin": "^2.0.1", + "next": "^14.1.4", + "photo-sphere-viewer-lensflare-plugin": "^2.1.2", "pick": "^0.0.1", - "postcss": "8.4.26", - "qs": "^6.11.2", + "postcss": "8.4.38", + "qs": "^6.12.0", "react": "18.2.0", "react-circular-progressbar": "^2.1.0", "react-copy-to-clipboard": "^5.1.0", "react-dom": "18.2.0", "react-icons": "^4.12.0", - "react-photo-sphere-viewer": "^4.0.2-psv5.4.4", + "react-photo-sphere-viewer": "^5.0.2-psv5.7.1", "react-smooth-scroll-hook": "^1.3.4", "react-string-avatar": "^1.2.2", "react-tuby": "^0.1.24", "react-virtualized-auto-sizer": "^1.0.20", "react-window-infinite-loader": "^1.0.9", - "replicate": "^0.17.0", "sbd": "^1.0.19", "sentence-splitter": "^4.3.0", - "sharp": "^0.32.5", - "styled-components": "^6.0.7", - "tailwind-merge": "^2.1.0", - "tailwindcss": "3.4.1", + "sharp": "^0.33.3", + "styled-components": "^6.1.8", + "tailwind-merge": "^2.2.2", + "tailwindcss": "3.4.3", "tailwindcss-animate": "^1.0.7", "temp-dir": "^3.0.0", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "type-fest": "^4.8.2", - "typescript": "5.1.6", + "typescript": "5.4.4", "usehooks-ts": "^2.9.1", "uuid": "^9.0.1", "yaml": "^2.3.4", @@ -115,9 +122,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -145,6 +152,15 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@emnapi/runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.1.1.tgz", + "integrity": "sha512-3bfqkzuR1KLx57nZfjr2NLnFOobvyS0aTszaEGCGqmYMVDRaGvgIZbjGSV/MHSSmLgQ/b9JFHQ5xm5WRZYd+XQ==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@emotion/is-prop-valid": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", @@ -872,12 +888,12 @@ } }, "node_modules/@floating-ui/dom": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz", - "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.1" + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" } }, "node_modules/@floating-ui/react-dom": { @@ -908,14 +924,6 @@ "node": ">=18" } }, - "node_modules/@huggingface/inference": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.6.4.tgz", - "integrity": "sha512-Xna7arltBSBoKaH3diGi3sYvkExgJMd/pF4T6vl2YbmDccbr1G/X5EPZ2048p+YgrJYG1jTYFCtY6Dr3HvJaow==", - "engines": { - "node": ">=18" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -942,164 +950,257 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==" }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.3.tgz", + "integrity": "sha512-FaNiGX1MrOuJ3hxuNzWgsT/mg5OHG/Izh59WW2mk1UwYHUwtfbhk5QNKYZgxf0pLOhx9ctGiGa2OykD71vOnSw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12" + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.3.tgz", + "integrity": "sha512-2QeSl7QDK9ru//YBT4sQkoq7L0EAJZA3rtV+v9p8xTKl4U1bUqTIaCnoC7Ctx2kCjQgwFXDasOtPTCT8eCTXvw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12" + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" }, "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.2" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12" + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@jcoreio/async-throttle": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@jcoreio/async-throttle/-/async-throttle-1.6.0.tgz", - "integrity": "sha512-0efaXmn498OKPti0tG1GGCPdQwnfHecBGyJZ9eJzZf779WEDbAURGAFh4NWgbuTHU53KSMA2fwJcn6WqlOVRJA==", - "dependencies": { - "@babel/runtime": "^7.12.5" + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0.0" + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@next/env": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", - "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "13.4.10", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.10.tgz", - "integrity": "sha512-YJqyq6vk39JQfvaNtN83t/p5Jy45+bazRL+V4QI8FPd3FBqFYMEsULiwRLgSJMgFqkk4t4JbeZurz+gILEAFpA==", - "dependencies": { - "glob": "7.1.7" + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@next/swc-darwin-arm64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", - "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", "cpu": [ "arm64" ], "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": ">= 10" + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", - "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", "cpu": [ "x64" ], "optional": true, "os": [ - "darwin" + "linux" ], "engines": { - "node": ">= 10" + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", - "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.3.tgz", + "integrity": "sha512-Q7Ee3fFSC9P7vUSqVEF0zccJsZ8GiiCJYGWDdhEjdlOeS9/jdkyJ6sUSPj+bL8VuOYFSbofrW0t/86ceVhx32w==", "cpu": [ - "arm64" + "arm" ], "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.2" } }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", - "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.3.tgz", + "integrity": "sha512-Zf+sF1jHZJKA6Gor9hoYG2ljr4wo9cY4twaxgFDvlG0Xz9V7sinsPp8pFd1XtlhTzYo0IhDbl3rK7P6MzHpnYA==", "cpu": [ "arm64" ], @@ -1108,28 +1209,48 @@ "linux" ], "engines": { - "node": ">= 10" + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.2" } }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", - "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.3.tgz", + "integrity": "sha512-vFk441DKRFepjhTEH20oBlFrHcLjPfI8B0pMIxGm3+yilKyYeHEVvrZhYFdqIseSclIqbQ3SnZMwEMWonY5XFA==", "cpu": [ - "x64" + "s390x" ], "optional": true, "os": [ "linux" ], "engines": { - "node": ">= 10" + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.2" } }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", - "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.3.tgz", + "integrity": "sha512-Q4I++herIJxJi+qmbySd072oDPRkCg/SClLEIDh5IL9h1zjhqjv82H0Seupd+q2m0yOfD+/fJnjSoDFtKiHu2g==", "cpu": [ "x64" ], @@ -1138,28 +1259,94 @@ "linux" ], "engines": { - "node": ">= 10" + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.2" } }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", - "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.3.tgz", + "integrity": "sha512-qnDccehRDXadhM9PM5hLvcPRYqyFCBN31kq+ErBSZtZlsAc1U4Z85xf/RXv1qolkdu+ibw64fUDaRdktxTNP9A==", "cpu": [ "arm64" ], "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": ">= 10" + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" } }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", - "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.3.tgz", + "integrity": "sha512-Jhchim8kHWIU/GZ+9poHMWRcefeaxFIs9EBqf9KtcC14Ojk6qua7ghKiPs0sbeLbLj/2IGBtDcxHyjCdYWkk2w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.3.tgz", + "integrity": "sha512-68zivsdJ0koE96stdUfM+gmyaK/NcoSZK5dV5CAjES0FUXS9lchYt8LAB5rTbM7nlWtxaU/2GON0HVN6/ZYJAQ==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.1.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.3.tgz", + "integrity": "sha512-CyimAduT2whQD8ER4Ux7exKrtfoaUiVr7HG0zZvO0XTFn2idUWljjxv58GxNTkFb8/J9Ub9AqITGkJD6ZginxQ==", "cpu": [ "ia32" ], @@ -1168,13 +1355,19 @@ "win32" ], "engines": { - "node": ">= 10" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", - "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.3.tgz", + "integrity": "sha512-viT4fUIDKnli3IfOephGnolMzhz5VaTvDRkYqtZxOMIoMQ4MrAziO7pT1nVnOt2FAm7qW5aa+CCc13aEY6Le0g==", "cpu": [ "x64" ], @@ -1183,7 +1376,253 @@ "win32" ], "engines": { - "node": ">= 10" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jcoreio/async-throttle": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jcoreio/async-throttle/-/async-throttle-1.6.0.tgz", + "integrity": "sha512-0efaXmn498OKPti0tG1GGCPdQwnfHecBGyJZ9eJzZf779WEDbAURGAFh4NWgbuTHU53KSMA2fwJcn6WqlOVRJA==", + "dependencies": { + "@babel/runtime": "^7.12.5" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz", + "integrity": "sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "13.4.10", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.10.tgz", + "integrity": "sha512-YJqyq6vk39JQfvaNtN83t/p5Jy45+bazRL+V4QI8FPd3FBqFYMEsULiwRLgSJMgFqkk4t4JbeZurz+gILEAFpA==", + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz", + "integrity": "sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz", + "integrity": "sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz", + "integrity": "sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz", + "integrity": "sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz", + "integrity": "sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz", + "integrity": "sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz", + "integrity": "sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz", + "integrity": "sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz", + "integrity": "sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, "node_modules/@nodelib/fs.scandir": { @@ -1218,151 +1657,91 @@ "node": ">= 8" } }, - "node_modules/@photo-sphere-viewer/autorotate-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/autorotate-plugin/-/autorotate-plugin-5.7.0.tgz", - "integrity": "sha512-ecuMXoDYA088gLn4K2vRgdGrEfbXNWifV7pjDK9+q7MBTaWpcY3p4uIUTx04k9gcrCeFfWQ9C0CDH3L/awW26Q==", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" - } - }, - "node_modules/@photo-sphere-viewer/compass-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/compass-plugin/-/compass-plugin-5.7.0.tgz", - "integrity": "sha512-Lkxnp3xEX78GXEj50vsG3OjWZPafnmRSHO9PoxBY1DUydNKTMpWIx5edyurebJwosY1o/UfVcB3u8BhVEqWgwA==", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" - } - }, "node_modules/@photo-sphere-viewer/core": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.7.0.tgz", - "integrity": "sha512-9IIvs4P8LWr/lTYQLEuhdGvkoK6dGCRLiVD54QybxIG7dt5dudC8Jq/GIQQb8G/QcbjmdW49ezA9LPxHTNYIgg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/core/-/core-5.7.2.tgz", + "integrity": "sha512-5RznXVRwuO+Izceae2SbwYM/H8GHtwxKlT26P4UcRFZYsYKllMAggAz9hhU729Vu+r1+il5PHvomIsmPHVTTaw==", "dependencies": { "three": "^0.161.0" } }, - "node_modules/@photo-sphere-viewer/cubemap-adapter": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/cubemap-adapter/-/cubemap-adapter-5.7.0.tgz", - "integrity": "sha512-okMljPJ7ZfVzpdeW3lk0aVfEA/CH6p2nONnKrgB9mokQOdPcqULQW3t/oMkpEwVfXuuEq9+csLWpbT1Z62QZdg==", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" - } - }, - "node_modules/@photo-sphere-viewer/cubemap-tiles-adapter": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/cubemap-tiles-adapter/-/cubemap-tiles-adapter-5.7.0.tgz", - "integrity": "sha512-xvnpXoFgAvBm/hWo91AHVQGH2r9yVzq9RwZHHbjJLNP+dkSQ+vGG4lfKQc/Wy52pJW6j1YiWHxFTudTo53SgUA==", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0", - "@photo-sphere-viewer/cubemap-adapter": "5.7.0" - } - }, - "node_modules/@photo-sphere-viewer/cubemap-video-adapter": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/cubemap-video-adapter/-/cubemap-video-adapter-5.7.0.tgz", - "integrity": "sha512-vbPUp4IX2/3V7TKC32KmtKTQpfW9+et2QioNzUN3lZQh2YROdKvNw4bk6J9MwB7K+wjLIjU3Wo6szAxYS6wKNA==", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" - } - }, - "node_modules/@photo-sphere-viewer/equirectangular-tiles-adapter": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-tiles-adapter/-/equirectangular-tiles-adapter-5.7.0.tgz", - "integrity": "sha512-cn009o11dcHeC+RmICM4GfvNK/nYqkMDz0lqzIzZTeEL0rhPSDLF9ozBrYAzQWRFOl21iddxNrkOJdS9cVIRWw==", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" - } + "node_modules/@photo-sphere-viewer/core/node_modules/three": { + "version": "0.161.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.161.0.tgz", + "integrity": "sha512-LC28VFtjbOyEu5b93K0bNRLw1rQlMJ85lilKsYj6dgTu+7i17W+JCCEbvrpmNHF1F3NAUqDSWq50UD7w9H2xQw==" }, "node_modules/@photo-sphere-viewer/equirectangular-video-adapter": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-video-adapter/-/equirectangular-video-adapter-5.7.0.tgz", - "integrity": "sha512-1UH2MCDH1qccIykKFUfeV18Hc5c3b+MdQmIpX/T0d9cBykjQjhE5Pxurs3TglKp616Umh4/hpygyq/NhE5ZjwQ==", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" - } - }, - "node_modules/@photo-sphere-viewer/gallery-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/gallery-plugin/-/gallery-plugin-5.7.0.tgz", - "integrity": "sha512-jJ/4aLuo0kVzXpUyfO8nHrF8a3JlB67T+RuJBi1RYzhI9XQevNy8BtYogPNIa53oZWe6uylj/I1mysaeA803Ow==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/equirectangular-video-adapter/-/equirectangular-video-adapter-5.7.2.tgz", + "integrity": "sha512-cAaot52nPqa2p77Xp1humRvuxRIa8cqbZ/XRhA8kBToFLT1Ugh9YBcDD7pM/358JtAjicUbLpT7Ioap9iEigxQ==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2" } }, "node_modules/@photo-sphere-viewer/gyroscope-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/gyroscope-plugin/-/gyroscope-plugin-5.7.0.tgz", - "integrity": "sha512-pbwjm9QsQhI/UveeIh2y2vwDRNj/8tKe6IWzsqbKdpkZLck76z/GSDobv4yyEs3OmdNTKZPUhttPA+YrasiIqg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/gyroscope-plugin/-/gyroscope-plugin-5.7.2.tgz", + "integrity": "sha512-GHbm96fBfcxzo1RXYsuuhCRxR0TIv3S+3HszyyNKF4x9Nc6dledl26s98ND5ivnviHtAzH/u4eIWHTO3t2+HMg==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2" } }, - "node_modules/@photo-sphere-viewer/map-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/map-plugin/-/map-plugin-5.7.0.tgz", - "integrity": "sha512-gGdMLd5M0kSch8zRSjSSY7jeBfV/Xqx/09Xj5c2gULzZqAxCKbJhHRuoAN+14JTwjepqerqPoRbFN1a++l95mQ==", + "node_modules/@photo-sphere-viewer/markers-plugin": { + "version": "5.7.2-fix.1", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/markers-plugin/-/markers-plugin-5.7.2-fix.1.tgz", + "integrity": "sha512-zNJet/ACLBfZgKEl1fCz1qNd6aYey5/2Zqr2++xts0hx179qzA8V3ka2w55SQb/X3WQEWMjomgjtroNd/4wSwg==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2" } }, - "node_modules/@photo-sphere-viewer/markers-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/markers-plugin/-/markers-plugin-5.7.0.tgz", - "integrity": "sha512-5t1dteigvJQ+OP7swnWk4guU2MtYFrbapGKuWGEviXFY5dyqRcIAuRVCXsN7JGqDm3POyhlR+ofVX6YN/+Jvaw==", + "node_modules/@photo-sphere-viewer/overlays-plugin": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/overlays-plugin/-/overlays-plugin-5.7.2.tgz", + "integrity": "sha512-0Jp6yWqMzBWr+TRrp90Ua9+YqzmE1a/m+Trg+8FFnXWDc4u1SWPGvwCa4xk0N/x8b5Vx24UnMCRCTQo8B+Ldxw==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2" } }, "node_modules/@photo-sphere-viewer/resolution-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/resolution-plugin/-/resolution-plugin-5.7.0.tgz", - "integrity": "sha512-IDxzQkWeS+6zGbXt1jHMz5LKgYbCtMSSqMKN9Mx2W7sGB2P3wBHhCdjyCahEGRMGx2aG2PHwqX8oBR4v8puz+Q==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/resolution-plugin/-/resolution-plugin-5.7.2.tgz", + "integrity": "sha512-4gUd4yI8o4GEmHMmBeF3+rN+ElrMXxflDxXKRll+VBGCYAsx3vBw0cHm4kVjYh07ep+6uCa35tyg2VFi1P4mrA==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0", - "@photo-sphere-viewer/settings-plugin": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2", + "@photo-sphere-viewer/settings-plugin": "5.7.2" } }, "node_modules/@photo-sphere-viewer/settings-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/settings-plugin/-/settings-plugin-5.7.0.tgz", - "integrity": "sha512-BRmmnZxPeSxZi1CmUgHFrDdLp+zzwGfGLcstjZp/SgWX1xccNGaPSvJkoV9gXUOfDXnStQgJH/7y/B8v0QskJg==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/settings-plugin/-/settings-plugin-5.7.2.tgz", + "integrity": "sha512-RnDG0dPmLtZ6mWnUhL9dSDhztMYTVCd/PwwvhqL3rIHMxcteFxjVKRdVQyLvxUoWGj9O6bvrHYGLEQM1wMNX1g==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2" } }, "node_modules/@photo-sphere-viewer/stereo-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/stereo-plugin/-/stereo-plugin-5.7.0.tgz", - "integrity": "sha512-ujsNgaC7l++JXXLppQrbvSkIFLWKLunw4NFpHyWL9jnHb/+UEZZnaZD81wv5/Lz1m37yPr887tcd9qVUrM5eyQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/stereo-plugin/-/stereo-plugin-5.7.2.tgz", + "integrity": "sha512-vL0a0An5rlcMpERkuWRWlAkt5KoS8LovbMImAB0zZ9YFuorp/xZCKuODQ8HADz3YknoH0ohTAnuxusV7c5FQmA==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0", - "@photo-sphere-viewer/gyroscope-plugin": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2", + "@photo-sphere-viewer/gyroscope-plugin": "5.7.2" } }, "node_modules/@photo-sphere-viewer/video-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/video-plugin/-/video-plugin-5.7.0.tgz", - "integrity": "sha512-Zep84iJjBWVguJUJpvGl4cg9LjZQCe31B6H+HYTnhMyXUyUD3hB7yU/gJzmxPjlapc/IFEMHyXfK/t+YWoP/sw==", - "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" - } - }, - "node_modules/@photo-sphere-viewer/virtual-tour-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/virtual-tour-plugin/-/virtual-tour-plugin-5.7.0.tgz", - "integrity": "sha512-JO967OnIFbuAOTDsvnSy+73F4oPPIQCJ/Zi7gKQki2NH+j5QKj6qTpu8EUG7q5+lINlZHq9Iseqhg5yvyb4d3g==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/video-plugin/-/video-plugin-5.7.2.tgz", + "integrity": "sha512-vrPV9RCr4HsYiORkto1unDPeUkbN2kbyogvNUoLiQ78M4xkPOqoKxtfxCxTYoM+7gECwNL9VTF81+okck498qA==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2" } }, "node_modules/@photo-sphere-viewer/visible-range-plugin": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/visible-range-plugin/-/visible-range-plugin-5.7.0.tgz", - "integrity": "sha512-WbCe9pITOk4lsNUQbW/rMnozEgxs2nmPIFB+D6oL/IUfTnfK9zA8CYZZdtyTJPv1hyCwCdu/Y8CNOGS3Aloh4A==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@photo-sphere-viewer/visible-range-plugin/-/visible-range-plugin-5.7.2.tgz", + "integrity": "sha512-vvLoDOkQbuG0YQC8NgKPORmfbKXpAn4AFWi/bjB9ziYPsXU9LTVobiIjqAwbHxh6/yzCZoAscRFb601K85H1mA==", "peerDependencies": { - "@photo-sphere-viewer/core": "5.7.0" + "@photo-sphere-viewer/core": "5.7.2" } }, "node_modules/@pkgjs/parseargs": { @@ -2033,9 +2412,9 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz", - "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", + "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/number": "1.0.1", @@ -2044,12 +2423,12 @@ "@radix-ui/react-compose-refs": "1.0.1", "@radix-ui/react-context": "1.0.1", "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-dismissable-layer": "1.0.5", "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.3", + "@radix-ui/react-focus-scope": "1.0.4", "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.2", - "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", "@radix-ui/react-primitive": "1.0.3", "@radix-ui/react-slot": "1.0.2", "@radix-ui/react-use-callback-ref": "1.0.1", @@ -2075,113 +2454,6 @@ } } }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", - "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", - "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-popper": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", - "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" - }, - "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 - } - } - }, - "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-portal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", - "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "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 - } - } - }, "node_modules/@radix-ui/react-separator": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz", @@ -2568,9 +2840,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", - "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.1.tgz", + "integrity": "sha512-S3Kq8e7LqxkA9s7HKLqXGTGck1uwis5vAXan3FnU5yw1Ec5hsSGnq4s/UCaSqABPOnOTg7zASLyst7+ohgWexg==" }, "node_modules/@swc/helpers": { "version": "0.5.2", @@ -2586,9 +2858,9 @@ "integrity": "sha512-qrZyhCh8Ekk6nwArx3BROybm9BnX6vF7VcZbijetV/OM3yfS4rTYhoMWISmhVEP2H2re0CtWEyMl/XF+WdvVLQ==" }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", @@ -2616,9 +2888,9 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" }, "node_modules/@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==" + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", + "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==" }, "node_modules/@types/lodash.debounce": { "version": "4.0.9", @@ -2634,9 +2906,9 @@ "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==" }, "node_modules/@types/prop-types": { - "version": "15.7.11", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", - "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/proper-lockfile": { "version": "4.1.4", @@ -2648,9 +2920,9 @@ } }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", + "version": "6.9.14", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", + "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", "dev": true }, "node_modules/@types/react": { @@ -2703,9 +2975,9 @@ "dev": true }, "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==" }, "node_modules/@types/stylis": { "version": "4.2.0", @@ -2822,9 +3094,9 @@ } }, "node_modules/@upstash/redis": { - "version": "1.28.3", - "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.28.3.tgz", - "integrity": "sha512-IduU0zrxVKO0z4D+usJUP/VZRYkbbbSoAdj4WYwgijjhc1nxhRZEtktZ8ueTyXT4dAatJ+gDKIIbVSVIiB1xBw==", + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.29.0.tgz", + "integrity": "sha512-kbO5fgMAeUzErnA/SOtaSbAa0dguYhhBT4MZHJ1O8gVl4iK754aC9+rIYY5hsp4nlxeCGfnIDkWpof991c9jjA==", "dependencies": { "crypto-js": "^4.2.0" } @@ -2877,9 +3149,9 @@ } }, "node_modules/alchemy-sdk": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/alchemy-sdk/-/alchemy-sdk-3.1.2.tgz", - "integrity": "sha512-xpCgQRLektp6imKdGdHyuVHvbMGpaSe22+qvg9jjGx0Wwkh0XgPzSfKwAzFDlkCGMMdazhKCsHu22XP0xh1noQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/alchemy-sdk/-/alchemy-sdk-3.2.1.tgz", + "integrity": "sha512-ytCllr0E3TZxlYT2o/+i8AVEFJwRS7msXYvS3f/L47VEemkv0Hpz09XTqbjOcfur2PooEMcD8rn5oKrbwLyFrQ==", "dependencies": { "@ethersproject/abi": "^5.7.0", "@ethersproject/abstract-provider": "^5.7.0", @@ -2947,9 +3219,9 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/aria-hidden": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz", - "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", "dependencies": { "tslib": "^2.0.0" }, @@ -2981,14 +3253,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -3006,16 +3279,17 @@ "node": ">=8" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3025,14 +3299,15 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.2", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { @@ -3076,6 +3351,17 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, "node_modules/array.prototype.tosorted": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", @@ -3114,23 +3400,15 @@ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==" }, - "node_modules/asynciterator.prototype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz", - "integrity": "sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==", - "dependencies": { - "has-symbols": "^1.0.3" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/autoprefixer": { - "version": "10.4.14", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", - "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", "funding": [ { "type": "opencollective", @@ -3139,12 +3417,16 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "browserslist": "^4.21.5", - "caniuse-lite": "^1.0.30001464", - "fraction.js": "^4.2.0", + "browserslist": "^4.23.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" @@ -3160,9 +3442,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3179,11 +3464,11 @@ } }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -3196,56 +3481,25 @@ "dequal": "^2.0.3" } }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/bech32": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bn.js": { @@ -3284,9 +3538,9 @@ "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -3302,8 +3556,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -3314,29 +3568,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/bufferutil": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", @@ -3361,14 +3592,15 @@ } }, "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -3402,9 +3634,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001584", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001584.tgz", - "integrity": "sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ==", + "version": "1.0.30001606", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz", + "integrity": "sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==", "funding": [ { "type": "opencollective", @@ -3436,15 +3668,9 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3457,6 +3683,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -3472,26 +3701,21 @@ "node": ">= 6" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, "node_modules/class-variance-authority": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.6.1.tgz", - "integrity": "sha512-eurOEGc7YVx3majOrOb099PNKgO3KnKSApOprXI4BTq6bcfbqbQXPN2u+rPPmIJ2di23bMwhk0SxCCthBmszEQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", "dependencies": { - "clsx": "1.2.1" + "clsx": "2.0.0" }, "funding": { "url": "https://joebell.co.uk" } }, "node_modules/class-variance-authority/node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "engines": { "node": ">=6" } @@ -3510,250 +3734,18 @@ } }, "node_modules/cmdk": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-0.2.1.tgz", - "integrity": "sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.0.0.tgz", + "integrity": "sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==", "dependencies": { - "@radix-ui/react-dialog": "1.0.0" + "@radix-ui/react-dialog": "1.0.5", + "@radix-ui/react-primitive": "1.0.3" }, "peerDependencies": { "react": "^18.0.0", "react-dom": "^18.0.0" } }, - "node_modules/cmdk/node_modules/@radix-ui/primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz", - "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-compose-refs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz", - "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-context": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz", - "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-dialog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.0.0.tgz", - "integrity": "sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-context": "1.0.0", - "@radix-ui/react-dismissable-layer": "1.0.0", - "@radix-ui/react-focus-guards": "1.0.0", - "@radix-ui/react-focus-scope": "1.0.0", - "@radix-ui/react-id": "1.0.0", - "@radix-ui/react-portal": "1.0.0", - "@radix-ui/react-presence": "1.0.0", - "@radix-ui/react-primitive": "1.0.0", - "@radix-ui/react-slot": "1.0.0", - "@radix-ui/react-use-controllable-state": "1.0.0", - "aria-hidden": "^1.1.1", - "react-remove-scroll": "2.5.4" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.0.tgz", - "integrity": "sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.0", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.0", - "@radix-ui/react-use-callback-ref": "1.0.0", - "@radix-ui/react-use-escape-keydown": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-focus-guards": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.0.tgz", - "integrity": "sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.0.tgz", - "integrity": "sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-primitive": "1.0.0", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.0.tgz", - "integrity": "sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-layout-effect": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-portal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.0.tgz", - "integrity": "sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-presence": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz", - "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0", - "@radix-ui/react-use-layout-effect": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-primitive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz", - "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-slot": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-slot": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz", - "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz", - "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.0.tgz", - "integrity": "sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-use-escape-keydown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.0.tgz", - "integrity": "sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-use-callback-ref": "1.0.0" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz", - "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==", - "dependencies": { - "@babel/runtime": "^7.13.10" - }, - "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0" - } - }, - "node_modules/cmdk/node_modules/react-remove-scroll": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.4.tgz", - "integrity": "sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==", - "dependencies": { - "react-remove-scroll-bar": "^2.3.3", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -3840,9 +3832,9 @@ } }, "node_modules/cookies-next/node_modules/@types/node": { - "version": "16.18.79", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.79.tgz", - "integrity": "sha512-Qd7jdLR5zmnIyMhfDrfPqN5tUCvreVpP3Qrf2oSM+F7SNzlb/MwHISGUkdFHtevfkPJ3iAGyeQI/jsbh9EStgQ==" + "version": "16.18.94", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.94.tgz", + "integrity": "sha512-X8q3DoKq8t/QhA0Rk/9wJUajxtXRDiCK+cVaONKLxpsjPhu+xX6uZuEj4UKGLQ4p0obTdFxa0cP/BMvf9mOYZA==" }, "node_modules/copy-to-clipboard": { "version": "3.3.3", @@ -3920,12 +3912,15 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/daisyui": { @@ -3953,57 +3948,77 @@ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dependencies": { - "@babel/runtime": "^7.21.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=0.11" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dependencies": { - "ms": "2.1.2" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dependencies": { - "mimic-response": "^3.1.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">=4.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/deep-is": { @@ -4020,17 +4035,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-properties": { @@ -4066,9 +4083,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "engines": { "node": ">=8" } @@ -4183,9 +4200,9 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/electron-to-chromium": { - "version": "1.4.657", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.657.tgz", - "integrity": "sha512-On2ymeleg6QbRuDk7wNgDdXtNqlJLM2w4Agx1D/RiTmItiL+a9oq5p7HUa2ZtkAtGBe/kil2dq/7rPfkbe0r5w==" + "version": "1.4.728", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.728.tgz", + "integrity": "sha512-Ud1v7hJJYIqehlUJGqR6PF1Ek8l80zWwxA6nGxigBsGJ9f9M2fciHyrIiNMerSHSH3p+0/Ia7jIlnDkt41h5cw==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -4211,18 +4228,10 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz", + "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -4243,49 +4252,56 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "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", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -4294,10 +4310,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { + "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/es-errors": { "version": "1.3.0", @@ -4308,34 +4330,48 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.15.tgz", - "integrity": "sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==", + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", + "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", + "es-abstract": "^1.23.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", + "internal-slot": "^1.0.7", "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.0.1" + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -4366,13 +4402,14 @@ } }, "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", "hasInstallScript": true, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" }, "engines": { @@ -4390,12 +4427,15 @@ } }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/escalade": { @@ -4538,9 +4578,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dependencies": { "debug": "^3.2.7" }, @@ -4648,26 +4688,28 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz", - "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==", + "version": "7.34.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", + "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.7", + "array.prototype.findlast": "^1.2.4", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.3", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.0.17", "estraverse": "^5.3.0", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.7", + "object.fromentries": "^2.0.7", + "object.hasown": "^1.1.3", + "object.values": "^1.1.7", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.10" }, "engines": { "node": ">=4" @@ -4748,6 +4790,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -4814,19 +4870,20 @@ "node": ">=0.10.0" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -4835,21 +4892,11 @@ "type": "^2.7.2" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" - }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -4959,14 +5006,14 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -5030,11 +5077,6 @@ "url": "https://github.com/sponsors/rawify" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5113,12 +5155,13 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.1.tgz", - "integrity": "sha512-KmuibvwbWaM4BHcBRYwJfZ1JxyJeBwB8ct9YYu67SvYdbEIlcQ2e56dHxfbobqW38GXo8/zDFqJeGtHiVbWyQw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dependencies": { "call-bind": "^1.0.5", - "es-errors": "^1.3.0" + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -5128,9 +5171,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -5138,11 +5181,6 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "node_modules/glob": { "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", @@ -5252,6 +5290,11 @@ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" }, + "node_modules/gsplat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/gsplat/-/gsplat-1.2.3.tgz", + "integrity": "sha512-5ZthImDFbCKpREgz7SBJUnYRd5GvA5V+0aeaBO4B0M5A/Y5fQwcoeYXioJMcmwfTVRGvHi8W1e2g7RqU1XpbxA==" + }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -5269,20 +5312,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -5330,9 +5373,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -5368,25 +5411,6 @@ "entities": "^4.4.0" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -5432,11 +5456,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -5551,6 +5570,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -5618,17 +5651,20 @@ } }, "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "engines": { "node": ">= 0.4" }, @@ -5690,19 +5726,25 @@ } }, "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5756,9 +5798,12 @@ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5775,12 +5820,15 @@ } }, "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6073,17 +6121,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -6126,11 +6163,6 @@ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==" }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6163,22 +6195,17 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "node_modules/next": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz", - "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.1.4.tgz", + "integrity": "sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==", "dependencies": { - "@next/env": "14.1.0", + "@next/env": "14.1.4", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -6193,15 +6220,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.1.0", - "@next/swc-darwin-x64": "14.1.0", - "@next/swc-linux-arm64-gnu": "14.1.0", - "@next/swc-linux-arm64-musl": "14.1.0", - "@next/swc-linux-x64-gnu": "14.1.0", - "@next/swc-linux-x64-musl": "14.1.0", - "@next/swc-win32-arm64-msvc": "14.1.0", - "@next/swc-win32-ia32-msvc": "14.1.0", - "@next/swc-win32-x64-msvc": "14.1.0" + "@next/swc-darwin-arm64": "14.1.4", + "@next/swc-darwin-x64": "14.1.4", + "@next/swc-linux-arm64-gnu": "14.1.4", + "@next/swc-linux-arm64-musl": "14.1.4", + "@next/swc-linux-x64-gnu": "14.1.4", + "@next/swc-linux-x64-musl": "14.1.4", + "@next/swc-win32-arm64-msvc": "14.1.4", + "@next/swc-win32-ia32-msvc": "14.1.4", + "@next/swc-win32-x64-msvc": "14.1.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -6250,22 +6277,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/node-abi": { - "version": "3.54.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.54.0.tgz", - "integrity": "sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" - }, "node_modules/node-gyp-build": { "version": "4.8.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", @@ -6347,26 +6358,27 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6376,37 +6388,42 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6513,11 +6530,11 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", + "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { @@ -6592,10 +6609,18 @@ "node": ">= 6" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { - "version": "8.4.26", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.26.tgz", - "integrity": "sha512-jrXHFF8iTloAenySjM/ob3gSj7pCu0Ji49hnjqzsgSRa50hkWCKD0HQ+gMNJkW38jBI68MpAAg7ZWwHwX8NMMw==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -6611,9 +6636,9 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -6688,11 +6713,14 @@ } }, "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/postcss-nested": { @@ -6714,9 +6742,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -6730,57 +6758,6 @@ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6804,15 +6781,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -6822,11 +6790,11 @@ } }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.0.tgz", + "integrity": "sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -6854,33 +6822,6 @@ } ] }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", @@ -6938,71 +6879,23 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-photo-sphere-viewer": { - "version": "4.0.2-psv5.4.4", - "resolved": "https://registry.npmjs.org/react-photo-sphere-viewer/-/react-photo-sphere-viewer-4.0.2-psv5.4.4.tgz", - "integrity": "sha512-OYjbatB58IUO1msgh/1TL1iJeEoZxPswUrvOGYsUL5a4PeOJ0fDvqbVuYA1ZhXYwhRM2mH/M1JPFpc4gB81drA==", - "dependencies": { - "@photo-sphere-viewer/autorotate-plugin": "^5.4.4", - "@photo-sphere-viewer/compass-plugin": "^5.4.4", - "@photo-sphere-viewer/core": "^5.4.4", - "@photo-sphere-viewer/cubemap-adapter": "^5.4.4", - "@photo-sphere-viewer/cubemap-tiles-adapter": "^5.4.4", - "@photo-sphere-viewer/cubemap-video-adapter": "^5.4.4", - "@photo-sphere-viewer/equirectangular-tiles-adapter": "^5.4.4", - "@photo-sphere-viewer/equirectangular-video-adapter": "^5.4.4", - "@photo-sphere-viewer/gallery-plugin": "^5.4.4", - "@photo-sphere-viewer/gyroscope-plugin": "^5.4.4", - "@photo-sphere-viewer/map-plugin": "^5.4.4", - "@photo-sphere-viewer/markers-plugin": "^5.4.4", - "@photo-sphere-viewer/resolution-plugin": "^5.4.4", - "@photo-sphere-viewer/settings-plugin": "^5.4.4", - "@photo-sphere-viewer/stereo-plugin": "^5.4.4", - "@photo-sphere-viewer/video-plugin": "^5.4.4", - "@photo-sphere-viewer/virtual-tour-plugin": "^5.4.4", - "@photo-sphere-viewer/visible-range-plugin": "^5.4.4", - "autoprefixer": "^10.4.16", + "version": "5.0.2-psv5.7.1", + "resolved": "https://registry.npmjs.org/react-photo-sphere-viewer/-/react-photo-sphere-viewer-5.0.2-psv5.7.1.tgz", + "integrity": "sha512-n5S+CnIPnZiGm8C6GUNSDrfkFNwCpBI4KwmrBJQ5nHoxkoP3kZ85AkNYJUoL47+uJljDRuMPi+H16c37AvcLqQ==", + "dependencies": { + "autoprefixer": "^10.4.17", "eventemitter3": "^5.0.1", - "photo-sphere-viewer-lensflare-plugin": "^2.0.0" + "photo-sphere-viewer-lensflare-plugin": "^2.1.2" }, "engines": { "node": ">=8", "npm": ">=5" - } - }, - "node_modules/react-photo-sphere-viewer/node_modules/autoprefixer": { - "version": "10.4.17", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", - "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "browserslist": "^4.22.2", - "caniuse-lite": "^1.0.30001578", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" }, "peerDependencies": { - "postcss": "^8.1.0" + "@photo-sphere-viewer/core": ">=5.7.1", + "prop-types": "^15.5.4", + "react": ">=16.0.0", + "react-dom": ">=16.0.0" } }, "node_modules/react-remove-scroll": { @@ -7030,9 +6923,9 @@ } }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", - "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", "dependencies": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" @@ -7105,9 +6998,9 @@ } }, "node_modules/react-virtualized-auto-sizer": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.22.tgz", - "integrity": "sha512-2CGT/4rZ6jvVkKqzJGnZlyQxj4rWPKAwZR80vMlmpYToN18xaB0yIODOoBltWZLbSgpHBpIk0Ae1nrVO9hVClA==", + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/react-virtualized-auto-sizer/-/react-virtualized-auto-sizer-1.0.24.tgz", + "integrity": "sha512-3kCn7N9NEb3FlvJrSHWGQ4iVl+ydQObq2fHMn12i5wbtm74zHOPhz/i64OL3c1S1vi9i2GXtZqNqUJTQ+BnNfg==", "peerDependencies": { "react": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0", "react-dom": "^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0" @@ -7133,19 +7026,6 @@ "pify": "^2.3.0" } }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -7158,15 +7038,15 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.5.tgz", - "integrity": "sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0", - "get-intrinsic": "^1.2.3", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -7183,13 +7063,14 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -7198,17 +7079,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/replicate": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/replicate/-/replicate-0.17.0.tgz", - "integrity": "sha512-m/ZpGpHpYeUeExvgOm5a+dG/48q5ard2C7xJiOES1TDn6+0IlDOmTp75m/dPQU8xjd3g164ZwMMzJjqAZmNaRw==", - "engines": { - "git": ">=2.11.0", - "node": ">=18.0.0", - "npm": ">=7.19.0", - "yarn": ">=1.7.0" - } - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -7287,12 +7157,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -7303,32 +7173,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/safe-regex-test": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", - "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, "engines": { @@ -7339,9 +7190,9 @@ } }, "node_modules/sanitize-html": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.11.0.tgz", - "integrity": "sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.13.0.tgz", + "integrity": "sha512-Xff91Z+4Mz5QiNSLdLWwjgBDm5b1RU6xBT0+12rapjiaR7SwfRdjw8f+6Rir2MXKLrDicRFHdb51hGOAxmsUIA==", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", @@ -7396,28 +7247,30 @@ } }, "node_modules/set-function-length": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", - "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { - "define-data-property": "^1.1.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.2", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7429,25 +7282,42 @@ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, "node_modules/sharp": { - "version": "0.32.6", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", - "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.3.tgz", + "integrity": "sha512-vHUeXJU1UvlO/BNwTpT0x/r53WkLUVxrmb5JTgW92fdFCFk0ispLMAeu/jPO2vjkXM1fYUi3K7/qcLF47pwM1A==", "hasInstallScript": true, "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" + "detect-libc": "^2.0.3", + "semver": "^7.6.0" }, "engines": { - "node": ">=14.15.0" + "libvips": ">=8.15.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, "funding": { "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.3", + "@img/sharp-darwin-x64": "0.33.3", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.3", + "@img/sharp-linux-arm64": "0.33.3", + "@img/sharp-linux-s390x": "0.33.3", + "@img/sharp-linux-x64": "0.33.3", + "@img/sharp-linuxmusl-arm64": "0.33.3", + "@img/sharp-linuxmusl-x64": "0.33.3", + "@img/sharp-wasm32": "0.33.3", + "@img/sharp-win32-ia32": "0.33.3", + "@img/sharp-win32-x64": "0.33.3" } }, "node_modules/shebang-command": { @@ -7470,13 +7340,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7493,49 +7367,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -7553,9 +7384,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -7573,23 +7404,6 @@ "node": ">=10.0.0" } }, - "node_modules/streamx": { - "version": "2.15.7", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.7.tgz", - "integrity": "sha512-NPEKS5+yjyo597eafGbKW5ujh7Sm6lDLHZQd/lRSz6S0VarpADBJItqfB4PnwpS+472oob1GX5cCY9vzfJpHUA==", - "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -7651,32 +7465,39 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -7686,26 +7507,29 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7887,15 +7711,15 @@ } }, "node_modules/sucrase/node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", + "jackspeak": "^2.3.6", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" }, "bin": { "glob": "dist/esm/bin.mjs" @@ -7908,9 +7732,9 @@ } }, "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7944,11 +7768,11 @@ } }, "node_modules/tailwind-merge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.1.tgz", - "integrity": "sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.2.tgz", + "integrity": "sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==", "dependencies": { - "@babel/runtime": "^7.23.7" + "@babel/runtime": "^7.24.0" }, "funding": { "type": "github", @@ -7956,9 +7780,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", - "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -7968,7 +7792,7 @@ "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.19.1", + "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", @@ -8007,26 +7831,6 @@ "node": ">=6" } }, - "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, "node_modules/temp-dir": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", @@ -8060,9 +7864,10 @@ } }, "node_modules/three": { - "version": "0.161.0", - "resolved": "https://registry.npmjs.org/three/-/three-0.161.0.tgz", - "integrity": "sha512-LC28VFtjbOyEu5b93K0bNRLw1rQlMJ85lilKsYj6dgTu+7i17W+JCCEbvrpmNHF1F3NAUqDSWq50UD7w9H2xQw==" + "version": "0.163.0", + "resolved": "https://registry.npmjs.org/three/-/three-0.163.0.tgz", + "integrity": "sha512-HlMgCb2TF/dTLRtknBnjUTsR8FsDqBY43itYop2+Zg822I+Kd0Ua2vs8CvfBVefXkBdNDrLMoRTGCIIpfCuDew==", + "peer": true }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -8167,21 +7972,10 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" }, "node_modules/type-check": { "version": "0.4.0", @@ -8195,9 +7989,9 @@ } }, "node_modules/type-fest": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", - "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.15.0.tgz", + "integrity": "sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==", "engines": { "node": ">=16" }, @@ -8206,27 +8000,28 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -8236,15 +8031,16 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -8254,13 +8050,19 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8275,9 +8077,9 @@ } }, "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.4.tgz", + "integrity": "sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8338,9 +8140,9 @@ } }, "node_modules/use-callback-ref": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.1.tgz", - "integrity": "sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", "dependencies": { "tslib": "^2.0.0" }, @@ -8387,9 +8189,9 @@ } }, "node_modules/usehooks-ts": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-2.12.1.tgz", - "integrity": "sha512-meo93qn2hyBJdHVczbalnsU2FU2WQ1ZVRmppRn8+P6TXo9hORNe10pFVKJfIBYfb2FFapqNuF5vUviLRSy/vAw==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/usehooks-ts/-/usehooks-ts-2.16.0.tgz", + "integrity": "sha512-bez95WqYujxp6hFdM/CpRDiVPirZPxlMzOH2QB8yopoKQMXpscyZoxOjpEdaxvV+CAWUDSM62cWnqHE0E/MZ7w==", "dependencies": { "lodash.debounce": "^4.0.8" }, @@ -8518,29 +8320,32 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8675,9 +8480,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -8702,9 +8510,9 @@ } }, "node_modules/zustand": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.0.tgz", - "integrity": "sha512-zlVFqS5TQ21nwijjhJlx4f9iGrXSL0o/+Dpy4txAP22miJ8Ti6c1Ol1RLNN98BMib83lmDH/2KmLwaNXpjrO1A==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz", + "integrity": "sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==", "dependencies": { "use-sync-external-store": "1.2.0" }, diff --git a/package.json b/package.json index 8fc7ba1f7046bb9edb5df0155408553de7561663..8f4208024156a0b76aecbbb2ced088877d1fc882 100644 --- a/package.json +++ b/package.json @@ -10,27 +10,34 @@ }, "dependencies": { "@huggingface/hub": "0.12.3-oauth", - "@huggingface/inference": "^2.6.4", "@jcoreio/async-throttle": "^1.6.0", - "@photo-sphere-viewer/core": "^5.5.1", - "@photo-sphere-viewer/video-plugin": "^5.5.1", + "@photo-sphere-viewer/core": "^5.7.2", + "@photo-sphere-viewer/equirectangular-video-adapter": "^5.7.2", + "@photo-sphere-viewer/gyroscope-plugin": "^5.7.2", + "@photo-sphere-viewer/markers-plugin": "^5.7.2-fix.1", + "@photo-sphere-viewer/overlays-plugin": "^5.7.2", + "@photo-sphere-viewer/resolution-plugin": "^5.7.2", + "@photo-sphere-viewer/settings-plugin": "^5.7.2", + "@photo-sphere-viewer/stereo-plugin": "^5.7.2", + "@photo-sphere-viewer/video-plugin": "^5.7.2", + "@photo-sphere-viewer/visible-range-plugin": "^5.7.2", "@radix-ui/react-accordion": "^1.1.2", - "@radix-ui/react-avatar": "^1.0.3", + "@radix-ui/react-avatar": "^1.0.4", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-collapsible": "^1.0.3", - "@radix-ui/react-dialog": "^1.0.4", - "@radix-ui/react-dropdown-menu": "^2.0.5", + "@radix-ui/react-dialog": "^1.0.5", + "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-menubar": "^1.0.3", - "@radix-ui/react-popover": "^1.0.6", - "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-menubar": "^1.0.4", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-separator": "^1.0.3", "@radix-ui/react-slider": "^1.1.2", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-switch": "^1.0.3", - "@radix-ui/react-toast": "^1.1.4", - "@radix-ui/react-tooltip": "^1.0.6", + "@radix-ui/react-toast": "^1.1.5", + "@radix-ui/react-tooltip": "^1.0.7", "@react-spring/web": "^9.7.3", "@types/lodash.debounce": "^4.0.9", "@types/node": "20.4.2", @@ -39,49 +46,49 @@ "@types/uuid": "^9.0.2", "@upstash/query": "^0.0.2", "@upstash/redis": "^1.28.3", - "alchemy-sdk": "^3.1.2", - "autoprefixer": "10.4.14", - "class-variance-authority": "^0.6.1", - "clsx": "^2.0.0", - "cmdk": "^0.2.0", + "alchemy-sdk": "^3.2.1", + "autoprefixer": "10.4.19", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "cmdk": "^1.0.0", "cookies-next": "^2.1.2", - "date-fns": "^2.30.0", + "date-fns": "^3.6.0", "eslint": "8.45.0", "eslint-config-next": "13.4.10", "fastest-levenshtein": "^1.0.16", + "gsplat": "^1.2.3", "hash-wasm": "^4.11.0", "lodash.debounce": "^4.0.8", "lucide-react": "^0.260.0", "markdown-yaml-metadata-parser": "^3.0.0", "minisearch": "^6.3.0", - "next": "^14.1.0", - "photo-sphere-viewer-lensflare-plugin": "^2.0.1", + "next": "^14.1.4", + "photo-sphere-viewer-lensflare-plugin": "^2.1.2", "pick": "^0.0.1", - "postcss": "8.4.26", - "qs": "^6.11.2", + "postcss": "8.4.38", + "qs": "^6.12.0", "react": "18.2.0", "react-circular-progressbar": "^2.1.0", "react-copy-to-clipboard": "^5.1.0", "react-dom": "18.2.0", "react-icons": "^4.12.0", - "react-photo-sphere-viewer": "^4.0.2-psv5.4.4", + "react-photo-sphere-viewer": "^5.0.2-psv5.7.1", "react-smooth-scroll-hook": "^1.3.4", "react-string-avatar": "^1.2.2", "react-tuby": "^0.1.24", "react-virtualized-auto-sizer": "^1.0.20", "react-window-infinite-loader": "^1.0.9", - "replicate": "^0.17.0", "sbd": "^1.0.19", "sentence-splitter": "^4.3.0", - "sharp": "^0.32.5", - "styled-components": "^6.0.7", - "tailwind-merge": "^2.1.0", - "tailwindcss": "3.4.1", + "sharp": "^0.33.3", + "styled-components": "^6.1.8", + "tailwind-merge": "^2.2.2", + "tailwindcss": "3.4.3", "tailwindcss-animate": "^1.0.7", "temp-dir": "^3.0.0", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "type-fest": "^4.8.2", - "typescript": "5.1.6", + "typescript": "5.4.4", "usehooks-ts": "^2.9.1", "uuid": "^9.0.1", "yaml": "^2.3.4", diff --git a/src/app/api/login/route.ts b/src/app/api/login/route.ts index b4720e188ead7b64f8b263b527ae3f4368d2cb98..9e8b00e26c9559c5fc1b1723df01629ac3513f35 100644 --- a/src/app/api/login/route.ts +++ b/src/app/api/login/route.ts @@ -3,12 +3,12 @@ import { NextResponse, NextRequest } from "next/server" const defaultState = JSON.stringify({ nonce: "", - redirectUri: "https://aitube.at/api/login", + redirectUri: `${process.env.NEXT_PUBLIC_DOMAIN}/api/login`, state: JSON.stringify({ redirectTo: "/" }) }) export async function GET(req: NextRequest) { - // we are going to pass the whole thing unchanged to the AI Tube frontend + // we are going to pass the whole thing unchanged to the AiTube frontend const params = req.url.split("/api/login").pop() || "" @@ -26,7 +26,7 @@ export async function GET(req: NextRequest) { state // <-- this is defined by us! } = JSON.parse(`${query.state || defaultState}`) - // this is the path of the AI Tube page which the user was browser + // this is the path of the AiTube page which the user was browser // eg. this can be /account, /, or nothing // const redirectTo = `${state.redirectTo || "/"}` @@ -35,11 +35,11 @@ export async function GET(req: NextRequest) { const redirectTo = "/account" - return NextResponse.redirect(`https://aitube.at${redirectTo}${params}`) + return NextResponse.redirect(`${process.env.NEXT_PUBLIC_DOMAIN}${redirectTo}${params}`) } export async function POST(req: NextRequest, res: NextResponse) { - // we are going to pass the whole thing unchanged to the AI Tube frontend + // we are going to pass the whole thing unchanged to the AiTube frontend const params = req.url.split("/api/login").pop() || "" @@ -57,7 +57,7 @@ export async function POST(req: NextRequest, res: NextResponse) { state // <-- this is defined by us! } = JSON.parse(`${query.state || defaultState}`) - // this is the path of the AI Tube page which the user was browser + // this is the path of the AiTube page which the user was browser // eg. this can be /account, /, or nothing // const redirectTo = `${state.redirectTo || "/"}` @@ -66,5 +66,5 @@ export async function POST(req: NextRequest, res: NextResponse) { const redirectTo = "/account" - return NextResponse.redirect(`https://aitube.at${redirectTo}${params}`) + return NextResponse.redirect(`${process.env.NEXT_PUBLIC_DOMAIN}${redirectTo}${params}`) } \ No newline at end of file diff --git a/src/app/api/media/[mediaId]/route.ts b/src/app/api/media/[mediaId]/route.ts new file mode 100644 index 0000000000000000000000000000000000000000..afe680b82e79205f3638b1960a4e0cf153b359aa --- /dev/null +++ b/src/app/api/media/[mediaId]/route.ts @@ -0,0 +1,76 @@ +import { NextResponse, NextRequest } from "next/server" + +import { getVideo } from "@/app/server/actions/ai-tube-hf/getVideo" +import { parseMediaProjectionType } from "@/lib/parseMediaProjectionType"; + +export async function GET(req: NextRequest) { + const mediaId = req.url.split("/").pop() || "" + const media = await getVideo({ videoId: mediaId, neverThrow: true }) + if (!media) { + return new NextResponse("media not found", { status: 404 }); + } + const isEquirectangular = parseMediaProjectionType(media) === "equirectangular" + + const html = ` + + + + + + ${media.label} - AiTube + + + + + + + + + + + ${ + isEquirectangular + ? ` + + + ` : + ` + ` + } + + + + + + +` + + return new NextResponse(html, { + status: 200, + headers: new Headers({ "content-type": "text/html" }), + }) +} diff --git a/src/app/api/video/[videoId]/route.ts b/src/app/api/video/[videoId]/route.ts index 335068690481a7eebc6940ce366929b87aaceef6..2b53ca8e855d1397c5364400c77e4581fcb5a673 100644 --- a/src/app/api/video/[videoId]/route.ts +++ b/src/app/api/video/[videoId]/route.ts @@ -1,18 +1,19 @@ import { NextResponse, NextRequest } from "next/server" import { getVideo } from "@/app/server/actions/ai-tube-hf/getVideo" -import { parseProjectionFromLoRA } from "@/app/server/actions/utils/parseProjectionFromLoRA"; +import { parseMediaProjectionType } from "@/lib/parseMediaProjectionType"; +/** + * @deprecated + */ export async function GET(req: NextRequest) { + const videoId = req.url.split("/").pop() || "" const video = await getVideo({ videoId, neverThrow: true }) if (!video) { return new NextResponse("video not found", { status: 404 }); } - const isEquirectangular = ( - video.projection === "equirectangular" || - parseProjectionFromLoRA(video.lora) === "equirectangular" - ) + const isEquirectangular = parseMediaProjectionType(video) === "equirectangular" const html = ` @@ -20,7 +21,7 @@ export async function GET(req: NextRequest) { - ${video.label} - AI Tube + ${video.label} - AiTube diff --git a/src/app/embed/page.tsx b/src/app/embed/page.tsx index 03d8b9e714f0eab4feabef6527671063955ab4cc..3c1ff533faf90e55d722872c850cec9d4c46e377 100644 --- a/src/app/embed/page.tsx +++ b/src/app/embed/page.tsx @@ -17,29 +17,29 @@ export async function generateMetadata( const metadataBase = new URL('https://huggingface.co/spaces/jbilcke-hf/ai-tube') try { - const video = await getVideo({ videoId, neverThrow: true }) + const media = await getVideo({ videoId, neverThrow: true }) - if (!video) { - throw new Error("Video not found") + if (!media) { + throw new Error("Media not found") } return { - title: `${video.label} - AiTube`, + title: `${media.label} - AiTube`, metadataBase, openGraph: { // some cool stuff we could use here: // 'video.tv_show' | 'video.other' | 'video.movie' | 'video.episode'; type: "video.other", // url: "https://example.com", - title: video.label || "", // put the video title here - description: video.description || "", // put the video description here + title: media.label || "", // put the video title here + description: media.description || "", // put the video description here siteName: "AiTube", images: [ - `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.webp` + `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${media.id}.webp` ], videos: [ { - "url": video.assetUrlHd || video.assetUrl + "url": media.assetUrlHd || media.assetUrl } ], // images: ['/some-specific-page-image.jpg', ...previousImages], @@ -47,11 +47,11 @@ export async function generateMetadata( twitter: { card: "player", site: "@flngr", - description: video.description || "", - images: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.webp`, + description: media.description || "", + images: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${media.id}.webp`, players: { - playerUrl: `https://jbilcke-hf-ai-tube.hf.space/embed?v=${video.id}`, - streamUrl: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.mp4`, + playerUrl: `${process.env.NEXT_PUBLIC_DOMAIN}/embed?v=${media.id}`, + streamUrl: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${media.id}.mp4`, width: 1024, height: 576 } @@ -76,7 +76,14 @@ export async function generateMetadata( } -export default async function Embed({ searchParams: { v: videoId } }: AppQueryProps) { +export default async function Embed({ + searchParams: { + v: videoId + + // TODO add: + // m: mediaId + } +}: AppQueryProps) { const publicVideo = await getVideo({ videoId, neverThrow: true }) // console.log("WatchPage: --> " + video?.id) return ( diff --git a/src/app/interface/about/index.tsx b/src/app/interface/about/index.tsx index ec7782702ac1de37c8678f0446c2af8984f399b3..0978ae58da1771363480a7dad807131de72176e9 100644 --- a/src/app/interface/about/index.tsx +++ b/src/app/interface/about/index.tsx @@ -43,14 +43,14 @@ export function About() { - AI Tube + AiTube - What is AI Tube? + What is AiTube?

- AI Tube is a sandbox platform launched in Nov 2023 to experiment with autonomous creation of long videos. The videos are generated from single text prompts by humans and by AI robots. + AiTube is a sandbox platform launched in Nov 2023 to experiment with autonomous creation of long videos. The videos are generated from single text prompts by humans and by AI robots.

To my knowledge, is the first platform to operate this way. As a research sandbox, it features other experiments such as being the first platform to autonomously generate VR videos using AI (open this example with a WebXR-compatible device eg. an iPhone). diff --git a/src/app/interface/collection-card/index.tsx b/src/app/interface/collection-card/index.tsx index 864e760e3555d2533506c4a78e82bce5e7282129..f3dfd536a67214df6e14ed5cf55347ebdaef359c 100644 --- a/src/app/interface/collection-card/index.tsx +++ b/src/app/interface/collection-card/index.tsx @@ -112,6 +112,7 @@ export function CollectionCard({ `flex flex-col items-center justify-center text-center`, `bg-neutral-900 rounded`, `text-2xs font-semibold px-[3px] py-[1px]`, + isFinite(duration) && !isNaN(duration) && duration > 0 ? 'opacity-100' : 'opacity-0' )} >{formatDuration(duration)}

diff --git a/src/app/interface/equirectangular-video-player/index.tsx b/src/app/interface/equirectangular-video-player/index.tsx index 4451abb45366a1d5e18a1c733322959cebd2f058..256f689f1c9eea750e0d8def6e46242d93dae35c 100644 --- a/src/app/interface/equirectangular-video-player/index.tsx +++ b/src/app/interface/equirectangular-video-player/index.tsx @@ -3,7 +3,7 @@ import AutoSizer from "react-virtualized-auto-sizer" import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { VideoSphereViewer } from "./viewer" @@ -11,7 +11,7 @@ export function EquirectangularVideoPlayer({ video, className = "", }: { - video?: VideoInfo + video?: MediaInfo className?: string }) { diff --git a/src/app/interface/equirectangular-video-player/viewer.tsx b/src/app/interface/equirectangular-video-player/viewer.tsx index 015940c2adc95309ef1477813c2a6654eb1a8fdb..8783f4004af6992e723258bd970252e1d5d88f63 100644 --- a/src/app/interface/equirectangular-video-player/viewer.tsx +++ b/src/app/interface/equirectangular-video-player/viewer.tsx @@ -1,14 +1,21 @@ "use client" -import { useEffect, useRef, useState } from "react" -import AutoSizer from "react-virtualized-auto-sizer" -import { PanoramaPosition, PluginConstructor, Point, Position, SphericalPosition, Viewer } from "@photo-sphere-viewer/core" -import { EquirectangularVideoAdapter, LensflarePlugin, ReactPhotoSphereViewer, ResolutionPlugin, SettingsPlugin, VideoPlugin } from "react-photo-sphere-viewer" +import { useEffect, useRef } from "react" +import { ReactPhotoSphereViewer } from "react-photo-sphere-viewer" -import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" +import { Viewer } from "@photo-sphere-viewer/core" + +import { EquirectangularVideoAdapter } from "@photo-sphere-viewer/equirectangular-video-adapter" + +import { SettingsPlugin } from "@photo-sphere-viewer/settings-plugin" +import { ResolutionPlugin } from "@photo-sphere-viewer/resolution-plugin" +import { VideoPlugin } from "@photo-sphere-viewer/video-plugin" -type PhotoSpherePlugin = (PluginConstructor | [PluginConstructor, any]) +import "@photo-sphere-viewer/settings-plugin/index.css" +import "@photo-sphere-viewer/video-plugin/index.css" + +import { cn } from "@/lib/utils" +import { MediaInfo } from "@/types/general" export function VideoSphereViewer({ video, @@ -17,7 +24,7 @@ export function VideoSphereViewer({ height, muted = false, }: { - video: VideoInfo + video: MediaInfo className?: string width: number height: number @@ -64,15 +71,16 @@ export function VideoSphereViewer({ // plugins={[[LensflarePlugin, { lensflares: [] }]]} adapter={[EquirectangularVideoAdapter, { muted }]} + navbar="video" src="" plugins={[ + [SettingsPlugin, {}], [VideoPlugin, { muted, // progressbar: true, bigbutton: false }], - // SettingsPlugin, [ResolutionPlugin, { defaultResolution: 'HD', resolutions: [ diff --git a/src/app/interface/gsplat/index.tsx b/src/app/interface/gsplat/index.tsx new file mode 100644 index 0000000000000000000000000000000000000000..a78e0b0daf111d39f6fbeb770ede73d81c5f6859 --- /dev/null +++ b/src/app/interface/gsplat/index.tsx @@ -0,0 +1,120 @@ +import React, { useEffect, useRef } from "react" +import * as SPLAT from "gsplat" + +type GsplatStatus = + | "idle" + | "loading" + | "loaded" + | "failed" + +export function Gsplat({ + url, + width, + height, + className = "" }: { + url: string + width?: number + height?: number + className?: string +}) { + const canvasRef = useRef(null) + const sceneRef = useRef() + const cameraRef = useRef() + const controlsRef = useRef() + const rendererRef = useRef() + const frameIdRef = useRef(0) + const statusRef = useRef("idle") + + function animate() { + const renderer = rendererRef.current + const scene = sceneRef.current + const camera = cameraRef.current + const controls = controlsRef.current + if (!scene || !renderer || !camera || !controls) { return } + + + controls.update() + renderer.render(scene, camera) + frameIdRef.current = requestAnimationFrame(animate) + } + + async function loadScene() { + const canvas = canvasRef.current + if (!canvas) { return } + + const status = statusRef.current + if (!status || status === "loaded" || status === "loading" || status === "failed") { + console.log(`Gsplat: a scene is already loading or loaded: skipping..`) + return + } + + statusRef.current = "loading" + + try { + const renderer = rendererRef.current = new SPLAT.WebGLRenderer(canvas) + + let fileUrl = url.trim() + let fileExt = fileUrl.toLowerCase().split(".").pop() || "splat" + const isVideo = fileExt === "splatv" + + if (isVideo) { + console.log("Gsplat: loading video splat..") + + renderer.addProgram(new SPLAT.VideoRenderProgram(renderer)) + + const scene = sceneRef.current = new SPLAT.Scene() + const camera = cameraRef.current = new SPLAT.Camera() + const controls = controlsRef.current = new SPLAT.OrbitControls(camera, renderer.canvas) + + await SPLAT.SplatvLoader.LoadAsync(url, scene, camera, (progress) => { + console.log(`${Math.round(progress * 100)}%`) + }) + + controls.setCameraTarget(camera.position.add(camera.forward.multiply(5))) + } else { + console.log("Gsplat: loading static splat..") + const scene = sceneRef.current = new SPLAT.Scene() + const camera = cameraRef.current = new SPLAT.Camera() + const controls = controlsRef.current = new SPLAT.OrbitControls(camera, renderer.canvas) + + await SPLAT.Loader.LoadAsync(url, scene, (progress) => { + console.log(`${Math.round(progress * 100)}%`) + }) + } + + console.log("Gsplat: finished loading! rendering..") + statusRef.current = "loaded" + } catch (err) { + console.error(`Gsplat: failed to load the content`) + statusRef.current = "failed" + return + } + + animate() + }; + + useEffect(() => { + if (!canvasRef.current) { return } + loadScene() + return () => { cancelAnimationFrame(frameIdRef?.current || 0) } + }, []) + + // responsive width and height + useEffect(() => { + const canvas = canvasRef.current + const renderer = rendererRef.current + + if (!canvas || !renderer) { return } + + // renderer.setSize(canvas.clientWidth, canvas.clientHeight) + renderer.setSize( + width || canvas.clientWidth, + height || canvas.clientHeight + ) + }, [width, height]) + return ( +
+ +
+ ); +} diff --git a/src/app/interface/left-menu/index.tsx b/src/app/interface/left-menu/index.tsx index ce563ac94ad3cb164ec215264ce323a621283937..2ff2096364d3b09296e9d7c21cedef0a400c945a 100644 --- a/src/app/interface/left-menu/index.tsx +++ b/src/app/interface/left-menu/index.tsx @@ -1,8 +1,8 @@ import Link from "next/link" -import { TbBrandDiscord } from "react-icons/tb" +import { TbBrandDiscord, TbOctahedron } from "react-icons/tb" import { AiOutlineQuestionCircle } from "react-icons/ai" import { GrChannel } from "react-icons/gr" -import { MdVideoLibrary } from "react-icons/md" +import { MdOutlineLiveTv, MdOutlineVideogameAsset, MdVideoLibrary } from "react-icons/md" import { RiHome8Line } from "react-icons/ri" import { PiRobot } from "react-icons/pi" import { CgProfile } from "react-icons/cg" @@ -56,6 +56,32 @@ export function LeftMenu() { Music + {/* + + } + selected={view === "public_4d"} + > + 4D + + + + } + selected={view === "public_gaming"} + > + Gaming + + + + } + selected={view === "public_live"} + > + Live + + + */}
({ + const [rating, setRating] = useState({ isLikedByUser: false, isDislikedByUser: false, numberOfLikes: 0, @@ -28,15 +28,15 @@ export function LikeButton({ useEffect(() => { startTransition(async () => { - if (!video || !video?.id) { return } + if (!media || !media?.id) { return } - const freshRating = await getVideoRating(video.id, huggingfaceApiKey) + const freshRating = await getMediaRating(media.id, huggingfaceApiKey) setRating(freshRating) }) - }, [video?.id, huggingfaceApiKey]) + }, [media?.id, huggingfaceApiKey]) - if (!video) { return null } + if (!media) { return null } if (!huggingfaceApiKey) { return null } @@ -52,7 +52,7 @@ export function LikeButton({ }) startTransition(async () => { try { - const freshRating = await rateVideo(video.id, true, huggingfaceApiKey) + const freshRating = await rateMedia(media.id, true, huggingfaceApiKey) // setRating(freshRating) } catch (err) { setRating(previousRating) @@ -72,7 +72,7 @@ export function LikeButton({ }) startTransition(async () => { try { - const freshRating = await rateVideo(video.id, false, huggingfaceApiKey) + const freshRating = await rateMedia(media.id, false, huggingfaceApiKey) // setRating(freshRating) } catch (err) { setRating(previousRating) diff --git a/src/app/interface/media-list/index.tsx b/src/app/interface/media-list/index.tsx index a3d891c6981e8418a35f98d203fae011d45f8601..94206cefe3931b9a42706895a2d112ebd42152b9 100644 --- a/src/app/interface/media-list/index.tsx +++ b/src/app/interface/media-list/index.tsx @@ -1,5 +1,5 @@ import { cn } from "@/lib/utils" -import { MediaDisplayLayout, VideoInfo } from "@/types/general" +import { MediaDisplayLayout, MediaInfo } from "@/types/general" import { TrackCard } from "../track-card" import { VideoCard } from "../video-card" @@ -11,7 +11,7 @@ export function MediaList({ onSelect, selectedId, }: { - items: VideoInfo[] + items: MediaInfo[] /** * Layout mode @@ -31,7 +31,7 @@ export function MediaList({ className?: string - onSelect?: (media: VideoInfo) => void + onSelect?: (media: MediaInfo) => void selectedId?: string }) { diff --git a/src/app/interface/video-player/cartesian.tsx b/src/app/interface/media-player/cartesian.tsx similarity index 57% rename from src/app/interface/video-player/cartesian.tsx rename to src/app/interface/media-player/cartesian.tsx index 0d8ef0b0b42e8e540360f05577ed983f66b28282..9d50ae70f9f70a2eebe887b66ee9750f85ec2559 100644 --- a/src/app/interface/video-player/cartesian.tsx +++ b/src/app/interface/media-player/cartesian.tsx @@ -4,25 +4,37 @@ import { Player } from "react-tuby" import "react-tuby/css/main.css" import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" export function CartesianVideoPlayer({ - video, + media, enableShortcuts = true, className = "", // currentTime, }: { - video: VideoInfo + media: MediaInfo enableShortcuts?: boolean className?: string // currentTime?: number }) { + + const assetUrl = media.assetUrlHd || media.assetUrl + + if (!assetUrl) { + return ( +
+
+ )} + return (
diff --git a/src/app/interface/video-player/equirectangular.tsx b/src/app/interface/media-player/equirectangular.tsx similarity index 62% rename from src/app/interface/video-player/equirectangular.tsx rename to src/app/interface/media-player/equirectangular.tsx index 8fd9c5b4e6eb6200b6e01fa0e3126fcc46e889d1..3b848370a828162cfc9ccee250ffa78fc8b32e89 100644 --- a/src/app/interface/video-player/equirectangular.tsx +++ b/src/app/interface/media-player/equirectangular.tsx @@ -1,23 +1,30 @@ "use client" -import { useEffect, useRef, useState } from "react" +import { useEffect, useRef } from "react" -import { PanoramaPosition, PluginConstructor, Point, Position, SphericalPosition, Viewer } from "@photo-sphere-viewer/core" -import { EquirectangularVideoAdapter, LensflarePlugin, ReactPhotoSphereViewer, ResolutionPlugin, SettingsPlugin, VideoPlugin } from "react-photo-sphere-viewer" +import { ReactPhotoSphereViewer } from "react-photo-sphere-viewer" -import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" +import { Viewer } from "@photo-sphere-viewer/core" -type PhotoSpherePlugin = (PluginConstructor | [PluginConstructor, any]) +import { EquirectangularVideoAdapter } from "@photo-sphere-viewer/equirectangular-video-adapter" + +import { SettingsPlugin } from "@photo-sphere-viewer/settings-plugin" +import { ResolutionPlugin } from "@photo-sphere-viewer/resolution-plugin" +import { VideoPlugin } from "@photo-sphere-viewer/video-plugin" + +import "@photo-sphere-viewer/settings-plugin/index.css" +import "@photo-sphere-viewer/video-plugin/index.css" + +import { MediaInfo } from "@/types/general" export function EquirectangularVideoPlayer({ - video, + media, className = "", width, height, muted = false, }: { - video: VideoInfo + media: MediaInfo className?: string width: number height: number @@ -37,7 +44,9 @@ export function EquirectangularVideoPlayer({ }) }, [width, height]) - if (!video.assetUrl) { return null } + const assetUrl = media.assetUrlHd || media.assetUrl + + if (!assetUrl) { return null } return (
+ ) +} \ No newline at end of file diff --git a/src/app/interface/media-player/index.tsx b/src/app/interface/media-player/index.tsx new file mode 100644 index 0000000000000000000000000000000000000000..b6dfc08959a8c072cbaa765b128201da725a3cab --- /dev/null +++ b/src/app/interface/media-player/index.tsx @@ -0,0 +1,59 @@ +"use client" + +import AutoSizer from "react-virtualized-auto-sizer" + +import { cn } from "@/lib/utils" +import { MediaInfo } from "@/types/general" +import { parseMediaProjectionType } from "@/lib/parseMediaProjectionType" + +import { EquirectangularVideoPlayer } from "./equirectangular" +import { CartesianVideoPlayer } from "./cartesian" +import { GaussianSplattingPlayer } from "./gaussian" + +export function MediaPlayer({ + media, + enableShortcuts = true, + className = "", + // currentTime, + }: { + media?: MediaInfo + enableShortcuts?: boolean + className?: string + // currentTime?: number +}) { + console.log("MediaPlayer called for " + media?.assetUrl) + if (!media || !media?.assetUrl) { return null } + + // uncomment one of those to forcefully test the .splatv player! + // media.assetUrlHd = "https://huggingface.co/datasets/dylanebert/3dgs/resolve/main/4d/flame/flame.splatv" + // media.assetUrlHd = "https://huggingface.co/datasets/dylanebert/3dgs/resolve/main/4d/sear/sear.splatv" + // media.assetUrlHd = "https://huggingface.co/datasets/dylanebert/3dgs/resolve/main/4d/birthday/birthday.splatv" + + const projectionType = parseMediaProjectionType(media) + + if (projectionType === "gaussian") { + // note: for AutoSizer to work properly it needs to be inside a normal div with no display: "flex" + return ( +
+ {({ height, width }) => ( + + )} +
+ ) + } + + if (projectionType === "equirectangular") { + // note: for AutoSizer to work properly it needs to be inside a normal div with no display: "flex" + return ( +
+ {({ height, width }) => ( + + )} +
+ ) + } + + return ( + + ) +} \ No newline at end of file diff --git a/src/app/interface/pending-video-card/index.tsx b/src/app/interface/pending-video-card/index.tsx index d41917489eac8fd93cef66b0df6d181f5a5587c0..4417800333d628060882fe21c51db4f51ec017e0 100644 --- a/src/app/interface/pending-video-card/index.tsx +++ b/src/app/interface/pending-video-card/index.tsx @@ -3,7 +3,7 @@ import { PiTrashBold } from "react-icons/pi" import { TableCell, TableRow } from "@/components/ui/table" import { cn } from "@/lib/utils" import { MdLockClock } from "react-icons/md" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { truncate } from "./truncate" export function PendingVideoCard({ @@ -11,8 +11,8 @@ export function PendingVideoCard({ onDelete, className = "", }: { - video: VideoInfo - onDelete?: (video: VideoInfo) => void + video: MediaInfo + onDelete?: (video: MediaInfo) => void className?: string }) { diff --git a/src/app/interface/pending-video-list/index.tsx b/src/app/interface/pending-video-list/index.tsx index 4f5d387c61d74b1d5593a2c308c02e61bd41fb43..077670e40645aeedcb8ab4f9fba3b2eb285ece32 100644 --- a/src/app/interface/pending-video-list/index.tsx +++ b/src/app/interface/pending-video-list/index.tsx @@ -1,5 +1,5 @@ import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { PendingVideoCard } from "../pending-video-card" @@ -9,8 +9,8 @@ export function PendingVideoList({ onDelete, className = "", }: { - videos: VideoInfo[] - onDelete?: (video: VideoInfo) => void + videos: MediaInfo[] + onDelete?: (video: MediaInfo) => void className?: string }) { return ( diff --git a/src/app/interface/playlist-control/index.tsx b/src/app/interface/playlist-control/index.tsx index bd62db944b6f626d48fe2906b2b1cb7aff4630dd..48d7b6c74b8d2e0fec61b3486c6ec52631fd6dba 100644 --- a/src/app/interface/playlist-control/index.tsx +++ b/src/app/interface/playlist-control/index.tsx @@ -3,7 +3,7 @@ import { IoIosPause } from "react-icons/io" import { cn } from "@/lib/utils" import { usePlaylist } from "@/lib/usePlaylist" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" export function PlaylistControl() { const playlist = usePlaylist() diff --git a/src/app/interface/recommended-videos/index.tsx b/src/app/interface/recommended-videos/index.tsx index 18e46a653e1cf7c42ec44963989168868833833a..5dc16dac2d6a4aba1adfa6518d35b29cfdf59586 100644 --- a/src/app/interface/recommended-videos/index.tsx +++ b/src/app/interface/recommended-videos/index.tsx @@ -2,17 +2,16 @@ import { useEffect, useTransition } from "react" import { useStore } from "@/app/state/useStore" -import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { VideoList } from "../video-list" import { getVideos } from "@/app/server/actions/ai-tube-hf/getVideos" export function RecommendedVideos({ - video, + media, }: { - // the video to use for the recommendations - video: VideoInfo + // the media to use for the recommendations + media: MediaInfo }) { const [_isPending, startTransition] = useTransition() const setRecommendedVideos = useStore(s => s.setRecommendedVideos) @@ -22,12 +21,12 @@ export function RecommendedVideos({ startTransition(async () => { setRecommendedVideos(await getVideos({ sortBy: "random", - niceToHaveTags: video.tags, - ignoreVideoIds: [video.id], + niceToHaveTags: media.tags, + ignoreVideoIds: [media.id], maxVideos: 16, })) }) - }, video.tags) + }, media.tags) return ( {searchAutocompleteResults.length === 0 ?
Nothing to show, type something and press enter
: null} {searchAutocompleteResults.map(media => ( - +
void + onSelect?: (media: MediaInfo) => void selected?: boolean index: number }) { @@ -169,6 +169,7 @@ export function TrackCard({ `flex flex-col items-center justify-center text-center`, `bg-neutral-900 rounded`, `text-2xs font-semibold px-[3px] py-[1px]`, + isFinite(duration) && !isNaN(duration) && duration > 0 ? 'opacity-100' : 'opacity-0' )} >{formatDuration(duration)}
diff --git a/src/app/interface/video-card/index.tsx b/src/app/interface/video-card/index.tsx index 6702bcc0f5b43a1ff931e81806860871b161cf28..cabee3830e62e480a03f06f7b7be258845fcb1cc 100644 --- a/src/app/interface/video-card/index.tsx +++ b/src/app/interface/video-card/index.tsx @@ -5,7 +5,7 @@ import Link from "next/link" import { RiCheckboxCircleFill } from "react-icons/ri" import { cn } from "@/lib/utils" -import { MediaDisplayLayout, VideoInfo } from "@/types/general" +import { MediaDisplayLayout, MediaInfo } from "@/types/general" import { formatDuration } from "@/lib/formatDuration" import { formatTimeAgo } from "@/lib/formatTimeAgo" import { isCertifiedUser } from "@/app/certification" @@ -21,10 +21,10 @@ export function VideoCard({ selected, index }: { - media: VideoInfo + media: MediaInfo className?: string layout?: MediaDisplayLayout - onSelect?: (media: VideoInfo) => void + onSelect?: (media: MediaInfo) => void selected?: boolean index: number }) { @@ -75,7 +75,7 @@ export function VideoCard({ }, [index]) return ( - +
0 ? 'opacity-100' : 'opacity-0' )} >{formatDuration(duration)}
diff --git a/src/app/interface/video-player/index.tsx b/src/app/interface/video-player/index.tsx deleted file mode 100644 index e2751feceb10bdd0a10c7d1dc37fe828d51b4ffc..0000000000000000000000000000000000000000 --- a/src/app/interface/video-player/index.tsx +++ /dev/null @@ -1,45 +0,0 @@ -"use client" - -import AutoSizer from "react-virtualized-auto-sizer" - -import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" -import { parseProjectionFromLoRA } from "@/app/server/actions/utils/parseProjectionFromLoRA" - -import { EquirectangularVideoPlayer } from "./equirectangular" -import { CartesianVideoPlayer } from "./cartesian" - -export function VideoPlayer({ - video, - enableShortcuts = true, - className = "", - // currentTime, - }: { - video?: VideoInfo - enableShortcuts?: boolean - className?: string - // currentTime?: number -}) { - // we should our video players from misssing data - if (!video?.assetUrl) { return null } - - const isEquirectangular = ( - video.projection === "equirectangular" || - parseProjectionFromLoRA(video.lora) === "equirectangular" - ) - - if (isEquirectangular) { - // note: for AutoSizer to work properly it needs to be inside a normal div with no display: "flex" - return ( -
- {({ height, width }) => ( - - )} -
- ) - } - - return ( - - ) -} \ No newline at end of file diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 7e235a70ca835f1d62084e7980470a3621e51dca..b6d9afca982f4ae47660953297b9b6d9683ffb7f 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -14,8 +14,8 @@ const roboto = Roboto({ }) export const metadata: Metadata = { - title: '🍿 AI Tube', - description: '🍿 AI Tube', + title: '🍿 AiTube', + description: '🍿 AiTube', } export default function RootLayout({ diff --git a/src/app/main.tsx b/src/app/main.tsx index 8c52fbb6fc5bd866825518cfcf9c1059c57d559c..8c8b451c57e156ecb4f254835eb23f6bd1b71b81 100644 --- a/src/app/main.tsx +++ b/src/app/main.tsx @@ -8,7 +8,7 @@ import { UserChannelView } from "./views/user-channel-view" import { PublicVideoView } from "./views/public-video-view" import { UserAccountView } from "./views/user-account-view" import { NotFoundView } from "./views/not-found-view" -import { ChannelInfo, VideoInfo } from "@/types/general" +import { ChannelInfo, MediaInfo } from "@/types/general" import { useEffect } from "react" import { usePathname, useRouter } from "next/navigation" import { TubeLayout } from "./interface/tube-layout" @@ -35,11 +35,11 @@ export function Main({ }: { // server side params // view?: InterfaceView - publicVideo?: VideoInfo - publicVideos?: VideoInfo[] - publicChannelVideos?: VideoInfo[] - publicTracks?: VideoInfo[] - publicTrack?: VideoInfo + publicVideo?: MediaInfo + publicVideos?: MediaInfo[] + publicChannelVideos?: MediaInfo[] + publicTracks?: MediaInfo[] + publicTrack?: MediaInfo channel?: ChannelInfo }) { // this could be also a parameter of main, where we pass this manually diff --git a/src/app/page.tsx b/src/app/page.tsx index a4b5c012d2899d01e35d31a3ca526c2a42122abc..b3ac4ebb3798630463880e6e86537e7ab6698cd6 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -16,14 +16,14 @@ export async function generateMetadata( if (!videoId) { return { - title: `🍿 AI Tube`, + title: `🍿 AiTube`, metadataBase, openGraph: { type: "website", // url: "https://example.com", - title: "AI Tube", + title: "AiTube", description: "The first fully AI generated video platform", - siteName: "🍿 AI Tube", + siteName: "🍿 AiTube", videos: [], images: [], @@ -39,14 +39,14 @@ export async function generateMetadata( } return { - title: `${video.label} - AI Tube`, + title: `${video.label} - AiTube`, metadataBase, openGraph: { type: "website", // url: "https://example.com", title: video.label || "", // put the video title here description: video.description || "", // put the vide description here - siteName: "AI Tube", + siteName: "AiTube", videos: [ { @@ -58,14 +58,14 @@ export async function generateMetadata( } } catch (err) { return { - title: "AI Tube", + title: "AiTube", metadataBase, openGraph: { type: "website", // url: "https://example.com", - title: "AI Tube", // put the video title here + title: "AiTube", // put the video title here description: "", // put the vide description here - siteName: "AI Tube", + siteName: "AiTube", videos: [], images: [], diff --git a/src/app/server/actions/ai-tube-hf/deleteVideoRequest.ts b/src/app/server/actions/ai-tube-hf/deleteVideoRequest.ts index cc30f36183d112e4386fb11de3835434a9eb7c64..8650561b501689255b0a7232f7768a1f8f8c96e6 100644 --- a/src/app/server/actions/ai-tube-hf/deleteVideoRequest.ts +++ b/src/app/server/actions/ai-tube-hf/deleteVideoRequest.ts @@ -1,5 +1,5 @@ -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { deleteFileFromDataset } from "./deleteFileFromDataset" import { formatPromptFileName } from "../utils/formatPromptFileName" @@ -9,7 +9,7 @@ export async function deleteVideoRequest({ apiKey, neverThrow, }: { - video: VideoInfo + video: MediaInfo apiKey: string neverThrow?: boolean }): Promise { diff --git a/src/app/server/actions/ai-tube-hf/downloadClapProject.ts b/src/app/server/actions/ai-tube-hf/downloadClapProject.ts index 2bd5d25e82d3bcfbc49d7a4f2d21a9ba7d62fd0c..304a86c0c353ca30d34372edd8378fb3e4ff3ea5 100644 --- a/src/app/server/actions/ai-tube-hf/downloadClapProject.ts +++ b/src/app/server/actions/ai-tube-hf/downloadClapProject.ts @@ -2,7 +2,7 @@ import { v4 as uuidv4 } from "uuid" import { Credentials } from "@/huggingface/hub/src" import { ClapProject } from "@/clap/types" -import { ChannelInfo, VideoInfo, VideoRequest } from "@/types/general" +import { ChannelInfo, MediaInfo, VideoRequest } from "@/types/general" import { defaultVideoModel } from "@/app/config" import { parseClap } from "@/clap/parseClap" @@ -21,7 +21,7 @@ export async function downloadClapProject({ credentials: Credentials }): Promise<{ videoRequest: VideoRequest - videoInfo: VideoInfo + videoInfo: MediaInfo clapProject: ClapProject }> { // we recover the repo from the cnannel info @@ -62,7 +62,7 @@ export async function downloadClapProject({ }), } - const videoInfo: VideoInfo = { + const videoInfo: MediaInfo = { id, status: "submitted", label: videoRequest.label || "", diff --git a/src/app/server/actions/ai-tube-hf/extendVideosWithStats.ts b/src/app/server/actions/ai-tube-hf/extendVideosWithStats.ts index b86d9e8c644f15a90b9191741cd8a9cd98cf6414..63a5ae0553b8f3e646e0b575afedfe9fe9efd9e3 100644 --- a/src/app/server/actions/ai-tube-hf/extendVideosWithStats.ts +++ b/src/app/server/actions/ai-tube-hf/extendVideosWithStats.ts @@ -1,12 +1,12 @@ "use server" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" -import { getStatsForVideos } from "../stats" +import { getStatsForMedias } from "../stats" -export async function extendVideosWithStats(videos: VideoInfo[]): Promise { +export async function extendVideosWithStats(videos: MediaInfo[]): Promise { - const allStats = await getStatsForVideos(videos.map(v => v.id)) + const allStats = await getStatsForMedias(videos.map(v => v.id)) return videos.map(v => { const stats = allStats[v.id] || { diff --git a/src/app/server/actions/ai-tube-hf/getChannelVideos.ts b/src/app/server/actions/ai-tube-hf/getChannelVideos.ts index d1a4de70cd156d0f888b0126d65ac7828f821810..89422e26a262ac50e3e6ec62778db457f6c8ee1c 100644 --- a/src/app/server/actions/ai-tube-hf/getChannelVideos.ts +++ b/src/app/server/actions/ai-tube-hf/getChannelVideos.ts @@ -1,6 +1,6 @@ "use server" -import { ChannelInfo, VideoInfo, VideoStatus } from "@/types/general" +import { ChannelInfo, MediaInfo, VideoStatus } from "@/types/general" import { getVideoRequestsFromChannel } from "./getVideoRequestsFromChannel" import { adminApiKey } from "../config" @@ -21,7 +21,7 @@ export async function getChannelVideos({ status?: VideoStatus neverThrow?: boolean -}): Promise { +}): Promise { if (!channel) { return [] } @@ -38,7 +38,7 @@ export async function getChannelVideos({ const published = await getVideoIndex({ status: "published" }) const validVideos = videos.map(v => { - let video: VideoInfo = { + let video: MediaInfo = { id: v.id, status: "submitted", label: v.label || "", diff --git a/src/app/server/actions/ai-tube-hf/getVideo.ts b/src/app/server/actions/ai-tube-hf/getVideo.ts index b5318449c852a8b177e3a82c9fcb69733097b4eb..b96f617e357502d5157dcea22ca9f6620e5c7058 100644 --- a/src/app/server/actions/ai-tube-hf/getVideo.ts +++ b/src/app/server/actions/ai-tube-hf/getVideo.ts @@ -1,9 +1,9 @@ "use server" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { getVideoIndex } from "./getVideoIndex" -import { getStatsForVideos } from "../stats" +import { getStatsForMedias } from "../stats" export async function getVideo({ videoId, @@ -11,7 +11,7 @@ export async function getVideo({ }: { videoId?: string | string[] | null, neverThrow?: boolean -}): Promise { +}): Promise { try { const id = `${videoId || ""}` @@ -26,7 +26,7 @@ export async function getVideo({ throw new Error(`cannot get the video, nothing found for id "${id}"`) } - const allStats = await getStatsForVideos([video.id]) + const allStats = await getStatsForMedias([video.id]) const stats = allStats[video.id] || { numberOfViews: 0, diff --git a/src/app/server/actions/ai-tube-hf/getVideoIndex.ts b/src/app/server/actions/ai-tube-hf/getVideoIndex.ts index 2dafdc9df6947340f8d00f16db0e9e9532a75e73..86d3edc82337813cb2fdba189bc78a8ca67181de 100644 --- a/src/app/server/actions/ai-tube-hf/getVideoIndex.ts +++ b/src/app/server/actions/ai-tube-hf/getVideoIndex.ts @@ -1,4 +1,4 @@ -import { VideoInfo, VideoStatus } from "@/types/general" +import { MediaInfo, VideoStatus } from "@/types/general" import { adminUsername } from "../config" @@ -11,7 +11,7 @@ export async function getVideoIndex({ renewCache?: boolean neverThrow?: boolean -}): Promise> { +}): Promise> { try { const response = await fetch( `https://huggingface.co/datasets/${adminUsername}/ai-tube-index/raw/main/${status}.json` @@ -29,7 +29,7 @@ export async function getVideoIndex({ throw new Error("index is not an object, admin repair needed") } - const videos = jsonResponse as Record + const videos = jsonResponse as Record return videos } catch (err) { diff --git a/src/app/server/actions/ai-tube-hf/getVideos.ts b/src/app/server/actions/ai-tube-hf/getVideos.ts index 4357779c3b721d8f7eaa1916755ab03fa339b033..5dac5b4bbb1201cfb7f2c67f67768a17aef8ee4c 100644 --- a/src/app/server/actions/ai-tube-hf/getVideos.ts +++ b/src/app/server/actions/ai-tube-hf/getVideos.ts @@ -3,7 +3,7 @@ // import { distance } from "fastest-levenshtein" import MiniSearch from "minisearch" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { getVideoIndex } from "./getVideoIndex" import { extendVideosWithStats } from "./extendVideosWithStats" @@ -47,7 +47,7 @@ export async function getVideos({ neverThrow?: boolean renewCache?: boolean -}): Promise { +}): Promise { try { // the index is gonna grow more and more, // but in the future we will use some DB eg. Prisma or sqlite @@ -96,7 +96,7 @@ export async function getVideos({ allPotentiallyValidVideos.sort(() => Math.random() - 0.5) } - let videosMatchingFilters: VideoInfo[] = allPotentiallyValidVideos + let videosMatchingFilters: MediaInfo[] = allPotentiallyValidVideos // filter videos by mandatory tags, or else we return everything const mandatoryTagsList = mandatoryTags.map(tag => tag.toLowerCase().trim()).filter(tag => tag) diff --git a/src/app/server/actions/ai-tube-hf/parseChannel.ts b/src/app/server/actions/ai-tube-hf/parseChannel.ts index e7b7193bd18381955e7c949f473f47aca65926cf..54660ba413f5748e60ee3c5852e500c1518b92e3 100644 --- a/src/app/server/actions/ai-tube-hf/parseChannel.ts +++ b/src/app/server/actions/ai-tube-hf/parseChannel.ts @@ -54,7 +54,7 @@ export async function parseChannel(options: { // ignore channels which don't start with ai-tube if (!datasetName.startsWith(prefix)) { - throw new Error("this is not an AI Tube channel") + throw new Error("this is not an AiTube channel") } // ignore the video index @@ -64,7 +64,7 @@ export async function parseChannel(options: { const slug = datasetName.replaceAll(prefix, "") - // console.log(`found an AI Tube channel: "${slug}"`) + // console.log(`found an AiTube channel: "${slug}"`) // TODO parse the README to get the proper label let label = slug.replaceAll("-", " ") diff --git a/src/app/server/actions/ai-tube-hf/uploadVideoRequestToDataset.ts b/src/app/server/actions/ai-tube-hf/uploadVideoRequestToDataset.ts index 5faec7b61ab86886e54fbc1f436afa318522cd0b..7ccf9d6f91890ae01a48888451cf724f335add58 100644 --- a/src/app/server/actions/ai-tube-hf/uploadVideoRequestToDataset.ts +++ b/src/app/server/actions/ai-tube-hf/uploadVideoRequestToDataset.ts @@ -3,7 +3,7 @@ import { Blob } from "buffer" import { Credentials, uploadFile, whoAmI } from "@/huggingface/hub/src" -import { ChannelInfo, VideoGenerationModel, VideoInfo, VideoOrientation, VideoRequest } from "@/types/general" +import { ChannelInfo, VideoGenerationModel, MediaInfo, VideoOrientation, VideoRequest } from "@/types/general" import { formatPromptFileName } from "../utils/formatPromptFileName" import { computeOrientationProjectionWidthHeight } from "../utils/computeOrientationProjectionWidthHeight" @@ -41,7 +41,7 @@ export async function uploadVideoRequestToDataset({ orientation: VideoOrientation }): Promise<{ videoRequest: VideoRequest - videoInfo: VideoInfo + videoInfo: MediaInfo }> { if (!apiKey) { throw new Error(`the apiKey is required`) @@ -127,7 +127,7 @@ ${prompt} music, thumbnailUrl: channel.thumbnail, - // for now AI Tube doesn't support upload of clap files + // for now AiTube doesn't support upload of clap files clapUrl: "", updatedAt: new Date().toISOString(), @@ -141,7 +141,7 @@ ${prompt} }), } - const newVideo: VideoInfo = { + const newVideo: MediaInfo = { id, status: "submitted", label: title, @@ -154,7 +154,7 @@ ${prompt} music, thumbnailUrl: channel.thumbnail, // will be generated in async - // for now AI Tube doesn't support upload of clap files + // for now AiTube doesn't support upload of clap files clapUrl: "", assetUrl: "", // will be generated in async diff --git a/src/app/server/actions/stats.ts b/src/app/server/actions/stats.ts index 5031e27f4f6191f45cfeb57dc9351510f8475eaf..5164f3e8966463bf7cd432a16d1b1f815ca0926b 100644 --- a/src/app/server/actions/stats.ts +++ b/src/app/server/actions/stats.ts @@ -2,11 +2,11 @@ import { developerMode } from "@/app/config" import { WhoAmIUser, whoAmI } from "@/huggingface/hub/src" -import { VideoRating } from "@/types/general" +import { MediaRating } from "@/types/general" import { redis } from "./redis"; -export async function getStatsForVideos(videoIds: string[]): Promise> { - if (!Array.isArray(videoIds)) { +export async function getStatsForMedias(mediaIds: string[]): Promise> { + if (!Array.isArray(mediaIds)) { return {} } @@ -16,11 +16,11 @@ export async function getStatsForVideos(videoIds: string[]): Promise { +export async function countNewMediaView(mediaId: string): Promise { if (developerMode) { - const stats = await getStatsForVideos([videoId]) + const stats = await getStatsForMedias([mediaId]) - return stats[videoId].numberOfViews + return stats[mediaId].numberOfViews } try { - const result = await redis.incr(`videos:${videoId}:stats:views`) + const result = await redis.incr(`videos:${mediaId}:stats:views`) return result } catch (err) { @@ -60,7 +60,7 @@ export async function watchVideo(videoId: string): Promise { } } -export async function getVideoRating(videoId: string, apiKey?: string): Promise { +export async function getMediaRating(mediaId: string, apiKey?: string): Promise { let numberOfLikes = 0 let numberOfDislikes = 0 let isLikedByUser = false @@ -68,8 +68,8 @@ export async function getVideoRating(videoId: string, apiKey?: string): Promise< try { // update video likes counter - numberOfLikes = (await redis.get(`videos:${videoId}:stats:likes`)) || 0 - numberOfDislikes = (await redis.get(`videos:${videoId}:stats:dislikes`)) || 0 + numberOfLikes = (await redis.get(`videos:${mediaId}:stats:likes`)) || 0 + numberOfDislikes = (await redis.get(`videos:${mediaId}:stats:dislikes`)) || 0 } catch (err) { } @@ -79,7 +79,7 @@ export async function getVideoRating(videoId: string, apiKey?: string): Promise< const credentials = { accessToken: apiKey } const user = await whoAmI({ credentials }) as unknown as WhoAmIUser - const isLiked = await redis.get(`users:${user.id}:activity:videos:${videoId}:liked`) + const isLiked = await redis.get(`users:${user.id}:activity:videos:${mediaId}:liked`) if (isLiked !== null) { isLikedByUser = !!isLiked isDislikedByUser = !isLiked @@ -97,7 +97,7 @@ export async function getVideoRating(videoId: string, apiKey?: string): Promise< } } -export async function rateVideo(videoId: string, liked: boolean, apiKey: string): Promise { +export async function rateMedia(mediaId: string, liked: boolean, apiKey: string): Promise { // note: we want the like to throw an exception if it failed let numberOfLikes = 0 let numberOfDislikes = 0 @@ -108,21 +108,21 @@ export async function rateVideo(videoId: string, liked: boolean, apiKey: string) const user = await whoAmI({ credentials }) as unknown as WhoAmIUser - const hasLiked = await redis.get(`users:${user.id}:activity:videos:${videoId}:liked`) + const hasLiked = await redis.get(`users:${user.id}:activity:videos:${mediaId}:liked`) const hasAlreadyRatedTheSame = hasLiked !== null && liked === hasLiked if (hasAlreadyRatedTheSame) { return { - numberOfLikes: await redis.get(`videos:${videoId}:stats:likes`) || 0, - numberOfDislikes: await redis.get(`videos:${videoId}:stats:dislikes`) || 0, + numberOfLikes: await redis.get(`videos:${mediaId}:stats:likes`) || 0, + numberOfDislikes: await redis.get(`videos:${mediaId}:stats:dislikes`) || 0, isLikedByUser: liked, isDislikedByUser: !liked } } const hasAlreadyRatedAndDifferently = hasLiked !== null && liked !== hasLiked - await redis.set(`users:${user.id}:activity:videos:${videoId}:liked`, liked) + await redis.set(`users:${user.id}:activity:videos:${mediaId}:liked`, liked) isLikedByUser = liked isDislikedByUser = !liked @@ -133,14 +133,14 @@ export async function rateVideo(videoId: string, liked: boolean, apiKey: string) try { if (liked) { // update video likes counter - numberOfLikes = await redis.incr(`videos:${videoId}:stats:likes`) + numberOfLikes = await redis.incr(`videos:${mediaId}:stats:likes`) if (hasAlreadyRatedAndDifferently) { - numberOfDislikes = await redis.decr(`videos:${videoId}:stats:dislikes`) + numberOfDislikes = await redis.decr(`videos:${mediaId}:stats:dislikes`) } } else { - numberOfDislikes = await redis.incr(`videos:${videoId}:stats:dislikes`) + numberOfDislikes = await redis.incr(`videos:${mediaId}:stats:dislikes`) if (hasAlreadyRatedAndDifferently) { - numberOfLikes = await redis.decr(`videos:${videoId}:stats:likes`) + numberOfLikes = await redis.decr(`videos:${mediaId}:stats:likes`) } } } catch (err) { diff --git a/src/app/server/actions/submitVideoRequest.ts b/src/app/server/actions/submitVideoRequest.ts index 611e5c4ae24c0333d6c4a0cec29924e3ff249bf4..030bf9e4f9866dc3919780de8d2500bbf1c04f09 100644 --- a/src/app/server/actions/submitVideoRequest.ts +++ b/src/app/server/actions/submitVideoRequest.ts @@ -1,6 +1,6 @@ "use server" -import { ChannelInfo, VideoGenerationModel, VideoInfo, VideoOrientation } from "@/types/general" +import { ChannelInfo, VideoGenerationModel, MediaInfo, VideoOrientation } from "@/types/general" import { uploadVideoRequestToDataset } from "./ai-tube-hf/uploadVideoRequestToDataset" @@ -32,7 +32,7 @@ export async function submitVideoRequest({ tags: string[] duration: number orientation: VideoOrientation -}): Promise { +}): Promise { if (!apiKey) { throw new Error(`the apiKey is required`) } diff --git a/src/app/server/actions/utils/computeOrientationProjectionWidthHeight.ts b/src/app/server/actions/utils/computeOrientationProjectionWidthHeight.ts index ea56dd5909bad14ed236728c2d99113250ca06b9..2728d9c6768c8b8a44bd651ff6da57759ab9604a 100644 --- a/src/app/server/actions/utils/computeOrientationProjectionWidthHeight.ts +++ b/src/app/server/actions/utils/computeOrientationProjectionWidthHeight.ts @@ -1,4 +1,4 @@ -import { VideoOrientation, VideoProjection } from "@/types/general" +import { VideoOrientation, MediaProjection } from "@/types/general" import { parseVideoOrientation } from "./parseVideoOrientation" import { parseProjectionFromLoRA } from "./parseProjectionFromLoRA" @@ -13,7 +13,7 @@ export function computeOrientationProjectionWidthHeight({ orientation?: any }): { orientation: VideoOrientation - projection: VideoProjection + projection: MediaProjection width: number height: number } { diff --git a/src/app/server/actions/utils/isAntisocial.ts b/src/app/server/actions/utils/isAntisocial.ts index ef88c3f236ebe368ea740c602a4a68c7a38848f6..ca187c3226b90ede35f482f1b43807c22f24015d 100644 --- a/src/app/server/actions/utils/isAntisocial.ts +++ b/src/app/server/actions/utils/isAntisocial.ts @@ -1,8 +1,8 @@ -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" const winners = new Set(`${process.env.WINNERS || ""}`.toLowerCase().split(",").map(x => x.trim()).filter(x => x)) -export function isAntisocial(video: VideoInfo): boolean { +export function isAntisocial(video: MediaInfo): boolean { // some people are reported by the community for their anti-social behavior // this include: diff --git a/src/app/server/actions/utils/isHighQuality.ts b/src/app/server/actions/utils/isHighQuality.ts index 6d4e5ef9c9b61dd4a457715e2ba0e932debe2a70..b00d99e12198dea5842751c1921a2708f01a48f3 100644 --- a/src/app/server/actions/utils/isHighQuality.ts +++ b/src/app/server/actions/utils/isHighQuality.ts @@ -1,6 +1,6 @@ -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" -export function isHighQuality(video: VideoInfo) { +export function isHighQuality(video: MediaInfo) { const numberOfViews = Math.abs(Math.max(0, video.numberOfViews)) const numberOfLikes = Math.abs(Math.max(0, video.numberOfLikes)) const numberOfDislikes = Math.abs(Math.max(0, video.numberOfDislikes)) diff --git a/src/app/server/actions/utils/parseProjectionFromLoRA.ts b/src/app/server/actions/utils/parseProjectionFromLoRA.ts index 7b8a1ed61abf193f73956e9afa5dede15a9cfb6a..9be977a29ea5ec45d82cbbec7b1ac7d0f7155997 100644 --- a/src/app/server/actions/utils/parseProjectionFromLoRA.ts +++ b/src/app/server/actions/utils/parseProjectionFromLoRA.ts @@ -1,6 +1,6 @@ -import { VideoProjection } from "@/types/general" +import { MediaProjection } from "@/types/general" -export function parseProjectionFromLoRA(input?: any): VideoProjection { +export function parseProjectionFromLoRA(input?: any): MediaProjection { const name = `${input || ""}`.trim().toLowerCase() const isEquirectangular = ( diff --git a/src/app/state/categories.ts b/src/app/state/categories.ts index 9cb74f9f54c3b9020b2d970ae619c9176628a515..44645ca314fbc87f1498407472bd1a62b7286ea4 100644 --- a/src/app/state/categories.ts +++ b/src/app/state/categories.ts @@ -11,7 +11,7 @@ export const videoCategoriesWithLabels = { "Time Travel": "Time Travel", // vlogs etc // "gaming": "Gaming", // "trailers": "Trailers", - // "aitubers": "AI tubers", + // "aitubers": "AiTubers", // "ads": "100% Ads", } diff --git a/src/app/state/useCurrentUser.ts b/src/app/state/useCurrentUser.ts index 2230d7d10042de567118d083c6c4adafc448a914..432ad9767f4693043facca0e25901b7bee586f9b 100644 --- a/src/app/state/useCurrentUser.ts +++ b/src/app/state/useCurrentUser.ts @@ -24,7 +24,7 @@ export function useCurrentUser({ apiKey: string oauthResult?: OAuthResult - // the long standing API is a temporary solution for "PRO" users of AI Tube + // the long standing API is a temporary solution for "PRO" users of AiTube // (users who use Clap files using external tools, // or want ot use their own HF account to generate videos) longStandingApiKey: string @@ -219,7 +219,7 @@ export function useCurrentUser({ * * For Developer Applications, you can add any URL you want to the list of allowed redirect URIs at https://huggingface.co/settings/connected-applications. */ - redirectUrl: "https://aitube.at/api/login", + redirectUrl: `${process.env.NEXT_PUBLIC_DOMAIN}/api/login`, /** * State to pass to the OAuth provider, which will be returned in the call to `oauthLogin` after the redirect. diff --git a/src/app/state/useStore.ts b/src/app/state/useStore.ts index 5f99798eeca5490f52b2c8dd77b0bc06223f1674..86507bdad128c591fe5b6e8239b4f933cc171c08 100644 --- a/src/app/state/useStore.ts +++ b/src/app/state/useStore.ts @@ -2,7 +2,7 @@ import { create } from "zustand" -import { ChannelInfo, VideoInfo, InterfaceDisplayMode, InterfaceView, InterfaceMenuMode, InterfaceHeaderMode, CommentInfo, UserInfo } from "@/types/general" +import { ChannelInfo, MediaInfo, InterfaceDisplayMode, InterfaceView, InterfaceMenuMode, InterfaceHeaderMode, CommentInfo, UserInfo } from "@/types/general" export const useStore = create<{ displayMode: InterfaceDisplayMode @@ -28,11 +28,11 @@ export const useStore = create<{ searchAutocompleteQuery: string setSearchAutocompleteQuery: (searchAutocompleteQuery?: string) => void - searchAutocompleteResults: VideoInfo[] - setSearchAutocompleteResults: (searchAutocompleteResults: VideoInfo[]) => void + searchAutocompleteResults: MediaInfo[] + setSearchAutocompleteResults: (searchAutocompleteResults: MediaInfo[]) => void - searchResults: VideoInfo[] - setSearchResults: (searchResults: VideoInfo[]) => void + searchResults: MediaInfo[] + setSearchResults: (searchResults: MediaInfo[]) => void currentUser?: UserInfo setCurrentUser: (currentUser?: UserInfo) => void @@ -61,35 +61,35 @@ export const useStore = create<{ currentModel?: string setCurrentModel: (currentModel?: string) => void - publicVideo?: VideoInfo - setPublicVideo: (publicVideo?: VideoInfo) => void + publicVideo?: MediaInfo + setPublicVideo: (publicVideo?: MediaInfo) => void publicComments: CommentInfo[] setPublicComments: (publicComment: CommentInfo[]) => void - publicVideos: VideoInfo[] - setPublicVideos: (publicVideos: VideoInfo[]) => void + publicVideos: MediaInfo[] + setPublicVideos: (publicVideos: MediaInfo[]) => void - publicChannelVideos: VideoInfo[] - setPublicChannelVideos: (publicChannelVideos: VideoInfo[]) => void + publicChannelVideos: MediaInfo[] + setPublicChannelVideos: (publicChannelVideos: MediaInfo[]) => void - publicTrack?: VideoInfo - setPublicTrack: (publicTrack?: VideoInfo) => void + publicTrack?: MediaInfo + setPublicTrack: (publicTrack?: MediaInfo) => void - publicTracks: VideoInfo[] - setPublicTracks: (publicTracks: VideoInfo[]) => void + publicTracks: MediaInfo[] + setPublicTracks: (publicTracks: MediaInfo[]) => void - userVideo?: VideoInfo - setUserVideo: (userVideo?: VideoInfo) => void + userVideo?: MediaInfo + setUserVideo: (userVideo?: MediaInfo) => void - userVideos: VideoInfo[] - setUserVideos: (userVideos: VideoInfo[]) => void + userVideos: MediaInfo[] + setUserVideos: (userVideos: MediaInfo[]) => void - recommendedVideos: VideoInfo[] - setRecommendedVideos: (recommendedVideos: VideoInfo[]) => void + recommendedVideos: MediaInfo[] + setRecommendedVideos: (recommendedVideos: MediaInfo[]) => void - // currentPrompts: VideoInfo[] - // setCurrentPrompts: (currentPrompts: VideoInfo[]) => void + // currentPrompts: MediaInfo[] + // setCurrentPrompts: (currentPrompts: MediaInfo[]) => void }>((set, get) => ({ displayMode: "desktop", setDisplayMode: (displayMode: InterfaceDisplayMode) => { @@ -127,8 +127,8 @@ export const useStore = create<{ set({ showAutocompleteBox }) }, - searchAutocompleteResults: [] as VideoInfo[], - setSearchAutocompleteResults: (searchAutocompleteResults: VideoInfo[]) => { + searchAutocompleteResults: [] as MediaInfo[], + setSearchAutocompleteResults: (searchAutocompleteResults: MediaInfo[]) => { set({ searchAutocompleteResults }) }, @@ -137,8 +137,8 @@ export const useStore = create<{ set({ searchQuery }) }, - searchResults: [] as VideoInfo[], - setSearchResults: (searchResults: VideoInfo[]) => { + searchResults: [] as MediaInfo[], + setSearchResults: (searchResults: MediaInfo[]) => { set({ searchResults }) }, @@ -202,7 +202,7 @@ export const useStore = create<{ }, publicVideo: undefined, - setPublicVideo: (publicVideo?: VideoInfo) => { + setPublicVideo: (publicVideo?: MediaInfo) => { set({ publicVideo }) }, @@ -212,7 +212,7 @@ export const useStore = create<{ }, publicVideos: [], - setPublicVideos: (publicVideos: VideoInfo[] = []) => { + setPublicVideos: (publicVideos: MediaInfo[] = []) => { set({ publicVideos: Array.isArray(publicVideos) ? publicVideos : [] }) @@ -220,36 +220,36 @@ export const useStore = create<{ publicTrack: undefined, - setPublicTrack: (publicTrack?: VideoInfo) => { + setPublicTrack: (publicTrack?: MediaInfo) => { set({ publicTrack }) }, publicTracks: [], - setPublicTracks: (publicTracks: VideoInfo[] = []) => { + setPublicTracks: (publicTracks: MediaInfo[] = []) => { set({ publicTracks: Array.isArray(publicTracks) ? publicTracks : [] }) }, publicChannelVideos: [], - setPublicChannelVideos: (publicChannelVideos: VideoInfo[] = []) => { + setPublicChannelVideos: (publicChannelVideos: MediaInfo[] = []) => { set({ publicVideos: Array.isArray(publicChannelVideos) ? publicChannelVideos : [] }) }, userVideo: undefined, - setUserVideo: (userVideo?: VideoInfo) => { set({ userVideo }) }, + setUserVideo: (userVideo?: MediaInfo) => { set({ userVideo }) }, userVideos: [], - setUserVideos: (userVideos: VideoInfo[] = []) => { + setUserVideos: (userVideos: MediaInfo[] = []) => { set({ userVideos: Array.isArray(userVideos) ? userVideos : [] }) }, recommendedVideos: [], - setRecommendedVideos: (recommendedVideos: VideoInfo[]) => { + setRecommendedVideos: (recommendedVideos: MediaInfo[]) => { set({ recommendedVideos: Array.isArray(recommendedVideos) ? recommendedVideos : [] }) diff --git a/src/app/views/home-view/index.tsx b/src/app/views/home-view/index.tsx index 30cd502edbcfe35d3e03bb1960bd5485ce66c674..0c1a79e0f0f8230bdc993437476ef0920da9da5d 100644 --- a/src/app/views/home-view/index.tsx +++ b/src/app/views/home-view/index.tsx @@ -4,7 +4,7 @@ import { useEffect, useTransition } from "react" import { useStore } from "@/app/state/useStore" import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { getVideos } from "@/app/server/actions/ai-tube-hf/getVideos" import { VideoList } from "@/app/interface/video-list" import { getTags } from "@/app/server/actions/ai-tube-hf/getTags" @@ -33,7 +33,7 @@ export function HomeView() { }) }, [currentTag]) - const handleSelect = (video: VideoInfo) => { + const handleSelect = (video: MediaInfo) => { setView("public_video") setPublicVideo(video) } diff --git a/src/app/views/public-music-videos-view/index.tsx b/src/app/views/public-music-videos-view/index.tsx index 60f910d4817bf6710f8193d2298994403b2a3850..5dcf2025187d70c6b020e869aa6fd9ef47c29f76 100644 --- a/src/app/views/public-music-videos-view/index.tsx +++ b/src/app/views/public-music-videos-view/index.tsx @@ -4,7 +4,7 @@ import { useEffect, useTransition } from "react" import { useStore } from "@/app/state/useStore" import { cn } from "@/lib/utils" -import { VideoInfo } from "@/types/general" +import { MediaInfo } from "@/types/general" import { getVideos } from "@/app/server/actions/ai-tube-hf/getVideos" import { TrackList } from "@/app/interface/track-list" import { PlaylistControl } from "@/app/interface/playlist-control" @@ -34,7 +34,7 @@ export function PublicMusicVideosView() { */ }, []) - const handleSelect = (media: VideoInfo) => { + const handleSelect = (media: MediaInfo) => { // console.log("going to play:", media.assetUrl.replace(".mp4", ".mp3")) playlist.playback({ url: media.assetUrl.replace(".mp4", ".mp3"), diff --git a/src/app/views/public-video-embed-view/index.tsx b/src/app/views/public-video-embed-view/index.tsx index 2479f398812ee85c65fcba004bcf78216d750d45..71eae7b8a087aba737a484d5e76ad12be44fabe2 100644 --- a/src/app/views/public-video-embed-view/index.tsx +++ b/src/app/views/public-video-embed-view/index.tsx @@ -4,66 +4,68 @@ import { useEffect, useTransition } from "react" import { useStore } from "@/app/state/useStore" import { cn } from "@/lib/utils" -import { VideoPlayer } from "@/app/interface/video-player" +import { MediaPlayer } from "@/app/interface/media-player" -import { watchVideo } from "@/app/server/actions/stats" +import { countNewMediaView } from "@/app/server/actions/stats" export function PublicVideoEmbedView() { const [_pending, startTransition] = useTransition() - // current time in the video + // current time in the media // note: this is used to *set* the current time, not to read it // EDIT: you know what, let's do this the dirty way for now // const [desiredCurrentTime, setDesiredCurrentTime] = useState() - const video = useStore(s => s.publicVideo) + const media = useStore(s => s.publicVideo) - const videoId = `${video?.id || ""}` + const mediaId = `${media?.id || ""}` const setPublicVideo = useStore(s => s.setPublicVideo) - // we inject the current videoId in the URL, if it's not already present + // we inject the current mediaId in the URL, if it's not already present // this is a hack for Hugging Face iframes useEffect(() => { const queryString = new URL(location.href).search const searchParams = new URLSearchParams(queryString) - if (videoId) { - if (searchParams.get("v") !== videoId) { - console.log(`current videoId "${videoId}" isn't set in the URL query params.. TODO we should set it`) + if (mediaId) { + // "v" is the legacy parameter, for when we only worked on videos + if (searchParams.get("m") !== mediaId || searchParams.get("v") !== mediaId) { + console.log(`current mediaId "${mediaId}" isn't set in the URL query params.. TODO we should set it`) - // searchParams.set("v", videoId) + // searchParams.set("v", mediaoId) // location.search = searchParams.toString() } } else { // searchParams.delete("v") // location.search = searchParams.toString() } - }, [videoId]) + }, [mediaId]) useEffect(() => { startTransition(async () => { - if (!video || !video.id) { + if (!media || !media.id) { return } - const numberOfViews = await watchVideo(videoId) + const numberOfViews = await countNewMediaView(mediaId) setPublicVideo({ - ...video, + ...media, numberOfViews }) }) - }, [video?.id]) + }, [media?.id]) - if (!video) { return null } + if (!media) { return null } return (
-
diff --git a/src/app/views/public-video-view/index.tsx b/src/app/views/public-video-view/index.tsx index 5e89cd3f7df5ec1ef195d9dfcd9285cc003bff07..998e9970770510fdf462e13d9e51a16d3755e25d 100644 --- a/src/app/views/public-video-view/index.tsx +++ b/src/app/views/public-video-view/index.tsx @@ -8,15 +8,15 @@ import CopyToClipboard from "react-copy-to-clipboard" import { LuCopyCheck } from "react-icons/lu" import { LuScrollText } from "react-icons/lu" import { BiCameraMovie } from "react-icons/bi" +import { useLocalStorage } from "usehooks-ts" import { useStore } from "@/app/state/useStore" import { cn } from "@/lib/utils" -import { VideoPlayer } from "@/app/interface/video-player" import { ActionButton, actionButtonClassName } from "@/app/interface/action-button" import { RecommendedVideos } from "@/app/interface/recommended-videos" import { isCertifiedUser } from "@/app/certification" -import { watchVideo } from "@/app/server/actions/stats" +import { countNewMediaView } from "@/app/server/actions/stats" import { formatTimeAgo } from "@/lib/formatTimeAgo" import { DefaultAvatar } from "@/app/interface/default-avatar" import { LikeButton } from "@/app/interface/like-button" @@ -30,9 +30,10 @@ import { localStorageKeys } from "@/app/state/localStorageKeys" import { defaultSettings } from "@/app/state/defaultSettings" import { getComments, submitComment } from "@/app/server/actions/comments" import { useCurrentUser } from "@/app/state/useCurrentUser" -import { useLocalStorage } from "usehooks-ts" -import { parseProjectionFromLoRA } from "@/app/server/actions/utils/parseProjectionFromLoRA" +import { parseMediaProjectionType } from "@/lib/parseMediaProjectionType" +import { MediaPlayer } from "@/app/interface/media-player" +// TODO: rename to PublicMediaView export function PublicVideoView() { const [_pending, startTransition] = useTransition() @@ -40,7 +41,7 @@ export function PublicVideoView() { const [isCommenting, setCommenting] = useState(false) const [isFocusedOnInput, setFocusedOnInput] = useState(false) - // current time in the video + // current time in the media // note: this is used to *set* the current time, not to read it // EDIT: you know what, let's do this the dirty way for now // const [desiredCurrentTime, setDesiredCurrentTime] = useState() @@ -61,41 +62,40 @@ export function PublicVideoView() { } - const video = useStore(s => s.publicVideo) + const media = useStore(s => s.publicVideo) - const videoId = `${video?.id || ""}` + const mediaId = `${media?.id || ""}` const [copied, setCopied] = useState(false) - const [channelThumbnail, setChannelThumbnail] = useState(`${video?.channel.thumbnail || ""}`) + const [channelThumbnail, setChannelThumbnail] = useState(`${media?.channel.thumbnail || ""}`) const setPublicVideo = useStore(s => s.setPublicVideo) const publicComments = useStore(s => s.publicComments) const setPublicComments = useStore(s => s.setPublicComments) - const isEquirectangular = ( - video?.projection === "equirectangular" || - parseProjectionFromLoRA(video?.lora) === "equirectangular" - ) + const isEquirectangular = parseMediaProjectionType(media) === "equirectangular" // we inject the current videoId in the URL, if it's not already present // this is a hack for Hugging Face iframes useEffect(() => { const queryString = new URL(location.href).search const searchParams = new URLSearchParams(queryString) - if (videoId) { - if (searchParams.get("v") !== videoId) { - console.log(`current videoId "${videoId}" isn't set in the URL query params.. TODO we should set it`) + if (mediaId) { + // TODO: the "v" parameter is legacy, it made sense in the past when + // AiTube used to only support traditional videos + if (searchParams.get("v") !== mediaId || searchParams.get("m") !== mediaId) { + console.log(`current mediaId "${mediaId}" isn't set in the URL query params.. TODO we should set it`) - // searchParams.set("v", videoId) + // searchParams.set("m", mediaId) // location.search = searchParams.toString() } } else { - // searchParams.delete("v") + // searchParams.delete("m") // location.search = searchParams.toString() } - }, [videoId]) + }, [mediaId]) useEffect(() => { if (copied) { @@ -114,30 +114,30 @@ export function PublicVideoView() { useEffect(() => { startTransition(async () => { - if (!video || !video.id) { + if (!media || !media.id) { return } - const numberOfViews = await watchVideo(videoId) + const numberOfViews = await countNewMediaView(mediaId) setPublicVideo({ - ...video, + ...media, numberOfViews }) }) - }, [video?.id]) + }, [media?.id]) useEffect(() => { startTransition(async () => { - if (!video || !video.id) { + if (!media || !media.id) { return } - const comments = await getComments(videoId) + const comments = await getComments(mediaId) setPublicComments(comments) }) - }, [video?.id]) + }, [media?.id]) const [huggingfaceApiKey] = useLocalStorage( localStorageKeys.huggingfaceApiKey, @@ -153,16 +153,16 @@ export function PublicVideoView() { }) }, []) */ - if (!video) { return null } + if (!media) { return null } const handleSubmitComment = () => { startTransition(async () => { - if (!commentDraft || !huggingfaceApiKey || !videoId) { return } + if (!commentDraft || !huggingfaceApiKey || !mediaId) { return } const limitedSizeComment = commentDraft.trim().slice(0, 1024).trim() - const comment = await submitComment(video.id, limitedSizeComment, huggingfaceApiKey) + const comment = await submitComment(media.id, limitedSizeComment, huggingfaceApiKey) setPublicComments( [comment].concat(publicComments) @@ -185,25 +185,25 @@ export function PublicVideoView() { `transition-all duration-200 ease-in-out`, `px-2 xl:px-0` )}> - {/** VIDEO PLAYER - HORIZONTAL */} - - {/** VIDEO TITLE - HORIZONTAL */} + {/** AI MEDIA TITLE - HORIZONTAL */}
-
{video.label}
+
{media.label}
{/*
- AI Video Model: {video.model || "HotshotXL"} + AI Media Model: {media.model || "HotshotXL"}
*/}
- {/** VIDEO TOOLBAR - HORIZONTAL */} + {/** MEDIA TOOLBAR - HORIZONTAL */}
{ @@ -251,7 +251,7 @@ export function PublicVideoView() {
:
-
{video.channel.label}
- {isCertifiedUser(video.channel.datasetUser) ?
: null} +
{media.channel.label}
+ {isCertifiedUser(media.channel.datasetUser) ?
: null}
- + {/* SHARE */}
setCopied(true)}>
- Made with {video.model} + Made with {media.model} - {video.model} + {media.model} {isEquirectangular && @@ -355,11 +355,11 @@ export function PublicVideoView() { @@ -369,13 +369,13 @@ export function PublicVideoView() { - +
- {/** VIDEO DESCRIPTION - VERTICAL */} + {/** MEDIA DESCRIPTION - VERTICAL */}
-
{formatLargeNumber(video.numberOfViews)} views
-
{formatTimeAgo(video.updatedAt).replace("about ", "")}
+
{formatLargeNumber(media.numberOfViews)} views
+
{formatTimeAgo(media.updatedAt).replace("about ", "")}
-

{video.description}

+

{media.description}

{/* COMMENTS */} @@ -525,7 +525,7 @@ export function PublicVideoView() { `w-full md:w-[360px] lg:w-[400px] xl:w-[450px]`, `transition-all duration-200 ease-in-out`, )}> - +
) diff --git a/src/app/views/report-modal/index.tsx b/src/app/views/report-modal/index.tsx index 78086a2d3b3a2abb08de3375b890d45dea449958..bbccd0d299f4420005371ef7b152ce26425b516d 100644 --- a/src/app/views/report-modal/index.tsx +++ b/src/app/views/report-modal/index.tsx @@ -4,16 +4,16 @@ import { LuShieldAlert } from "react-icons/lu" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTrigger } from "@/components/ui/dialog" -import { ChannelInfo, VideoInfo } from "@/types/general" +import { ChannelInfo, MediaInfo } from "@/types/general" import { ActionButton } from "@/app/interface/action-button" -// modal to report a video or channel +// modal to report a media or channel export function ReportModal({ - video, + media, channel, children, }: { - video?: VideoInfo + media?: MediaInfo channel?: ChannelInfo children?: ReactNode }) { @@ -42,14 +42,14 @@ export function ReportModal({

If you believe there is an issue with a content, you can ask the author to remove it, by creating a pull request explaining why:

- {video && video.id ? @@ -68,12 +68,12 @@ export function ReportModal({

- {video && video.id ? diff --git a/src/app/views/user-channel-view/index.tsx b/src/app/views/user-channel-view/index.tsx index f969ea941002c401c5cd6f3e4b04eebec41597e0..75c6090625d76dc28b5508162ce56bee0fcf8762 100644 --- a/src/app/views/user-channel-view/index.tsx +++ b/src/app/views/user-channel-view/index.tsx @@ -4,7 +4,7 @@ import { useEffect, useState, useTransition } from "react" import { useStore } from "@/app/state/useStore" import { cn } from "@/lib/utils" -import { VideoGenerationModel, VideoInfo } from "@/types/general" +import { VideoGenerationModel, MediaInfo } from "@/types/general" import { useLocalStorage } from "usehooks-ts" import { localStorageKeys } from "@/app/state/localStorageKeys" @@ -130,7 +130,7 @@ export function UserChannelView() { }) } - const handleDelete = (video: VideoInfo) => { + const handleDelete = (video: MediaInfo) => { // step 1: delete it from the dataset diff --git a/src/app/watch/page.tsx b/src/app/watch/page.tsx index 380deb746e546bc4fde1b1cb328cdea47f8c3a4b..4f7f0ec19ba537590da9747bf50867295c100a0e 100644 --- a/src/app/watch/page.tsx +++ b/src/app/watch/page.tsx @@ -6,7 +6,6 @@ import { AppQueryProps } from "@/types/general" import { Main } from "../main" import { getVideo } from "../server/actions/ai-tube-hf/getVideo" - // https://nextjs.org/docs/pages/building-your-application/optimizing/fonts export async function generateMetadata( { params, searchParams: { v: videoId } }: AppQueryProps, @@ -17,29 +16,29 @@ export async function generateMetadata( const metadataBase = new URL('https://huggingface.co/spaces/jbilcke-hf/ai-tube') try { - const video = await getVideo({ videoId, neverThrow: true }) + const media = await getVideo({ videoId, neverThrow: true }) - if (!video) { + if (!media) { throw new Error("Video not found") } return { - title: `${video.label} - AiTube`, + title: `${media.label} - AiTube`, metadataBase, openGraph: { // some cool stuff we could use here: // 'video.tv_show' | 'video.other' | 'video.movie' | 'video.episode'; type: "video.other", // url: "https://example.com", - title: video.label || "", // put the video title here - description: video.description || "", // put the video description here + title: media.label || "", // put the video title here + description: media.description || "", // put the video description here siteName: "AiTube", images: [ - `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.webp` + `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${media.id}.webp` ], videos: [ { - "url": video.assetUrlHd || video.assetUrl + "url": media.assetUrlHd || media.assetUrl } ], // images: ['/some-specific-page-image.jpg', ...previousImages], @@ -47,11 +46,11 @@ export async function generateMetadata( twitter: { card: "player", site: "@flngr", - description: video.description || "", - images: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.webp`, + description: media.description || "", + images: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${media.id}.webp`, players: { - playerUrl: `https://jbilcke-hf-ai-tube.hf.space/embed?v=${video.id}`, - streamUrl: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${video.id}.mp4`, + playerUrl: `${process.env.NEXT_PUBLIC_DOMAIN}/embed?v=${media.id}`, + streamUrl: `https://huggingface.co/datasets/jbilcke-hf/ai-tube-index/resolve/main/videos/${media.id}.mp4`, width: 1024, height: 576 } @@ -76,7 +75,12 @@ export async function generateMetadata( } -export default async function WatchPage({ searchParams: { v: videoId } }: AppQueryProps) { +export default async function WatchPage({ searchParams: { + v: videoId, + + // TODO add: + // m: mediaId +} }: AppQueryProps) { const publicVideo = await getVideo({ videoId, neverThrow: true }) // console.log("WatchPage: --> " + video?.id) return ( diff --git a/src/lib/formatDuration.ts b/src/lib/formatDuration.ts index eccb2fd28417e54cc8e0b61d764576cfe0a82d67..b82522cb8b2878d9c00e78df7159177325938e9e 100644 --- a/src/lib/formatDuration.ts +++ b/src/lib/formatDuration.ts @@ -1,11 +1,20 @@ import { intervalToDuration } from 'date-fns' +import { isValidNumber } from './isValidNumber' + +export function formatDuration(seconds: number): string { + if (!isValidNumber(seconds)) { + return '0:0' + } -export function formatDuration(seconds: number) { const duration = intervalToDuration({ start: 0, end: seconds * 1000 }) const zeroPad = (num: any) => String(num).padStart(2, '0') + if (!isValidNumber(duration.minutes) || !isValidNumber(duration.seconds)) { + return '00:00' + } + const formatted = `${zeroPad(duration.minutes)}:${zeroPad(duration.seconds)}` return formatted diff --git a/src/lib/isValidNumber.ts b/src/lib/isValidNumber.ts new file mode 100644 index 0000000000000000000000000000000000000000..a4e24e3aae75cd7851509aa8533cad1858b39792 --- /dev/null +++ b/src/lib/isValidNumber.ts @@ -0,0 +1,7 @@ +export function isValidNumber(input: any) { + return ( + typeof (input) === "number" && + isFinite(input) && + !isNaN(input) + ) +} \ No newline at end of file diff --git a/src/lib/parseAssetToCheckIfGaussian.ts b/src/lib/parseAssetToCheckIfGaussian.ts new file mode 100644 index 0000000000000000000000000000000000000000..ef2abd695c809a27982dacf2999454fd4d16d11c --- /dev/null +++ b/src/lib/parseAssetToCheckIfGaussian.ts @@ -0,0 +1,10 @@ +export function parseAssetToCheckIfGaussian(url: string) { + let ext = url.toLowerCase().split(".").pop() || "" + ext = ext.split("?").shift() || "" + + if (ext === "splatv" || ext === "splat" || ext === "gsplat" || ext === "ply") { + return true + } + + return false +} \ No newline at end of file diff --git a/src/lib/parseMediaProjectionType.ts b/src/lib/parseMediaProjectionType.ts new file mode 100644 index 0000000000000000000000000000000000000000..5426772837a01cea8bedd4edf5d7e518c765818a --- /dev/null +++ b/src/lib/parseMediaProjectionType.ts @@ -0,0 +1,30 @@ +import { parseProjectionFromLoRA } from "@/app/server/actions/utils/parseProjectionFromLoRA" +import { MediaInfo, MediaProjection } from "@/types/general" + +import { parseAssetToCheckIfGaussian } from "./parseAssetToCheckIfGaussian" + +export function parseMediaProjectionType(media?: MediaInfo): MediaProjection { + // note: we could also create a new value for when it is undetermined, + // or we could also return undefined + if (!media) { return "cartesian" } + + // TODO: add a way to detect its a gaussian splat (the file format, maybe?) + const isGaussian = + media.projection === "gaussian" || + parseAssetToCheckIfGaussian(media?.assetUrlHd) || + parseAssetToCheckIfGaussian(media?.assetUrl) + + if (isGaussian) { + return "gaussian" + } + + const isEquirectangular = + media.projection === "equirectangular" || + parseProjectionFromLoRA(media.lora) === "equirectangular" + + if (isEquirectangular) { + return "equirectangular" + } + + return "cartesian" +} \ No newline at end of file diff --git a/src/lib/usePlaylist.ts b/src/lib/usePlaylist.ts index eb3de6fc3fa4da270bc05437d20dcce8bc9546eb..f7d9efc1fac9619b3ae0f03697ab5a0d9a488a51 100644 --- a/src/lib/usePlaylist.ts +++ b/src/lib/usePlaylist.ts @@ -3,7 +3,7 @@ import { useCallback, useEffect, useRef } from "react"; import { create } from "zustand"; -import { VideoInfo } from "@/types/general"; +import { MediaInfo } from "@/types/general"; // Define the new track type with an optional playNow property interface PlaybackOptions { @@ -36,7 +36,7 @@ function getAudio(): HTMLAudioElement | null { } } -export const usePlaylistStore = create>((set, get) => ({ +export const usePlaylistStore = create>((set, get) => ({ playlist: [], audio: getAudio(), current: null, @@ -111,7 +111,7 @@ export function usePlaylist() { } }, [audio, audio?.currentTime, dequeue, setProgress, isPlaying]); - const playback = useCallback(async (options?: PlaybackOptions): Promise => { + const playback = useCallback(async (options?: PlaybackOptions): Promise => { if (!audio) { return } if (!options) { diff --git a/src/types/general.ts b/src/types/general.ts index 074fdf4c7b6e100d57a1dbb78e822239a1214c34..0ade55d416cfd5db545d90f068369b790918652a 100644 --- a/src/types/general.ts +++ b/src/types/general.ts @@ -352,39 +352,41 @@ export type VideoOrientation = | "landscape" | "square" -export type VideoProjection = +export type MediaProjection = | "cartesian" // this is the default | "equirectangular" + | "gaussian" -export type VideoInfo = { +// TODO: renamed this to MediaInfo +export type MediaInfo = { /** * UUID (v4) */ id: string /** - * Status of the video + * Status of the media */ status: VideoStatus /** - * Human readable title for the video + * Human readable title for the media */ label: string /** - * Human readable description for the video + * Human readable description for the media */ description: string /** - * Video prompt + * Content prompt */ prompt: string /** - * URL to the video thumbnail + * URL to the media thumbnail */ thumbnailUrl: string @@ -406,7 +408,7 @@ export type VideoInfo = { assetUrl: string /** - * This is contain the storage URL of the higher-resolution video + * This is contain the storage URL of the higher-resolution content */ assetUrlHd: string @@ -432,7 +434,7 @@ export type VideoInfo = { numberOfDislikes: number /** - * When was the video updated + * When was the media updated */ updatedAt: string @@ -472,29 +474,29 @@ export type VideoInfo = { channel: ChannelInfo /** - * Video duration + * Media duration */ duration: number /** - * Video width (eg. 1024) + * Media width (eg. 1024) */ width: number /** - * Video height (eg. 576) + * Media height (eg. 576) */ height: number /** - * General video aspect ratio + * General media aspect ratio */ orientation: VideoOrientation /** - * Video projection (cartesian by default) + * Media projection (cartesian by default) */ - projection: VideoProjection + projection: MediaProjection } export type CollectionInfo = { @@ -552,7 +554,7 @@ export type CollectionInfo = { */ duration: number - items: Array[] + items: Array[] } export type UserInfo = { @@ -633,6 +635,9 @@ export type InterfaceView = | "public_video" // public view of a video | "public_video_embed" // for integration into twitter etc | "public_music_videos" // public music videos - it's a special category, because music is *cool* + | "public_gaming" // for AiTube Gaming + | "public_4d" // for AiTube 4D + | "public_live" // for AiTube Live | "not_found" @@ -708,7 +713,7 @@ export type MediaDisplayLayout = | "table" // used when shown in a table mode | "micro" -export type VideoRating = { +export type MediaRating = { isLikedByUser: boolean isDislikedByUser: boolean numberOfLikes: number