diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 5340f38..f67eebf 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -63,10 +63,10 @@ jobs: run: yarn install - name: 🏗 Setup Expo - uses: expo/expo-github-action@v7 + uses: expo/expo-github-action@v8 with: expo-version: latest - eas-version: 3.3.1 + eas-version: latest token: ${{ secrets.EXPO_TOKEN }} - name: Build Web App uses: docker/build-push-action@v3 @@ -157,7 +157,6 @@ jobs: Deployement_Docker: runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' - needs: [ Test_Back ] environment: Production steps: diff --git a/back/.prettierrc b/back/.prettierrc index dcb7279..66ea8e2 100644 --- a/back/.prettierrc +++ b/back/.prettierrc @@ -1,4 +1,4 @@ { - "singleQuote": true, + "singleQuote": false, "trailingComma": "all" } \ No newline at end of file diff --git a/back/Dockerfile.dev b/back/Dockerfile.dev index 1d7d470..290b277 100644 --- a/back/Dockerfile.dev +++ b/back/Dockerfile.dev @@ -1,3 +1,3 @@ FROM node:17 WORKDIR /app -CMD npx prisma generate ; npx prisma migrate dev ; npm run start:dev +CMD npm i ; npx prisma generate ; npx prisma migrate dev ; npm run start:dev diff --git a/back/package-lock.json b/back/package-lock.json index 8ad0765..733cb92 100644 --- a/back/package-lock.json +++ b/back/package-lock.json @@ -23,11 +23,16 @@ "@types/bcryptjs": "^2.4.2", "@types/passport": "^1.0.12", "bcryptjs": "^2.4.3", + "canvas": "^2.11.2", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", + "cross-blob": "^3.0.2", + "fs": "^0.0.1-security", + "jsdom": "^22.1.0", "json-logger-service": "^9.0.1", "node-fetch": "^2.6.12", "nodemailer": "^6.9.5", + "opensheetmusicdisplay": "^1.8.4", "passport-google-oauth20": "^2.0.0", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", @@ -1528,6 +1533,108 @@ "node": ">=8" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/@mapbox/node-pre-gyp/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/@mapbox/node-pre-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@nestjs-modules/mailer": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@nestjs-modules/mailer/-/mailer-1.9.1.tgz", @@ -2017,6 +2124,18 @@ "node": ">= 8" } }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/@nuxtjs/opencollective": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", @@ -2879,6 +2998,11 @@ "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz", "integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A==" }, + "node_modules/@types/vexflow": { + "version": "1.2.39", + "resolved": "https://registry.npmjs.org/@types/vexflow/-/vexflow-1.2.39.tgz", + "integrity": "sha512-jcVXfWGqbZyeIvK7M3AVuFTUtOo9N9QN6q+dV72drDi+jMJqaI8IKvpP96xo2D58lskVGjSWJxWgOu1hgmlXUg==" + }, "node_modules/@types/yargs": { "version": "17.0.24", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", @@ -3241,6 +3365,11 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -3306,6 +3435,18 @@ "node": ">= 6.0.0" } }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "optional": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -3455,6 +3596,11 @@ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, "node_modules/archiver": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", @@ -3505,6 +3651,33 @@ "node": ">= 6" } }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/are-we-there-yet/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==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -3760,6 +3933,27 @@ "node": ">=8" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bindings/node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "node_modules/bit-twiddle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", + "integrity": "sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA==", + "optional": true + }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -3783,6 +3977,11 @@ "node": ">= 6" } }, + "node_modules/blob-polyfill": { + "version": "7.0.20220408", + "resolved": "https://registry.npmjs.org/blob-polyfill/-/blob-polyfill-7.0.20220408.tgz", + "integrity": "sha512-oD8Ydw+5lNoqq+en24iuPt1QixdPpe/nUF8azTHnviCZYu9zUC+TwdzIp5orpblJosNlgNbVmmAb//c6d6ImUQ==" + }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -4012,6 +4211,93 @@ "node": ">= 0.8" } }, + "node_modules/cacache": { + "version": "17.1.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", + "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "optional": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^7.0.3", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "optional": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -4071,6 +4357,52 @@ } ] }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/canvas/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/canvas/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/canvas/node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/capital-case": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", @@ -4290,6 +4622,14 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -4479,6 +4819,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4585,6 +4933,11 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/constant-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", @@ -4747,6 +5100,18 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-blob": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cross-blob/-/cross-blob-3.0.2.tgz", + "integrity": "sha512-u+7xq68MAjIqvoEKrdgIEupKJNBeU8MSl/cpfPmJ3rm9yvxrgbMPr8TkZS9qnwCgiVC8BsEt9kDkeD7He2zmNA==", + "dependencies": { + "blob-polyfill": "^7.0.20220408", + "fetch-blob": "^3.2.0" + }, + "engines": { + "node": "^12.20 || >=14.13" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -4807,6 +5172,17 @@ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" }, + "node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/data-uri-to-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", @@ -4815,6 +5191,50 @@ "node": ">= 6" } }, + "node_modules/data-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", + "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4831,6 +5251,26 @@ } } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "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==", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/dedent": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", @@ -5091,6 +5531,11 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -5116,6 +5561,14 @@ "node": ">=8" } }, + "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==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -5336,6 +5789,25 @@ } ] }, + "node_modules/domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dependencies": { + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", @@ -5532,6 +6004,15 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, "node_modules/encoding-japanese": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.0.0.tgz", @@ -5540,6 +6021,18 @@ "node": ">=8.10.0" } }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -5580,6 +6073,12 @@ "node": ">=6" } }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "optional": true + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6023,6 +6522,15 @@ "node": ">= 0.8.0" } }, + "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==", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/expect": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.3.tgz", @@ -6039,6 +6547,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "optional": true + }, "node_modules/express": { "version": "4.18.2", "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", @@ -6230,6 +6744,28 @@ "bser": "2.1.1" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -6545,6 +7081,11 @@ "node": ">= 0.6" } }, + "node_modules/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -6591,6 +7132,27 @@ "node": ">=10" } }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "optional": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/fs-monkey": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", @@ -6653,6 +7215,25 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -6760,6 +7341,31 @@ "node": ">= 4.0.0" } }, + "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==", + "optional": true + }, + "node_modules/gl": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/gl/-/gl-6.0.2.tgz", + "integrity": "sha512-yBbfpChOtFvg5D+KtMaBFvj6yt3vUnheNAH+UrQH2TfDB8kr0tERdL0Tjhe0W7xJ6jR6ftQBluTZR9jXUnKe8g==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "bit-twiddle": "^1.0.2", + "glsl-tokenizer": "^2.1.5", + "nan": "^2.17.0", + "node-abi": "^3.26.0", + "node-gyp": "^9.2.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -6852,6 +7458,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/glsl-tokenizer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", + "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", + "optional": true, + "dependencies": { + "through2": "^0.6.3" + } + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -6957,6 +7572,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/hasha": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", @@ -7018,6 +7638,17 @@ "remote-content": "^3.0.1" } }, + "node_modules/html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dependencies": { + "whatwg-encoding": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -7082,6 +7713,12 @@ "entities": "^4.4.0" } }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "optional": true + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -7130,6 +7767,15 @@ "node": ">=10.17.0" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "optional": true, + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -7198,6 +7844,11 @@ "node": ">=10" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -7237,7 +7888,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.8.19" } @@ -7473,6 +8124,12 @@ "node": ">=8" } }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "optional": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7497,6 +8154,11 @@ "node": ">=8" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -7682,9 +8344,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.0.tgz", - "integrity": "sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -8368,6 +9030,99 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsdom": { + "version": "22.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", + "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "dependencies": { + "abab": "^2.0.6", + "cssstyle": "^3.0.0", + "data-urls": "^4.0.0", + "decimal.js": "^10.4.3", + "domexception": "^4.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.4", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.2", + "w3c-xmlserializer": "^4.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^12.0.1", + "ws": "^8.13.0", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", + "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -8559,6 +9314,17 @@ "promise": "^7.0.1" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, "node_modules/juice": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/juice/-/juice-9.1.0.tgz", @@ -8690,6 +9456,14 @@ "resolved": "https://registry.npmjs.org/libqp/-/libqp-2.0.1.tgz", "integrity": "sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==" }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -8793,6 +9567,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, "node_modules/lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -8917,6 +9703,87 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "optional": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/makeerror": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", @@ -9035,6 +9902,18 @@ "node": ">=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==", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -9071,6 +9950,180 @@ "node": ">=8" } }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "optional": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/mjml": { "version": "4.14.1", "resolved": "https://registry.npmjs.org/mjml/-/mjml-4.14.1.tgz", @@ -9530,6 +10583,12 @@ "mkdirp": "bin/cmd.js" } }, + "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==", + "optional": true + }, "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -9612,7 +10671,12 @@ "node_modules/nan": { "version": "2.18.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==" + }, + "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==", "optional": true }, "node_modules/natural-compare": { @@ -9673,12 +10737,42 @@ "lower-case": "^1.1.1" } }, + "node_modules/node-abi": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.48.0.tgz", + "integrity": "sha512-uWR/uwQyVV2iN5+Wkf1/oQxOR9YjU7gBclJLg2qK7GDvVohcnY6LaBXKV89N79EQFyN4/e43O32yQYE5QdFYTA==", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -9707,6 +10801,46 @@ } } }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -9852,6 +10986,21 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -9863,6 +11012,11 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + }, "node_modules/oauth": { "version": "0.9.15", "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", @@ -9935,6 +11089,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/opensheetmusicdisplay": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/opensheetmusicdisplay/-/opensheetmusicdisplay-1.8.4.tgz", + "integrity": "sha512-ad7dDNmW/DFoZbdbhlhSAsYWDnI/t//vkxesNv6eIItshMgYxn9HxmiMjen48gF5fPSN6ljRduXirfON90/+Iw==", + "dependencies": { + "@types/vexflow": "^1.2.38", + "jszip": "3.10.1", + "loglevel": "^1.8.0", + "typescript-collections": "^1.3.3", + "vexflow": "1.2.93" + }, + "optionalDependencies": { + "gl": "^6.0.2" + } + }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", @@ -10160,6 +11329,11 @@ "node": ">= 8" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, "node_modules/param-case": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", @@ -10540,6 +11714,32 @@ "node": ">=4" } }, + "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==", + "optional": true, + "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/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10743,6 +11943,28 @@ "asap": "~2.0.3" } }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "optional": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "optional": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -10795,6 +12017,11 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, "node_modules/pug": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz", @@ -10911,7 +12138,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, + "devOptional": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -10921,7 +12148,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, "engines": { "node": ">=6" } @@ -10956,6 +12182,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -11262,6 +12493,11 @@ "node": ">=0.10.0" } }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, "node_modules/resolve": { "version": "1.22.2", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", @@ -11415,6 +12651,11 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" + }, "node_modules/run-applescript": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", @@ -11499,6 +12740,17 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -11680,6 +12932,16 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -11739,6 +13001,50 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "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" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", @@ -11892,6 +13198,27 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "optional": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -12184,6 +13511,11 @@ "node": ">=0.10" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, "node_modules/synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", @@ -12209,6 +13541,40 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "optional": true + }, "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", @@ -12237,6 +13603,52 @@ "node": ">= 6" } }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -12434,6 +13846,40 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, + "node_modules/through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", + "optional": true, + "dependencies": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "optional": true + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "optional": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "optional": true + }, "node_modules/titleize": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", @@ -12504,6 +13950,28 @@ "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==" }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -12682,6 +14150,18 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, + "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==", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12745,6 +14225,11 @@ "node": ">=14.17" } }, + "node_modules/typescript-collections": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/typescript-collections/-/typescript-collections-1.3.3.tgz", + "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==" + }, "node_modules/uc.micro": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", @@ -12777,6 +14262,30 @@ "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "optional": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -12865,6 +14374,15 @@ "punycode": "^2.1.0" } }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -12945,6 +14463,11 @@ "node": ">= 0.8" } }, + "node_modules/vexflow": { + "version": "1.2.93", + "resolved": "https://registry.npmjs.org/vexflow/-/vexflow-1.2.93.tgz", + "integrity": "sha512-LwHQDCc257Lwju35BhyZuPYcVWu0hIUqEdM7j9+B+bq91bSelssnAG5JR8odTUtgGuwwvGwLhXw37wtmHNCS6Q==" + }, "node_modules/vm2": { "version": "3.9.19", "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", @@ -12969,6 +14492,17 @@ "node": ">=0.10.0" } }, + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "dependencies": { + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -13117,6 +14651,14 @@ "node": ">=4.0.0" } }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -13200,6 +14742,36 @@ "node": ">=8.0.0" } }, + "node_modules/whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "engines": { + "node": ">=12" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -13223,6 +14795,14 @@ "node": ">= 8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", @@ -13361,6 +14941,39 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "node_modules/xregexp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", diff --git a/back/package.json b/back/package.json index 86f0414..e8d17be 100644 --- a/back/package.json +++ b/back/package.json @@ -35,12 +35,16 @@ "@types/bcryptjs": "^2.4.2", "@types/passport": "^1.0.12", "bcryptjs": "^2.4.3", + "canvas": "^2.11.2", "class-transformer": "^0.5.1", - "class-validator": "^0.13.2", - "json-logger-service": "^9.0.1", "class-validator": "^0.14.0", + "cross-blob": "^3.0.2", + "fs": "^0.0.1-security", + "jsdom": "^22.1.0", + "json-logger-service": "^9.0.1", "node-fetch": "^2.6.12", "nodemailer": "^6.9.5", + "opensheetmusicdisplay": "^1.8.4", "passport-google-oauth20": "^2.0.0", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", @@ -81,7 +85,8 @@ "moduleFileExtensions": [ "js", "json", - "ts" + "ts", + "mjs" ], "rootDir": "src", "testRegex": ".*\\.spec\\.ts$", diff --git a/back/src/assetsgenerator/generateImages_browserless.js b/back/src/assetsgenerator/generateImages_browserless.js new file mode 100644 index 0000000..0ac5661 --- /dev/null +++ b/back/src/assetsgenerator/generateImages_browserless.js @@ -0,0 +1,794 @@ +// import Blob from "cross-blob"; +import FS from "fs"; +import jsdom from "jsdom"; +//import headless_gl from "gl"; // this is now imported dynamically in a try catch, in case gl install fails, see #1160 +import * as OSMD from "opensheetmusicdisplay"; // window needs to be available before we can require OSMD + +let Blob; + +/* + Render each OSMD sample, grab the generated images, andg + dump them into a local directory as PNG or SVG files. + + inspired by Vexflow's generate_png_images and vexflow-tests.js + + This can be used to generate PNGs or SVGs from OSMD without a browser. + It's also used with the visual regression test system (using PNGs) in + `tools/visual_regression.sh` + (see package.json, used with npm run generate:blessed and generate:current, then test:visual). + + Note: this script needs to "fake" quite a few browser elements, like window, document, + and a Canvas HTMLElement (for PNG) or the DOM (for SVG) , + which otherwise are missing in pure nodejs, causing errors in OSMD. + For PNG it needs the canvas package installed. + There are also some hacks needed to set the container size (offsetWidth) correctly. + + Otherwise you'd need to run a headless browser, which is way slower, + see the semi-obsolete generateDiffImagesPuppeteerLocalhost.js +*/ + +function sleep(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +const timestampToMs = (timestamp, wholeNoteLength) => { + return timestamp.RealValue * wholeNoteLength; +}; +const getActualNoteLength = (note, wholeNoteLength) => { + let duration = timestampToMs(note.Length, wholeNoteLength); + if (note.NoteTie) { + const firstNote = note.NoteTie.Notes.at(1); + if (Object.is(note.NoteTie.StartNote, note) && firstNote) { + duration += timestampToMs(firstNote.Length, wholeNoteLength); + } else { + duration = 0; + } + } + return duration; +}; + +function getCursorPositions(osmd, filename, partitionDims) { + osmd.cursor.show(); + const bpm = osmd.Sheet.HasBPMInfo + ? osmd.Sheet.getExpressionsStartTempoInBPM() + : 60; + const wholeNoteLength = Math.round((60 / bpm) * 4000); + const curPos = []; + while (!osmd.cursor.iterator.EndReached) { + const notesToPlay = osmd.cursor + .NotesUnderCursor() + .filter((note) => { + return note.isRest() == false && note.Pitch; + }) + .map((note) => { + const fixedKey = + note.ParentVoiceEntry.ParentVoice.Parent.SubInstruments.at(0) + ?.fixedKey ?? 0; + const midiNumber = note.halfTone - fixedKey * 12; + const gain = note.ParentVoiceEntry.ParentVoice.Volume; + return { + note: midiNumber, + gain: gain, + duration: getActualNoteLength(note, wholeNoteLength), + }; + }); + const shortestNotes = osmd.cursor + .NotesUnderCursor() + .sort((n1, n2) => n1.Length.CompareTo(n2.Length)) + .at(0); + const ts = timestampToMs( + shortestNotes?.getAbsoluteTimestamp() ?? new OSMD.Fraction(-1), + wholeNoteLength, + ); + const sNL = timestampToMs( + shortestNotes?.Length ?? new OSMD.Fraction(-1), + wholeNoteLength, + ); + curPos.push({ + x: parseFloat(osmd.cursor.cursorElement.style.left), + y: parseFloat(osmd.cursor.cursorElement.style.top), + width: osmd.cursor.cursorElement.width, + height: osmd.cursor.cursorElement.height, + notes: notesToPlay, + timestamp: ts, + timing: sNL, + }); + osmd.cursor.next(); + } + osmd.cursor.reset(); + osmd.cursor.hide(); + + const cursorsFilename = `${imageDir}/${filename}.json`; + FS.writeFileSync( + cursorsFilename, + JSON.stringify({ + pageWidth: partitionDims[0], + pageHeight: partitionDims[1], + cursors: curPos, + }), + ); + console.log(`Saved cursor positions to ${cursorsFilename}`); +} + +// global variables +// (without these being global, we'd have to pass many of these values to the generateSampleImage function) +// eslint-disable-next-line prefer-const +let assetName; +let sampleDir; +let imageDir; +let imageFormat; +let pageWidth; +let pageHeight; +let filterRegex; +let mode; +let debugSleepTimeString; +let skyBottomLinePreference; +let pageFormat; + +export async function generateSongAssets( + assetName_, + sampleDir_, + imageDir_, + imageFormat_, + pageWidth_, + pageHeight_, + filterRegex_, + mode_, + debugSleepTimeString_, + skyBottomLinePreference_, +) { + assetName = assetName_; + sampleDir = sampleDir_; + imageDir = imageDir_; + imageFormat = imageFormat_; + pageWidth = pageWidth_; + pageHeight = pageHeight_; + filterRegex = filterRegex_; + mode = mode_; + debugSleepTimeString = debugSleepTimeString_; + skyBottomLinePreference = skyBottomLinePreference_; + imageFormat = imageFormat?.toLowerCase(); + eval(`import("cross-blob")`).then((module) => { + Blob = module.default; + }); + debug("" + sampleDir + " " + imageDir + " " + imageFormat); + + if (!mode) { + mode = ""; + } + if ( + !assetName || + !sampleDir || + !imageDir || + (imageFormat !== "png" && imageFormat !== "svg") + ) { + console.log( + "usage: " + + // eslint-disable-next-line max-len + "node test/Util/generateImages_browserless.mjs osmdBuildDir sampleDirectory imageDirectory svg|png [width|0] [height|0] [filterRegex|all|allSmall] [--debug|--osmdtesting] [debugSleepTime]", + ); + console.log( + " (use pageWidth and pageHeight 0 to not divide the rendering into pages (endless page))", + ); + console.log( + ' (use "all" to skip filterRegex parameter. "allSmall" with --osmdtesting skips two huge OSMD samples that take forever to render)', + ); + console.log( + "example: node test/Util/generateImages_browserless.mjs ../../build ./test/data/ ./export png", + ); + console.log( + "Error: need osmdBuildDir, sampleDir, imageDir and svg|png arguments. Exiting.", + ); + Promise.reject( + "Error: need osmdBuildDir, sampleDir, imageDir and svg|png arguments. Exiting.", + ); + } + await init(); +} + +// let OSMD; // can only be required once window was simulated +// eslint-disable-next-line @typescript-eslint/no-var-requires + +async function init() { + debug("init"); + + const osmdTestingMode = mode.includes("osmdtesting"); // can also be --debugosmdtesting + const osmdTestingSingleMode = mode.includes("osmdtestingsingle"); + const DEBUG = mode.startsWith("--debug"); + // const debugSleepTime = Number.parseInt(process.env.GENERATE_DEBUG_SLEEP_TIME) || 0; // 5000 works for me [sschmidTU] + if (DEBUG) { + // debug(' (note that --debug slows down the script by about 0.3s per file, through logging)') + const debugSleepTimeMs = Number.parseInt(debugSleepTimeString, 10); + if (debugSleepTimeMs > 0) { + debug("debug sleep time: " + debugSleepTimeString); + await sleep(Number.parseInt(debugSleepTimeMs, 10)); + // [VSCode] apparently this is necessary for the debugger to attach itself in time before the program closes. + // sometimes this is not enough, so you may have to try multiple times or increase the sleep timer. Unfortunately debugging nodejs isn't easy. + } + } + debug("sampleDir: " + sampleDir, DEBUG); + debug("imageDir: " + imageDir, DEBUG); + debug("imageFormat: " + imageFormat, DEBUG); + + pageFormat = "Endless"; + pageWidth = Number.parseInt(pageWidth, 10); + pageHeight = Number.parseInt(pageHeight, 10); + const endlessPage = !(pageHeight > 0 && pageWidth > 0); + if (!endlessPage) { + pageFormat = `${pageWidth}x${pageHeight}`; + } + + // ---- hacks to fake Browser elements OSMD and Vexflow need, like window, document, and a canvas HTMLElement ---- + // eslint-disable-next-line @typescript-eslint/no-var-requires + const dom = new jsdom.JSDOM(""); + // eslint-disable-next-line no-global-assign + // window = dom.window; + // eslint-disable-next-line no-global-assign + // document = dom.window.document; + + // eslint-disable-next-line no-global-assign + global.window = dom.window; + // eslint-disable-next-line no-global-assign + global.document = window.document; + //window.console = console; // probably does nothing + global.HTMLElement = window.HTMLElement; + global.HTMLAnchorElement = window.HTMLAnchorElement; + global.XMLHttpRequest = window.XMLHttpRequest; + global.DOMParser = window.DOMParser; + global.Node = window.Node; + if (imageFormat === "png") { + global.Canvas = window.Canvas; + } + + // For WebGLSkyBottomLineCalculatorBackend: Try to import gl dynamically + // this is so that the script doesn't fail if gl could not be installed, + // which can happen in some linux setups where gcc-11 is installed, see #1160 + try { + const { default: headless_gl } = await import("gl"); + const oldCreateElement = document.createElement.bind(document); + document.createElement = function (tagName, options) { + if (tagName.toLowerCase() === "canvas") { + const canvas = oldCreateElement(tagName, options); + const oldGetContext = canvas.getContext.bind(canvas); + canvas.getContext = function (contextType, contextAttributes) { + if ( + contextType.toLowerCase() === "webgl" || + contextType.toLowerCase() === "experimental-webgl" + ) { + const gl = headless_gl( + canvas.width, + canvas.height, + contextAttributes, + ); + gl.canvas = canvas; + return gl; + } else { + return oldGetContext(contextType, contextAttributes); + } + }; + return canvas; + } else { + return oldCreateElement(tagName, options); + } + }; + } catch { + if (skyBottomLinePreference === "--webgl") { + debug( + "WebGL image generation was requested but gl is not installed; using non-WebGL generation.", + ); + } + } + + // fix Blob not found (to support external modules like is-blob) + global.Blob = Blob; + + const div = document.createElement("div"); + div.id = "browserlessDiv"; + document.body.appendChild(div); + // const canvas = document.createElement('canvas') + // div.canvas = document.createElement('canvas') + + const zoom = 1.0; + // width of the div / PNG generated + let width = pageWidth * zoom; + // TODO sometimes the width is way too small for the score, may need to adjust zoom. + if (endlessPage) { + width = 1440; + } + let height = pageHeight; + if (endlessPage) { + height = 32767; + } + div.width = width; + div.height = height; + // div.offsetWidth = width; // doesn't work, offsetWidth is always 0 from this. see below + // div.clientWidth = width; + // div.clientHeight = height; + // div.scrollHeight = height; + // div.scrollWidth = width; + div.setAttribute("width", width); + div.setAttribute("height", height); + div.setAttribute("offsetWidth", width); + // debug('div.offsetWidth: ' + div.offsetWidth, DEBUG) // 0 here, set correctly later + // debug('div.height: ' + div.height, DEBUG) + + // hack: set offsetWidth reliably + Object.defineProperties(window.HTMLElement.prototype, { + offsetLeft: { + get: function () { + return parseFloat(window.getComputedStyle(this).marginTop) || 0; + }, + }, + offsetTop: { + get: function () { + return parseFloat(window.getComputedStyle(this).marginTop) || 0; + }, + }, + offsetHeight: { + get: function () { + return height; + }, + }, + offsetWidth: { + get: function () { + return width; + }, + }, + }); + debug("div.offsetWidth: " + div.offsetWidth, DEBUG); + debug("div.height: " + div.height, DEBUG); + // ---- end browser hacks (hopefully) ---- + + // load globally + + // Create the image directory if it doesn't exist. + FS.mkdirSync(imageDir, { recursive: true }); + + // const sampleDirFilenames = FS.readdirSync(sampleDir); + let samplesToProcess = []; // samples we want to process/generate pngs of, excluding the filtered out files/filenames + + // sampleDir is the direct path to a single file but is then only keept as a the directory containing the file + if (sampleDir.match("^.*(.xml)|(.musicxml)|(.mxl)$")) { + let pathParts = sampleDir.split("/"); + let filename = pathParts[pathParts.length - 1]; + sampleDir = pathParts.slice(0, pathParts.length - 1).join("/"); + samplesToProcess.push(filename); + } else { + debug("not a correct extension sampleDir: " + sampleDir, DEBUG); + } + // for (const sampleFilename of sampleDirFilenames) { + // if (osmdTestingMode && filterRegex === "allSmall") { + // if (sampleFilename.match("^(Actor)|(Gounod)")) { + // // TODO maybe filter by file size instead + // debug("filtering big file: " + sampleFilename, DEBUG); + // continue; + // } + // } + // // eslint-disable-next-line no-useless-escape + // if (sampleFilename.match("^.*(.xml)|(.musicxml)|(.mxl)$")) { + // // debug('found musicxml/mxl: ' + sampleFilename) + // samplesToProcess.push(sampleFilename); + // } else { + // debug("discarded file/directory: " + sampleFilename, DEBUG); + // } + // } + + // filter samples to process by regex if given + if ( + filterRegex && + filterRegex !== "" && + filterRegex !== "all" && + !(osmdTestingMode && filterRegex === "allSmall") + ) { + debug("filtering samples for regex: " + filterRegex, DEBUG); + samplesToProcess = samplesToProcess.filter((filename) => + filename.match(filterRegex), + ); + debug(`found ${samplesToProcess.length} matches: `, DEBUG); + for (let i = 0; i < samplesToProcess.length; i++) { + debug(samplesToProcess[i], DEBUG); + } + } + + const backend = imageFormat === "png" ? "canvas" : "svg"; + const osmdInstance = new OSMD.OpenSheetMusicDisplay(div, { + autoResize: false, + backend: backend, + pageBackgroundColor: "#FFFFFF", + pageFormat: pageFormat, + // defaultFontFamily: 'Arial', + drawTitle: false, + renderSingleHorizontalStaffline: true, + drawComposer: false, + drawCredits: false, + drawLyrics: false, + drawPartNames: false, + followCursor: false, + cursorsOptions: [{ type: 0, color: "green", alpha: 0.5, follow: false }], + }); + // for more options check OSMDOptions.ts + + // you can set finer-grained rendering/engraving settings in EngravingRules: + // osmdInstance.EngravingRules.TitleTopDistance = 5.0 // 5.0 is default + // (unless in osmdTestingMode, these will be reset with drawingParameters default) + // osmdInstance.EngravingRules.PageTopMargin = 5.0 // 5 is default + // osmdInstance.EngravingRules.PageBottomMargin = 5.0 // 5 is default. <5 can cut off scores that extend in the last staffline + // note that for now the png and canvas will still have the height given in the script argument, + // so even with a margin of 0 the image will be filled to the full height. + // osmdInstance.EngravingRules.PageLeftMargin = 5.0 // 5 is default + // osmdInstance.EngravingRules.PageRightMargin = 5.0 // 5 is default + // osmdInstance.EngravingRules.MetronomeMarkXShift = -8; // -6 is default + // osmdInstance.EngravingRules.DistanceBetweenVerticalSystemLines = 0.15; // 0.35 is default + // for more options check EngravingRules.ts (though not all of these are meant and fully supported to be changed at will) + + if (DEBUG) { + osmdInstance.setLogLevel("debug"); + // debug(`osmd PageFormat: ${osmdInstance.EngravingRules.PageFormat.width}x${osmdInstance.EngravingRules.PageFormat.height}`) + debug( + `osmd PageFormat idString: ${osmdInstance.EngravingRules.PageFormat.idString}`, + ); + debug("PageHeight: " + osmdInstance.EngravingRules.PageHeight); + } else { + osmdInstance.setLogLevel("info"); // doesn't seem to work, log.debug still logs + } + + debug( + "[OSMD.generateImages] starting loop over samples, saving images to " + + imageDir, + DEBUG, + ); + for (let i = 0; i < samplesToProcess.length; i++) { + const sampleFilename = samplesToProcess[i]; + debug("sampleFilename: " + sampleFilename, DEBUG); + + await generateSampleImage( + sampleFilename, + sampleDir, + osmdInstance, + osmdTestingMode, + {}, + DEBUG, + ); + + if ( + osmdTestingMode && + !osmdTestingSingleMode && + sampleFilename.startsWith("Beethoven") && + sampleFilename.includes("Geliebte") + ) { + // generate one more testing image with skyline and bottomline. (startsWith 'Beethoven' don't catch the function test) + await generateSampleImage( + sampleFilename, + sampleDir, + osmdInstance, + osmdTestingMode, + { skyBottomLine: true }, + DEBUG, + ); + // generate one more testing image with GraphicalNote positions + await generateSampleImage( + sampleFilename, + sampleDir, + osmdInstance, + osmdTestingMode, + { boundingBoxes: "VexFlowGraphicalNote" }, + DEBUG, + ); + } + } + + debug("done, exiting."); + return Promise.resolve(); +} + +// eslint-disable-next-line +// let maxRss = 0, maxRssFilename = '' // to log memory usage (debug) +async function generateSampleImage( + sampleFilename, + directory, + osmdInstance, + osmdTestingMode, + options = {}, + DEBUG = false, +) { + function makeSkyBottomLineOptions() { + const preference = skyBottomLinePreference ?? ""; + if (preference === "--batch") { + return { + preferredSkyBottomLineBatchCalculatorBackend: 0, // plain + skyBottomLineBatchCriteria: 0, // use batch algorithm only + }; + } else if (preference === "--webgl") { + return { + preferredSkyBottomLineBatchCalculatorBackend: 1, // webgl + skyBottomLineBatchCriteria: 0, // use batch algorithm only + }; + } else { + return { + preferredSkyBottomLineBatchCalculatorBackend: 0, // plain + skyBottomLineBatchCriteria: Infinity, // use non-batch algorithm only + }; + } + } + + const samplePath = directory + "/" + sampleFilename; + let loadParameter = FS.readFileSync(samplePath); + + if (sampleFilename.endsWith(".mxl")) { + loadParameter = await OSMD.MXLHelper.MXLtoXMLstring(loadParameter); + } else { + loadParameter = loadParameter.toString(); + } + // debug('loadParameter: ' + loadParameter) + // debug('typeof loadParameter: ' + typeof loadParameter) + + // set sample-specific options for OSMD visual regression testing + let includeSkyBottomLine = false; + let drawBoundingBoxString; + let isTestOctaveShiftInvisibleInstrument; + let isTestInvisibleMeasureNotAffectingLayout; + if (osmdTestingMode) { + const isFunctionTestAutobeam = sampleFilename.startsWith( + "OSMD_function_test_autobeam", + ); + const isFunctionTestAutoColoring = sampleFilename.startsWith( + "OSMD_function_test_auto-custom-coloring", + ); + const isFunctionTestSystemAndPageBreaks = sampleFilename.startsWith( + "OSMD_Function_Test_System_and_Page_Breaks", + ); + const isFunctionTestDrawingRange = sampleFilename.startsWith( + "OSMD_function_test_measuresToDraw_", + ); + const defaultOrCompactTightMode = sampleFilename.startsWith( + "OSMD_Function_Test_Container_height", + ) + ? "compacttight" + : "default"; + const isTestFlatBeams = sampleFilename.startsWith("test_drum_tuplet_beams"); + const isTestEndClefStaffEntryBboxes = sampleFilename.startsWith( + "test_end_measure_clefs_staffentry_bbox", + ); + const isTestPageBreakImpliesSystemBreak = sampleFilename.startsWith( + "test_pagebreak_implies_systembreak", + ); + const isTestPageBottomMargin0 = + sampleFilename.includes("PageBottomMargin0"); + const isTestTupletBracketTupletNumber = sampleFilename.includes( + "test_tuplet_bracket_tuplet_number", + ); + const isTestCajon2NoteSystem = sampleFilename.includes( + "test_cajon_2-note-system", + ); + isTestOctaveShiftInvisibleInstrument = sampleFilename.includes( + "test_octaveshift_first_instrument_invisible", + ); + const isTextOctaveShiftExtraGraphicalMeasure = sampleFilename.includes( + "test_octaveshift_extragraphicalmeasure", + ); + isTestInvisibleMeasureNotAffectingLayout = sampleFilename.includes( + "test_invisible_measure_not_affecting_layout", + ); + const isTestWedgeMultilineCrescendo = sampleFilename.includes( + "test_wedge_multiline_crescendo", + ); + const isTestWedgeMultilineDecrescendo = sampleFilename.includes( + "test_wedge_multiline_decrescendo", + ); + osmdInstance.EngravingRules.loadDefaultValues(); // note this may also be executed in setOptions below via drawingParameters default + if (isTestEndClefStaffEntryBboxes) { + drawBoundingBoxString = "VexFlowStaffEntry"; + } else { + drawBoundingBoxString = options.boundingBoxes; // undefined is also a valid value: no bboxes + } + osmdInstance.setOptions({ + autoBeam: isFunctionTestAutobeam, // only set to true for function test autobeam + coloringMode: isFunctionTestAutoColoring ? 2 : 0, + // eslint-disable-next-line max-len + coloringSetCustom: isFunctionTestAutoColoring + ? [ + "#d82c6b", + "#F89D15", + "#FFE21A", + "#4dbd5c", + "#009D96", + "#43469d", + "#76429c", + "#ff0000", + ] + : undefined, + colorStemsLikeNoteheads: isFunctionTestAutoColoring, + drawingParameters: defaultOrCompactTightMode, // note: default resets all EngravingRules. could be solved differently + drawFromMeasureNumber: isFunctionTestDrawingRange ? 9 : 1, + drawUpToMeasureNumber: isFunctionTestDrawingRange + ? 12 + : Number.MAX_SAFE_INTEGER, + newSystemFromXML: isFunctionTestSystemAndPageBreaks, + newSystemFromNewPageInXML: isTestPageBreakImpliesSystemBreak, + newPageFromXML: isFunctionTestSystemAndPageBreaks, + pageBackgroundColor: "#FFFFFF", // reset by drawingparameters default + pageFormat: pageFormat, // reset by drawingparameters default, + ...makeSkyBottomLineOptions(), + }); + // note that loadDefaultValues() may be executed in setOptions with drawingParameters default + //osmdInstance.EngravingRules.RenderSingleHorizontalStaffline = true; // to use this option here, place it after setOptions(), see above + osmdInstance.EngravingRules.AlwaysSetPreferredSkyBottomLineBackendAutomatically = false; // this would override the command line options (--plain etc) + includeSkyBottomLine = options.skyBottomLine + ? options.skyBottomLine + : false; // apparently es6 doesn't have ?? operator + osmdInstance.drawSkyLine = includeSkyBottomLine; // if includeSkyBottomLine, draw skyline and bottomline, else not + osmdInstance.drawBottomLine = includeSkyBottomLine; + osmdInstance.setDrawBoundingBox(drawBoundingBoxString, false); // false: don't render (now). also (re-)set if undefined! + if (isTestFlatBeams) { + osmdInstance.EngravingRules.FlatBeams = true; + // osmdInstance.EngravingRules.FlatBeamOffset = 30; + osmdInstance.EngravingRules.FlatBeamOffset = 10; + osmdInstance.EngravingRules.FlatBeamOffsetPerBeam = 10; + } else { + osmdInstance.EngravingRules.FlatBeams = false; + } + if (isTestPageBottomMargin0) { + osmdInstance.EngravingRules.PageBottomMargin = 0; + } + if (isTestTupletBracketTupletNumber) { + osmdInstance.EngravingRules.TupletNumberLimitConsecutiveRepetitions = true; + osmdInstance.EngravingRules.TupletNumberMaxConsecutiveRepetitions = 2; + osmdInstance.EngravingRules.TupletNumberAlwaysDisableAfterFirstMax = true; // necessary to trigger bug + } + if (isTestCajon2NoteSystem) { + osmdInstance.EngravingRules.PercussionUseCajon2NoteSystem = true; + } + if ( + isTextOctaveShiftExtraGraphicalMeasure || + isTestOctaveShiftInvisibleInstrument || + isTestWedgeMultilineCrescendo || + isTestWedgeMultilineDecrescendo + ) { + osmdInstance.EngravingRules.NewSystemAtXMLNewSystemAttribute = true; + } + } + + try { + debug("loading sample " + sampleFilename, DEBUG); + await osmdInstance.load(loadParameter, sampleFilename); // if using load.then() without await, memory will not be freed up between renders + if (isTestOctaveShiftInvisibleInstrument) { + osmdInstance.Sheet.Instruments[0].Visible = false; + } + if (isTestInvisibleMeasureNotAffectingLayout) { + if (osmdInstance.Sheet.Instruments[1]) { + // some systems can't handle ?. in this script (just a safety check anyways) + osmdInstance.Sheet.Instruments[1].Visible = false; + } + } + } catch (ex) { + debug( + "couldn't load sample " + sampleFilename + ", skipping. Error: \n" + ex, + ); + return Promise.reject(ex); + } + debug("xml loaded", DEBUG); + try { + osmdInstance.render(); + // there were reports that await could help here, but render isn't a synchronous function, and it seems to work. see #932 + } catch (ex) { + debug("renderError: " + ex); + } + debug("rendered", DEBUG); + + const markupStrings = []; // svg + const dataUrls = []; // png + let canvasImage; + + // intended to use only for the chromacase partition use case (always 1 page in svg) + let partitionDims = [-1, -1]; + + for ( + let pageNumber = 1; + pageNumber < Number.POSITIVE_INFINITY; + pageNumber++ + ) { + if (imageFormat === "png") { + canvasImage = document.getElementById( + "osmdCanvasVexFlowBackendCanvas" + pageNumber, + ); + if (!canvasImage) { + break; + } + if (!canvasImage.toDataURL) { + debug( + `error: could not get canvas image for page ${pageNumber} for file: ${sampleFilename}`, + ); + break; + } + dataUrls.push(canvasImage.toDataURL()); + } else if (imageFormat === "svg") { + const svgElement = document.getElementById("osmdSvgPage" + pageNumber); + if (!svgElement) { + break; + } + // The important xmlns attribute is not serialized unless we set it here + svgElement.setAttribute("xmlns", "http://www.w3.org/2000/svg"); + const width = svgElement.getAttribute("width"); + const height = svgElement.getAttribute("height"); + partitionDims = [width, height]; + markupStrings.push(svgElement.outerHTML); + } + } + + // create the cursor positions file + getCursorPositions(osmdInstance, assetName, partitionDims); + + for ( + let pageIndex = 0; + pageIndex < Math.max(dataUrls.length, markupStrings.length); + pageIndex++ + ) { + const pageNumberingString = `${pageIndex + 1}`; + const skybottomlineString = includeSkyBottomLine ? "skybottomline_" : ""; + const graphicalNoteBboxesString = drawBoundingBoxString + ? "bbox" + drawBoundingBoxString + "_" + : ""; + // pageNumberingString = dataUrls.length > 0 ? pageNumberingString : '' // don't put '_1' at the end if only one page. though that may cause more work + const pageFilename = `${imageDir}/${assetName}.${imageFormat}`; + + if (imageFormat === "png") { + const dataUrl = dataUrls[pageIndex]; + if (!dataUrl || !dataUrl.split) { + debug( + `error: could not get dataUrl (imageData) for page ${ + pageIndex + 1 + } of sample: ${sampleFilename}`, + ); + continue; + } + const imageData = dataUrl.split(";base64,").pop(); + const imageBuffer = Buffer.from(imageData, "base64"); + + debug("got image data, saving to: " + pageFilename, DEBUG); + FS.writeFileSync(pageFilename, imageBuffer, { encoding: "base64" }); + } else if (imageFormat === "svg") { + const markup = markupStrings[pageIndex]; + if (!markup) { + debug( + `error: could not get markup (SVG data) for page ${ + pageIndex + 1 + } of sample: ${sampleFilename}`, + ); + continue; + } + + debug("got svg markup data, saving to: " + pageFilename, DEBUG); + // replace every bounding-box by none (react native doesn't support bounding-box) + FS.writeFileSync(pageFilename, markup.replace(/bounding-box/g, "none"), { + encoding: "utf-8", + }); + } + + // debug: log memory usage + // const usage = process.memoryUsage() + // for (const entry of Object.entries(usage)) { + // if (entry[0] === 'rss') { + // if (entry[1] > maxRss) { + // maxRss = entry[1] + // maxRssFilename = pageFilename + // } + // } + // debug(entry[0] + ': ' + entry[1] / (1024 * 1024) + 'mb') + // } + // debug('maxRss: ' + (maxRss / 1024 / 1024) + 'mb' + ' for ' + maxRssFilename) + } + // debug('maxRss total: ' + (maxRss / 1024 / 1024) + 'mb' + ' for ' + maxRssFilename) + + // await sleep(5000) + // }) // end read file +} + +function debug(msg, debugEnabled = true) { + if (debugEnabled) { + console.log("[generateImages] " + msg); + } +} + +// init(); diff --git a/back/src/main.ts b/back/src/main.ts index 951ff49..0f5a720 100644 --- a/back/src/main.ts +++ b/back/src/main.ts @@ -65,7 +65,7 @@ async function bootstrap() { app.useGlobalPipes(new ValidationPipe()); app.enableCors(); - app.useGlobalInterceptors(new AspectLogger()); + //app.useGlobalInterceptors(new AspectLogger()); await app.listen(3000); } diff --git a/back/src/song/song.controller.ts b/back/src/song/song.controller.ts index e2143cc..ea13c75 100644 --- a/back/src/song/song.controller.ts +++ b/back/src/song/song.controller.ts @@ -15,13 +15,14 @@ import { Req, StreamableFile, UseGuards, -} from '@nestjs/common'; -import { ApiOkResponsePlaginated, Plage } from 'src/models/plage'; -import { CreateSongDto } from './dto/create-song.dto'; -import { SongService } from './song.service'; -import { Request } from 'express'; -import { Prisma, Song } from '@prisma/client'; -import { createReadStream, existsSync } from 'fs'; + Header, +} from "@nestjs/common"; +import { ApiOkResponsePlaginated, Plage } from "src/models/plage"; +import { CreateSongDto } from "./dto/create-song.dto"; +import { SongService } from "./song.service"; +import { Request } from "express"; +import { Prisma, Song } from "@prisma/client"; +import { createReadStream, existsSync, readFileSync } from "fs"; import { ApiNotFoundResponse, ApiOkResponse, @@ -29,14 +30,14 @@ import { ApiProperty, ApiTags, ApiUnauthorizedResponse, -} from '@nestjs/swagger'; -import { HistoryService } from 'src/history/history.service'; -import { JwtAuthGuard } from 'src/auth/jwt-auth.guard'; -import { FilterQuery } from 'src/utils/filter.pipe'; -import { Song as _Song } from 'src/_gen/prisma-class/song'; -import { SongHistory } from 'src/_gen/prisma-class/song_history'; -import { IncludeMap, mapInclude } from 'src/utils/include'; -import { Public } from 'src/auth/public'; +} from "@nestjs/swagger"; +import { HistoryService } from "src/history/history.service"; +import { JwtAuthGuard } from "src/auth/jwt-auth.guard"; +import { FilterQuery } from "src/utils/filter.pipe"; +import { Song as _Song } from "src/_gen/prisma-class/song"; +import { SongHistory } from "src/_gen/prisma-class/song_history"; +import { IncludeMap, mapInclude } from "src/utils/include"; +import { Public } from "src/auth/public"; class SongHistoryResult { @ApiProperty() @@ -45,16 +46,16 @@ class SongHistoryResult { history: SongHistory[]; } -@Controller('song') -@ApiTags('song') +@Controller("song") +@ApiTags("song") @UseGuards(JwtAuthGuard) export class SongController { static filterableFields: string[] = [ - '+id', - 'name', - '+artistId', - '+albumId', - '+genreId', + "+id", + "name", + "+artistId", + "+albumId", + "+genreId", ]; static includableFields: IncludeMap = { artist: true, @@ -69,36 +70,37 @@ export class SongController { private readonly historyService: HistoryService, ) {} - @Get(':id/midi') - @ApiOperation({ description: 'Streams the midi file of the requested song' }) - @ApiNotFoundResponse({ description: 'Song not found' }) - @ApiOkResponse({ description: 'Returns the midi file succesfully' }) - async getMidi(@Param('id', ParseIntPipe) id: number) { + @Get(":id/midi") + @ApiOperation({ description: "Streams the midi file of the requested song" }) + @ApiNotFoundResponse({ description: "Song not found" }) + @ApiOkResponse({ description: "Returns the midi file succesfully" }) + async getMidi(@Param("id", ParseIntPipe) id: number) { const song = await this.songService.song({ id }); - if (!song) throw new NotFoundException('Song not found'); + if (!song) throw new NotFoundException("Song not found"); try { const file = createReadStream(song.midiPath); - return new StreamableFile(file, { type: 'audio/midi' }); + return new StreamableFile(file, { type: "audio/midi" }); } catch { throw new InternalServerErrorException(); } } - @Get(':id/illustration') + @Get(":id/illustration") @ApiOperation({ - description: 'Streams the illustration of the requested song', + description: "Streams the illustration of the requested song", }) - @ApiNotFoundResponse({ description: 'Song not found' }) - @ApiOkResponse({ description: 'Returns the illustration succesfully' }) + @ApiNotFoundResponse({ description: "Song not found" }) + @ApiOkResponse({ description: "Returns the illustration succesfully" }) + @Header("Cache-Control", "max-age=86400") @Public() - async getIllustration(@Param('id', ParseIntPipe) id: number) { + async getIllustration(@Param("id", ParseIntPipe) id: number) { const song = await this.songService.song({ id }); - if (!song) throw new NotFoundException('Song not found'); + if (!song) throw new NotFoundException("Song not found"); if (song.illustrationPath === null) throw new NotFoundException(); if (!existsSync(song.illustrationPath)) - throw new NotFoundException('Illustration not found'); + throw new NotFoundException("Illustration not found"); try { const file = createReadStream(song.illustrationPath); @@ -108,24 +110,77 @@ export class SongController { } } - @Get(':id/musicXml') + @Get(":id/musicXml") @ApiOperation({ - description: 'Streams the musicXML file of the requested song', + description: "Streams the musicXML file of the requested song", }) - @ApiNotFoundResponse({ description: 'Song not found' }) - @ApiOkResponse({ description: 'Returns the musicXML file succesfully' }) - async getMusicXml(@Param('id', ParseIntPipe) id: number) { + @ApiNotFoundResponse({ description: "Song not found" }) + @ApiOkResponse({ description: "Returns the musicXML file succesfully" }) + async getMusicXml(@Param("id", ParseIntPipe) id: number) { const song = await this.songService.song({ id }); - if (!song) throw new NotFoundException('Song not found'); + if (!song) throw new NotFoundException("Song not found"); - const file = createReadStream(song.musicXmlPath, { encoding: 'binary' }); + const file = createReadStream(song.musicXmlPath, { encoding: "binary" }); return new StreamableFile(file); } + @Get(":id/assets/partition") + @ApiOperation({ + description: "Streams the svg partition of the requested song", + }) + @ApiNotFoundResponse({ description: "Song not found" }) + @ApiOkResponse({ description: "Returns the svg partition succesfully" }) + @Header("Cache-Control", "max-age=86400") + @Header("Content-Type", "image/svg+xml") + @Public() + async getPartition(@Param("id", ParseIntPipe) id: number) { + const song = await this.songService.song({ id }); + if (!song) throw new NotFoundException("Song not found"); + + // check if /data/cache/songs/id exists + if (!existsSync("/data/cache/songs/" + id + ".svg")) { + // if not, generate assets + await this.songService.createAssets(song.musicXmlPath, id); + } + + try { + const file = readFileSync("/data/cache/songs/" + id + ".svg"); + return file.toString(); + } catch { + throw new InternalServerErrorException(); + } + } + + @Get(":id/assets/cursors") + @ApiOperation({ + description: "Streams the partition cursors of the requested song", + }) + @ApiNotFoundResponse({ description: "Song not found" }) + @ApiOkResponse({ description: "Returns the partition cursors succesfully" }) + @Header("Cache-Control", "max-age=86400") + @Header("Content-Type", "application/json") + async getCursors(@Param("id", ParseIntPipe) id: number) { + const song = await this.songService.song({ id }); + if (!song) throw new NotFoundException("Song not found"); + + // check if /data/cache/songs/id exists + if (!existsSync("/data/cache/songs/" + id + ".json")) { + // if not, generate assets + await this.songService.createAssets(song.musicXmlPath, id); + } + + try { + const file = readFileSync("/data/cache/songs/" + id + ".json"); + return JSON.parse(file.toString()); + } catch { + throw new InternalServerErrorException(); + } + } + @Post() @ApiOperation({ description: - 'register a new song in the database, should not be used by the frontend', + "register a new song in the database, should not be used by the frontend", }) async create(@Body() createSongDto: CreateSongDto) { try { @@ -148,13 +203,13 @@ export class SongController { } } - @Delete(':id') - @ApiOperation({ description: 'delete a song by id' }) - async remove(@Param('id', ParseIntPipe) id: number) { + @Delete(":id") + @ApiOperation({ description: "delete a song by id" }) + async remove(@Param("id", ParseIntPipe) id: number) { try { return await this.songService.deleteSong({ id }); } catch { - throw new NotFoundException('Invalid ID'); + throw new NotFoundException("Invalid ID"); } } @@ -163,9 +218,9 @@ export class SongController { async findAll( @Req() req: Request, @FilterQuery(SongController.filterableFields) where: Prisma.SongWhereInput, - @Query('include') include: string, - @Query('skip', new DefaultValuePipe(0), ParseIntPipe) skip: number, - @Query('take', new DefaultValuePipe(20), ParseIntPipe) take: number, + @Query("include") include: string, + @Query("skip", new DefaultValuePipe(0), ParseIntPipe) skip: number, + @Query("take", new DefaultValuePipe(20), ParseIntPipe) take: number, ): Promise> { const ret = await this.songService.songs({ skip, @@ -176,14 +231,14 @@ export class SongController { return new Plage(ret, req); } - @Get(':id') - @ApiOperation({ description: 'Get a specific song data' }) - @ApiNotFoundResponse({ description: 'Song not found' }) - @ApiOkResponse({ type: _Song, description: 'Requested song' }) + @Get(":id") + @ApiOperation({ description: "Get a specific song data" }) + @ApiNotFoundResponse({ description: "Song not found" }) + @ApiOkResponse({ type: _Song, description: "Requested song" }) async findOne( @Req() req: Request, - @Param('id', ParseIntPipe) id: number, - @Query('include') include: string, + @Param("id", ParseIntPipe) id: number, + @Query("include") include: string, ) { const res = await this.songService.song( { @@ -192,21 +247,22 @@ export class SongController { mapInclude(include, req, SongController.includableFields), ); - if (res === null) throw new NotFoundException('Song not found'); + if (res === null) throw new NotFoundException("Song not found"); return res; } - @Get(':id/history') + @Get(":id/history") @HttpCode(200) + @UseGuards(JwtAuthGuard) @ApiOperation({ - description: 'get the history of the connected user on a specific song', + description: "get the history of the connected user on a specific song", }) @ApiOkResponse({ type: SongHistoryResult, - description: 'Records of previous games of the user', + description: "Records of previous games of the user", }) - @ApiUnauthorizedResponse({ description: 'Invalid token' }) - async getHistory(@Req() req: any, @Param('id', ParseIntPipe) id: number) { + @ApiUnauthorizedResponse({ description: "Invalid token" }) + async getHistory(@Req() req: any, @Param("id", ParseIntPipe) id: number) { return this.historyService.getForSong({ playerId: req.user.id, songId: id, diff --git a/back/src/song/song.service.ts b/back/src/song/song.service.ts index 80112d3..41a6250 100644 --- a/back/src/song/song.service.ts +++ b/back/src/song/song.service.ts @@ -1,10 +1,29 @@ -import { Injectable } from '@nestjs/common'; -import { Prisma, Song } from '@prisma/client'; -import { PrismaService } from 'src/prisma/prisma.service'; +import { Injectable } from "@nestjs/common"; +import { Prisma, Song } from "@prisma/client"; +import { PrismaService } from "src/prisma/prisma.service"; +import { generateSongAssets } from "src/assetsgenerator/generateImages_browserless"; @Injectable() export class SongService { - constructor(private prisma: PrismaService) {} + // number is the song id + private assetCreationTasks: Map>; + constructor(private prisma: PrismaService) { + this.assetCreationTasks = new Map(); + } + + async createAssets(mxlPath: string, songId: number): Promise { + if (this.assetCreationTasks.has(songId)) { + await this.assetCreationTasks.get(songId); + this.assetCreationTasks.delete(songId); + return; + } + // mxlPath can the path to an archive to an xml file or the path to the xml file directly + this.assetCreationTasks.set( + songId, + generateSongAssets(songId, mxlPath, "/data/cache/songs", "svg"), + ); + return await this.assetCreationTasks.get(songId); + } async songByArtist(data: number): Promise { return this.prisma.song.findMany({ diff --git a/back/tsconfig.json b/back/tsconfig.json index cf106ab..f12f8a7 100644 --- a/back/tsconfig.json +++ b/back/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "module": "commonjs", + "module": "NodeNext", "declaration": true, "removeComments": true, "emitDecoratorMetadata": true, @@ -16,6 +16,9 @@ "noImplicitAny": false, "strictBindCallApply": false, "forceConsistentCasingInFileNames": false, - "noFallthroughCasesInSwitch": true + "noFallthroughCasesInSwitch": true, + "moduleResolution": "NodeNext", + "esModuleInterop": true, + "allowJs": true, } } diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index f0b4d8b..0c9dd43 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -7,6 +7,7 @@ volumes: services: back: + #platform: linux/amd64 build: context: ./back dockerfile: Dockerfile.dev diff --git a/docker-compose.yml b/docker-compose.yml index 0b227df..7e47248 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,6 +9,7 @@ volumes: services: back: + #platform: linux/amd64 build: ./back ports: - "3000:3000" diff --git a/front/API.ts b/front/API.ts index 49e370d..e548c5c 100644 --- a/front/API.ts +++ b/front/API.ts @@ -23,6 +23,7 @@ import { AccessTokenResponseHandler } from './models/AccessTokenResponse'; import * as yup from 'yup'; import { base64ToBlob } from './utils/base64ToBlob'; import { ImagePickerAsset } from 'expo-image-picker'; +import { SongCursorInfos, SongCursorInfosHandler } from './models/SongCursorInfos'; type AuthenticationInput = { username: string; password: string }; type RegistrationInput = AuthenticationInput & { email: string }; @@ -66,7 +67,9 @@ export class ValidationError extends Error { export default class API { public static readonly baseUrl = - Platform.OS === 'web' ? '/api' : process.env.EXPO_PUBLIC_API_URL!; + Platform.OS === 'web' && !process.env.EXPO_PUBLIC_API_URL + ? '/api' + : process.env.EXPO_PUBLIC_API_URL!; public static async fetch( params: FetchParams, handle: Pick, 'raw'> @@ -113,11 +116,11 @@ export default class API { } const handler = handle.handler; const body = await response.text(); + if (!response.ok) { + throw new APIError(response.statusText ?? body, response.status, 'unknownError'); + } try { const jsonResponse = JSON.parse(body); - if (!response.ok) { - throw new APIError(response.statusText ?? body, response.status, 'unknownError'); - } const validated = await handler.validator.validate(jsonResponse).catch((e) => { if (e instanceof yup.ValidationError) { console.error(e, 'Got: ' + body); @@ -150,7 +153,6 @@ export default class API { /// We want that 401 error to be thrown, instead of the plain validation vone if (e.status == 401) throw new APIError('invalidCredentials', 401, 'invalidCredentials'); - if (!(e instanceof APIError)) throw e; throw e; }); } @@ -716,4 +718,21 @@ export default class API { ), }; } + public static getSongCursorInfos(songId: number): Query { + return { + key: ['cursorInfos', songId], + exec: () => { + return API.fetch( + { + route: `/song/${songId}/assets/cursors`, + }, + { handler: SongCursorInfosHandler } + ); + }, + }; + } + + public static getPartitionSvgUrl(songId: number): string { + return `${API.baseUrl}/song/${songId}/assets/partition`; + } } diff --git a/front/Dockerfile b/front/Dockerfile index 69ea79e..ecdbd12 100644 --- a/front/Dockerfile +++ b/front/Dockerfile @@ -16,7 +16,7 @@ COPY . . ARG API_URL ENV EXPO_PUBLIC_API_URL=$API_URL ARG SCORO_URL -ENV EXPO_PUBLIC_API_URL=$SCORO_URL +ENV EXPO_PUBLIC_SCORO_URL=$SCORO_URL RUN yarn tsc && npx expo export:web diff --git a/front/Navigation.tsx b/front/Navigation.tsx index 66d8fa8..0dd9b72 100644 --- a/front/Navigation.tsx +++ b/front/Navigation.tsx @@ -10,11 +10,8 @@ import { DarkTheme, DefaultTheme, NavigationContainer } from '@react-navigation/ import { RootState, useSelector } from './state/Store'; import { useDispatch } from 'react-redux'; import { Translate, translate } from './i18n/i18n'; -import SongLobbyView from './views/SongLobbyView'; -import StartPageView from './views/StartPageView'; -import HomeView from './views/HomeView'; import SearchView from './views/SearchView'; -import SetttingsNavigator from './views/settings/SettingsView'; +import SettingsTab from './views/settings/SettingsView'; import { useQuery } from './Queries'; import API, { APIError } from './API'; import PlayView from './views/PlayView'; @@ -32,10 +29,11 @@ import GoogleView from './views/GoogleView'; import VerifiedView from './views/VerifiedView'; import SigninView from './views/SigninView'; import SignupView from './views/SignupView'; -import TabNavigation from './components/V2/TabNavigation'; import PasswordResetView from './views/PasswordResetView'; import ForgotPasswordView from './views/ForgotPasswordView'; import Leaderboardiew from './views/LeaderboardView'; +import DiscoveryView from './views/V2/DiscoveryView'; +import MusicView from './views/MusicView'; // Util function to hide route props in URL const removeMe = () => ''; @@ -43,29 +41,33 @@ const removeMe = () => ''; const protectedRoutes = () => ({ Home: { - component: HomeView, - options: { title: translate('welcome'), headerLeft: null }, + component: DiscoveryView, + options: { headerShown: false }, link: '/', }, + Music: { + component: MusicView, + options: { headerShown: false }, + link: '/music', + }, HomeNew: { - component: TabNavigation, + component: DiscoveryView, options: { headerShown: false }, link: '/V2', }, - Play: { component: PlayView, options: { title: translate('play') }, link: '/play/:songId' }, + Play: { + component: PlayView, + options: { headerShown: false, title: translate('play') }, + link: '/play/:songId', + }, Settings: { - component: SetttingsNavigator, - options: { title: 'Settings' }, + component: SettingsTab, + options: { headerShown: false }, link: '/settings/:screen?', stringify: { screen: removeMe, }, }, - Song: { - component: SongLobbyView, - options: { title: translate('play') }, - link: '/song/:songId', - }, Artist: { component: ArtistDetailsView, options: { title: translate('artistFilter') }, @@ -83,7 +85,7 @@ const protectedRoutes = () => }, Search: { component: SearchView, - options: { title: translate('search') }, + options: { headerShown: false }, link: '/search/:query?', }, Leaderboard: { @@ -96,7 +98,7 @@ const protectedRoutes = () => options: { title: translate('error'), headerLeft: null }, link: undefined, }, - User: { component: ProfileView, options: { title: translate('user') }, link: '/user' }, + User: { component: ProfileView, options: { headerShown: false }, link: '/user' }, Verified: { component: VerifiedView, options: { title: 'Verify email', headerShown: false }, @@ -106,11 +108,6 @@ const protectedRoutes = () => const publicRoutes = () => ({ - Start: { - component: StartPageView, - options: { title: 'Chromacase', headerShown: false }, - link: '/', - }, Login: { component: SigninView, options: { title: translate('signInBtn'), headerShown: false }, @@ -217,7 +214,7 @@ const ProfileErrorView = (props: { onTryAgain: () => void }) => { { dispatch(unsetAccessToken()); - navigation.navigate('Start'); + navigation.navigate('Login'); }} colorScheme="error" variant="outline" diff --git a/front/Theme.tsx b/front/Theme.tsx index 27cf7fe..8143459 100644 --- a/front/Theme.tsx +++ b/front/Theme.tsx @@ -4,9 +4,39 @@ import { useEffect } from 'react'; const ThemeProvider = ({ children }: { children: JSX.Element }) => { const colorScheme = useColorScheme(); + const lightGlassmorphism = { + 50: 'rgba(255,255,255,0.9)', + 100: 'rgba(255,255,255,0.1)', + 200: 'rgba(255,255,255,0.2)', + 300: 'rgba(255,255,255,0.3)', + 400: 'rgba(255,255,255,0.4)', + 500: 'rgba(255,255,255,0.5)', + 600: 'rgba(255,255,255,0.6)', + 700: 'rgba(255,255,255,0.7)', + 800: 'rgba(255,255,255,0.8)', + 900: 'rgba(255,255,255,0.9)', + 1000: 'rgba(255,255,255,1)', + }; + const darkGlassmorphism = { + 50: 'rgba(16,16,20,0.9)', + 100: 'rgba(16,16,20,0.1)', + 200: 'rgba(16,16,20,0.2)', + 300: 'rgba(16,16,20,0.3)', + 400: 'rgba(16,16,20,0.4)', + 500: 'rgba(16,16,20,0.5)', + 600: 'rgba(16,16,20,0.6)', + 700: 'rgba(16,16,20,0.7)', + 800: 'rgba(16,16,20,0.8)', + 900: 'rgba(16,16,20,0.9)', + 1000: 'rgba(16,16,20,1)', + }; + + const glassmorphism = colorScheme === 'light' ? lightGlassmorphism : darkGlassmorphism; + const text = colorScheme === 'light' ? darkGlassmorphism : lightGlassmorphism; return ( { mono: 'Lexend', }, colors: { + text: text, primary: { 50: '#eff1fe', 100: '#e7eafe', @@ -102,6 +133,7 @@ const ThemeProvider = ({ children }: { children: JSX.Element }) => { 800: '#6b2124', 900: '#531a1c', }, + coolGray: glassmorphism, }, components: { Button: { diff --git a/front/android/app/build.gradle b/front/android/app/build.gradle index 6dfe5ac..e7037fb 100644 --- a/front/android/app/build.gradle +++ b/front/android/app/build.gradle @@ -81,9 +81,9 @@ android { compileSdkVersion rootProject.ext.compileSdkVersion - namespace 'build.apk' + namespace 'com.arthichaud.Chromacase' defaultConfig { - applicationId 'build.apk' + applicationId 'com.arthichaud.Chromacase' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode 1 diff --git a/front/android/app/src/debug/java/com/arthichaud/Chromacase/ReactNativeFlipper.java b/front/android/app/src/debug/java/com/arthichaud/Chromacase/ReactNativeFlipper.java new file mode 100644 index 0000000..319903d --- /dev/null +++ b/front/android/app/src/debug/java/com/arthichaud/Chromacase/ReactNativeFlipper.java @@ -0,0 +1,75 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + *

This source code is licensed under the MIT license found in the LICENSE file in the root + * directory of this source tree. + */ +package com.arthichaud.Chromacase; + +import android.content.Context; +import com.facebook.flipper.android.AndroidFlipperClient; +import com.facebook.flipper.android.utils.FlipperUtils; +import com.facebook.flipper.core.FlipperClient; +import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; +import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; +import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; +import com.facebook.flipper.plugins.inspector.DescriptorMapping; +import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; +import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; +import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; +import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; +import com.facebook.react.ReactInstanceEventListener; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.modules.network.NetworkingModule; +import okhttp3.OkHttpClient; + +/** + * Class responsible of loading Flipper inside your React Native application. This is the debug + * flavor of it. Here you can add your own plugins and customize the Flipper setup. + */ +public class ReactNativeFlipper { + public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { + if (FlipperUtils.shouldEnableFlipper(context)) { + final FlipperClient client = AndroidFlipperClient.getInstance(context); + + client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); + client.addPlugin(new DatabasesFlipperPlugin(context)); + client.addPlugin(new SharedPreferencesFlipperPlugin(context)); + client.addPlugin(CrashReporterPlugin.getInstance()); + + NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); + NetworkingModule.setCustomClientBuilder( + new NetworkingModule.CustomClientBuilder() { + @Override + public void apply(OkHttpClient.Builder builder) { + builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); + } + }); + client.addPlugin(networkFlipperPlugin); + client.start(); + + // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized + // Hence we run if after all native modules have been initialized + ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); + if (reactContext == null) { + reactInstanceManager.addReactInstanceEventListener( + new ReactInstanceEventListener() { + @Override + public void onReactContextInitialized(ReactContext reactContext) { + reactInstanceManager.removeReactInstanceEventListener(this); + reactContext.runOnNativeModulesQueueThread( + new Runnable() { + @Override + public void run() { + client.addPlugin(new FrescoFlipperPlugin()); + } + }); + } + }); + } else { + client.addPlugin(new FrescoFlipperPlugin()); + } + } + } +} diff --git a/front/android/app/src/main/AndroidManifest.xml b/front/android/app/src/main/AndroidManifest.xml index 6c31972..68a0f07 100644 --- a/front/android/app/src/main/AndroidManifest.xml +++ b/front/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,8 @@ - + + + @@ -11,7 +13,7 @@ - + @@ -25,7 +27,8 @@ - + + diff --git a/front/android/app/src/main/java/com/arthichaud/Chromacase/MainActivity.java b/front/android/app/src/main/java/com/arthichaud/Chromacase/MainActivity.java new file mode 100644 index 0000000..a007164 --- /dev/null +++ b/front/android/app/src/main/java/com/arthichaud/Chromacase/MainActivity.java @@ -0,0 +1,65 @@ +package com.arthichaud.Chromacase; + +import android.os.Build; +import android.os.Bundle; + +import com.facebook.react.ReactActivity; +import com.facebook.react.ReactActivityDelegate; +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; +import com.facebook.react.defaults.DefaultReactActivityDelegate; + +import expo.modules.ReactActivityDelegateWrapper; + +public class MainActivity extends ReactActivity { + @Override + protected void onCreate(Bundle savedInstanceState) { + // Set the theme to AppTheme BEFORE onCreate to support + // coloring the background, status bar, and navigation bar. + // This is required for expo-splash-screen. + setTheme(R.style.AppTheme); + super.onCreate(null); + } + + /** + * Returns the name of the main component registered from JavaScript. + * This is used to schedule rendering of the component. + */ + @Override + protected String getMainComponentName() { + return "main"; + } + + /** + * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link + * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React + * (aka React 18) with two boolean flags. + */ + @Override + protected ReactActivityDelegate createReactActivityDelegate() { + return new ReactActivityDelegateWrapper(this, BuildConfig.IS_NEW_ARCHITECTURE_ENABLED, new DefaultReactActivityDelegate( + this, + getMainComponentName(), + // If you opted-in for the New Architecture, we enable the Fabric Renderer. + DefaultNewArchitectureEntryPoint.getFabricEnabled())); + } + + /** + * Align the back button behavior with Android S + * where moving root activities to background instead of finishing activities. + * @see onBackPressed + */ + @Override + public void invokeDefaultOnBackPressed() { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.R) { + if (!moveTaskToBack(false)) { + // For non-root activities, use the default implementation to finish them. + super.invokeDefaultOnBackPressed(); + } + return; + } + + // Use the default back button implementation on Android S + // because it's doing more than {@link Activity#moveTaskToBack} in fact. + super.invokeDefaultOnBackPressed(); + } +} diff --git a/front/android/app/src/main/java/com/arthichaud/Chromacase/MainApplication.java b/front/android/app/src/main/java/com/arthichaud/Chromacase/MainApplication.java new file mode 100644 index 0000000..cca93e4 --- /dev/null +++ b/front/android/app/src/main/java/com/arthichaud/Chromacase/MainApplication.java @@ -0,0 +1,80 @@ +package com.arthichaud.Chromacase; + +import android.app.Application; +import android.content.res.Configuration; +import androidx.annotation.NonNull; + +import com.facebook.react.PackageList; +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.config.ReactFeatureFlags; +import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint; +import com.facebook.react.defaults.DefaultReactNativeHost; +import com.facebook.soloader.SoLoader; + +import expo.modules.ApplicationLifecycleDispatcher; +import expo.modules.ReactNativeHostWrapper; + +import java.util.List; + +public class MainApplication extends Application implements ReactApplication { + + private final ReactNativeHost mReactNativeHost = + new ReactNativeHostWrapper(this, new DefaultReactNativeHost(this) { + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + @SuppressWarnings("UnnecessaryLocalVariable") + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + return packages; + } + + @Override + protected String getJSMainModuleName() { + return ".expo/.virtual-metro-entry"; + } + + @Override + protected boolean isNewArchEnabled() { + return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; + } + + @Override + protected Boolean isHermesEnabled() { + return BuildConfig.IS_HERMES_ENABLED; + } + }); + + @Override + public ReactNativeHost getReactNativeHost() { + return mReactNativeHost; + } + + @Override + public void onCreate() { + super.onCreate(); + SoLoader.init(this, /* native exopackage */ false); + if (!BuildConfig.REACT_NATIVE_UNSTABLE_USE_RUNTIME_SCHEDULER_ALWAYS) { + ReactFeatureFlags.unstable_useRuntimeSchedulerAlways = false; + } + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + // If you opted-in for the New Architecture, we load the native entry point for this app. + DefaultNewArchitectureEntryPoint.load(); + } + ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); + ApplicationLifecycleDispatcher.onApplicationCreate(this); + } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig); + } +} diff --git a/front/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/front/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..3941bea --- /dev/null +++ b/front/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/front/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/front/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..3941bea --- /dev/null +++ b/front/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/front/android/app/src/main/res/values/colors.xml b/front/android/app/src/main/res/values/colors.xml index bb2087f..f387b90 100644 --- a/front/android/app/src/main/res/values/colors.xml +++ b/front/android/app/src/main/res/values/colors.xml @@ -1,6 +1,6 @@ #ffffff - #FFFFFF + #ffffff #023c69 #ffffff \ No newline at end of file diff --git a/front/android/app/src/release/java/com/arthichaud/Chromacase/ReactNativeFlipper.java b/front/android/app/src/release/java/com/arthichaud/Chromacase/ReactNativeFlipper.java new file mode 100644 index 0000000..30a56d5 --- /dev/null +++ b/front/android/app/src/release/java/com/arthichaud/Chromacase/ReactNativeFlipper.java @@ -0,0 +1,20 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + *

This source code is licensed under the MIT license found in the LICENSE file in the root + * directory of this source tree. + */ +package com.arthichaud.Chromacase; + +import android.content.Context; +import com.facebook.react.ReactInstanceManager; + +/** + * Class responsible of loading Flipper inside your React Native application. This is the release + * flavor of it so it's empty as we don't want to load Flipper. + */ +public class ReactNativeFlipper { + public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { + // Do nothing as we don't want to initialize Flipper on Release. + } +} diff --git a/front/app.json b/front/app.json index 5496cd8..69d8234 100644 --- a/front/app.json +++ b/front/app.json @@ -19,7 +19,9 @@ "adaptiveIcon": { "foregroundImage": "./assets/icon.png", "backgroundColor": "#ffffff" - } + }, + "permissions": ["android.permission.RECORD_AUDIO"], + "package": "com.arthichaud.Chromacase" }, "web": { "favicon": "./assets/favicon.png" diff --git a/front/assets/piano/a0.mp3 b/front/assets/piano/a0.mp3 new file mode 100644 index 0000000..7c34e27 Binary files /dev/null and b/front/assets/piano/a0.mp3 differ diff --git a/front/assets/piano/a1.mp3 b/front/assets/piano/a1.mp3 new file mode 100644 index 0000000..f9cd81f Binary files /dev/null and b/front/assets/piano/a1.mp3 differ diff --git a/front/assets/piano/a2.mp3 b/front/assets/piano/a2.mp3 new file mode 100644 index 0000000..b4a5812 Binary files /dev/null and b/front/assets/piano/a2.mp3 differ diff --git a/front/assets/piano/a3.mp3 b/front/assets/piano/a3.mp3 new file mode 100644 index 0000000..3915e46 Binary files /dev/null and b/front/assets/piano/a3.mp3 differ diff --git a/front/assets/piano/a4.mp3 b/front/assets/piano/a4.mp3 new file mode 100644 index 0000000..5b078fd Binary files /dev/null and b/front/assets/piano/a4.mp3 differ diff --git a/front/assets/piano/a5.mp3 b/front/assets/piano/a5.mp3 new file mode 100644 index 0000000..33a9fc8 Binary files /dev/null and b/front/assets/piano/a5.mp3 differ diff --git a/front/assets/piano/a6.mp3 b/front/assets/piano/a6.mp3 new file mode 100644 index 0000000..0e8497b Binary files /dev/null and b/front/assets/piano/a6.mp3 differ diff --git a/front/assets/piano/a7.mp3 b/front/assets/piano/a7.mp3 new file mode 100644 index 0000000..ee44c2f Binary files /dev/null and b/front/assets/piano/a7.mp3 differ diff --git a/front/assets/piano/ab1.mp3 b/front/assets/piano/ab1.mp3 new file mode 100644 index 0000000..b674389 Binary files /dev/null and b/front/assets/piano/ab1.mp3 differ diff --git a/front/assets/piano/ab2.mp3 b/front/assets/piano/ab2.mp3 new file mode 100644 index 0000000..b44b656 Binary files /dev/null and b/front/assets/piano/ab2.mp3 differ diff --git a/front/assets/piano/ab3.mp3 b/front/assets/piano/ab3.mp3 new file mode 100644 index 0000000..56eb28d Binary files /dev/null and b/front/assets/piano/ab3.mp3 differ diff --git a/front/assets/piano/ab4.mp3 b/front/assets/piano/ab4.mp3 new file mode 100644 index 0000000..5094608 Binary files /dev/null and b/front/assets/piano/ab4.mp3 differ diff --git a/front/assets/piano/ab5.mp3 b/front/assets/piano/ab5.mp3 new file mode 100644 index 0000000..4b24f22 Binary files /dev/null and b/front/assets/piano/ab5.mp3 differ diff --git a/front/assets/piano/ab6.mp3 b/front/assets/piano/ab6.mp3 new file mode 100644 index 0000000..6a37056 Binary files /dev/null and b/front/assets/piano/ab6.mp3 differ diff --git a/front/assets/piano/ab7.mp3 b/front/assets/piano/ab7.mp3 new file mode 100644 index 0000000..68cccb0 Binary files /dev/null and b/front/assets/piano/ab7.mp3 differ diff --git a/front/assets/piano/b0.mp3 b/front/assets/piano/b0.mp3 new file mode 100644 index 0000000..18ce97f Binary files /dev/null and b/front/assets/piano/b0.mp3 differ diff --git a/front/assets/piano/b1.mp3 b/front/assets/piano/b1.mp3 new file mode 100644 index 0000000..8e1e412 Binary files /dev/null and b/front/assets/piano/b1.mp3 differ diff --git a/front/assets/piano/b2.mp3 b/front/assets/piano/b2.mp3 new file mode 100644 index 0000000..68c4287 Binary files /dev/null and b/front/assets/piano/b2.mp3 differ diff --git a/front/assets/piano/b3.mp3 b/front/assets/piano/b3.mp3 new file mode 100644 index 0000000..53e5a74 Binary files /dev/null and b/front/assets/piano/b3.mp3 differ diff --git a/front/assets/piano/b4.mp3 b/front/assets/piano/b4.mp3 new file mode 100644 index 0000000..07ec753 Binary files /dev/null and b/front/assets/piano/b4.mp3 differ diff --git a/front/assets/piano/b5.mp3 b/front/assets/piano/b5.mp3 new file mode 100644 index 0000000..1b1ed5a Binary files /dev/null and b/front/assets/piano/b5.mp3 differ diff --git a/front/assets/piano/b6.mp3 b/front/assets/piano/b6.mp3 new file mode 100644 index 0000000..a1dcb4a Binary files /dev/null and b/front/assets/piano/b6.mp3 differ diff --git a/front/assets/piano/b7.mp3 b/front/assets/piano/b7.mp3 new file mode 100644 index 0000000..edbc75a Binary files /dev/null and b/front/assets/piano/b7.mp3 differ diff --git a/front/assets/piano/bb0.mp3 b/front/assets/piano/bb0.mp3 new file mode 100644 index 0000000..beb17e8 Binary files /dev/null and b/front/assets/piano/bb0.mp3 differ diff --git a/front/assets/piano/bb1.mp3 b/front/assets/piano/bb1.mp3 new file mode 100644 index 0000000..a96ba58 Binary files /dev/null and b/front/assets/piano/bb1.mp3 differ diff --git a/front/assets/piano/bb2.mp3 b/front/assets/piano/bb2.mp3 new file mode 100644 index 0000000..4705e43 Binary files /dev/null and b/front/assets/piano/bb2.mp3 differ diff --git a/front/assets/piano/bb3.mp3 b/front/assets/piano/bb3.mp3 new file mode 100644 index 0000000..20181ab Binary files /dev/null and b/front/assets/piano/bb3.mp3 differ diff --git a/front/assets/piano/bb4.mp3 b/front/assets/piano/bb4.mp3 new file mode 100644 index 0000000..390aad9 Binary files /dev/null and b/front/assets/piano/bb4.mp3 differ diff --git a/front/assets/piano/bb5.mp3 b/front/assets/piano/bb5.mp3 new file mode 100644 index 0000000..24b5b30 Binary files /dev/null and b/front/assets/piano/bb5.mp3 differ diff --git a/front/assets/piano/bb6.mp3 b/front/assets/piano/bb6.mp3 new file mode 100644 index 0000000..b5eeee6 Binary files /dev/null and b/front/assets/piano/bb6.mp3 differ diff --git a/front/assets/piano/bb7.mp3 b/front/assets/piano/bb7.mp3 new file mode 100644 index 0000000..f217e61 Binary files /dev/null and b/front/assets/piano/bb7.mp3 differ diff --git a/front/assets/piano/c1.mp3 b/front/assets/piano/c1.mp3 new file mode 100644 index 0000000..e053f83 Binary files /dev/null and b/front/assets/piano/c1.mp3 differ diff --git a/front/assets/piano/c2.mp3 b/front/assets/piano/c2.mp3 new file mode 100644 index 0000000..5a67b83 Binary files /dev/null and b/front/assets/piano/c2.mp3 differ diff --git a/front/assets/piano/c3.mp3 b/front/assets/piano/c3.mp3 new file mode 100644 index 0000000..68a390d Binary files /dev/null and b/front/assets/piano/c3.mp3 differ diff --git a/front/assets/piano/c4.mp3 b/front/assets/piano/c4.mp3 new file mode 100644 index 0000000..9de5479 Binary files /dev/null and b/front/assets/piano/c4.mp3 differ diff --git a/front/assets/piano/c5.mp3 b/front/assets/piano/c5.mp3 new file mode 100644 index 0000000..6f37f3a Binary files /dev/null and b/front/assets/piano/c5.mp3 differ diff --git a/front/assets/piano/c6.mp3 b/front/assets/piano/c6.mp3 new file mode 100644 index 0000000..ffc5522 Binary files /dev/null and b/front/assets/piano/c6.mp3 differ diff --git a/front/assets/piano/c7.mp3 b/front/assets/piano/c7.mp3 new file mode 100644 index 0000000..6b24e1b Binary files /dev/null and b/front/assets/piano/c7.mp3 differ diff --git a/front/assets/piano/c8.mp3 b/front/assets/piano/c8.mp3 new file mode 100644 index 0000000..c3e9580 Binary files /dev/null and b/front/assets/piano/c8.mp3 differ diff --git a/front/assets/piano/d1.mp3 b/front/assets/piano/d1.mp3 new file mode 100644 index 0000000..590281e Binary files /dev/null and b/front/assets/piano/d1.mp3 differ diff --git a/front/assets/piano/d2.mp3 b/front/assets/piano/d2.mp3 new file mode 100644 index 0000000..7c36581 Binary files /dev/null and b/front/assets/piano/d2.mp3 differ diff --git a/front/assets/piano/d3.mp3 b/front/assets/piano/d3.mp3 new file mode 100644 index 0000000..b76ea44 Binary files /dev/null and b/front/assets/piano/d3.mp3 differ diff --git a/front/assets/piano/d4.mp3 b/front/assets/piano/d4.mp3 new file mode 100644 index 0000000..1528541 Binary files /dev/null and b/front/assets/piano/d4.mp3 differ diff --git a/front/assets/piano/d5.mp3 b/front/assets/piano/d5.mp3 new file mode 100644 index 0000000..6378da0 Binary files /dev/null and b/front/assets/piano/d5.mp3 differ diff --git a/front/assets/piano/d6.mp3 b/front/assets/piano/d6.mp3 new file mode 100644 index 0000000..7fdbb2e Binary files /dev/null and b/front/assets/piano/d6.mp3 differ diff --git a/front/assets/piano/d7.mp3 b/front/assets/piano/d7.mp3 new file mode 100644 index 0000000..ac57399 Binary files /dev/null and b/front/assets/piano/d7.mp3 differ diff --git a/front/assets/piano/db1.mp3 b/front/assets/piano/db1.mp3 new file mode 100644 index 0000000..8c620ea Binary files /dev/null and b/front/assets/piano/db1.mp3 differ diff --git a/front/assets/piano/db2.mp3 b/front/assets/piano/db2.mp3 new file mode 100644 index 0000000..2d3c163 Binary files /dev/null and b/front/assets/piano/db2.mp3 differ diff --git a/front/assets/piano/db3.mp3 b/front/assets/piano/db3.mp3 new file mode 100644 index 0000000..8270b8e Binary files /dev/null and b/front/assets/piano/db3.mp3 differ diff --git a/front/assets/piano/db4.mp3 b/front/assets/piano/db4.mp3 new file mode 100644 index 0000000..d2ec15c Binary files /dev/null and b/front/assets/piano/db4.mp3 differ diff --git a/front/assets/piano/db5.mp3 b/front/assets/piano/db5.mp3 new file mode 100644 index 0000000..fe8ad84 Binary files /dev/null and b/front/assets/piano/db5.mp3 differ diff --git a/front/assets/piano/db6.mp3 b/front/assets/piano/db6.mp3 new file mode 100644 index 0000000..c58b145 Binary files /dev/null and b/front/assets/piano/db6.mp3 differ diff --git a/front/assets/piano/db7.mp3 b/front/assets/piano/db7.mp3 new file mode 100644 index 0000000..2dc8fb5 Binary files /dev/null and b/front/assets/piano/db7.mp3 differ diff --git a/front/assets/piano/e1.mp3 b/front/assets/piano/e1.mp3 new file mode 100644 index 0000000..5493db7 Binary files /dev/null and b/front/assets/piano/e1.mp3 differ diff --git a/front/assets/piano/e2.mp3 b/front/assets/piano/e2.mp3 new file mode 100644 index 0000000..b2603c8 Binary files /dev/null and b/front/assets/piano/e2.mp3 differ diff --git a/front/assets/piano/e3.mp3 b/front/assets/piano/e3.mp3 new file mode 100644 index 0000000..593ac62 Binary files /dev/null and b/front/assets/piano/e3.mp3 differ diff --git a/front/assets/piano/e4.mp3 b/front/assets/piano/e4.mp3 new file mode 100644 index 0000000..1ad3cba Binary files /dev/null and b/front/assets/piano/e4.mp3 differ diff --git a/front/assets/piano/e5.mp3 b/front/assets/piano/e5.mp3 new file mode 100644 index 0000000..6e6372b Binary files /dev/null and b/front/assets/piano/e5.mp3 differ diff --git a/front/assets/piano/e6.mp3 b/front/assets/piano/e6.mp3 new file mode 100644 index 0000000..d7134e1 Binary files /dev/null and b/front/assets/piano/e6.mp3 differ diff --git a/front/assets/piano/e7.mp3 b/front/assets/piano/e7.mp3 new file mode 100644 index 0000000..d5fbeb9 Binary files /dev/null and b/front/assets/piano/e7.mp3 differ diff --git a/front/assets/piano/eb1.mp3 b/front/assets/piano/eb1.mp3 new file mode 100644 index 0000000..0516dd0 Binary files /dev/null and b/front/assets/piano/eb1.mp3 differ diff --git a/front/assets/piano/eb2.mp3 b/front/assets/piano/eb2.mp3 new file mode 100644 index 0000000..d4cef5a Binary files /dev/null and b/front/assets/piano/eb2.mp3 differ diff --git a/front/assets/piano/eb3.mp3 b/front/assets/piano/eb3.mp3 new file mode 100644 index 0000000..3bae63f Binary files /dev/null and b/front/assets/piano/eb3.mp3 differ diff --git a/front/assets/piano/eb4.mp3 b/front/assets/piano/eb4.mp3 new file mode 100644 index 0000000..3a2dfe3 Binary files /dev/null and b/front/assets/piano/eb4.mp3 differ diff --git a/front/assets/piano/eb5.mp3 b/front/assets/piano/eb5.mp3 new file mode 100644 index 0000000..b25bc2f Binary files /dev/null and b/front/assets/piano/eb5.mp3 differ diff --git a/front/assets/piano/eb6.mp3 b/front/assets/piano/eb6.mp3 new file mode 100644 index 0000000..5626c0a Binary files /dev/null and b/front/assets/piano/eb6.mp3 differ diff --git a/front/assets/piano/eb7.mp3 b/front/assets/piano/eb7.mp3 new file mode 100644 index 0000000..de86659 Binary files /dev/null and b/front/assets/piano/eb7.mp3 differ diff --git a/front/assets/piano/f1.mp3 b/front/assets/piano/f1.mp3 new file mode 100644 index 0000000..ca852f8 Binary files /dev/null and b/front/assets/piano/f1.mp3 differ diff --git a/front/assets/piano/f2.mp3 b/front/assets/piano/f2.mp3 new file mode 100644 index 0000000..439a600 Binary files /dev/null and b/front/assets/piano/f2.mp3 differ diff --git a/front/assets/piano/f3.mp3 b/front/assets/piano/f3.mp3 new file mode 100644 index 0000000..e96cb25 Binary files /dev/null and b/front/assets/piano/f3.mp3 differ diff --git a/front/assets/piano/f4.mp3 b/front/assets/piano/f4.mp3 new file mode 100644 index 0000000..2e56f1c Binary files /dev/null and b/front/assets/piano/f4.mp3 differ diff --git a/front/assets/piano/f5.mp3 b/front/assets/piano/f5.mp3 new file mode 100644 index 0000000..8888a19 Binary files /dev/null and b/front/assets/piano/f5.mp3 differ diff --git a/front/assets/piano/f6.mp3 b/front/assets/piano/f6.mp3 new file mode 100644 index 0000000..57cac7b Binary files /dev/null and b/front/assets/piano/f6.mp3 differ diff --git a/front/assets/piano/f7.mp3 b/front/assets/piano/f7.mp3 new file mode 100644 index 0000000..976012b Binary files /dev/null and b/front/assets/piano/f7.mp3 differ diff --git a/front/assets/piano/g1.mp3 b/front/assets/piano/g1.mp3 new file mode 100644 index 0000000..07b425d Binary files /dev/null and b/front/assets/piano/g1.mp3 differ diff --git a/front/assets/piano/g2.mp3 b/front/assets/piano/g2.mp3 new file mode 100644 index 0000000..e633621 Binary files /dev/null and b/front/assets/piano/g2.mp3 differ diff --git a/front/assets/piano/g3.mp3 b/front/assets/piano/g3.mp3 new file mode 100644 index 0000000..4f6a675 Binary files /dev/null and b/front/assets/piano/g3.mp3 differ diff --git a/front/assets/piano/g4.mp3 b/front/assets/piano/g4.mp3 new file mode 100644 index 0000000..f0aadf7 Binary files /dev/null and b/front/assets/piano/g4.mp3 differ diff --git a/front/assets/piano/g5.mp3 b/front/assets/piano/g5.mp3 new file mode 100644 index 0000000..25ad6b1 Binary files /dev/null and b/front/assets/piano/g5.mp3 differ diff --git a/front/assets/piano/g6.mp3 b/front/assets/piano/g6.mp3 new file mode 100644 index 0000000..91f7e49 Binary files /dev/null and b/front/assets/piano/g6.mp3 differ diff --git a/front/assets/piano/g7.mp3 b/front/assets/piano/g7.mp3 new file mode 100644 index 0000000..67a2287 Binary files /dev/null and b/front/assets/piano/g7.mp3 differ diff --git a/front/assets/piano/gb1.mp3 b/front/assets/piano/gb1.mp3 new file mode 100644 index 0000000..fff4fb5 Binary files /dev/null and b/front/assets/piano/gb1.mp3 differ diff --git a/front/assets/piano/gb2.mp3 b/front/assets/piano/gb2.mp3 new file mode 100644 index 0000000..4ae7cd4 Binary files /dev/null and b/front/assets/piano/gb2.mp3 differ diff --git a/front/assets/piano/gb3.mp3 b/front/assets/piano/gb3.mp3 new file mode 100644 index 0000000..5c10e00 Binary files /dev/null and b/front/assets/piano/gb3.mp3 differ diff --git a/front/assets/piano/gb4.mp3 b/front/assets/piano/gb4.mp3 new file mode 100644 index 0000000..bd057b1 Binary files /dev/null and b/front/assets/piano/gb4.mp3 differ diff --git a/front/assets/piano/gb5.mp3 b/front/assets/piano/gb5.mp3 new file mode 100644 index 0000000..97edeb9 Binary files /dev/null and b/front/assets/piano/gb5.mp3 differ diff --git a/front/assets/piano/gb6.mp3 b/front/assets/piano/gb6.mp3 new file mode 100644 index 0000000..44afd1e Binary files /dev/null and b/front/assets/piano/gb6.mp3 differ diff --git a/front/assets/piano/gb7.mp3 b/front/assets/piano/gb7.mp3 new file mode 100644 index 0000000..9d5f354 Binary files /dev/null and b/front/assets/piano/gb7.mp3 differ diff --git a/front/babel.config.js b/front/babel.config.js index 68dbd39..87b5742 100644 --- a/front/babel.config.js +++ b/front/babel.config.js @@ -14,6 +14,8 @@ module.exports = function (api) { allowUndefined: true, }, ], + '@babel/plugin-proposal-export-namespace-from', + 'react-native-reanimated/plugin', ], // plugins: ['@babel/plugin-proposal-export-namespace-from', 'react-native-reanimated/plugin'], // env: { diff --git a/front/components/Card.tsx b/front/components/Card.tsx index e2f5a47..5b88032 100644 --- a/front/components/Card.tsx +++ b/front/components/Card.tsx @@ -16,6 +16,25 @@ type CardProps = Parameters[0] & { onPress: () => void; }; +const getBgColor = (isPressed: boolean, isHovered: boolean, colorScheme: 'light' | 'dark') => { + if (colorScheme === 'dark') { + if (isPressed) { + return 'gray.800'; + } + if (isHovered) { + return 'gray.700'; + } + return undefined; + } + if (isPressed) { + return 'coolGray.200'; + } + if (isHovered) { + return 'coolGray.100'; + } + return undefined; +}; + const Card = (props: CardProps) => { const theme = useTheme(); const colorScheme = useSelector((state: RootState) => state.settings.local.colorScheme); @@ -27,15 +46,11 @@ const Card = (props: CardProps) => { {props.children} diff --git a/front/components/CardGridCustom.tsx b/front/components/CardGridCustom.tsx index bdb2aa4..5690c1b 100644 --- a/front/components/CardGridCustom.tsx +++ b/front/components/CardGridCustom.tsx @@ -17,6 +17,7 @@ const CardGridCustom = >(props: CardGridCustom {heading && {heading}} { const navigation = useNavigation(); return ( - navigation.navigate('User')} shadow={3}> + navigation.navigate('User', {})} shadow={3}> {Object.keys(props).map((competencyName, i) => ( diff --git a/front/components/GenreCard.tsx b/front/components/GenreCard.tsx index 5023159..70b3011 100644 --- a/front/components/GenreCard.tsx +++ b/front/components/GenreCard.tsx @@ -18,7 +18,7 @@ const GenreCard = (props: GenreCardProps) => { (props: T) => { let actionFunction: (() => void) | null | undefined = null; const [dropdownValue, setDropdownValue] = useState(false); + const { colors } = useTheme(); switch (props.type) { case 'text': @@ -32,28 +33,28 @@ export const Element = (props: T) => { shadowOpacity: 0, shadowRadius: 0, elevation: 0, - backgroundColor: 'rgba(16, 16, 20, 0.50)', + backgroundColor: colors.coolGray[500], }, onHover: { scale: 1, shadowOpacity: 0, shadowRadius: 0, elevation: 0, - backgroundColor: 'rgba(32, 32, 40, 0.50)', + backgroundColor: colors.coolGray[700], }, onPressed: { scale: 1, shadowOpacity: 0, shadowRadius: 0, elevation: 0, - backgroundColor: 'rgba(16, 16, 20, 0.50)', + backgroundColor: colors.coolGray[500], }, Disabled: { scale: 1, shadowOpacity: 0, shadowRadius: 0, elevation: 0, - backgroundColor: 'rgba(16, 16, 20, 0.50)', + backgroundColor: colors.coolGray[500], }, }); @@ -70,7 +71,7 @@ export const Element = (props: T) => { {props.type === 'sectionDropdown' && dropdownValue && ( - + {props.data.section.map((value, index) => ( (props: T) => { ); } return ( - + ); diff --git a/front/components/GtkUI/ElementTypes.tsx b/front/components/GtkUI/ElementTypes.tsx index 7ed5e74..0f03bff 100644 --- a/front/components/GtkUI/ElementTypes.tsx +++ b/front/components/GtkUI/ElementTypes.tsx @@ -1,10 +1,10 @@ -import { Select, Switch, Text, Icon, Row, Slider } from 'native-base'; +import { Select, Switch, Text, Row, Slider, Icon, useTheme } from 'native-base'; import { MaterialIcons } from '@expo/vector-icons'; import { useWindowDimensions } from 'react-native'; - +import { Icon as IconSax } from 'iconsax-react-native'; export type ElementProps = { title: string; - icon?: React.ReactNode; + icon?: IconSax; helperText?: string; description?: string; disabled?: boolean; @@ -101,12 +101,13 @@ export const getElementDropdownNode = ( disabled: boolean ) => { const layout = useWindowDimensions(); + const { colors } = useTheme(); return ( + setSelectedSong( + songs.data.find((song) => selectedValue === song.name)?.id + ) + } + defaultValue={songs.data.at(0)?.name} + bgColor={colors.coolGray[500]} + variant="filled" + width={layout.width > 650 ? '200' : '150'} + > + {songs.data.map((option) => ( + + ))} + + + + setSelectedRange(itemValue)} - defaultValue={'3days'} - bgColor={'rgba(16,16,20,0.5)'} - variant="filled" - width={layout.width > 650 ? '200' : '150'} - > - {rangeOptions.map((option) => ( - - ))} - - - - - setContainerWidth(event.nativeEvent.layout.width)} - > - {tempDatasets.length > 0 && ( - formatScoreDate(playDate)), - datasets: tempDatasets, - }} - width={containerWidth} - height={300} // Completely arbitrary - transparent={true} - yAxisSuffix=" pts" - chartConfig={{ - propsForLabels: { - fontFamily: 'Lexend', - }, - propsForVerticalLabels: { - rotation: -90, - }, - propsForBackgroundLines: { - strokeDasharray: '', - strokeWidth: '1', - color: '#fff000', - }, - decimalPlaces: 0, - color: (opacity = 1) => `rgba(255, 255, 255, ${opacity})`, - labelColor: () => theme.colors.white, - propsForDots: { - r: '6', - strokeWidth: '2', - }, - }} - bezier - /> - )} - - + ))} + + + + {selectedSong !== undefined && ( + + )} + ); }; diff --git a/front/components/SearchResult.tsx b/front/components/SearchResult.tsx index ef4c1ee..08c1aff 100644 --- a/front/components/SearchResult.tsx +++ b/front/components/SearchResult.tsx @@ -140,7 +140,7 @@ const SongsSearchComponent = (props: SongsSearchComponentProps) => { } onPress={() => { API.createSearchHistoryEntry(comp.name, 'song'); - navigation.navigate('Song', { songId: comp.id }); + navigation.navigate('Play', { songId: comp.id }); }} /> )) @@ -253,7 +253,7 @@ const FavoritesComponent = () => { FavSong={songData} onPress={() => { API.createSearchHistoryEntry(songData.details!.name, 'song'); //todo - navigation.navigate('Song', { songId: songData.details!.id }); //todo + navigation.navigate('Play', { songId: songData.details!.id }); }} /> ))} diff --git a/front/components/SongCard.tsx b/front/components/SongCard.tsx index 439bdeb..8918bde 100644 --- a/front/components/SongCard.tsx +++ b/front/components/SongCard.tsx @@ -13,7 +13,7 @@ const SongCard = (props: SongCardProps) => { const { cover, name, artistName, songId } = props; const navigation = useNavigation(); return ( - navigation.navigate('Song', { songId })}> + navigation.navigate('Play', { songId })}> { {props.heading} ; +} + +const StarProgress = (props: StarProgressProps) => { + return ( + + + {props.starSteps.map((step) => { + return ( + + ); + })} + + ); +}; + +export default StarProgress; diff --git a/front/components/UI/ButtonBase.tsx b/front/components/UI/ButtonBase.tsx index 95bc87f..833835c 100644 --- a/front/components/UI/ButtonBase.tsx +++ b/front/components/UI/ButtonBase.tsx @@ -3,15 +3,19 @@ import { StyleSheet, ActivityIndicator, View, Image, StyleProp, ViewStyle } from import InteractiveBase from './InteractiveBase'; import { Text, useTheme } from 'native-base'; import { Icon } from 'iconsax-react-native'; +import useColorScheme from '../../hooks/colorScheme'; + +export type ButtonType = 'filled' | 'outlined' | 'menu'; interface ButtonProps { title?: string; style?: StyleProp; - onPress?: () => Promise; + onPress?: () => void | Promise; isDisabled?: boolean; icon?: Icon; + iconVariant?: 'Bold' | 'Outline'; iconImage?: string; - type?: 'filled' | 'outlined' | 'menu'; + type?: ButtonType; } const ButtonBase: React.FC = ({ @@ -22,9 +26,21 @@ const ButtonBase: React.FC = ({ icon, iconImage, type = 'filled', + iconVariant = 'Outline', }) => { const { colors } = useTheme(); const [loading, setLoading] = useState(false); + const colorScheme = useColorScheme(); + + const getColor = (colorScheme: 'light' | 'dark', type: ButtonType) => { + if (type === 'outlined') { + return colors.primary[300]; + } + if (colorScheme === 'dark' || type === 'filled') { + return '#FFFFFF'; + } + return colors.black[500]; + }; const styleButton = StyleSheet.create({ Default: { @@ -32,64 +48,64 @@ const ButtonBase: React.FC = ({ shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: colors.primary[400], + backgroundColor: colors.primary[300], }, onHover: { scale: 1.02, shadowOpacity: 0.37, shadowRadius: 7.49, elevation: 12, - backgroundColor: colors.primary[500], + backgroundColor: colors.primary[400], }, onPressed: { scale: 0.98, shadowOpacity: 0.23, shadowRadius: 2.62, elevation: 4, - backgroundColor: colors.primary[600], + backgroundColor: colors.primary[500], }, Disabled: { scale: 1, shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: colors.primary[400], + backgroundColor: colors.primary[300], }, }); const styleMenu = StyleSheet.create({ Default: { scale: 1, - shadowOpacity: 0.3, - shadowRadius: 4.65, - elevation: 8, - backgroundColor: 'rgba(16,16,20,0.5)', + shadowOpacity: 0, + shadowRadius: 0, + elevation: 0, + backgroundColor: 'transparent', }, onHover: { scale: 1.01, shadowOpacity: 0.37, shadowRadius: 7.49, elevation: 12, - backgroundColor: 'rgba(16,16,20,0.4)', + backgroundColor: colors.coolGray[400], }, onPressed: { scale: 0.99, shadowOpacity: 0.23, shadowRadius: 2.62, elevation: 4, - backgroundColor: 'rgba(16,16,20,0.6)', + backgroundColor: colors.coolGray[600], }, Disabled: { scale: 1, shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: 'rgba(16,16,20,0.5)', + backgroundColor: colors.coolGray[500], }, }); const typeToStyleAnimator = { filled: styleButton, outlined: styleButton, menu: styleMenu }; - const MyIcon: Icon = icon as Icon; + const MyIcon = icon; return ( = ({ onPress={async () => { if (onPress && !isDisabled) { setLoading(true); - await onPress(); - setLoading(false); + try { + await onPress(); + } catch (error) { + console.error(error); + } finally { + setLoading(false); + } } }} isDisabled={isDisabled} @@ -109,15 +130,28 @@ const ButtonBase: React.FC = ({ ) : ( - - {icon && ( - + + {MyIcon && ( + )} {iconImage && } - {title && {title}} + {title && ( + + {title} + + )} )} @@ -139,7 +173,7 @@ const styles = StyleSheet.create({ height: 18, }, text: { - color: '#fff', + userSelect: 'none', marginHorizontal: 8, }, }); diff --git a/front/components/UI/CheckboxBase.tsx b/front/components/UI/CheckboxBase.tsx index f61464c..3cf6cf0 100644 --- a/front/components/UI/CheckboxBase.tsx +++ b/front/components/UI/CheckboxBase.tsx @@ -1,68 +1,66 @@ import React from 'react'; import { StyleSheet, View, StyleProp, ViewStyle } from 'react-native'; import InteractiveBase from './InteractiveBase'; -import { Checkbox } from 'native-base'; +import { useTheme, Text } from 'native-base'; +import { AddSquare, TickSquare } from 'iconsax-react-native'; interface CheckboxProps { title: string; - value: string; - // color: string; + color?: string; check: boolean; setCheck: (value: boolean) => void; style?: StyleProp; } -const CheckboxBase: React.FC = ({ - title, - value, - // color, - style, - check, - setCheck, -}) => { - const styleGlassmorphism = StyleSheet.create({ - Default: { - scale: 1, - shadowOpacity: 0.3, - shadowRadius: 4.65, - elevation: 8, - backgroundColor: 'rgba(16,16,20,0.5)', - }, - onHover: { - scale: 1.01, - shadowOpacity: 0.37, - shadowRadius: 7.49, - elevation: 12, - backgroundColor: 'rgba(16,16,20,0.4)', - }, - onPressed: { - scale: 0.99, - shadowOpacity: 0.23, - shadowRadius: 2.62, - elevation: 4, - backgroundColor: 'rgba(16,16,20,0.6)', - }, - Disabled: { - scale: 1, - shadowOpacity: 0.3, - shadowRadius: 4.65, - elevation: 8, - backgroundColor: 'rgba(16,16,20,0.5)', - }, - }); +const CheckboxBase: React.FC = ({ title, color, style, check, setCheck }) => { + const { colors } = useTheme(); return ( { setCheck(!check); }} > - - + + {check ? ( + + ) : ( + + )} + {title} - + ); @@ -76,6 +74,11 @@ const styles = StyleSheet.create({ justifyContent: 'center', flexDirection: 'row', alignItems: 'center', + paddingHorizontal: 10, + paddingVertical: 5, + }, + text: { + paddingLeft: 10, }, }); diff --git a/front/components/UI/Glassmorphism.tsx b/front/components/UI/Glassmorphism.tsx new file mode 100644 index 0000000..475fa3e --- /dev/null +++ b/front/components/UI/Glassmorphism.tsx @@ -0,0 +1,22 @@ +import { BlurView } from 'expo-blur'; +import { ReactNode } from 'react'; +import React from 'react'; +import { StyleProp, ViewStyle } from 'react-native'; +import useColorScheme from '../../hooks/colorScheme'; + +type GlassmorphismCCProps = { + children?: ReactNode; + style?: StyleProp; +}; + +const GlassmorphismCC = ({ children, style }: GlassmorphismCCProps) => { + const colorScheme = useColorScheme(); + + return ( + + {children} + + ); +}; + +export default GlassmorphismCC; diff --git a/front/components/UI/IconButton.tsx b/front/components/UI/IconButton.tsx new file mode 100644 index 0000000..d20f8fa --- /dev/null +++ b/front/components/UI/IconButton.tsx @@ -0,0 +1,261 @@ +/* eslint-disable react/prop-types */ +// Import required dependencies and components. +import { Icon } from 'iconsax-react-native'; +import { useRef, useState, useMemo } from 'react'; +import { Animated, StyleProp, TouchableOpacity, ViewStyle } from 'react-native'; + +// Default values for the component props. +const DEFAULT_SCALE_FACTOR: number = 1.25; +const DEFAULT_ANIMATION_DURATION: number = 250; +const DEFAULT_PADDING: number = 0; + +// Define the type for the IconButton props. +type IconButtonProps = { + /** + * Indicates if the button starts in an active state. + * @default false + */ + isActive?: boolean; + + /** + * Color of the icon. + */ + color: string; + + /** + * Optional color of the icon when active. + */ + colorActive?: string; + + /** + * Callback function triggered when the button is pressed. + */ + onPress?: () => void | Promise; + + /** + * Size of the icon. + * @default 24 + */ + size?: number; + + /** + * Icon to display. + */ + icon: Icon; + + /** + * Optional icon to display when active. + */ + iconActive?: Icon; + + /** + * Variant style of the icon. + * @default "Outline" + */ + variant?: 'Outline' | 'Bold' | 'Bulk' | 'Broken' | 'TwoTone'; + + /** + * Variant style of the icon when active. + * @default "Outline" + */ + activeVariant?: 'Outline' | 'Bold' | 'Bulk' | 'Broken' | 'TwoTone'; + + /** + * Custom style for the icon. + */ + style?: ViewStyle | ViewStyle[]; + + /** + * Custom style for the icon's container. + */ + containerStyle?: ViewStyle | ViewStyle[]; + + /** + * Scale factor when the icon animates on press. + * @default 1.25 + */ + scaleFactor?: number; + + /** + * Duration of the icon animation in milliseconds. + * @default 250 + */ + animationDuration?: number; + + /** + * Padding around the icon. + * @default 0 + */ + padding?: number; +}; + +/** + * `IconButton` Component + * + * Render an interactive icon that can toggle between active and inactive states. + * Supports customization of colors, icons, animation speed, size, and more. + * + * Features: + * - Can render two different icons for active and inactive states. + * - Includes an animation that scales the icon when pressed. + * - Supports custom styling for both the icon and its container. + * - Accepts various icon variants for flexibility in design. + * + * Usage: + * + * ```jsx + * console.log('Icon pressed!')} + * /> + * ``` + * + * To use with active states: + * + * ```jsx + * console.log('Icon toggled!')} + * /> + * ``` + * + * Note: If `iconActive` is provided but `colorActive` is not, + * the `color` prop will be used for both active and inactive states. + */ +const IconButton: React.FC = ({ + isActive = false, + color, + colorActive, + onPress, + size = 24, + icon: Icon, + iconActive: IconActive, + variant = 'Outline', + activeVariant = 'Outline', + style, + containerStyle, + scaleFactor = DEFAULT_SCALE_FACTOR, + animationDuration = DEFAULT_ANIMATION_DURATION, + padding = DEFAULT_PADDING, +}) => { + // State to track active status. + const [isActiveState, setIsActiveState] = useState(isActive); + + // Animation values. + const scaleValue: Animated.Value = useRef(new Animated.Value(1)).current; + const animateValue: Animated.Value = useRef(new Animated.Value(isActive ? 0 : 1)).current; + + // Interpolation for icon colors between active and inactive states. + const colorValue: Animated.AnimatedInterpolation = animateValue.interpolate({ + inputRange: [0, 1], + outputRange: [color, colorActive || color], + }); + + // Combine styles for the icon container. + const combinedContainerStyle: StyleProp = useMemo< + (ViewStyle | ViewStyle[] | undefined)[] + >( + () => [ + { + position: 'relative', + // Adjust width and height to account for specified padding. Since the icons + // are absolutely positioned inside the container, the container's size needs + // to include the padding to ensure the icons are properly centered and spaced. + width: size + padding * 2, + height: size + padding * 2, + justifyContent: 'center', + alignItems: 'center', + }, + containerStyle, + ], + [padding, containerStyle] + ); + + /** + * Toggles the active state of the icon. + * Executes the onPress callback and triggers the animation. + */ + const toggleState = async () => { + // Execute onPress if provided. + if (onPress) { + await onPress(); + } + + // Toggle isActiveState. + setIsActiveState(!isActiveState); + + // Animation sequences. + const animations: Animated.CompositeAnimation[] = [ + Animated.sequence([ + Animated.timing(scaleValue, { + toValue: scaleFactor, + duration: animationDuration, + useNativeDriver: true, + }), + Animated.timing(scaleValue, { + toValue: 1, + duration: animationDuration, + useNativeDriver: true, + }), + ]), + ]; + + if (IconActive || colorActive) { + animations.push( + Animated.timing(animateValue, { + toValue: isActiveState ? 1 : 0, + duration: animationDuration, + useNativeDriver: true, + }) + ); + } + + // Start animations in parallel. + Animated.parallel(animations).start(); + }; + + return ( + + {IconActive && ( + + + + )} + + + + + ); +}; + +export default IconButton; diff --git a/front/components/UI/InteractiveBase.tsx b/front/components/UI/InteractiveBase.tsx index 5bc1817..fb2370f 100644 --- a/front/components/UI/InteractiveBase.tsx +++ b/front/components/UI/InteractiveBase.tsx @@ -1,12 +1,13 @@ -import { Pressable } from 'native-base'; +import { Pressable, useTheme } from 'native-base'; import React, { useRef } from 'react'; -import { Animated, StyleSheet, StyleProp, ViewStyle } from 'react-native'; +import { Animated, StyleProp, ViewStyle } from 'react-native'; interface InteractiveBaseProps { children?: React.ReactNode; onPress?: () => Promise; isDisabled?: boolean; isOutlined?: boolean; + focusable?: boolean; style?: StyleProp; styleAnimate: { Default: { @@ -47,7 +48,9 @@ const InteractiveBase: React.FC = ({ styleAnimate, isDisabled = false, isOutlined = false, + focusable = true, }) => { + const { colors } = useTheme(); const scaleAnimator = useRef(new Animated.Value(1)).current; const scaleValue = scaleAnimator.interpolate({ inputRange: [0, 1, 2], @@ -99,7 +102,7 @@ const InteractiveBase: React.FC = ({ Animated.parallel([ Animated.spring(scaleAnimator, { toValue: 1, - useNativeDriver: true, + useNativeDriver: false, }), Animated.timing(backgroundColorAnimator, { toValue: 1, @@ -128,7 +131,7 @@ const InteractiveBase: React.FC = ({ Animated.parallel([ Animated.spring(scaleAnimator, { toValue: 2, - useNativeDriver: true, + useNativeDriver: false, }), Animated.timing(backgroundColorAnimator, { toValue: 2, @@ -157,7 +160,7 @@ const InteractiveBase: React.FC = ({ Animated.parallel([ Animated.spring(scaleAnimator, { toValue: 1, - useNativeDriver: true, + useNativeDriver: false, }), Animated.timing(backgroundColorAnimator, { toValue: 1, @@ -190,7 +193,7 @@ const InteractiveBase: React.FC = ({ Animated.parallel([ Animated.spring(scaleAnimator, { toValue: 0, - useNativeDriver: true, + useNativeDriver: false, }), Animated.timing(backgroundColorAnimator, { toValue: 0, @@ -210,13 +213,13 @@ const InteractiveBase: React.FC = ({ Animated.timing(elevationAnimator, { toValue: 0, duration: 250, - useNativeDriver: true, + useNativeDriver: false, }), ]).start(); }; const animatedStyle = { - backgroundColor: isOutlined ? 'rgba(0,0,0,0.3)' : backgroundColorValue, + backgroundColor: isOutlined ? colors.coolGray[100] : backgroundColorValue, borderColor: isOutlined ? backgroundColorValue : 'transparent', borderWidth: 2, transform: [{ scale: scaleValue }], @@ -226,7 +229,7 @@ const InteractiveBase: React.FC = ({ }; const disableStyle = { - backgroundColor: isOutlined ? 'rgba(0,0,0,0.3)' : styleAnimate.Disabled.backgroundColor, + backgroundColor: isOutlined ? colors.coolGray[100] : styleAnimate.Disabled.backgroundColor, borderColor: isOutlined ? styleAnimate.Disabled.backgroundColor : 'transparent', borderWidth: 2, scale: styleAnimate.Disabled.scale, @@ -238,12 +241,12 @@ const InteractiveBase: React.FC = ({ return ( {children} @@ -251,11 +254,4 @@ const InteractiveBase: React.FC = ({ ); }; -const styles = StyleSheet.create({ - container: { - width: '100%', - height: '100%', - }, -}); - export default InteractiveBase; diff --git a/front/components/UI/InteractiveCC.tsx b/front/components/UI/InteractiveCC.tsx new file mode 100644 index 0000000..6df5a82 --- /dev/null +++ b/front/components/UI/InteractiveCC.tsx @@ -0,0 +1,172 @@ +/* eslint-disable */ +import React, { useRef, useEffect } from 'react'; +import { Animated, StyleSheet, Pressable, ViewStyle, StyleProp } from 'react-native'; + +type StyleObject = Record; +type InterpolatedStyleObject = Record>; + +const TRANSFORM_WHITELIST = { + translateX: true, + translateY: true, + scale: true, + scaleX: true, + scaleY: true, + rotate: true, + rotateX: true, + rotateY: true, + rotateZ: true, + perspective: true, +}; + +interface InteractiveCCProps { + defaultStyle: StyleObject; + hoverStyle: StyleObject; + pressStyle: StyleObject; + duration?: number; + children?: React.ReactNode; + onPress?: () => void | Promise; + isDisabled?: boolean; + style?: StyleProp; + styleContainer?: StyleProp; +} + +const InteractiveCC: React.FC = ({ + defaultStyle, + hoverStyle, + pressStyle, + children, + onPress, + isDisabled, + style, + styleContainer, + duration = 250, +}) => { + const animatedValues = useRef>({}).current; + + const extractTransformKeys = (styleObject: StyleObject) => { + const transformKeys = styleObject.transform + ? styleObject.transform.map((t: any) => Object.keys(t)[0]) + : []; + return transformKeys; + }; + + useEffect(() => { + // Initialisez les valeurs animées pour les propriétés de style non-transform + const allStyleKeys = new Set([ + ...Object.keys(defaultStyle), + ...Object.keys(hoverStyle), + ...Object.keys(pressStyle), + ]); + + allStyleKeys.forEach((key) => { + if (!animatedValues[key]) { + animatedValues[key] = new Animated.Value(0); + } + }); + // Initialisez les valeurs animées pour les propriétés de style transform + const allTransformKeys = new Set([ + ...extractTransformKeys(defaultStyle), + ...extractTransformKeys(hoverStyle), + ...extractTransformKeys(pressStyle), + ]); + + allTransformKeys.forEach((key) => { + if (!animatedValues[key]) { + animatedValues[key] = new Animated.Value(0); + } + }); + }, [defaultStyle, hoverStyle, pressStyle]); + + const getTransformValue = (key: string, style: StyleObject) => { + const transformObject = style.transform?.find((t: any) => t.hasOwnProperty(key)); + return transformObject ? transformObject[key] : 0; + }; + + const interpolateStyle = ( + stateStyle: StyleObject, + stateValue: number + ): InterpolatedStyleObject => { + const interpolatedStyle: InterpolatedStyleObject = { ...stateStyle }; + const transform: any = []; + + Object.keys(animatedValues).forEach((key) => { + if (stateStyle.transform?.some((t: any) => t.hasOwnProperty(key))) { + // Interpolation des transformations + const defaultValue = getTransformValue(key, defaultStyle); + const hoverValue = getTransformValue(key, hoverStyle); + const pressValue = getTransformValue(key, pressStyle); + + const interpolated = animatedValues[key]!.interpolate({ + inputRange: [0, 1, 2], + outputRange: [defaultValue, hoverValue, pressValue], + }); + + transform.push({ [key]: interpolated }); + } else if (stateStyle[key]) { + // Interpolation des autres styles + const defaultValue = defaultStyle[key] || 0; + const hoverValue = hoverStyle[key] !== undefined ? hoverStyle[key] : defaultValue; + const pressValue = pressStyle[key] !== undefined ? pressStyle[key] : defaultValue; + + interpolatedStyle[key] = animatedValues[key]!.interpolate({ + inputRange: [0, 1, 2], + outputRange: [defaultValue, hoverValue, pressValue], + }); + } + }); + + interpolatedStyle.transform = transform; + return interpolatedStyle; + }; + + const animateToState = (stateValue: number) => { + Object.keys(animatedValues).forEach((key) => { + Animated.timing(animatedValues[key]!, { + toValue: stateValue, + duration: duration, + useNativeDriver: true, + }).start(); + }); + }; + + const handleMouseEnter = () => animateToState(1); + const handlePressIn = () => animateToState(2); + const handlePressOut = () => { + animateToState(1); + if (onPress && !isDisabled) { + onPress(); + } + }; + const handleMouseLeave = () => animateToState(0); + + const animatedStyle = StyleSheet.flatten([ + styleContainer, + interpolateStyle(defaultStyle, 0), + interpolateStyle(hoverStyle, 1), + interpolateStyle(pressStyle, 2), + ]); + + return ( + + + {children} + + + ); +}; + +const styles = StyleSheet.create({ + content: { + width: '100%', + height: '100%', + }, +}); + +export default InteractiveCC; diff --git a/front/components/UI/LinkBase.tsx b/front/components/UI/LinkBase.tsx index 69f7424..105ae73 100644 --- a/front/components/UI/LinkBase.tsx +++ b/front/components/UI/LinkBase.tsx @@ -1,23 +1,89 @@ -import React, { ReactNode, FunctionComponent } from 'react'; -import { TouchableOpacity, Text, StyleSheet } from 'react-native'; - -const styles = StyleSheet.create({ - linkText: { - textDecorationLine: 'underline', - color: '#A3AFFC', - fontWeight: '700', - }, -}); +import React, { useRef } from 'react'; +import { Animated, StyleSheet, Platform } from 'react-native'; +import { Column, Pressable, Text, useTheme } from 'native-base'; interface LinkBaseProps { - children: ReactNode; + text: string; onPress: () => void; } -const LinkBase: FunctionComponent = ({ children, onPress }) => ( - - {children} - -); +const LinkBase: React.FC = ({ text, onPress }) => { + const underlineHeight = useRef(new Animated.Value(4)).current; + const opacity = useRef(new Animated.Value(1)).current; + const theme = useTheme(); + + const handleMouseEnter = () => { + if (Platform.OS === 'web') { + Animated.timing(underlineHeight, { + toValue: 20, + duration: 250, + useNativeDriver: false, + }).start(); + } + }; + + const handleMouseLeave = () => { + if (Platform.OS === 'web') { + Animated.timing(underlineHeight, { + toValue: 4, + duration: 250, + useNativeDriver: false, + }).start(); + } + }; + + const handlePressIn = () => { + Animated.timing(opacity, { + toValue: 0.8, + duration: 250, + useNativeDriver: false, + }).start(); + }; + + const handlePressOut = () => { + Animated.timing(opacity, { + toValue: 1, + duration: 250, + useNativeDriver: false, + }).start(); + }; + + return ( + + + {text} + + + + ); +}; + +const styles = StyleSheet.create({ + container: { + position: 'relative', + }, + underline: { + width: '100%', + position: 'absolute', + zIndex: -1, + bottom: 0, + }, +}); export default LinkBase; diff --git a/front/components/UI/LogoutButtonCC.tsx b/front/components/UI/LogoutButtonCC.tsx new file mode 100644 index 0000000..bb54105 --- /dev/null +++ b/front/components/UI/LogoutButtonCC.tsx @@ -0,0 +1,72 @@ +import ButtonBase, { ButtonType } from './ButtonBase'; +import { LogoutCurve } from 'iconsax-react-native'; +import { useDispatch } from 'react-redux'; +import { translate } from '../../i18n/i18n'; +import { unsetAccessToken } from '../../state/UserSlice'; +import { useState } from 'react'; +import React from 'react'; +import SignUpForm from '../../components/forms/signupform'; +import API, { APIError } from '../../API'; +import PopupCC from './PopupCC'; +import { StyleProp, ViewStyle } from 'react-native'; + +const handleSubmit = async (username: string, password: string, email: string) => { + try { + await API.transformGuestToUser({ username, password, email }); + } catch (error) { + if (error instanceof APIError) return translate(error.userMessage); + if (error instanceof Error) return error.message; + return translate('unknownError'); + } + return translate('loggedIn'); +}; + +type LogoutButtonCCProps = { + collapse?: boolean; + isGuest?: boolean; + style?: StyleProp; + buttonType: ButtonType; +}; + +const LogoutButtonCC = ({ + collapse = false, + isGuest = false, + buttonType = 'menu', + style, +}: LogoutButtonCCProps) => { + const dispatch = useDispatch(); + const [isVisible, setIsVisible] = useState(false); + + return ( + <> + { + isGuest ? setIsVisible(true) : dispatch(unsetAccessToken()); + }} + /> + + + { + dispatch(unsetAccessToken()); + }} + /> + + + ); +}; + +export default LogoutButtonCC; diff --git a/front/components/UI/MusicItem.tsx b/front/components/UI/MusicItem.tsx new file mode 100644 index 0000000..8ff0287 --- /dev/null +++ b/front/components/UI/MusicItem.tsx @@ -0,0 +1,195 @@ +/* eslint-disable react/prop-types */ +import React, { useMemo, memo } from 'react'; +import { StyleSheet, ViewStyle, Image } from 'react-native'; +import { Column, HStack, Row, Stack, Text, useBreakpointValue, useTheme } from 'native-base'; +import { HeartAdd, HeartRemove, Play } from 'iconsax-react-native'; +import IconButton from './IconButton'; +import Spacer from '../../components/UI/Spacer'; +import { useTranslation } from 'react-i18next'; + +/** + * Props for the MusicItem component. + */ +export interface MusicItemType { + /** The artist's name. */ + artist: string; + + /** The song's title. */ + song: string; + + /** The URL for the song's cover image. */ + image: string; + + /** The level of the song difficulty . */ + level: number; + + /** The last score achieved for this song. */ + lastScore: number; + + /** The highest score achieved for this song. */ + bestScore: number; + + /** Indicates whether the song is liked/favorited by the user. */ + liked: boolean; + + /** Custom style for the container. */ + style?: ViewStyle | ViewStyle[]; + + /** Callback function triggered when the like button is pressed. */ + onLike: () => void; + + /** Callback function triggered when the song is played. */ + onPlay: () => void; +} + +// Custom hook to handle the number formatting based on the current user's language. +function useNumberFormatter() { + const { i18n } = useTranslation(); + + // Memoizing the number formatter to avoid unnecessary recalculations. + // It will be recreated only when the language changes. + const formatter = useMemo(() => { + return new Intl.NumberFormat(i18n.language, { + notation: 'compact', + compactDisplay: 'short', + }); + }, [i18n.language]); + + return (num: number) => formatter.format(num); +} + +/** + * `MusicItem` Component + * + * Display individual music tracks with artist information, cover image, song title, and associated stats. + * Designed for optimal performance and responsiveness across different screen sizes. + * + * Features: + * - Displays artist name, song title, and track cover image. + * - Indicates user interaction with a like/favorite feature. + * - Provides a play button for user interaction. + * - Adapts its layout and design responsively according to screen size. + * - Optimized performance to ensure smooth rendering even in long lists. + * - Automatic number formatting based on user's language preference. + * + * Usage: + * + * ```jsx + * {() => console.log('Music liked!')}} + * onPlay={() => {() => console.log('Play music!')} + * /> + * ``` + * + * Note: + * - The number formatting for `level`, `lastScore`, and `bestScore` adapts automatically based on the user's language preference using the i18n module. + * - Given its optimized performance characteristics, this component is suitable for rendering in lists with potentially hundreds of items. + */ +function MusicItemComponent(props: MusicItemType) { + // Accessing theme colors and breakpoint values for responsive design + const { colors } = useTheme(); + const screenSize = useBreakpointValue({ base: 'small', md: 'md', xl: 'xl' }); + const formatNumber = useNumberFormatter(); + + // Styles are memoized to optimize performance. + const styles = useMemo( + () => + StyleSheet.create({ + container: { + backgroundColor: colors.coolGray[500], + paddingRight: screenSize === 'small' ? 8 : 16, + }, + playButtonContainer: { + zIndex: 1, + position: 'absolute', + right: -8, + bottom: -6, + }, + playButton: { + backgroundColor: colors.primary[300], + borderRadius: 999, + }, + image: { + position: 'relative', + width: screenSize === 'xl' ? 80 : 60, + height: screenSize === 'xl' ? 80 : 60, + }, + artistText: { + color: colors.text[700], + fontWeight: 'bold', + }, + songContainer: { + width: '100%', + }, + stats: { + display: 'flex', + flex: 1, + maxWidth: screenSize === 'xl' ? 150 : 50, + height: '100%', + alignItems: 'center', + justifyContent: screenSize === 'xl' ? 'flex-end' : 'center', + }, + }), + [colors, screenSize] + ); + + // Memoizing formatted numbers to avoid unnecessary computations. + const formattedLevel = useMemo(() => formatNumber(props.level), [props.level]); + const formattedLastScore = useMemo(() => formatNumber(props.lastScore), [props.lastScore]); + const formattedBestScore = useMemo(() => formatNumber(props.bestScore), [props.bestScore]); + + return ( + + + + + + + + {props.artist} + + {screenSize === 'xl' && } + + {props.song} + + + + {[formattedLevel, formattedLastScore, formattedBestScore].map((value, index) => ( + + {value} + + ))} + + ); +} + +// Using `memo` to optimize rendering performance by memorizing the component's output. +// This ensures that the component only re-renders when its props change. +const MusicItem = memo(MusicItemComponent); + +export default MusicItem; diff --git a/front/components/UI/MusicList.tsx b/front/components/UI/MusicList.tsx new file mode 100644 index 0000000..1c37dc2 --- /dev/null +++ b/front/components/UI/MusicList.tsx @@ -0,0 +1,242 @@ +import React, { useCallback, useState, useMemo, memo } from 'react'; +import { FlatList, HStack, View, useBreakpointValue, useTheme, Text, Row } from 'native-base'; +import { ActivityIndicator, StyleSheet } from 'react-native'; +import MusicItem, { MusicItemType } from './MusicItem'; +import ButtonBase from './ButtonBase'; +import { ArrowDown2, Chart2, ArrowRotateLeft, Cup, Icon } from 'iconsax-react-native'; +import { translate } from '../../i18n/i18n'; + +// Props type definition for MusicItemTitle. +interface MusicItemTitleProps { + /** Text to be displayed when the screen size is large. */ + text: string; + + /** Icon component to be used. */ + icon: Icon; + + /** Flag to indicate if the screen size is large enough to display additional text. */ + isBigScreen: boolean; +} + +function MusicItemTitleComponent(props: MusicItemTitleProps) { + const { colors } = useTheme(); + + return ( + + {/* Conditional rendering based on screen size. */} + {props.isBigScreen && ( + + {props.text} + + )} + {/* Icon with color based on the current color scheme. */} + + + ); +} + +// MusicItemTitle component, memoized for performance. +const MusicItemTitle = memo(MusicItemTitleComponent); + +/** + * Define the type for the MusicList component props. + */ +type MusicListProps = { + /** + * Music items available for display. Not all items may be displayed initially; + * depends on 'musicsPerPage'. + */ + initialMusics: MusicItemType[]; + + /** + * Function to load more music items asynchronously. Called with current page number + * and the list of all music items. Should return a Promise with additional music items. + */ + loadMoreMusics?: (page: number, musics: MusicItemType[]) => Promise; + + /** + * Number of music items to display per page. Determines initial and additional items displayed. + */ + musicsPerPage?: number; +}; + +/** + * `MusicList` Component + * + * A responsive and dynamic list component designed for displaying a collection of music items. + * It allows for loading and rendering an initial set of music items and provides functionality + * to load more items dynamically as needed. + * + * Features: + * - Dynamically loads and displays music items based on the provided `initialMusics` and `musicsPerPage`. + * - Supports pagination through the `loadMoreMusics` function, which loads additional music items when invoked. + * - Adapts its layout responsively based on screen size for optimal viewing across different devices. + * - Includes a loading indicator to inform users when additional items are being loaded. + * - Conditionally renders a 'Load More' button to fetch more music items, hidden when no more items are available. + * + * Usage: + * + * ```jsx + * loadAdditionalMusics(page, currentMusics)} + * musicsPerPage={10} + * /> + * ``` + * + * Note: + * - The `MusicList` is designed to handle a potentially large number of music items efficiently, + * making it suitable for use cases where the list of items is expected to grow over time. + * - The layout and styling are optimized for performance and responsiveness. + */ +function MusicListComponent({ + initialMusics, + loadMoreMusics, + musicsPerPage = loadMoreMusics ? 50 : initialMusics.length, +}: MusicListProps) { + // State initialization for MusicList. + // 'allMusics': all music items. + // 'displayedMusics': items displayed per page. + // 'currentPage': current page in pagination. + // 'loading': indicates if more items are being loaded. + // 'hasMoreMusics': flag for more items availability. + const [musicListState, setMusicListState] = useState({ + allMusics: initialMusics, + displayedMusics: initialMusics.slice(0, musicsPerPage), + currentPage: 1, + loading: false, + hasMoreMusics: initialMusics.length > musicsPerPage || !!loadMoreMusics, + }); + const { colors } = useTheme(); + const screenSize = useBreakpointValue({ base: 'small', md: 'md', xl: 'xl' }); + const isBigScreen = screenSize === 'xl'; + + // Loads additional music items. + // Uses useCallback to avoid unnecessary redefinitions on re-renders. + const loadMoreMusicItems = useCallback(async () => { + if (musicListState.loading || !musicListState.hasMoreMusics) { + return; + } + + setMusicListState((prevState) => ({ ...prevState, loading: true })); + + let hasMoreMusics = true; + const nextEndIndex = (musicListState.currentPage + 1) * musicsPerPage; + let updatedAllMusics = musicListState.allMusics; + + if (loadMoreMusics && updatedAllMusics.length <= nextEndIndex) { + const newMusics = await loadMoreMusics(musicListState.currentPage, updatedAllMusics); + updatedAllMusics = [...updatedAllMusics, ...newMusics]; + hasMoreMusics = newMusics.length > 0; + } else { + hasMoreMusics = updatedAllMusics.length > nextEndIndex; + } + + setMusicListState((prevState) => ({ + ...prevState, + allMusics: updatedAllMusics, + displayedMusics: updatedAllMusics.slice(0, nextEndIndex), + currentPage: prevState.currentPage + 1, + loading: false, + hasMoreMusics: hasMoreMusics, + })); + }, [musicsPerPage, loadMoreMusics, musicListState]); + + // useMemo to optimize performance by memorizing the header, + // preventing unnecessary re-renders. + const headerComponent = useMemo( + () => ( + + + {translate('musicListTitleSong')} + + {[ + { text: translate('musicListTitleLevel'), icon: Chart2 }, + { text: translate('musicListTitleLastScore'), icon: ArrowRotateLeft }, + { text: translate('musicListTitleBestScore'), icon: Cup }, + ].map((value) => ( + + ))} + + ), + [colors.coolGray[500], isBigScreen] + ); + + // FlatList: Renders list efficiently, only rendering visible items. + return ( + } + keyExtractor={(item) => item.artist + item.song} + ListFooterComponent={ + musicListState.hasMoreMusics ? ( + + {musicListState.loading ? ( + + ) : ( + + )} + + ) : null + } + /> + ); +} + +// Styles for the MusicList component +const styles = StyleSheet.create({ + container: { + flex: 1, + gap: 2, + borderRadius: 10, + overflow: 'hidden', + }, + footerContainer: { + height: 60, + justifyContent: 'center', + alignItems: 'center', + }, +}); + +// Using `memo` to optimize rendering performance by memorizing the component's output. +// This ensures that the component only re-renders when its props change. +const MusicList = memo(MusicListComponent); + +export default MusicList; diff --git a/front/components/UI/PopupCC.tsx b/front/components/UI/PopupCC.tsx new file mode 100644 index 0000000..09c0266 --- /dev/null +++ b/front/components/UI/PopupCC.tsx @@ -0,0 +1,57 @@ +import { Text, Row, Heading, Column } from 'native-base'; +import ButtonBase from './ButtonBase'; +import { CloseSquare } from 'iconsax-react-native'; +import { ReactNode } from 'react'; +import Modal from 'react-native-modal'; +import React from 'react'; +import GlassmorphismCC from './Glassmorphism'; + +type PopupCCProps = { + title: string; + description?: string; + children?: ReactNode; + isVisible: boolean; + setIsVisible?: (isVisible: boolean) => void; +}; + +const PopupCC = ({ title, description, children, isVisible, setIsVisible }: PopupCCProps) => { + return ( + + + + + + {title} + {setIsVisible !== undefined && ( + setIsVisible(false)} + /> + )} + + + {description !== undefined && {description}} + {children !== undefined && children} + + + + ); +}; + +export default PopupCC; diff --git a/front/components/UI/README.md b/front/components/UI/README.md new file mode 100644 index 0000000..dca65f5 --- /dev/null +++ b/front/components/UI/README.md @@ -0,0 +1,89 @@ +## IconButton + +The `IconButton` is a responsive component displaying an interactive icon. It can toggle between active and inactive states, with customizable animations and styles for each state. + +### Features: + +- Toggle between active and inactive icons. +- Scale animation on press. +- Full customization of icon colors, sizes, and variants. +- Customizable styles for both the icon and its container. + +### Preview + +```jsx + console.log('Icon pressed!')} /> +``` + +With active states: + +```jsx + console.log('Icon toggled!')} +/> +``` + +### Props + +| Prop | Type | Description | Default Value | +| ----------------- | ------------ | -------------------------------------------------- | -------------- | +| isActive | boolean | Indicates if the button starts in an active state. | false | +| color | string | Color of the icon. | - | +| colorActive | string | Optional active state color for the icon. | Value of color | +| icon | Component | Icon to display. | - | +| iconActive | Component | Optional icon to display when active. | - | +| variant | string | Icon's variant style. | "Outline" | +| activeVariant | string | Icon's variant style when active. | "Outline" | +| size | number | Size of the icon. | 24 | +| scaleFactor | number | Scale factor for animation. | 1.25 | +| animationDuration | number | Animation duration in milliseconds. | 250 | +| padding | number | Padding around the icon. | 0 | +| onPress | function | Callback triggered on button press. | - | +| style | object/style | Custom style for the icon. | - | +| containerStyle | object/style | Custom style for the icon's container. | - | + +## MusicItem + +The MusicItem is a responsive component designed to display individual music tracks with key details and interactive buttons, adapting its layout and design across various screen sizes. + +### Features: + +- Displays artist name, song title, and track cover image. +- Provides interactivity through a play button and a like button. +- Indicates song difficulty level, last score, and best score with automatic number formatting based on user's language preference. +- Optimized for performance, ensuring smooth rendering even in extensive lists. + +### Preview + +```jsx + console.log('Music liked!')} + onPlay={() => console.log('Play music!')} +/> +``` + +### Props + +| Prop | Type | Description | Default Value | +| --------- | -------- | ----------------------------------------------------- | ------------- | +| artist | string | Artist's name. | - | +| song | string | Song's title. | - | +| image | string | URL for the song's cover image. | - | +| level | number | Level of the song difficulty. | - | +| lastScore | number | Last score achieved for this song. | - | +| bestScore | number | Highest score achieved for this song. | - | +| liked | boolean | Whether the song is liked/favorited by the user. | false | +| onLike | function | Callback triggered when the like button is pressed. | - | +| onPlay | function | Callback triggered when the song is played. Optional. | - | diff --git a/front/components/UI/ScaffoldAuth.tsx b/front/components/UI/ScaffoldAuth.tsx index 345fd53..0fdf851 100644 --- a/front/components/UI/ScaffoldAuth.tsx +++ b/front/components/UI/ScaffoldAuth.tsx @@ -1,20 +1,29 @@ import { LinearGradient } from 'expo-linear-gradient'; -import { Center, Flex, Stack, View, Text, Wrap, Image } from 'native-base'; +import { Stack, View, Text, Wrap, Image, Row, Column, ScrollView, useToast } from 'native-base'; import { FunctionComponent } from 'react'; import { Linking, useWindowDimensions } from 'react-native'; import ButtonBase from './ButtonBase'; import { translate } from '../../i18n/i18n'; -import API from '../../API'; +import API, { APIError } from '../../API'; import SeparatorBase from './SeparatorBase'; import LinkBase from './LinkBase'; +import { useDispatch } from '../../state/Store'; +import { setAccessToken } from '../../state/UserSlice'; +import useColorScheme from '../../hooks/colorScheme'; import { useAssets } from 'expo-asset'; +const handleGuestLogin = async (apiSetter: (accessToken: string) => void): Promise => { + const apiAccess = await API.createAndGetGuestAccount(); + apiSetter(apiAccess); + return translate('loggedIn'); +}; + interface ScaffoldAuthProps { title: string; description: string; form: React.ReactNode[]; submitButton: React.ReactNode; - link: { text: string; description: string; onPress: () => void }; + link: { text: string; label: string; onPress: () => void }; } const ScaffoldAuth: FunctionComponent = ({ @@ -25,64 +34,141 @@ const ScaffoldAuth: FunctionComponent = ({ link, }) => { const layout = useWindowDimensions(); + const dispatch = useDispatch(); + const toast = useToast(); + const colorScheme = useColorScheme(); + const [logo] = useAssets( + colorScheme == 'light' + ? require('../../assets/icon_light.png') + : require('../../assets/icon_dark.png') + ); // eslint-disable-next-line @typescript-eslint/no-var-requires const [banner] = useAssets(require('../../assets/banner.jpg')); return ( - -

- - - - {title} - - - {description} - - - - Linking.openURL(`${API.baseUrl}/auth/login/google`)} + + + + Chromacase logo - or + {layout.width > 650 && ( + + ChromaCase + + )} + + { + try { + handleGuestLogin((accessToken: string) => { + dispatch(setAccessToken(accessToken)); + }); + } catch (error) { + if (error instanceof APIError) { + toast.show({ description: translate(error.userMessage) }); + return; + } + toast.show({ description: error as string }); + } + }} + /> + + + + + + {title} + + + {description} + + - {form} + Linking.openURL(`${API.baseUrl}/auth/login/google`)} + /> + or + + {form} + + {submitButton} + + {link.label} + + - {submitButton} - - {link.description} - {link.text} - - - -
- {layout.width > 650 ? ( + + + + {layout.width > 650 && ( = ({ style={{ width: '100%', height: '100%', borderRadius: 8 }} /> - ) : ( - <> )} - - + {colorScheme === 'dark' && ( + + )} + ); }; diff --git a/front/components/UI/ScaffoldCC.tsx b/front/components/UI/ScaffoldCC.tsx new file mode 100644 index 0000000..c761200 --- /dev/null +++ b/front/components/UI/ScaffoldCC.tsx @@ -0,0 +1,84 @@ +import { Flex, useBreakpointValue } from 'native-base'; +import useColorScheme from '../../hooks/colorScheme'; +import { useQuery } from '../../Queries'; +import API from '../../API'; +import { LinearGradient } from 'expo-linear-gradient'; +import { Cup, Discover, Music, SearchNormal1, Setting2, User } from 'iconsax-react-native'; +import { LoadingView } from '../Loading'; +import ScaffoldDesktopCC from './ScaffoldDesktopCC'; +import ScaffoldMobileCC from './ScaffoldMobileCC'; + +const menu = [ + { type: 'main', title: 'menuDiscovery', icon: Discover, link: 'HomeNew' }, + { type: 'main', title: 'menuProfile', icon: User, link: 'User' }, + { type: 'main', title: 'menuMusic', icon: Music, link: 'Music' }, + { type: 'main', title: 'menuSearch', icon: SearchNormal1, link: 'Search' }, + { type: 'main', title: 'menuLeaderBoard', icon: Cup, link: 'Score' }, + { type: 'sub', title: 'menuSettings', icon: Setting2, link: 'Settings' }, +] as const; + +type ScaffoldCCProps = { + children?: React.ReactNode; + routeName: string; + withPadding?: boolean; + enableScroll?: boolean; +}; + +const ScaffoldCC = ({ + children, + routeName, + withPadding = true, + enableScroll = true, +}: ScaffoldCCProps) => { + const userQuery = useQuery(API.getUserInfo); + const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); + + if (!userQuery.data || userQuery.isLoading) { + return ; + } + const colorScheme = useColorScheme(); + const logo = + colorScheme == 'light' + ? require('../../assets/icon_light.png') + : require('../../assets/icon_dark.png'); + + return ( + + {screenSize === 'small' ? ( + + {children} + + ) : ( + + {children} + + )} + {colorScheme === 'dark' && ( + + )} + + ); +}; + +export default ScaffoldCC; diff --git a/front/components/UI/ScaffoldDesktopCC.tsx b/front/components/UI/ScaffoldDesktopCC.tsx new file mode 100644 index 0000000..1c387f1 --- /dev/null +++ b/front/components/UI/ScaffoldDesktopCC.tsx @@ -0,0 +1,234 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ +import { View, Image, TouchableOpacity } from 'react-native'; +import { Divider, Text, ScrollView, Row, useMediaQuery, useTheme } from 'native-base'; +import { useQuery, useQueries } from '../../Queries'; +import API from '../../API'; +import Song from '../../models/Song'; +import ButtonBase from './ButtonBase'; +import { Icon } from 'iconsax-react-native'; +import { LoadingView } from '../Loading'; +import { TranslationKey, translate } from '../../i18n/i18n'; +import { useNavigation } from '../../Navigation'; +import Spacer from './Spacer'; +import User from '../../models/User'; +import LogoutButtonCC from './LogoutButtonCC'; +import GlassmorphismCC from './Glassmorphism'; + +type ScaffoldDesktopCCProps = { + widthPadding: boolean; + children?: React.ReactNode; + user: User; + logo: string; + routeName: string; + menu: readonly { + type: 'main' | 'sub'; + title: TranslationKey; + icon: Icon; + link: string; + }[]; +}; + +// TODO a tester avec un historique de plus de 3 musics différente mdr !! +const SongHistory = (props: { quantity: number }) => { + const playHistoryQuery = useQuery(API.getUserPlayHistory); + const songHistory = useQueries( + playHistoryQuery.data?.map(({ songID }) => API.getSong(songID)) ?? [] + ); + const navigation = useNavigation(); + + const musics = songHistory + .map((h) => h.data) + .filter((data): data is Song => data !== undefined) + .filter((song, i, array) => array.map((s) => s.id).findIndex((id) => id == song.id) == i) + ?.slice(0, props.quantity) + .map((song: Song) => ( + + navigation.navigate('Play', { songId: song.id })}> + {song.name} + + + )); + + if (!playHistoryQuery.data || playHistoryQuery.isLoading || !songHistory) { + return ; + } + + return ( + + {musics.length === 0 ? ( + {translate('menuNoSongsPlayedYet')} + ) : ( + musics + )} + + ); +}; + +const ScaffoldDesktopCC = (props: ScaffoldDesktopCCProps) => { + const navigation = useNavigation(); + const userQuery = useQuery(API.getUserInfo); + const [isSmallScreen] = useMediaQuery({ maxWidth: 1100 }); + const { colors } = useTheme(); + + if (!userQuery.data || userQuery.isLoading) { + return ; + } + + return ( + + + + + + {!isSmallScreen && ( + + Chromacase + + )} + + + + {props.menu.map( + (value) => + value.type === 'main' && ( + + + navigation.navigate(value.link as never) + } + /> + + + ) + )} + + + {!isSmallScreen && ( + + + + + {translate('menuRecentlyPlayed')} + + + + )} + + + + + {props.menu.map( + (value) => + value.type === 'sub' && ( + navigation.navigate(value.link as never)} + /> + ) + )} + + + + + + + {props.children} + + + + + ); +}; + +export default ScaffoldDesktopCC; diff --git a/front/components/UI/ScaffoldMobileCC.tsx b/front/components/UI/ScaffoldMobileCC.tsx new file mode 100644 index 0000000..c4c1070 --- /dev/null +++ b/front/components/UI/ScaffoldMobileCC.tsx @@ -0,0 +1,79 @@ +/* eslint-disable no-mixed-spaces-and-tabs */ +import { View } from 'react-native'; +import { Flex, useMediaQuery, useTheme } from 'native-base'; +import ButtonBase from './ButtonBase'; +import { Icon } from 'iconsax-react-native'; +import { useNavigation } from '../../Navigation'; +import User from '../../models/User'; +import { translate } from '../../i18n/i18n'; + +type ScaffoldMobileCCProps = { + children?: React.ReactNode; + user: User; + logo: string; + routeName: string; + widthPadding: boolean; + enableScroll: boolean; + menu: readonly { + type: 'main' | 'sub'; + title: + | 'menuDiscovery' + | 'menuProfile' + | 'menuMusic' + | 'menuSearch' + | 'menuLeaderBoard' + | 'menuSettings'; + icon: Icon; + link: string; + }[]; +}; + +const ScaffoldMobileCC = (props: ScaffoldMobileCCProps) => { + const navigation = useNavigation(); + const [isSmallScreen] = useMediaQuery({ maxWidth: 400 }); + const { colors } = useTheme(); + + return ( + + + {props.children} + + + + {props.menu.map((value) => ( + navigation.navigate(value.link as never)} + /> + ))} + + + + ); +}; + +export default ScaffoldMobileCC; diff --git a/front/components/UI/SeparatorBase.tsx b/front/components/UI/SeparatorBase.tsx index 2f94c79..0fc1419 100644 --- a/front/components/UI/SeparatorBase.tsx +++ b/front/components/UI/SeparatorBase.tsx @@ -1,11 +1,11 @@ import React, { FunctionComponent, ReactNode } from 'react'; -import { View, Text, StyleSheet } from 'react-native'; +import { View, StyleSheet } from 'react-native'; +import { Text, useTheme } from 'native-base'; const styles = StyleSheet.create({ line: { flex: 1, height: 2, - backgroundColor: 'white', }, container: { width: '100%', @@ -14,7 +14,6 @@ const styles = StyleSheet.create({ marginVertical: 2, }, text: { - color: 'white', paddingHorizontal: 16, }, }); @@ -23,12 +22,16 @@ interface SeparatorBaseProps { children: ReactNode; } -const SeparatorBase: FunctionComponent = ({ children }) => ( - - - {children} - - -); +const SeparatorBase: FunctionComponent = ({ children }) => { + const { colors } = useTheme(); + + return ( + + + {children} + + + ); +}; export default SeparatorBase; diff --git a/front/components/UI/SettingsBase.tsx b/front/components/UI/SettingsBase.tsx index 54a4873..abdcf23 100644 --- a/front/components/UI/SettingsBase.tsx +++ b/front/components/UI/SettingsBase.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { StyleSheet, View } from 'react-native'; import InteractiveBase from './InteractiveBase'; -import { Text } from 'native-base'; +import { Text, useTheme } from 'native-base'; interface SettingProps { icon: (size: number, color: string) => React.ReactNode; @@ -12,40 +12,41 @@ interface SettingProps { } const SettingBase: React.FC = ({ title, description, onPress, icon, children }) => { + const { colors } = useTheme(); const styleSetting = StyleSheet.create({ Default: { scale: 1, shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: 'rgba(16, 16, 20, 0.50)', + backgroundColor: colors.coolGray[500], }, onHover: { scale: 1, shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: 'rgba(32, 32, 40, 0.50)', + backgroundColor: colors.coolGray[700], }, onPressed: { scale: 1, shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: 'rgba(16, 16, 20, 0.50)', + backgroundColor: colors.coolGray[500], }, Disabled: { scale: 1, shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: 'rgba(16, 16, 20, 0.50)', + backgroundColor: colors.coolGray[500], }, }); return ( { if (onPress) { @@ -67,8 +68,8 @@ const SettingBase: React.FC = ({ title, description, onPress, icon const styles = StyleSheet.create({ container: { + width: '100%', borderRadius: 8, - backgroundColor: 'rgba(16, 16, 20, 0.50)', }, content: { paddingVertical: 10, diff --git a/front/components/UI/Spacer.tsx b/front/components/UI/Spacer.tsx new file mode 100644 index 0000000..6b6af37 --- /dev/null +++ b/front/components/UI/Spacer.tsx @@ -0,0 +1,31 @@ +import { View } from 'native-base'; + +type SpacerProps = { + width?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'; + height?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'; +}; + +const Spacer = ({ width = 'md', height = 'md' }: SpacerProps) => { + const str2size = (str: string) => { + switch (str) { + case 'xs': + return 8; + case 'sm': + return 16; + case 'md': + return 20; + case 'lg': + return 32; + case 'xl': + return 40; + case '2xl': + return 80; + default: + return 20; + } + }; + + return ; +}; + +export default Spacer; diff --git a/front/components/UI/TextFieldBase.tsx b/front/components/UI/TextFieldBase.tsx index 6e7cab5..4df08f3 100644 --- a/front/components/UI/TextFieldBase.tsx +++ b/front/components/UI/TextFieldBase.tsx @@ -1,8 +1,8 @@ import { Eye, EyeSlash, Icon } from 'iconsax-react-native'; import React, { useState } from 'react'; -import { View, TouchableOpacity, StyleSheet, StyleProp, ViewStyle } from 'react-native'; +import { View, StyleSheet, StyleProp, ViewStyle, Pressable } from 'react-native'; import InteractiveBase from './InteractiveBase'; -import { Input } from 'native-base'; +import { Input, useTheme } from 'native-base'; export interface TextFieldBaseProps { style?: StyleProp; @@ -67,6 +67,7 @@ const TextFieldBase: React.FC = ({ const [isPasswordVisible, setPasswordVisible] = useState(!isSecret); const [isFocused, setFocused] = useState(false); const MyIcon: Icon = icon as Icon; + const { colors } = useTheme(); const styleAnimate = StyleSheet.create({ Default: { @@ -74,33 +75,37 @@ const TextFieldBase: React.FC = ({ shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: 'rgba(16,16,20,0.5)', + backgroundColor: colors.coolGray[500], }, onHover: { scale: 1, shadowOpacity: 0.37, shadowRadius: 7.49, elevation: 12, - backgroundColor: 'rgba(16,16,20,0.45)', + backgroundColor: colors.coolGray[400], }, onPressed: { scale: 1, shadowOpacity: 0.23, shadowRadius: 2.62, elevation: 4, - backgroundColor: 'rgba(16,16,20,0.55)', + backgroundColor: colors.coolGray[600], }, Disabled: { scale: 1, shadowOpacity: 0.3, shadowRadius: 4.65, elevation: 8, - backgroundColor: 'rgba(16,16,20,0.5)', + backgroundColor: colors.coolGray[500], }, }); return ( - + {icon && ( @@ -111,20 +116,23 @@ const TextFieldBase: React.FC = ({ /> )} - setFocused(true)} - onBlur={() => setFocused(false)} - {...props} - /> + + setFocused(true)} + onBlur={() => setFocused(false)} + {...props} + /> + {isSecret && ( - setPasswordVisible((prevState) => !prevState)} > @@ -141,7 +149,7 @@ const TextFieldBase: React.FC = ({ variant="Bold" /> )} - + )} @@ -152,26 +160,29 @@ const styles = StyleSheet.create({ container: { display: 'flex', alignItems: 'center', - justifyContent: 'center', + justifyContent: 'space-between', flexDirection: 'row', + gap: 5, + width: '100%', + paddingHorizontal: 12, }, input: { - flex: 1, - color: '#ffffff', - paddingHorizontal: 12 + 20 + 12, - paddingVertical: 12, - outlineStyle: 'none', + flexGrow: 1, + flexShrink: 1, + paddingVertical: 8, + // outlineStyle: 'none', + width: 0, }, iconContainerLeft: { - position: 'absolute', - left: 12, - zIndex: 1, + flexGrow: 0, + flexShrink: 0, + width: 20, }, iconContainerRight: { - position: 'absolute', - outlineStyle: 'none', - right: 12, - zIndex: 1, + // outlineStyle: 'none', + flexGrow: 0, + flexShrink: 0, + width: 20, }, }); diff --git a/front/components/V2/GoldenRatio.tsx b/front/components/V2/GoldenRatio.tsx new file mode 100644 index 0000000..dd211b0 --- /dev/null +++ b/front/components/V2/GoldenRatio.tsx @@ -0,0 +1,71 @@ +import React from 'react'; +import { View } from 'react-native'; +import { useBreakpointValue } from 'native-base'; +import HomeMainSongCard from './HomeMainSongCard'; +import GoldenRatioPanel from './GoldenRatioPanel'; + +type HomeCardProps = { + image: string; + title: string; + artist: string; + fontSize: number; + onPress?: () => void; +}; + +const cards = [ + { + image: 'https://media.discordapp.net/attachments/717080637038788731/1153688155292180560/image_homeview1.png', + title: 'Beethoven', + artist: 'Synphony No. 9', + fontSize: 46, + }, + { + image: 'https://media.discordapp.net/attachments/717080637038788731/1153688154923090093/image_homeview2.png', + title: 'Mozart', + artist: 'Lieder Kantate KV 619', + fontSize: 36, + }, + { + image: 'https://media.discordapp.net/attachments/717080637038788731/1153688154499457096/image_homeview3.png', + title: 'Back', + artist: 'Truc Truc', + fontSize: 26, + }, + { + image: 'https://media.discordapp.net/attachments/717080637038788731/1153688154109394985/image_homeview4.png', + title: 'Mozart', + artist: 'Machin Machin', + fontSize: 22, + }, +] as [HomeCardProps, HomeCardProps, HomeCardProps, HomeCardProps]; + +const GoldenRatio = () => { + const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); + const isPhone = screenSize === 'small'; + + return ( + } + > + } + > + } + > + } + > + + + + + + ); +}; + +export default GoldenRatio; diff --git a/front/components/V2/GoldenRatioPanel.tsx b/front/components/V2/GoldenRatioPanel.tsx new file mode 100644 index 0000000..d1634cd --- /dev/null +++ b/front/components/V2/GoldenRatioPanel.tsx @@ -0,0 +1,57 @@ +import { View, ViewStyle } from 'react-native'; + +const bigSizePercent = '61.8%'; +const smallSizePercent = '38.2%'; + +type GoldenRatioPanelProps = { + direction: 'row' | 'column' | 'row-reverse' | 'column-reverse'; + header: React.ReactNode; + children: React.ReactNode; + style?: ViewStyle; +}; + +const isVerticalDir = (direction: GoldenRatioPanelProps['direction']) => { + return direction === 'column' || direction === 'column-reverse'; +}; + +const GoldenRatioPanel = ({ direction, header, children, style }: GoldenRatioPanelProps) => { + const firstSizePercent = bigSizePercent; + const secondSizePercent = smallSizePercent; + const isVertical = isVerticalDir(direction); + return ( + + + {header} + + + {children} + + + ); +}; + +GoldenRatioPanel.defaultProps = { + direction: 'row', +}; + +export default GoldenRatioPanel; diff --git a/front/components/V2/HomeMainSongCard.tsx b/front/components/V2/HomeMainSongCard.tsx index 4c10c51..0f655fe 100644 --- a/front/components/V2/HomeMainSongCard.tsx +++ b/front/components/V2/HomeMainSongCard.tsx @@ -16,11 +16,12 @@ const HomeMainSongCard = (props: HomeMainSongCardProps) => { {({ isHovered }) => ( { }} style={{ aspectRatio: 1, - width: '100%', - height: '100%', + maxWidth: '100%', + maxHeight: '100%', flexShrink: 1, }} /> diff --git a/front/components/V2/SongCardInfo.tsx b/front/components/V2/SongCardInfo.tsx index f02143e..946c4aa 100644 --- a/front/components/V2/SongCardInfo.tsx +++ b/front/components/V2/SongCardInfo.tsx @@ -1,7 +1,7 @@ import Song from '../../models/Song'; import React from 'react'; import { Image, View } from 'react-native'; -import { Pressable, Text, PresenceTransition, Icon } from 'native-base'; +import { Pressable, Text, PresenceTransition, Icon, useBreakpointValue } from 'native-base'; import { Ionicons } from '@expo/vector-icons'; type SongCardInfoProps = { @@ -10,11 +10,6 @@ type SongCardInfoProps = { onPlay: () => void; }; -const CardDims = { - height: 200, - width: 200, -}; - const Scores = [ { icon: 'warning', @@ -31,10 +26,17 @@ const Scores = [ ]; const SongCardInfo = (props: SongCardInfoProps) => { + const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); + const isPhone = screenSize === 'small'; const [isPlayHovered, setIsPlayHovered] = React.useState(false); const [isHovered, setIsHovered] = React.useState(false); const [isSlided, setIsSlided] = React.useState(false); + const CardDims = { + height: isPhone ? 160 : 200, + width: isPhone ? 160 : 200, + }; + return ( , - iconName: 'search', - }, - { - id: 'profile', - label: 'Profile', - icon: , - iconName: 'person', - }, - { - id: 'music', - label: 'Music', - icon: , - iconName: 'musical-notes', - }, - { - id: 'search', - label: 'Search', - icon: , - iconName: 'search', - }, - { - id: 'leaderboard', - label: 'Leaderboard', - icon: , - iconName: 'medal', - }, - { - id: 'notifications', - label: 'Notifications', - icon: , - iconName: 'notifications', - }, - { - id: 'settings', - label: 'Settings', - icon: , - iconName: 'settings', - }, -] as NaviTab[]; - -const TabNavigation = () => { - const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); - const [isDesktopCollapsed, setIsDesktopCollapsed] = useState(false); - const [activeTab, setActiveTab] = useState(tabs[0]?.id ?? 'home'); - const colorScheme = useColorScheme(); - - const child = ; - - const appTabs = tabs.map((t) => { - // use the same instance of a component between desktop and mobile - return { - ...t, - onPress: () => setActiveTab(t.id), - icon: ( - - ), - }; - }); - - return ( - - {screenSize === 'small' ? ( - - - {child} - - - ) : ( - - - {child} - - - )} - - ); -}; - -export default TabNavigation; diff --git a/front/components/forms/signinform.tsx b/front/components/forms/signinform.tsx index c6ebb84..85b87da 100644 --- a/front/components/forms/signinform.tsx +++ b/front/components/forms/signinform.tsx @@ -10,6 +10,7 @@ interface SigninFormProps { onSubmit: (username: string, password: string) => Promise; } +// TODO not use !! const LoginForm = ({ onSubmit }: SigninFormProps) => { const [formData, setFormData] = React.useState({ username: { @@ -47,7 +48,7 @@ const LoginForm = ({ onSubmit }: SigninFormProps) => { { @@ -68,6 +69,7 @@ const LoginForm = ({ onSubmit }: SigninFormProps) => { Promise; @@ -29,7 +32,6 @@ const SignUpForm = ({ onSubmit }: SignupFormProps) => { error: null as string | null, }, }); - const [submittingForm, setSubmittingForm] = React.useState(false); const validationSchemas = { username: string() @@ -51,144 +53,111 @@ const SignUpForm = ({ onSubmit }: SignupFormProps) => { const toast = useToast(); return ( - - - - - - - - { - let error: null | string = null; - validationSchemas.username - .validate(t) - .catch((e) => (error = e.message)) - .finally(() => { - setFormData({ ...formData, username: { value: t, error } }); - }); - }} - /> - }> - {formData.username.error} - - - - - { - let error: null | string = null; - validationSchemas.email - .validate(t) - .catch((e) => (error = e.message)) - .finally(() => { - setFormData({ ...formData, email: { value: t, error } }); - }); - }} - /> - }> - {formData.email.error} - - - - - { - let error: null | string = null; - validationSchemas.password - .validate(t) - .catch((e) => (error = e.message)) - .finally(() => { - setFormData({ ...formData, password: { value: t, error } }); - }); - }} - /> - }> - {formData.password.error} - - - - - { - let error: null | string = null; - validationSchemas.password - .validate(t) - .catch((e) => (error = e.message)) - .finally(() => { - if (!error && t !== formData.password.value) { - error = translate('passwordsDontMatch'); - } - setFormData({ - ...formData, - repeatPassword: { value: t, error }, - }); - }); - }} - /> - }> - {formData.repeatPassword.error} - - + { + let error: null | string = null; + validationSchemas.username + .validate(t) + .catch((e) => (error = e.message)) + .finally(() => { + setFormData({ ...formData, username: { value: t, error } }); + }); + }} + /> + { + let error: null | string = null; + validationSchemas.email + .validate(t) + .catch((e) => (error = e.message)) + .finally(() => { + setFormData({ ...formData, email: { value: t, error } }); + }); + }} + /> + { + let error: null | string = null; + validationSchemas.password + .validate(t) + .catch((e) => (error = e.message)) + .finally(() => { + setFormData({ ...formData, password: { value: t, error } }); + }); + }} + /> + { + let error: null | string = null; + validationSchemas.password + .validate(t) + .catch((e) => (error = e.message)) + .finally(() => { + if (!error && t !== formData.password.value) { + error = translate('passwordsDontMatch'); } - onPress={async () => { - setSubmittingForm(true); - try { - const resp = await onSubmit( - formData.username.value, - formData.password.value, - formData.email.value - ); - toast.show({ description: resp }); - setSubmittingForm(false); - } catch (e) { - toast.show({ description: e as string }); - setSubmittingForm(false); - } - }} - /> - - - - + setFormData({ + ...formData, + repeatPassword: { value: t, error }, + }); + }); + }} + /> + + { + try { + const resp = await onSubmit( + formData.username.value, + formData.password.value, + formData.email.value + ); + toast.show({ description: resp }); + } catch (e) { + toast.show({ description: e as string }); + } + }} + /> + ); }; diff --git a/front/components/navigators/TabRowNavigator.tsx b/front/components/navigators/TabRowNavigator.tsx index ad27f8e..5743fb4 100644 --- a/front/components/navigators/TabRowNavigator.tsx +++ b/front/components/navigators/TabRowNavigator.tsx @@ -99,7 +99,7 @@ function TabNavigator({ return ( - + {(!isMobileView || isPanelView) && ( { +export const translate = (key: TranslationKey, language?: AvailableLanguages) => { return i18n.t(key, { lng: language, }); }; +export type TranslationKey = keyof typeof en; + export { Translate }; diff --git a/front/models/PianoGame.ts b/front/models/PianoGame.ts index 424c464..14cfb01 100644 --- a/front/models/PianoGame.ts +++ b/front/models/PianoGame.ts @@ -1,19 +1,3 @@ -import { Note } from 'opensheetmusicdisplay'; - -export type PianoCursorNote = { - note: Note; - duration: number; -}; - -export type PianoCursorPosition = { - // offset in pixels - x: number; - // timestamp in ms - timing: number; - timestamp: number; - notes: PianoCursorNote[]; -}; - export type UpdateInfo = { currentTimestamp: number; status: 'playing' | 'paused' | 'stopped'; diff --git a/front/models/SongCursorInfos.ts b/front/models/SongCursorInfos.ts new file mode 100644 index 0000000..2e69684 --- /dev/null +++ b/front/models/SongCursorInfos.ts @@ -0,0 +1,74 @@ +import * as yup from 'yup'; +import ResponseHandler from './ResponseHandler'; + +export const SongCursorInfosValidator = yup.object({ + pageWidth: yup.number().required(), + pageHeight: yup.number().required(), + cursors: yup + .array() + .of( + yup.object({ + x: yup.number().required(), + y: yup.number().required(), + width: yup.number().required(), + height: yup.number().required(), + timestamp: yup.number().required(), + timing: yup.number().required(), + notes: yup + .array() + .of( + yup.object({ + note: yup.number().required(), + gain: yup.number().required(), + duration: yup.number().required(), + }) + ) + .required(), + }) + ) + .required(), +}); + +export const SongCursorInfosHandler: ResponseHandler< + yup.InferType, + SongCursorInfos +> = { + validator: SongCursorInfosValidator, + transformer: (songCursorInfos: yup.InferType) => ({ + pageWidth: songCursorInfos.pageWidth, + pageHeight: songCursorInfos.pageHeight, + cursors: songCursorInfos.cursors.map((cursor) => ({ + x: cursor.x, + y: cursor.y, + width: cursor.width, + height: cursor.height, + timestamp: cursor.timestamp, + timing: cursor.timing, + notes: cursor.notes.map((n) => ({ + note: n.note, + gain: n.gain, + duration: n.duration, + })), + })), + }), +}; + +export interface CursorInfoItem { + x: number; + y: number; + width: number; + height: number; + timestamp: number; + timing: number; + notes: { + note: number; + gain: number; + duration: number; + }[]; +} + +export interface SongCursorInfos { + pageWidth: number; + pageHeight: number; + cursors: CursorInfoItem[]; +} diff --git a/front/package.json b/front/package.json index 54c637c..abe70fe 100644 --- a/front/package.json +++ b/front/package.json @@ -25,6 +25,8 @@ "@react-navigation/native-stack": "^6.9.14", "@reduxjs/toolkit": "^1.9.6", "expo": "~49.0.13", + "expo-blur": "~12.4.1", + "expo-av": "~13.4.1", "expo-image-picker": "~14.3.2", "expo-linear-gradient": "~12.3.0", "expo-linking": "~5.0.2", @@ -33,23 +35,21 @@ "expo-status-bar": "~1.6.0", "i18next": "^23.5.1", "iconsax-react-native": "^0.0.8", - "moti": "^0.26.0", "native-base": "^3.4.28", "normalize-css-color": "^1.0.2", - "opensheetmusicdisplay": "^1.8.4", - "phaser": "^3.60.0", "react": "18.2.0", "react-dom": "18.2.0", "react-i18next": "^13.2.2", - "react-native": "0.72.5", + "react-native": "0.72.6", "react-native-chart-kit": "^6.12.0", "react-native-dotenv": "^3.4.9", + "react-native-modal": "^13.0.1", "react-native-pager-view": "6.2.0", "react-native-reanimated": "~3.3.0", "react-native-safe-area-context": "4.6.3", "react-native-screens": "~3.22.0", "react-native-super-grid": "^5.0.0", - "react-native-svg": "13.9.0", + "react-native-svg": "14.0.0", "react-native-tab-view": "^3.5.2", "react-native-url-polyfill": "^2.0.0", "react-native-web": "~0.19.6", @@ -57,13 +57,13 @@ "react-redux": "^8.1.2", "react-use-precision-timer": "^3.3.1", "redux-persist": "^6.0.0", - "smplr": "^0.11.0", "type-fest": "^4.3.2", "url": "^0.11.3", "yup": "^1.3.1" }, "devDependencies": { "@babel/core": "^7.20.0", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", "@types/lodash": "^4.14.199", "@types/react": "~18.2.14", "@typescript-eslint/eslint-plugin": "^6.7.3", diff --git a/front/state/SoundPlayerSlice.ts b/front/state/SoundPlayerSlice.ts index c45fc9f..97b63f1 100644 --- a/front/state/SoundPlayerSlice.ts +++ b/front/state/SoundPlayerSlice.ts @@ -1,19 +1,120 @@ import { createSlice, PayloadAction } from '@reduxjs/toolkit'; -import { SplendidGrandPiano } from 'smplr'; +import { Audio } from 'expo-av'; + +type MidiNumber = number; + +// Source: https://computermusicresource.com/midikeys.html +// Deserve an extra credit for doing this by hand +// The value is the value returned by `required`, needed by Expo to load/play the sound +export const PianoNotes = { + 33: require('../assets/piano/a0.mp3'), + 45: require('../assets/piano/a1.mp3'), + 57: require('../assets/piano/a2.mp3'), + 69: require('../assets/piano/a3.mp3'), + 81: require('../assets/piano/a4.mp3'), + 93: require('../assets/piano/a5.mp3'), + 105: require('../assets/piano/a6.mp3'), + 117: require('../assets/piano/a7.mp3'), + 44: require('../assets/piano/ab1.mp3'), + 56: require('../assets/piano/ab2.mp3'), + 68: require('../assets/piano/ab3.mp3'), + 80: require('../assets/piano/ab4.mp3'), + 92: require('../assets/piano/ab5.mp3'), + 104: require('../assets/piano/ab6.mp3'), + 116: require('../assets/piano/ab7.mp3'), + 35: require('../assets/piano/b0.mp3'), + 47: require('../assets/piano/b1.mp3'), + 59: require('../assets/piano/b2.mp3'), + 71: require('../assets/piano/b3.mp3'), + 83: require('../assets/piano/b4.mp3'), + 95: require('../assets/piano/b5.mp3'), + 107: require('../assets/piano/b6.mp3'), + 119: require('../assets/piano/b7.mp3'), + 34: require('../assets/piano/bb0.mp3'), + 46: require('../assets/piano/bb1.mp3'), + 58: require('../assets/piano/bb2.mp3'), + 70: require('../assets/piano/bb3.mp3'), + 82: require('../assets/piano/bb4.mp3'), + 94: require('../assets/piano/bb5.mp3'), + 106: require('../assets/piano/bb6.mp3'), + 118: require('../assets/piano/bb7.mp3'), + 36: require('../assets/piano/c1.mp3'), + 48: require('../assets/piano/c2.mp3'), + 60: require('../assets/piano/c3.mp3'), + 72: require('../assets/piano/c4.mp3'), + 84: require('../assets/piano/c5.mp3'), + 96: require('../assets/piano/c6.mp3'), + 108: require('../assets/piano/c7.mp3'), + 120: require('../assets/piano/c8.mp3'), + 38: require('../assets/piano/d1.mp3'), + 50: require('../assets/piano/d2.mp3'), + 62: require('../assets/piano/d3.mp3'), + 74: require('../assets/piano/d4.mp3'), + 86: require('../assets/piano/d5.mp3'), + 98: require('../assets/piano/d6.mp3'), + 110: require('../assets/piano/d7.mp3'), + 37: require('../assets/piano/db1.mp3'), + 49: require('../assets/piano/db2.mp3'), + 61: require('../assets/piano/db3.mp3'), + 73: require('../assets/piano/db4.mp3'), + 85: require('../assets/piano/db5.mp3'), + 97: require('../assets/piano/db6.mp3'), + 109: require('../assets/piano/db7.mp3'), + 40: require('../assets/piano/e1.mp3'), + 52: require('../assets/piano/e2.mp3'), + 64: require('../assets/piano/e3.mp3'), + 76: require('../assets/piano/e4.mp3'), + 88: require('../assets/piano/e5.mp3'), + 100: require('../assets/piano/e6.mp3'), + 112: require('../assets/piano/e7.mp3'), + 39: require('../assets/piano/eb1.mp3'), + 51: require('../assets/piano/eb2.mp3'), + 63: require('../assets/piano/eb3.mp3'), + 75: require('../assets/piano/eb4.mp3'), + 87: require('../assets/piano/eb5.mp3'), + 99: require('../assets/piano/eb6.mp3'), + 111: require('../assets/piano/eb7.mp3'), + 41: require('../assets/piano/f1.mp3'), + 53: require('../assets/piano/f2.mp3'), + 65: require('../assets/piano/f3.mp3'), + 77: require('../assets/piano/f4.mp3'), + 89: require('../assets/piano/f5.mp3'), + 101: require('../assets/piano/f6.mp3'), + 113: require('../assets/piano/f7.mp3'), + 43: require('../assets/piano/g1.mp3'), + 55: require('../assets/piano/g2.mp3'), + 67: require('../assets/piano/g3.mp3'), + 79: require('../assets/piano/g4.mp3'), + 91: require('../assets/piano/g5.mp3'), + 103: require('../assets/piano/g6.mp3'), + 115: require('../assets/piano/g7.mp3'), + 42: require('../assets/piano/gb1.mp3'), + 54: require('../assets/piano/gb2.mp3'), + 66: require('../assets/piano/gb3.mp3'), + 78: require('../assets/piano/gb4.mp3'), + 90: require('../assets/piano/gb5.mp3'), + 102: require('../assets/piano/gb6.mp3'), + 114: require('../assets/piano/gb7.mp3'), +} as const; + +export type Sounds = Record; export const soundPlayerSlice = createSlice({ name: 'soundPlayer', initialState: { - soundPlayer: undefined as SplendidGrandPiano | undefined, + sounds: undefined as Sounds | undefined, }, reducers: { - setSoundPlayer: (state, action: PayloadAction) => { - state.soundPlayer = action.payload; + setSounds: (state, action: PayloadAction) => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + //@ts-expect-error + state.sounds = action.payload; }, - unsetSoundPlayer: (state) => { - state.soundPlayer = undefined; + unsetSounds: (state) => { + Object.entries(state.sounds ?? {}).map((sound) => sound[1].unloadAsync()); + state.sounds = undefined; }, }, }); -export const { setSoundPlayer, unsetSoundPlayer } = soundPlayerSlice.actions; +export const { setSounds, unsetSounds } = soundPlayerSlice.actions; export default soundPlayerSlice.reducer; diff --git a/front/tsconfig.json b/front/tsconfig.json index b28b02b..451c610 100644 --- a/front/tsconfig.json +++ b/front/tsconfig.json @@ -112,6 +112,8 @@ "metro.config.js", "jest.config.js", "app.config.ts", - "*/*.test.tsx" + "*/*.test.tsx", + "web-build", + "dist" ] } diff --git a/front/views/ArtistDetailsView.tsx b/front/views/ArtistDetailsView.tsx index bfb8781..d4b47df 100644 --- a/front/views/ArtistDetailsView.tsx +++ b/front/views/ArtistDetailsView.tsx @@ -58,7 +58,7 @@ const ArtistDetailsView = ({ artistId }: RouteProps) => } onPress={() => { API.createSearchHistoryEntry(comp.name, 'song'); - navigation.navigate('Song', { songId: comp.id }); + navigation.navigate('Play', { songId: comp.id }); }} /> ))} diff --git a/front/views/ErrorView.tsx b/front/views/ErrorView.tsx index 0b011c5..3c5ec56 100644 --- a/front/views/ErrorView.tsx +++ b/front/views/ErrorView.tsx @@ -8,7 +8,7 @@ const ErrorView = () => {
- diff --git a/front/views/ForgotPasswordView.tsx b/front/views/ForgotPasswordView.tsx index 7bc30b4..9b5e822 100644 --- a/front/views/ForgotPasswordView.tsx +++ b/front/views/ForgotPasswordView.tsx @@ -12,7 +12,7 @@ const ForgotPasswordView = () => { route: `/auth/forgot-password?email=${email}`, method: 'PUT', }); - navigation.navigate('Home'); + navigation.navigate('Home', {}); return 'email sent'; } catch { return 'Error with email, please contact support'; diff --git a/front/views/GenreDetailsView.tsx b/front/views/GenreDetailsView.tsx index e9c632e..fc495d8 100644 --- a/front/views/GenreDetailsView.tsx +++ b/front/views/GenreDetailsView.tsx @@ -61,7 +61,7 @@ const GenreDetailsView = ({ genreId }: RouteProps) => { songId: songData.id, onPress: () => { API.createSearchHistoryEntry(songData.name, 'song'); - navigation.navigate('Song', { songId: songData.id }); + navigation.navigate('Play', { songId: songData.id }); }, }))} cardComponent={SongCard} diff --git a/front/views/HomeView.tsx b/front/views/HomeView.tsx index 2ef8158..1023bd1 100644 --- a/front/views/HomeView.tsx +++ b/front/views/HomeView.tsx @@ -2,17 +2,18 @@ import React from 'react'; import { useQueries, useQuery } from '../Queries'; import API from '../API'; import { LoadingView } from '../components/Loading'; -import { Box, ScrollView, Flex, Stack, Heading, VStack, HStack } from 'native-base'; -import { useNavigation } from '../Navigation'; +import { Box, Flex, Stack, Heading, VStack, HStack } from 'native-base'; +import { RouteProps, useNavigation } from '../Navigation'; import SongCardGrid from '../components/SongCardGrid'; import CompetenciesTable from '../components/CompetenciesTable'; -import ProgressBar from '../components/ProgressBar'; import Translate from '../components/Translate'; import TextButton from '../components/TextButton'; import Song from '../models/Song'; import { FontAwesome5 } from '@expo/vector-icons'; +import ScaffoldCC from '../components/UI/ScaffoldCC'; -const HomeView = () => { +// eslint-disable-next-line @typescript-eslint/ban-types +const HomeView = (props: RouteProps<{}>) => { const navigation = useNavigation(); const userQuery = useQuery(API.getUserInfo); const playHistoryQuery = useQuery(API.getUserPlayHistory); @@ -39,27 +40,8 @@ const HomeView = () => { return ; } return ( - - - - `${welcome} ${userQuery.data.name}!`} - /> - - - - - - + + } @@ -134,7 +116,7 @@ const HomeView = () => { translate={{ translationKey: 'settingsBtn' }} colorScheme="gray" size="sm" - onPress={() => navigation.navigate('Settings')} + onPress={() => navigation.navigate('Settings', {})} /> { label={'V2'} colorScheme="gray" size="sm" - onPress={() => navigation.navigate('HomeNew')} + onPress={() => navigation.navigate('HomeNew', {})} /> @@ -188,7 +170,7 @@ const HomeView = () => { - + ); }; diff --git a/front/views/MusicView.tsx b/front/views/MusicView.tsx new file mode 100644 index 0000000..e9a8d59 --- /dev/null +++ b/front/views/MusicView.tsx @@ -0,0 +1,228 @@ +import React from 'react'; +import { Center, Text, useBreakpointValue, useTheme } from 'native-base'; +import { useWindowDimensions } from 'react-native'; +import { + TabView, + SceneMap, + TabBar, + NavigationState, + Route, + SceneRendererProps, +} from 'react-native-tab-view'; +import { Heart, Clock, StatusUp, FolderCross } from 'iconsax-react-native'; +import { Scene } from 'react-native-tab-view/lib/typescript/src/types'; +import { RouteProps, useNavigation } from '../Navigation'; +import { TranslationKey, translate } from '../i18n/i18n'; +import ScaffoldCC from '../components/UI/ScaffoldCC'; +import MusicList from '../components/UI/MusicList'; +import { useQueries, useQuery } from '../Queries'; +import API from '../API'; +import Song from '../models/Song'; +import { LoadingView } from '../components/Loading'; + +export const FavoritesMusic = () => { + const navigation = useNavigation(); + const playHistoryQuery = useQuery(API.getUserPlayHistory); + const nextStepQuery = useQuery(API.getSongSuggestions); + const songHistory = useQueries( + playHistoryQuery.data?.map(({ songID }) => API.getSong(songID)) ?? [] + ); + const artistsQueries = useQueries( + songHistory + .map((entry) => entry.data) + .concat(nextStepQuery.data ?? []) + .filter((s): s is Song => s !== undefined) + .map((song) => API.getArtist(song.artistId)) + ); + + const isLoading = + playHistoryQuery.isLoading || + nextStepQuery.isLoading || + songHistory.some((query) => query.isLoading) || + artistsQueries.some((query) => query.isLoading); + + const musics = + nextStepQuery.data + ?.filter((song: Song) => + artistsQueries.find((artistQuery) => artistQuery.data?.id === song.artistId) + ) + .map((song: Song) => ({ + artist: artistsQueries.find( + (artistQuery) => artistQuery.data?.id === song.artistId + )!.data!.name, + song: song.name, + image: song.cover, + level: 42, + lastScore: 42, + bestScore: 42, + liked: false, + onLike: () => { + console.log('onLike'); + }, + onPlay: () => navigation.navigate('Play', { songId: song.id }), + })) ?? []; + + if (isLoading) { + return ; + } + return ( + <> + {/* + console.log("A que coucou!")} + > + + Coucou + + + + */} + + + ); +}; + +export const RecentlyPlayedMusic = () => { + return ( +
+ RecentlyPlayedMusic +
+ ); +}; + +export const StepUpMusic = () => { + return ( +
+ StepUpMusic +
+ ); +}; + +const renderScene = SceneMap({ + favorites: FavoritesMusic, + recentlyPlayed: RecentlyPlayedMusic, + stepUp: StepUpMusic, +}); + +const getTabData = (key: string) => { + switch (key) { + case 'favorites': + return { index: 0, icon: Heart }; + case 'recentlyPlayed': + return { index: 1, icon: Clock }; + case 'stepUp': + return { index: 2, icon: StatusUp }; + default: + return { index: 3, icon: FolderCross }; + } +}; + +const MusicTab = (props: RouteProps) => { + const layout = useWindowDimensions(); + const [index, setIndex] = React.useState(0); + const { colors } = useTheme(); + const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); + const isSmallScreen = screenSize === 'small'; + const routes = [ + { key: 'favorites', title: 'musicTabFavorites' }, + { key: 'recentlyPlayed', title: 'musicTabRecentlyPlayed' }, + { key: 'stepUp', title: 'musicTabStepUp' }, + ]; + const renderTabBar = ( + props: SceneRendererProps & { navigationState: NavigationState } + ) => ( + & { + focused: boolean; + color: string; + } + ) => { + const tabHeader = getTabData(scene.route!.key); + return ( + + ); + }} + renderLabel={({ route, color }) => + layout.width > 800 && ( + + {translate(route.title as TranslationKey)} + + ) + } + tabStyle={{ flexDirection: 'row' }} + /> + ); + + return ( + + + + ); +}; + +export default MusicTab; diff --git a/front/views/PasswordResetView.tsx b/front/views/PasswordResetView.tsx index bd74b2e..f7b3980 100644 --- a/front/views/PasswordResetView.tsx +++ b/front/views/PasswordResetView.tsx @@ -17,7 +17,7 @@ const PasswordResetView = () => { password, }, }); - navigation.navigate('Home'); + navigation.navigate('Home', {}); return 'password succesfully reset'; } catch { return 'password reset failed'; diff --git a/front/views/PlayView.tsx b/front/views/PlayView.tsx index 84bc7d7..57cc725 100644 --- a/front/views/PlayView.tsx +++ b/front/views/PlayView.tsx @@ -1,42 +1,41 @@ /* eslint-disable no-mixed-spaces-and-tabs */ import { StackActions } from '@react-navigation/native'; -import React, { useEffect, useRef, useState, createContext, useReducer } from 'react'; -import { SafeAreaView, Platform, Animated } from 'react-native'; +import React, { useEffect, useRef, useState, createContext } from 'react'; +import { SafeAreaView, Platform } from 'react-native'; +import Animated, { + useSharedValue, + withTiming, + Easing, + useAnimatedStyle, + withSequence, + withDelay, +} from 'react-native-reanimated'; import * as ScreenOrientation from 'expo-screen-orientation'; -import { - Box, - Center, - Column, - Progress, - Text, - Row, - View, - useToast, - Icon, - HStack, -} from 'native-base'; -import IconButton from '../components/IconButton'; -import { Ionicons } from '@expo/vector-icons'; +import { Text, Row, View, useToast } from 'native-base'; import { RouteProps, useNavigation } from '../Navigation'; -import { transformQuery, useQuery } from '../Queries'; +import { useQuery } from '../Queries'; import API from '../API'; import LoadingComponent, { LoadingView } from '../components/Loading'; import { useSelector } from 'react-redux'; import { RootState } from '../state/Store'; -import { translate } from '../i18n/i18n'; +import { Translate, translate } from '../i18n/i18n'; import { ColorSchemeType } from 'native-base/lib/typescript/components/types'; import { useStopwatch } from 'react-use-precision-timer'; -import PartitionCoord from '../components/PartitionCoord'; -import TextButton from '../components/TextButton'; import { MIDIAccess, MIDIMessageEvent, requestMIDIAccess } from '@arthi-chaud/react-native-midi'; import * as Linking from 'expo-linking'; import url from 'url'; -import { PianoCanvasContext, PianoCanvasMsg, NoteTiming } from '../models/PianoGame'; -import { Metronome } from '../components/Metronome'; +import { PianoCanvasContext } from '../models/PianoGame'; +import PartitionMagic from '../components/Play/PartitionMagic'; +import useColorScheme from '../hooks/colorScheme'; +import { LinearGradient } from 'expo-linear-gradient'; +import { useTheme, useBreakpointValue } from 'native-base'; +import PopupCC from '../components/UI/PopupCC'; +import ButtonBase from '../components/UI/ButtonBase'; +import { Clock, Cup } from 'iconsax-react-native'; +import PlayViewControlBar from '../components/Play/PlayViewControlBar'; type PlayViewProps = { songId: number; - type: 'practice' | 'normal'; }; type ScoreMessage = { @@ -76,35 +75,40 @@ export const PianoCC = createContext({ messages: [], }); -const PlayView = ({ songId, type, route }: RouteProps) => { +const PlayView = ({ songId, route }: RouteProps) => { + const [type, setType] = useState<'practice' | 'normal'>(); const accessToken = useSelector((state: RootState) => state.user.accessToken); const navigation = useNavigation(); + const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); + const isPhone = screenSize === 'small'; const song = useQuery(API.getSong(songId), { staleTime: Infinity }); const toast = useToast(); const [lastScoreMessage, setLastScoreMessage] = useState(); const webSocket = useRef(); - const bpm = useRef(60); const [paused, setPause] = useState(true); const stopwatch = useStopwatch(); const [time, setTime] = useState(0); + const songHistory = useQuery(API.getSongHistory(songId)); const [partitionRendered, setPartitionRendered] = useState(false); // Used to know when partitionview can render const [score, setScore] = useState(0); // Between 0 and 100 - const fadeAnim = useRef(new Animated.Value(0)).current; - const musixml = useQuery( - transformQuery(API.getSongMusicXML(songId), (data) => new TextDecoder().decode(data)), - { staleTime: Infinity } - ); + // const fadeAnim = useRef(new Animated.Value(0)).current; const getElapsedTime = () => stopwatch.getElapsedRunningTime() - 3000; const [midiKeyboardFound, setMidiKeyboardFound] = useState(); // first number is the note, the other is the time when pressed on release the key is removed const [pressedKeys, setPressedKeys] = useState>(new Map()); // [note, time] - const [pianoMsgs, setPianoMsgs] = useReducer( - (state: PianoCanvasMsg[], action: PianoCanvasMsg) => { - state.push(action); - return state; - }, - [] - ); + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const [streak, setStreak] = useState(0); + const scoreMessageScale = useSharedValue(0); + // this style should bounce in on enter and fade away + const scoreMsgStyle = useAnimatedStyle(() => { + return { + transform: [{ scale: scoreMessageScale.value }], + }; + }); + const colorScheme = useColorScheme(); + const { colors } = useTheme(); + const textColor = colors.text; + const statColor = colors.lightText; const onPause = () => { stopwatch.pause(); @@ -136,7 +140,7 @@ const PlayView = ({ songId, type, route }: RouteProps) => { stopwatch.stop(); if (webSocket.current?.readyState != WebSocket.OPEN) { console.warn('onEnd: Websocket not open'); - navigation.dispatch(StackActions.replace('Home')); + navigation.dispatch(StackActions.replace('Home', {})); return; } webSocket.current?.send( @@ -189,17 +193,9 @@ const PlayView = ({ songId, type, route }: RouteProps) => { return; } - const currentStreak = data.info.current_streak; const points = data.info.score; const maxPoints = data.info.max_score || 1; - if (currentStreak !== undefined && points !== undefined) { - setPianoMsgs({ - type: 'scoreInfo', - data: { streak: currentStreak, score: points }, - }); - } - setScore(Math.floor((Math.max(points, 0) * 100) / maxPoints)); let formattedMessage = ''; @@ -207,45 +203,25 @@ const PlayView = ({ songId, type, route }: RouteProps) => { if (data.type == 'miss') { formattedMessage = translate('missed'); - setPianoMsgs({ - type: 'noteTiming', - data: NoteTiming.Missed, - }); - messageColor = 'black'; + messageColor = 'white'; } else if (data.type == 'timing' || data.type == 'duration') { formattedMessage = translate(data[data.type]); switch (data[data.type]) { case 'perfect': messageColor = 'green'; - setPianoMsgs({ - type: 'noteTiming', - data: NoteTiming.Perfect, - }); break; case 'great': messageColor = 'blue'; - setPianoMsgs({ - type: 'noteTiming', - data: NoteTiming.Great, - }); break; case 'short': case 'long': case 'good': messageColor = 'lightBlue'; - setPianoMsgs({ - type: 'noteTiming', - data: NoteTiming.Good, - }); break; case 'too short': case 'too long': case 'wrong': messageColor = 'trueGray'; - setPianoMsgs({ - type: 'noteTiming', - data: NoteTiming.Wrong, - }); break; default: break; @@ -301,12 +277,19 @@ const PlayView = ({ songId, type, route }: RouteProps) => { }, []); useEffect(() => { if (lastScoreMessage) { - fadeAnim.setValue(1); - Animated.timing(fadeAnim, { - toValue: 0, - duration: 3000, - useNativeDriver: true, - }).start(); + scoreMessageScale.value = withSequence( + withTiming(1, { + duration: 400, + easing: Easing.elastic(3), + }), + withDelay( + 700, + withTiming(0, { + duration: 300, + easing: Easing.out(Easing.cubic), + }) + ) + ); } }, [lastScoreMessage]); useEffect(() => { @@ -320,120 +303,206 @@ const PlayView = ({ songId, type, route }: RouteProps) => { } }, [song.data, partitionRendered]); - if (!song.data || !musixml.data) { + if (!song.data) { return ; } return ( - - - - - - - - - setPartitionRendered(true)} - /> - - {!partitionRendered && } - - - - - + - - + { + if (!isVisible) { + // If we dismiss the popup, Go to previous page + navigation.goBack(); + } + } + : undefined + } > - Score: {score}% - - -
- {song.data.name} -
- + setType('practice')} + /> + setType('normal')} + /> + + + {( + [ + [ + 'lastScore', + songHistory.data?.best ?? 0, + () => , + ] as const, + [ + 'bestScore', + songHistory.data?.history.at(0)?.score ?? 0, + () => , + ], + ] as const + ).map(([label, value, icon]) => ( + + + + + + {icon()} + + {value} + + + + ))} + + + - {midiKeyboardFound && ( - <> - } - onPress={() => { - if (paused) { - onResume(); - } else { - onPause(); - } - }} - /> - - {time < 0 - ? paused - ? '0:00' - : Math.floor((time % 60000) / 1000) - .toFixed(0) - .toString() - : `${Math.floor(time / 60000)}:${Math.floor( - (time % 60000) / 1000 - ) - .toFixed(0) - .toString() - .padStart(2, '0')}`} - - } - onPress={() => { - onEnd(); - }} - /> - - )} -
- -
-
+ + {score} + + + + + + {lastScoreMessage?.content} + + + {streak > 0 && `x${streak}`} + + + + + + + setPartitionRendered(true)} + onEndReached={onEnd} + onError={() => { + console.log('error from partition magic'); + }} + /> + + {!partitionRendered && } + + + + {colorScheme === 'dark' && ( + + )} + ); }; diff --git a/front/views/ProfileView.tsx b/front/views/ProfileView.tsx index 1010020..93afd11 100644 --- a/front/views/ProfileView.tsx +++ b/front/views/ProfileView.tsx @@ -1,718 +1,15 @@ import React from 'react'; import { useWindowDimensions } from 'react-native'; -import { Column, Flex, Progress, Row, Text, Wrap } from 'native-base'; -import { useNavigation } from '../Navigation'; +import { Column, Flex, Progress, Row, Text, View, useTheme } from 'native-base'; +import { RouteProps, useNavigation } from '../Navigation'; import UserAvatar from '../components/UserAvatar'; import { LoadingView } from '../components/Loading'; import { useQuery } from '../Queries'; import API from '../API'; -import { LinearGradient } from 'expo-linear-gradient'; import ButtonBase from '../components/UI/ButtonBase'; import { translate } from '../i18n/i18n'; import ScoreGraph from '../components/ScoreGraph'; - -const fakeData = [ - { - score: 47, - songID: 34, - userID: 18, - playDate: new Date('2023-08-20 8:27:21'), - difficulties: 1, - }, - { - score: 1, - songID: 603, - userID: 18, - playDate: new Date('2023-09-13 22:56:45'), - difficulties: 1, - }, - { - score: 93, - songID: 601, - userID: 18, - playDate: new Date('2023-08-11 5:30:13'), - difficulties: 5, - }, - { - score: 55, - songID: 456, - userID: 18, - playDate: new Date('2023-07-10 23:06:09'), - difficulties: 4, - }, - { - score: 2, - songID: 345, - userID: 18, - playDate: new Date('2023-07-23 18:33:24'), - difficulties: 2, - }, - { - score: 47, - songID: 625, - userID: 18, - playDate: new Date('2023-07-09 7:16:46'), - difficulties: 1, - }, - { - score: 27, - songID: 234, - userID: 18, - playDate: new Date('2023-07-06 15:56:53'), - difficulties: 5, - }, - { - score: 85, - songID: 866, - userID: 18, - playDate: new Date('2023-07-08 8:56:44'), - difficulties: 2, - }, - { - score: 28, - songID: 484, - userID: 18, - playDate: new Date('2023-09-12 6:05:32'), - difficulties: 4, - }, - { - score: 5, - songID: 443, - userID: 18, - playDate: new Date('2023-08-01 11:57:09'), - difficulties: 3, - }, - { - score: 14, - songID: 109, - userID: 18, - playDate: new Date('2023-07-03 22:54:07'), - difficulties: 3, - }, - { - score: 57, - songID: 892, - userID: 18, - playDate: new Date('2023-07-13 23:22:34'), - difficulties: 5, - }, - { - score: 7, - songID: 164, - userID: 18, - playDate: new Date('2023-07-02 0:15:13'), - difficulties: 2, - }, - { - score: 42, - songID: 761, - userID: 18, - playDate: new Date('2023-07-10 18:25:19'), - difficulties: 3, - }, - { - score: 49, - songID: 82, - userID: 18, - playDate: new Date('2023-09-12 12:51:15'), - difficulties: 4, - }, - { - score: 83, - songID: 488, - userID: 18, - playDate: new Date('2023-08-28 7:56:31'), - difficulties: 5, - }, - { - score: 91, - songID: 648, - userID: 18, - playDate: new Date('2023-07-21 10:16:33'), - difficulties: 4, - }, - { - score: 67, - songID: 210, - userID: 18, - playDate: new Date('2023-09-14 8:04:50'), - difficulties: 1, - }, - { - score: 31, - songID: 274, - userID: 18, - playDate: new Date('2023-07-10 11:24:28'), - difficulties: 4, - }, - { - score: 29, - songID: 930, - userID: 18, - playDate: new Date('2023-08-06 0:05:43'), - difficulties: 5, - }, - { - score: 51, - songID: 496, - userID: 18, - playDate: new Date('2023-08-14 9:43:14'), - difficulties: 1, - }, - { - score: 56, - songID: 370, - userID: 18, - playDate: new Date('2023-08-18 19:25:59'), - difficulties: 2, - }, - { - score: 29, - songID: 333, - userID: 18, - playDate: new Date('2023-07-11 4:26:44'), - difficulties: 4, - }, - { - score: 95, - songID: 921, - userID: 18, - playDate: new Date('2023-08-30 12:58:50'), - difficulties: 1, - }, - { - score: 37, - songID: 80, - userID: 18, - playDate: new Date('2023-07-16 7:17:57'), - difficulties: 4, - }, - { - score: 90, - songID: 134, - userID: 18, - playDate: new Date('2023-09-03 9:00:04'), - difficulties: 1, - }, - { - score: 51, - songID: 497, - userID: 18, - playDate: new Date('2023-07-31 19:34:43'), - difficulties: 4, - }, - { - score: 95, - songID: 368, - userID: 18, - playDate: new Date('2023-09-12 20:12:50'), - difficulties: 4, - }, - { - score: 55, - songID: 247, - userID: 18, - playDate: new Date('2023-09-16 2:45:13'), - difficulties: 1, - }, - { - score: 26, - songID: 725, - userID: 18, - playDate: new Date('2023-07-28 22:59:31'), - difficulties: 2, - }, - { - score: 82, - songID: 952, - userID: 18, - playDate: new Date('2023-08-01 6:31:47'), - difficulties: 1, - }, - { - score: 88, - songID: 85, - userID: 18, - playDate: new Date('2023-08-12 2:33:11'), - difficulties: 5, - }, - { - score: 12, - songID: 96, - userID: 18, - playDate: new Date('2023-09-03 14:00:33'), - difficulties: 4, - }, - { - score: 100, - songID: 807, - userID: 18, - playDate: new Date('2023-07-03 0:53:11'), - difficulties: 3, - }, - { - score: 88, - songID: 456, - userID: 18, - playDate: new Date('2023-08-06 9:17:15'), - difficulties: 5, - }, - { - score: 10, - songID: 889, - userID: 18, - playDate: new Date('2023-08-15 12:19:16'), - difficulties: 3, - }, - { - score: 76, - songID: 144, - userID: 18, - playDate: new Date('2023-09-10 2:56:49'), - difficulties: 4, - }, - { - score: 60, - songID: 808, - userID: 18, - playDate: new Date('2023-07-24 10:22:33'), - difficulties: 1, - }, - { - score: 94, - songID: 537, - userID: 18, - playDate: new Date('2023-08-03 23:22:29'), - difficulties: 2, - }, - { - score: 100, - songID: 465, - userID: 18, - playDate: new Date('2023-09-16 19:12:58'), - difficulties: 2, - }, - { - score: 85, - songID: 31, - userID: 18, - playDate: new Date('2023-08-17 5:29:49'), - difficulties: 2, - }, - { - score: 98, - songID: 345, - userID: 18, - playDate: new Date('2023-09-11 1:51:49'), - difficulties: 1, - }, - { - score: 81, - songID: 204, - userID: 18, - playDate: new Date('2023-08-21 2:46:56'), - difficulties: 2, - }, - { - score: 21, - songID: 40, - userID: 18, - playDate: new Date('2023-07-27 4:00:00'), - difficulties: 2, - }, - { - score: 91, - songID: 274, - userID: 18, - playDate: new Date('2023-07-14 16:09:49'), - difficulties: 5, - }, - { - score: 99, - songID: 416, - userID: 18, - playDate: new Date('2023-08-27 1:56:16'), - difficulties: 5, - }, - { - score: 58, - songID: 87, - userID: 18, - playDate: new Date('2023-09-08 19:30:20'), - difficulties: 5, - }, - { - score: 90, - songID: 744, - userID: 18, - playDate: new Date('2023-08-18 23:47:55'), - difficulties: 2, - }, - { - score: 69, - songID: 954, - userID: 18, - playDate: new Date('2023-08-07 1:55:52'), - difficulties: 5, - }, - { - score: 75, - songID: 467, - userID: 18, - playDate: new Date('2023-07-10 8:37:22'), - difficulties: 4, - }, - { - score: 41, - songID: 693, - userID: 18, - playDate: new Date('2023-09-11 5:15:16'), - difficulties: 2, - }, - { - score: 56, - songID: 140, - userID: 18, - playDate: new Date('2023-08-06 5:32:46'), - difficulties: 2, - }, - { - score: 88, - songID: 64, - userID: 18, - playDate: new Date('2023-07-31 20:24:30'), - difficulties: 1, - }, - { - score: 99, - songID: 284, - userID: 18, - playDate: new Date('2023-08-07 17:51:19'), - difficulties: 5, - }, - { - score: 47, - songID: 746, - userID: 18, - playDate: new Date('2023-07-18 17:45:56'), - difficulties: 5, - }, - { - score: 80, - songID: 791, - userID: 18, - playDate: new Date('2023-08-21 1:19:45'), - difficulties: 1, - }, - { - score: 21, - songID: 748, - userID: 18, - playDate: new Date('2023-07-04 9:09:27'), - difficulties: 4, - }, - { - score: 75, - songID: 541, - userID: 18, - playDate: new Date('2023-09-19 23:08:05'), - difficulties: 2, - }, - { - score: 31, - songID: 724, - userID: 18, - playDate: new Date('2023-07-09 2:01:29'), - difficulties: 4, - }, - { - score: 24, - songID: 654, - userID: 18, - playDate: new Date('2023-09-04 1:27:00'), - difficulties: 1, - }, - { - score: 55, - songID: 154, - userID: 18, - playDate: new Date('2023-07-10 17:48:17'), - difficulties: 3, - }, - { - score: 4, - songID: 645, - userID: 18, - playDate: new Date('2023-09-11 18:51:11'), - difficulties: 2, - }, - { - score: 52, - songID: 457, - userID: 18, - playDate: new Date('2023-07-30 19:12:52'), - difficulties: 3, - }, - { - score: 68, - songID: 236, - userID: 18, - playDate: new Date('2023-08-08 8:56:08'), - difficulties: 3, - }, - { - score: 44, - songID: 16, - userID: 18, - playDate: new Date('2023-07-22 10:39:34'), - difficulties: 1, - }, - { - score: 59, - songID: 863, - userID: 18, - playDate: new Date('2023-09-17 4:12:43'), - difficulties: 1, - }, - { - score: 18, - songID: 276, - userID: 18, - playDate: new Date('2023-07-08 15:47:54'), - difficulties: 2, - }, - { - score: 64, - songID: 557, - userID: 18, - playDate: new Date('2023-08-17 0:13:46'), - difficulties: 1, - }, - { - score: 2, - songID: 452, - userID: 18, - playDate: new Date('2023-07-26 5:13:31'), - difficulties: 5, - }, - { - score: 99, - songID: 546, - userID: 18, - playDate: new Date('2023-07-11 16:31:37'), - difficulties: 1, - }, - { - score: 75, - songID: 598, - userID: 18, - playDate: new Date('2023-08-12 22:56:24'), - difficulties: 4, - }, - { - score: 4, - songID: 258, - userID: 18, - playDate: new Date('2023-09-20 8:26:50'), - difficulties: 2, - }, - { - score: 50, - songID: 190, - userID: 18, - playDate: new Date('2023-09-20 20:07:06'), - difficulties: 4, - }, - { - score: 9, - songID: 914, - userID: 18, - playDate: new Date('2023-08-30 16:57:14'), - difficulties: 5, - }, - { - score: 7, - songID: 92, - userID: 18, - playDate: new Date('2023-07-18 20:33:44'), - difficulties: 5, - }, - { - score: 94, - songID: 98, - userID: 18, - playDate: new Date('2023-08-15 5:05:18'), - difficulties: 5, - }, - { - score: 94, - songID: 424, - userID: 18, - playDate: new Date('2023-07-22 9:59:12'), - difficulties: 5, - }, - { - score: 14, - songID: 635, - userID: 18, - playDate: new Date('2023-07-02 6:58:39'), - difficulties: 4, - }, - { - score: 99, - songID: 893, - userID: 18, - playDate: new Date('2023-08-05 16:09:33'), - difficulties: 1, - }, - { - score: 94, - songID: 67, - userID: 18, - playDate: new Date('2023-07-01 8:11:37'), - difficulties: 2, - }, - { - score: 21, - songID: 335, - userID: 18, - playDate: new Date('2023-08-03 2:07:44'), - difficulties: 3, - }, - { - score: 47, - songID: 294, - userID: 18, - playDate: new Date('2023-09-13 17:32:46'), - difficulties: 4, - }, - { - score: 89, - songID: 184, - userID: 18, - playDate: new Date('2023-07-04 5:20:13'), - difficulties: 2, - }, - { - score: 28, - songID: 345, - userID: 18, - playDate: new Date('2023-09-07 6:35:11'), - difficulties: 3, - }, - { - score: 93, - songID: 697, - userID: 18, - playDate: new Date('2023-07-29 0:07:10'), - difficulties: 2, - }, - { - score: 58, - songID: 666, - userID: 18, - playDate: new Date('2023-07-09 3:03:02'), - difficulties: 2, - }, - { - score: 73, - songID: 459, - userID: 18, - playDate: new Date('2023-08-05 7:33:54'), - difficulties: 4, - }, - { - score: 50, - songID: 695, - userID: 18, - playDate: new Date('2023-07-26 18:26:55'), - difficulties: 4, - }, - { - score: 39, - songID: 995, - userID: 18, - playDate: new Date('2023-08-24 17:34:09'), - difficulties: 3, - }, - { - score: 25, - songID: 122, - userID: 18, - playDate: new Date('2023-08-25 18:54:12'), - difficulties: 1, - }, - { - score: 29, - songID: 439, - userID: 18, - playDate: new Date('2023-09-15 0:44:48'), - difficulties: 3, - }, - { - score: 79, - songID: 234, - userID: 18, - playDate: new Date('2023-09-13 13:53:16'), - difficulties: 2, - }, - { - score: 0, - songID: 369, - userID: 18, - playDate: new Date('2023-08-30 22:54:34'), - difficulties: 1, - }, - { - score: 25, - songID: 223, - userID: 18, - playDate: new Date('2023-09-13 1:09:11'), - difficulties: 3, - }, - { - score: 55, - songID: 716, - userID: 18, - playDate: new Date('2023-07-12 19:43:23'), - difficulties: 3, - }, - { - score: 100, - songID: 62, - userID: 18, - playDate: new Date('2023-07-11 15:33:40'), - difficulties: 5, - }, - { - score: 74, - songID: 271, - userID: 18, - playDate: new Date('2023-08-25 23:14:51'), - difficulties: 3, - }, - { - score: 22, - songID: 265, - userID: 18, - playDate: new Date('2023-07-17 15:01:38'), - difficulties: 1, - }, - { - score: 79, - songID: 552, - userID: 18, - playDate: new Date('2023-07-28 20:13:14'), - difficulties: 5, - }, - { - score: 50, - songID: 603, - userID: 18, - playDate: new Date('2023-07-06 3:52:21'), - difficulties: 5, - }, -]; +import ScaffoldCC from '../components/UI/ScaffoldCC'; function xpToLevel(xp: number): number { return Math.floor(xp / 1000); @@ -722,102 +19,102 @@ function xpToProgressBarValue(xp: number): number { return Math.floor(xp / 10); } -const ProfileView = () => { +// eslint-disable-next-line @typescript-eslint/ban-types +const ProfileView = (props: RouteProps<{}>) => { const layout = useWindowDimensions(); const navigation = useNavigation(); const userQuery = useQuery(API.getUserInfo); - // const scoresQuery = useQuery(API.getSongHistory(props.songId), { refetchOnWindowFocus: true }); if (!userQuery.data) { - return ; + return ( + + + + ); } - // const user = userQuery.data; const progessValue = xpToProgressBarValue(userQuery.data.data.xp); const level = xpToLevel(userQuery.data.data.xp); + const { colors } = useTheme(); + + const isBigScreen = layout.width > 650; return ( - - 650 ? 'row' : 'column', - alignItems: 'center', - paddingBottom: 20, - justifyContent: 'space-between', - }} - > - 650 ? 'xl' : '2xl'} /> - + + 650 ? 20 : 0, - paddingTop: layout.width > 650 ? 0 : 20, - flex: 1, - width: '100%', + display: 'flex', + flexDirection: isBigScreen ? 'row' : 'column', + alignItems: isBigScreen ? 'flex-start' : 'center', + paddingBottom: 20, + gap: 5, + justifyContent: 'space-between', }} > - - - {userQuery.data.name} + + + + + + {userQuery.data.name} + + navigation.navigate('Settings', {})} + /> + + + Account created on {userQuery.data.data.createdAt.toLocaleDateString()} - navigation.navigate('Settings')} - /> - - - Account created on {userQuery.data.data.createdAt.toLocaleDateString()} - - - - Your client ID is {userQuery.data.id} - - {userQuery.data.data.gamesPlayed} Games played - - - - - {`${translate('level')} ${level}`} - - - - - + + + Your client ID is {userQuery.data.id} + + {userQuery.data.data.gamesPlayed} Games played + + + + + {`${translate('level')} ${level}`} + + + + + ); }; diff --git a/front/views/ScoreView.tsx b/front/views/ScoreView.tsx index 15d204c..cd27420 100644 --- a/front/views/ScoreView.tsx +++ b/front/views/ScoreView.tsx @@ -33,7 +33,6 @@ const ScoreView = (props: RouteProps) => { const artistQuery = useQuery(() => API.getArtist(songQuery.data!.artistId!), { enabled: songQuery.data !== undefined, }); - const scoresQuery = useQuery(API.getSongHistory(props.songId), { refetchOnWindowFocus: true }); const recommendations = useQuery(API.getSongSuggestions); const artistRecommendations = useQueries( recommendations.data @@ -139,9 +138,7 @@ const ScoreView = (props: RouteProps) => { - {scoresQuery.data && (scoresQuery.data?.history?.length ?? 0) > 1 && ( - - )} + ({ @@ -163,10 +160,10 @@ const ScoreView = (props: RouteProps) => { navigation.navigate('Home')} + onPress={() => navigation.navigate('Home', {})} /> navigation.navigate('Song', { songId })} + onPress={() => navigation.navigate('Play', { songId })} translate={{ translationKey: 'playAgain' }} /> diff --git a/front/views/SearchView.tsx b/front/views/SearchView.tsx index af83f25..3094103 100644 --- a/front/views/SearchView.tsx +++ b/front/views/SearchView.tsx @@ -12,6 +12,7 @@ import { Filter } from '../components/SearchBar'; import { ScrollView } from 'native-base'; import { RouteProps } from '../Navigation'; import LikedSong from '../models/LikedSong'; +import ScaffoldCC from '../components/UI/ScaffoldCC'; interface SearchContextType { filter: 'artist' | 'song' | 'genre' | 'all' | 'favorites'; @@ -82,31 +83,31 @@ const SearchView = (props: RouteProps) => { }; return ( - - - - - + + + + + - - - - + + + + ); }; diff --git a/front/views/SigninView.tsx b/front/views/SigninView.tsx index 884eea0..1405e86 100644 --- a/front/views/SigninView.tsx +++ b/front/views/SigninView.tsx @@ -61,14 +61,15 @@ const SigninView = () => { return ( { @@ -83,10 +84,11 @@ const SigninView = () => { isRequired />, { @@ -99,15 +101,18 @@ const SigninView = () => { }); }} isRequired + isSecret + />, + navigation.navigate('ForgotPassword')} />, - navigation.navigate('ForgotPassword')}> - {translate('forgottenPassword')} - , ]} submitButton={ { /> } link={{ - text: 'Inscrivez-vous gratuitement', - description: "Vous n'avez pas de compte ? ", + label: translate('signinLinkLabel') + ' ', + text: translate('signinLinkText'), onPress: () => navigation.navigate('Signup'), }} /> diff --git a/front/views/SignupView.tsx b/front/views/SignupView.tsx index 51ea47f..7401d66 100644 --- a/front/views/SignupView.tsx +++ b/front/views/SignupView.tsx @@ -76,14 +76,14 @@ const SignupView = () => { return ( { @@ -101,7 +101,7 @@ const SignupView = () => { key={'signup-form-2'} error={formData.email.error} icon={Sms} - placeholder="Email" + placeholder={translate('formPlaceholderEmail')} autoComplete="email" value={formData.email.value} onChangeText={(t) => { @@ -121,7 +121,7 @@ const SignupView = () => { isSecret error={formData.password.error} icon={Lock1} - placeholder="Password" + placeholder={translate('formPlaceholderPassword')} autoComplete="password-new" value={formData.password.value} onChangeText={(t) => { @@ -140,7 +140,7 @@ const SignupView = () => { isSecret error={formData.repeatPassword.error} icon={Lock1} - placeholder="Repeat password" + placeholder={translate('formPlaceholderRepeatPassword')} autoComplete="password-new" value={formData.repeatPassword.value} onChangeText={(t) => { @@ -163,15 +163,15 @@ const SignupView = () => { submitButton={ { @@ -193,8 +193,8 @@ const SignupView = () => { /> } link={{ - text: "S'identifier", - description: 'Vous avez déjà un compte ? ', + label: translate('signupLinkLabel'), + text: translate('signupLinkText'), onPress: () => navigation.navigate('Login'), }} /> diff --git a/front/views/SongLobbyView.tsx b/front/views/SongLobbyView.tsx deleted file mode 100644 index 09be78b..0000000 --- a/front/views/SongLobbyView.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { Box, Image, Text, Icon, Stack } from 'native-base'; -import { useQuery } from '../Queries'; -import { LoadingView } from '../components/Loading'; -import { Translate } from '../i18n/i18n'; -import { Ionicons } from '@expo/vector-icons'; -import API from '../API'; -import TextButton from '../components/TextButton'; -import { RouteProps, useNavigation } from '../Navigation'; -import ScoreGraph from '../components/ScoreGraph'; -import DurationComponent from '../components/DurationComponent'; - -interface SongLobbyProps { - // The unique identifier to find a song - songId: number; -} - -const SongLobbyView = (props: RouteProps) => { - const rootComponentPadding = 30; - const navigation = useNavigation(); - // Refetch to update score when coming back from score view - const songQuery = useQuery(API.getSong(props.songId), { refetchOnWindowFocus: true }); - const chaptersQuery = useQuery(API.getSongChapters(props.songId), { - refetchOnWindowFocus: true, - }); - const scoresQuery = useQuery(API.getSongHistory(props.songId), { refetchOnWindowFocus: true }); - if (songQuery.isLoading || scoresQuery.isLoading) return ; - if (songQuery.isError || scoresQuery.isError) { - navigation.navigate('Error'); - return <>; - } - return ( - - - - {songQuery.data?.name} - - - - - - {songQuery.data!.name} - - - - `${level}: ${ - chaptersQuery.data!.reduce((a, b) => a + b.difficulty, 0) / - chaptersQuery.data!.length - }` - } - /> - - - - navigation.navigate('Play', { - songId: songQuery.data!.id, - type: 'normal', - }) - } - rightIcon={} - /> - - navigation.navigate('Play', { - songId: songQuery.data!.id, - type: 'practice', - }) - } - rightIcon={} - colorScheme="secondary" - /> - - - - - - - - - {scoresQuery.data?.best ?? 0} - - - - - - {scoresQuery.data?.history.at(0)?.score ?? 0} - - - {scoresQuery.data && (scoresQuery.data?.history?.length ?? 0) > 0 && ( - - )} - - ); -}; - -export default SongLobbyView; diff --git a/front/views/V2/DiscoveryView.tsx b/front/views/V2/DiscoveryView.tsx new file mode 100644 index 0000000..517b604 --- /dev/null +++ b/front/views/V2/DiscoveryView.tsx @@ -0,0 +1,87 @@ +import { ScrollView, View } from 'react-native'; +import { Text, useBreakpointValue } from 'native-base'; +import React from 'react'; +import { useQuery } from '../../Queries'; +import SongCardInfo from '../../components/V2/SongCardInfo'; +import API from '../../API'; +import { RouteProps, useNavigation } from '../../Navigation'; +import ScaffoldCC from '../../components/UI/ScaffoldCC'; +import GoldenRatio from '../../components/V2/GoldenRatio'; + +// eslint-disable-next-line @typescript-eslint/ban-types +const HomeView = (props: RouteProps<{}>) => { + const songsQuery = useQuery(API.getSongSuggestions); + const navigation = useNavigation(); + const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); + const isPhone = screenSize === 'small'; + + return ( + + + + + + + + + {'Suggestions'} + + + {songsQuery.data?.map((song) => ( + { + navigation.navigate('Play', { songId: song.id }); + }} + onPlay={() => { + console.log('play'); + }} + /> + ))} + + + + + + ); +}; + +export default HomeView; diff --git a/front/views/V2/HomeView.tsx b/front/views/V2/HomeView.tsx deleted file mode 100644 index 550248d..0000000 --- a/front/views/V2/HomeView.tsx +++ /dev/null @@ -1,210 +0,0 @@ -import { View } from 'react-native'; -import { Text, useBreakpointValue } from 'native-base'; -import React from 'react'; -import { useQuery, useQueries } from '../../Queries'; -import HomeMainSongCard from '../../components/V2/HomeMainSongCard'; -import SongCardInfo from '../../components/V2/SongCardInfo'; -import API from '../../API'; -import { useNavigation } from '../../Navigation'; - -const bigSideRatio = 1000; -const smallSideRatio = 618; - -type HomeCardProps = { - image: string; - title: string; - artist: string; - fontSize: number; - onPress?: () => void; -}; - -const cards = [ - { - image: 'https://media.discordapp.net/attachments/717080637038788731/1153688155292180560/image_homeview1.png', - title: 'Beethoven', - artist: 'Synphony No. 9', - fontSize: 46, - }, - { - image: 'https://media.discordapp.net/attachments/717080637038788731/1153688154923090093/image_homeview2.png', - title: 'Mozart', - artist: 'Lieder Kantate KV 619', - fontSize: 36, - }, - { - image: 'https://media.discordapp.net/attachments/717080637038788731/1153688154499457096/image_homeview3.png', - title: 'Back', - artist: 'Truc Truc', - fontSize: 26, - }, - { - image: 'https://media.discordapp.net/attachments/717080637038788731/1153688154109394985/image_homeview4.png', - title: 'Mozart', - artist: 'Machin Machin', - fontSize: 22, - }, -] as [HomeCardProps, HomeCardProps, HomeCardProps, HomeCardProps]; - -const HomeView = () => { - const songsQuery = useQuery(API.getSongSuggestions); - const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); - const isPhone = screenSize === 'small'; - const navigation = useNavigation(); - const artistsQueries = useQueries( - (songsQuery.data ?? []).map((song) => API.getArtist(song.artistId)) - ); - - React.useEffect(() => { - if (!songsQuery.data) return; - if (artistsQueries.every((query) => !query.isLoading)) return; - - (songsQuery.data ?? []) - .filter((song) => - artistsQueries.find((artistQuery) => artistQuery.data?.id === song.artistId) - ) - .forEach((song, index) => { - if (index > 3) return; - cards[index]!.image = song.cover; - cards[index]!.title = song.name; - cards[index]!.artist = artistsQueries.find( - (artistQuery) => artistQuery.data?.id === song.artistId - )!.data!.name; - cards[index]!.onPress = () => { - navigation.navigate('Song', { songId: song.id }); - }; - }); - }, [artistsQueries]); - - return ( - - - - - - - - - - - - - - - - - - - - - - - - - - - {'Suggestions'} - - {songsQuery.isLoading && Loading...} - - {songsQuery.data?.map((song) => ( - { - navigation.navigate('Song', { songId: song.id }); - }} - onPlay={() => { - console.log('play'); - }} - /> - ))} - - - - ); -}; - -export default HomeView; diff --git a/front/views/VerifiedView.tsx b/front/views/VerifiedView.tsx index 51d8c28..907cd63 100644 --- a/front/views/VerifiedView.tsx +++ b/front/views/VerifiedView.tsx @@ -17,7 +17,7 @@ const VerifiedView = () => { route: `/auth/verify?token=${(route.params as any).token}`, method: 'PUT', }); - navigation.navigate('Home'); + navigation.navigate('Home', {}); } catch { setFailed(true); } diff --git a/front/views/settings/GuestToUserView.tsx b/front/views/settings/GuestToUserView.tsx deleted file mode 100644 index 4f09da2..0000000 --- a/front/views/settings/GuestToUserView.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import React from 'react'; -import SignUpForm from '../../components/forms/signupform'; -import { Center, Heading, Text } from 'native-base'; -import API, { APIError } from '../../API'; -import { translate } from '../../i18n/i18n'; - -const handleSubmit = async (username: string, password: string, email: string) => { - try { - await API.transformGuestToUser({ username, password, email }); - } catch (error) { - if (error instanceof APIError) return translate(error.userMessage); - if (error instanceof Error) return error.message; - return translate('unknownError'); - } - return translate('loggedIn'); -}; - -const GuestToUserView = () => { - return ( -
-
- {translate('signUp')} - - {translate('transformGuestToUserExplanations')} - - - handleSubmit(username, password, email) - } - /> -
-
- ); -}; - -export default GuestToUserView; diff --git a/front/views/settings/NotificationView.tsx b/front/views/settings/NotificationView.tsx deleted file mode 100644 index 508b95b..0000000 --- a/front/views/settings/NotificationView.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import React from 'react'; -import { Flex } from 'native-base'; -import { translate } from '../../i18n/i18n'; -import ElementList from '../../components/GtkUI/ElementList'; -import useUserSettings from '../../hooks/userSettings'; -import { LoadingView } from '../../components/Loading'; -import { Calendar1, MonitorMobbile, Send2, Warning2 } from 'iconsax-react-native'; - -const NotificationsView = () => { - const { settings, updateSettings } = useUserSettings(); - - if (!settings.data) { - return ; - } - return ( - - , - title: translate('SettingsNotificationsPushNotifications'), - description: 'Cette notification apparaitra sur votre apparail en pop-up', - data: { - value: settings.data.notifications.pushNotif, - onToggle: () => { - updateSettings({ - notifications: { - pushNotif: !settings.data.notifications.pushNotif, - }, - }); - }, - }, - }, - { - type: 'toggle', - icon: , - title: translate('SettingsNotificationsEmailNotifications'), - description: 'Recevez des mails pour atteindre vos objectifs', - data: { - value: settings.data.notifications.emailNotif, - onToggle: () => { - updateSettings({ - notifications: { - emailNotif: !settings.data.notifications.emailNotif, - }, - }); - }, - }, - }, - { - type: 'toggle', - icon: , - title: translate('SettingsNotificationsTrainingReminder'), - description: 'Un apprentissage régulier est la clé', - data: { - value: settings.data.notifications.trainNotif, - onToggle: () => { - updateSettings({ - notifications: { - trainNotif: !settings.data.notifications.trainNotif, - }, - }); - }, - }, - }, - { - type: 'toggle', - icon: , - title: translate('SettingsNotificationsReleaseAlert'), - description: 'Restez informé de nos mises à jour', - data: { - value: settings.data.notifications.newSongNotif, - onToggle: () => { - updateSettings({ - notifications: { - newSongNotif: !settings.data.notifications.newSongNotif, - }, - }); - }, - }, - }, - ]} - /> - - ); -}; - -export default NotificationsView; diff --git a/front/views/settings/NotificationsSettings.tsx b/front/views/settings/NotificationsSettings.tsx new file mode 100644 index 0000000..1b4df41 --- /dev/null +++ b/front/views/settings/NotificationsSettings.tsx @@ -0,0 +1,95 @@ +import React from 'react'; +import { translate } from '../../i18n/i18n'; +import ElementList from '../../components/GtkUI/ElementList'; +import useUserSettings from '../../hooks/userSettings'; +import { LoadingView } from '../../components/Loading'; +import { Calendar1, MonitorMobbile, Send2, Warning2 } from 'iconsax-react-native'; + +const NotificationsSettings = () => { + const { settings, updateSettings } = useUserSettings(); + + if (!settings.data) { + return ; + } + return ( + { + updateSettings({ + notifications: { + pushNotif: !settings.data.notifications.pushNotif, + }, + }); + }, + }, + }, + { + type: 'toggle', + icon: Send2, + title: translate('SettingsNotificationsTabEmailNotificationsSectionTitle'), + description: translate( + 'SettingsNotificationsTabEmailNotificationsSectionDescription' + ), + data: { + value: settings.data.notifications.emailNotif, + onToggle: () => { + updateSettings({ + notifications: { + emailNotif: !settings.data.notifications.emailNotif, + }, + }); + }, + }, + }, + { + type: 'toggle', + icon: Calendar1, + title: translate('SettingsNotificationsTabTrainingReminderSectionTitle'), + description: translate( + 'SettingsNotificationsTabTrainingReminderSectionDescription' + ), + data: { + value: settings.data.notifications.trainNotif, + onToggle: () => { + updateSettings({ + notifications: { + trainNotif: !settings.data.notifications.trainNotif, + }, + }); + }, + }, + }, + { + type: 'toggle', + icon: Warning2, + title: translate('SettingsNotificationsTabReleaseAlertSectionTitle'), + description: translate( + 'SettingsNotificationsTabReleaseAlertSectionDescription' + ), + data: { + value: settings.data.notifications.newSongNotif, + onToggle: () => { + updateSettings({ + notifications: { + newSongNotif: !settings.data.notifications.newSongNotif, + }, + }); + }, + }, + }, + ]} + /> + ); +}; + +export default NotificationsSettings; diff --git a/front/views/settings/PreferencesView.tsx b/front/views/settings/PreferencesSettings.tsx similarity index 68% rename from front/views/settings/PreferencesView.tsx rename to front/views/settings/PreferencesSettings.tsx index f2b2abc..19593f1 100644 --- a/front/views/settings/PreferencesView.tsx +++ b/front/views/settings/PreferencesSettings.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { useDispatch } from 'react-redux'; -import { Flex } from 'native-base'; +import { Column } from 'native-base'; import { useLanguage } from '../../state/LanguageSlice'; import { AvailableLanguages, DefaultLanguage, translate } from '../../i18n/i18n'; import { useSelector } from '../../state/Store'; @@ -9,30 +9,20 @@ import ElementList from '../../components/GtkUI/ElementList'; import LocalSettings from '../../models/LocalSettings'; import { Brush2, Colorfilter, LanguageSquare, Rank, Sound } from 'iconsax-react-native'; -const PreferencesView = () => { +const PreferencesSettings = () => { const dispatch = useDispatch(); const language = useSelector((state) => state.language.value); const settings = useSelector((state) => state.settings.local); + return ( - + , + icon: Brush2, type: 'dropdown', - title: translate('SettingsPreferencesTheme'), - description: 'Définissez le theme (Dark ou Light) de votre application', + title: translate('SettingsPreferencesTabThemeSectionTitle'), + description: translate('SettingsPreferencesTabThemeSectionDescription'), data: { value: settings.colorScheme, defaultValue: 'system', @@ -51,10 +41,10 @@ const PreferencesView = () => { }, }, { - icon: , + icon: LanguageSquare, type: 'dropdown', - title: translate('SettingsPreferencesLanguage'), - description: 'Définissez la langue de votre application', + title: translate('SettingsPreferencesTabLanguageSectionTitle'), + description: translate('SettingsPreferencesTabLanguageSectionDescription'), data: { value: language, defaultValue: DefaultLanguage, @@ -69,10 +59,12 @@ const PreferencesView = () => { }, }, { - icon: , + icon: Rank, type: 'dropdown', - title: translate('SettingsPreferencesDifficulty'), - description: 'La précision du tempo est de plus en plus élevée', + title: translate('SettingsPreferencesTabDifficultySectionTitle'), + description: translate( + 'SettingsPreferencesTabDifficultySectionDescription' + ), data: { value: settings.difficulty, defaultValue: 'medium', @@ -93,17 +85,14 @@ const PreferencesView = () => { ]} /> , + icon: Colorfilter, type: 'toggle', - title: translate('SettingsPreferencesColorblindMode'), - description: 'Augmente le contraste', + title: translate('SettingsPreferencesTabColorblindModeSectionTitle'), + description: translate( + 'SettingsPreferencesTabColorblindModeSectionDescription' + ), data: { value: settings.colorBlind, onToggle: () => { @@ -114,17 +103,12 @@ const PreferencesView = () => { ]} /> , + icon: Sound, type: 'range', - title: translate('SettingsPreferencesMicVolume'), - description: 'Régler le volume de votre micro selon vos preference', + title: translate('SettingsPreferencesTabMicVolumeSectionTitle'), + description: translate('SettingsPreferencesTabMicVolumeSectionDescription'), data: { value: settings.micVolume, min: 0, @@ -153,8 +137,8 @@ const PreferencesView = () => { },*/ ]} /> - + ); }; -export default PreferencesView; +export default PreferencesSettings; diff --git a/front/views/settings/PrivacySettings.tsx b/front/views/settings/PrivacySettings.tsx new file mode 100644 index 0000000..386c014 --- /dev/null +++ b/front/views/settings/PrivacySettings.tsx @@ -0,0 +1,63 @@ +import React from 'react'; +import { translate } from '../../i18n/i18n'; +import ElementList from '../../components/GtkUI/ElementList'; +import { useDispatch } from 'react-redux'; +import { RootState, useSelector } from '../../state/Store'; +import { updateSettings } from '../../state/SettingsSlice'; +import useUserSettings from '../../hooks/userSettings'; +import { LoadingView } from '../../components/Loading'; +import { Driver, Like1, Shop } from 'iconsax-react-native'; + +const PrivacySettings = () => { + const dispatch = useDispatch(); + const settings = useSelector((state: RootState) => state.settings.local); + const { settings: userSettings, updateSettings: updateUserSettings } = useUserSettings(); + + if (!userSettings.data) { + return ; + } + return ( + + dispatch(updateSettings({ dataCollection: !settings.dataCollection })), + }, + }, + { + type: 'toggle', + icon: Shop, + title: translate('SettingsPrivacyTabCustomAdsSectionTitle'), + description: translate('SettingsPrivacyTabCustomAdsSectionDescription'), + data: { + value: settings.customAds, + onToggle: () => + dispatch(updateSettings({ customAds: !settings.customAds })), + }, + }, + { + type: 'toggle', + icon: Like1, + title: translate('SettingsPrivacyTabRecommendationsSectionTitle'), + description: translate('SettingsPrivacyTabRecommendationsSectionDescription'), + data: { + value: userSettings.data.recommendations, + onToggle: () => + updateUserSettings({ + recommendations: !userSettings.data.recommendations, + }), + }, + }, + ]} + /> + ); +}; + +export default PrivacySettings; diff --git a/front/views/settings/PrivacyView.tsx b/front/views/settings/PrivacyView.tsx deleted file mode 100644 index 5a6c89d..0000000 --- a/front/views/settings/PrivacyView.tsx +++ /dev/null @@ -1,79 +0,0 @@ -import React from 'react'; -import { Flex } from 'native-base'; -import { translate } from '../../i18n/i18n'; -import ElementList from '../../components/GtkUI/ElementList'; -import { useDispatch } from 'react-redux'; -import { RootState, useSelector } from '../../state/Store'; -import { updateSettings } from '../../state/SettingsSlice'; -import useUserSettings from '../../hooks/userSettings'; -import { LoadingView } from '../../components/Loading'; -import { Driver, Like1, Shop } from 'iconsax-react-native'; - -const PrivacyView = () => { - const dispatch = useDispatch(); - const settings = useSelector((state: RootState) => state.settings.local); - const { settings: userSettings, updateSettings: updateUserSettings } = useUserSettings(); - - if (!userSettings.data) { - return ; - } - return ( - - , - title: translate('dataCollection'), - description: - "Acceptez-vous la récupération de vos données pour l'amélioration de Chromacase ?", - data: { - value: settings.dataCollection, - onToggle: () => - dispatch( - updateSettings({ dataCollection: !settings.dataCollection }) - ), - }, - }, - { - type: 'toggle', - icon: , - title: translate('customAds'), - description: 'Afficher les suggestions dans la section des recommandations', - data: { - value: settings.customAds, - onToggle: () => - dispatch(updateSettings({ customAds: !settings.customAds })), - }, - }, - { - type: 'toggle', - icon: , - title: translate('recommendations'), - description: 'Souhaitez-vous recevoir nos conseils et recommandations ?', - data: { - value: userSettings.data.recommendations, - onToggle: () => - updateUserSettings({ - recommendations: !userSettings.data.recommendations, - }), - }, - }, - ]} - /> - - ); -}; - -export default PrivacyView; diff --git a/front/views/settings/ProfileView.tsx b/front/views/settings/ProfileView.tsx deleted file mode 100644 index fdf16d5..0000000 --- a/front/views/settings/ProfileView.tsx +++ /dev/null @@ -1,264 +0,0 @@ -import API from '../../API'; -import { useDispatch } from 'react-redux'; -import { unsetAccessToken } from '../../state/UserSlice'; -import React from 'react'; -import { Column, Text, Button, Box, Flex, Center, Heading, Popover, Toast } from 'native-base'; -import TextButton from '../../components/TextButton'; -import { LoadingView } from '../../components/Loading'; -import ElementList from '../../components/GtkUI/ElementList'; -import { translate } from '../../i18n/i18n'; -import { useQuery } from '../../Queries'; -import UserAvatar from '../../components/UserAvatar'; -import * as ImagePicker from 'expo-image-picker'; - -// Too painful to infer the settings-only, typed navigator. Gave up -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const ProfileSettings = ({ navigation }: { navigation: any }) => { - const userQuery = useQuery(API.getUserInfo); - const dispatch = useDispatch(); - - if (!userQuery.data || userQuery.isLoading) { - return ; - } - const user = userQuery.data; - return ( - - -
- -
- { - navigation.navigate('changeEmail'); - }, - }, - }, - { - type: 'text', - title: translate('verified'), - data: { - text: user.emailVerified ? 'verified' : 'not verified', - onPress: user.emailVerified - ? undefined - : () => API.fetch({ route: '/auth/reverify', method: 'PUT' }), - }, - }, - { - type: 'text', - title: translate('avatar'), - data: { - text: translate('changeIt'), - onPress: () => { - ImagePicker.launchImageLibraryAsync({ - mediaTypes: ImagePicker.MediaTypeOptions.Images, - aspect: [1, 1], - quality: 1, - base64: true, - }).then((result) => { - console.log(result); - const image = result.assets?.at(0); - - if (!result.canceled && image) { - API.updateProfileAvatar(image) - .then(() => { - userQuery.refetch(); - Toast.show({ - description: 'Update successful', - }); - }) - .catch((e) => { - console.error(e); - Toast.show({ description: 'Update failed' }); - }); - } - }); - }, - }, - }, - ]} - /> - - Unlink - // : , - }, - { - type: 'text', - title: translate('nbGamesPlayed'), - data: { - text: user.data.gamesPlayed.toString(), - }, - }, - { - type: 'text', - title: 'XP', - description: translate('XPDescription'), - data: { - text: user.data.xp.toString(), - }, - }, - { - type: 'text', - title: translate('userCreatedAt'), - helperText: - 'La date de création est actuellement arbitraire car le serveur ne retourne pas cette information', - data: { - text: user.data.createdAt.toLocaleDateString(), - }, - }, - { - type: 'text', - title: translate('premiumAccount'), - data: { - text: translate(user.premium ? 'yes' : 'no'), - }, - }, - ]} - /> - - Fonctionnalités premium - - {}, - }, - }, - { - type: 'dropdown', - title: 'Thème de piano', - disabled: true, - data: { - value: 'default', - onSelect: () => {}, - options: [ - { - label: 'Default', - value: 'default', - }, - { - label: 'Catpuccino', - value: 'catpuccino', - }, - ], - }, - }, - ]} - /> -
- - - {!user.isGuest && ( - dispatch(unsetAccessToken())} - translate={{ - translationKey: 'signOutBtn', - }} - /> - )} - {user.isGuest && ( - ( - - )} - > - - - - - {translate('Attention')} - - - {translate('YouAreCurrentlyConnectedWithAGuestAccountWarning')} - - - - - - - - - )} - -
- ); -}; - -export default ProfileSettings; diff --git a/front/views/settings/SettingsPremium.tsx b/front/views/settings/SettingsPremium.tsx new file mode 100644 index 0000000..91323c2 --- /dev/null +++ b/front/views/settings/SettingsPremium.tsx @@ -0,0 +1,69 @@ +import API from '../../API'; +import React from 'react'; +import { LoadingView } from '../../components/Loading'; +import ElementList from '../../components/GtkUI/ElementList'; +import { translate } from '../../i18n/i18n'; +import { useQuery } from '../../Queries'; +import { Designtools, Magicpen, Star1 } from 'iconsax-react-native'; + +// Too painful to infer the settings-only, typed navigator. Gave up +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const PremiumSettings = () => { + const userQuery = useQuery(API.getUserInfo); + + if (!userQuery.data || userQuery.isLoading) { + return ; + } + const user = userQuery.data; + return ( + {}, + }, + }, + { + icon: Designtools, + type: 'dropdown', + title: translate('settingsPremiumTabThemePianoSectionTitle'), + description: translate('settingsPremiumTabThemePianoSectionDescription'), + disabled: true, + data: { + value: 'default', + onSelect: () => {}, + options: [ + { + label: 'Default', + value: 'default', + }, + { + label: 'Catpuccino', + value: 'catpuccino', + }, + ], + }, + }, + ]} + /> + ); +}; + +export default PremiumSettings; diff --git a/front/views/settings/SettingsPremiumView.tsx b/front/views/settings/SettingsPremiumView.tsx deleted file mode 100644 index 915fce4..0000000 --- a/front/views/settings/SettingsPremiumView.tsx +++ /dev/null @@ -1,85 +0,0 @@ -import API from '../../API'; -import React from 'react'; -import { Flex } from 'native-base'; -import { LoadingView } from '../../components/Loading'; -import ElementList from '../../components/GtkUI/ElementList'; -import { translate } from '../../i18n/i18n'; -import { useQuery } from '../../Queries'; -import { Designtools, Magicpen, Star1 } from 'iconsax-react-native'; - -// Too painful to infer the settings-only, typed navigator. Gave up -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const PremiumSettings = () => { - const userQuery = useQuery(API.getUserInfo); - - if (!userQuery.data || userQuery.isLoading) { - return ; - } - const user = userQuery.data; - return ( - - , - type: 'text', - title: translate('premiumAccount'), - description: - 'Personalisation premium et outils vous permetant de passer au niveau supperieur', - data: { - text: translate(user.premium ? 'yes' : 'no'), - }, - }, - { - icon: , - type: 'toggle', - title: 'Piano Magique', - description: - 'Fait apparaître de la lumière sur le piano pendant les parties', - helperText: - 'Vous devez posséder le module physique lumineux Chromacase pour pouvoir utiliser cette fonctionnalité', - disabled: true, - data: { - value: false, - onToggle: () => {}, - }, - }, - { - icon: , - type: 'dropdown', - title: 'Thème de piano', - description: 'Définissez le theme de votre piano', - disabled: true, - data: { - value: 'default', - onSelect: () => {}, - options: [ - { - label: 'Default', - value: 'default', - }, - { - label: 'Catpuccino', - value: 'catpuccino', - }, - ], - }, - }, - ]} - /> - - ); -}; - -export default PremiumSettings; diff --git a/front/views/settings/SettingsProfile.tsx b/front/views/settings/SettingsProfile.tsx new file mode 100644 index 0000000..fe167cd --- /dev/null +++ b/front/views/settings/SettingsProfile.tsx @@ -0,0 +1,171 @@ +import API from '../../API'; +import React from 'react'; +import { Column, Toast } from 'native-base'; +import { LoadingView } from '../../components/Loading'; +import ElementList from '../../components/GtkUI/ElementList'; +import { translate } from '../../i18n/i18n'; +import { useQuery } from '../../Queries'; +import * as ImagePicker from 'expo-image-picker'; +import { Google, PasswordCheck, SmsEdit, UserSquare, Verify } from 'iconsax-react-native'; +import ChangeEmailForm from '../../components/forms/changeEmailForm'; +import ChangePasswordForm from '../../components/forms/changePasswordForm'; +import LogoutButtonCC from '../../components/UI/LogoutButtonCC'; +import { ScrollView } from 'react-native'; + +const handleChangeEmail = async (newEmail: string): Promise => { + await API.updateUserEmail(newEmail); + return translate('emailUpdated'); +}; + +const handleChangePassword = async (oldPassword: string, newPassword: string): Promise => { + await API.updateUserPassword(oldPassword, newPassword); + return translate('passwordUpdated'); +}; + +// Too painful to infer the settings-only, typed navigator. Gave up +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const ProfileSettings = () => { + const userQuery = useQuery(API.getUserInfo); + + if (!userQuery.data || userQuery.isLoading) { + return ; + } + const user = userQuery.data; + + return ( + + + + API.fetch({ route: '/auth/reverify', method: 'PUT' }) + .then(() => + Toast.show({ + description: translate( + 'settingsProfileTabVerifiedSectionVerificationToast' + ), + }) + ) + .catch((e) => { + console.error(e); + Toast.show({ + description: translate( + 'settingsProfileTabVerifiedSectionVerificationToastError' + ), + }); + }), + }, + }, + { + icon: UserSquare, + type: 'text', + title: translate('settingsProfileTabAvatarSectionTitle'), + description: translate('settingsProfileTabAvatarSectionDescription'), + data: { + text: translate('settingsProfileTabAvatarSectionChangeItText'), + onPress: () => { + ImagePicker.launchImageLibraryAsync({ + mediaTypes: ImagePicker.MediaTypeOptions.Images, + aspect: [1, 1], + quality: 1, + base64: true, + }).then((result) => { + console.log(result); + const image = result.assets?.at(0); + + if (!result.canceled && image) { + API.updateProfileAvatar(image) + .then(() => { + userQuery.refetch(); + Toast.show({ + description: translate( + 'settingsProfileTabAvatarSectionUpdateToast' + ), + }); + }) + .catch((e) => { + console.error(e); + Toast.show({ + description: translate( + 'settingsProfileTabAvatarSectionUpdateToastError' + ), + }); + }); + } + }); + }, + }, + }, + { + icon: SmsEdit, + type: 'sectionDropdown', + title: translate('settingsProfileTabChangeEmailSectionTitle'), + description: translate( + 'settingsProfileTabChangeEmailSectionDescription' + ), + data: { + value: true, + section: [ + + handleChangeEmail(newEmail) + } + />, + ], + }, + }, + { + icon: PasswordCheck, + type: 'sectionDropdown', + title: translate('settingsProfileTabChangePasswordSectionTitle'), + description: translate( + 'settingsProfileTabChangePasswordSectionDescription' + ), + data: { + value: true, + section: [ + + handleChangePassword(oldPassword, newPassword) + } + />, + ], + }, + }, + ]} + /> + + + + ); +}; + +export default ProfileSettings; diff --git a/front/views/settings/SettingsProfileView.tsx b/front/views/settings/SettingsProfileView.tsx deleted file mode 100644 index 6fb4ad3..0000000 --- a/front/views/settings/SettingsProfileView.tsx +++ /dev/null @@ -1,154 +0,0 @@ -import API from '../../API'; -import React from 'react'; -import { Flex, Toast } from 'native-base'; -import { LoadingView } from '../../components/Loading'; -import ElementList from '../../components/GtkUI/ElementList'; -import { translate } from '../../i18n/i18n'; -import { useQuery } from '../../Queries'; -import * as ImagePicker from 'expo-image-picker'; -import { Google, PasswordCheck, SmsEdit, UserSquare, Verify } from 'iconsax-react-native'; -import ChangeEmailForm from '../../components/forms/changeEmailForm'; -import ChangePasswordForm from '../../components/forms/changePasswordForm'; - -const handleChangeEmail = async (newEmail: string): Promise => { - await API.updateUserEmail(newEmail); - return translate('emailUpdated'); -}; - -const handleChangePassword = async (oldPassword: string, newPassword: string): Promise => { - await API.updateUserPassword(oldPassword, newPassword); - return translate('passwordUpdated'); -}; - -// Too painful to infer the settings-only, typed navigator. Gave up -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const ProfileSettings = () => { - const userQuery = useQuery(API.getUserInfo); - - if (!userQuery.data || userQuery.isLoading) { - return ; - } - const user = userQuery.data; - return ( - - , - type: 'text', - title: 'Google account', // TODO translate - description: 'Liez votre compte Google à ChromaCase', // TODO translate - data: { - text: user.googleID ? 'Linked' : 'Not linked', - }, - }, - { - icon: , - type: 'text', - description: 'Vérifiez votre adresse e-mail', // TODO translate - title: translate('verified'), - data: { - text: user.emailVerified ? 'verified' : 'not verified', - onPress: user.emailVerified - ? undefined - : () => - API.fetch({ route: '/auth/reverify', method: 'PUT' }) - .then(() => - Toast.show({ - description: 'Verification mail sent', - }) - ) - .catch((e) => { - console.error(e); - Toast.show({ - description: 'Verification mail send error', - }); - }), - }, - }, - { - icon: , - type: 'text', - title: translate('avatar'), - description: 'Changer votre photo de profile', // TODO translate - data: { - text: translate('changeIt'), - onPress: () => { - ImagePicker.launchImageLibraryAsync({ - mediaTypes: ImagePicker.MediaTypeOptions.Images, - aspect: [1, 1], - quality: 1, - base64: true, - }).then((result) => { - console.log(result); - const image = result.assets?.at(0); - - if (!result.canceled && image) { - API.updateProfileAvatar(image) - .then(() => { - userQuery.refetch(); - Toast.show({ - description: 'Update successful', - }); - }) - .catch((e) => { - console.error(e); - Toast.show({ description: 'Update failed' }); - }); - } - }); - }, - }, - }, - { - icon: , - type: 'sectionDropdown', - title: 'Change email', // TODO translate - description: - 'Saisissez votre adresse électronique actuelle et définissez votre nouvelle adresse électroniquetion', // TODO translate - data: { - value: true, - section: [ - - handleChangePassword(oldPassword, newPassword) - } - />, - ], - }, - }, - { - icon: , - type: 'sectionDropdown', - title: 'Change password', // TODO translate - description: - 'Saisissez votre mot de passe actuel et définissez votre nouveau mot de passe', // TODO translate - data: { - value: true, - section: [ - handleChangeEmail(newEmail)} - />, - ], - }, - }, - ]} - /> - - ); -}; - -export default ProfileSettings; diff --git a/front/views/settings/SettingsView.tsx b/front/views/settings/SettingsView.tsx index 1dc6b1b..c11f338 100644 --- a/front/views/settings/SettingsView.tsx +++ b/front/views/settings/SettingsView.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import { Center, Text } from 'native-base'; -import ProfileSettings from './SettingsProfileView'; -import NotificationsView from './NotificationView'; -import PrivacyView from './PrivacyView'; -import PreferencesView from './PreferencesView'; -import { View, useWindowDimensions } from 'react-native'; +import { Center, Text, useBreakpointValue, useTheme } from 'native-base'; +import ProfileSettings from './SettingsProfile'; +import NotificationsSettings from './NotificationsSettings'; +import PrivacySettings from './PrivacySettings'; +import PreferencesSettings from './PreferencesSettings'; +import { useWindowDimensions } from 'react-native'; import { TabView, SceneMap, @@ -23,10 +23,12 @@ import { FolderCross, } from 'iconsax-react-native'; import { Scene } from 'react-native-tab-view/lib/typescript/src/types'; -import { LinearGradient } from 'expo-linear-gradient'; -import PremiumSettings from './SettingsPremiumView'; +import PremiumSettings from './SettingsPremium'; +import { RouteProps } from '../../Navigation'; +import ScaffoldCC from '../../components/UI/ScaffoldCC'; +import { translate } from '../../i18n/i18n'; -export const PianoSettingsView = () => { +export const PianoSettings = () => { return (
Global settings for the virtual piano @@ -37,10 +39,10 @@ export const PianoSettingsView = () => { const renderScene = SceneMap({ profile: ProfileSettings, premium: PremiumSettings, - preferences: PreferencesView, - notifications: NotificationsView, - privacy: PrivacyView, - piano: PianoSettingsView, + preferences: PreferencesSettings, + notifications: NotificationsSettings, + privacy: PrivacySettings, + piano: PianoSettings, }); const getTabData = (key: string) => { @@ -62,30 +64,34 @@ const getTabData = (key: string) => { } }; -const SetttingsNavigator = () => { +// eslint-disable-next-line @typescript-eslint/ban-types +const SettingsTab = (props: RouteProps<{}>) => { const layout = useWindowDimensions(); - const [index, setIndex] = React.useState(0); - const [routes] = React.useState([ - { key: 'profile', title: 'Profile' }, - { key: 'premium', title: 'Premium' }, - { key: 'preferences', title: 'Preferences' }, - { key: 'notifications', title: 'Notifications' }, - { key: 'privacy', title: 'Privacy' }, - { key: 'piano', title: 'Piano' }, - ]); - + const { colors } = useTheme(); + const routes = [ + { key: 'profile', title: 'settingsTabProfile' }, + { key: 'premium', title: 'settingsTabPremium' }, + { key: 'preferences', title: 'settingsTabPreferences' }, + { key: 'notifications', title: 'settingsTabNotifications' }, + { key: 'privacy', title: 'settingsTabPrivacy' }, + { key: 'piano', title: 'settingsTabPiano' }, + ]; + const screenSize = useBreakpointValue({ base: 'small', md: 'big' }); + const isSmallScreen = screenSize === 'small'; const renderTabBar = ( props: SceneRendererProps & { navigationState: NavigationState } ) => ( & { focused: boolean; @@ -93,52 +99,52 @@ const SetttingsNavigator = () => { } ) => { const tabHeader = getTabData(scene.route!.key); - return tabHeader.index == index ? ( - - ) : ( - + return ( + ); }} renderLabel={({ route, color }) => - layout.width > 750 ? ( - - {route.title} + layout.width > 1100 && ( + + {translate( + route.title as + | 'settingsTabProfile' + | 'settingsTabPremium' + | 'settingsTabPreferences' + | 'settingsTabNotifications' + | 'settingsTabPrivacy' + | 'settingsTabPiano' + )} - ) : null + ) } tabStyle={{ flexDirection: 'row' }} /> ); return ( - + - - + ); }; -export default SetttingsNavigator; +export default SettingsTab; diff --git a/front/yarn.lock b/front/yarn.lock index 119dbec..4effe73 100644 --- a/front/yarn.lock +++ b/front/yarn.lock @@ -42,38 +42,38 @@ "@babel/highlight" "^7.22.13" chalk "^2.4.2" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.20", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.20.tgz#8df6e96661209623f1975d66c35ffca66f3306d0" - integrity sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw== +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.3.tgz#3febd552541e62b5e883a25eb3effd7c7379db11" + integrity sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.20.0", "@babel/core@^7.20.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.0.tgz#f8259ae0e52a123eb40f552551e647b506a94d83" - integrity sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.3.tgz#5ec09c8803b91f51cc887dedc2654a35852849c9" + integrity sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/generator" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-module-transforms" "^7.23.0" - "@babel/helpers" "^7.23.0" - "@babel/parser" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.2" + "@babel/parser" "^7.23.3" "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/traverse" "^7.23.3" + "@babel/types" "^7.23.3" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.20.0", "@babel/generator@^7.23.0", "@babel/generator@^7.7.2": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420" - integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g== +"@babel/generator@^7.20.0", "@babel/generator@^7.23.3", "@babel/generator@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.3.tgz#86e6e83d95903fbe7613f448613b8b319f330a8e" + integrity sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg== dependencies: - "@babel/types" "^7.23.0" + "@babel/types" "^7.23.3" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -85,14 +85,14 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956" integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": +"@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52" integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw== @@ -103,7 +103,7 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.11", "@babel/helper-create-class-features-plugin@^7.22.15", "@babel/helper-create-class-features-plugin@^7.22.5": +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4" integrity sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg== @@ -118,7 +118,7 @@ "@babel/helper-split-export-declaration" "^7.22.6" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1" integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w== @@ -127,10 +127,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" - integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== +"@babel/helper-define-polyfill-provider@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba" + integrity sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -165,17 +165,17 @@ dependencies: "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.22.15", "@babel/helper-module-imports@^7.22.5": +"@babel/helper-module-imports@^7.22.15": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== dependencies: "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e" - integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw== +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== dependencies: "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-module-imports" "^7.22.15" @@ -195,7 +195,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": +"@babel/helper-remap-async-to-generator@^7.18.9", "@babel/helper-remap-async-to-generator@^7.22.20": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0" integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw== @@ -204,7 +204,7 @@ "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": +"@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": version "7.22.20" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793" integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw== @@ -258,13 +258,13 @@ "@babel/template" "^7.22.15" "@babel/types" "^7.22.19" -"@babel/helpers@^7.23.0": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.1.tgz#44e981e8ce2b9e99f8f0b703f3326a4636c16d15" - integrity sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA== +"@babel/helpers@^7.23.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767" + integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ== dependencies: "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.0" + "@babel/traverse" "^7.23.2" "@babel/types" "^7.23.0" "@babel/highlight@^7.10.4", "@babel/highlight@^7.22.13": @@ -276,26 +276,34 @@ chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719" - integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw== +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.3.tgz#0ce0be31a4ca4f1884b5786057cadcb6c3be58f9" + integrity sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw== -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962" - integrity sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a" + integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f" - integrity sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d" + integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.15" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz#20c60d4639d18f7da8602548512e9d3a4c8d7098" + integrity sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-async-generator-functions@^7.0.0": version "7.20.7" @@ -316,23 +324,23 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-proposal-decorators@^7.12.9": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.0.tgz#66d9014173b3267a9ced3e69935138bc64ffb5c8" - integrity sha512-kYsT+f5ARWF6AdFmqoEEp+hpqxEB8vGmRWfw2aj78M2vTwS2uHW91EF58iFm1Z9U8Y/RrLu2XKJn46P9ca1b0w== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.23.3.tgz#c609ca70be908d187ee36ff49f1250c56cc98f15" + integrity sha512-u8SwzOcP0DYSsa++nHd/9exlHb0NAlHCb890qtZZbSwPX2bFv8LBEztxwN7Xg/dS8oAFFidhrI9PBcLBJSkGRQ== dependencies: "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/plugin-syntax-decorators" "^7.22.10" + "@babel/plugin-syntax-decorators" "^7.23.3" "@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.22.17" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.22.17.tgz#91b60cd338f501cccdf549af2308768911ec5fbb" - integrity sha512-cop/3quQBVvdz6X5SJC6AhUv3C9DrVTM06LUEXimEdWAhCSyOJIr9NiZDU9leHZ0/aiG0Sh7Zmvaku5TWYNgbA== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.23.3.tgz#6f511a676c540ccc8d17a8553dbba9230b0ddac0" + integrity sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-export-default-from" "^7.22.5" + "@babel/plugin-syntax-export-default-from" "^7.23.3" "@babel/plugin-proposal-export-namespace-from@^7.18.9": version "7.18.9" @@ -419,10 +427,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-decorators@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.22.10.tgz#7d83ea04d893c442b78ebf4c3cbac59a7211deff" - integrity sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ== +"@babel/plugin-syntax-decorators@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.23.3.tgz#a1d351d6c25bfdcf2e16f99b039101bc0ffcb0ca" + integrity sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -433,10 +441,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.22.5.tgz#ac3a24b362a04415a017ab96b9b4483d0e2a6e44" - integrity sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ== +"@babel/plugin-syntax-export-default-from@^7.0.0", "@babel/plugin-syntax-export-default-from@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.23.3.tgz#7e6d4bf595d5724230200fb2b7401d4734b15335" + integrity sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -447,24 +455,24 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.22.5.tgz#163b820b9e7696ce134df3ee716d9c0c98035859" - integrity sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ== +"@babel/plugin-syntax-flow@^7.0.0", "@babel/plugin-syntax-flow@^7.12.1", "@babel/plugin-syntax-flow@^7.18.0", "@babel/plugin-syntax-flow@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz#084564e0f3cc21ea6c70c44cff984a1c0509729a" + integrity sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-assertions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" - integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== +"@babel/plugin-syntax-import-assertions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc" + integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" - integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== +"@babel/plugin-syntax-import-attributes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06" + integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -482,10 +490,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" - integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== +"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.23.3", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -545,10 +553,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.22.5", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" - integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== +"@babel/plugin-syntax-typescript@^7.23.3", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -560,219 +568,219 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" - integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== +"@babel/plugin-transform-arrow-functions@^7.0.0", "@babel/plugin-transform-arrow-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b" + integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz#3b153af4a6b779f340d5b80d3f634f55820aefa3" - integrity sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w== +"@babel/plugin-transform-async-generator-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz#9df2627bad7f434ed13eef3e61b2b65cafd4885b" + integrity sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ== dependencies: - "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.9" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.20.0", "@babel/plugin-transform-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" - integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== +"@babel/plugin-transform-async-to-generator@^7.20.0", "@babel/plugin-transform-async-to-generator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa" + integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw== dependencies: - "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" - integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== +"@babel/plugin-transform-block-scoped-functions@^7.0.0", "@babel/plugin-transform-block-scoped-functions@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77" + integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022" - integrity sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g== +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz#e99a3ff08f58edd28a8ed82481df76925a4ffca7" + integrity sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" - integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== +"@babel/plugin-transform-class-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48" + integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974" - integrity sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g== +"@babel/plugin-transform-class-static-block@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz#56f2371c7e5bf6ff964d84c5dc4d4db5536b5159" + integrity sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b" - integrity sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw== +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz#73380c632c095b03e8503c24fd38f95ad41ffacb" + integrity sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-compilation-targets" "^7.22.15" - "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-replace-supers" "^7.22.20" "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" - integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== +"@babel/plugin-transform-computed-properties@^7.0.0", "@babel/plugin-transform-computed-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474" + integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/template" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c" - integrity sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg== +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311" + integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" - integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== +"@babel/plugin-transform-dotall-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50" + integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" - integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== +"@babel/plugin-transform-duplicate-keys@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce" + integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa" - integrity sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA== +"@babel/plugin-transform-dynamic-import@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz#82625924da9ed5fb11a428efb02e43bc9a3ab13e" + integrity sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" - integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18" + integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c" - integrity sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw== +"@babel/plugin-transform-export-namespace-from@^7.22.11", "@babel/plugin-transform-export-namespace-from@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz#dcd066d995f6ac6077e5a4ccb68322a01e23ac49" + integrity sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.22.5.tgz#0bb17110c7bf5b35a60754b2f00c58302381dee2" - integrity sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA== +"@babel/plugin-transform-flow-strip-types@^7.0.0", "@babel/plugin-transform-flow-strip-types@^7.20.0", "@babel/plugin-transform-flow-strip-types@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz#cfa7ca159cc3306fab526fc67091556b51af26ff" + integrity sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-flow" "^7.22.5" + "@babel/plugin-syntax-flow" "^7.23.3" -"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29" - integrity sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA== +"@babel/plugin-transform-for-of@^7.0.0", "@babel/plugin-transform-for-of@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz#afe115ff0fbce735e02868d41489093c63e15559" + integrity sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" - integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== +"@babel/plugin-transform-function-name@^7.0.0", "@babel/plugin-transform-function-name@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc" + integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw== dependencies: - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-function-name" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835" - integrity sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw== +"@babel/plugin-transform-json-strings@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz#489724ab7d3918a4329afb4172b2fd2cf3c8d245" + integrity sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" - integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== +"@babel/plugin-transform-literals@^7.0.0", "@babel/plugin-transform-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4" + integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c" - integrity sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ== +"@babel/plugin-transform-logical-assignment-operators@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz#3a406d6083feb9487083bca6d2334a3c9b6c4808" + integrity sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" - integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== +"@babel/plugin-transform-member-expression-literals@^7.0.0", "@babel/plugin-transform-member-expression-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc" + integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.22.5": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88" - integrity sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw== +"@babel/plugin-transform-modules-amd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d" + integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.22.15", "@babel/plugin-transform-modules-commonjs@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481" - integrity sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ== +"@babel/plugin-transform-modules-commonjs@^7.0.0", "@babel/plugin-transform-modules-commonjs@^7.13.8", "@babel/plugin-transform-modules-commonjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4" + integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA== dependencies: - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.11": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160" - integrity sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg== +"@babel/plugin-transform-modules-systemjs@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz#fa7e62248931cb15b9404f8052581c302dd9de81" + integrity sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ== dependencies: "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-module-transforms" "^7.23.0" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" - integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== +"@babel/plugin-transform-modules-umd@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9" + integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg== dependencies: - "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.0.0", "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": @@ -783,122 +791,122 @@ "@babel/helper-create-regexp-features-plugin" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" - integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== +"@babel/plugin-transform-new-target@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980" + integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc" - integrity sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz#8a613d514b521b640344ed7c56afeff52f9413f8" + integrity sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd" - integrity sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg== +"@babel/plugin-transform-numeric-separator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz#2f8da42b75ba89e5cfcd677afd0856d52c0c2e68" + integrity sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-transform-object-assign@^7.16.7": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.22.5.tgz#290c1b9555dcea48bb2c29ad94237777600d04f9" - integrity sha512-iDhx9ARkXq4vhZ2CYOSnQXkmxkDgosLi3J8Z17mKz7LyzthtkdVchLD7WZ3aXeCuvJDOW3+1I5TpJmwIbF9MKQ== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.23.3.tgz#64177e8cf943460c7f0e1c410277546804f59625" + integrity sha512-TPJ6O7gVC2rlQH2hvQGRH273G1xdoloCj9Pc07Q7JbIZYDi+Sv5gaE2fu+r5E7qK4zyt6vj0FbZaZTRU5C3OMA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-object-rest-spread@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f" - integrity sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q== +"@babel/plugin-transform-object-rest-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz#509373753b5f7202fe1940e92fd075bd7874955f" + integrity sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog== dependencies: - "@babel/compat-data" "^7.22.9" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.15" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" - integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== +"@babel/plugin-transform-object-super@^7.0.0", "@babel/plugin-transform-object-super@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd" + integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0" - integrity sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ== +"@babel/plugin-transform-optional-catch-binding@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz#362c0b545ee9e5b0fa9d9e6fe77acf9d4c480027" + integrity sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.15": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158" - integrity sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g== +"@babel/plugin-transform-optional-chaining@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz#92fc83f54aa3adc34288933fa27e54c13113f4be" + integrity sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114" - integrity sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ== +"@babel/plugin-transform-parameters@^7.0.0", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af" + integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" - integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== +"@babel/plugin-transform-private-methods@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4" + integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.11": - version "7.22.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1" - integrity sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ== +"@babel/plugin-transform-private-property-in-object@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz#5cd34a2ce6f2d008cc8f91d8dcc29e2c41466da6" + integrity sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.11" + "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" - integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== +"@babel/plugin-transform-property-literals@^7.0.0", "@babel/plugin-transform-property-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875" + integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-display-name@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" - integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz#70529f034dd1e561045ad3c8152a267f0d7b6200" + integrity sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx-self@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz#ca2fdc11bc20d4d46de01137318b13d04e481d8e" - integrity sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" + integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-jsx-source@^7.0.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz#49af1615bfdf6ed9d3e9e43e425e0b2b65d15b6c" - integrity sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.23.3.tgz#03527006bdc8775247a78643c51d4e715fe39a3e" + integrity sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -913,129 +921,130 @@ "@babel/plugin-syntax-jsx" "^7.22.5" "@babel/types" "^7.22.15" -"@babel/plugin-transform-regenerator@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" - integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== +"@babel/plugin-transform-regenerator@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c" + integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" - integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== +"@babel/plugin-transform-reserved-words@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8" + integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.0.0": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz#3a625c4c05a39e932d7d34f5d4895cdd0172fdc9" - integrity sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.3.tgz#0aa7485862b0b5cb0559c1a5ec08b4923743ee3b" + integrity sha512-XcQ3X58CKBdBnnZpPaQjgVMePsXtSZzHoku70q9tUAQp02ggPQNM04BF3RvlW1GSM/McbSOQAzEK4MXbS7/JFg== dependencies: "@babel/helper-module-imports" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" - integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== +"@babel/plugin-transform-shorthand-properties@^7.0.0", "@babel/plugin-transform-shorthand-properties@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210" + integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" - integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== +"@babel/plugin-transform-spread@^7.0.0", "@babel/plugin-transform-spread@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c" + integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" - integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== +"@babel/plugin-transform-sticky-regex@^7.0.0", "@babel/plugin-transform-sticky-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04" + integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" - integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== +"@babel/plugin-transform-template-literals@^7.0.0", "@babel/plugin-transform-template-literals@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07" + integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" - integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== +"@babel/plugin-transform-typeof-symbol@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4" + integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.22.15", "@babel/plugin-transform-typescript@^7.5.0": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz#15adef906451d86349eb4b8764865c960eb54127" - integrity sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA== +"@babel/plugin-transform-typescript@^7.23.3", "@babel/plugin-transform-typescript@^7.5.0": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.3.tgz#ce806e6cb485d468c48c4f717696719678ab0138" + integrity sha512-ogV0yWnq38CFwH20l2Afz0dfKuZBx9o/Y2Rmh5vuSS0YD1hswgEgTfyTzuSrT2q9btmHRSqYoSfwFUVaC1M1Jw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-create-class-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/plugin-syntax-typescript" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.23.3" -"@babel/plugin-transform-unicode-escapes@^7.22.10": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" - integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== +"@babel/plugin-transform-unicode-escapes@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925" + integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-property-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" - integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad" + integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" - integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== +"@babel/plugin-transform-unicode-regex@^7.0.0", "@babel/plugin-transform-unicode-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc" + integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-sets-regex@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" - integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e" + integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.20.0": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.20.tgz#de9e9b57e1127ce0a2f580831717f7fb677ceedb" - integrity sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.3.tgz#d299e0140a7650684b95c62be2db0ef8c975143e" + integrity sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q== dependencies: - "@babel/compat-data" "^7.22.20" + "@babel/compat-data" "^7.23.3" "@babel/helper-compilation-targets" "^7.22.15" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.15" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.22.5" - "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1047,70 +1056,69 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.15" - "@babel/plugin-transform-async-to-generator" "^7.22.5" - "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.15" - "@babel/plugin-transform-class-properties" "^7.22.5" - "@babel/plugin-transform-class-static-block" "^7.22.11" - "@babel/plugin-transform-classes" "^7.22.15" - "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.15" - "@babel/plugin-transform-dotall-regex" "^7.22.5" - "@babel/plugin-transform-duplicate-keys" "^7.22.5" - "@babel/plugin-transform-dynamic-import" "^7.22.11" - "@babel/plugin-transform-exponentiation-operator" "^7.22.5" - "@babel/plugin-transform-export-namespace-from" "^7.22.11" - "@babel/plugin-transform-for-of" "^7.22.15" - "@babel/plugin-transform-function-name" "^7.22.5" - "@babel/plugin-transform-json-strings" "^7.22.11" - "@babel/plugin-transform-literals" "^7.22.5" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.11" - "@babel/plugin-transform-member-expression-literals" "^7.22.5" - "@babel/plugin-transform-modules-amd" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.22.15" - "@babel/plugin-transform-modules-systemjs" "^7.22.11" - "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.3" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.3" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.3" + "@babel/plugin-transform-classes" "^7.23.3" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.3" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.3" + "@babel/plugin-transform-for-of" "^7.23.3" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.3" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.3" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" - "@babel/plugin-transform-new-target" "^7.22.5" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.11" - "@babel/plugin-transform-numeric-separator" "^7.22.11" - "@babel/plugin-transform-object-rest-spread" "^7.22.15" - "@babel/plugin-transform-object-super" "^7.22.5" - "@babel/plugin-transform-optional-catch-binding" "^7.22.11" - "@babel/plugin-transform-optional-chaining" "^7.22.15" - "@babel/plugin-transform-parameters" "^7.22.15" - "@babel/plugin-transform-private-methods" "^7.22.5" - "@babel/plugin-transform-private-property-in-object" "^7.22.11" - "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.10" - "@babel/plugin-transform-reserved-words" "^7.22.5" - "@babel/plugin-transform-shorthand-properties" "^7.22.5" - "@babel/plugin-transform-spread" "^7.22.5" - "@babel/plugin-transform-sticky-regex" "^7.22.5" - "@babel/plugin-transform-template-literals" "^7.22.5" - "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.10" - "@babel/plugin-transform-unicode-property-regex" "^7.22.5" - "@babel/plugin-transform-unicode-regex" "^7.22.5" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.3" + "@babel/plugin-transform-numeric-separator" "^7.23.3" + "@babel/plugin-transform-object-rest-spread" "^7.23.3" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.3" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.3" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" "@babel/preset-modules" "0.1.6-no-external-plugins" - "@babel/types" "^7.22.19" - babel-plugin-polyfill-corejs2 "^0.4.5" - babel-plugin-polyfill-corejs3 "^0.8.3" - babel-plugin-polyfill-regenerator "^0.5.2" + babel-plugin-polyfill-corejs2 "^0.4.6" + babel-plugin-polyfill-corejs3 "^0.8.5" + babel-plugin-polyfill-regenerator "^0.5.3" core-js-compat "^3.31.0" semver "^6.3.1" "@babel/preset-flow@^7.13.13": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.22.15.tgz#30318deb9b3ebd9f5738e96da03a531e0cd3165d" - integrity sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.23.3.tgz#8084e08b9ccec287bd077ab288b286fab96ffab1" + integrity sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-transform-flow-strip-types" "^7.22.5" + "@babel/plugin-transform-flow-strip-types" "^7.23.3" "@babel/preset-modules@0.1.6-no-external-plugins": version "0.1.6-no-external-plugins" @@ -1122,15 +1130,15 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.16.7": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.0.tgz#cc6602d13e7e5b2087c811912b87cf937a9129d9" - integrity sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg== + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz#14534b34ed5b6d435aa05f1ae1c5e7adcc01d913" + integrity sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.15" - "@babel/plugin-syntax-jsx" "^7.22.5" - "@babel/plugin-transform-modules-commonjs" "^7.23.0" - "@babel/plugin-transform-typescript" "^7.22.15" + "@babel/plugin-syntax-jsx" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-typescript" "^7.23.3" "@babel/register@^7.13.16": version "7.22.15" @@ -1148,14 +1156,14 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.23.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.1.tgz#72741dc4d413338a91dcb044a86f3c0bc402646d" - integrity sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g== +"@babel/runtime@^7.0.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.0", "@babel/runtime@^7.22.5", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.23.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" + integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.0.0", "@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.3.3": +"@babel/template@^7.0.0", "@babel/template@^7.22.15", "@babel/template@^7.3.3": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== @@ -1164,26 +1172,26 @@ "@babel/parser" "^7.22.15" "@babel/types" "^7.22.15" -"@babel/traverse@^7.20.0", "@babel/traverse@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.0.tgz#18196ddfbcf4ccea324b7f6d3ada00d8c5a99c53" - integrity sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw== +"@babel/traverse@^7.20.0", "@babel/traverse@^7.23.2", "@babel/traverse@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.3.tgz#26ee5f252e725aa7aca3474aa5b324eaf7908b5b" + integrity sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ== dependencies: "@babel/code-frame" "^7.22.13" - "@babel/generator" "^7.23.0" + "@babel/generator" "^7.23.3" "@babel/helper-environment-visitor" "^7.22.20" "@babel/helper-function-name" "^7.23.0" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.0" - "@babel/types" "^7.23.0" + "@babel/parser" "^7.23.3" + "@babel/types" "^7.23.3" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb" - integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg== +"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.3", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.3.tgz#d5ea892c07f2ec371ac704420f4dcdb07b5f9598" + integrity sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw== dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.20" @@ -1194,18 +1202,6 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@emotion/is-prop-valid@^0.8.2": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" - integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== - dependencies: - "@emotion/memoize" "0.7.4" - -"@emotion/memoize@0.7.4": - version "0.7.4" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" - integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== - "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1214,14 +1210,14 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.5.1", "@eslint-community/regexpp@^4.6.1": - version "4.9.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.9.0.tgz#7ccb5f58703fa61ffdcbf39e2c604a109e781162" - integrity sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ== + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.2.tgz#c6936b4b328c64496692f76944e755738be62396" - integrity sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g== +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -1233,10 +1229,10 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.50.0": - version "8.50.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.50.0.tgz#9e93b850f0f3fa35f5fa59adfd03adae8488e484" - integrity sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ== +"@eslint/js@8.53.0": + version "8.53.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.53.0.tgz#bea56f2ed2b5baea164348ff4d5a879f6f81f20d" + integrity sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w== "@expo/bunyan@4.0.0", "@expo/bunyan@^4.0.0": version "4.0.0" @@ -1248,10 +1244,10 @@ mv "~2" safe-json-stringify "~1" -"@expo/cli@0.10.13": - version "0.10.13" - resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.10.13.tgz#6503e6c477a8407986cd645952b0ad6177e08fe7" - integrity sha512-8ciyz+yIDih6zCNMWK0IyEv411W7vej/TaWIFGarogPVbFokXrUKr0aKoQG1RU1SLlY4eUpHakbIzqog+rhJdQ== +"@expo/cli@0.10.15": + version "0.10.15" + resolved "https://registry.yarnpkg.com/@expo/cli/-/cli-0.10.15.tgz#565da50e3d516cdbf0f5dcdd5b19ce87bca20469" + integrity sha512-CIpfIB5oB/s/op6Ke5M7TI4/yOi5raTR9ps9UD+ExazonTDAzEtXANVWmAR7Z4+wUyqycniWxTpICcaxri2a3A== dependencies: "@babel/runtime" "^7.20.0" "@expo/code-signing-certificates" "0.0.5" @@ -1604,12 +1600,12 @@ find-up "^5.0.0" js-yaml "^4.1.0" -"@formatjs/ecma402-abstract@1.17.2": - version "1.17.2" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.17.2.tgz#d197c6e26b9fd96ff7ba3b3a0cc2f25f1f2dcac3" - integrity sha512-k2mTh0m+IV1HRdU0xXM617tSQTi53tVR2muvYOsBeYcUgEAyxV1FOC7Qj279th3fBVQ+Dj6muvNJZcHSPNdbKg== +"@formatjs/ecma402-abstract@1.18.0": + version "1.18.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-1.18.0.tgz#e2120e7101020140661b58430a7ff4262705a2f2" + integrity sha512-PEVLoa3zBevWSCZzPIM/lvPCi8P5l4G+NXQMc/CjEiaCWgyHieUoo0nM7Bs0n/NbuQ6JpXEolivQ9pKSBHaDlA== dependencies: - "@formatjs/intl-localematcher" "0.4.2" + "@formatjs/intl-localematcher" "0.5.2" tslib "^2.4.0" "@formatjs/fast-memoize@2.2.0": @@ -1619,27 +1615,27 @@ dependencies: tslib "^2.4.0" -"@formatjs/icu-messageformat-parser@2.6.2": - version "2.6.2" - resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.6.2.tgz#9bbb29099416e4ce2c7df50029c48985d4f901b3" - integrity sha512-nF/Iww7sc5h+1MBCDRm68qpHTCG4xvGzYs/x9HFcDETSGScaJ1Fcadk5U/NXjXeCtzD+DhN4BAwKFVclHfKMdA== +"@formatjs/icu-messageformat-parser@2.7.3": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.3.tgz#c8c95e7c9f8141bdb93bea0e92e4fcace19d3c9f" + integrity sha512-X/jy10V9S/vW+qlplqhMUxR8wErQ0mmIYSq4mrjpjDl9mbuGcCILcI1SUYkL5nlM4PJqpc0KOS0bFkkJNPxYRw== dependencies: - "@formatjs/ecma402-abstract" "1.17.2" - "@formatjs/icu-skeleton-parser" "1.6.2" + "@formatjs/ecma402-abstract" "1.18.0" + "@formatjs/icu-skeleton-parser" "1.7.0" tslib "^2.4.0" -"@formatjs/icu-skeleton-parser@1.6.2": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.6.2.tgz#00303034dc08583973c8aa67b96534c49c0bad8d" - integrity sha512-VtB9Slo4ZL6QgtDFJ8Injvscf0xiDd4bIV93SOJTBjUF4xe2nAWOoSjLEtqIG+hlIs1sNrVKAaFo3nuTI4r5ZA== +"@formatjs/icu-skeleton-parser@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.7.0.tgz#796938d6d0ba8fc75bb9edee038d1350bfee32cb" + integrity sha512-Cfdo/fgbZzpN/jlN/ptQVe0lRHora+8ezrEeg2RfrNjyp+YStwBy7cqDY8k5/z2LzXg6O0AdzAV91XS0zIWv+A== dependencies: - "@formatjs/ecma402-abstract" "1.17.2" + "@formatjs/ecma402-abstract" "1.18.0" tslib "^2.4.0" -"@formatjs/intl-localematcher@0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.4.2.tgz#7e6e596dbaf2f0c5a7c22da5a01d5c55f4c37e9a" - integrity sha512-BGdtJFmaNJy5An/Zan4OId/yR9Ih1OojFjcduX/xOvq798OgWSyDtd6Qd5jqJXwJs1ipe4Fxu9+cshic5Ox2tA== +"@formatjs/intl-localematcher@0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.2.tgz#5fcf029fd218905575e5080fa33facdcb623d532" + integrity sha512-txaaE2fiBMagLrR4jYhxzFO6wEdEG4TPMqrzBAcbr4HFUYzH/YC+lg6OIzKCHm8WgDdyQevxbAAV1OgcXctuGw== dependencies: tslib "^2.4.0" @@ -1665,12 +1661,12 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@humanwhocodes/config-array@^0.11.11": - version "0.11.11" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.11.tgz#88a04c570dbbc7dd943e4712429c3df09bc32844" - integrity sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA== +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" @@ -1679,10 +1675,10 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@internationalized/date@^3.5.0": version "3.5.0" @@ -1699,10 +1695,10 @@ "@swc/helpers" "^0.5.0" intl-messageformat "^10.1.0" -"@internationalized/number@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.2.1.tgz#570e4010544a84a8225e65b34a689a36187caaa8" - integrity sha512-hK30sfBlmB1aIe3/OwAPg9Ey0DjjXvHEiGVhNaOiBJl31G0B6wMaX8BN3ibzdlpyRNE9p7X+3EBONmxtJO9Yfg== +"@internationalized/number@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@internationalized/number/-/number-3.4.0.tgz#1c3ebf6ac40ce649d3d97bb835ff0559957f2e1f" + integrity sha512-8TvotW3qVDHC4uv/BVoN6Qx0Dm8clHY1/vpH+dh+XRiPW/9NVpKn1P8d1A+WLphWrMwyqyWXI7uWehJPviaeIw== dependencies: "@swc/helpers" "^0.5.0" @@ -1713,18 +1709,6 @@ dependencies: "@swc/helpers" "^0.5.0" -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - 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" - "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -1995,9 +1979,9 @@ integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.19" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" - integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -2007,59 +1991,6 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@motionone/animation@^10.12.0": - version "10.16.3" - resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.16.3.tgz#f5b71e27fd8b88b61f983adb0ed6c8e3e89281f9" - integrity sha512-QUGWpLbMFLhyqKlngjZhjtxM8IqiJQjLK0DF+XOF6od9nhSvlaeEpOY/UMCRVcZn/9Tr2rZO22EkuCIjYdI74g== - dependencies: - "@motionone/easing" "^10.16.3" - "@motionone/types" "^10.16.3" - "@motionone/utils" "^10.16.3" - tslib "^2.3.1" - -"@motionone/dom@10.12.0": - version "10.12.0" - resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.12.0.tgz#ae30827fd53219efca4e1150a5ff2165c28351ed" - integrity sha512-UdPTtLMAktHiqV0atOczNYyDd/d8Cf5fFsd1tua03PqTwwCe/6lwhLSQ8a7TbnQ5SN0gm44N1slBfj+ORIhrqw== - dependencies: - "@motionone/animation" "^10.12.0" - "@motionone/generators" "^10.12.0" - "@motionone/types" "^10.12.0" - "@motionone/utils" "^10.12.0" - hey-listen "^1.0.8" - tslib "^2.3.1" - -"@motionone/easing@^10.16.3": - version "10.16.3" - resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.16.3.tgz#a62abe0ba2841861f167f286782e287eab8d7466" - integrity sha512-HWTMZbTmZojzwEuKT/xCdvoMPXjYSyQvuVM6jmM0yoGU6BWzsmYMeB4bn38UFf618fJCNtP9XeC/zxtKWfbr0w== - dependencies: - "@motionone/utils" "^10.16.3" - tslib "^2.3.1" - -"@motionone/generators@^10.12.0": - version "10.16.4" - resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.16.4.tgz#4a38708244bce733bfcebd4a26d19f4bbabd36af" - integrity sha512-geFZ3w0Rm0ZXXpctWsSf3REGywmLLujEjxPYpBR0j+ymYwof0xbV6S5kGqqsDKgyWKVWpUInqQYvQfL6fRbXeg== - dependencies: - "@motionone/types" "^10.16.3" - "@motionone/utils" "^10.16.3" - tslib "^2.3.1" - -"@motionone/types@^10.12.0", "@motionone/types@^10.16.3": - version "10.16.3" - resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.16.3.tgz#9284ea8a52f6b32c51c54b617214f20e43ac6c59" - integrity sha512-W4jkEGFifDq73DlaZs3HUfamV2t1wM35zN/zX7Q79LfZ2sc6C0R1baUHZmqc/K5F3vSw3PavgQ6HyHLd/MXcWg== - -"@motionone/utils@^10.12.0", "@motionone/utils@^10.16.3": - version "10.16.3" - resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.16.3.tgz#ddf07ab6cf3000d89e3bcbdc9a8c3e1fd64f8520" - integrity sha512-WNWDksJIxQkaI9p9Z9z0+K27xdqISGNFy1SsWVGaiedTHq0iaT6iZujby8fT/ZnZxj1EOaxJtSfUPCFNU5CRoA== - dependencies: - "@motionone/types" "^10.16.3" - hey-listen "^1.0.8" - tslib "^2.3.1" - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2089,13 +2020,6 @@ "@gar/promisify" "^1.0.1" semver "^7.3.5" -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== - dependencies: - semver "^7.3.5" - "@npmcli/move-file@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" @@ -2104,106 +2028,111 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - "@react-aria/checkbox@^3.2.1": - version "3.11.0" - resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.11.0.tgz#f4249befb42b0639af53ce4014bdbd53d4aafcd3" - integrity sha512-3C5ON4IvFu69LihMOB6Y2Zr4T0zjkuPfQ6HrHuS9SiFU+IZuv1z38K/bXk7UkmZoiLtWLloNA5XKNCwf+Y+6Xw== + version "3.12.0" + resolved "https://registry.yarnpkg.com/@react-aria/checkbox/-/checkbox-3.12.0.tgz#a965e975975404ecf1ff867284511e4490a69c21" + integrity sha512-CyFZoI+z9hhyB3wb7IBsZxE30vXfYO2vSyET16zlkJ4qiFMqMiVLE4ekq034MHltCdpAczgP5yfKgNnJOmj7vQ== dependencies: - "@react-aria/label" "^3.7.0" - "@react-aria/toggle" "^3.8.0" - "@react-aria/utils" "^3.20.0" - "@react-stately/checkbox" "^3.5.0" - "@react-stately/toggle" "^3.6.2" - "@react-types/checkbox" "^3.5.1" - "@react-types/shared" "^3.20.0" + "@react-aria/form" "^3.0.0" + "@react-aria/label" "^3.7.3" + "@react-aria/toggle" "^3.9.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/checkbox" "^3.6.0" + "@react-stately/form" "^3.0.0" + "@react-stately/toggle" "^3.7.0" + "@react-types/checkbox" "^3.6.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" "@react-aria/combobox@^3.0.0-alpha.1": - version "3.6.4" - resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.6.4.tgz#12b4a1ba9b4c65f344ad24608c19c647c708a212" - integrity sha512-L6KAB9P7ztyKM8B3WISRtVFdz9R66ZA6h+m128JmmTc3DrvSs0lxQMZIKfFuh31IZfAe62p2IwDlR1UbhXffVg== + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-aria/combobox/-/combobox-3.8.0.tgz#1806cd5ea6c11c90802d7c0a0807d93271265c1c" + integrity sha512-lInzzZrH4vFlxmvDpXgQRkkREm7YIx258IRpQqll8Bny2vKMmZoF06zWMbcHP0CjFqYxExQeTjSYx0OTRRxkCQ== dependencies: - "@react-aria/i18n" "^3.8.2" - "@react-aria/interactions" "^3.18.0" - "@react-aria/listbox" "^3.10.2" + "@react-aria/i18n" "^3.9.0" + "@react-aria/listbox" "^3.11.2" "@react-aria/live-announcer" "^3.3.1" - "@react-aria/menu" "^3.10.2" - "@react-aria/overlays" "^3.17.0" - "@react-aria/selection" "^3.16.2" - "@react-aria/textfield" "^3.12.0" - "@react-aria/utils" "^3.20.0" - "@react-stately/collections" "^3.10.1" - "@react-stately/combobox" "^3.7.0" - "@react-stately/layout" "^3.13.1" - "@react-types/button" "^3.8.0" - "@react-types/combobox" "^3.8.0" - "@react-types/shared" "^3.20.0" + "@react-aria/menu" "^3.11.2" + "@react-aria/overlays" "^3.19.0" + "@react-aria/selection" "^3.17.2" + "@react-aria/textfield" "^3.13.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/combobox" "^3.8.0" + "@react-stately/form" "^3.0.0" + "@react-types/button" "^3.9.1" + "@react-types/combobox" "^3.9.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-aria/focus@^3.14.1", "@react-aria/focus@^3.2.3": - version "3.14.1" - resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.14.1.tgz#f91733e158eed0fda4dd495511c8e4a7a7bcd998" - integrity sha512-2oVJgn86Rt7xgbtLzVlrYb7MZHNMpyBVLMMGjWyvjH5Ier2bgZ6czJJmm18Xe4kjlDHN0dnFzBvoRoTCWkmivA== +"@react-aria/focus@^3.15.0", "@react-aria/focus@^3.2.3": + version "3.15.0" + resolved "https://registry.yarnpkg.com/@react-aria/focus/-/focus-3.15.0.tgz#acca3cfe94e0ba0c00276e74c6cca06975f75f87" + integrity sha512-nnxRyfqHuAjRwdQ4BpQyZPtGFKZmRU6cnaIb3pqWFCqEyJQensV7MA3TJ4Jhadq67cy1Ji5SYSlr1duBwjoYvw== dependencies: - "@react-aria/interactions" "^3.18.0" - "@react-aria/utils" "^3.20.0" - "@react-types/shared" "^3.20.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" clsx "^1.1.1" -"@react-aria/i18n@^3.2.0", "@react-aria/i18n@^3.3.0", "@react-aria/i18n@^3.8.2": - version "3.8.2" - resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.8.2.tgz#7d7e267647271b45ce5095652d9fa9d83459d0ef" - integrity sha512-WsdByq3DmqEhr8sOdooVcDoS0CGGv+7cegZmmpw5VfUu0f0+0y7YBj/lRS9RuEqlgvSH+K3sPW/+0CkjM/LRGQ== +"@react-aria/form@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@react-aria/form/-/form-3.0.0.tgz#d4e892687331a9cba1cfc48be5754100ab736dec" + integrity sha512-APeGph9oTO8nro4ZObuy1hk+0hpF/ji9O3odPGhLkzP/HvW2J7NI9pjKJOINfgtYr2yvVUZf/MbTMxPwtAxhaQ== + dependencies: + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/form" "^3.0.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-aria/i18n@^3.2.0", "@react-aria/i18n@^3.3.0", "@react-aria/i18n@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/i18n/-/i18n-3.9.0.tgz#7aa74e02e74e348de3a34b7599e71ff6920b73ee" + integrity sha512-ebGP/sVG0ZtNF4RNFzs/W01tl7waYpBManh1kKWgA4roDPFt/odkgkDBzKGl+ggBb7TQRHsfUFHuqKsrsMy9TA== dependencies: "@internationalized/date" "^3.5.0" "@internationalized/message" "^3.1.1" - "@internationalized/number" "^3.2.1" + "@internationalized/number" "^3.4.0" "@internationalized/string" "^3.1.1" - "@react-aria/ssr" "^3.8.0" - "@react-aria/utils" "^3.20.0" - "@react-types/shared" "^3.20.0" + "@react-aria/ssr" "^3.9.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-aria/interactions@^3.18.0", "@react-aria/interactions@^3.3.2": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.18.0.tgz#20d242e3d8349533fdc74e88fb9ca7d1ecee91ab" - integrity sha512-V96uRZTVe2KcU5HW+r2cuUcLIfo0KuPOchywk9r48xtJC8u//sv5fAo0LMX6AgsQJ7bV09JO8nDqmZP0gkRElQ== +"@react-aria/interactions@^3.20.0", "@react-aria/interactions@^3.3.2": + version "3.20.0" + resolved "https://registry.yarnpkg.com/@react-aria/interactions/-/interactions-3.20.0.tgz#8db350541004f50c0479cc52b82597d8248ac5db" + integrity sha512-JCCEyK2Nb4mEHucrgmqhTHTNAEqhsiM07jJmmY22eikxnCQnsEfdwXyg9cgZLG79D5V7jyqVRqOp2OsG7Qx7kQ== dependencies: - "@react-aria/ssr" "^3.8.0" - "@react-aria/utils" "^3.20.0" - "@react-types/shared" "^3.20.0" + "@react-aria/ssr" "^3.9.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-aria/label@^3.1.1", "@react-aria/label@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@react-aria/label/-/label-3.7.0.tgz#c927d7aed3b3ba581bd7d11a8e17af2fe2063325" - integrity sha512-OEBFKp4zSS9O/IPoVUU/YdThQWI4EXOuUO8z2mog9I3wU1FQHEASGtqkg0fzxhBh8LYnPIl56y02dIBJ7eyxlA== +"@react-aria/label@^3.1.1", "@react-aria/label@^3.7.3": + version "3.7.3" + resolved "https://registry.yarnpkg.com/@react-aria/label/-/label-3.7.3.tgz#37cb12d2a9495534205b6266aa5174c2fd861368" + integrity sha512-v1zuqbpYyYaPjrBWpceGjMpwP4ne6fLoOXdoIZoKLux2jkAcyIF2kIJFiyYoPQYQJWGRNo7q1oSwamxmng4xJw== dependencies: - "@react-aria/utils" "^3.20.0" - "@react-types/label" "^3.8.0" - "@react-types/shared" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-aria/listbox@^3.10.2", "@react-aria/listbox@^3.2.4": - version "3.10.2" - resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.10.2.tgz#58ff21896b49eee6cf294e7768e96a8e8ac05674" - integrity sha512-7w75yGyNUGwxB8dSNuXTe7Yd+ab6VmtpROLIhf3b92BPE51oy77i3/Dy1F8IdZMTUqOFd5Nm8K0Z0ZSjOchDfQ== +"@react-aria/listbox@^3.11.2", "@react-aria/listbox@^3.2.4": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@react-aria/listbox/-/listbox-3.11.2.tgz#5d1d841987c1fbe300fa5d4bf5071f660b2a625b" + integrity sha512-FXdoqYLUTJn16OxodyS518PIcwzFkCfW5bxQepoy88NDMGtqp6u8fvEPpAoZbomvw/pV9MuEaMAw9qLyfkD4DA== dependencies: - "@react-aria/focus" "^3.14.1" - "@react-aria/interactions" "^3.18.0" - "@react-aria/label" "^3.7.0" - "@react-aria/selection" "^3.16.2" - "@react-aria/utils" "^3.20.0" - "@react-stately/collections" "^3.10.1" - "@react-stately/list" "^3.9.2" - "@react-types/listbox" "^3.4.4" - "@react-types/shared" "^3.20.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/list" "^3.10.1" + "@react-types/listbox" "^3.4.6" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" "@react-aria/live-announcer@^3.0.0-alpha.0", "@react-aria/live-announcer@^3.3.1": @@ -2213,92 +2142,90 @@ dependencies: "@swc/helpers" "^0.5.0" -"@react-aria/menu@^3.10.2": - version "3.10.2" - resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.10.2.tgz#e875ce43f7c7417563a888dc770e07daf944b423" - integrity sha512-qqnOj6gU7GQAvdTBM9Y+lclaKEciVwfYylmJRu8RBt72jceSBkdR78et9ZLaNMwVPMYCEUxbOv8vvL7VoRKddg== +"@react-aria/menu@^3.11.2": + version "3.11.2" + resolved "https://registry.yarnpkg.com/@react-aria/menu/-/menu-3.11.2.tgz#bf6dbf751acc09ace12d35bb034a3790f9006720" + integrity sha512-I4R5FOvRtwIQW+0naXav5giZBp935X2tXB2xBg/cSAYDXgfLmFPLHkyPbO77hR6FwazfFfJoKdn0pVcRox3lrQ== dependencies: - "@react-aria/focus" "^3.14.1" - "@react-aria/i18n" "^3.8.2" - "@react-aria/interactions" "^3.18.0" - "@react-aria/overlays" "^3.17.0" - "@react-aria/selection" "^3.16.2" - "@react-aria/utils" "^3.20.0" - "@react-stately/collections" "^3.10.1" - "@react-stately/menu" "^3.5.5" - "@react-stately/tree" "^3.7.2" - "@react-types/button" "^3.8.0" - "@react-types/menu" "^3.9.4" - "@react-types/shared" "^3.20.0" + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/overlays" "^3.19.0" + "@react-aria/selection" "^3.17.2" + "@react-aria/utils" "^3.22.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/menu" "^3.5.7" + "@react-stately/tree" "^3.7.4" + "@react-types/button" "^3.9.1" + "@react-types/menu" "^3.9.6" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-aria/overlays@^3.17.0", "@react-aria/overlays@^3.6.1", "@react-aria/overlays@^3.7.0": - version "3.17.0" - resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.17.0.tgz#93976917cf094d5e5ee5453659d9cdd5fe730d38" - integrity sha512-wfQ00llAIMLDtIid+0MvNqvbLP6Fqi2/hfvAxhDaRqrkiARwuCAclWNCIdCzF599IpZOMcjjBgIILEXdfA0ziw== +"@react-aria/overlays@^3.19.0", "@react-aria/overlays@^3.7.0": + version "3.19.0" + resolved "https://registry.yarnpkg.com/@react-aria/overlays/-/overlays-3.19.0.tgz#0568d808c61e923174e896fc342a1529538da545" + integrity sha512-VN5GkB8+uZ2cfXljBtkqmrsAhBdGoj4un/agH0Qyihi2dazsMeafczSNnqzbpVgB4Zt2UHPJUkKwihgzXRxJJA== dependencies: - "@react-aria/focus" "^3.14.1" - "@react-aria/i18n" "^3.8.2" - "@react-aria/interactions" "^3.18.0" - "@react-aria/ssr" "^3.8.0" - "@react-aria/utils" "^3.20.0" - "@react-aria/visually-hidden" "^3.8.4" - "@react-stately/overlays" "^3.6.2" - "@react-types/button" "^3.8.0" - "@react-types/overlays" "^3.8.2" - "@react-types/shared" "^3.20.0" + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/ssr" "^3.9.0" + "@react-aria/utils" "^3.22.0" + "@react-aria/visually-hidden" "^3.8.7" + "@react-stately/overlays" "^3.6.4" + "@react-types/button" "^3.9.1" + "@react-types/overlays" "^3.8.4" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" "@react-aria/radio@^3.1.2": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.8.0.tgz#20800ef83d072362903382e344ad0ae74a408548" - integrity sha512-KvE7UeSDVgdOVLNt/RzTCroMRbVcnn6QZHp0fde9HjQV14Umebyu/fWAmfvIMe/th1Lelf6NtliGXOAZpfOLrg== + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/radio/-/radio-3.9.0.tgz#529b796ed3c5731c808af0a3da29e5535fa553b2" + integrity sha512-kr3+OQ1YU/3mURZfCsYaQmJ/c15qOm8uScaDRC39qz97bLNASakQqMImIaS+GluPKx1PEW3y2ErAgLplH28zZw== dependencies: - "@react-aria/focus" "^3.14.1" - "@react-aria/i18n" "^3.8.2" - "@react-aria/interactions" "^3.18.0" - "@react-aria/label" "^3.7.0" - "@react-aria/utils" "^3.20.0" - "@react-stately/radio" "^3.9.0" - "@react-types/radio" "^3.5.1" - "@react-types/shared" "^3.20.0" + "@react-aria/focus" "^3.15.0" + "@react-aria/form" "^3.0.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/utils" "^3.22.0" + "@react-stately/radio" "^3.10.0" + "@react-types/radio" "^3.6.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-aria/selection@^3.16.2", "@react-aria/selection@^3.3.1", "@react-aria/selection@^3.3.2": - version "3.16.2" - resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.16.2.tgz#f6dfdbb0e071268111e5dcbd397321802bed00c9" - integrity sha512-C6zS5F1W38pukaMTFDTKbMrEvKkGikrXF94CtyxG1EI6EuZaQg1olaEeMCc3AyIb+4Xq+XCwjZuuSnS03qdVGQ== +"@react-aria/selection@^3.17.2", "@react-aria/selection@^3.3.1", "@react-aria/selection@^3.3.2": + version "3.17.2" + resolved "https://registry.yarnpkg.com/@react-aria/selection/-/selection-3.17.2.tgz#74b798344df1eb90e3fdae9bc880c0488468ae3b" + integrity sha512-AXXY3eOIWnITabMn6c0bpLPXkSX7040LOZU+7pQgtZJwDdZorLuKw4i7WS5i71LcV71ywG4mtqc9mOb/GfhUbg== dependencies: - "@react-aria/focus" "^3.14.1" - "@react-aria/i18n" "^3.8.2" - "@react-aria/interactions" "^3.18.0" - "@react-aria/utils" "^3.20.0" - "@react-stately/collections" "^3.10.1" - "@react-stately/selection" "^3.13.4" - "@react-types/shared" "^3.20.0" + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/selection" "^3.14.1" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" "@react-aria/slider@^3.0.1": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.7.0.tgz#c7fafc7b824e17c558242e2058f79e2bda0fbb10" - integrity sha512-aQ3d89M3scWIBJjpjQ0OxeNGuklxX9gxeAhSvYkhsyFd37DCBNNtHIiLfPzQpsSJOjSJofBsEzrG4y+JHGcrdg== + version "3.7.3" + resolved "https://registry.yarnpkg.com/@react-aria/slider/-/slider-3.7.3.tgz#799b47e8559acf63d9c1195fac88bd4d5ca7cad0" + integrity sha512-AbrTD9UzMn0CwxFjOhJHz2ms2zdJlBL3XnbvqkpsmpXUl0u8WT1QAEaMnS5+792gnSGZs/ARDmse53o+IO8wTA== dependencies: - "@react-aria/focus" "^3.14.1" - "@react-aria/i18n" "^3.8.2" - "@react-aria/interactions" "^3.18.0" - "@react-aria/label" "^3.7.0" - "@react-aria/utils" "^3.20.0" - "@react-stately/radio" "^3.9.0" - "@react-stately/slider" "^3.4.2" - "@react-types/radio" "^3.5.1" - "@react-types/shared" "^3.20.0" - "@react-types/slider" "^3.6.1" + "@react-aria/focus" "^3.15.0" + "@react-aria/i18n" "^3.9.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/label" "^3.7.3" + "@react-aria/utils" "^3.22.0" + "@react-stately/slider" "^3.4.5" + "@react-types/shared" "^3.22.0" + "@react-types/slider" "^3.7.0" "@swc/helpers" "^0.5.0" -"@react-aria/ssr@^3.0.1", "@react-aria/ssr@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.8.0.tgz#e7f467ac42f72504682724304ce221f785d70d49" - integrity sha512-Y54xs483rglN5DxbwfCPHxnkvZ+gZ0LbSYmR72LyWPGft8hN/lrl1VRS1EW2SMjnkEWlj+Km2mwvA3kEHDUA0A== +"@react-aria/ssr@^3.0.1", "@react-aria/ssr@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/ssr/-/ssr-3.9.0.tgz#457310129e1447b09d2f4aa2fdd62ab0e668d88c" + integrity sha512-Bz6BqP6ZorCme9tSWHZVmmY+s7AU8l6Vl2NUYmBzezD//fVHHfFo4lFBn5tBuAaJEm3AuCLaJQ6H2qhxNSb7zg== dependencies: "@swc/helpers" "^0.5.0" @@ -2317,153 +2244,153 @@ "@react-types/shared" "^3.2.1" "@react-types/tabs" "3.0.0-alpha.2" -"@react-aria/textfield@^3.12.0": - version "3.12.0" - resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.12.0.tgz#16b477b9eb57f006609872a2df7cdeefce4ae9b3" - integrity sha512-okvCR7vPrSx/0AW+YxPWo3ucJkgRuX77QWVeYBXhQiBKooHEYSfaceMgMZc/KS5HGZsY8bEKpGOIVkZBitzQsg== +"@react-aria/textfield@^3.13.0": + version "3.13.0" + resolved "https://registry.yarnpkg.com/@react-aria/textfield/-/textfield-3.13.0.tgz#bc8a027f93598a1ebd5013d027549a03d7b8dd04" + integrity sha512-sUlinDE+k/WhbskyqVOkuffuhiQpjgvp+iGRoralStVgb8Tcb+POxgAlw5jS4tNjdivCb3IjVJemUNJM7xsxxA== dependencies: - "@react-aria/focus" "^3.14.1" - "@react-aria/label" "^3.7.0" - "@react-aria/utils" "^3.20.0" - "@react-types/shared" "^3.20.0" - "@react-types/textfield" "^3.8.0" + "@react-aria/focus" "^3.15.0" + "@react-aria/form" "^3.0.0" + "@react-aria/label" "^3.7.3" + "@react-aria/utils" "^3.22.0" + "@react-stately/form" "^3.0.0" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@react-types/textfield" "^3.9.0" "@swc/helpers" "^0.5.0" -"@react-aria/toggle@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.8.0.tgz#15449d06d7a90fbabab12926297648918d95adb6" - integrity sha512-HQgx8rBEwGsVyJKU47GTZcWWn3Kv0DgZfUY/lXkdhMFf14/NWTRpJEuKRfEut+/wVFbcNcv9WDT7fEe7yTvGWg== +"@react-aria/toggle@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-aria/toggle/-/toggle-3.9.0.tgz#c1b253d2fc05f2a673abd9fe4d62bc01a8781a92" + integrity sha512-2YMWYQUEmcoAXtrAE86QXBS9XlmJyV6IFRlMTBNaeLTdH3AmACExgsyU66Tt0sKl6LMDMI376ItMFqAz27BBdQ== dependencies: - "@react-aria/focus" "^3.14.1" - "@react-aria/interactions" "^3.18.0" - "@react-aria/utils" "^3.20.0" - "@react-stately/toggle" "^3.6.2" - "@react-types/checkbox" "^3.5.1" - "@react-types/shared" "^3.20.0" - "@react-types/switch" "^3.4.1" + "@react-aria/focus" "^3.15.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-stately/toggle" "^3.7.0" + "@react-types/checkbox" "^3.6.0" "@swc/helpers" "^0.5.0" -"@react-aria/utils@^3.20.0", "@react-aria/utils@^3.3.0", "@react-aria/utils@^3.4.1", "@react-aria/utils@^3.6.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.20.0.tgz#46a03b36b790b9acc3338390023daa5f4aa987fc" - integrity sha512-TpvP9fw2/F0E+D05+S1og88dwvmVSLVB4lurVAodN1E6rCZyw+M/SHlCez0I7j1q9ZWAnVjRuHpBIRG5heX1Ug== +"@react-aria/utils@^3.22.0", "@react-aria/utils@^3.3.0", "@react-aria/utils@^3.4.1", "@react-aria/utils@^3.6.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@react-aria/utils/-/utils-3.22.0.tgz#962a45ae95fdc21de7f22dda68253b0fb2470d06" + integrity sha512-Qi/m65GFFljXA/ayj1m5g3KZdgbZY3jacSSqD5vNUOEGiKsn4OQcsw8RfC2c0SgtLV1hLzsfvFI1OiryPlGCcw== dependencies: - "@react-aria/ssr" "^3.8.0" - "@react-stately/utils" "^3.7.0" - "@react-types/shared" "^3.20.0" + "@react-aria/ssr" "^3.9.0" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" clsx "^1.1.1" -"@react-aria/visually-hidden@^3.2.1", "@react-aria/visually-hidden@^3.8.4": - version "3.8.4" - resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.4.tgz#7812ec32d5a317019acb2639b5e47d3de2886a4c" - integrity sha512-TRDtrndL/TiXjVac7o1vEmrHltSPugH0B6uqc1KRCSspFa1vg9tsgh9/N+qCXrEHynfNyK9FPjI70pAH+PXcqw== +"@react-aria/visually-hidden@^3.2.1", "@react-aria/visually-hidden@^3.8.7": + version "3.8.7" + resolved "https://registry.yarnpkg.com/@react-aria/visually-hidden/-/visually-hidden-3.8.7.tgz#059699c70cc354ccb3699151b09071b3fc43fa82" + integrity sha512-OuIGMVQIt7GC43h4x35BgkZid8lhoPu7Xz4TQRP8nvOJWb1lH7ehrRRuGdUsK3y90nwpxTdNdg4DILblg+VaLw== dependencies: - "@react-aria/interactions" "^3.18.0" - "@react-aria/utils" "^3.20.0" - "@react-types/shared" "^3.20.0" + "@react-aria/interactions" "^3.20.0" + "@react-aria/utils" "^3.22.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" - clsx "^1.1.1" "@react-native-aria/button@^0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@react-native-aria/button/-/button-0.2.4.tgz#ce0c994449011f4b852a222afd90e027fb839de0" - integrity sha512-wlu6SXI20U+N4fbPX8oh9pkL9hx8W41+cra3fa3s2xfQ6czT4KAkyvSsr1ALUBH4dRkoxxSPOcGJMGnq2K3djw== + version "0.2.5" + resolved "https://registry.yarnpkg.com/@react-native-aria/button/-/button-0.2.5.tgz#e0221a963cb851259f4590c834f2382562cf4d0e" + integrity sha512-YQX1oW1gnlivB6lX6KD6dhKuS67rWM0HNsvmNHjvaPanqM9kvvJoV7rkoYXAIJA2vPmYHqHOvBoJj2R5lI9+9g== dependencies: "@react-aria/utils" "^3.6.0" - "@react-native-aria/interactions" "^0.2.3" + "@react-native-aria/interactions" "^0.2.11" "@react-stately/toggle" "^3.2.1" "@react-types/checkbox" "^3.2.1" "@react-native-aria/checkbox@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@react-native-aria/checkbox/-/checkbox-0.2.3.tgz#b6c99c215677df872f1bb4e596b54573f1c7a5f0" - integrity sha512-YtWtXGg5tvOaV6v1CmbusXoOZvGRAVYygms9qNeUF7/B8/iDNGSKjlxHE5LVOLRtJO/B9ndZnr6RkL326ceyng== + version "0.2.6" + resolved "https://registry.yarnpkg.com/@react-native-aria/checkbox/-/checkbox-0.2.6.tgz#80298eb1983e58d834fb9573e9082561368d60fa" + integrity sha512-is8riNMjLkdcpajcU928FwZMf6ZYmfT5+CEJH6NYmY/BoeYHri+w8UYqPIGi5+9//5nQAkpjopJx9Z7+jkEJlw== dependencies: "@react-aria/checkbox" "^3.2.1" "@react-aria/utils" "^3.6.0" - "@react-native-aria/toggle" "^0.2.3" - "@react-native-aria/utils" "^0.2.6" + "@react-native-aria/toggle" "^0.2.6" + "@react-native-aria/utils" "^0.2.10" "@react-stately/toggle" "^3.2.1" "@react-native-aria/combobox@^0.2.4-alpha.0": - version "0.2.4-alpha.1" - resolved "https://registry.yarnpkg.com/@react-native-aria/combobox/-/combobox-0.2.4-alpha.1.tgz#2ec7c5c2e87aba4dda62e494a4c3538066275e2b" - integrity sha512-MOxKMKVus9MsOL3l+mNRDYHeVr5kj5fYnretLofWh/dHBO2W5H7H70ZfOPDEr9s+vgaBBjHCtbbfOiimKRk6Kg== + version "0.2.5" + resolved "https://registry.yarnpkg.com/@react-native-aria/combobox/-/combobox-0.2.5.tgz#7a3553c0b9b287d673294f70137619b63d21f219" + integrity sha512-8rS2YKQ6Z7rrHg+oERgKydGzP0g2ER0mlBD1W75UlRWsGfL464tPVURK/mPoEj88irJMZO8B2qPVRMDlJk2gQQ== dependencies: "@react-aria/combobox" "^3.0.0-alpha.1" "@react-aria/live-announcer" "^3.0.0-alpha.0" - "@react-aria/overlays" "^3.6.1" + "@react-aria/overlays" "^3.7.0" "@react-aria/utils" "^3.6.0" - "@react-native-aria/utils" "^0.2.6" + "@react-native-aria/utils" "^0.2.10" "@react-types/button" "^3.3.1" "@react-native-aria/focus@^0.2.6": - version "0.2.8" - resolved "https://registry.yarnpkg.com/@react-native-aria/focus/-/focus-0.2.8.tgz#60192ae9b60e6833c964cd9dd296b557189ddf58" - integrity sha512-1dIby+o37J2m4oV59TkjlirOXvn5SWtr8Z2dYkHvPe8oip8pEzH/jIl8uXFyvQJmRYA9n7Ju5ucThJJ/4Py8hw== + version "0.2.9" + resolved "https://registry.yarnpkg.com/@react-native-aria/focus/-/focus-0.2.9.tgz#bdfa84f9711843df771877ac436ee3b4f8878b74" + integrity sha512-zVgOIzKwnsyyurUxlZnzUKB2ekK/cmK64sQJIKKUlkJKVxd2EAFf7Sjz/NVEoMhTODN3qGRASTv9bMk/pBzzVA== dependencies: "@react-aria/focus" "^3.2.3" -"@react-native-aria/interactions@^0.2.2", "@react-native-aria/interactions@^0.2.3", "@react-native-aria/interactions@^0.2.7": - version "0.2.10" - resolved "https://registry.yarnpkg.com/@react-native-aria/interactions/-/interactions-0.2.10.tgz#9e27191f589c8a04e627c3c7a3d465aaab5ee94d" - integrity sha512-J0Scz4ndwaqa13e7XwwKRx0jXhVCUAmT/i1udVYyXW/rANAXnnAxuWJDWuZOO/XiQ5eoN7OqIlYUkJG4NnDUOA== +"@react-native-aria/interactions@^0.2.11", "@react-native-aria/interactions@^0.2.2", "@react-native-aria/interactions@^0.2.7": + version "0.2.11" + resolved "https://registry.yarnpkg.com/@react-native-aria/interactions/-/interactions-0.2.11.tgz#033ed9675d67add72deaf6eeae02b005d0785276" + integrity sha512-qfdkD3DwYQm8UurvGLfdLFXPlU2QFdjYA0WWcDCKZD3R++rkpnFthExdws7kmsF1riKTaYcIN/R1MPTM4KZrsA== dependencies: "@react-aria/interactions" "^3.3.2" "@react-aria/utils" "^3.6.0" - "@react-native-aria/utils" "^0.2.6" + "@react-native-aria/utils" "^0.2.10" "@react-native-aria/listbox@^0.2.4-alpha.3": - version "0.2.4-alpha.3" - resolved "https://registry.yarnpkg.com/@react-native-aria/listbox/-/listbox-0.2.4-alpha.3.tgz#1a8df0de6c932c8143ea73e43713a5d37070203c" - integrity sha512-e/y+Wdoyy/PbpFj4DVYDYMsKI+uUqnZ/0yLByqHQvzs8Ys8o69CQkyEYzHhxvFT5lCLegkLbuQN2cJd8bYNQsA== + version "0.2.4" + resolved "https://registry.yarnpkg.com/@react-native-aria/listbox/-/listbox-0.2.4.tgz#ea2cd26de27ed54762add76d470ccb4a96eb684e" + integrity sha512-4Y4Jb/4iSc+MtjFKcT76XUOTgBbA5mUBBhnRQMCLLVE2i3ezBNC6lLNGFjXJNGfAKFqCJwz3YRXmlVu+BBtzqA== dependencies: "@react-aria/interactions" "^3.3.2" "@react-aria/label" "^3.1.1" "@react-aria/listbox" "^3.2.4" "@react-aria/selection" "^3.3.2" "@react-aria/utils" "^3.6.0" - "@react-native-aria/interactions" "^0.2.2" - "@react-native-aria/utils" "^0.2.6" + "@react-native-aria/interactions" "^0.2.11" + "@react-native-aria/utils" "^0.2.10" "@react-types/listbox" "^3.1.1" "@react-types/shared" "^3.4.0" "@react-native-aria/overlays@^0.3.3": - version "0.3.8" - resolved "https://registry.yarnpkg.com/@react-native-aria/overlays/-/overlays-0.3.8.tgz#c38316c34435b0c1d15093147c1cf9e11d987306" - integrity sha512-nc0nN8HABFzWWim2qK8DT8/bST8OMyK1IFUm0M7T9lfpTsegLb3k+j8SqlVHBdHg1JaVXlXxNWQlHbszBQ+RJg== + version "0.3.10" + resolved "https://registry.yarnpkg.com/@react-native-aria/overlays/-/overlays-0.3.10.tgz#8123935f67acb3ab86b7cd3e947c0ba756f28dd3" + integrity sha512-x4+b+RblNe0hwlPFR6qzcmNixqB5/1b5xcN33IP6/BR6F04zHlsmWpHT5PT1qiYQPXLekqw6HGiWp3MC3ItsOw== dependencies: "@react-aria/interactions" "^3.3.2" "@react-aria/overlays" "^3.7.0" - "@react-native-aria/utils" "^0.2.8" + "@react-native-aria/utils" "^0.2.10" "@react-stately/overlays" "^3.1.1" "@react-types/overlays" "^3.4.0" dom-helpers "^5.0.0" "@react-native-aria/radio@^0.2.4": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@react-native-aria/radio/-/radio-0.2.5.tgz#436d3abdbb48bcaf6e9c5c045ff9c5bf87b71248" - integrity sha512-kTfCjRMZH+Z2C70VxjomPO8eXBcHPa5zcuOUotyhR10WsrKZJlwwnA75t2xDq8zsxKnABJRfThv7rSlAjkFSeg== + version "0.2.7" + resolved "https://registry.yarnpkg.com/@react-native-aria/radio/-/radio-0.2.7.tgz#162d59b75c18d01871973d5d8e28a965fd584346" + integrity sha512-wps3AtqPLL7UniS7ubkrP/qSZiaXC6elMVNA9Wr2ngyLjHJQb31an3MocDyD2tijLlH4zO+ExzOS7iz7wEYrJw== dependencies: "@react-aria/radio" "^3.1.2" "@react-aria/utils" "^3.6.0" - "@react-native-aria/interactions" "^0.2.3" - "@react-native-aria/utils" "^0.2.6" + "@react-native-aria/interactions" "^0.2.11" + "@react-native-aria/utils" "^0.2.10" "@react-stately/radio" "^3.2.1" "@react-types/radio" "^3.1.1" "@react-native-aria/slider@^0.2.5-alpha.1": - version "0.2.7" - resolved "https://registry.yarnpkg.com/@react-native-aria/slider/-/slider-0.2.7.tgz#ab79052388a64afe5818be05bd0b915214ff2007" - integrity sha512-9SacbsDHz8TlLJsC69dRpP15BhDv2sV1LtffVJvwufRoFCdKvEzYyWA6Mu7GxWQR7OoTzl4kYvP0IEArNAgczA== + version "0.2.9" + resolved "https://registry.yarnpkg.com/@react-native-aria/slider/-/slider-0.2.9.tgz#58c6aba74cbd03e4b3155bfee058552f6d4f7fc3" + integrity sha512-pyCiOy3L7SpzFHYsdGR054trfVMKizi/x10s5spzjXhMAEmYCuP5dEIo43DSz+ZieGGEk/cdvURxjVEwsgHznA== dependencies: "@react-aria/focus" "^3.2.3" "@react-aria/interactions" "^3.3.2" "@react-aria/label" "^3.1.1" "@react-aria/slider" "^3.0.1" "@react-aria/utils" "^3.6.0" - "@react-native-aria/utils" "^0.2.8" + "@react-native-aria/utils" "^0.2.10" "@react-stately/slider" "^3.0.1" "@react-native-aria/tabs@^0.2.7": @@ -2478,22 +2405,22 @@ "@react-stately/tabs" "3.0.0-alpha.1" "@react-types/tabs" "3.0.0-alpha.2" -"@react-native-aria/toggle@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@react-native-aria/toggle/-/toggle-0.2.3.tgz#a387f03480aa0d97dc0191acbcae66122f7bcf7f" - integrity sha512-3aOlchMxpR0b2h3Z7V0aYZaQMVJD6uKOWKWJm82VsLrni4iDnDX/mLv30ujuuK3+LclUhVlJd2kRuCl+xnf3XQ== +"@react-native-aria/toggle@^0.2.6": + version "0.2.6" + resolved "https://registry.yarnpkg.com/@react-native-aria/toggle/-/toggle-0.2.6.tgz#916832079a551d57bbc5842a09884700a2925579" + integrity sha512-uqsoh3ISY3yVh6HBH6jklrZ9eZgLqZ2A8s3XhxLGZIZV3SbhSP0LwwjTOqRIMXK12lvHixWneObD0GpR4i7v+g== dependencies: "@react-aria/focus" "^3.2.3" "@react-aria/utils" "^3.6.0" - "@react-native-aria/interactions" "^0.2.3" - "@react-native-aria/utils" "^0.2.6" + "@react-native-aria/interactions" "^0.2.11" + "@react-native-aria/utils" "^0.2.10" "@react-stately/toggle" "^3.2.1" "@react-types/checkbox" "^3.2.1" -"@react-native-aria/utils@^0.2.6", "@react-native-aria/utils@^0.2.7", "@react-native-aria/utils@^0.2.8": - version "0.2.8" - resolved "https://registry.yarnpkg.com/@react-native-aria/utils/-/utils-0.2.8.tgz#da433606506125483080f18dbcd97b526ca46fd5" - integrity sha512-x375tG1itv3irLFRnURLsdK2djuvhFJHizSDUtLCo8skQwfjslED5t4sUkQ49di4G850gaVJz0fCcCx/pHX7CA== +"@react-native-aria/utils@^0.2.10", "@react-native-aria/utils@^0.2.7", "@react-native-aria/utils@^0.2.8": + version "0.2.10" + resolved "https://registry.yarnpkg.com/@react-native-aria/utils/-/utils-0.2.10.tgz#818c8940fb97850c0aff6ac4ae3004ccb1dff432" + integrity sha512-jaXMt9NEuLtOIWeHzOupVROVcNT9aZHhvHDMzoXzmWZ47/FUrAykXtilCpOiKTxYbcwuWKCvpDVjd/syoPyuYQ== dependencies: "@react-aria/ssr" "^3.0.1" "@react-aria/utils" "^3.3.0" @@ -2700,9 +2627,9 @@ integrity sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA== "@react-native/normalize-colors@*": - version "0.73.2" - resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.73.2.tgz#cc8e48fbae2bbfff53e12f209369e8d2e4cf34ec" - integrity sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w== + version "0.74.1" + resolved "https://registry.yarnpkg.com/@react-native/normalize-colors/-/normalize-colors-0.74.1.tgz#6e8ccf99954728dcd3cfe0d56e758ee5050a7bea" + integrity sha512-r+bTRs6pImqE3fx4h7bPzH2sOWSrnSHF/RJ7d00pNUj2P6ws3DdhS7WV+/7YosZkloYQfkiIkK3pIHvcYn665w== "@react-native/normalize-colors@^0.72.0": version "0.72.0" @@ -2717,37 +2644,37 @@ invariant "^2.2.4" nullthrows "^1.1.1" -"@react-navigation/core@^6.4.9": - version "6.4.9" - resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.4.9.tgz#aa09ce534f5393427cb993cf242abdbd848fb2c7" - integrity sha512-G9GH7bP9x0qqupxZnkSftnkn4JoXancElTvFc8FVGfEvxnxP+gBo3wqcknyBi7M5Vad4qecsYjCOa9wqsftv9g== +"@react-navigation/core@^6.4.10": + version "6.4.10" + resolved "https://registry.yarnpkg.com/@react-navigation/core/-/core-6.4.10.tgz#0c52621968b35e3a75e189e823d3b9e3bad77aff" + integrity sha512-oYhqxETRHNHKsipm/BtGL0LI43Hs2VSFoWMbBdHK9OqgQPjTVUitslgLcPpo4zApCcmBWoOLX2qPxhsBda644A== dependencies: "@react-navigation/routers" "^6.1.9" escape-string-regexp "^4.0.0" nanoid "^3.1.23" query-string "^7.1.3" react-is "^16.13.0" - use-latest-callback "^0.1.5" + use-latest-callback "^0.1.7" -"@react-navigation/elements@^1.3.19": - version "1.3.19" - resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.19.tgz#18a4a754836af19c20d987e8ffc4f8b0ee2cbece" - integrity sha512-7hLvSYKPuDS070pza5gd43WDX7QgfuEmuTWNbCJhKdWlLudYmq3qzxGCBwCfO2dEI6+p8tla5wruaWiGKAbTYw== +"@react-navigation/elements@^1.3.21": + version "1.3.21" + resolved "https://registry.yarnpkg.com/@react-navigation/elements/-/elements-1.3.21.tgz#debac6becc6b6692da09ec30e705e476a780dfe1" + integrity sha512-eyS2C6McNR8ihUoYfc166O1D8VYVh9KIl0UQPI8/ZJVsStlfSTgeEEh+WXge6+7SFPnZ4ewzEJdSAHH+jzcEfg== "@react-navigation/native-stack@^6.9.14": - version "6.9.14" - resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-6.9.14.tgz#6c3baf9d308e9e07c4f2feafb722d57c5b156936" - integrity sha512-7RiZkvMFN6f0kmANc63B/0m9ttQ2JpDIPWQwPU93FP698s19KTOyu7uxgl7Oi3bvsqHFO5JfiR7B+4h8lh9dxw== + version "6.9.17" + resolved "https://registry.yarnpkg.com/@react-navigation/native-stack/-/native-stack-6.9.17.tgz#4fc370b14be07296423ae8c00940fb002c6001b5" + integrity sha512-X8p8aS7JptQq7uZZNFEvfEcPf6tlK4PyVwYDdryRbG98B4bh2wFQYMThxvqa+FGEN7USEuHdv2mF0GhFKfX0ew== dependencies: - "@react-navigation/elements" "^1.3.19" + "@react-navigation/elements" "^1.3.21" warn-once "^0.1.0" "@react-navigation/native@^6.1.8": - version "6.1.8" - resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.8.tgz#2a451fc8e2eff667007feb25d75e1d2b87e5460d" - integrity sha512-0alti852nV+8oCVm9H80G6kZvrHoy51+rXBvVCRUs2rNDDozC/xPZs8tyeCJkqdw3cpxZDK8ndXF22uWq28+0Q== + version "6.1.9" + resolved "https://registry.yarnpkg.com/@react-navigation/native/-/native-6.1.9.tgz#8ef87095cd9c2ed094308c726157c7f6fc28796e" + integrity sha512-AMuJDpwXE7UlfyhIXaUCCynXmv69Kb8NzKgKJO7v0k0L+u6xUTbt6xvshmJ79vsvaFyaEH9Jg5FMzek5/S5qNw== dependencies: - "@react-navigation/core" "^6.4.9" + "@react-navigation/core" "^6.4.10" escape-string-regexp "^4.0.0" fast-deep-equal "^3.1.3" nanoid "^3.1.23" @@ -2769,15 +2696,15 @@ "@react-stately/utils" "^3.2.2" "@react-types/checkbox" "^3.2.3" -"@react-stately/checkbox@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.5.0.tgz#a19ad2b7f676d4453ba07af3c6c2d046f1e39c03" - integrity sha512-DSSC5nXd9P07ddyDZ6FBwaMAypURCwCRhC8kli5MNRF8/KCDJxWOpWe6LDRXeDgA6EN7ExE1deb8gydIrYmUOw== +"@react-stately/checkbox@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-stately/checkbox/-/checkbox-3.6.0.tgz#448da0b07710a120959985fb081ad3855232fdc9" + integrity sha512-e1ChMwGovcOEDcdizqXDT6eDZixIMiPQOzNV5wPQ91SlGaIry9b0lQnK18tHg3yv2iiS6Ipj96cGBUKLJqQ+cQ== dependencies: - "@react-stately/toggle" "^3.6.2" - "@react-stately/utils" "^3.7.0" - "@react-types/checkbox" "^3.5.1" - "@react-types/shared" "^3.20.0" + "@react-stately/form" "^3.0.0" + "@react-stately/utils" "^3.9.0" + "@react-types/checkbox" "^3.6.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" "@react-stately/collections@3.3.0": @@ -2788,12 +2715,12 @@ "@babel/runtime" "^7.6.2" "@react-types/shared" "^3.2.1" -"@react-stately/collections@^3.10.1": - version "3.10.1" - resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.10.1.tgz#c936d2f97f5508ead5c22aa0d600cae410bf82ae" - integrity sha512-C9FPqoQUt7NeCmmP8uabQXapcExBOTA3PxlnUw+Nq3+eWH1gOi93XWXL26L8/3OQpkvAbUcyrTXhCybLk4uMAg== +"@react-stately/collections@^3.10.3": + version "3.10.3" + resolved "https://registry.yarnpkg.com/@react-stately/collections/-/collections-3.10.3.tgz#c80bd30df3bf5d2a9c6fdf25f6313c5187d0154d" + integrity sha512-fA28HIApAIz9sNGeOVXZJPgV5Kig6M72KI1t9sUbnRUr9Xq9OMJTR6ElDMXNe0iTeZffRFDOPYyqnX9zkxof6Q== dependencies: - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" "@react-stately/combobox@3.0.0-alpha.1": @@ -2809,80 +2736,57 @@ "@react-types/combobox" "3.0.0-alpha.1" "@react-types/shared" "^3.4.0" -"@react-stately/combobox@^3.7.0": - version "3.7.0" - resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.7.0.tgz#251c6d52853df1f9059fdfe76c152b4d607eac03" - integrity sha512-tkPgv2cDS5wfkPVrA5Jffpi9kxUnsFuvk/T1VZXYt1ItAsxy7IGli+JwHYFgTqadDyF+yRNMj5QYRY0mnbIxrg== +"@react-stately/combobox@^3.8.0": + version "3.8.0" + resolved "https://registry.yarnpkg.com/@react-stately/combobox/-/combobox-3.8.0.tgz#6bd9b23ade552f04e8ebc0eeb80e077efed17d6d" + integrity sha512-F74Avf7+8ruRqEB+3Lh6/C5jXc3ESJbRf9ovUxhmNAzBGeFKesPn5HpEpo87C+3OukGb+/Buvi3Rhib9+HVBKA== dependencies: - "@react-stately/collections" "^3.10.1" - "@react-stately/list" "^3.9.2" - "@react-stately/menu" "^3.5.5" - "@react-stately/select" "^3.5.4" - "@react-stately/utils" "^3.7.0" - "@react-types/combobox" "^3.8.0" - "@react-types/shared" "^3.20.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/form" "^3.0.0" + "@react-stately/list" "^3.10.1" + "@react-stately/menu" "^3.5.7" + "@react-stately/select" "^3.6.0" + "@react-stately/utils" "^3.9.0" + "@react-types/combobox" "^3.9.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-stately/flags@^3.0.0": +"@react-stately/form@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@react-stately/flags/-/flags-3.0.0.tgz#c5a73965f8c90e8bf5981adddb4bdbb0ba2f5690" - integrity sha512-e3i2ItHbIa0eEwmSXAnPdD7K8syW76JjGe8ENxwFJPW/H1Pu9RJfjkCb/Mq0WSPN/TpxBb54+I9TgrGhbCoZ9w== + resolved "https://registry.yarnpkg.com/@react-stately/form/-/form-3.0.0.tgz#584af339a128045c357c1b8ca440c87460a41b0f" + integrity sha512-C8wkfFmtx1escizibhdka5JvTy9/Vp173CS9cakjvWTmnjYYC1nOlzwp7BsYWTgerCFbRY/BU/Cf/bJDxPiUKQ== dependencies: - "@swc/helpers" "^0.4.14" - -"@react-stately/grid@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@react-stately/grid/-/grid-3.8.1.tgz#8dcc44147c42a3fcbcfabbb83d7bccacda51000b" - integrity sha512-7eKPoES4eKD7JU9UXcRGVKZ/auaD5F/srVhkWjygKcJ2ibt48N0dh6JwPqPoxzqApUX0DuUjebL9hCRgagEvdQ== - dependencies: - "@react-stately/collections" "^3.10.1" - "@react-stately/selection" "^3.13.4" - "@react-types/grid" "^3.2.1" - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-stately/layout@^3.13.1": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@react-stately/layout/-/layout-3.13.1.tgz#5e43cca85c9a77bb8db1919897213757f7ef9408" - integrity sha512-gJNK1bpnrWNHz/uhTg7OpVFuSyLdYwqNjXt2He+i66/lZ6TG36smsi9MYtTYdC72Js5rsA9ngWtfhNpQ9bMeCQ== +"@react-stately/list@^3.10.1", "@react-stately/list@^3.2.2": + version "3.10.1" + resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.10.1.tgz#1d926d4aef5764096ec357da8081ef09081fe5cc" + integrity sha512-iVarLMd7FmMT0H20dRWsFOHHX5+c4gK51AXP2BSr1VtDSfbL4dgaGgu7IaAMVc/rO0au1e1tPM2hutiIFvPcnA== dependencies: - "@react-stately/collections" "^3.10.1" - "@react-stately/table" "^3.11.1" - "@react-stately/virtualizer" "^3.6.2" - "@react-types/grid" "^3.2.1" - "@react-types/shared" "^3.20.0" - "@react-types/table" "^3.8.1" + "@react-stately/collections" "^3.10.3" + "@react-stately/selection" "^3.14.1" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-stately/list@^3.2.2", "@react-stately/list@^3.9.2": - version "3.9.2" - resolved "https://registry.yarnpkg.com/@react-stately/list/-/list-3.9.2.tgz#ca4119bae68efd27c242dc7097fdf0b413414abb" - integrity sha512-1PBnQ3UFSeKe2Jk4kYZM/11uzQsNEs098tbEkqR3JJwYzJ4htjdd1I0P9Z2INFWiHw071OJD18Ynbbz90jMldw== +"@react-stately/menu@^3.1.0", "@react-stately/menu@^3.5.7": + version "3.5.7" + resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.5.7.tgz#3232598399b4baebfc577d5f56b4bd5570f400c2" + integrity sha512-bzTmAqzcMNatvyruWlvOdZSmMhz3+mkdxtqaZzYHq+DpR6ka57lIRj8dBnZWQGwV3RypMZfz+X6aIX4kruGVbw== dependencies: - "@react-stately/collections" "^3.10.1" - "@react-stately/selection" "^3.13.4" - "@react-stately/utils" "^3.7.0" - "@react-types/shared" "^3.20.0" + "@react-stately/overlays" "^3.6.4" + "@react-types/menu" "^3.9.6" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-stately/menu@^3.1.0", "@react-stately/menu@^3.5.5": - version "3.5.5" - resolved "https://registry.yarnpkg.com/@react-stately/menu/-/menu-3.5.5.tgz#0c70431726a6f955537f26cc38f11206f2f97820" - integrity sha512-5IW26YURvwCs2a0n6PwlGOZ1K+M5xwfgR/q6mbQPfbZGZG6a14buHTHK8kISHAl2hHFcn0TV6yRYDmw2nxTM0A== +"@react-stately/overlays@^3.1.1", "@react-stately/overlays@^3.6.4": + version "3.6.4" + resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.6.4.tgz#1d0d974413fa3f13d97eec2cac5b48c49978d1a0" + integrity sha512-tHEaoAGpE9dSnsskqLPVKum59yGteoSqsniTopodM+miQozbpPlSjdiQnzGLroy5Afx5OZYClE616muNHUILXA== dependencies: - "@react-stately/overlays" "^3.6.2" - "@react-stately/utils" "^3.7.0" - "@react-types/menu" "^3.9.4" - "@react-types/shared" "^3.20.0" - "@swc/helpers" "^0.5.0" - -"@react-stately/overlays@^3.1.1", "@react-stately/overlays@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@react-stately/overlays/-/overlays-3.6.2.tgz#478e4a9312f763242f4443b7fd1f90c49afcbaed" - integrity sha512-iIU/xtYEzG91abHFHqe8LL53ZrDDo8kblfdA7TTZwrtxZhQHU3AbT0pLc3BNe3sXmJspxuI1nS1cszcRlSuDww== - dependencies: - "@react-stately/utils" "^3.7.0" - "@react-types/overlays" "^3.8.2" + "@react-stately/utils" "^3.9.0" + "@react-types/overlays" "^3.8.4" "@swc/helpers" "^0.5.0" "@react-stately/radio@3.2.1": @@ -2894,38 +2798,37 @@ "@react-stately/utils" "^3.1.1" "@react-types/radio" "^3.1.1" -"@react-stately/radio@^3.2.1", "@react-stately/radio@^3.9.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.9.0.tgz#b54b58f0eb73aeeeaeddfabaa8072d5f7f92594d" - integrity sha512-Q2vt5VjxLbsvbMWQmDqwm9JUJ3fkmUEzSBUOSYOkUcBchnzUunpaMe3nQjbJLekIWolubsVaE3bTxCKvY8hGZA== +"@react-stately/radio@^3.10.0", "@react-stately/radio@^3.2.1": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@react-stately/radio/-/radio-3.10.0.tgz#01750b861bfdbb048c6e1bbfb6a97a4f42c29c25" + integrity sha512-d8IgZtUq/4vhE7YhyBVg1QdVoFS0caIcvPumXqtp/5vlDgpUsVy9jSeWtbk0H4FyUcmJlQhRcTylKB9THXY1YQ== dependencies: - "@react-stately/utils" "^3.7.0" - "@react-types/radio" "^3.5.1" - "@react-types/shared" "^3.20.0" + "@react-stately/form" "^3.0.0" + "@react-stately/utils" "^3.9.0" + "@react-types/radio" "^3.6.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-stately/select@^3.1.0", "@react-stately/select@^3.5.4": - version "3.5.4" - resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.5.4.tgz#9bd2c82fe6b27e1c459514e4bef82b328081cb7b" - integrity sha512-CO+5ORMwx/nEKAf7285S3QRAWLJlD1TZPKosO5ND87SZt9j6LKTyJjsT5IYcny8W/ejFOKg5VP4evYNkd5ZtEQ== +"@react-stately/select@^3.1.0", "@react-stately/select@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-stately/select/-/select-3.6.0.tgz#e77464f3e0367d652866806c1ab61c132c31c49a" + integrity sha512-GvSE4DXmcvdRNUc+ciPU7gedt7LfRO8FFFIzhB/bCQhUlK6/xihUPrGXayzqxLeTQKttMH323LuYFKfwpJRhsA== dependencies: - "@react-stately/collections" "^3.10.1" - "@react-stately/list" "^3.9.2" - "@react-stately/menu" "^3.5.5" - "@react-stately/selection" "^3.13.4" - "@react-stately/utils" "^3.7.0" - "@react-types/select" "^3.8.3" - "@react-types/shared" "^3.20.0" + "@react-stately/form" "^3.0.0" + "@react-stately/list" "^3.10.1" + "@react-stately/menu" "^3.5.7" + "@react-types/select" "^3.9.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" -"@react-stately/selection@^3.13.4": - version "3.13.4" - resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.13.4.tgz#88d30907d467e2994951ee362a61879cc0182283" - integrity sha512-agxSYVi70zSDSKuAXx4GdD8aG5RWFs1djcrLsQybtkFV2hUMrjipfvPfNYz56ITtz6qj5Dq2eXOZpSEAR6EfOg== +"@react-stately/selection@^3.14.1": + version "3.14.1" + resolved "https://registry.yarnpkg.com/@react-stately/selection/-/selection-3.14.1.tgz#798b4fbfda940778ae1dc1f2d2390cee97cce2c6" + integrity sha512-96/CerrB6yH4Ad9FkzBzyVerSPjcIj1NBTWTFHo1N+oHECvyGsDxZl7Y4LQR++teFK66FhX5KjCJQGae4IZd6A== dependencies: - "@react-stately/collections" "^3.10.1" - "@react-stately/utils" "^3.7.0" - "@react-types/shared" "^3.20.0" + "@react-stately/collections" "^3.10.3" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" "@swc/helpers" "^0.5.0" "@react-stately/slider@3.0.1": @@ -2939,31 +2842,14 @@ "@react-stately/utils" "^3.2.0" "@react-types/slider" "^3.0.1" -"@react-stately/slider@^3.0.1", "@react-stately/slider@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.4.2.tgz#cd22aff0099d5748706f0bf593233a8496aaed8e" - integrity sha512-3Acil4Pu1aQnTGYUcGCeO7gO7C6LpmUCwjnjcRlJbYf1VibLWrMC+EGYKcha+2dsXYAvvsI4HD6Zuf5HmFkomA== +"@react-stately/slider@^3.0.1", "@react-stately/slider@^3.4.5": + version "3.4.5" + resolved "https://registry.yarnpkg.com/@react-stately/slider/-/slider-3.4.5.tgz#46d4a7e0a1644894e91b12003fa1ba8e0787f4ca" + integrity sha512-lJPZC8seYbnZDqAlZm3/QC95I5iluG8ouwkPMmvtWCz1baayV/jJtfxA/74zR7Vcob9Fe7O57g8Edhz/hv9xOQ== dependencies: - "@react-aria/i18n" "^3.8.2" - "@react-aria/utils" "^3.20.0" - "@react-stately/utils" "^3.7.0" - "@react-types/shared" "^3.20.0" - "@react-types/slider" "^3.6.1" - "@swc/helpers" "^0.5.0" - -"@react-stately/table@^3.11.1": - version "3.11.1" - resolved "https://registry.yarnpkg.com/@react-stately/table/-/table-3.11.1.tgz#e8bc36cb081d76dfa66caafdecab1b2d72c7a008" - integrity sha512-iI0IeEmg91bwR/2UX2PTB8k34MrfxlMVD/XlZ+6XWQGjXftdeB8QNKDAClWMZwQmYA7HTq6bLvP2CochJ68k5w== - dependencies: - "@react-stately/collections" "^3.10.1" - "@react-stately/flags" "^3.0.0" - "@react-stately/grid" "^3.8.1" - "@react-stately/selection" "^3.13.4" - "@react-stately/utils" "^3.7.0" - "@react-types/grid" "^3.2.1" - "@react-types/shared" "^3.20.0" - "@react-types/table" "^3.8.1" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@react-types/slider" "^3.7.0" "@swc/helpers" "^0.5.0" "@react-stately/tabs@3.0.0-alpha.0": @@ -2996,56 +2882,46 @@ "@react-types/checkbox" "^3.2.1" "@react-types/shared" "^3.2.1" -"@react-stately/toggle@^3.2.1", "@react-stately/toggle@^3.2.3", "@react-stately/toggle@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.6.2.tgz#6f6e6c3010e45210cd18c147541876857930f570" - integrity sha512-O+0XtIjRX9YgAwNRhSdX2qi49PzY4eGL+F326jJfqc17HU3Qm6+nfqnODuxynpk1gw79sZr7AtROSXACTVueMQ== - dependencies: - "@react-stately/utils" "^3.7.0" - "@react-types/checkbox" "^3.5.1" - "@react-types/shared" "^3.20.0" - "@swc/helpers" "^0.5.0" - -"@react-stately/tree@^3.7.2": - version "3.7.2" - resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.7.2.tgz#a0f13c76cb5d02ef29f4da0665ebaca7c821c372" - integrity sha512-Re18E7Tfu01xjZXEDZlFwibAomD7PHGZ9cFNTkRysA208uhKVrVVfh+8vvar4c9ybTGUWk5tT6zz+hslGBuLVQ== - dependencies: - "@react-stately/collections" "^3.10.1" - "@react-stately/selection" "^3.13.4" - "@react-stately/utils" "^3.7.0" - "@react-types/shared" "^3.20.0" - "@swc/helpers" "^0.5.0" - -"@react-stately/utils@^3.0.0-alpha.1", "@react-stately/utils@^3.1.1", "@react-stately/utils@^3.2.0", "@react-stately/utils@^3.2.2", "@react-stately/utils@^3.7.0": +"@react-stately/toggle@^3.2.1", "@react-stately/toggle@^3.2.3", "@react-stately/toggle@^3.7.0": version "3.7.0" - resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.7.0.tgz#ea99c2c4b5fba7e5079434a1de1ef53fbb21f6a8" - integrity sha512-VbApRiUV2rhozOfk0Qj9xt0qjVbQfLTgAzXLdrfeZSBnyIgo1bFRnjDpnDZKZUUCeGQcJJI03I9niaUtY+kwJQ== + resolved "https://registry.yarnpkg.com/@react-stately/toggle/-/toggle-3.7.0.tgz#abe2f08f37a0f41e6513d4fde3d46f49500bb5cc" + integrity sha512-TRksHkCJk/Xogq4181g3CYgJf+EfsJCqX5UZDSw1Z1Kgpvonjmdf6FAfQfCh9QR2OuXUL6hOLUDVLte5OPI+5g== + dependencies: + "@react-stately/utils" "^3.9.0" + "@react-types/checkbox" "^3.6.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/tree@^3.7.4": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@react-stately/tree/-/tree-3.7.4.tgz#57cc57863837092f13b7a3887e1b5c56330b5cac" + integrity sha512-0yvVODBS8WnSivLFX5ccEjCl2NA/8lbEt1E48wVcY1xcXgISNpw5MSGK5jC6YrtJPIqVolQIkNSbMreXGBktIg== + dependencies: + "@react-stately/collections" "^3.10.3" + "@react-stately/selection" "^3.14.1" + "@react-stately/utils" "^3.9.0" + "@react-types/shared" "^3.22.0" + "@swc/helpers" "^0.5.0" + +"@react-stately/utils@^3.0.0-alpha.1", "@react-stately/utils@^3.1.1", "@react-stately/utils@^3.2.0", "@react-stately/utils@^3.2.2", "@react-stately/utils@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-stately/utils/-/utils-3.9.0.tgz#9cb2c8eea5dd1b58256ecb436b963c01526bae37" + integrity sha512-yPKFY1F88HxuZ15BG2qwAYxtpE4HnIU0Ofi4CuBE0xC6I8mwo4OQjDzi+DZjxQngM9D6AeTTD6F1V8gkozA0Gw== dependencies: "@swc/helpers" "^0.5.0" -"@react-stately/virtualizer@^3.6.2": - version "3.6.2" - resolved "https://registry.yarnpkg.com/@react-stately/virtualizer/-/virtualizer-3.6.2.tgz#e07ba0ab00f6a98ffa6cd00c75b729466f3b7add" - integrity sha512-BM7h7AlJNEB/X6XlMLlUoqye4SCGFmHiOIwEtha3QfJA52O1/0lgzD9yj5cLbdQPwZNmFH4R95b/OHqSIpgEBw== +"@react-types/button@^3.3.1", "@react-types/button@^3.9.1": + version "3.9.1" + resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.9.1.tgz#eb54745133bdaad345d8d589021b67ef2882e1c5" + integrity sha512-bf9iTar3PtqnyV9rA+wyFyrskZKhwmOuOd/ifYIjPs56YNVXWH5Wfqj6Dx3xdFBgtKx8mEVQxVhoX+WkHX+rtw== dependencies: - "@react-aria/utils" "^3.20.0" - "@react-types/shared" "^3.20.0" - "@swc/helpers" "^0.5.0" + "@react-types/shared" "^3.22.0" -"@react-types/button@^3.3.1", "@react-types/button@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-types/button/-/button-3.8.0.tgz#e5ced04d718a9aaae6af175e7d2cb38552354cc9" - integrity sha512-hVVK5iWXhDYQZwxOBfN7nQDeFQ4Pp48uYclQbXWz8D74XnuGtiUziGR008ioLXRHf47dbIPLF1QHahsCOhh05g== +"@react-types/checkbox@^3.2.1", "@react-types/checkbox@^3.2.3", "@react-types/checkbox@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.6.0.tgz#ba702be25555c1520f78be39c8260354638792b6" + integrity sha512-vgbuJzQpVCNT5AZWV0OozXCnihqrXxoZKfJFIw0xro47pT2sn3t5UC4RA9wfjDGMoK4frw1K/4HQLsQIOsPBkw== dependencies: - "@react-types/shared" "^3.20.0" - -"@react-types/checkbox@^3.2.1", "@react-types/checkbox@^3.2.3", "@react-types/checkbox@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@react-types/checkbox/-/checkbox-3.5.1.tgz#ba86d4ec8230781df2aed8bc7d21dfe88f4deb15" - integrity sha512-7iQqBRnpNC/k8ztCC+gNGTKpTWj6yJijXPKJ8UduqPNuJ0mIqWgk7DJDBuIG0cVvnenTNxYuOL6mt3dgdcEj9w== - dependencies: - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" "@react-types/combobox@3.0.0-alpha.1": version "3.0.0-alpha.1" @@ -3054,90 +2930,60 @@ dependencies: "@react-types/shared" "^3.4.0" -"@react-types/combobox@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.8.0.tgz#c8c050220227c6f79651c3c0a5d100227a4fc087" - integrity sha512-P1LDS283OegZGnRJcpJhDAbX0JE8cnW4FzIP04GJWzF9fSf/GrlrLEDt4VTXKXxtdLWy3T+H4gmAYO10ZZVmBQ== +"@react-types/combobox@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-types/combobox/-/combobox-3.9.0.tgz#f671da0357cfe3a06a24a239fcfacc5b3e5125d0" + integrity sha512-VAQWM2jrIWROgcTKxj4k37WWpK/1zRjj1HfGeuenAQyOQwImqDwCHx5YxQR1GiUEFne4v1yXe2khT0T5Kt2vDg== dependencies: - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" -"@react-types/grid@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@react-types/grid/-/grid-3.2.1.tgz#0ddfff7051a12936106be26fb0c080f3a3279330" - integrity sha512-diliZjyTyNeJDR+5rfh9RRNeM8KFOSaFARkbO42j11CteN1Rpo66x2R53xM+0BO63rCUGrJ8RAg2E4BCp7al6w== +"@react-types/listbox@^3.1.1", "@react-types/listbox@^3.4.6": + version "3.4.6" + resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.4.6.tgz#da0887dbb89a868d53b87486111bf0a51042da7b" + integrity sha512-XOQvrTqNh5WIPDvKiWiep8T07RAsMfjAXTjDbnjxVlKACUXkcwpts9kFaLnJ9LJRFt6DwItfP+WMkzvmx63/NQ== dependencies: - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" -"@react-types/label@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-types/label/-/label-3.8.0.tgz#73b1ae3b3cd63ff70f3019215c6809c1c7cbb252" - integrity sha512-hZTSguqyblAF83kLImjxw46DywRMpSihkP1829T8N2I/i8oFSu74OYBJ8woklk26AOUMDJ4NFTdimdqWVMdRcQ== +"@react-types/menu@^3.9.6": + version "3.9.6" + resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.9.6.tgz#1b36842cbdb4590dfff78437316aec4a3f47b1f6" + integrity sha512-w/RbFInOf4nNayQDv5c2L8IMJbcFOkBhsT3xvvpTy+CHvJcQdjggwaV1sRiw7eF/PwB81k2CwigmidUzHJhKDg== dependencies: - "@react-types/shared" "^3.20.0" + "@react-types/overlays" "^3.8.4" + "@react-types/shared" "^3.22.0" -"@react-types/listbox@^3.1.1", "@react-types/listbox@^3.4.4": - version "3.4.4" - resolved "https://registry.yarnpkg.com/@react-types/listbox/-/listbox-3.4.4.tgz#1205acd6334c4fc85088a62edb4a5a8110ec7b82" - integrity sha512-c0FFM73tGZZ5AV9Yu5/Vd/cji5AVcI2QZvs4+mpRcSpzH3zSCVvVLr7GayZFS70tYQVPLHFH2E202wLxoiLK9A== +"@react-types/overlays@^3.4.0", "@react-types/overlays@^3.8.4": + version "3.8.4" + resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.8.4.tgz#a538f6f2fb9826f1da78d3b4f0f6326a709ce37d" + integrity sha512-pfgNlQnbF6RB/R2oSxyqAP3Uzz0xE/k5q4n5gUeCDNLjY5qxFHGE8xniZZ503nZYw6VBa9XMN1efDOKQyeiO0w== dependencies: - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" -"@react-types/menu@^3.9.4": - version "3.9.4" - resolved "https://registry.yarnpkg.com/@react-types/menu/-/menu-3.9.4.tgz#58256482f63efdda4a0d9cfacd98445ee0c4f327" - integrity sha512-8OnPQHMPZw126TuLi21IuHWMbGOqoWZa+0uJCg2gI+Xpe1F0dRK/DNzCIKkGl1EXgZATJbRC3NcxyZlWti+/EQ== +"@react-types/radio@^3.1.1", "@react-types/radio@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.6.0.tgz#519e4aa40dbb2a13852a5a6f36299a84639376a5" + integrity sha512-VOZzegxxZS55gHRVyWu278Q4y/rEQGiAVQCUqi25GmpbMe4MlHrzg16c76RiZMUK9PPoyv+XNUgAaPmxebkn7g== dependencies: - "@react-types/overlays" "^3.8.2" - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" -"@react-types/overlays@^3.4.0", "@react-types/overlays@^3.8.2": - version "3.8.2" - resolved "https://registry.yarnpkg.com/@react-types/overlays/-/overlays-3.8.2.tgz#1411e0a1626f4140de0ce67835f24a6a18f8d5de" - integrity sha512-HpLYzkNvuvC6nKd06vF9XbcLLv3u55+e7YUFNVpgWq8yVxcnduOcJdRJhPaAqHUl6iVii04mu1GKnCFF8jROyQ== +"@react-types/select@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.9.0.tgz#ddc1238194776ef161260547d25038409885ced8" + integrity sha512-0nalGmcoma4jreICLSJae/uKAuMiVyWgqWjGrGiUGGcdDchH4limKVEqNDaBwLvxVT6NB5LLsaipCTCAEEl4Rg== dependencies: - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" -"@react-types/radio@^3.1.1", "@react-types/radio@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@react-types/radio/-/radio-3.5.1.tgz#11cdf4eb54ba54a5720828e7b6d0739d4943a767" - integrity sha512-jPF8zt+XdgW9DaTvB5ZYCh0uk7DVko1VZ/jOlCRs82w3P884Wc7MMpwdl1T5PBdhtLcdr+xjM1YI6/31reIBfQ== +"@react-types/shared@^3.2.1", "@react-types/shared@^3.22.0", "@react-types/shared@^3.4.0": + version "3.22.0" + resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.22.0.tgz#70f85aad46cd225f7fcb29f1c2b5213163605074" + integrity sha512-yVOekZWbtSmmiThGEIARbBpnmUIuePFlLyctjvCbgJgGhz8JnEJOipLQ/a4anaWfzAgzSceQP8j/K+VOOePleA== + +"@react-types/slider@^3.0.1", "@react-types/slider@^3.7.0": + version "3.7.0" + resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.7.0.tgz#d9e4dbe1b2109c7accfcc0e2e330ff10cd3a837c" + integrity sha512-uyQXUVFfqc9SPUW0LZLMan2n232F/OflRafiHXz9viLFa9tVOupVa7GhASRAoHojwkjoJ1LjFlPih7g5dOZ0/Q== dependencies: - "@react-types/shared" "^3.20.0" - -"@react-types/select@^3.8.3": - version "3.8.3" - resolved "https://registry.yarnpkg.com/@react-types/select/-/select-3.8.3.tgz#18888bf42cae6e89e1dc4b5112c08382152bf650" - integrity sha512-x0x/qJq48QqVnBXFqvPaiS/TQOmCIL9ZmzM4AzRtYMU++kxjy3L03cdnzDBmxKN+KkfDn7OU++vKI44ksgTCRA== - dependencies: - "@react-types/shared" "^3.20.0" - -"@react-types/shared@^3.2.1", "@react-types/shared@^3.20.0", "@react-types/shared@^3.4.0": - version "3.20.0" - resolved "https://registry.yarnpkg.com/@react-types/shared/-/shared-3.20.0.tgz#15f0cbe3978831589f083c8e316810669b4fa606" - integrity sha512-lgTO/S/EMIZKU1EKTg8wT0qYP5x/lZTK2Xw6BZZk5c4nn36JYhGCRb/OoR/jBCIeRb2x9yNbwERO6NYVkoQMSw== - -"@react-types/slider@^3.0.1", "@react-types/slider@^3.6.1": - version "3.6.1" - resolved "https://registry.yarnpkg.com/@react-types/slider/-/slider-3.6.1.tgz#337570fc19879df5b88f4f84d4df3eada11ddede" - integrity sha512-K234amXGLfDekJOQimhPpd2OE14Set7+LrzZZx1ut5ayIK3QgeneUqaybQcB7plfO1thNaAoDOy7JPqZ13k1JA== - dependencies: - "@react-types/shared" "^3.20.0" - -"@react-types/switch@^3.4.1": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@react-types/switch/-/switch-3.4.1.tgz#3475ee497cb0bba491c47d0594cf9a62df823c70" - integrity sha512-2XfPsu2Yiap+pthO2rvCNlLjzo9mDejrYY3rsYMw/jLzCHvuR8Xe2/l01svHcq3pVuNIMElqZR4vTq9OvGNBnQ== - dependencies: - "@react-types/checkbox" "^3.5.1" - "@react-types/shared" "^3.20.0" - -"@react-types/table@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@react-types/table/-/table-3.8.1.tgz#915a54a0153386a676e7fba05d795ad3787dd385" - integrity sha512-zUZ0jTnTBz0JWhnbz7U0LnnKqGhPvmQz+xyADrBIrgj8hk1jQdWNTwAFwqUg8uaReSy+9b3jjPPNOnpTu9DmgA== - dependencies: - "@react-types/grid" "^3.2.1" - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" "@react-types/tabs@3.0.0-alpha.2": version "3.0.0-alpha.2" @@ -3146,17 +2992,17 @@ dependencies: "@react-types/shared" "^3.2.1" -"@react-types/textfield@^3.8.0": - version "3.8.0" - resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.8.0.tgz#aa5d87482d613916818e1c1c61059bc69b1b63e1" - integrity sha512-KRIEiIaB7pi0VlyOXNv39qeY0nBVmaXHwReCmEktQxKtXQ5lbEU6pvbc6srMZIplJffutQCZSXAucw/2ewLLVQ== +"@react-types/textfield@^3.9.0": + version "3.9.0" + resolved "https://registry.yarnpkg.com/@react-types/textfield/-/textfield-3.9.0.tgz#ad29f0a70421f9d2cd6cf2795df10a7712954e69" + integrity sha512-D/DiwzsfkwlAg3uv8hoIfwju+zhB/hWDEdTvxQbPkntDr0kmN/QfI17NMSzbOBCInC4ABX87ViXLGxr940ykGA== dependencies: - "@react-types/shared" "^3.20.0" + "@react-types/shared" "^3.22.0" "@reduxjs/toolkit@^1.9.6": - version "1.9.6" - resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.6.tgz#fc968b45fe5b17ff90932c4556960d9c1078365a" - integrity sha512-Gc4ikl90ORF4viIdAkY06JNUnODjKfGxZRwATM30EdHq8hLSVoSrwXne5dd739yenP5bJxAX7tLuOWK5RPGtrw== + version "1.9.7" + resolved "https://registry.yarnpkg.com/@reduxjs/toolkit/-/toolkit-1.9.7.tgz#7fc07c0b0ebec52043f8cb43510cf346405f78a6" + integrity sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ== dependencies: immer "^9.0.21" redux "^4.2.1" @@ -3207,35 +3053,22 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@swc/helpers@^0.4.14": - version "0.4.36" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.36.tgz#fcfff76ed52c214f357e8e9d3f37b568908072d9" - integrity sha512-5lxnyLEYFskErRPenYItLRSge5DjrJngYKdVjRSrWfza9G6KkgHEXi0vUZiyUeMU5JfXH1YnvXZzSp8ul88o2Q== - dependencies: - legacy-swc-helpers "npm:@swc/helpers@=0.4.14" - tslib "^2.4.0" - "@swc/helpers@^0.5.0": - version "0.5.2" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d" - integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw== + version "0.5.3" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.3.tgz#98c6da1e196f5f08f977658b80d6bd941b5f294f" + integrity sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A== dependencies: tslib "^2.4.0" -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/babel__core@^7.1.14": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.2.tgz#215db4f4a35d710256579784a548907237728756" - integrity sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA== + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.4.tgz#26a87347e6c6f753b3668398e34496d6d9ac6ac0" + integrity sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg== dependencies: "@babel/parser" "^7.20.7" "@babel/types" "^7.20.7" @@ -3244,82 +3077,82 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.5" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.5.tgz#281f4764bcbbbc51fdded0f25aa587b4ce14da95" - integrity sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w== + version "7.6.7" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0" + integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.2" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.2.tgz#843e9f1f47c957553b0c374481dc4772921d6a6b" - integrity sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.2.tgz#4ddf99d95cfdd946ff35d2b65c978d9c9bf2645d" - integrity sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw== + version "7.20.4" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b" + integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA== dependencies: "@babel/types" "^7.20.7" "@types/body-parser@*": - version "1.19.3" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.3.tgz#fb558014374f7d9e56c8f34bab2042a3a07d25cd" - integrity sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ== + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" "@types/node" "*" "@types/bonjour@^3.5.9": - version "3.5.11" - resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.11.tgz#fbaa46a1529ea5c5e46cde36e4be6a880db55b84" - integrity sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg== + version "3.5.13" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.13.tgz#adf90ce1a105e81dd1f9c61fdc5afda1bfb92956" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== dependencies: "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": - version "1.5.1" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz#6e5e3602d93bda975cebc3449e1a318340af9e20" - integrity sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw== + version "1.5.3" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.3.tgz#7793aa2160cef7db0ce5fe2b8aab621200f1a470" + integrity sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" "@types/connect@*": - version "3.4.36" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.36.tgz#e511558c15a39cb29bd5357eebb57bd1459cd1ab" - integrity sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== dependencies: "@types/node" "*" "@types/eslint-scope@^3.7.3": - version "3.7.5" - resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.5.tgz#e28b09dbb1d9d35fdfa8a884225f00440dfc5a3e" - integrity sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA== + version "3.7.7" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz#3108bd5f18b0cdb277c867b3dd449c9ed7079ac5" + integrity sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg== dependencies: "@types/eslint" "*" "@types/estree" "*" "@types/eslint@*": - version "8.44.3" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.3.tgz#96614fae4875ea6328f56de38666f582d911d962" - integrity sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g== + version "8.44.7" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.7.tgz#430b3cc96db70c81f405e6a08aebdb13869198f5" + integrity sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*", "@types/estree@^1.0.0": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.2.tgz#ff02bc3dc8317cd668dfec247b750ba1f1d62453" - integrity sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.37" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz#7e4b7b59da9142138a2aaa7621f5abedce8c7320" - integrity sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg== + version "4.17.41" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" + integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== dependencies: "@types/node" "*" "@types/qs" "*" @@ -3327,9 +3160,9 @@ "@types/send" "*" "@types/express@*", "@types/express@^4.17.13": - version "4.17.18" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.18.tgz#efabf5c4495c1880df1bdffee604b143b29c4a95" - integrity sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ== + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" @@ -3345,16 +3178,16 @@ "@types/node" "*" "@types/graceful-fs@^4.1.3": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.7.tgz#30443a2e64fd51113bc3e2ba0914d47109695e2a" - integrity sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/hoist-non-react-statics@^3.3.1": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#dc1e9ded53375d37603c479cc12c693b0878aa2a" - integrity sha512-YIQtIg4PKr7ZyqNPZObpxfHsHEmuB8dXCxd6qVcGuQVDK2bpsF7bYNnBJ4Nn7giuACZg+WewExgrtAJ3XnA4Xw== + version "3.3.5" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" + integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== dependencies: "@types/react" "*" hoist-non-react-statics "^3.3.0" @@ -3365,85 +3198,94 @@ integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== "@types/http-errors@*": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.2.tgz#a86e00bbde8950364f8e7846687259ffcd96e8c2" - integrity sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg== + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/http-proxy@^1.17.8": - version "1.17.12" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.12.tgz#86e849e9eeae0362548803c37a0a1afc616bd96b" - integrity sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw== + version "1.17.14" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.14.tgz#57f8ccaa1c1c3780644f8a94f9c6b5000b5e2eec" + integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#412e0725ef41cde73bfa03e0e833eaff41e0fd63" - integrity sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz#edc8e421991a3b4df875036d381fc0a5a982f549" - integrity sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.13" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.13.tgz#02c24f4363176d2d18fc8b70b9f3c54aba178a85" - integrity sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lodash@^4.14.199": - version "4.14.199" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.199.tgz#c3edb5650149d847a277a8961a7ad360c474e9bf" - integrity sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg== + version "4.14.201" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.201.tgz#76f47cb63124e806824b6c18463daf3e1d480239" + integrity sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ== "@types/mime@*": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.2.tgz#c1ae807f13d308ee7511a5b81c74f327028e66e8" - integrity sha512-Wj+fqpTLtTbG7c0tH47dkahefpLKEbB+xAZuLq7b4/IDHPl/n6VoXcyUQ2bypFlbSwvCr0y+bD4euTTqTJsPxQ== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== "@types/mime@^1": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.3.tgz#bbe64987e0eb05de150c305005055c7ad784a9ce" - integrity sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg== + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== +"@types/node-forge@^1.3.0": + version "1.3.9" + resolved "https://registry.yarnpkg.com/@types/node-forge/-/node-forge-1.3.9.tgz#0fe4a7ba69c0b173f56e6de65d0eae2c1dd4bbfe" + integrity sha512-meK88cx/sTalPSLSoCzkiUB4VPIFHmxtXm5FaaqRDqBX2i/Sy8bJ4odsan0b20RBjPh06dAQ+OTTdnyQyhJZyQ== + dependencies: + "@types/node" "*" + "@types/node@*": - version "20.7.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.1.tgz#06d732ead0bd5ad978ef0ea9cbdeb24dc8717514" - integrity sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg== + version "20.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.1.tgz#9d578c610ce1e984adda087f685ace940954fe19" + integrity sha512-HhmzZh5LSJNS5O8jQKpJ/3ZcrrlG6L70hpGqMIAoM9YVD0YBRNWYsfwcXq8VnSjlNpCpgLzMXdiPo+dxcvSmiA== + dependencies: + undici-types "~5.26.4" "@types/prop-types@*": - version "15.7.7" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.7.tgz#f9361f7b87fd5d8188b2c998db0a1f47e9fb391a" - integrity sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog== + version "15.7.10" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.10.tgz#892afc9332c4d62a5ea7e897fe48ed2085bbb08a" + integrity sha512-mxSnDQxPqsZxmeShFH+uwQ4kO4gcJcGahjjMFeLbKE95IAZiiZyiEepGZjtXJ7hN/yfu0bu9xN2ajcU0JcxX6A== "@types/qs@*", "@types/qs@^6.9.7": - version "6.9.8" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.8.tgz#f2a7de3c107b89b441e071d5472e6b726b4adf45" - integrity sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg== + version "6.9.10" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8" + integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== "@types/range-parser@*": - version "1.2.5" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.5.tgz#38bd1733ae299620771bd414837ade2e57757498" - integrity sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA== + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== "@types/react@*", "@types/react@~18.2.14": - version "18.2.23" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.23.tgz#60ad6cf4895e93bed858db0e03bcc4ff97d0410e" - integrity sha512-qHLW6n1q2+7KyBEYnrZpcsAmU/iiCh9WGCKgXvMxx89+TYdJWRjZohVIo9XTcoLhfX3+/hP0Pbulu3bCZQ9PSA== + version "18.2.37" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.37.tgz#0f03af69e463c0f19a356c2660dbca5d19c44cae" + integrity sha512-RGAYMi2bhRgEXT3f4B92WTohopH6bIXw05FuGlmJEnv/omEn190+QYEIYxIAuIBdKgboYYdVved2p1AxZVQnaw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -3455,104 +3297,99 @@ integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== "@types/scheduler@*": - version "0.16.4" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.4.tgz#fedc3e5b15c26dc18faae96bf1317487cb3658cf" - integrity sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ== + version "0.16.6" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.6.tgz#eb26db6780c513de59bee0b869ef289ad3068711" + integrity sha512-Vlktnchmkylvc9SnwwwozTv04L/e1NykF5vgoQ0XTmI8DD+wxfjQuHuvHS3p0r2jz2x2ghPs2h1FVeDirIteWA== "@types/semver@^7.5.0": - version "7.5.3" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.3.tgz#9a726e116beb26c24f1ccd6850201e1246122e04" - integrity sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw== + version "7.5.5" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.5.tgz#deed5ab7019756c9c90ea86139106b0346223f35" + integrity sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg== "@types/send@*": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.2.tgz#af78a4495e3c2b79bfbdac3955fdd50e03cc98f2" - integrity sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw== + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" "@types/node" "*" "@types/serve-index@^1.9.1": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.2.tgz#cb26e775678a8526b73a5d980a147518740aaecd" - integrity sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig== + version "1.9.4" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.4.tgz#e6ae13d5053cb06ed36392110b4f9a49ac4ec898" + integrity sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug== dependencies: "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.3" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.3.tgz#2cfacfd1fd4520bbc3e292cca432d5e8e2e3ee61" - integrity sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg== + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== dependencies: "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" "@types/sockjs@^0.3.33": - version "0.3.34" - resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.34.tgz#43e10e549b36d2ba2589278f00f81b5d7ccda167" - integrity sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g== + version "0.3.36" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.36.tgz#ce322cf07bcc119d4cbf7f88954f3a3bd0f67535" + integrity sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q== dependencies: "@types/node" "*" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/use-sync-external-store@^0.0.3": version "0.0.3" resolved "https://registry.yarnpkg.com/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz#b6725d5f4af24ace33b36fafd295136e75509f43" integrity sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA== -"@types/vexflow@^1.2.38": - version "1.2.39" - resolved "https://registry.yarnpkg.com/@types/vexflow/-/vexflow-1.2.39.tgz#433355d0637ed3f1ad21618d8a2264ba0523496a" - integrity sha512-jcVXfWGqbZyeIvK7M3AVuFTUtOo9N9QN6q+dV72drDi+jMJqaI8IKvpP96xo2D58lskVGjSWJxWgOu1hgmlXUg== - "@types/ws@^8.5.5": - version "8.5.6" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.6.tgz#e9ad51f0ab79b9110c50916c9fcbddc36d373065" - integrity sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg== + version "8.5.9" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.9.tgz#384c489f99c83225a53f01ebc3eddf3b8e202a8c" + integrity sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg== dependencies: "@types/node" "*" "@types/yargs-parser@*": - version "21.0.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.1.tgz#07773d7160494d56aa882d7531aac7319ea67c3b" - integrity sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^15.0.0": - version "15.0.16" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.16.tgz#258009dc52907e8f03041eb64ffdac297ba4b208" - integrity sha512-2FeD5qezW3FvLpZ0JpfuaEWepgNLl9b2gQYiz/ce0NhoB1W/D+VZu98phITXkADYerfr/jb7JcDcVhITsc9bwg== + version "15.0.18" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.18.tgz#b7dda4339f4dde367ffe99650e18967108cea321" + integrity sha512-DDi2KmvAnNsT/EvU8jp1UR7pOJojBtJ3GLZ/uw1MUq4VbbESppPWoHUY4h0OB4BbEbGJiyEsmUcuZDZtoR+ZwQ== dependencies: "@types/yargs-parser" "*" "@types/yargs@^16.0.0": - version "16.0.6" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.6.tgz#cc0c63684d68d23498cf0b5f32aa4c3fb437c638" - integrity sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A== + version "16.0.8" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.8.tgz#0d57a5a491d85ae75d372a32e657b1779b86c65d" + integrity sha512-1GwLEkmFafeb/HbE6pC7tFlgYSQ4Iqh2qlWCq8xN+Qfaiaxr2PcLfuhfRFRYqI6XJyeFoLYyKnhFbNsst9FMtQ== dependencies: "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.26" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.26.tgz#388e5002a8b284ad7b4599ba89920a6d74d8d79a" - integrity sha512-Y3vDy2X6zw/ZCumcwLpdhM5L7jmyGpmBCTYMHDLqT2IKVMYRRLdv6ZakA+wxhra6Z/3bwhNbNl9bDGXaFU+6rw== + version "17.0.31" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.31.tgz#8fd0089803fd55d8a285895a18b88cb71a99683c" + integrity sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz#d98046e9f7102d49a93d944d413c6055c47fafd7" - integrity sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA== + version "6.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.11.0.tgz#52aae65174ff526576351f9ccd41cea01001463f" + integrity sha512-uXnpZDc4VRjY4iuypDBKzW1rz9T5YBBK0snMn8MaTSNd2kMlj50LnLBABELjJiOL5YHk7ZD8hbSpI9ubzqYI0w== dependencies: "@eslint-community/regexpp" "^4.5.1" - "@typescript-eslint/scope-manager" "6.7.3" - "@typescript-eslint/type-utils" "6.7.3" - "@typescript-eslint/utils" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/scope-manager" "6.11.0" + "@typescript-eslint/type-utils" "6.11.0" + "@typescript-eslint/utils" "6.11.0" + "@typescript-eslint/visitor-keys" "6.11.0" debug "^4.3.4" graphemer "^1.4.0" ignore "^5.2.4" @@ -3561,73 +3398,78 @@ ts-api-utils "^1.0.1" "@typescript-eslint/parser@^6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.7.3.tgz#aaf40092a32877439e5957e18f2d6a91c82cc2fd" - integrity sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ== + version "6.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.11.0.tgz#9640d9595d905f3be4f278bf515130e6129b202e" + integrity sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ== dependencies: - "@typescript-eslint/scope-manager" "6.7.3" - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/typescript-estree" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/scope-manager" "6.11.0" + "@typescript-eslint/types" "6.11.0" + "@typescript-eslint/typescript-estree" "6.11.0" + "@typescript-eslint/visitor-keys" "6.11.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz#07e5709c9bdae3eaf216947433ef97b3b8b7d755" - integrity sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ== +"@typescript-eslint/scope-manager@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.11.0.tgz#621f603537c89f4d105733d949aa4d55eee5cea8" + integrity sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A== dependencies: - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/types" "6.11.0" + "@typescript-eslint/visitor-keys" "6.11.0" -"@typescript-eslint/type-utils@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz#c2c165c135dda68a5e70074ade183f5ad68f3400" - integrity sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw== +"@typescript-eslint/type-utils@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.11.0.tgz#d0b8b1ab6c26b974dbf91de1ebc5b11fea24e0d1" + integrity sha512-nA4IOXwZtqBjIoYrJcYxLRO+F9ri+leVGoJcMW1uqr4r1Hq7vW5cyWrA43lFbpRvQ9XgNrnfLpIkO3i1emDBIA== dependencies: - "@typescript-eslint/typescript-estree" "6.7.3" - "@typescript-eslint/utils" "6.7.3" + "@typescript-eslint/typescript-estree" "6.11.0" + "@typescript-eslint/utils" "6.11.0" debug "^4.3.4" ts-api-utils "^1.0.1" -"@typescript-eslint/types@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.7.3.tgz#0402b5628a63f24f2dc9d4a678e9a92cc50ea3e9" - integrity sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw== +"@typescript-eslint/types@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.11.0.tgz#8ad3aa000cbf4bdc4dcceed96e9b577f15e0bf53" + integrity sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA== -"@typescript-eslint/typescript-estree@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz#ec5bb7ab4d3566818abaf0e4a8fa1958561b7279" - integrity sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g== +"@typescript-eslint/typescript-estree@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.11.0.tgz#7b52c12a623bf7f8ec7f8a79901b9f98eb5c7990" + integrity sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ== dependencies: - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/visitor-keys" "6.7.3" + "@typescript-eslint/types" "6.11.0" + "@typescript-eslint/visitor-keys" "6.11.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.5.4" ts-api-utils "^1.0.1" -"@typescript-eslint/utils@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.7.3.tgz#96c655816c373135b07282d67407cb577f62e143" - integrity sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg== +"@typescript-eslint/utils@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.11.0.tgz#11374f59ef4cea50857b1303477c08aafa2ca604" + integrity sha512-p23ibf68fxoZy605dc0dQAEoUsoiNoP3MD9WQGiHLDuTSOuqoTsa4oAy+h3KDkTcxbbfOtUjb9h3Ta0gT4ug2g== dependencies: "@eslint-community/eslint-utils" "^4.4.0" "@types/json-schema" "^7.0.12" "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.7.3" - "@typescript-eslint/types" "6.7.3" - "@typescript-eslint/typescript-estree" "6.7.3" + "@typescript-eslint/scope-manager" "6.11.0" + "@typescript-eslint/types" "6.11.0" + "@typescript-eslint/typescript-estree" "6.11.0" semver "^7.5.4" -"@typescript-eslint/visitor-keys@6.7.3": - version "6.7.3" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz#83809631ca12909bd2083558d2f93f5747deebb2" - integrity sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg== +"@typescript-eslint/visitor-keys@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.11.0.tgz#d991538788923f92ec40d44389e7075b359f3458" + integrity sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ== dependencies: - "@typescript-eslint/types" "6.7.3" + "@typescript-eslint/types" "6.11.0" eslint-visitor-keys "^3.4.1" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + "@urql/core@2.3.6": version "2.3.6" resolved "https://registry.yarnpkg.com/@urql/core/-/core-2.3.6.tgz#ee0a6f8fde02251e9560c5f17dce5cd90f948552" @@ -3637,9 +3479,9 @@ wonka "^4.0.14" "@urql/core@>=2.3.1": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@urql/core/-/core-4.1.3.tgz#8b61f015425f9c96e8e9368d071d3f663a2bd926" - integrity sha512-Wapa58olpEJtZzSEuZNDxzBxmOmHuivG6Hb/QPc6HjHfCJ6f36gnlWc9a9TsC8Vddle+6PsS6+quMMTuj+bj7A== + version "4.2.0" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-4.2.0.tgz#7715491bc07e4af8b5d5039a19ea562cd109ae2f" + integrity sha512-GRkZ4kECR9UohWAjiSk2UYUetco6/PqSrvyC4AH6g16tyqEShA63M232cfbE1J9XJPaGNjia14Gi+oOqzp144w== dependencies: "@0no-co/graphql.web" "^1.0.1" wonka "^6.3.2" @@ -3798,11 +3640,6 @@ abab@^2.0.5: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== -abbrev@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -3829,24 +3666,17 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: - version "8.10.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" - integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== -agent-base@6, agent-base@^6.0.2: +agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" -agentkeepalive@^4.2.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3930,11 +3760,6 @@ ansi-regex@^5.0.0, ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -3954,11 +3779,6 @@ ansi-styles@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - any-promise@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -3982,19 +3802,6 @@ application-config-path@^0.1.0: resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.1.tgz#8b5ac64ff6afdd9bd70ce69f6f64b6998f5f756e" integrity sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw== -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - arg@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.0.tgz#583c518199419e0037abb74062c37f8519e575f0" @@ -4130,9 +3937,9 @@ async-limiter@~1.0.0: integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynciterator.prototype@^1.0.0: version "1.0.0" @@ -4216,29 +4023,29 @@ babel-plugin-module-resolver@^5.0.0: reselect "^4.1.7" resolve "^1.22.1" -babel-plugin-polyfill-corejs2@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" - integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== +babel-plugin-polyfill-corejs2@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313" + integrity sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz#1fac2b1dcef6274e72b3c72977ed8325cb330591" - integrity sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg== +babel-plugin-polyfill-corejs3@^0.8.5: + version "0.8.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz#25c2d20002da91fe328ff89095c85a391d6856cf" + integrity sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" - core-js-compat "^3.32.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" + core-js-compat "^3.33.1" -babel-plugin-polyfill-regenerator@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" - integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== +babel-plugin-polyfill-regenerator@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5" + integrity sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.2" + "@babel/helper-define-polyfill-provider" "^0.4.3" babel-plugin-react-native-web@~0.18.10: version "0.18.12" @@ -4367,19 +4174,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bit-twiddle@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" - integrity sha512-B9UhK0DKFZhoTFcfvAzhqsjStvGJp9vYWf3+6SNTtdSQnvIgfkHbgHrg/e4+TH71N2GDu8tpmCVoyfrL1d7ntA== - -bl@^4.0.3, bl@^4.1.0: +bl@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -4501,7 +4296,7 @@ broadcast-channel@^3.4.1: rimraf "3.0.2" unload "2.2.0" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.21.9: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.21.4, browserslist@^4.21.9, browserslist@^4.22.1: version "4.22.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619" integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ== @@ -4588,31 +4383,14 @@ cacache@^15.3.0: tar "^6.0.2" unique-filename "^1.1.1" -cacache@^17.0.0: - version "17.1.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.4.tgz#b3ff381580b47e85c6e64f801101508e26604b35" - integrity sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A== +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== dependencies: - "@npmcli/fs" "^3.1.0" - fs-minipass "^3.0.0" - glob "^10.2.2" - lru-cache "^7.7.1" - minipass "^7.0.3" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - p-map "^4.0.0" - ssri "^10.0.0" - tar "^6.1.11" - unique-filename "^3.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" caller-callsite@^2.0.0: version "2.0.0" @@ -4667,9 +4445,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001541: - version "1.0.30001541" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001541.tgz#b1aef0fadd87fb72db4dcb55d220eae17b81cdb1" - integrity sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw== + version "1.0.30001563" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz#aa68a64188903e98f36eb9c56e48fba0c1fe2a32" + integrity sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw== chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" @@ -4713,11 +4491,6 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -4734,9 +4507,9 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0, ci-info@^3.3.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: version "1.2.3" @@ -4857,11 +4630,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - colord@^2.9.1: version "2.9.3" resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" @@ -4935,9 +4703,9 @@ compare-versions@^3.4.0: integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== component-type@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.1.tgz#8a47901700238e4fc32269771230226f24b415a9" - integrity sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/component-type/-/component-type-1.2.2.tgz#4458ecc0c1871efc6288bfaff0cbdab08141d079" + integrity sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA== compressible@~2.0.16: version "2.0.18" @@ -4979,11 +4747,6 @@ connect@^3.6.5, connect@^3.7.0: parseurl "~1.3.3" utils-merge "1.0.1" -console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - content-disposition@0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" @@ -4996,11 +4759,6 @@ content-type@~1.0.4, content-type@~1.0.5: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.6.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" - integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== - convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -5028,12 +4786,12 @@ copy-webpack-plugin@^10.2.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.31.0, core-js-compat@^3.32.2: - version "3.32.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.2.tgz#8047d1a8b3ac4e639f0d4f66d4431aa3b16e004c" - integrity sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ== +core-js-compat@^3.31.0, core-js-compat@^3.33.1: + version "3.33.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.2.tgz#3ea4563bfd015ad4e4b52442865b02c62aba5085" + integrity sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw== dependencies: - browserslist "^4.21.10" + browserslist "^4.22.1" core-util-is@~1.0.0: version "1.0.3" @@ -5081,7 +4839,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -5261,7 +5019,7 @@ debug@2.6.9, debug@^2.2.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -5285,13 +5043,6 @@ decode-uri-component@^0.2.2: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - dedent@^1.0.0: version "1.5.1" resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" @@ -5334,10 +5085,10 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" -define-data-property@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.0.tgz#0db13540704e1d8d479a0656cf781267531b9451" - integrity sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g== +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== dependencies: get-intrinsic "^1.2.1" gopd "^1.0.1" @@ -5389,11 +5140,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - denodeify@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" @@ -5428,11 +5174,6 @@ detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== -detect-libc@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" @@ -5574,20 +5315,15 @@ dotenv@~16.0.3: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07" integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ== -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.535: - version "1.4.536" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.536.tgz#ebdf960fbc27fb8bd0b0dfa9a899cc333bb15f1c" - integrity sha512-L4VgC/76m6y8WVCgnw5kJy/xs7hXrViCFdNKVG8Y7B2isfwrFryFyJzumh3ugxhd/oB1uEaEEvRdmeLrnd7OFA== + version "1.4.587" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.587.tgz#d8b864f21338b60798d447a3d83b90753f701d07" + integrity sha512-RyJX0q/zOkAoefZhB9XHghGeATVP0Q3mwA253XD/zj2OeXc+JZB9pCaEv6R578JUYaWM9PRhye0kXvd/V1cQ3Q== emittery@^0.13.1: version "0.13.1" @@ -5599,11 +5335,6 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -5614,14 +5345,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5651,26 +5375,16 @@ env-editor@^0.4.1: resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861" integrity sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA== -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - envinfo@^7.7.2: - version "7.10.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" - integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== + version "7.11.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.0.tgz#c3793f44284a55ff8c82faf1ffd91bc6478ea01f" + integrity sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg== eol@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -5694,25 +5408,25 @@ errorhandler@^1.5.1: escape-html "~1.0.3" es-abstract@^1.22.1: - version "1.22.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.2.tgz#90f7282d91d0ad577f505e423e52d4c1d93c1b8a" - integrity sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA== + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== dependencies: array-buffer-byte-length "^1.0.0" arraybuffer.prototype.slice "^1.0.2" available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.5" es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" get-symbol-description "^1.0.0" globalthis "^1.0.3" gopd "^1.0.1" - has "^1.0.3" has-property-descriptors "^1.0.0" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" internal-slot "^1.0.5" is-array-buffer "^3.0.2" is-callable "^1.2.7" @@ -5722,7 +5436,7 @@ es-abstract@^1.22.1: is-string "^1.0.7" is-typed-array "^1.1.12" is-weakref "^1.0.2" - object-inspect "^1.12.3" + object-inspect "^1.13.1" object-keys "^1.1.1" object.assign "^4.1.4" regexp.prototype.flags "^1.5.1" @@ -5736,7 +5450,7 @@ es-abstract@^1.22.1: typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.11" + which-typed-array "^1.1.13" es-iterator-helpers@^1.0.12: version "1.0.15" @@ -5759,25 +5473,25 @@ es-iterator-helpers@^1.0.12: safe-array-concat "^1.0.1" es-module-lexer@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.1.tgz#c1b0dd5ada807a3b3155315911f364dc4e909db1" - integrity sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q== + version "1.4.1" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5" + integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" + get-intrinsic "^1.2.2" has-tostringtag "^1.0.0" + hasown "^2.0.0" es-shim-unscopables@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" - integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== dependencies: - has "^1.0.3" + hasown "^2.0.0" es-to-primitive@^1.2.1: version "1.2.1" @@ -5869,17 +5583,18 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.42.0: - version "8.50.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.50.0.tgz#2ae6015fee0240fcd3f83e1e25df0287f487d6b2" - integrity sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg== + version "8.53.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.53.0.tgz#14f2c8244298fcae1f46945459577413ba2697ce" + integrity sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.2" - "@eslint/js" "8.50.0" - "@humanwhocodes/config-array" "^0.11.11" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.53.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -5974,11 +5689,6 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -eventemitter3@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -6022,11 +5732,6 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - expect@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" @@ -6056,6 +5761,16 @@ expo-asset@~8.10.1: path-browserify "^1.0.0" url-parse "^1.5.9" +expo-av@~13.4.1: + version "13.4.1" + resolved "https://registry.yarnpkg.com/expo-av/-/expo-av-13.4.1.tgz#83029b3202e64bf060f0a7a24591d93bf7ab728c" + integrity sha512-0K8QEFzZeNGrppzYUs8wOtjOyPPkxzlVYbEHM6WzIQOG1uYYNOJkJB3aQHVFXHmz+AzoHwMrUjcschofwaMNeg== + +expo-blur@~12.4.1: + version "12.4.1" + resolved "https://registry.yarnpkg.com/expo-blur/-/expo-blur-12.4.1.tgz#b391de84914ef9ece0702378e51e09461ad565ab" + integrity sha512-lGN8FS9LuGUlEriULTC62cCWyg5V7zSVQeJ6Duh1wSq8aAETinZ2/7wrT6o+Uhd/XVVxFNON2T25AGCOtMG6ew== + expo-constants@~14.4.2: version "14.4.2" resolved "https://registry.yarnpkg.com/expo-constants/-/expo-constants-14.4.2.tgz#cac5e8b524069545739b8d8595ce96cc5be6578c" @@ -6065,22 +5780,22 @@ expo-constants@~14.4.2: uuid "^3.3.2" expo-dev-client@~2.4.11: - version "2.4.11" - resolved "https://registry.yarnpkg.com/expo-dev-client/-/expo-dev-client-2.4.11.tgz#23b2e9b6c5c5ad62d11d196f82cc4d4c1c09e340" - integrity sha512-A7aKQZeEYG0YJ51GnjOFkMNe118jD1cbU+v5iM3E+H1Co5aVtnlGZWcv8Dtw3uGuWxRgbWGds5TGNbcDmJ1hDg== + version "2.4.12" + resolved "https://registry.yarnpkg.com/expo-dev-client/-/expo-dev-client-2.4.12.tgz#3ab2d03dfe22527c5f78324e4f658843a19e4d5d" + integrity sha512-3+xg0yb/0g6+JQaWq5+xn2uHoOXP4oSX33aWkaZPSNJLoyzfRaHNDF5MLcrMBbEHCw5T5qZRU291K+uQeMMC0g== dependencies: - expo-dev-launcher "2.4.13" - expo-dev-menu "3.2.1" + expo-dev-launcher "2.4.14" + expo-dev-menu "3.2.2" expo-dev-menu-interface "1.3.0" expo-manifests "~0.7.0" expo-updates-interface "~0.10.0" -expo-dev-launcher@2.4.13: - version "2.4.13" - resolved "https://registry.yarnpkg.com/expo-dev-launcher/-/expo-dev-launcher-2.4.13.tgz#bcae48e16521c05c6d831094adffea13fe64ea99" - integrity sha512-afszaREyGnhWJMmcOuDGs83r0UWeRvZrOHlKQxxst/UhAeFQqlDmkEjwtDWfTUy7BoXuuw2CuQtUFH+vTyjEGA== +expo-dev-launcher@2.4.14: + version "2.4.14" + resolved "https://registry.yarnpkg.com/expo-dev-launcher/-/expo-dev-launcher-2.4.14.tgz#ca0cabbefd6c1989709613ead9e86d2f159fe011" + integrity sha512-SlUf+fEX9sKzDzY1Ui8j5775eLKpO0xPVoI89G7CRsrpUv6ZRvRF836cMFesxkU5d+3bXHpKzDQiEPDSI1G/WQ== dependencies: - expo-dev-menu "3.2.1" + expo-dev-menu "3.2.2" resolve-from "^5.0.0" semver "^7.5.3" @@ -6089,10 +5804,10 @@ expo-dev-menu-interface@1.3.0: resolved "https://registry.yarnpkg.com/expo-dev-menu-interface/-/expo-dev-menu-interface-1.3.0.tgz#51b6be8c6e0ce73e414ac7a545998dfad0dfdb80" integrity sha512-WtRP7trQ2lizJJTTFXUSGGn1deIeHaYej0sUynvu/uC69VrSP4EeSnYOxbmEO29kuT/MsQBMGu0P/AkMQOqCOg== -expo-dev-menu@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/expo-dev-menu/-/expo-dev-menu-3.2.1.tgz#ada145afca3f0c9638ca42f05a2f79a1f45d9ad5" - integrity sha512-SxH/ZUIYZliMBjJTpiECVSDkP7e81mbGNLH8ZD69iCAfLeH7P1OPXFycEdcvN33I7tVqzFgARGLK/W/8JV+U9w== +expo-dev-menu@3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/expo-dev-menu/-/expo-dev-menu-3.2.2.tgz#e5285846158286e7da20fa44be1b0e2079fa8cc4" + integrity sha512-q0IDlCGkZMsDIFV+Mgnz0Q3u/bcnrF8IFMglJ0onF09e5csLk5Ts7hKoQyervOJeThyI402r9OQsFNaru2tgtg== dependencies: expo-dev-menu-interface "1.3.0" semver "^7.5.3" @@ -6187,9 +5902,9 @@ expo-pwa@0.0.127: update-check "1.5.3" expo-screen-orientation@~6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/expo-screen-orientation/-/expo-screen-orientation-6.0.5.tgz#4fcac69c641522c7e658d4fb20b22de82d732aee" - integrity sha512-aOOuuQkxNHNxSzfEO037jnD0zYiwBVTvuXeFy/0KntFmuqWmZGaFmFks1uTA2+0wKlbA049kVjkBnA1peybmHQ== + version "6.0.6" + resolved "https://registry.yarnpkg.com/expo-screen-orientation/-/expo-screen-orientation-6.0.6.tgz#48b395bde2c4aa8d5236fc570bc36a7681895030" + integrity sha512-qiTGX1udJi6hj+8JUP9C27+TJDU7+42HcYcgmGd5hi/iXvIK1YwuCkXFdny+BkiapFb5jQnJCBZfdhMk1fjh+Q== expo-splash-screen@~0.20.5: version "0.20.5" @@ -6209,12 +5924,12 @@ expo-updates-interface@~0.10.0: integrity sha512-I6JMR7EgjXwckrydDmrkBEX/iw750dcqpzQVsjznYWfi0HTEOxajLHB90fBFqQkUV5i5s4Fd3hYQ1Cn0oMzUbA== expo@~49.0.13: - version "49.0.13" - resolved "https://registry.yarnpkg.com/expo/-/expo-49.0.13.tgz#9ee185d4eb1ac2859e67895bd919db5a04d1b8ec" - integrity sha512-k2QFmT5XN490ksjKJgogfS5SFj6ZKCu1GwWz4VUV4S9gkPjzr8zQAZoVPKaWxUYRb6xDpTJXdhLt7gSnV3bJvw== + version "49.0.18" + resolved "https://registry.yarnpkg.com/expo/-/expo-49.0.18.tgz#e97e99a0bd20b21931e6c1cd93e7f930a91bbf5e" + integrity sha512-BrPtTxBlE7pFG1ZDi1fqq4pGbS5IcTg4bH9TTeUbJOTTs43W+QkXzsylmT0omf8nADOHGx9EFgufPneBcU1F1w== dependencies: "@babel/runtime" "^7.20.0" - "@expo/cli" "0.10.13" + "@expo/cli" "0.10.15" "@expo/config" "8.1.2" "@expo/config-plugins" "7.2.5" "@expo/vector-icons" "^13.0.0" @@ -6234,11 +5949,6 @@ expo@~49.0.13: pretty-format "^26.5.2" uuid "^3.4.0" -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -6287,9 +5997,9 @@ fast-diff@^1.1.2: integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.5, fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" - integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -6313,9 +6023,9 @@ fast-loops@^1.1.3: integrity sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g== fast-xml-parser@^4.0.12: - version "4.3.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.1.tgz#4f89c31e4c392d6e3d68b299733cad0c2d50d495" - integrity sha512-viVv3xb8D+SiS1W4cv4tva3bni08kAkx0gQnWrykMM8nXPc1FxqZPU00dCEVjkiCg4HoXd2jC4x29Nzg/l2DAA== + version "4.3.2" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz#761e641260706d6e13251c4ef8e3f5694d4b0d79" + integrity sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg== dependencies: strnum "^1.0.5" @@ -6377,11 +6087,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -6477,15 +6182,15 @@ find-yarn-workspace-root@~2.0.0: micromatch "^4.0.2" flat-cache@^3.0.4: - version "3.1.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.0.tgz#0e54ab4a1a60fe87e2946b6b00657f1c99e1af3f" - integrity sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.2.7" + flatted "^3.2.9" keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.2.7: +flatted@^3.2.9: version "3.2.9" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== @@ -6496,9 +6201,9 @@ flow-enums-runtime@^0.0.5: integrity sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ== flow-parser@0.*: - version "0.217.1" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.217.1.tgz#1d193f0401c5850f4ea6644c96e76d511e48718a" - integrity sha512-t4NrcNTgMzT85ffQWeiB3xl4cFtKkN0mlKBWNP1M7KZt/94SG6a4dhLlx2nPT8Cr8FMmLG/yT1/UEfp+4ZdLxw== + version "0.222.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.222.0.tgz#88decc0e35bc11c011af66dbc2f669589d69a6b2" + integrity sha512-Fq5OkFlFRSMV2EOZW+4qUYMTE0uj8pcLsYJMxXYriSBDpHAF7Ofx3PibCTy3cs5P6vbsry7eYj7Z7xFD49GIOQ== flow-parser@^0.206.0: version "0.206.0" @@ -6522,14 +6227,6 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - form-data@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -6544,27 +6241,6 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -framer-motion@^6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/framer-motion/-/framer-motion-6.5.1.tgz#802448a16a6eb764124bf36d8cbdfa6dd6b931a7" - integrity sha512-o1BGqqposwi7cgDrtg0dNONhkmPsUFDaLcKXigzuTFC5x58mE8iyTazxSudFzmT6MEyJKfjjU8ItoMe3W+3fiw== - dependencies: - "@motionone/dom" "10.12.0" - framesync "6.0.1" - hey-listen "^1.0.8" - popmotion "11.0.3" - style-value-types "5.0.0" - tslib "^2.1.0" - optionalDependencies: - "@emotion/is-prop-valid" "^0.8.2" - -framesync@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/framesync/-/framesync-6.0.1.tgz#5e32fc01f1c42b39c654c35b16440e07a25d6f20" - integrity sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA== - dependencies: - tslib "^2.1.0" - freeport-async@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/freeport-async/-/freeport-async-2.0.0.tgz#6adf2ec0c629d11abff92836acd04b399135bab4" @@ -6575,11 +6251,6 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - fs-extra@9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" @@ -6616,13 +6287,6 @@ fs-minipass@^2.0.0: dependencies: minipass "^3.0.0" -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - fs-monkey@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.5.tgz#fe450175f0db0d7ea758102e1d84096acb925788" @@ -6638,10 +6302,10 @@ fsevents@^2.3.2, fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.1, function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: version "1.1.6" @@ -6658,20 +6322,6 @@ functions-have-names@^1.2.3: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -6682,15 +6332,15 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -6727,24 +6377,6 @@ getenv@^1.0.0: resolved "https://registry.yarnpkg.com/getenv/-/getenv-1.0.0.tgz#874f2e7544fbca53c7a4738f37de8605c3fcfc31" integrity sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg== -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== - -gl@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/gl/-/gl-6.0.2.tgz#685579732a19075e3acf4684edb1270278e551c7" - integrity sha512-yBbfpChOtFvg5D+KtMaBFvj6yt3vUnheNAH+UrQH2TfDB8kr0tERdL0Tjhe0W7xJ6jR6ftQBluTZR9jXUnKe8g== - dependencies: - bindings "^1.5.0" - bit-twiddle "^1.0.2" - glsl-tokenizer "^2.1.5" - nan "^2.17.0" - node-abi "^3.26.0" - node-gyp "^9.2.0" - prebuild-install "^7.1.1" - glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -6776,17 +6408,6 @@ glob@7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.2: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - glob@^6.0.1: version "6.0.4" resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" @@ -6827,9 +6448,9 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.19.0: - version "13.22.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.22.0.tgz#0c9fcb9c48a2494fbb5edbfee644285543eba9d8" - integrity sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw== + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" @@ -6875,13 +6496,6 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -glsl-tokenizer@^2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a" - integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA== - dependencies: - through2 "^0.6.3" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -6932,11 +6546,11 @@ has-flag@^4.0.0: integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== dependencies: - get-intrinsic "^1.1.1" + get-intrinsic "^1.2.2" has-proto@^1.0.1: version "1.0.1" @@ -6955,17 +6569,12 @@ has-tostringtag@^1.0.0: dependencies: has-symbols "^1.0.2" -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" he@1.2.0, he@^1.2.0: version "1.2.0" @@ -6991,11 +6600,6 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" -hey-listen@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" - integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== - hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" @@ -7071,11 +6675,6 @@ htmlparser2@^6.1.0: domutils "^2.5.2" entities "^2.0.0" -http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -7107,15 +6706,6 @@ http-parser-js@>=0.5.1: resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - http-proxy-middleware@^2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" @@ -7136,7 +6726,7 @@ http-proxy@^1.18.1: follow-redirects "^1.0.0" requires-port "^1.0.0" -https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: +https-proxy-agent@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== @@ -7149,24 +6739,17 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - hyphenate-style-name@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== i18next@^23.5.1: - version "23.5.1" - resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.5.1.tgz#7f7c35ffaa907618d9489f106d5006b09fbca3d3" - integrity sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg== + version "23.7.6" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.7.6.tgz#7328e76c899052d5d33d930164612dd21e575f74" + integrity sha512-O66BhXBw0fH4bEJMA0/klQKPEbcwAp5wjXEL803pdAynNbg2f4qhLIYlNHJyE7icrL6XmSZKPYaaXwy11kJ6YQ== dependencies: - "@babel/runtime" "^7.22.5" + "@babel/runtime" "^7.23.2" iconsax-react-native@^0.0.8: version "0.0.8" @@ -7182,7 +6765,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.6.2, iconv-lite@^0.6.3: +iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== @@ -7200,9 +6783,9 @@ ieee754@^1.1.13: integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.1.9, ignore@^5.2.0, ignore@^5.2.4: - version "5.2.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== image-size@^1.0.2: version "1.0.2" @@ -7211,11 +6794,6 @@ image-size@^1.0.2: dependencies: queue "6.0.2" -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - immer@^9.0.21: version "9.0.21" resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" @@ -7268,7 +6846,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7300,22 +6878,22 @@ internal-ip@4.3.0: ipaddr.js "^1.9.0" internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" + get-intrinsic "^1.2.2" + hasown "^2.0.0" side-channel "^1.0.4" intl-messageformat@^10.1.0: - version "10.5.3" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.3.tgz#db0779d4a1988faa2977d76574489b7a25f0d5d0" - integrity sha512-TzKn1uhJBMyuKTO4zUX47SU+d66fu1W9tVzIiZrQ6hBqQQeYscBMIzKL/qEXnFbJrH9uU5VV3+T5fWib4SIcKA== + version "10.5.8" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.8.tgz#7184da425f360a53a5483a6194e16d666b011fc0" + integrity sha512-NRf0jpBWV0vd671G5b06wNofAN8tp7WWDogMZyaU8GUAsmbouyvgwmFJI7zLjfAMpm3zK+vSwRP3jzaoIcMbaA== dependencies: - "@formatjs/ecma402-abstract" "1.17.2" + "@formatjs/ecma402-abstract" "1.18.0" "@formatjs/fast-memoize" "2.2.0" - "@formatjs/icu-messageformat-parser" "2.6.2" + "@formatjs/icu-messageformat-parser" "2.7.3" tslib "^2.4.0" invariant@*, invariant@^2.2.4: @@ -7335,11 +6913,6 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - ipaddr.js@1.9.1, ipaddr.js@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -7403,12 +6976,12 @@ is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.9.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - has "^1.0.3" + hasown "^2.0.0" is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" @@ -7492,11 +7065,6 @@ is-invalid-path@^0.1.0: dependencies: is-glob "^2.0.0" -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - is-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" @@ -7655,11 +7223,6 @@ is-wsl@^2.0.0, is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -7681,9 +7244,9 @@ isobject@^3.0.1: integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4: version "5.2.1" @@ -7697,9 +7260,9 @@ istanbul-lib-instrument@^5.0.4: semver "^6.3.0" istanbul-lib-instrument@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.0.tgz#7a8af094cbfff1d5bb280f62ce043695ae8dd5b8" - integrity sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw== + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -7744,15 +7307,6 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -8143,9 +7697,9 @@ jimp-compact@0.16.1: integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww== joi@^17.2.1: - version "17.10.2" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.10.2.tgz#4ecc348aa89ede0b48335aad172e0f5591e55b29" - integrity sha512-hcVhjBxRNW/is3nNLdGLIjkgXetkeGc2wyhydhz8KumG23Aerk4HPjU5zaPAMRqXQFc0xNqXTC7+zQjxr0GlKA== + version "17.11.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.11.0.tgz#aa9da753578ec7720e6f0ca2c7046996ed04fc1a" + integrity sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -8303,20 +7857,10 @@ jsonfile@^6.0.1: object.assign "^4.1.4" object.values "^1.1.6" -jszip@3.10.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" - integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - setimmediate "^1.0.5" - keyv@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25" - integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug== + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -8331,19 +7875,12 @@ kleur@^3.0.3: integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== launch-editor@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" - integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + version "2.6.1" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.1.tgz#f259c9ef95cbc9425620bbbd14b468fcdb4ffe3c" + integrity sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw== dependencies: picocolors "^1.0.0" - shell-quote "^1.7.3" - -"legacy-swc-helpers@npm:@swc/helpers@=0.4.14": - version "0.4.14" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.4.14.tgz#1352ac6d95e3617ccb7c1498ff019654f1e12a74" - integrity sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw== - dependencies: - tslib "^2.4.0" + shell-quote "^1.8.1" leven@^3.1.0: version "3.1.0" @@ -8358,13 +7895,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - lightningcss-darwin-arm64@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz#56ab071e932f845dbb7667f44f5b78441175a343" @@ -8576,11 +8106,6 @@ logkitty@^0.7.1: dayjs "^1.8.15" yargs "^15.1.0" -loglevel@^1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.1.tgz#5c621f83d5b48c54ae93b6156353f555963377b4" - integrity sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg== - loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -8609,16 +8134,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" - integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== - make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -8641,27 +8156,6 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-fetch-happen@^11.0.3: - version "11.1.1" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" - integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== - dependencies: - agentkeepalive "^4.2.1" - cacache "^17.0.0" - http-cache-semantics "^4.1.1" - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - is-lambda "^1.0.1" - lru-cache "^7.7.1" - minipass "^5.0.0" - minipass-fetch "^3.0.0" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.4" - negotiator "^0.6.3" - promise-retry "^2.0.1" - socks-proxy-agent "^7.0.0" - ssri "^10.0.0" - makeerror@1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" @@ -9077,11 +8571,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - mini-css-extract-plugin@^2.5.2: version "2.7.6" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" @@ -9108,14 +8597,7 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -9127,17 +8609,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - minipass-flush@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" @@ -9145,20 +8616,13 @@ minipass-flush@^1.0.5: dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: +minipass-pipeline@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - minipass@3.1.6: version "3.1.6" resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.6.tgz#3b8150aa688a711a1521af5e8779c1d3bb4f45ee" @@ -9178,12 +8642,7 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minizlib@^2.1.1, minizlib@^2.1.2: +minizlib@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -9191,11 +8650,6 @@ minizlib@^2.1.1, minizlib@^2.1.2: minipass "^3.0.0" yallist "^4.0.0" -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" @@ -9208,13 +8662,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -moti@^0.26.0: - version "0.26.0" - resolved "https://registry.yarnpkg.com/moti/-/moti-0.26.0.tgz#863e70e61c9d597f4fd701e588f41963335b927f" - integrity sha512-430HDIwhPQi/DkMvocyAZGkAX3ibmbyF3Fj23GuhbTB+RUXYTOnbsvygr89ABJjllYuxx4Xjd2Z4Qab0Su5mcg== - dependencies: - framer-motion "^6.5.1" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -9225,7 +8672,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: +ms@2.1.3, ms@^2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -9256,11 +8703,6 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.17.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== - nano-time@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/nano-time/-/nano-time-1.0.0.tgz#b0554f69ad89e22d0907f7a12b0993a5d96137ef" @@ -9269,14 +8711,9 @@ nano-time@1.0.0: big-integer "^1.6.16" nanoid@^3.1.23, nanoid@^3.3.6: - version "3.3.6" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" - integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + version "3.3.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" + integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== native-base@^3.4.28: version "3.4.28" @@ -9329,7 +8766,7 @@ ncp@~2.0.0: resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== -negotiator@0.6.3, negotiator@^0.6.3: +negotiator@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -9362,13 +8799,6 @@ nocache@^3.0.1: resolved "https://registry.yarnpkg.com/nocache/-/nocache-3.0.4.tgz#5b37a56ec6e09fc7d401dceaed2eab40c8bfdf79" integrity sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw== -node-abi@^3.26.0, node-abi@^3.3.0: - version "3.47.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.47.0.tgz#6cbfa2916805ae25c2b7156ca640131632eb05e8" - integrity sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A== - dependencies: - semver "^7.3.5" - node-abort-controller@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" @@ -9393,23 +8823,6 @@ node-forge@^1, node-forge@^1.2.1, node-forge@^1.3.1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-gyp@^9.2.0: - version "9.4.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" - integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== - dependencies: - env-paths "^2.2.0" - exponential-backoff "^3.1.1" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^11.0.3" - nopt "^6.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - node-html-parser@^5.2.0: version "5.4.2" resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-5.4.2.tgz#93e004038c17af80226c942336990a0eaed8136a" @@ -9433,13 +8846,6 @@ node-stream-zip@^1.9.1: resolved "https://registry.yarnpkg.com/node-stream-zip/-/node-stream-zip-1.15.0.tgz#158adb88ed8004c6c49a396b50a6a5de3bca33ea" integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== -nopt@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" - integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== - dependencies: - abbrev "^1.0.0" - normalize-css-color@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/normalize-css-color/-/normalize-css-color-1.0.2.tgz#02991e97cccec6623fe573afbbf0de6a1f3e9f8d" @@ -9479,16 +8885,6 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -9511,10 +8907,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -9632,19 +9028,6 @@ open@^8.0.4, open@^8.0.9, open@^8.3.0: is-docker "^2.1.1" is-wsl "^2.2.0" -opensheetmusicdisplay@^1.8.4: - version "1.8.4" - resolved "https://registry.yarnpkg.com/opensheetmusicdisplay/-/opensheetmusicdisplay-1.8.4.tgz#e192b10a7fa7e0d89bbc56cf80d5c3b977013bc8" - integrity sha512-ad7dDNmW/DFoZbdbhlhSAsYWDnI/t//vkxesNv6eIItshMgYxn9HxmiMjen48gF5fPSN6ljRduXirfON90/+Iw== - dependencies: - "@types/vexflow" "^1.2.38" - jszip "3.10.1" - loglevel "^1.8.0" - typescript-collections "^1.3.3" - vexflow "1.2.93" - optionalDependencies: - gl "^6.0.2" - optionator@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" @@ -9767,11 +9150,6 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - param-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" @@ -9873,14 +9251,6 @@ path-parse@^1.0.5, path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" @@ -9896,13 +9266,6 @@ paths-js@^0.4.10: resolved "https://registry.yarnpkg.com/paths-js/-/paths-js-0.4.11.tgz#b2a9d5f94ee9949aa8fee945f78a12abff44599e" integrity sha512-3mqcLomDBXOo7Fo+UlaenG6f71bk1ZezPQy2JCmYHy2W2k5VKpP+Jbin9H0bjXynelTbglCqdFhSEkeIkKTYUA== -phaser@^3.60.0: - version "3.60.0" - resolved "https://registry.yarnpkg.com/phaser/-/phaser-3.60.0.tgz#8a555623e64c707482e6321485b4bda84604590d" - integrity sha512-IKUy35EnoEVcl2EmJ8WOyK4X8OoxHYdlhZLgRGpNrvD1fEagYffhVmwHcapE/tGiLgyrnezmXIo5RrH2NcrTHw== - dependencies: - eventemitter3 "^5.0.0" - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -9980,16 +9343,6 @@ point-in-polygon@^1.0.1: resolved "https://registry.yarnpkg.com/point-in-polygon/-/point-in-polygon-1.1.0.tgz#b0af2616c01bdee341cbf2894df643387ca03357" integrity sha512-3ojrFwjnnw8Q9242TzgXuTD+eKiutbzyslcq1ydfu82Db2y+Ogbmyrkpv0Hgj31qwT3lbS9+QAAO/pIQM35XRw== -popmotion@11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/popmotion/-/popmotion-11.0.3.tgz#565c5f6590bbcddab7a33a074bb2ba97e24b0cc9" - integrity sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA== - dependencies: - framesync "6.0.1" - hey-listen "^1.0.8" - style-value-types "5.0.0" - tslib "^2.1.0" - postcss-calc@^8.2.3: version "8.2.4" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" @@ -10237,24 +9590,6 @@ postcss@^8.3.5, postcss@^8.4.21, postcss@~8.4.21: picocolors "^1.0.0" source-map-js "^1.0.2" -prebuild-install@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" - 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" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -10268,9 +9603,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.0.3.tgz#432a51f7ba422d1469096c0fdc28e235db8f9643" - integrity sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.0.tgz#c6d16474a5f764ea1a4a373c593b779697744d5e" + integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== pretty-bytes@5.6.0: version "5.6.0" @@ -10319,14 +9654,6 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -10349,7 +9676,7 @@ prompts@^2.0.1, prompts@^2.3.2, prompts@^2.4.0: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@*, prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@*, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -10359,9 +9686,9 @@ prop-types@*, prop-types@^15.6.0, prop-types@^15.7.2, prop-types@^15.8.1: react-is "^16.13.1" property-expr@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4" - integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" + integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== proxy-addr@~2.0.7: version "2.0.7" @@ -10385,9 +9712,9 @@ punycode@^1.4.1: integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0, punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== pure-rand@^6.0.0: version "6.0.4" @@ -10472,7 +9799,7 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@~1.2.7: +rc@^1.0.1, rc@^1.1.6, rc@~1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -10483,9 +9810,9 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@~1.2.7: strip-json-comments "~2.0.1" react-devtools-core@^4.27.2: - version "4.28.0" - resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.28.0.tgz#3fa18709b24414adddadac33b6b9cea96db60f2f" - integrity sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg== + version "4.28.5" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.28.5.tgz#c8442b91f068cdf0c899c543907f7f27d79c2508" + integrity sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA== dependencies: shell-quote "^1.6.1" ws "^7" @@ -10504,9 +9831,9 @@ react-freeze@^1.0.0: integrity sha512-ZnXwLQnGzrDpHBHiC56TXFXvmolPeMjTn1UOm610M4EXGzbEDR7oOIyS2ZiItgbs6eZc4oU/a0hpk8PrcKvv5g== react-i18next@^13.2.2: - version "13.2.2" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-13.2.2.tgz#b1e78ed66a54f4bc819616f68b98221e1b1a1936" - integrity sha512-+nFUkbRByFwnrfDcYqvzBuaeZb+nACHx+fAWN/pZMddWOCJH5hoc21+Sa/N/Lqi6ne6/9wC/qRGOoQhJa6IkEQ== + version "13.5.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-13.5.0.tgz#44198f747628267a115c565f0c736a50a76b1ab0" + integrity sha512-CFJ5NDGJ2MUyBohEHxljOq/39NQ972rh1ajnadG9BjTk+UXbHLq4z5DKEbEQBDoIhUmmbuS/fIMJKo6VOax1HA== dependencies: "@babel/runtime" "^7.22.5" html-parse-stringify "^3.0.1" @@ -10526,6 +9853,13 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-native-animatable@1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/react-native-animatable/-/react-native-animatable-1.3.3.tgz#a13a4af8258e3bb14d0a9d839917e9bb9274ec8a" + integrity sha512-2ckIxZQAsvWn25Ho+DK3d1mXIgj7tITkrS4pYDvx96WyOttSvzzFeQnM2od0+FUMzILbdHDsDEqZvnz1DYNQ1w== + dependencies: + prop-types "^15.7.2" + react-native-chart-kit@^6.12.0: version "6.12.0" resolved "https://registry.yarnpkg.com/react-native-chart-kit/-/react-native-chart-kit-6.12.0.tgz#187a4987a668a85b7e93588c248ed2c33b3a06f6" @@ -10542,6 +9876,14 @@ react-native-dotenv@^3.4.9: dependencies: dotenv "^16.3.1" +react-native-modal@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/react-native-modal/-/react-native-modal-13.0.1.tgz#691f1e646abb96fa82c1788bf18a16d585da37cd" + integrity sha512-UB+mjmUtf+miaG/sDhOikRfBOv0gJdBU2ZE1HtFWp6UixW9jCk/bhGdHUgmZljbPpp0RaO/6YiMmQSSK3kkMaw== + dependencies: + prop-types "^15.6.2" + react-native-animatable "1.3.3" + react-native-pager-view@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/react-native-pager-view/-/react-native-pager-view-6.2.0.tgz#51380d93fbe47f6380dc71d613a787bf27a4ca37" @@ -10577,10 +9919,10 @@ react-native-super-grid@^5.0.0: dependencies: prop-types "^15.6.0" -react-native-svg@13.9.0: - version "13.9.0" - resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-13.9.0.tgz#8df8a690dd00362601f074dec5d3a86dd0f99c7f" - integrity sha512-Ey18POH0dA0ob/QiwCBVrxIiwflhYuw0P0hBlOHeY4J5cdbs8ngdKHeWC/Kt9+ryP6fNoEQ1PUgPYw2Bs/rp5Q== +react-native-svg@14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-14.0.0.tgz#ea1974dec9a91a09c6a38b7bf58d85e857c291f5" + integrity sha512-17W/gWXRUMS7p7PSHu/WyGkZUc1NzRTGxxXc0VqBLjzKSchyb0EmgsiWf9aKmfC6gmY0wcsmKZcGV41bCcNfBA== dependencies: css-select "^5.1.0" css-tree "^1.1.3" @@ -10613,10 +9955,10 @@ react-native-web@~0.19.6: postcss-value-parser "^4.2.0" styleq "^0.1.3" -react-native@0.72.5: - version "0.72.5" - resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.72.5.tgz#2c343fa6f3ead362cf07376634a33a4078864357" - integrity sha512-oIewslu5DBwOmo7x5rdzZlZXCqDIna0R4dUwVpfmVteORYLr4yaZo5wQnMeR+H7x54GaMhmgeqp0ZpULtulJFg== +react-native@0.72.6: + version "0.72.6" + resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.72.6.tgz#9f8d090694907e2f83af22e115cc0e4a3d5fa626" + integrity sha512-RafPY2gM7mcrFySS8TL8x+TIO3q7oAlHpzEmC7Im6pmXni6n1AuufGaVh0Narbr1daxstw7yW7T9BKW5dpVc2A== dependencies: "@jest/create-cache-key-function" "^29.2.1" "@react-native-community/cli" "11.3.7" @@ -10665,9 +10007,9 @@ react-query@^3.39.3: match-sorter "^6.0.2" react-redux@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.2.tgz#9076bbc6b60f746659ad6d51cb05de9c5e1e9188" - integrity sha512-xJKYI189VwfsFc4CJvHqHlDrzyFTY/3vZACbE+rr/zQ34Xx1wQfB4OTOSeOSNrF6BDVe8OOdxIrAnMGXA3ggfw== + version "8.1.3" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-8.1.3.tgz#4fdc0462d0acb59af29a13c27ffef6f49ab4df46" + integrity sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw== dependencies: "@babel/runtime" "^7.12.1" "@types/hoist-non-react-statics" "^3.3.1" @@ -10708,16 +10050,6 @@ react@18.2.0: dependencies: loose-envify "^1.1.0" -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readable-stream@^2.0.1, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -10731,7 +10063,7 @@ readable-stream@^2.0.1, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.0.6, readable-stream@^3.4.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -10951,20 +10283,20 @@ resolve.exports@^2.0.0: integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1: - version "1.22.6" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.6.tgz#dd209739eca3aef739c626fea1b4f3c506195362" - integrity sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw== + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" resolve@^2.0.0-next.4: - version "2.0.0-next.4" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" - integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -10991,11 +10323,6 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - retry@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" @@ -11133,10 +10460,11 @@ select-hose@^2.0.0: integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" - integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + version "2.4.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.4.1.tgz#560d90565442a3ed35b674034cec4e95dceb4ae0" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== dependencies: + "@types/node-forge" "^1.3.0" node-forge "^1" semver@7.3.2: @@ -11241,6 +10569,16 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + set-function-name@^2.0.0, set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" @@ -11296,7 +10634,7 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.6.1, shell-quote@^1.7.3: +shell-quote@^1.6.1, shell-quote@^1.7.3, shell-quote@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== @@ -11315,25 +10653,6 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" - integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== - dependencies: - decompress-response "^6.0.0" - once "^1.3.1" - simple-concat "^1.0.0" - simple-plist@^1.1.0: version "1.3.1" resolved "https://registry.yarnpkg.com/simple-plist/-/simple-plist-1.3.1.tgz#16e1d8f62c6c9b691b8383127663d834112fb017" @@ -11372,16 +10691,6 @@ slugify@^1.3.4: resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.6.6.tgz#2d4ac0eacb47add6af9e04d3be79319cbcc7924b" integrity sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw== -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -smplr@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/smplr/-/smplr-0.11.0.tgz#7bdb487e85f2f3d3764dd27b6c61abce45274c36" - integrity sha512-J+QGBbGc5W6R3YJc+ucG5gA8eCH6JlVLB3yi/5ekh/BPg9OtN6yunB00m1W16mUzen4tsSC23G1xuh1nRtQipw== - sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" @@ -11391,23 +10700,6 @@ sockjs@^0.3.24: uuid "^8.3.2" websocket-driver "^0.7.4" -socks-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" - integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks@^2.6.2: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - source-list-map@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -11498,13 +10790,6 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== -ssri@^10.0.0: - version "10.0.5" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - ssri@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" @@ -11569,7 +10854,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -11578,15 +10863,6 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - string.prototype.matchall@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" @@ -11636,11 +10912,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -11648,13 +10919,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^5.0.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -11662,12 +10926,12 @@ strip-ansi@^5.0.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - ansi-regex "^6.0.1" + ansi-regex "^5.0.1" strip-bom@^4.0.0: version "4.0.0" @@ -11709,14 +10973,6 @@ style-loader@^3.3.1: resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== -style-value-types@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/style-value-types/-/style-value-types-5.0.0.tgz#76c35f0e579843d523187989da866729411fc8ad" - integrity sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA== - dependencies: - hey-listen "^1.0.8" - tslib "^2.1.0" - stylehacks@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" @@ -11810,28 +11066,7 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - 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" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - 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" - -tar@^6.0.2, tar@^6.0.5, tar@^6.1.11, tar@^6.1.2: +tar@^6.0.2, tar@^6.0.5: version "6.2.0" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== @@ -11900,9 +11135,9 @@ terser-webpack-plugin@^5.3.0, terser-webpack-plugin@^5.3.7: terser "^5.16.8" terser@^5.10.0, terser@^5.15.0, terser@^5.16.8: - version "5.20.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.20.0.tgz#ea42aea62578703e33def47d5c5b93c49772423e" - integrity sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ== + version "5.24.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.24.0.tgz#4ae50302977bca4831ccc7b4fef63a3c04228364" + integrity sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -11942,14 +11177,6 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -through2@^0.6.3: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - integrity sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg== - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - through2@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -12032,18 +11259,11 @@ ts-interface-checker@^0.1.9: resolved "https://registry.yarnpkg.com/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz#784fd3d679722bc103b1b4b8030bcddb5db2a699" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.3.1, tslib@^2.4.0: +tslib@^2.0.1, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -12092,9 +11312,9 @@ type-fest@^2.19.0: integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== type-fest@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.3.2.tgz#bb7948127bb644364994dc1b44b8a797da8aadcd" - integrity sha512-VpwuOgnTsQUUWi0id8Hl4/xiQ+OoaeJGe8dnFjzubJYe/lOc2/d1Qx/d3FqWR0FlpOG/cvukAXfB12A49Y4iiA== + version "4.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.8.1.tgz#2a5bf1074abb580d2d6eb5c1e79c11147fd11d4f" + integrity sha512-ShaaYnjf+0etG8W/FumARKMjjIToy/haCaTjN2dvcewOSoNqCQzdgG7m2JVOlM5qndGTHjkvsrWZs+k/2Z7E0Q== type-is@~1.6.18: version "1.6.18" @@ -12143,20 +11363,15 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript-collections@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/typescript-collections/-/typescript-collections-1.3.3.tgz#62d50d93c018c094d425eabee649f00ec5cc0fea" - integrity sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ== - typescript@^5.1.3: version "5.2.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== ua-parser-js@^1.0.35: - version "1.0.36" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.36.tgz#a9ab6b9bd3a8efb90bb0816674b412717b7c428c" - integrity sha512-znuyCIXzl8ciS3+y3fHJI/2OhQIXbXw9MWC/o3qwyR+RGppjZHrM27CGFSKCJXi2Kctiz537iOu2KnXs1lMQhw== + version "1.0.37" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" + integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== uglify-es@^3.1.9: version "3.3.9" @@ -12176,6 +11391,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -12206,13 +11426,6 @@ unique-filename@^1.1.1: dependencies: unique-slug "^2.0.0" -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - unique-slug@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" @@ -12220,13 +11433,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -12252,9 +11458,9 @@ universalify@^1.0.0: integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unload@2.2.0: version "2.2.0" @@ -12313,10 +11519,10 @@ url@^0.11.3: punycode "^1.4.1" qs "^6.11.2" -use-latest-callback@^0.1.5: - version "0.1.6" - resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.6.tgz#3fa6e7babbb5f9bfa24b5094b22939e1e92ebcf6" - integrity sha512-VO/P91A/PmKH9bcN9a7O3duSuxe6M14ZoYXgA6a8dab8doWNdhiIHzEkX/jFeTTRBsX0Ubk6nG4q2NIjNsj+bg== +use-latest-callback@^0.1.5, use-latest-callback@^0.1.7: + version "0.1.9" + resolved "https://registry.yarnpkg.com/use-latest-callback/-/use-latest-callback-0.1.9.tgz#10191dc54257e65a8e52322127643a8940271e2a" + integrity sha512-CL/29uS74AwreI/f2oz2hLTW7ZqVeV5+gxFeGudzQrgkCytrHw33G4KbnQOrRlAEzzAFXi7dDLMC9zhWcVpzmw== use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: version "1.2.0" @@ -12354,13 +11560,13 @@ uuid@^8.0.0, uuid@^8.3.2: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-to-istanbul@^9.0.1: - version "9.1.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz#1b83ed4e397f58c85c266a570fc2558b5feb9265" - integrity sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA== + version "9.1.3" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b" + integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg== dependencies: "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" + convert-source-map "^2.0.0" valid-url@~1.0.9: version "1.0.9" @@ -12379,11 +11585,6 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -vexflow@1.2.93: - version "1.2.93" - resolved "https://registry.yarnpkg.com/vexflow/-/vexflow-1.2.93.tgz#d6796d7a3fdae1bb06efb32a1390899931dd636f" - integrity sha512-LwHQDCc257Lwju35BhyZuPYcVWu0hIUqEdM7j9+B+bq91bSelssnAG5JR8odTUtgGuwwvGwLhXw37wtmHNCS6Q== - vlq@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" @@ -12507,9 +11708,9 @@ webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.64.4: - version "5.88.2" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" - integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== + version "5.89.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.89.0.tgz#56b8bf9a34356e93a6625770006490bf3a7f32dc" + integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.0" @@ -12616,13 +11817,13 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.11, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.11, which-typed-array@^1.1.13, which-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== dependencies: available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + call-bind "^1.0.4" for-each "^0.3.3" gopd "^1.0.1" has-tostringtag "^1.0.0" @@ -12634,20 +11835,13 @@ which@^1.2.9: dependencies: isexe "^2.0.0" -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - wonka@^4.0.14: version "4.0.15" resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.15.tgz#9aa42046efa424565ab8f8f451fcca955bf80b89" @@ -12658,15 +11852,6 @@ wonka@^6.3.2: resolved "https://registry.yarnpkg.com/wonka/-/wonka-6.3.4.tgz#76eb9316e3d67d7febf4945202b5bdb2db534594" integrity sha512-CjpbqNtBGNAeyNS/9W6q3kSkKE52+FjIj7AkFlLr11s/VWGUu6a2CdYSdGxocIhIVjaW/zchesBQUKPVU69Cqg== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" @@ -12676,14 +11861,14 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" wrappy@1: version "1.0.2" @@ -12755,7 +11940,7 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== -"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: +xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -12786,9 +11971,9 @@ yaml@^1.10.2: integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.2.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144" - integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== + version "2.3.4" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" + integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== yargs-parser@^18.1.2: version "18.1.3" @@ -12839,9 +12024,9 @@ yocto-queue@^0.1.0: integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== yup@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/yup/-/yup-1.3.1.tgz#4ab52d00555f0f18af09fe1356fdae35f804e421" - integrity sha512-2stNyEF96SnPUxzRL99kt1bEHWytnvC2stwmTTqjoFXZRf63JtYK2pQt2AJvWcQvkrAzr/pcXvc6c5vrqsBzDg== + version "1.3.2" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.3.2.tgz#afffc458f1513ed386e6aaf4bcaa4e67a9e270dc" + integrity sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ== dependencies: property-expr "^2.0.5" tiny-case "^1.0.3"