diff --git a/package-lock.json b/package-lock.json index c7e6aa75fe69..db4223f3542b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "@deriv/js-interpreter": "^3.0.0", "@deriv/ui": "^0.6.0", "@livechat/customer-sdk": "^2.0.4", + "@sendbird/chat": "^4.9.3", "@storybook/addon-actions": "^6.5.10", "@storybook/addon-docs": "^6.5.10", "@storybook/addon-essentials": "^6.5.10", @@ -150,7 +151,6 @@ "sass-loader": "^12.6.0", "sass-resources-loader": "^2.1.1", "scratch-blocks": "0.1.0-prerelease.20200917235131", - "sendbird": "~3.0.137", "shx": "^0.3.2", "source-map-loader": "^1.1.2", "style-loader": "^1.2.1", @@ -1907,42 +1907,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/register/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/register/node_modules/make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -1955,39 +1919,6 @@ "node": ">=6" } }, - "node_modules/@babel/register/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@babel/register/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/register/node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -1996,17 +1927,6 @@ "node": ">=6" } }, - "node_modules/@babel/register/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@babel/register/node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -2027,13 +1947,12 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz", - "integrity": "sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw==", + "version": "7.20.6", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "core-js-pure": "^3.30.2", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.11" }, "engines": { @@ -2941,9 +2860,9 @@ "integrity": "sha512-VLbtn78R4LU1quOHWmLKUNndPg4fx85zumeP8j0EYPxJXo674ZPG9IvNsEk0JG5ik7KVm/66VTgLTffyfy/1hw==" }, "node_modules/@deriv/api-types": { - "version": "1.0.112", - "resolved": "https://registry.npmjs.org/@deriv/api-types/-/api-types-1.0.112.tgz", - "integrity": "sha512-Cid8Tmu6LH7kejB+gzZ+3Oejikuy2gwKGGpah05PGlw6UL/e4iVrwZy3RW5FHYSAnFdkg+mqI8443RKa9PDhkQ==" + "version": "1.0.114", + "resolved": "https://registry.npmjs.org/@deriv/api-types/-/api-types-1.0.114.tgz", + "integrity": "sha512-lGTglS4EFWcEESOzJj1IwHglmXLpfNZ+Pd+m2K0lh6eyog3uvZebQROxQ80vR6qC27Q4s169steir6B8MjNmFw==" }, "node_modules/@deriv/deriv-api": { "version": "1.0.13", @@ -3354,16 +3273,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "peer": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", "license": "MIT", @@ -3442,9 +3351,9 @@ "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==" }, "node_modules/@floating-ui/dom": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.4.tgz", - "integrity": "sha512-21hhDEPOiWkGp0Ys4Wi6Neriah7HweToKra626CIK712B5m9qkdz54OP9gVldUg+URnBTpv/j/bi/skmGdstXQ==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.5.tgz", + "integrity": "sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==", "dependencies": { "@floating-ui/core": "^1.3.1" } @@ -8169,14 +8078,27 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==" }, + "node_modules/@sendbird/chat": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@sendbird/chat/-/chat-4.9.3.tgz", + "integrity": "sha512-TvK32c8L54QedDrdshA/tKgv9UJUfKXDPADIu0IORrfsWKqp3X4bqYTb40IYSX31v6ksK8rbJTofz3y3bUVSRg==", + "peerDependencies": { + "@react-native-async-storage/async-storage": "^1.17.6" + }, + "peerDependenciesMeta": { + "@react-native-async-storage/async-storage": { + "optional": true + } + } + }, "node_modules/@sentry-internal/tracing": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.58.0.tgz", - "integrity": "sha512-7V/vkFFYCmSq25er3Y0wukkTM940Wvk9qjh7kWcCCeesKFHNGBCP7HVZhsymjPIJGGJTvRWc9MgBzRGe/c16Xg==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.60.0.tgz", + "integrity": "sha512-2qvxmR954H+K7u4o92sS2u+hntzshem9XwfHAqDvBe51arNbFVy8LfJTJ5fffgZq/6jXlozCO0/6aR5yLR5mBg==", "dependencies": { - "@sentry/core": "7.58.0", - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0", + "@sentry/core": "7.60.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -8184,15 +8106,15 @@ } }, "node_modules/@sentry/browser": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.58.0.tgz", - "integrity": "sha512-v+PaTuK4LOJ1/uAxNQHUMRLWdlIOdiKlZAgoZojixdFKajHAeguzok93d0u2SZJaGDaLmkJYSiGAPBs1d1jHhA==", - "dependencies": { - "@sentry-internal/tracing": "7.58.0", - "@sentry/core": "7.58.0", - "@sentry/replay": "7.58.0", - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.60.0.tgz", + "integrity": "sha512-WznY6zrJxCUHZns8jTvDsZw3aaHriSP+jqD+wkXZG3ceooQwFn0RkAstUuoG7YyP4Foinznn3+caeQD4ZjWaXQ==", + "dependencies": { + "@sentry-internal/tracing": "7.60.0", + "@sentry/core": "7.60.0", + "@sentry/replay": "7.60.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -8200,12 +8122,12 @@ } }, "node_modules/@sentry/core": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.58.0.tgz", - "integrity": "sha512-tdz+HOh9blnfJ4ZSfsaVaSh/i7pD2QfmC0///fWlNm+IvD+SAgYFP6M3PIsJMsaN5heZ9XMNY4wnxvd+vvJwPQ==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.60.0.tgz", + "integrity": "sha512-B02OlFMoqdkfDZlbQfmk7tL2vObShofk7ySd/7mp+oRdUuCvX0tyrGlwI87YJvd8YWSZOCKINs3aVYivw/b6gg==", "dependencies": { - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -8213,32 +8135,32 @@ } }, "node_modules/@sentry/replay": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.58.0.tgz", - "integrity": "sha512-gzanY+Y+48ErQxFWl2t031awz/4fR6v0Pkvu7mZWl8ZraLiVRqk2T7aPyxcL2I7yFwFElJ6mZw7buce+R+IaTA==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.60.0.tgz", + "integrity": "sha512-iVSs+mhgjeK0qqLdCqbCa1P4I6hETHCUq14pTYp0bwGrI1D/a1Ho/6wLkwXv47Gnrwaba/7JFM+IxZcN4FzfmQ==", "dependencies": { - "@sentry/core": "7.58.0", - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0" + "@sentry/core": "7.60.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0" }, "engines": { "node": ">=12" } }, "node_modules/@sentry/types": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.58.0.tgz", - "integrity": "sha512-uy8rww5R0WSxr9kB1R1BXWomkKXosK+jOFslbIda4CfTiAMEINi7rXkqTzPJKCIRLHFvKXDFUIkMCHNMkgYjwA==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.60.0.tgz", + "integrity": "sha512-MSEuF9YjE0j+UKdqee2AzcNlMnShVNTkCB2Wnng6Bc5hHhn4fyYeTLbuFpNxL0ffN65lxblaWx6doDsMcvRxcA==", "engines": { "node": ">=8" } }, "node_modules/@sentry/utils": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.58.0.tgz", - "integrity": "sha512-EAknRDovGBnIVvGLJVxPbB1gUY/VCUoVov26Fk1BYLtUmWlzt+JYHsBJptHw15onu+M0em7z7Iax4wKoiNhhzA==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.60.0.tgz", + "integrity": "sha512-Oc/PQqzeNDOSy4ZzVj6h9U+GEGRkg2PEVn9PC2V9/v3HDD20mndFqR/S2B5OOgDb/6pNGyz8XiZYI5rb29WFHA==", "dependencies": { - "@sentry/types": "7.58.0", + "@sentry/types": "7.60.0", "tslib": "^2.4.1 || ^1.9.3" }, "engines": { @@ -9654,9 +9576,9 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, "node_modules/@storybook/builder-webpack4/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/ast": { "version": "1.9.0", @@ -10065,6 +9987,22 @@ "node": ">=0.10.0" } }, + "node_modules/@storybook/builder-webpack4/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", @@ -10226,26 +10164,6 @@ "node": ">=10" } }, - "node_modules/@storybook/builder-webpack4/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -10335,28 +10253,6 @@ "node": ">=6" } }, - "node_modules/@storybook/builder-webpack4/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/builder-webpack4/node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/builder-webpack4/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -10767,6 +10663,17 @@ "node": ">=6" } }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -10775,6 +10682,18 @@ "yallist": "^3.0.2" } }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -10786,6 +10705,17 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -10810,6 +10740,14 @@ "node": ">= 4" } }, + "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -10933,9 +10871,9 @@ } }, "node_modules/@storybook/builder-webpack5/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "node_modules/@storybook/builder-webpack5/node_modules/colorette": { "version": "1.4.0", @@ -11360,9 +11298,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "node_modules/@storybook/core-common/node_modules/@webassemblyjs/ast": { "version": "1.9.0", @@ -11705,41 +11643,6 @@ "node": ">=0.10.0" } }, - "node_modules/@storybook/core-common/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/core-common/node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/core-common/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -11831,18 +11734,6 @@ "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/@storybook/core-common/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/core-common/node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -11851,26 +11742,6 @@ "yallist": "^3.0.2" } }, - "node_modules/@storybook/core-common/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/core-common/node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/@storybook/core-common/node_modules/memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -11914,47 +11785,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/@storybook/core-common/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-common/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/core-common/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@storybook/core-common/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/core-common/node_modules/pkg-dir": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", @@ -12292,9 +12122,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "node_modules/@storybook/core-server/node_modules/@webassemblyjs/ast": { "version": "1.9.0", @@ -12628,30 +12458,6 @@ "node": ">=0.10.0" } }, - "node_modules/@storybook/core-server/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/core-server/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/core-server/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -12735,18 +12541,6 @@ "node": ">=4.3.0 <5.0.0 || >=5.10" } }, - "node_modules/@storybook/core-server/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/core-server/node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -12755,18 +12549,6 @@ "yallist": "^3.0.2" } }, - "node_modules/@storybook/core-server/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/core-server/node_modules/memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -12810,58 +12592,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/@storybook/core-server/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/core-server/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/core-server/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@storybook/core-server/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/core-server/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/core-server/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -12905,14 +12635,6 @@ "node": ">= 4" } }, - "node_modules/@storybook/core-server/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/@storybook/core-server/node_modules/serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -13323,9 +13045,9 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, "node_modules/@storybook/manager-webpack4/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/ast": { "version": "1.9.0", @@ -13779,6 +13501,22 @@ "node": ">=0.10.0" } }, + "node_modules/@storybook/manager-webpack4/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -13936,26 +13674,6 @@ "node": ">=10" } }, - "node_modules/@storybook/manager-webpack4/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/make-dir/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -14045,28 +13763,6 @@ "node": ">=6" } }, - "node_modules/@storybook/manager-webpack4/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@storybook/manager-webpack4/node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@storybook/manager-webpack4/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -14427,6 +14123,17 @@ "node": ">=6" } }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -14435,6 +14142,18 @@ "yallist": "^3.0.2" } }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -14446,6 +14165,17 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -14470,6 +14200,14 @@ "node": ">= 4" } }, + "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -14587,9 +14325,9 @@ } }, "node_modules/@storybook/manager-webpack5/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "node_modules/@storybook/manager-webpack5/node_modules/ansi-styles": { "version": "4.3.0", @@ -15079,15 +14817,31 @@ "webpack": ">= 4" } }, + "node_modules/@storybook/react-docgen-typescript-plugin/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/@storybook/react/node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "node_modules/@storybook/react/node_modules/acorn": { "version": "7.4.1", @@ -15569,20 +15323,20 @@ } }, "node_modules/@tanstack/query-core": { - "version": "4.29.19", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.19.tgz", - "integrity": "sha512-uPe1DukeIpIHpQi6UzIgBcXsjjsDaLnc7hF+zLBKnaUlh7jFE/A+P8t4cU4VzKPMFB/C970n/9SxtpO5hmIRgw==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.32.0.tgz", + "integrity": "sha512-ei4IYwL2kmlKSlCw9WgvV7PpXi0MiswVwfQRxawhJA690zWO3dU49igaQ/UMTl+Jy9jj9dK5IKAYvbX7kUvviQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "4.29.19", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.19.tgz", - "integrity": "sha512-XiTIOHHQ5Cw1WUlHaD4fmVUMhoWjuNJlAeJGq7eM4BraI5z7y8WkZO+NR8PSuRnQGblpuVdjClQbDFtwxTtTUw==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.32.0.tgz", + "integrity": "sha512-B8WUMcByYAH9500ENejDCATOmEZhqjtS9wsfiQ3BNa+s+yAynY8SESI8WWHhSqUmjd0pmCSFRP6BOUGSda3QXA==", "dependencies": { - "@tanstack/query-core": "4.29.19", + "@tanstack/query-core": "4.32.0", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -15604,9 +15358,9 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "4.29.19", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.29.19.tgz", - "integrity": "sha512-rL2xqTPr+7gJvVGwyq8E8CWqqw950N4lZ6ffJeNX0qqymKHxHW1FM6nZaYt7Aufs/bXH0m1L9Sj3kDGQbp0rwg==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.32.0.tgz", + "integrity": "sha512-rOmWqzKzRmQrQULV5Ova2FGEEPT76FZA3hz8T+LFkvp3ehw9ugSZ1BosgRJ7AFCeir+5pcNvFwILy4pDK8HpRw==", "dependencies": { "@tanstack/match-sorter-utils": "^8.7.0", "superjson": "^1.10.0", @@ -15617,7 +15371,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "4.29.19", + "@tanstack/react-query": "4.32.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } @@ -15643,9 +15397,9 @@ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/@tensorflow/tfjs-backend-cpu": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.8.0.tgz", - "integrity": "sha512-kT4WZeM4cuuZ+dSCMatrC9YiqV4dxpFzjxKOKwdS41gdg5QKQGW7caScCe55thO/Xpp7VOJXncDYeaMH7GcxCA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.9.0.tgz", + "integrity": "sha512-AHIfI3iD1fyQgQKeoQmtkI3exPWRfOo+W0Ws/bxOdapTXcAYWGg0179t52j8XPDwsl8WopfaTINNgYNG6FnP3Q==", "peer": true, "dependencies": { "@types/seedrandom": "^2.4.28", @@ -15655,16 +15409,16 @@ "yarn": ">= 1.3.2" }, "peerDependencies": { - "@tensorflow/tfjs-core": "4.8.0" + "@tensorflow/tfjs-core": "4.9.0" } }, "node_modules/@tensorflow/tfjs-backend-webgl": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.8.0.tgz", - "integrity": "sha512-iAJzQbndBtarV+OWk9Ukur5U0Xk/4t7j7O5WhPQO/q9yuRyWjAT6MPaCEW/+Ew4XC8yJGuvlfL0Oqi1X0drvfA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.9.0.tgz", + "integrity": "sha512-lSEOjR9zi6vb1V9yhrby8jWt6SS+wWBXRa3sDE5GCbpcHMWHv41wZktB2WQyIXDqJQcw1lRZBDoYneibMqr2uQ==", "peer": true, "dependencies": { - "@tensorflow/tfjs-backend-cpu": "4.8.0", + "@tensorflow/tfjs-backend-cpu": "4.9.0", "@types/offscreencanvas": "~2019.3.0", "@types/seedrandom": "^2.4.28", "@types/webgl-ext": "0.0.30", @@ -15674,22 +15428,22 @@ "yarn": ">= 1.3.2" }, "peerDependencies": { - "@tensorflow/tfjs-core": "4.8.0" + "@tensorflow/tfjs-core": "4.9.0" } }, "node_modules/@tensorflow/tfjs-converter": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.8.0.tgz", - "integrity": "sha512-tBYsCdhdFNlFFn4FO49gr1yLX4h8xDxpoFI70lFECxDu9UfwaHNVuBLcocMx4XIFqQx12h6/Y3pD93HFvoum3A==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.9.0.tgz", + "integrity": "sha512-mRlzdG3jVsxMkFfHFgDNY10HMoh+vtfPPIghtY+Fc4U/ZnBUFvSfZqwEFyXfOJAewn4fY4BX8+6RE4a0kRXqGA==", "peer": true, "peerDependencies": { - "@tensorflow/tfjs-core": "4.8.0" + "@tensorflow/tfjs-core": "4.9.0" } }, "node_modules/@tensorflow/tfjs-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-4.8.0.tgz", - "integrity": "sha512-EkgGOAsPQSlpEdiG938c92pdC5i8GHeBVk6xO1AKKX8NiMSIruKtKqIQvX2aOkarwHy/5nhrJebAAvIL4dJlbw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-4.9.0.tgz", + "integrity": "sha512-1nYs9OA934eSI33eTvyCVJUEji2wnMXyZ3VK7l2iS/TPDFISI3ETyh286mW56LCihoniv8HH2MtOAQwo4Qhrdg==", "peer": true, "dependencies": { "@types/long": "^4.0.1", @@ -16400,10 +16154,9 @@ "integrity": "sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==" }, "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.3.13", "dev": true, + "license": "MIT", "peer": true }, "node_modules/@types/sockjs-client": { @@ -16514,20 +16267,18 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "5.45.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/type-utils": "5.45.0", + "@typescript-eslint/utils": "5.45.0", "debug": "^4.3.4", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, @@ -16550,9 +16301,8 @@ }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "yallist": "^4.0.0" @@ -16562,10 +16312,9 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.3.8", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "lru-cache": "^6.0.0" @@ -16579,9 +16328,8 @@ }, "node_modules/@typescript-eslint/experimental-utils": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@types/json-schema": "^7.0.7", @@ -16604,9 +16352,8 @@ }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@typescript-eslint/types": "4.33.0", @@ -16622,9 +16369,8 @@ }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" @@ -16636,9 +16382,8 @@ }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { "@typescript-eslint/types": "4.33.0", @@ -16664,9 +16409,8 @@ }, "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@typescript-eslint/types": "4.33.0", @@ -16682,9 +16426,8 @@ }, "node_modules/@typescript-eslint/experimental-utils/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "yallist": "^4.0.0" @@ -16694,10 +16437,9 @@ } }, "node_modules/@typescript-eslint/experimental-utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.3.8", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "lru-cache": "^6.0.0" @@ -16710,15 +16452,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "5.45.0", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/typescript-estree": "5.45.0", "debug": "^4.3.4" }, "engines": { @@ -16738,14 +16479,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "5.45.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/visitor-keys": "5.45.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -16756,14 +16496,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "5.45.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/utils": "5.45.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -16784,10 +16523,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "5.45.0", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -16798,14 +16536,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "5.45.0", "dev": true, + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/visitor-keys": "5.45.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -16827,9 +16564,8 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "yallist": "^4.0.0" @@ -16839,10 +16575,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.3.8", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "lru-cache": "^6.0.0" @@ -16855,19 +16590,18 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "5.45.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/typescript-estree": "5.45.0", "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "engines": { @@ -16883,9 +16617,8 @@ }, "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "yallist": "^4.0.0" @@ -16895,10 +16628,9 @@ } }, "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.3.8", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "lru-cache": "^6.0.0" @@ -16911,13 +16643,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "5.45.0", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/types": "5.45.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -16929,23 +16660,19 @@ } }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.3.0", "dev": true, + "license": "Apache-2.0", "peer": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" } }, "node_modules/@typescript/lib-dom": { "name": "@types/web", - "version": "0.0.105", - "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.105.tgz", - "integrity": "sha512-pPMlsJ5ue1DF9zvcLVTCWGoXCcrF9bOfJjVXlm052Ejd/87VY7CSn6mOlANOYTeocngnmu5uzEs0fOXLn16NZw==" + "version": "0.0.111", + "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.111.tgz", + "integrity": "sha512-OnLWZBNMXlvTsAalsPcVyVkxW76yG2QQsRPbRijMQxCG791IH9sAIAsg1tcDDK8p5JwHW0GV3/uYOg+RRqGrOw==" }, "node_modules/@webassemblyjs/ast": { "version": "1.11.5", @@ -17228,9 +16955,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.9.tgz", - "integrity": "sha512-4VSbbcMoxc4KLjb1gs96SRmi7w4h1SF+fCoiK0XaQX62buCc1G5d0DC5bJ9xJBNPDSVCmIrcl8BiYxzjrqaaJA==", + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", "engines": { "node": ">=10.0.0" } @@ -17703,8 +17430,7 @@ }, "node_modules/array-find": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==" + "license": "MIT" }, "node_modules/array-find-index": { "version": "1.0.2", @@ -17727,8 +17453,7 @@ }, "node_modules/array-includes": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -17767,8 +17492,7 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -17784,8 +17508,7 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -17837,8 +17560,7 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -18067,6 +17789,7 @@ }, "node_modules/axios": { "version": "0.21.4", + "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.14.0" @@ -18419,6 +18142,22 @@ "ajv": "^6.9.1" } }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/babel-loader/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -21029,8 +20768,7 @@ }, "node_modules/confusing-browser-globals": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + "license": "MIT" }, "node_modules/connect-history-api-fallback": { "version": "1.6.0", @@ -21465,6 +21203,22 @@ "node": ">= 10" } }, + "node_modules/copy-webpack-plugin-v6/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/copy-webpack-plugin-v6/node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -21575,10 +21329,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz", - "integrity": "sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==", + "version": "3.26.1", "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -24058,8 +23811,6 @@ }, "node_modules/enhanced-resolve": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==", "dependencies": { "graceful-fs": "^4.1.2", "memory-fs": "^0.2.0", @@ -24224,16 +23975,14 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "license": "MIT", "dependencies": { "has": "^1.0.3" } }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -24431,8 +24180,7 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", + "license": "MIT", "dependencies": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", @@ -24454,8 +24202,7 @@ }, "node_modules/eslint-config-prettier": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", - "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -24465,8 +24212,7 @@ }, "node_modules/eslint-formatter-pretty": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", - "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", + "license": "MIT", "dependencies": { "@types/eslint": "^7.2.13", "ansi-escapes": "^4.2.1", @@ -24486,8 +24232,7 @@ }, "node_modules/eslint-formatter-pretty/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -24500,8 +24245,7 @@ }, "node_modules/eslint-formatter-pretty/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24515,8 +24259,7 @@ }, "node_modules/eslint-formatter-pretty/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -24526,21 +24269,18 @@ }, "node_modules/eslint-formatter-pretty/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "node_modules/eslint-formatter-pretty/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/eslint-formatter-pretty/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -24549,19 +24289,16 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.6", + "license": "MIT", "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "resolve": "^1.20.0" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -24589,8 +24326,7 @@ }, "node_modules/eslint-import-resolver-webpack": { "version": "0.13.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.2.tgz", - "integrity": "sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg==", + "license": "MIT", "dependencies": { "array-find": "^1.0.0", "debug": "^3.2.7", @@ -24614,16 +24350,14 @@ }, "node_modules/eslint-import-resolver-webpack/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-import-resolver-webpack/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "version": "5.7.1", + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -24677,6 +24411,24 @@ "ajv": "^6.9.1" } }, + "node_modules/eslint-loader/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "peer": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, "node_modules/eslint-loader/node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -24754,9 +24506,8 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.7.4", + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -24771,8 +24522,7 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -24793,25 +24543,169 @@ "typescript": "^3.7.5 || ^4.0.0 || ^5.0.0" } }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "peer": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-deprecation/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.26.0", + "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", "has": "^1.0.3", - "is-core-module": "^2.11.0", + "is-core-module": "^2.8.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", + "object.values": "^1.1.5", + "resolve": "^1.22.0", "tsconfig-paths": "^3.14.1" }, "engines": { @@ -24822,17 +24716,15 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "2.6.9", + "license": "MIT", "dependencies": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -24840,6 +24732,10 @@ "node": ">=0.10.0" } }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, "node_modules/eslint-plugin-jest": { "version": "26.9.0", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.9.0.tgz", @@ -24867,9 +24763,8 @@ }, "node_modules/eslint-plugin-jest-dom": { "version": "3.9.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.9.4.tgz", - "integrity": "sha512-VRkaALGIhyxinnewZFHe2WJsRWp3TONpXysVXK1IUNJHCpJAIM9yRrI7fQ8i5F6UYE7+DAnvNhSSJZesLTonug==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@babel/runtime": "^7.16.3", @@ -24887,9 +24782,8 @@ }, "node_modules/eslint-plugin-jest-dom/node_modules/@testing-library/dom": { "version": "7.31.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", - "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", @@ -24907,9 +24801,8 @@ }, "node_modules/eslint-plugin-jest-dom/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "color-convert": "^2.0.1" @@ -24923,9 +24816,8 @@ }, "node_modules/eslint-plugin-jest-dom/node_modules/aria-query": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { "@babel/runtime": "^7.10.2", @@ -24937,9 +24829,8 @@ }, "node_modules/eslint-plugin-jest-dom/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -24954,9 +24845,8 @@ }, "node_modules/eslint-plugin-jest-dom/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "color-name": "~1.1.4" @@ -24967,16 +24857,14 @@ }, "node_modules/eslint-plugin-jest-dom/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/eslint-plugin-jest-dom/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -24984,9 +24872,8 @@ }, "node_modules/eslint-plugin-jest-dom/node_modules/pretty-format": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@jest/types": "^26.6.2", @@ -25007,9 +24894,8 @@ }, "node_modules/eslint-plugin-jest-dom/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -25046,8 +24932,7 @@ }, "node_modules/eslint-plugin-prettier": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0" }, @@ -25065,9 +24950,8 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.31.11", + "license": "MIT", "dependencies": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -25081,7 +24965,7 @@ "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.3", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.8" }, @@ -25094,8 +24978,7 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -25105,8 +24988,7 @@ }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -25116,8 +24998,7 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", + "license": "MIT", "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -25140,9 +25021,8 @@ }, "node_modules/eslint-plugin-testing-library": { "version": "4.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-4.12.4.tgz", - "integrity": "sha512-XZtoeyIZKFTiH8vhwnCaTo/mNrLHoLyufY4kkNg+clzZFeThWPjp+0QfrLam1on1k3JGwiRvoLH/V4QdBaB2oA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@typescript-eslint/experimental-utils": "^4.30.0" @@ -25157,8 +25037,7 @@ }, "node_modules/eslint-rule-docs": { "version": "1.1.235", - "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz", - "integrity": "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==" + "license": "MIT" }, "node_modules/eslint-scope": { "version": "5.1.1", @@ -25180,9 +25059,8 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" @@ -26153,9 +26031,8 @@ "license": "MIT" }, "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + "version": "1.2.0", + "license": "Apache-2.0" }, "node_modules/fast-glob": { "version": "3.3.0", @@ -26452,25 +26329,116 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dependencies": { "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/find-cache-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" } }, "node_modules/find-root": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", @@ -27092,8 +27060,7 @@ }, "node_modules/function.prototype.name": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -27319,8 +27286,7 @@ }, "node_modules/get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -27762,13 +27728,6 @@ "version": "4.2.10", "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "peer": true - }, "node_modules/growly": { "version": "1.3.0", "dev": true, @@ -29420,8 +29379,7 @@ }, "node_modules/interpret": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -29787,8 +29745,7 @@ }, "node_modules/is-negative-zero": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -29910,8 +29867,7 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -30020,8 +29976,7 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -33250,14 +33205,11 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "version": "3.3.3", + "license": "MIT", "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" }, "engines": { "node": ">=4.0" @@ -34544,8 +34496,7 @@ }, "node_modules/memory-fs": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==" + "license": "MIT" }, "node_modules/memory-web-storage": { "version": "0.1.0", @@ -35030,9 +34981,9 @@ } }, "node_modules/mobx": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.9.1.tgz", - "integrity": "sha512-7V41hvBmzCQg5n/xoZi2qkhREbnF3wHbzbIdR1sLJhVt6yWq2Zq0FlNahEt/RccOmEIjipvBqeQ4mlOEyMhaaA==", + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.10.0.tgz", + "integrity": "sha512-WMbVpCMFtolbB8swQ5E2YRrU+Yu8iLozCVx3CdGjbBKlP7dFiCSuiG06uea3JCFN5DnvtAX7+G5Bp82e2xu0ww==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" @@ -35287,9 +35238,8 @@ }, "node_modules/natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/negotiator": { @@ -36960,8 +36910,7 @@ }, "node_modules/object.entries": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -36973,8 +36922,7 @@ }, "node_modules/object.fromentries": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -37007,8 +36955,7 @@ }, "node_modules/object.hasown": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", + "license": "MIT", "dependencies": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4" @@ -37029,8 +36976,7 @@ }, "node_modules/object.values": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -39741,8 +39687,7 @@ }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -39949,8 +39894,7 @@ }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -40696,9 +40640,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/react-joyride": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.5.4.tgz", - "integrity": "sha512-CLV1Ju79iRKIP/KqsEX05nSxMBzT41BhPAyNrTdBQWEYAkpyo6iiCPelk6No2W8iPgw373JKk2cK7AQ5Q3lFew==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.5.5.tgz", + "integrity": "sha512-/esW9IcsuQJr4NcRZJUH8UYYTvB/yzVC0IyElopbjMFYPw3aylSny91QO3mQRRKPQJUqYa6wREOtQpsaLbu9fw==", "dependencies": { "deepmerge": "^4.3.1", "exenv": "^1.2.2", @@ -40707,7 +40651,7 @@ "react-floater": "^0.7.6", "react-is": "^16.13.1", "scroll": "^3.0.1", - "scrollparent": "^2.0.1", + "scrollparent": "^2.1.0", "tree-changes": "^0.9.2" }, "peerDependencies": { @@ -42295,9 +42239,8 @@ }, "node_modules/requireindex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=0.10.5" @@ -42560,9 +42503,9 @@ } }, "node_modules/rudder-sdk-js": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/rudder-sdk-js/-/rudder-sdk-js-2.37.0.tgz", - "integrity": "sha512-CyHoEJX9lHXZiQ1Mu5WqizkctFCpRagWio3mPhhqTDDMxDRdZow0p9UFXLOCCMpdkNmwcjakqk1nZWeeWwBqzQ==" + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rudder-sdk-js/-/rudder-sdk-js-2.37.1.tgz", + "integrity": "sha512-L9WS95Vll2PwKZ6QnYUs4m1ev/FoWuX2W1syApvPNcpd5Efs+WaDjvyyJTA2GqWH7WUr9/+ZR90TtZdhTT6vRg==" }, "node_modules/run-async": { "version": "2.4.1", @@ -42658,8 +42601,7 @@ }, "node_modules/safe-regex-test": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -43255,63 +43197,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/sendbird": { - "version": "3.0.160", - "resolved": "https://registry.npmjs.org/sendbird/-/sendbird-3.0.160.tgz", - "integrity": "sha512-47ljPMszDJLdmYX3kOfpvnK/tPVPaw3UnvtpmYvJo5+yq1SqJFAm7o6Dbcs+cYHfalUGRNcaEU+rDUBo8993+Q==", - "dependencies": { - "agentkeepalive": "4.1.4", - "axios": "^0.21.4", - "form-data": "^4.0.0", - "ws": "^7.5.5" - } - }, - "node_modules/sendbird/node_modules/agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "dependencies": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/sendbird/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/sendbird/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", @@ -44595,8 +44480,7 @@ }, "node_modules/string.prototype.matchall": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -44661,8 +44545,7 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -44674,8 +44557,7 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -45347,9 +45229,9 @@ } }, "node_modules/superjson": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.4.tgz", - "integrity": "sha512-vkpPQAxdCg9SLfPv5GPC5fnGrui/WryktoN9O5+Zif/14QIMjw+RITf/5LbBh+9QpBFb3KNvJth+puz2H8o6GQ==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.13.1.tgz", + "integrity": "sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==", "dependencies": { "copy-anything": "^3.0.2" }, @@ -45855,8 +45737,7 @@ }, "node_modules/tapable": { "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -46559,9 +46440,8 @@ }, "node_modules/tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "tslib": "^1.8.1" @@ -46575,9 +46455,8 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, + "license": "0BSD", "peer": true }, "node_modules/tty-browserify": { @@ -46717,8 +46596,7 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -49072,9 +48950,9 @@ } }, "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + "version": "3.6.17", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", + "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==" }, "node_modules/whatwg-mimetype": { "version": "3.0.0", @@ -50786,33 +50664,6 @@ "source-map-support": "^0.5.16" }, "dependencies": { - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -50822,40 +50673,11 @@ "semver": "^5.6.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, "semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -50872,13 +50694,11 @@ } }, "@babel/runtime-corejs3": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz", - "integrity": "sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw==", + "version": "7.20.6", "dev": true, "peer": true, "requires": { - "core-js-pure": "^3.30.2", + "core-js-pure": "^3.25.1", "regenerator-runtime": "^0.13.11" } }, @@ -51427,9 +51247,9 @@ "integrity": "sha512-VLbtn78R4LU1quOHWmLKUNndPg4fx85zumeP8j0EYPxJXo674ZPG9IvNsEk0JG5ik7KVm/66VTgLTffyfy/1hw==" }, "@deriv/api-types": { - "version": "1.0.112", - "resolved": "https://registry.npmjs.org/@deriv/api-types/-/api-types-1.0.112.tgz", - "integrity": "sha512-Cid8Tmu6LH7kejB+gzZ+3Oejikuy2gwKGGpah05PGlw6UL/e4iVrwZy3RW5FHYSAnFdkg+mqI8443RKa9PDhkQ==" + "version": "1.0.114", + "resolved": "https://registry.npmjs.org/@deriv/api-types/-/api-types-1.0.114.tgz", + "integrity": "sha512-lGTglS4EFWcEESOzJj1IwHglmXLpfNZ+Pd+m2K0lh6eyog3uvZebQROxQ80vR6qC27Q4s169steir6B8MjNmFw==" }, "@deriv/deriv-api": { "version": "1.0.13", @@ -51773,13 +51593,6 @@ } } }, - "@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "peer": true - }, "@eslint/eslintrc": { "version": "0.4.3", "peer": true, @@ -51832,9 +51645,9 @@ "integrity": "sha512-Bu+AMaXNjrpjh41znzHqaz3r2Nr8hHuHZT6V2LBKMhyMl0FgKA62PNYbqnfgmzOhoWZj70Zecisbo4H1rotP5g==" }, "@floating-ui/dom": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.4.tgz", - "integrity": "sha512-21hhDEPOiWkGp0Ys4Wi6Neriah7HweToKra626CIK712B5m9qkdz54OP9gVldUg+URnBTpv/j/bi/skmGdstXQ==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.4.5.tgz", + "integrity": "sha512-96KnRWkRnuBSSFbj0sFGwwOUd8EkiecINVl0O9wiZlZ64EkpyAOG3Xc2vKKNJmru0Z7RqWNymA+6b8OZqjgyyw==", "requires": { "@floating-ui/core": "^1.3.1" } @@ -55085,61 +54898,67 @@ } } }, + "@sendbird/chat": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@sendbird/chat/-/chat-4.9.3.tgz", + "integrity": "sha512-TvK32c8L54QedDrdshA/tKgv9UJUfKXDPADIu0IORrfsWKqp3X4bqYTb40IYSX31v6ksK8rbJTofz3y3bUVSRg==", + "requires": {} + }, "@sentry-internal/tracing": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.58.0.tgz", - "integrity": "sha512-7V/vkFFYCmSq25er3Y0wukkTM940Wvk9qjh7kWcCCeesKFHNGBCP7HVZhsymjPIJGGJTvRWc9MgBzRGe/c16Xg==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/tracing/-/tracing-7.60.0.tgz", + "integrity": "sha512-2qvxmR954H+K7u4o92sS2u+hntzshem9XwfHAqDvBe51arNbFVy8LfJTJ5fffgZq/6jXlozCO0/6aR5yLR5mBg==", "requires": { - "@sentry/core": "7.58.0", - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0", + "@sentry/core": "7.60.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0", "tslib": "^2.4.1 || ^1.9.3" } }, "@sentry/browser": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.58.0.tgz", - "integrity": "sha512-v+PaTuK4LOJ1/uAxNQHUMRLWdlIOdiKlZAgoZojixdFKajHAeguzok93d0u2SZJaGDaLmkJYSiGAPBs1d1jHhA==", - "requires": { - "@sentry-internal/tracing": "7.58.0", - "@sentry/core": "7.58.0", - "@sentry/replay": "7.58.0", - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.60.0.tgz", + "integrity": "sha512-WznY6zrJxCUHZns8jTvDsZw3aaHriSP+jqD+wkXZG3ceooQwFn0RkAstUuoG7YyP4Foinznn3+caeQD4ZjWaXQ==", + "requires": { + "@sentry-internal/tracing": "7.60.0", + "@sentry/core": "7.60.0", + "@sentry/replay": "7.60.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0", "tslib": "^2.4.1 || ^1.9.3" } }, "@sentry/core": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.58.0.tgz", - "integrity": "sha512-tdz+HOh9blnfJ4ZSfsaVaSh/i7pD2QfmC0///fWlNm+IvD+SAgYFP6M3PIsJMsaN5heZ9XMNY4wnxvd+vvJwPQ==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.60.0.tgz", + "integrity": "sha512-B02OlFMoqdkfDZlbQfmk7tL2vObShofk7ySd/7mp+oRdUuCvX0tyrGlwI87YJvd8YWSZOCKINs3aVYivw/b6gg==", "requires": { - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0", "tslib": "^2.4.1 || ^1.9.3" } }, "@sentry/replay": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.58.0.tgz", - "integrity": "sha512-gzanY+Y+48ErQxFWl2t031awz/4fR6v0Pkvu7mZWl8ZraLiVRqk2T7aPyxcL2I7yFwFElJ6mZw7buce+R+IaTA==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.60.0.tgz", + "integrity": "sha512-iVSs+mhgjeK0qqLdCqbCa1P4I6hETHCUq14pTYp0bwGrI1D/a1Ho/6wLkwXv47Gnrwaba/7JFM+IxZcN4FzfmQ==", "requires": { - "@sentry/core": "7.58.0", - "@sentry/types": "7.58.0", - "@sentry/utils": "7.58.0" + "@sentry/core": "7.60.0", + "@sentry/types": "7.60.0", + "@sentry/utils": "7.60.0" } }, "@sentry/types": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.58.0.tgz", - "integrity": "sha512-uy8rww5R0WSxr9kB1R1BXWomkKXosK+jOFslbIda4CfTiAMEINi7rXkqTzPJKCIRLHFvKXDFUIkMCHNMkgYjwA==" + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.60.0.tgz", + "integrity": "sha512-MSEuF9YjE0j+UKdqee2AzcNlMnShVNTkCB2Wnng6Bc5hHhn4fyYeTLbuFpNxL0ffN65lxblaWx6doDsMcvRxcA==" }, "@sentry/utils": { - "version": "7.58.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.58.0.tgz", - "integrity": "sha512-EAknRDovGBnIVvGLJVxPbB1gUY/VCUoVov26Fk1BYLtUmWlzt+JYHsBJptHw15onu+M0em7z7Iax4wKoiNhhzA==", + "version": "7.60.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.60.0.tgz", + "integrity": "sha512-Oc/PQqzeNDOSy4ZzVj6h9U+GEGRkg2PEVn9PC2V9/v3HDD20mndFqR/S2B5OOgDb/6pNGyz8XiZYI5rb29WFHA==", "requires": { - "@sentry/types": "7.58.0", + "@sentry/types": "7.60.0", "tslib": "^2.4.1 || ^1.9.3" } }, @@ -56112,9 +55931,9 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "@webassemblyjs/ast": { "version": "1.9.0", @@ -56452,6 +56271,16 @@ } } }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "fork-ts-checker-webpack-plugin": { "version": "4.1.6", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", @@ -56573,22 +56402,6 @@ "yallist": "^4.0.0" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - } - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -56656,24 +56469,6 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - } - } - }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -56948,6 +56743,14 @@ "pkg-dir": "^3.0.0" } }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -56956,6 +56759,15 @@ "yallist": "^3.0.2" } }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -56964,6 +56776,14 @@ "minimist": "^1.2.6" } }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -56982,6 +56802,11 @@ "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, "serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -57129,9 +56954,9 @@ }, "dependencies": { "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "colorette": { "version": "1.4.0", @@ -57427,9 +57252,9 @@ } }, "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "@webassemblyjs/ast": { "version": "1.9.0", @@ -57725,34 +57550,6 @@ } } }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - } - } - }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -57822,15 +57619,6 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -57839,22 +57627,6 @@ "yallist": "^3.0.2" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - } - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -57892,32 +57664,6 @@ "minimist": "^1.2.6" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, "pkg-dir": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", @@ -58181,9 +57927,9 @@ }, "dependencies": { "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "@webassemblyjs/ast": { "version": "1.9.0", @@ -58470,24 +58216,6 @@ } } }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -58552,15 +58280,6 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -58569,15 +58288,6 @@ "yallist": "^3.0.2" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -58615,40 +58325,6 @@ "minimist": "^1.2.6" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -58686,11 +58362,6 @@ "ajv-keywords": "^3.1.0" } }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, "serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -59013,9 +58684,9 @@ "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==" }, "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "@webassemblyjs/ast": { "version": "1.9.0", @@ -59383,6 +59054,16 @@ } } }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -59499,22 +59180,6 @@ "yallist": "^4.0.0" } }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - } - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -59582,24 +59247,6 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - } - } - }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -59850,6 +59497,14 @@ "pkg-dir": "^3.0.0" } }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -59858,6 +59513,15 @@ "yallist": "^3.0.2" } }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -59866,6 +59530,14 @@ "minimist": "^1.2.6" } }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -59884,6 +59556,11 @@ "ajv-keywords": "^3.1.0" } }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, "serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", @@ -60019,9 +59696,9 @@ }, "dependencies": { "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "ansi-styles": { "version": "4.3.0", @@ -60352,9 +60029,9 @@ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" }, "@types/node": { - "version": "16.18.38", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", - "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + "version": "16.18.39", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.39.tgz", + "integrity": "sha512-8q9ZexmdYYyc5/cfujaXb4YOucpQxAV4RMG0himLyDUOEr8Mr79VrqsFI+cQ2M2h89YIuy95lbxuYjxT4Hk4kQ==" }, "acorn": { "version": "7.4.1", @@ -60391,6 +60068,18 @@ "micromatch": "^4.0.2", "react-docgen-typescript": "^2.1.1", "tslib": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + } } }, "@storybook/router": { @@ -60702,23 +60391,23 @@ } }, "@tanstack/query-core": { - "version": "4.29.19", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.29.19.tgz", - "integrity": "sha512-uPe1DukeIpIHpQi6UzIgBcXsjjsDaLnc7hF+zLBKnaUlh7jFE/A+P8t4cU4VzKPMFB/C970n/9SxtpO5hmIRgw==" + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.32.0.tgz", + "integrity": "sha512-ei4IYwL2kmlKSlCw9WgvV7PpXi0MiswVwfQRxawhJA690zWO3dU49igaQ/UMTl+Jy9jj9dK5IKAYvbX7kUvviQ==" }, "@tanstack/react-query": { - "version": "4.29.19", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.29.19.tgz", - "integrity": "sha512-XiTIOHHQ5Cw1WUlHaD4fmVUMhoWjuNJlAeJGq7eM4BraI5z7y8WkZO+NR8PSuRnQGblpuVdjClQbDFtwxTtTUw==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.32.0.tgz", + "integrity": "sha512-B8WUMcByYAH9500ENejDCATOmEZhqjtS9wsfiQ3BNa+s+yAynY8SESI8WWHhSqUmjd0pmCSFRP6BOUGSda3QXA==", "requires": { - "@tanstack/query-core": "4.29.19", + "@tanstack/query-core": "4.32.0", "use-sync-external-store": "^1.2.0" } }, "@tanstack/react-query-devtools": { - "version": "4.29.19", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.29.19.tgz", - "integrity": "sha512-rL2xqTPr+7gJvVGwyq8E8CWqqw950N4lZ6ffJeNX0qqymKHxHW1FM6nZaYt7Aufs/bXH0m1L9Sj3kDGQbp0rwg==", + "version": "4.32.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.32.0.tgz", + "integrity": "sha512-rOmWqzKzRmQrQULV5Ova2FGEEPT76FZA3hz8T+LFkvp3ehw9ugSZ1BosgRJ7AFCeir+5pcNvFwILy4pDK8HpRw==", "requires": { "@tanstack/match-sorter-utils": "^8.7.0", "superjson": "^1.10.0", @@ -60742,9 +60431,9 @@ } }, "@tensorflow/tfjs-backend-cpu": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.8.0.tgz", - "integrity": "sha512-kT4WZeM4cuuZ+dSCMatrC9YiqV4dxpFzjxKOKwdS41gdg5QKQGW7caScCe55thO/Xpp7VOJXncDYeaMH7GcxCA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-4.9.0.tgz", + "integrity": "sha512-AHIfI3iD1fyQgQKeoQmtkI3exPWRfOo+W0Ws/bxOdapTXcAYWGg0179t52j8XPDwsl8WopfaTINNgYNG6FnP3Q==", "peer": true, "requires": { "@types/seedrandom": "^2.4.28", @@ -60752,12 +60441,12 @@ } }, "@tensorflow/tfjs-backend-webgl": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.8.0.tgz", - "integrity": "sha512-iAJzQbndBtarV+OWk9Ukur5U0Xk/4t7j7O5WhPQO/q9yuRyWjAT6MPaCEW/+Ew4XC8yJGuvlfL0Oqi1X0drvfA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.9.0.tgz", + "integrity": "sha512-lSEOjR9zi6vb1V9yhrby8jWt6SS+wWBXRa3sDE5GCbpcHMWHv41wZktB2WQyIXDqJQcw1lRZBDoYneibMqr2uQ==", "peer": true, "requires": { - "@tensorflow/tfjs-backend-cpu": "4.8.0", + "@tensorflow/tfjs-backend-cpu": "4.9.0", "@types/offscreencanvas": "~2019.3.0", "@types/seedrandom": "^2.4.28", "@types/webgl-ext": "0.0.30", @@ -60765,16 +60454,16 @@ } }, "@tensorflow/tfjs-converter": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.8.0.tgz", - "integrity": "sha512-tBYsCdhdFNlFFn4FO49gr1yLX4h8xDxpoFI70lFECxDu9UfwaHNVuBLcocMx4XIFqQx12h6/Y3pD93HFvoum3A==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.9.0.tgz", + "integrity": "sha512-mRlzdG3jVsxMkFfHFgDNY10HMoh+vtfPPIghtY+Fc4U/ZnBUFvSfZqwEFyXfOJAewn4fY4BX8+6RE4a0kRXqGA==", "peer": true, "requires": {} }, "@tensorflow/tfjs-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-4.8.0.tgz", - "integrity": "sha512-EkgGOAsPQSlpEdiG938c92pdC5i8GHeBVk6xO1AKKX8NiMSIruKtKqIQvX2aOkarwHy/5nhrJebAAvIL4dJlbw==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-4.9.0.tgz", + "integrity": "sha512-1nYs9OA934eSI33eTvyCVJUEji2wnMXyZ3VK7l2iS/TPDFISI3ETyh286mW56LCihoniv8HH2MtOAQwo4Qhrdg==", "peer": true, "requires": { "@types/long": "^4.0.1", @@ -61350,9 +61039,7 @@ "integrity": "sha512-AnxLHewubLVzoF/A4qdxBGHCKifw8cY32iro3DQX9TPcetE95zBeVt3jnsvtvAUf1vwzMfwzp4t/L2yqPlnjkQ==" }, "@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "version": "7.3.13", "dev": true, "peer": true }, @@ -61458,28 +61145,23 @@ "version": "21.0.0" }, "@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "5.45.0", "dev": true, "peer": true, "requires": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/type-utils": "5.45.0", + "@typescript-eslint/utils": "5.45.0", "debug": "^4.3.4", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", + "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "peer": true, "requires": { @@ -61487,9 +61169,7 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.3.8", "dev": true, "peer": true, "requires": { @@ -61500,8 +61180,6 @@ }, "@typescript-eslint/experimental-utils": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", "dev": true, "peer": true, "requires": { @@ -61515,8 +61193,6 @@ "dependencies": { "@typescript-eslint/scope-manager": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", "dev": true, "peer": true, "requires": { @@ -61526,15 +61202,11 @@ }, "@typescript-eslint/types": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", "dev": true, "peer": true }, "@typescript-eslint/typescript-estree": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", "dev": true, "peer": true, "requires": { @@ -61549,8 +61221,6 @@ }, "@typescript-eslint/visitor-keys": { "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", "dev": true, "peer": true, "requires": { @@ -61560,8 +61230,6 @@ }, "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "peer": true, "requires": { @@ -61569,9 +61237,7 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.3.8", "dev": true, "peer": true, "requires": { @@ -61581,58 +61247,48 @@ } }, "@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "5.45.0", "dev": true, "peer": true, "requires": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/typescript-estree": "5.45.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "5.45.0", "dev": true, "peer": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/visitor-keys": "5.45.0" } }, "@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "5.45.0", "dev": true, "peer": true, "requires": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", + "@typescript-eslint/typescript-estree": "5.45.0", + "@typescript-eslint/utils": "5.45.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "5.45.0", "dev": true, "peer": true }, "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "5.45.0", "dev": true, "peer": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/visitor-keys": "5.45.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -61642,8 +61298,6 @@ "dependencies": { "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "peer": true, "requires": { @@ -61651,9 +61305,7 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.3.8", "dev": true, "peer": true, "requires": { @@ -61663,26 +61315,22 @@ } }, "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "5.45.0", "dev": true, "peer": true, "requires": { - "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/scope-manager": "5.45.0", + "@typescript-eslint/types": "5.45.0", + "@typescript-eslint/typescript-estree": "5.45.0", "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "dependencies": { "lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "peer": true, "requires": { @@ -61690,9 +61338,7 @@ } }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.3.8", "dev": true, "peer": true, "requires": { @@ -61702,29 +61348,25 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "5.45.0", "dev": true, "peer": true, "requires": { - "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/types": "5.45.0", "eslint-visitor-keys": "^3.3.0" }, "dependencies": { "eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.3.0", "dev": true, "peer": true } } }, "@typescript/lib-dom": { - "version": "npm:@types/web@0.0.105", - "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.105.tgz", - "integrity": "sha512-pPMlsJ5ue1DF9zvcLVTCWGoXCcrF9bOfJjVXlm052Ejd/87VY7CSn6mOlANOYTeocngnmu5uzEs0fOXLn16NZw==" + "version": "npm:@types/web@0.0.111", + "resolved": "https://registry.npmjs.org/@types/web/-/web-0.0.111.tgz", + "integrity": "sha512-OnLWZBNMXlvTsAalsPcVyVkxW76yG2QQsRPbRijMQxCG791IH9sAIAsg1tcDDK8p5JwHW0GV3/uYOg+RRqGrOw==" }, "@webassemblyjs/ast": { "version": "1.11.5", @@ -61997,9 +61639,9 @@ } }, "@xmldom/xmldom": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.9.tgz", - "integrity": "sha512-4VSbbcMoxc4KLjb1gs96SRmi7w4h1SF+fCoiK0XaQX62buCc1G5d0DC5bJ9xJBNPDSVCmIrcl8BiYxzjrqaaJA==" + "version": "0.8.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", + "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==" }, "@xtuc/ieee754": { "version": "1.2.0", @@ -62326,9 +61968,7 @@ "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==" }, "array-find": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-find/-/array-find-1.0.0.tgz", - "integrity": "sha512-kO/vVCacW9mnpn3WPWbTVlEnOabK2L7LWi2HViURtCM46y1zb6I8UMjx4LgbiqadTgHnLInUronwn3ampNTJtQ==" + "version": "1.0.0" }, "array-find-index": { "version": "1.0.2", @@ -62347,8 +61987,6 @@ }, "array-includes": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -62370,8 +62008,6 @@ }, "array.prototype.flat": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -62381,8 +62017,6 @@ }, "array.prototype.flatmap": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -62416,8 +62050,6 @@ }, "array.prototype.tosorted": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -62578,6 +62210,7 @@ }, "axios": { "version": "0.21.4", + "dev": true, "requires": { "follow-redirects": "^1.14.0" } @@ -62844,6 +62477,16 @@ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "requires": {} }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -64807,9 +64450,7 @@ } }, "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" + "version": "1.0.11" }, "connect-history-api-fallback": { "version": "1.6.0", @@ -65131,6 +64772,16 @@ "unique-filename": "^1.1.1" } }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -65210,9 +64861,7 @@ } }, "core-js-pure": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.31.1.tgz", - "integrity": "sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw==" + "version": "3.26.1" }, "core-util-is": { "version": "1.0.3" @@ -67055,8 +66704,6 @@ }, "enhanced-resolve": { "version": "0.9.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz", - "integrity": "sha512-kxpoMgrdtkXZ5h0SeraBS1iRntpTpQ3R8ussdb38+UAFnMGX5DDyJXePm+OCHOcoXvHDw7mc2erbJBpDnl7TPw==", "requires": { "graceful-fs": "^4.1.2", "memory-fs": "^0.2.0", @@ -67184,16 +66831,12 @@ }, "es-shim-unscopables": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", "requires": { "has": "^1.0.3" } }, "es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -67443,8 +67086,6 @@ }, "eslint-config-airbnb-base": { "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", "requires": { "confusing-browser-globals": "^1.0.10", "object.assign": "^4.1.2", @@ -67458,14 +67099,10 @@ }, "eslint-config-prettier": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz", - "integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==", "requires": {} }, "eslint-formatter-pretty": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", - "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", "requires": { "@types/eslint": "^7.2.13", "ansi-escapes": "^4.2.1", @@ -67479,16 +67116,12 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -67496,26 +67129,18 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "version": "1.1.4" }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "version": "4.0.0" }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -67523,19 +67148,14 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.6", "requires": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "resolve": "^1.20.0" }, "dependencies": { "debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } @@ -67558,8 +67178,6 @@ }, "eslint-import-resolver-webpack": { "version": "0.13.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-webpack/-/eslint-import-resolver-webpack-0.13.2.tgz", - "integrity": "sha512-XodIPyg1OgE2h5BDErz3WJoK7lawxKTJNhgPNafRST6csC/MZC+L5P6kKqsZGRInpbgc02s/WZMrb4uGJzcuRg==", "requires": { "array-find": "^1.0.0", "debug": "^3.2.7", @@ -67576,16 +67194,12 @@ "dependencies": { "debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } }, "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + "version": "5.7.1" } } }, @@ -67624,6 +67238,18 @@ "peer": true, "requires": {} }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "peer": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -67687,17 +67313,13 @@ } }, "eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.7.4", "requires": { "debug": "^3.2.7" }, "dependencies": { "debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "requires": { "ms": "^2.1.1" } @@ -67714,45 +67336,131 @@ "@typescript-eslint/utils": "^5.57.0", "tslib": "^2.3.1", "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "peer": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + } + }, + "@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "peer": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "peer": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "peer": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "peer": true, + "requires": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "peer": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "peer": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "peer": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.26.0", "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", "has": "^1.0.3", - "is-core-module": "^2.11.0", + "is-core-module": "^2.8.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", + "object.values": "^1.1.5", + "resolve": "^1.22.0", "tsconfig-paths": "^3.14.1" }, "dependencies": { "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "version": "2.6.9", "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } }, "doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "requires": { "esutils": "^2.0.2" } + }, + "ms": { + "version": "2.0.0" } } }, @@ -67768,8 +67476,6 @@ }, "eslint-plugin-jest-dom": { "version": "3.9.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-3.9.4.tgz", - "integrity": "sha512-VRkaALGIhyxinnewZFHe2WJsRWp3TONpXysVXK1IUNJHCpJAIM9yRrI7fQ8i5F6UYE7+DAnvNhSSJZesLTonug==", "dev": true, "peer": true, "requires": { @@ -67780,8 +67486,6 @@ "dependencies": { "@testing-library/dom": { "version": "7.31.2", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", - "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", "dev": true, "peer": true, "requires": { @@ -67797,8 +67501,6 @@ }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "peer": true, "requires": { @@ -67807,8 +67509,6 @@ }, "aria-query": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "peer": true, "requires": { @@ -67818,8 +67518,6 @@ }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "peer": true, "requires": { @@ -67829,8 +67527,6 @@ }, "color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "peer": true, "requires": { @@ -67839,22 +67535,16 @@ }, "color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "peer": true }, "has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "peer": true }, "pretty-format": { "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", "dev": true, "peer": true, "requires": { @@ -67873,8 +67563,6 @@ }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "peer": true, "requires": { @@ -67903,16 +67591,12 @@ }, "eslint-plugin-prettier": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", + "version": "7.31.11", "requires": { "array-includes": "^3.1.6", "array.prototype.flatmap": "^1.3.1", @@ -67926,23 +67610,19 @@ "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.3", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.8" }, "dependencies": { "doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "requires": { "esutils": "^2.0.2" } }, "resolve": { "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", "requires": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", @@ -67953,8 +67633,6 @@ }, "eslint-plugin-react-hooks": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", "requires": {} }, "eslint-plugin-simple-import-sort": { @@ -67965,8 +67643,6 @@ }, "eslint-plugin-testing-library": { "version": "4.12.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-4.12.4.tgz", - "integrity": "sha512-XZtoeyIZKFTiH8vhwnCaTo/mNrLHoLyufY4kkNg+clzZFeThWPjp+0QfrLam1on1k3JGwiRvoLH/V4QdBaB2oA==", "dev": true, "peer": true, "requires": { @@ -67974,9 +67650,7 @@ } }, "eslint-rule-docs": { - "version": "1.1.235", - "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz", - "integrity": "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==" + "version": "1.1.235" }, "eslint-scope": { "version": "5.1.1", @@ -67992,8 +67666,6 @@ }, "eslint-utils": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "peer": true, "requires": { @@ -68545,9 +68217,7 @@ "version": "3.1.3" }, "fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + "version": "1.2.0" }, "fast-glob": { "version": "3.3.0", @@ -68781,19 +68451,84 @@ } }, "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "requires": { "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } } }, "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "version": "1.1.0" }, "find-up": { "version": "5.0.0", @@ -69253,8 +68988,6 @@ }, "function.prototype.name": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", @@ -69401,8 +69134,6 @@ }, "get-symbol-description": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" @@ -69714,13 +69445,6 @@ "graceful-fs": { "version": "4.2.10" }, - "graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "peer": true - }, "growly": { "version": "1.3.0", "dev": true, @@ -70919,9 +70643,7 @@ } }, "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "version": "1.4.0" }, "invariant": { "version": "2.2.4", @@ -71124,9 +70846,7 @@ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" }, "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "version": "2.0.2" }, "is-number": { "version": "7.0.0" @@ -71191,8 +70911,6 @@ }, "is-shared-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "requires": { "call-bind": "^1.0.2" } @@ -71253,8 +70971,6 @@ }, "is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "requires": { "call-bind": "^1.0.2" } @@ -73443,14 +73159,10 @@ } }, "jsx-ast-utils": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz", - "integrity": "sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw==", + "version": "3.3.3", "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" + "array-includes": "^3.1.5", + "object.assign": "^4.1.3" } }, "junk": { @@ -74364,9 +74076,7 @@ } }, "memory-fs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.2.0.tgz", - "integrity": "sha512-+y4mDxU4rvXXu5UDSGCGNiesFmwCHuefGMoPCO1WYucNYj7DsLqrFaa2fXVI0H+NNiPTwwzKwspn9yTZqUGqng==" + "version": "0.2.0" }, "memory-web-storage": { "version": "0.1.0", @@ -74713,9 +74423,9 @@ } }, "mobx": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.9.1.tgz", - "integrity": "sha512-7V41hvBmzCQg5n/xoZi2qkhREbnF3wHbzbIdR1sLJhVt6yWq2Zq0FlNahEt/RccOmEIjipvBqeQ4mlOEyMhaaA==" + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.10.0.tgz", + "integrity": "sha512-WMbVpCMFtolbB8swQ5E2YRrU+Yu8iLozCVx3CdGjbBKlP7dFiCSuiG06uea3JCFN5DnvtAX7+G5Bp82e2xu0ww==" }, "mobx-persist-store": { "version": "1.1.2", @@ -74883,8 +74593,6 @@ }, "natural-compare-lite": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true, "peer": true }, @@ -76101,8 +75809,6 @@ }, "object.entries": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -76111,8 +75817,6 @@ }, "object.fromentries": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -76133,8 +75837,6 @@ }, "object.hasown": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", "requires": { "define-properties": "^1.1.4", "es-abstract": "^1.20.4" @@ -76148,8 +75850,6 @@ }, "object.values": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -77886,8 +77586,6 @@ }, "prettier-linter-helpers": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "requires": { "fast-diff": "^1.1.2" } @@ -78025,8 +77723,6 @@ }, "prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -78597,9 +78293,9 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "react-joyride": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.5.4.tgz", - "integrity": "sha512-CLV1Ju79iRKIP/KqsEX05nSxMBzT41BhPAyNrTdBQWEYAkpyo6iiCPelk6No2W8iPgw373JKk2cK7AQ5Q3lFew==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-joyride/-/react-joyride-2.5.5.tgz", + "integrity": "sha512-/esW9IcsuQJr4NcRZJUH8UYYTvB/yzVC0IyElopbjMFYPw3aylSny91QO3mQRRKPQJUqYa6wREOtQpsaLbu9fw==", "requires": { "deepmerge": "^4.3.1", "exenv": "^1.2.2", @@ -78608,7 +78304,7 @@ "react-floater": "^0.7.6", "react-is": "^16.13.1", "scroll": "^3.0.1", - "scrollparent": "^2.0.1", + "scrollparent": "^2.1.0", "tree-changes": "^0.9.2" }, "dependencies": { @@ -79750,8 +79446,6 @@ }, "requireindex": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", "dev": true, "peer": true }, @@ -79945,9 +79639,9 @@ "version": "4.8.5" }, "rudder-sdk-js": { - "version": "2.37.0", - "resolved": "https://registry.npmjs.org/rudder-sdk-js/-/rudder-sdk-js-2.37.0.tgz", - "integrity": "sha512-CyHoEJX9lHXZiQ1Mu5WqizkctFCpRagWio3mPhhqTDDMxDRdZow0p9UFXLOCCMpdkNmwcjakqk1nZWeeWwBqzQ==" + "version": "2.37.1", + "resolved": "https://registry.npmjs.org/rudder-sdk-js/-/rudder-sdk-js-2.37.1.tgz", + "integrity": "sha512-L9WS95Vll2PwKZ6QnYUs4m1ev/FoWuX2W1syApvPNcpd5Efs+WaDjvyyJTA2GqWH7WUr9/+ZR90TtZdhTT6vRg==" }, "run-async": { "version": "2.4.1", @@ -80003,8 +79697,6 @@ }, "safe-regex-test": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "requires": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", @@ -80433,45 +80125,6 @@ } } }, - "sendbird": { - "version": "3.0.160", - "resolved": "https://registry.npmjs.org/sendbird/-/sendbird-3.0.160.tgz", - "integrity": "sha512-47ljPMszDJLdmYX3kOfpvnK/tPVPaw3UnvtpmYvJo5+yq1SqJFAm7o6Dbcs+cYHfalUGRNcaEU+rDUBo8993+Q==", - "requires": { - "agentkeepalive": "4.1.4", - "axios": "^0.21.4", - "form-data": "^4.0.0", - "ws": "^7.5.5" - }, - "dependencies": { - "agentkeepalive": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.1.4.tgz", - "integrity": "sha512-+V/rGa3EuU74H6wR04plBb7Ks10FbtUQgRj/FQOG7uUIEuaINI+AiqJR1k6t3SVNs7o7ZjIdus6706qqzVq8jQ==", - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" - } - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} - } - } - }, "serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", @@ -81456,8 +81109,6 @@ }, "string.prototype.matchall": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -81501,8 +81152,6 @@ }, "string.prototype.trimend": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -81511,8 +81160,6 @@ }, "string.prototype.trimstart": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -81945,9 +81592,9 @@ } }, "superjson": { - "version": "1.12.4", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.12.4.tgz", - "integrity": "sha512-vkpPQAxdCg9SLfPv5GPC5fnGrui/WryktoN9O5+Zif/14QIMjw+RITf/5LbBh+9QpBFb3KNvJth+puz2H8o6GQ==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.13.1.tgz", + "integrity": "sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==", "requires": { "copy-anything": "^3.0.2" } @@ -82333,9 +81980,7 @@ } }, "tapable": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz", - "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==" + "version": "0.1.10" }, "tar": { "version": "6.1.11", @@ -82797,8 +82442,6 @@ }, "tsutils": { "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "peer": true, "requires": { @@ -82807,8 +82450,6 @@ "dependencies": { "tslib": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "peer": true } @@ -82897,8 +82538,6 @@ }, "unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "requires": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -84637,9 +84276,9 @@ } }, "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" + "version": "3.6.17", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.17.tgz", + "integrity": "sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==" }, "whatwg-mimetype": { "version": "3.0.0", diff --git a/package.json b/package.json index b3a8c784ee17..58e4f313b6a1 100644 --- a/package.json +++ b/package.json @@ -90,6 +90,7 @@ }, "dependencies": { "@babel/preset-typescript": "^7.16.5", + "@sendbird/chat": "^4.9.3", "@types/react-transition-group": "^4.4.4", "babel-jest": "^27.3.1", "dotenv": "^8.2.0", diff --git a/packages/account/package.json b/packages/account/package.json index 6feecfbc8024..4e8c7a4c4c3b 100644 --- a/packages/account/package.json +++ b/packages/account/package.json @@ -27,9 +27,10 @@ "deploy:production": "echo \"No deploy:production specified\"" }, "dependencies": { - "@binary-com/binary-document-uploader": "^2.4.7", + "@binary-com/binary-document-uploader": "^2.4.8", "@deriv/api-types": "^1.0.94", "@deriv/components": "^1.0.0", + "@deriv/hooks": "^1.0.0", "@deriv/shared": "^1.0.0", "@deriv/stores":"^1.0.0", "@deriv/translations": "^1.0.0", diff --git a/packages/account/src/Components/file-uploader-container/__tests__/file-uploader-container.spec.tsx b/packages/account/src/Components/file-uploader-container/__tests__/file-uploader-container.spec.tsx index 6f260a3817eb..f130d2324d37 100644 --- a/packages/account/src/Components/file-uploader-container/__tests__/file-uploader-container.spec.tsx +++ b/packages/account/src/Components/file-uploader-container/__tests__/file-uploader-container.spec.tsx @@ -30,6 +30,7 @@ describe('', () => { getSocket: jest.fn(), onFileDrop: jest.fn(), onRef: jest.fn(), + settings: {}, }; const file_size_msg = /less than 8mb/i; diff --git a/packages/account/src/Components/file-uploader-container/__tests__/file-uploader.spec.tsx b/packages/account/src/Components/file-uploader-container/__tests__/file-uploader.spec.tsx index af60693389b3..ea1245d225b4 100644 --- a/packages/account/src/Components/file-uploader-container/__tests__/file-uploader.spec.tsx +++ b/packages/account/src/Components/file-uploader-container/__tests__/file-uploader.spec.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { render, screen, fireEvent, waitFor } from '@testing-library/react'; -import { compressImageFiles, isMobile, isDesktop, readFiles } from '@deriv/shared'; +import { compressImageFiles, isMobile, isDesktop, readFiles, TSettings } from '@deriv/shared'; import FileUploader from '../file-uploader'; jest.mock('@deriv/shared', () => ({ @@ -24,10 +24,12 @@ describe('', () => { onFileDrop: (file: File | undefined) => void; getSocket: () => WebSocket; ref: React.RefObject; + settings: TSettings; } = { onFileDrop: jest.fn(), getSocket: jest.fn(), ref: React.createRef(), + settings: {}, }; const large_file_error_msg = /file size should be 8mb or less/i; diff --git a/packages/account/src/Components/file-uploader-container/file-uploader-container.tsx b/packages/account/src/Components/file-uploader-container/file-uploader-container.tsx index 4eb092584d22..de6375f07109 100644 --- a/packages/account/src/Components/file-uploader-container/file-uploader-container.tsx +++ b/packages/account/src/Components/file-uploader-container/file-uploader-container.tsx @@ -1,7 +1,7 @@ import React from 'react'; import classNames from 'classnames'; import { Icon, Text } from '@deriv/components'; -import { PlatformContext, isDesktop, WS } from '@deriv/shared'; +import { PlatformContext, isDesktop, WS, TSettings } from '@deriv/shared'; import { Localize, localize } from '@deriv/translations'; import FileUploader from './file-uploader'; import { TFile, TPlatformContext } from 'Types'; @@ -11,6 +11,7 @@ export type TFileUploaderContainer = { getSocket: () => WebSocket; onFileDrop: (file: TFile | undefined) => void; onRef: (ref: React.RefObject | undefined) => void; + settings: TSettings; }; const FileProperties = () => { @@ -49,6 +50,7 @@ const FileUploaderContainer = ({ getSocket, onFileDrop, onRef, + settings, }: TFileUploaderContainer) => { const { is_appstore } = React.useContext>(PlatformContext); const ref = React.useRef(); @@ -67,7 +69,7 @@ const FileUploaderContainer = ({
- +
@@ -130,7 +132,7 @@ const FileUploaderContainer = ({ 'account-poa__upload-file--dashboard': isDesktop() && is_appstore, })} > - + ); diff --git a/packages/account/src/Components/file-uploader-container/file-uploader.tsx b/packages/account/src/Components/file-uploader-container/file-uploader.tsx index 69d40bec4efb..4efefe6d25b1 100644 --- a/packages/account/src/Components/file-uploader-container/file-uploader.tsx +++ b/packages/account/src/Components/file-uploader-container/file-uploader.tsx @@ -10,6 +10,7 @@ import { getSupportedFiles, max_document_size, supported_filetypes, + TSettings, } from '@deriv/shared'; import { TFile } from 'Types'; @@ -34,8 +35,8 @@ const fileReadErrorMessage = (filename: string) => { const FileUploader = React.forwardRef< HTMLElement, - { onFileDrop: (file: TFile | undefined) => void; getSocket: () => WebSocket } ->(({ onFileDrop, getSocket }, ref) => { + { onFileDrop: (file: TFile | undefined) => void; getSocket: () => WebSocket; settings: TSettings } +>(({ onFileDrop, getSocket, settings = {} }, ref) => { const [document_file, setDocumentFile] = useStateCallback({ files: [], error_message: null }); const handleAcceptedFiles = (files: TFileObject[]) => { @@ -72,7 +73,7 @@ const FileUploader = React.forwardRef< return new Promise((resolve, reject) => { compressImageFiles(document_file.files) .then(files_to_process => { - readFiles(files_to_process, fileReadErrorMessage) + readFiles(files_to_process, fileReadErrorMessage, settings) .then(processed_files => { processed_files.forEach(file => { if (file.message) { diff --git a/packages/account/src/Components/poa/status/status-codes/status-codes.ts b/packages/account/src/Components/poa/status/status-codes/status-codes.ts index 913d00353861..8a44a987f1a2 100644 --- a/packages/account/src/Components/poa/status/status-codes/status-codes.ts +++ b/packages/account/src/Components/poa/status/status-codes/status-codes.ts @@ -1,6 +1,6 @@ -type TPoaStatusCodes = Readonly>; +import { TVerificationStatus } from 'Types'; -export const poa_status_codes: TPoaStatusCodes = { +export const poa_status_codes: TVerificationStatus = { none: 'none', pending: 'pending', rejected: 'rejected', diff --git a/packages/account/src/Components/poi-poa-docs-submitted/poi-poa-docs-submitted.tsx b/packages/account/src/Components/poi-poa-docs-submitted/poi-poa-docs-submitted.tsx index 8cee4c674c0e..65c6ff92f3b4 100644 --- a/packages/account/src/Components/poi-poa-docs-submitted/poi-poa-docs-submitted.tsx +++ b/packages/account/src/Components/poi-poa-docs-submitted/poi-poa-docs-submitted.tsx @@ -41,14 +41,12 @@ const PoiPoaDocsSubmitted = ({ }; const getDescription = () => { - const { manual_status, poi_verified_for_vanuatu_maltainvest, poi_verified_for_bvi_labuan, poa_pending } = + const { manual_status, poi_verified_for_maltainvest, poi_verified_for_bvi_labuan_vanuatu, poa_pending } = getAuthenticationStatusInfo(account_status); - const is_vanuatu_or_maltainvest_selected = [Jurisdiction.VANUATU, Jurisdiction.MALTA_INVEST].includes( - jurisdiction_selected_shortcode - ); + const is_maltainvest_selected = jurisdiction_selected_shortcode === Jurisdiction.MALTA_INVEST; if ( - (is_vanuatu_or_maltainvest_selected && poi_verified_for_vanuatu_maltainvest && poa_pending) || - (!is_vanuatu_or_maltainvest_selected && poi_verified_for_bvi_labuan && poa_pending) || + (is_maltainvest_selected && poi_verified_for_maltainvest && poa_pending) || + (!is_maltainvest_selected && poi_verified_for_bvi_labuan_vanuatu && poa_pending) || manual_status === 'pending' ) { return localize('We’ll review your documents and notify you of its status within 1 - 3 working days.'); diff --git a/packages/account/src/Components/poi/status/unsupported/detail-component.tsx b/packages/account/src/Components/poi/status/unsupported/detail-component.tsx index 15d02741ddb9..1405cd64e982 100644 --- a/packages/account/src/Components/poi/status/unsupported/detail-component.tsx +++ b/packages/account/src/Components/poi/status/unsupported/detail-component.tsx @@ -85,6 +85,7 @@ const DetailComponent = ({ expirationDate: expiration_date, documentId: data.document_id || '', lifetimeValid: +(lifetime_valid && !expiration_date), + document_issuing_country: country_code_key, }) .then(response => { file_to_upload_index += 1; diff --git a/packages/account/src/Sections/Verification/ProofOfIdentity/proof-of-identity-container-for-mt5.jsx b/packages/account/src/Sections/Verification/ProofOfIdentity/proof-of-identity-container-for-mt5.jsx index eb9da4c642c9..a931df72d4cc 100644 --- a/packages/account/src/Sections/Verification/ProofOfIdentity/proof-of-identity-container-for-mt5.jsx +++ b/packages/account/src/Sections/Verification/ProofOfIdentity/proof-of-identity-container-for-mt5.jsx @@ -20,8 +20,7 @@ const ProofOfIdentityContainerForMt5 = ({ onStateChange, refreshNotifications, citizen_data, - jurisdiction_selected_shortcode, - updateAccountStatus, + is_eu_user, }) => { const [api_error, setAPIError] = React.useState(); const [residence_list, setResidenceList] = React.useState(); @@ -88,9 +87,8 @@ const ProofOfIdentityContainerForMt5 = ({ residence_list={residence_list} citizen_data={citizen_data} has_idv_error={has_idv_error} - jurisdiction_selected_shortcode={jurisdiction_selected_shortcode} getChangeableFields={getChangeableFields} - updateAccountStatus={updateAccountStatus} + is_eu_user={is_eu_user} /> ); }; diff --git a/packages/account/src/Sections/Verification/ProofOfIdentity/proof-of-identity-submission-for-mt5.jsx b/packages/account/src/Sections/Verification/ProofOfIdentity/proof-of-identity-submission-for-mt5.jsx index 821e6b2094e3..f724b2988c46 100644 --- a/packages/account/src/Sections/Verification/ProofOfIdentity/proof-of-identity-submission-for-mt5.jsx +++ b/packages/account/src/Sections/Verification/ProofOfIdentity/proof-of-identity-submission-for-mt5.jsx @@ -1,6 +1,6 @@ /* eslint-disable react-hooks/exhaustive-deps */ import React from 'react'; -import { WS, Jurisdiction, IDV_NOT_APPLICABLE_OPTION } from '@deriv/shared'; +import { WS, isVerificationServiceSupported, IDV_NOT_APPLICABLE_OPTION } from '@deriv/shared'; import Unsupported from 'Components/poi/status/unsupported'; import OnfidoUpload from './onfido-sdk-view-container'; import { identity_status_codes, submission_status_code, service_code } from './proof-of-identity-utils'; @@ -18,7 +18,8 @@ const POISubmissionForMT5 = ({ refreshNotifications, citizen_data, has_idv_error, - jurisdiction_selected_shortcode, + residence_list, + is_eu_user, }) => { const [submission_status, setSubmissionStatus] = React.useState(); // submitting const [submission_service, setSubmissionService] = React.useState(); @@ -26,14 +27,9 @@ const POISubmissionForMT5 = ({ if (citizen_data) { const { submissions_left: idv_submissions_left } = idv; const { submissions_left: onfido_submissions_left } = onfido; - const is_idv_supported = citizen_data.identity.services.idv.is_country_supported; - const is_onfido_supported = citizen_data.identity.services.onfido.is_country_supported; - if ( - is_idv_supported && - Number(idv_submissions_left) > 0 && - !is_idv_disallowed && - jurisdiction_selected_shortcode !== Jurisdiction.VANUATU - ) { + const is_idv_supported = isVerificationServiceSupported(residence_list, account_settings, 'idv'); + const is_onfido_supported = isVerificationServiceSupported(residence_list, account_settings, 'onfido'); + if (is_idv_supported && Number(idv_submissions_left) > 0 && !is_idv_disallowed && !is_eu_user) { setSubmissionService(service_code.idv); } else if (onfido_submissions_left > 0 && is_onfido_supported) { setSubmissionService(service_code.onfido); diff --git a/packages/account/src/Sections/Verification/ProofOfOwnership/__test__/proof-of-ownership-form.spec.js b/packages/account/src/Sections/Verification/ProofOfOwnership/__test__/proof-of-ownership-form.spec.js index 47d6991b8b11..b26bda1e2ff1 100644 --- a/packages/account/src/Sections/Verification/ProofOfOwnership/__test__/proof-of-ownership-form.spec.js +++ b/packages/account/src/Sections/Verification/ProofOfOwnership/__test__/proof-of-ownership-form.spec.js @@ -12,6 +12,7 @@ describe('proof-of-ownership-form.jsx', () => { refreshNotifications={jest.fn()} is_dark_mode={false} client_email={'test@testing.com'} + citizen='id' /> ); const cardItems = screen.getAllByRole('card-item'); @@ -25,6 +26,7 @@ describe('proof-of-ownership-form.jsx', () => { refreshNotifications={jest.fn()} is_dark_mode={false} client_email={'test@testing.com'} + citizen='id' /> ); const cardItems = screen.getAllByRole('card-item'); @@ -38,6 +40,7 @@ describe('proof-of-ownership-form.jsx', () => { refreshNotifications={jest.fn()} is_dark_mode={false} client_email={'test@testing.com'} + citizen='id' /> ); const poo_dropdown_button = await screen.findByTestId('dt_proof-of-ownership-button'); diff --git a/packages/account/src/Sections/Verification/ProofOfOwnership/__test__/proof-of-ownership.spec.js b/packages/account/src/Sections/Verification/ProofOfOwnership/__test__/proof-of-ownership.spec.js index 6bf1b94608e2..121fabf2f3bb 100644 --- a/packages/account/src/Sections/Verification/ProofOfOwnership/__test__/proof-of-ownership.spec.js +++ b/packages/account/src/Sections/Verification/ProofOfOwnership/__test__/proof-of-ownership.spec.js @@ -25,6 +25,9 @@ describe('proof-of-ownership.jsx', () => { ownership: { requests: [], status: 'none' }, }, }, + account_settings: { + citizen: 'id', + }, }, }); render(); @@ -40,6 +43,9 @@ describe('proof-of-ownership.jsx', () => { ownership: { requests: [], status: 'verified' }, }, }, + account_settings: { + citizen: 'id', + }, }, }); render(); @@ -55,6 +61,9 @@ describe('proof-of-ownership.jsx', () => { ownership: { requests: [], status: 'pending' }, }, }, + account_settings: { + citizen: 'id', + }, }, }); render(); @@ -70,6 +79,9 @@ describe('proof-of-ownership.jsx', () => { ownership: { requests: [], status: 'rejected' }, }, }, + account_settings: { + citizen: 'id', + }, }, }); render(); @@ -86,6 +98,9 @@ describe('proof-of-ownership.jsx', () => { needs_verification: ['ownership'], }, }, + account_settings: { + citizen: 'id', + }, }, }); render(); diff --git a/packages/account/src/Sections/Verification/ProofOfOwnership/proof-of-ownership-form.jsx b/packages/account/src/Sections/Verification/ProofOfOwnership/proof-of-ownership-form.jsx index 5f3b310f4085..12157b2f0198 100644 --- a/packages/account/src/Sections/Verification/ProofOfOwnership/proof-of-ownership-form.jsx +++ b/packages/account/src/Sections/Verification/ProofOfOwnership/proof-of-ownership-form.jsx @@ -283,6 +283,7 @@ ProofOfOwnershipForm.propTypes = { grouped_payment_method_data: PropTypes.object, refreshNotifications: PropTypes.func, updateAccountStatus: PropTypes.func, + citizen: PropTypes.string, }; export default ProofOfOwnershipForm; diff --git a/packages/account/src/Sections/Verification/ProofOfOwnership/proof-of-ownership.jsx b/packages/account/src/Sections/Verification/ProofOfOwnership/proof-of-ownership.jsx index b0ce9a0cde8d..ab6ddc34bdd3 100644 --- a/packages/account/src/Sections/Verification/ProofOfOwnership/proof-of-ownership.jsx +++ b/packages/account/src/Sections/Verification/ProofOfOwnership/proof-of-ownership.jsx @@ -14,6 +14,8 @@ export const ProofOfOwnership = observer(() => { const { is_dark_mode_on: is_dark_mode } = ui; const cards = account_status?.authentication?.ownership?.requests; const [status, setStatus] = useState(POO_STATUSES.none); + const citizen = client?.account_settings?.citizen || client?.account_settings?.country_code; + const grouped_payment_method_data = React.useMemo(() => { const groups = {}; const payment_methods_config = getPaymentMethodsConfig(); @@ -50,6 +52,7 @@ export const ProofOfOwnership = observer(() => { updateAccountStatus={updateAccountStatus} refreshNotifications={refreshNotifications} client_email={client_email} + citizen={citizen} /> ); // Proof of ownership is required. } diff --git a/packages/account/src/Types/common-prop.type.ts b/packages/account/src/Types/common-prop.type.ts index b964c0e584f6..204e11a8985e 100644 --- a/packages/account/src/Types/common-prop.type.ts +++ b/packages/account/src/Types/common-prop.type.ts @@ -149,3 +149,7 @@ export type TPersonalDetailsForm = { } & FormikProps; export type TInputFieldValues = Record; + +export type TVerificationStatus = Readonly< + Record<'none' | 'pending' | 'rejected' | 'verified' | 'expired' | 'suspected', string> +>; diff --git a/packages/appstore/src/components/cfds-listing/cfds-listing.scss b/packages/appstore/src/components/cfds-listing/cfds-listing.scss index 1ce3319d8701..a48de9048fe3 100644 --- a/packages/appstore/src/components/cfds-listing/cfds-listing.scss +++ b/packages/appstore/src/components/cfds-listing/cfds-listing.scss @@ -3,12 +3,12 @@ display: flex; flex-direction: column; @include desktop { - overflow: scroll; + overflow: auto; } } &__scrollable-content { @include desktop { - overflow: scroll; + overflow: auto; } } &__footer-content { @@ -449,6 +449,9 @@ &__spec-text { font-family: 'Courier', monospace; overflow: hidden; + &-broker { + text-align: right; + } } &__download-center { border-top: 2px solid var(--general-section-1); diff --git a/packages/appstore/src/components/cfds-listing/index.tsx b/packages/appstore/src/components/cfds-listing/index.tsx index f70705787c46..2b2986b48f75 100644 --- a/packages/appstore/src/components/cfds-listing/index.tsx +++ b/packages/appstore/src/components/cfds-listing/index.tsx @@ -1,18 +1,18 @@ import React from 'react'; +import { observer } from 'mobx-react-lite'; import { Text, StaticUrl } from '@deriv/components'; +import { isMobile, formatMoney, getAuthenticationStatusInfo, Jurisdiction } from '@deriv/shared'; import { localize, Localize } from '@deriv/translations'; import ListingContainer from 'Components/containers/listing-container'; -import './cfds-listing.scss'; -import { useStores } from 'Stores/index'; -import { observer } from 'mobx-react-lite'; import AddOptionsAccount from 'Components/add-options-account'; -import { isMobile, formatMoney } from '@deriv/shared'; import TradingAppCard from 'Components/containers/trading-app-card'; -import { AvailableAccount, TDetailsOfEachMT5Loginid } from 'Types'; import PlatformLoader from 'Components/pre-loader/platform-loader'; import GetMoreAccounts from 'Components/get-more-accounts'; import { Actions } from 'Components/containers/trading-app-card-actions'; import { getHasDivider } from 'Constants/utils'; +import { useStores } from 'Stores/index'; +import { AvailableAccount, TDetailsOfEachMT5Loginid } from 'Types'; +import './cfds-listing.scss'; type TDetailedExistingAccount = AvailableAccount & TDetailsOfEachMT5Loginid & @@ -55,18 +55,57 @@ const CFDsListing = () => { } = traders_hub; const { toggleCompareAccountsModal, setAccountType } = cfd; - const { is_landing_company_loaded, real_account_creation_unlock_date } = client; + const { is_landing_company_loaded, real_account_creation_unlock_date, account_status } = client; const { setAppstorePlatform } = common; const { openDerivRealAccountNeededModal, setShouldShowCooldownModal } = ui; const has_no_real_account = !has_any_real_account; const accounts_sub_text = !is_eu_user || is_demo_low_risk ? localize('Compare accounts') : localize('Account Information'); - const getMT5AccountAuthStatus = (current_acc_status: string) => { - if (current_acc_status === 'proof_failed') { - return 'failed'; - } else if (current_acc_status === 'verification_pending') { - return 'pending'; + const { poi_pending_for_bvi_labuan, poi_resubmit_for_bvi_labuan, poa_resubmit_for_labuan, is_idv_revoked } = + getAuthenticationStatusInfo(account_status); + + const getAuthStatus = (status_list: boolean[]) => status_list.some(status => status); + + const getMT5AccountAuthStatus = (current_acc_status: string, jurisdiction?: string) => { + if (jurisdiction) { + switch (jurisdiction) { + case Jurisdiction.BVI: { + if ( + getAuthStatus([ + is_idv_revoked, + poi_resubmit_for_bvi_labuan, + current_acc_status === 'proof_failed', + ]) + ) { + return 'failed'; + } else if ( + getAuthStatus([poi_pending_for_bvi_labuan, current_acc_status === 'verification_pending']) + ) { + return 'pending'; + } + return null; + } + case Jurisdiction.LABUAN: { + if ( + getAuthStatus([ + poa_resubmit_for_labuan, + is_idv_revoked, + poi_resubmit_for_bvi_labuan, + current_acc_status === 'proof_failed', + ]) + ) { + return 'failed'; + } else if ( + getAuthStatus([poi_pending_for_bvi_labuan, current_acc_status === 'verification_pending']) + ) { + return 'pending'; + } + return null; + } + default: + return null; + } } return null; }; @@ -137,12 +176,17 @@ const CFDsListing = () => { {is_landing_company_loaded ? ( - <> + {combined_cfd_mt5_accounts.map((existing_account: TDetailedExistingAccount, index: number) => { const list_size = combined_cfd_mt5_accounts.length; - const has_mt5_account_status = existing_account.status - ? getMT5AccountAuthStatus(existing_account.status) - : null; + const has_mt5_account_status = + existing_account.status || is_idv_revoked + ? getMT5AccountAuthStatus( + existing_account.status, + existing_account?.short_code_and_region?.toLowerCase() + ) + : null; + return ( { description={localize('Get more Deriv MT5 account with different type and jurisdiction.')} /> )} - + ) : ( )} diff --git a/packages/appstore/src/components/main-title-bar/__tests__/index.spec.tsx b/packages/appstore/src/components/main-title-bar/__tests__/index.spec.tsx new file mode 100644 index 000000000000..1525ed6aab21 --- /dev/null +++ b/packages/appstore/src/components/main-title-bar/__tests__/index.spec.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { StoreProvider, mockStore } from '@deriv/stores'; +import MainTitleBar from '..'; + +describe('MainTitleBar', () => { + const render_container = () => { + const mock = mockStore({}); + + const wrapper = ({ children }: { children: JSX.Element }) => ( + {children} + ); + + return render(, { + wrapper, + }); + }; + + it('should render the component', () => { + const { container } = render_container(); + expect(container).toBeInTheDocument(); + }); + + it('should render the correct title text', () => { + render_container(); + expect(screen.getByText(/Trader's Hub/)).toBeInTheDocument(); + }); + + it('should render the total assets text', () => { + render_container(); + expect(screen.getByText(/Total assets/)).toBeInTheDocument(); + }); +}); diff --git a/packages/appstore/src/components/main-title-bar/index.tsx b/packages/appstore/src/components/main-title-bar/index.tsx index ceeeb4e8304d..de0ea7fd2dd6 100644 --- a/packages/appstore/src/components/main-title-bar/index.tsx +++ b/packages/appstore/src/components/main-title-bar/index.tsx @@ -1,23 +1,25 @@ import React from 'react'; import { Text, DesktopWrapper, MobileWrapper, Tabs, Icon } from '@deriv/components'; import { ContentFlag } from '@deriv/shared'; +import { observer, useStore } from '@deriv/stores'; import AccountTypeDropdown from './account-type-dropdown'; import AssetSummary from './asset-summary'; import RegulatorSwitcher from './regulators-switcher'; import { localize } from '@deriv/translations'; import './main-title-bar.scss'; -import { observer } from 'mobx-react-lite'; -import { useStores } from 'Stores/index'; import RegulationsSwitcherLoader from 'Components/pre-loader/regulations-switcher-loader'; const MainTitleBar = () => { - const { traders_hub, client } = useStores(); + const { traders_hub, client } = useStore(); const { selected_region, handleTabItemClick, toggleRegulatorsCompareModal, content_flag } = traders_hub; const { is_landing_company_loaded, is_switching } = client; const is_low_risk_cr_real_account = content_flag === ContentFlag.LOW_RISK_CR_NON_EU || content_flag === ContentFlag.LOW_RISK_CR_EU; - const [active_index, setActiveIndex] = React.useState(selected_region === 'Non-EU' ? 0 : 1); + const [active_index, setActiveIndex] = React.useState(0); + React.useEffect(() => { + setActiveIndex(selected_region === 'Non-EU' ? 0 : 1); + }, [selected_region]); return ( diff --git a/packages/appstore/src/components/modals/failed-veriification-modal/failed-verification-modal.tsx b/packages/appstore/src/components/modals/failed-veriification-modal/failed-verification-modal.tsx index 9ec4d31bbcb9..3440bff2c4ef 100644 --- a/packages/appstore/src/components/modals/failed-veriification-modal/failed-verification-modal.tsx +++ b/packages/appstore/src/components/modals/failed-veriification-modal/failed-verification-modal.tsx @@ -66,7 +66,7 @@ const FailedVerificationModal = () => { const { disableApp, enableApp } = ui; const is_from_multipliers = open_failed_verification_for === 'multipliers'; - const { poi_resubmit_for_vanuatu_maltainvest, poi_resubmit_for_bvi_labuan, need_poa_resubmission } = + const { poi_resubmit_for_maltainvest, poi_resubmit_for_bvi_labuan_vanuatu, need_poa_resubmission } = getAuthenticationStatusInfo(account_status); const history = useHistory(); @@ -88,14 +88,10 @@ const FailedVerificationModal = () => { }; const should_resubmit_poi = () => { - if ( - is_from_multipliers || - open_failed_verification_for === 'vanuatu' || - open_failed_verification_for === 'maltainvest' - ) { - return poi_resubmit_for_vanuatu_maltainvest; + if (is_from_multipliers || open_failed_verification_for === 'maltainvest') { + return poi_resubmit_for_maltainvest; } - return poi_resubmit_for_bvi_labuan; + return poi_resubmit_for_bvi_labuan_vanuatu; }; const should_resubmit_poa = need_poa_resubmission; const from_account_label = is_from_multipliers ? localize('Multipliers') : localize('MT5'); diff --git a/packages/appstore/src/components/modals/regulators-compare-modal/regulators-compare-modal.tsx b/packages/appstore/src/components/modals/regulators-compare-modal/regulators-compare-modal.tsx index 01f3a7061b64..351e2364bd94 100644 --- a/packages/appstore/src/components/modals/regulators-compare-modal/regulators-compare-modal.tsx +++ b/packages/appstore/src/components/modals/regulators-compare-modal/regulators-compare-modal.tsx @@ -1,12 +1,11 @@ import React from 'react'; -import { observer } from 'mobx-react-lite'; -import { useStores } from 'Stores'; +import { observer, useStore } from '@deriv/stores'; import { localize } from '@deriv/translations'; import RegulatorsCompareModalContent from './regulators-compare-modal-content'; import { Modal, DesktopWrapper, MobileDialog, MobileWrapper, UILoader } from '@deriv/components'; const RegulatorsCompareModal = () => { - const { traders_hub, ui } = useStores(); + const { traders_hub, ui } = useStore(); const { is_regulators_compare_modal_visible, toggleRegulatorsCompareModal } = traders_hub; const { disableApp, enableApp } = ui; const closeModal = () => { diff --git a/packages/appstore/src/components/onboarding-new/__tests__/static-dashboard.spec.tsx b/packages/appstore/src/components/onboarding-new/__tests__/static-dashboard.spec.tsx new file mode 100644 index 000000000000..1b2ebf1886e3 --- /dev/null +++ b/packages/appstore/src/components/onboarding-new/__tests__/static-dashboard.spec.tsx @@ -0,0 +1,68 @@ +import React from 'react'; +import { ContentFlag } from '@deriv/shared'; +import { StoreProvider, mockStore } from '@deriv/stores'; +import { render, screen } from '@testing-library/react'; +import StaticDashboard, { TStaticDashboard } from '../static-dashboard'; + +describe('StaticDashboard', () => { + const render_container = (mock_store_override = {}) => { + const mock_store = mockStore(mock_store_override); + const wrapper = ({ children }: { children: JSX.Element }) => ( + {children} + ); + const mock_props: TStaticDashboard = { + is_blurry: { + icon: false, + item: false, + text: false, + get: false, + topup: false, + trade: false, + cfd_item: false, + cfd_text: false, + options_item: false, + options_text: false, + cfd_description: false, + options_description: false, + platformlauncher: false, + }, + is_onboarding_animated: { + text: false, + trade: false, + topup: false, + button: false, + get: false, + }, + }; + return render(, { + wrapper, + }); + }; + + it('should display the component', () => { + const { container } = render_container(); + expect(container).toBeInTheDocument(); + }); + + it('should display both CFDs and Multipliers section', () => { + render_container(); + const dashboard_sections = screen.getByTestId('dt_onboarding_dashboard'); + expect(dashboard_sections?.textContent?.match(/Multipliers/)).not.toBeNull(); + expect(dashboard_sections?.textContent?.match(/CFDs/)).not.toBeNull(); + }); + + it('should display Multipliers and CFDs section in order if the user is non eu', () => { + render_container({ + client: { is_logged_in: true }, + traders_hub: { content_flag: ContentFlag.LOW_RISK_CR_NON_EU }, + }); + const dashboard_sections = screen.getByTestId('dt_onboarding_dashboard'); + expect(dashboard_sections).not.toHaveClass('static-dashboard--eu'); + }); + + it('should display Multipliers and CFDs section in reverse order if the user is eu', () => { + render_container({ client: { is_logged_in: true }, traders_hub: { content_flag: ContentFlag.EU_REAL } }); + const dashboard_sections = screen.getByTestId('dt_onboarding_dashboard'); + expect(dashboard_sections).toHaveClass('static-dashboard--eu'); + }); +}); diff --git a/packages/appstore/src/components/onboarding-new/static-dashboard.scss b/packages/appstore/src/components/onboarding-new/static-dashboard.scss index 3e09f296c030..0b088c6067a6 100644 --- a/packages/appstore/src/components/onboarding-new/static-dashboard.scss +++ b/packages/appstore/src/components/onboarding-new/static-dashboard.scss @@ -3,6 +3,9 @@ border-radius: 1.6rem; padding: 3rem; @include desktop { + display: flex; + gap: 2.4rem; + flex-direction: column; min-width: 132rem; } @include mobile { @@ -22,6 +25,9 @@ } } &--eu { + @include desktop { + flex-direction: column-reverse; + } padding-bottom: 7rem; } diff --git a/packages/appstore/src/components/onboarding-new/static-dashboard.tsx b/packages/appstore/src/components/onboarding-new/static-dashboard.tsx index a589d9c4c4bc..a74b5ed7ce42 100644 --- a/packages/appstore/src/components/onboarding-new/static-dashboard.tsx +++ b/packages/appstore/src/components/onboarding-new/static-dashboard.tsx @@ -1,9 +1,8 @@ import React from 'react'; -import { useStore } from '@deriv/stores'; import classNames from 'classnames'; -import { observer } from 'mobx-react-lite'; import { Text, ButtonToggle, ThemedScrollbars, Button } from '@deriv/components'; import { isMobile, isDesktop, ContentFlag } from '@deriv/shared'; +import { observer, useStore } from '@deriv/stores'; import { localize, Localize } from '@deriv/translations'; import StaticGetMoreAccounts from './static-get-more-accounts'; import StaticCFDAccountManager from './static-cfd-account-manager'; @@ -13,7 +12,7 @@ import BalanceText from 'Components/elements/text/balance-text'; import './static-dashboard.scss'; -type TStaticDashboard = { +export type TStaticDashboard = { loginid?: string; is_grey?: boolean; currency?: string; @@ -49,85 +48,306 @@ type TStaticDashboard = { has_applauncher_account?: boolean; }; -const StaticDashboard = ({ - currency, - mf_currency, - financial_amount, - derived_amount, - has_account, - has_applauncher_account, - is_blurry, - is_derivx_last_step, - is_financial_last_step, - is_last_step, - is_onboarding_animated, - loginid, -}: TStaticDashboard) => { - const { client, traders_hub } = useStore(); - const { content_flag, CFDs_restricted_countries, financial_restricted_countries } = traders_hub; - const { is_eu_country, is_logged_in } = client; +const StaticDashboard = observer( + ({ + currency, + mf_currency, + financial_amount, + derived_amount, + has_account, + has_applauncher_account, + is_blurry, + is_derivx_last_step, + is_financial_last_step, + is_last_step, + is_onboarding_animated, + loginid, + }: TStaticDashboard) => { + const { client, traders_hub } = useStore(); + const { content_flag, CFDs_restricted_countries, financial_restricted_countries } = traders_hub; + const { is_eu_country, is_logged_in } = client; + const eu_user = + content_flag === ContentFlag.LOW_RISK_CR_EU || + content_flag === ContentFlag.EU_REAL || + content_flag === ContentFlag.EU_DEMO; + const is_eu_user = (is_logged_in && eu_user) || (!is_logged_in && is_eu_country); - const [index, setIndex] = React.useState(0); + const [index, setIndex] = React.useState(is_eu_user ? 1 : 0); - const Divider = () =>
; + const Divider = () =>
; - const eu_user = - content_flag === ContentFlag.LOW_RISK_CR_EU || - content_flag === ContentFlag.EU_REAL || - content_flag === ContentFlag.EU_DEMO; + const getToggleOptions = () => [ + { text: is_eu_user ? localize('Multipliers') : localize('Options & Multipliers'), value: 0 }, + { text: localize('CFDs'), value: 1 }, + ]; + const toggle_options = getToggleOptions(); + const toggle_options_eu = getToggleOptions().reverse(); - const is_eu_user = (is_logged_in && eu_user) || (!is_logged_in && is_eu_country); - - const toggle_options = [ - { text: `${is_eu_user ? 'Multipliers' : 'Options & Multipliers'}`, value: 0 }, - { text: 'CFDs', value: 1 }, - ]; - - React.useEffect(() => { - const change_index_interval_id = setInterval(() => { - if (isMobile()) { - if (index === 0) { - setIndex(1); - } else { - setIndex(0); + React.useEffect(() => { + const change_index_interval_id = setInterval(() => { + if (isMobile()) { + if (index === 0) { + setIndex(1); + } else { + setIndex(0); + } } - } - }, 5000); - return () => clearInterval(change_index_interval_id); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [index]); + }, 5000); + return () => clearInterval(change_index_interval_id); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [index]); - const is_eu_title = eu_user ? localize('Multipliers') : localize('Options & Multipliers'); - const is_eu_account_title = eu_user ? localize('Multipliers account') : localize('Deriv account'); - const compare_accounts_title = eu_user ? localize('Account Information') : localize('Compare accounts'); + const is_eu_title = eu_user ? localize('Multipliers') : localize('Options & Multipliers'); + const is_eu_account_title = eu_user ? localize('Multipliers account') : localize('Deriv account'); + const compare_accounts_title = eu_user ? localize('Account Information') : localize('Compare accounts'); + + return ( + +
+ {(isDesktop() || (isMobile() && index === 0)) && ( +
+
+
+ {isMobile() ? ( + + ) => { + setIndex(Number(item.target.value)); + }} + name='Options' + value={index} + /> + + ) : ( + + {is_eu_title} + + )} +
+ + {eu_user ? ( + , + ]} + /> + ) : ( + , + , + ]} + /> + )} + +
+
+ {has_account && ( + + {eu_user ? localize(`EUR`) : localize(`US Dollar`)} + + } + icon={eu_user ? 'EUR' : 'USD'} + actions={ + + } + > + + + )} +
+
+ {!has_applauncher_account && ( + + )} + {isMobile() && } +
- return ( - -
- {(isDesktop() || (isMobile() && index === 0)) && ( -
-
+ {eu_user ? ( +
+ +
+ ) : ( +
+ +
+ )} + + {!eu_user && ( + +
+ +
+
+ +
+
+ +
+
+ +
+
+ )} +
+
+ )} + + {(isDesktop() || (isMobile() && index === 1)) && ( +
+
{isMobile() ? ( ) => { setIndex(Number(item.target.value)); }} - name='Options' + name='CFDs' value={index} /> @@ -135,371 +355,136 @@ const StaticDashboard = ({ - {is_eu_title} + , + ]} + /> )} -
- - {eu_user ? ( - , - ]} - /> - ) : ( - , - , - ]} - /> - )} - -
- {has_account && ( - - {eu_user ? localize(`EUR`) : localize(`US Dollar`)} - - } - icon={eu_user ? 'EUR' : 'USD'} - actions={ - - } - > - - - )} -
-
- {!has_applauncher_account && ( - - )} - {isMobile() && } -
- -
- {eu_user ? ( -
- -
- ) : ( -
- -
- )} - - {!eu_user && ( - -
- -
-
- -
-
- -
-
- -
-
- )} -
-
- )} - - {(isDesktop() || (isMobile() && index === 1)) && ( -
-
- {isMobile() ? ( - - ) => { - setIndex(Number(item.target.value)); - }} - name='CFDs' - value={index} - /> - - ) : ( +
, ]} /> - )} -
-
- - , - ]} - /> - -
- - {isMobile() && ( - - {compare_accounts_title} - - )} - -
- - {localize('Deriv MT5')} - -
+
-
- {!is_eu_user && !CFDs_restricted_countries && ( - - )} - {isMobile() && !has_account && } - {is_eu_user && !financial_restricted_countries && ( - + {isMobile() && ( + + {compare_accounts_title} + )} - {!is_eu_user && !CFDs_restricted_countries && ( - +
+ + {localize('Deriv MT5')} + +
+ +
+ {!is_eu_user && !CFDs_restricted_countries && ( - {isMobile() && !has_account && } - {!financial_restricted_countries && ( + )} + {isMobile() && !has_account && } + {is_eu_user && !financial_restricted_countries && ( + + )} + + {!is_eu_user && !CFDs_restricted_countries && ( + - )} + {isMobile() && !has_account && } + {!financial_restricted_countries && ( + + )} + + )} + {isDesktop() && has_account && !eu_user && ( + + )} +
+ + {!is_eu_user && !CFDs_restricted_countries && !financial_restricted_countries && ( + + +
+ + {localize('Other CFD Platforms')} + +
)} - {isDesktop() && has_account && !eu_user && ( - - )} -
- - {!is_eu_user && !CFDs_restricted_countries && !financial_restricted_countries && ( - - -
- - {localize('Other CFD Platforms')} - -
-
- )} - {!is_eu_user && !CFDs_restricted_countries && ( -
- - {/* + + {/* */} -
- )} -
- )} -
-
- ); -}; +
+ )} +
+ )} +
+ + ); + } +); -export default observer(StaticDashboard); +export default StaticDashboard; diff --git a/packages/appstore/src/components/trade-button/trade-button.tsx b/packages/appstore/src/components/trade-button/trade-button.tsx index b26623f33324..f517ca368921 100644 --- a/packages/appstore/src/components/trade-button/trade-button.tsx +++ b/packages/appstore/src/components/trade-button/trade-button.tsx @@ -1,66 +1,68 @@ +import React from 'react'; +import { Link } from 'react-router-dom'; import { Button } from '@deriv/components'; +import { observer, useStore } from '@deriv/stores'; import { localize } from '@deriv/translations'; import { Actions } from 'Components/containers/trading-app-card-actions'; -import React from 'react'; -import { Link } from 'react-router-dom'; -import { useStores } from 'Stores'; -const TradeButton = ({ - link_to, - onAction, - is_external, - is_buttons_disabled, - new_tab, -}: Pick) => { - const { traders_hub, modules } = useStores(); - const { is_demo } = traders_hub; - const { dxtrade_tokens } = modules.cfd; - const REAL_DXTRADE_URL = 'https://dx.deriv.com'; - const DEMO_DXTRADE_URL = 'https://dx-demo.deriv.com'; +const TradeButton = observer( + ({ + link_to, + onAction, + is_external, + is_buttons_disabled, + new_tab, + }: Pick) => { + const { traders_hub, modules } = useStore(); + const { is_demo } = traders_hub; + const { dxtrade_tokens } = modules.cfd; + const REAL_DXTRADE_URL = 'https://dx.deriv.com'; + const DEMO_DXTRADE_URL = 'https://dx-demo.deriv.com'; - if (link_to) { - if (is_external) { - if (new_tab) { + if (link_to) { + if (is_external) { + if (new_tab) { + return ( + + + + ); + } return ( - + ); } return ( - + - + + ); + } else if (onAction) { + return ( + ); } + return ( - - - - ); - } else if (onAction) { - return ( - + + + ); } - - return ( - - - - ); -}; +); export default TradeButton; diff --git a/packages/appstore/src/modules/traders-hub/__tests__/index.spec.tsx b/packages/appstore/src/modules/traders-hub/__tests__/index.spec.tsx new file mode 100644 index 000000000000..fd2f3eddabd5 --- /dev/null +++ b/packages/appstore/src/modules/traders-hub/__tests__/index.spec.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import { ContentFlag } from '@deriv/shared'; +import { StoreProvider, mockStore } from '@deriv/stores'; +import { render, screen } from '@testing-library/react'; +import TradersHub from '..'; + +jest.mock('Components/modals/modal-manager', () => jest.fn(() => 'mockedModalManager')); +jest.mock('Components/cfds-listing', () => jest.fn(() => 'mockedCFDsListing')); +jest.mock('Components/options-multipliers-listing', () => jest.fn(() => 'mocked')); + +describe('TradersHub', () => { + const render_container = (mock_store_override = {}) => { + const mock_store = mockStore(mock_store_override); + const wrapper = ({ children }: { children: JSX.Element }) => ( + {children} + ); + + return render(, { + wrapper, + }); + }; + + it('should display the component', () => { + const { container } = render_container({ client: { is_logged_in: true } }); + expect(container).toBeInTheDocument(); + }); + + it('should display both CFDs and Multipliers section', () => { + render_container({ client: { is_logged_in: true } }); + const dashboard_sections = screen.getByTestId('dt_traders_hub'); + expect(dashboard_sections?.textContent?.match(/Multipliers/)).not.toBeNull(); + expect(dashboard_sections?.textContent?.match(/CFDs/)).not.toBeNull(); + }); + + it('should display Multipliers and CFDs section in order if the user is non eu', () => { + render_container({ + client: { is_logged_in: true }, + traders_hub: { is_eu_user: false }, + }); + const dashboard_sections = screen.getByTestId('dt_traders_hub'); + expect(dashboard_sections).not.toHaveClass('traders-hub__main-container-reversed'); + }); + + it('should display Multipliers and CFDs section in reverse order if the user is eu', () => { + render_container({ client: { is_logged_in: true }, traders_hub: { is_eu_user: true } }); + const dashboard_sections = screen.getByTestId('dt_traders_hub'); + expect(dashboard_sections).toHaveClass('traders-hub__main-container-reversed'); + }); + + it('should display disclaimer if the user is from low risk eu country', () => { + render_container({ + client: { is_logged_in: true }, + traders_hub: { content_flag: ContentFlag.LOW_RISK_CR_EU }, + }); + const disclaimer = screen.getByTestId('dt_traders_hub_disclaimer'); + expect(disclaimer).toBeInTheDocument(); + }); +}); diff --git a/packages/appstore/src/modules/traders-hub/index.tsx b/packages/appstore/src/modules/traders-hub/index.tsx index ec98e56b6194..ac99a42f880d 100644 --- a/packages/appstore/src/modules/traders-hub/index.tsx +++ b/packages/appstore/src/modules/traders-hub/index.tsx @@ -1,22 +1,20 @@ import React from 'react'; -import { observer } from 'mobx-react-lite'; +import { DesktopWrapper, MobileWrapper, ButtonToggle, Div100vhContainer, Text } from '@deriv/components'; +import { isDesktop, routes, ContentFlag } from '@deriv/shared'; +import { observer, useStore } from '@deriv/stores'; +import { Localize, localize } from '@deriv/translations'; import CFDsListing from 'Components/cfds-listing'; import ModalManager from 'Components/modals/modal-manager'; import MainTitleBar from 'Components/main-title-bar'; -import TourGuide from 'Modules/tour-guide/tour-guide'; import OptionsAndMultipliersListing from 'Components/options-multipliers-listing'; import ButtonToggleLoader from 'Components/pre-loader/button-toggle-loader'; -import { useStores } from 'Stores/index'; -import { isDesktop, routes, ContentFlag, isMobile } from '@deriv/shared'; -import { DesktopWrapper, MobileWrapper, ButtonToggle, Div100vhContainer, Text } from '@deriv/components'; -import { Localize } from '@deriv/translations'; import classNames from 'classnames'; - +import TourGuide from '../tour-guide/tour-guide'; import './traders-hub.scss'; const TradersHub = () => { - const { traders_hub, client, ui } = useStores(); - const { notification_messages_ui: Notifications } = ui; + const { traders_hub, client, ui } = useStore(); + const { notification_messages_ui: Notifications, is_mobile } = ui; const { is_landing_company_loaded, is_logged_in, is_switching, is_logging_in, is_account_setting_loaded } = client; const { selected_platform_type, setTogglePlatformType, is_tour_open, content_flag, is_eu_user } = traders_hub; const traders_hub_ref = React.useRef() as React.MutableRefObject; @@ -33,6 +31,7 @@ const TradersHub = () => { }; React.useEffect(() => { + if (is_eu_user) setTogglePlatformType('cfd'); setTimeout(() => { handleScroll(); setTimeout(() => { @@ -45,10 +44,12 @@ const TradersHub = () => { const is_eu_low_risk = content_flag === ContentFlag.LOW_RISK_CR_EU; - const platform_toggle_options = [ - { text: `${eu_title ? 'Multipliers' : 'Options & Multipliers'}`, value: 'options' }, - { text: 'CFDs', value: 'cfd' }, + const getPlatformToggleOptions = () => [ + { text: eu_title ? localize('Multipliers') : localize('Options & Multipliers'), value: 'options' }, + { text: localize('CFDs'), value: 'cfd' }, ]; + const platform_toggle_options = getPlatformToggleOptions(); + const platform_toggle_options_eu = getPlatformToggleOptions().reverse(); const platformTypeChange = (event: { target: { @@ -60,15 +61,16 @@ const TradersHub = () => { }; if (!is_logged_in) return null; - const EUDisclamer = () => { + const renderOrderedPlatformSections = (is_cfd_visible = true, is_options_and_multipliers_visible = true) => { return ( -
- - ]} - /> - +
+ {is_options_and_multipliers_visible && } + {is_cfd_visible && }
); }; @@ -85,16 +87,11 @@ const TradersHub = () => { {can_show_notify && }
- -
- - -
-
+ {renderOrderedPlatformSections()} {is_landing_company_loaded ? ( { ) : ( )} - {selected_platform_type === 'options' && } - {selected_platform_type === 'cfd' && } + {renderOrderedPlatformSections( + selected_platform_type === 'cfd', + selected_platform_type === 'options' + )} {scrolled && }
- {is_eu_low_risk && } + {is_eu_low_risk && ( +
+ + ]} + /> + +
+ )} ); }; diff --git a/packages/appstore/src/modules/traders-hub/traders-hub.scss b/packages/appstore/src/modules/traders-hub/traders-hub.scss index ab9fd05592b9..49b9474a391a 100644 --- a/packages/appstore/src/modules/traders-hub/traders-hub.scss +++ b/packages/appstore/src/modules/traders-hub/traders-hub.scss @@ -12,6 +12,9 @@ display: flex; flex-direction: column; gap: 2.4rem; + &-reversed { + flex-direction: column-reverse; + } } &__button-toggle { @@ -36,7 +39,7 @@ } } -.disclamer { +.disclaimer { position: fixed; bottom: 3.6rem; width: 100%; diff --git a/packages/bot-skeleton/src/services/api/__tests__/datadog-middleware.spec.ts b/packages/bot-skeleton/src/services/api/__tests__/datadog-middleware.spec.ts index 1a05a301c2c4..98628eee1b16 100644 --- a/packages/bot-skeleton/src/services/api/__tests__/datadog-middleware.spec.ts +++ b/packages/bot-skeleton/src/services/api/__tests__/datadog-middleware.spec.ts @@ -45,6 +45,7 @@ describe('APIMiddleware', () => { }); api_middleware = new APIMiddleware(); + process.env.DATADOG_CLIENT_TOKEN_LOGS = '123'; }); it('Should get measure for each request, invoke method log(), clear measures', () => { diff --git a/packages/bot-skeleton/src/services/api/api-middleware.js b/packages/bot-skeleton/src/services/api/api-middleware.js index 6fbf57d73583..db2c79dc887c 100644 --- a/packages/bot-skeleton/src/services/api/api-middleware.js +++ b/packages/bot-skeleton/src/services/api/api-middleware.js @@ -18,15 +18,17 @@ if (isProduction) { dataDogEnv = 'staging'; } -datadogLogs.init({ - clientToken: DATADOG_CLIENT_TOKEN_LOGS, - site: 'datadoghq.com', - forwardErrorsToLogs: false, - service: 'Dbot', - sessionSampleRate: dataDogSessionSampleRate, - version: dataDogVersion, - env: dataDogEnv, -}); +if (DATADOG_CLIENT_TOKEN_LOGS) { + datadogLogs.init({ + clientToken: DATADOG_CLIENT_TOKEN_LOGS, + site: 'datadoghq.com', + forwardErrorsToLogs: false, + service: 'Dbot', + sessionSampleRate: dataDogSessionSampleRate, + version: dataDogVersion, + env: dataDogEnv, + }); +} export const REQUESTS = [ 'active_symbols', @@ -109,7 +111,9 @@ class APIMiddleware { REQUESTS.forEach(req_type => { const measure = performance.getEntriesByName(req_type); if (measure && measure.length) { - this.log(measure, is_bot_running, req_type); + if (process.env.DATADOG_CLIENT_TOKEN_LOGS) { + this.log(measure, is_bot_running, req_type); + } } }); performance.clearMeasures(); diff --git a/packages/bot-web-ui/src/app/app-content.jsx b/packages/bot-web-ui/src/app/app-content.jsx index 047458070545..745e1aa9aadb 100644 --- a/packages/bot-web-ui/src/app/app-content.jsx +++ b/packages/bot-web-ui/src/app/app-content.jsx @@ -5,7 +5,6 @@ import { observer, useStore } from '@deriv/stores'; import { Audio, BotNotificationMessages, Dashboard, NetworkToastPopup, RoutePromptDialog } from 'Components'; import BotBuilder from 'Components/dashboard/bot-builder'; import GTM from 'Utils/gtm'; -import { MobxContentProvider } from 'Stores/connect'; import { useDBotStore } from 'Stores/useDBotStore'; import BlocklyLoading from '../components/blockly-loading'; import './app.scss'; @@ -99,8 +98,7 @@ const AppContent = observer(() => { return is_loading ? ( ) : ( - // TODO: remove MobxContentProvider when all connect method is removed - + <>
-
+ ); }); diff --git a/packages/bot-web-ui/src/components/blockly-loading/__tests__/blockly-loading.spec.tsx b/packages/bot-web-ui/src/components/blockly-loading/__tests__/blockly-loading.spec.tsx new file mode 100644 index 000000000000..8341cdf9f534 --- /dev/null +++ b/packages/bot-web-ui/src/components/blockly-loading/__tests__/blockly-loading.spec.tsx @@ -0,0 +1,74 @@ +import React from 'react'; +import { mockStore, StoreProvider } from '@deriv/stores'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { act, render, screen } from '@testing-library/react'; +import RootStore from '../../../stores/root-store'; +import { DBotStoreProvider, mockDBotStore } from '../../../stores/useDBotStore'; +import BlocklyLoading from '../blockly-loading'; + +jest.mock('@deriv/shared', () => ({ + ...jest.requireActual('@deriv/shared'), + isMobile: jest.fn(() => false), +})); + +jest.mock('@deriv/bot-skeleton/src/scratch/blockly', () => jest.fn()); +jest.mock('@deriv/bot-skeleton/src/scratch/dbot', () => ({ + saveRecentWorkspace: jest.fn(), + unHighlightAllBlocks: jest.fn(), +})); +jest.mock('@deriv/bot-skeleton/src/scratch/hooks/block_svg', () => jest.fn()); + +const mock_ws = { + authorized: { + subscribeProposalOpenContract: jest.fn(), + send: jest.fn(), + }, + storage: { + send: jest.fn(), + }, + contractUpdate: jest.fn(), + subscribeTicksHistory: jest.fn(), + forgetStream: jest.fn(), + activeSymbols: jest.fn(), + send: jest.fn(), +}; + +describe('BlocklyLoading', () => { + let wrapper: ({ children }: { children: JSX.Element }) => JSX.Element, mock_DBot_store: RootStore | undefined; + + beforeAll(() => { + const mock_store = mockStore({}); + mock_DBot_store = mockDBotStore(mock_store, mock_ws); + + wrapper = ({ children }: { children: JSX.Element }) => ( + + + {children} + + + ); + }); + it('should render BlocklyLoading', () => { + const { container } = render(, { + wrapper, + }); + expect(container).toBeInTheDocument(); + }); + + it('should not render BlocklyLoading loader', () => { + render(, { + wrapper, + }); + expect(screen.queryByTestId('blockly-loader')).not.toBeInTheDocument(); + }); + + it('should render BlocklyLoading loader', () => { + act(() => { + mock_DBot_store?.blockly_store?.setLoading(true); + }); + render(, { + wrapper, + }); + expect(screen.getByTestId('blockly-loader')).toBeInTheDocument(); + }); +}); diff --git a/packages/bot-web-ui/src/components/blockly-loading/blockly-loading.tsx b/packages/bot-web-ui/src/components/blockly-loading/blockly-loading.tsx index c7338c44f42f..3c1cc738130e 100644 --- a/packages/bot-web-ui/src/components/blockly-loading/blockly-loading.tsx +++ b/packages/bot-web-ui/src/components/blockly-loading/blockly-loading.tsx @@ -1,22 +1,20 @@ import React from 'react'; import { Loading } from '@deriv/components'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from '../../stores/useDBotStore'; -type TBlocklyLoadingProps = { - is_loading: boolean; -}; +const BlocklyLoading = observer(() => { + const { blockly_store } = useDBotStore(); + const { is_loading } = blockly_store; + return ( + <> + {is_loading && ( +
+ +
+ )} + + ); +}); -const BlocklyLoading = ({ is_loading }: TBlocklyLoadingProps) => ( - <> - {is_loading && ( -
- -
- )} - -); - -export default connect(({ blockly_store }: RootStore) => ({ - is_loading: blockly_store.is_loading, -}))(BlocklyLoading); +export default BlocklyLoading; diff --git a/packages/bot-web-ui/src/components/bot-notification-messages/bot-notification-messages.tsx b/packages/bot-web-ui/src/components/bot-notification-messages/bot-notification-messages.tsx index a61931436508..34bc22b1a3a6 100644 --- a/packages/bot-web-ui/src/components/bot-notification-messages/bot-notification-messages.tsx +++ b/packages/bot-web-ui/src/components/bot-notification-messages/bot-notification-messages.tsx @@ -1,37 +1,29 @@ import React from 'react'; import classNames from 'classnames'; +import { observer, useStore } from '@deriv/stores'; import { DBOT_TABS } from 'Constants/bot-contents'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; - -interface TBotNotificationMessagesProps { - is_drawer_open: boolean; - active_tab: number; - is_info_panel_visible: boolean; - Notifications: React.ComponentType; -} +import { useDBotStore } from 'Stores/useDBotStore'; const { BOT_BUILDER, CHART } = DBOT_TABS; -const BotNotificationMessages = ({ - is_drawer_open, - Notifications, - is_info_panel_visible, - active_tab, -}: TBotNotificationMessagesProps) => ( -
- -
-); +const BotNotificationMessages = observer(() => { + const { ui } = useStore(); + const { run_panel, dashboard } = useDBotStore(); + + const { is_drawer_open } = run_panel; + const Notifications = ui.notification_messages_ui; + const { active_tab, is_info_panel_visible } = dashboard; + + return ( +
+ +
+ ); +}); -export default connect(({ core, run_panel, dashboard }: RootStore) => ({ - is_drawer_open: run_panel.is_drawer_open, - Notifications: core.ui.notification_messages_ui, - active_tab: dashboard.active_tab, - is_info_panel_visible: dashboard.is_info_panel_visible, -}))(BotNotificationMessages); +export default BotNotificationMessages; diff --git a/packages/bot-web-ui/src/components/chart/chart.tsx b/packages/bot-web-ui/src/components/chart/chart.tsx index 954002992b9a..221a8ddff372 100644 --- a/packages/bot-web-ui/src/components/chart/chart.tsx +++ b/packages/bot-web-ui/src/components/chart/chart.tsx @@ -1,53 +1,44 @@ import React from 'react'; import classNames from 'classnames'; -import { ActiveSymbols, ForgetRequest } from '@deriv/api-types'; // TODO Remove this after smartcharts is replaced // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import { ChartTitle, SmartChart } from '@deriv/deriv-charts'; import { isDesktop, isMobile } from '@deriv/shared'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { observer, useStore } from '@deriv/stores'; +import { useDBotStore } from 'Stores/useDBotStore'; import ToolbarWidgets from './toolbar-widgets'; -interface TChartProps { - chart_type: string; - getMarketsOrder: (active_symbols: ActiveSymbols) => string[]; - granularity: number; - is_drawer_open: boolean; - is_socket_opened: boolean; - onSymbolChange: (symbol: string) => void; - setChartStatus: (status: boolean) => void; - settings: object; - show_digits_stats: boolean; - symbol: object; - updateChartType: (chart_type: string) => void; - updateGranularity: (granularity: number) => void; - wsForget: (request: ForgetRequest) => void; - wsForgetStream: (stream_id: string) => void; - wsSendRequest: (req: { [k: string]: unknown }) => void; - wsSubscribe: (req: { [k: string]: unknown }, callback: () => void) => void; -} - -const Chart = ({ - chart_type, - getMarketsOrder, - granularity, - is_drawer_open, - is_socket_opened, - onSymbolChange, - setChartStatus, - settings, - show_digits_stats, - symbol, - updateChartType, - updateGranularity, - wsForget, - wsForgetStream, - wsSendRequest, - wsSubscribe, -}: TChartProps) => { +const Chart = observer(({ show_digits_stats }: { show_digits_stats: boolean }) => { const barriers: [] = []; + const { common, ui } = useStore(); + const { chart_store, run_panel } = useDBotStore(); + + const { + chart_type, + getMarketsOrder, + granularity, + onSymbolChange, + setChartStatus, + symbol, + updateChartType, + updateGranularity, + wsForget, + wsForgetStream, + wsSendRequest, + wsSubscribe, + } = chart_store; + const { is_drawer_open } = run_panel; + const is_socket_opened = common.is_socket_opened; + const settings = { + assetInformation: false, // ui.is_chart_asset_info_visible, + countdown: true, + isHighestLowestMarkerEnabled: false, // TODO: Pending UI, + language: common.current_language.toLowerCase(), + position: ui.is_chart_layout_default ? 'bottom' : 'left', + theme: ui.is_dark_mode_on ? 'dark' : 'light', + }; + return (
); -}; +}); -export default connect(({ chart_store, common, ui, run_panel }: RootStore) => ({ - chart_type: chart_store.chart_type, - getMarketsOrder: chart_store.getMarketsOrder, - granularity: chart_store.granularity, - last_contract: { - is_digit_contract: false, - }, - is_drawer_open: run_panel.is_drawer_open, - is_socket_opened: common.is_socket_opened, - onSymbolChange: chart_store.onSymbolChange, - setChartStatus: chart_store.setChartStatus, - settings: { - assetInformation: false, // ui.is_chart_asset_info_visible, - countdown: true, - isHighestLowestMarkerEnabled: false, // TODO: Pending UI, - language: common.current_language.toLowerCase(), - position: ui.is_chart_layout_default ? 'bottom' : 'left', - theme: ui.is_dark_mode_on ? 'dark' : 'light', - }, - symbol: chart_store.symbol, - updateChartType: chart_store.updateChartType, - updateGranularity: chart_store.updateGranularity, - wsForget: chart_store.wsForget, - wsForgetStream: chart_store.wsForgetStream, - wsSendRequest: chart_store.wsSendRequest, - wsSubscribe: chart_store.wsSubscribe, -}))(Chart); +export default Chart; diff --git a/packages/bot-web-ui/src/components/dashboard/bot-builder/bot-builder.tsx b/packages/bot-web-ui/src/components/dashboard/bot-builder/bot-builder.tsx index 2c67df5bcdd9..382a156b57aa 100644 --- a/packages/bot-web-ui/src/components/dashboard/bot-builder/bot-builder.tsx +++ b/packages/bot-web-ui/src/components/dashboard/bot-builder/bot-builder.tsx @@ -1,37 +1,20 @@ import React from 'react'; import classNames from 'classnames'; import { DesktopWrapper, MobileWrapper } from '@deriv/components'; -import LoadModal from 'Components/load-modal'; -import SaveModal from 'Components/save-modal'; -import AppStore from 'Stores/app-store'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from '../../../stores/useDBotStore'; +import LoadModal from '../../load-modal'; +import SaveModal from '../dashboard-component/load-bot-preview/save-modal'; import { BOT_BUILDER_TOUR } from '../joyride-config'; import QuickStrategy from '../quick-strategy'; import ReactJoyrideWrapper from '../react-joyride-wrapper'; import TourSlider from '../tour-slider'; import WorkspaceWrapper from './workspace-wrapper'; -type TBotBuilder = { - app: AppStore; - active_tab: number; - has_started_onboarding_tour: boolean; - has_started_bot_builder_tour: boolean; - is_preview_on_popup: boolean; - is_dark_mode_on: boolean; - setOnBoardTourRunState: (has_started_onboarding_tour: boolean) => boolean; - loadFileFromRecent: () => void; - selected_strategy_id: string; - previewRecentStrategy: (selected_strategy_id: string) => void; -}; +const BotBuilder = observer(() => { + const { dashboard, app } = useDBotStore(); + const { active_tab, has_started_onboarding_tour, has_started_bot_builder_tour, is_preview_on_popup } = dashboard; -const BotBuilder = ({ - app, - active_tab, - has_started_onboarding_tour, - has_started_bot_builder_tour, - is_preview_on_popup, -}: TBotBuilder) => { const [is_tour_running] = React.useState(true); const { onMount, onUnmount } = app; const el_ref = React.useRef(null); @@ -91,13 +74,6 @@ const BotBuilder = ({ ); -}; +}); -export default connect(({ app, dashboard }: RootStore) => ({ - app, - active_tab: dashboard.active_tab, - has_started_onboarding_tour: dashboard.has_started_onboarding_tour, - has_started_bot_builder_tour: dashboard.has_started_bot_builder_tour, - is_preview_on_popup: dashboard.is_preview_on_popup, - setOnBoardTourRunState: dashboard.setOnBoardTourRunState, -}))(BotBuilder); +export default BotBuilder; diff --git a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/__tests__/toolbar.spec.tsx b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/__tests__/toolbar.spec.tsx index 1e8d30f85574..4110c8d34bdf 100644 --- a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/__tests__/toolbar.spec.tsx +++ b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/__tests__/toolbar.spec.tsx @@ -1,15 +1,36 @@ import React from 'react'; import { isDesktop, isMobile } from '@deriv/shared'; import { render, screen } from '@testing-library/react'; +import { useDBotStore } from 'Stores/useDBotStore'; import Toolbar from '..'; -jest.mock('Stores/connect', () => ({ - __esModule: true, - default: 'mockedDefaultExport', - connect: - () => - (Component: T) => - Component, +const mockDbotStore = { + run_panel: { + is_running: false, + }, + save_modal: { + toggleSaveModal: jest.fn(), + }, + load_modal: { + toggleLoadModal: jest.fn(), + }, + toolbar: { + has_redo_stack: false, + has_undo_stack: false, + closeResetDialog: jest.fn(), + onResetOkButtonClick: jest.fn(), + onResetClick: jest.fn(), + onSortClick: jest.fn(), + onUndoClick: jest.fn(), + onZoomInOutClick: jest.fn(), + is_dialog_open: false, + }, + quick_strategy: {}, + dashboard: {}, +}; + +jest.mock('Stores/useDBotStore', () => ({ + useDBotStore: jest.fn(() => mockDbotStore), })); jest.mock('@deriv/shared', () => ({ @@ -19,48 +40,30 @@ jest.mock('@deriv/shared', () => ({ })); describe('Toolbar component', () => { - const mocked_props = { - active_tab: '0', - file_name: 'qwe', - has_redo_stack: false, - has_undo_stack: false, - is_drawer_open: false, - is_stop_button_disabled: false, - is_stop_button_visible: false, - closeResetDialog: jest.fn(), - onOkButtonClick: jest.fn(), - onResetClick: jest.fn(), - onRunButtonClick: jest.fn(), - onSortClick: jest.fn(), - onUndoClick: jest.fn(), - onZoomInOutClick: jest.fn(), - toggleSaveLoadModal: jest.fn(), - toggleLoadModal: jest.fn(), - toggleSaveModal: jest.fn(), - }; - beforeEach(() => { - isDesktop.mockReturnValue(true); - isMobile.mockReturnValue(false); - jest.clearAllMocks(); + (useDBotStore as jest.Mock).mockReturnValue(mockDbotStore); }); - it('should render Toolbar', () => { - render(); + render(); expect(screen.getByTestId('dashboard__toolbar')).toBeInTheDocument(); }); it('Toolbar should renders a modal window, when the bot is running and dialog is open', () => { - render(); + (useDBotStore as jest.Mock).mockReturnValue({ + ...mockDbotStore, + run_panel: { ...mockDbotStore.run_panel, is_running: true }, + toolbar: { ...mockDbotStore.toolbar, is_dialog_open: true }, + }); + render(); expect(screen.getByTestId('dashboard__toolbar')).toBeInTheDocument(); expect(screen.getByRole('dialog')).toBeInTheDocument(); expect(screen.getByTestId('toolbar__dialog-text--second')).toBeInTheDocument(); }); it('Toolbar should renders a button, when it is mobile version', async () => { - isDesktop.mockReturnValue(false); - isMobile.mockReturnValue(true); - render(); + (isDesktop as jest.Mock).mockReturnValue(false); + (isMobile as jest.Mock).mockReturnValue(true); + render(); expect(await screen.findByRole('button')).toBeInTheDocument(); }); }); diff --git a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/toolbar.tsx b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/toolbar.tsx index baeeb6daf0fb..4b1fcd1b3141 100644 --- a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/toolbar.tsx +++ b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/toolbar.tsx @@ -1,37 +1,30 @@ import React from 'react'; import { Dialog } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { Localize, localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import ToolbarButton from './toolbar-button'; import WorkspaceGroup from './workspace-group'; -type TToolbar = { - active_tab: string; - file_name: string; - has_redo_stack: boolean; - has_undo_stack: boolean; - is_dialog_open: boolean; - is_drawer_open: boolean; - is_running: boolean; - is_stop_button_disabled: boolean; - is_stop_button_visible: boolean; - closeResetDialog: () => void; - onOkButtonClick: () => void; - onResetClick: () => void; - onRunButtonClick: () => void; - onSortClick: () => void; - onUndoClick: () => void; - onZoomInOutClick: () => void; - toggleSaveLoadModal: () => void; - toggleLoadModal: () => void; - toggleSaveModal: () => void; - loadDataStrategy: () => void; -}; +const Toolbar = observer(() => { + const { run_panel, save_modal, load_modal, toolbar, quick_strategy } = useDBotStore(); + const { + has_redo_stack, + has_undo_stack, + is_dialog_open, + closeResetDialog, + onResetOkButtonClick: onOkButtonClick, + onResetClick, + onSortClick, + onUndoClick, + onZoomInOutClick, + } = toolbar; + const { toggleSaveModal } = save_modal; + const { toggleLoadModal } = load_modal; + const { loadDataStrategy } = quick_strategy; + const { is_running } = run_panel; -const Toolbar = (props: TToolbar) => { - const { is_running, is_dialog_open, onOkButtonClick, closeResetDialog } = props; const confirm_button_text = is_running ? localize('Yes') : localize('OK'); const cancel_button_text = is_running ? localize('No') : localize('Cancel'); @@ -44,11 +37,20 @@ const Toolbar = (props: TToolbar) => { popover_message={localize('Click here to start building your Deriv Bot.')} button_id='db-toolbar__get-started-button' button_classname='toolbar__btn toolbar__btn--icon toolbar__btn--start' - buttonOnClick={props.loadDataStrategy} + buttonOnClick={loadDataStrategy} button_text={localize('Quick strategy')} /> )} - +
{
); -}; +}); -export default connect(({ blockly_store, run_panel, save_modal, load_modal, toolbar, quick_strategy }: RootStore) => ({ - active_tab: blockly_store.active_tab, - file_name: toolbar.file_name, - has_redo_stack: toolbar.has_redo_stack, - has_undo_stack: toolbar.has_undo_stack, - is_dialog_open: toolbar.is_dialog_open, - is_drawer_open: run_panel.is_drawer_open, - is_running: run_panel.is_running, - is_stop_button_disabled: run_panel.is_stop_button_disabled, - is_stop_button_visible: run_panel.is_stop_button_visible, - closeResetDialog: toolbar.closeResetDialog, - onOkButtonClick: toolbar.onResetOkButtonClick, - onResetClick: toolbar.onResetClick, - onRunButtonClick: run_panel.onRunButtonClick, - onSortClick: toolbar.onSortClick, - onUndoClick: toolbar.onUndoClick, - onZoomInOutClick: toolbar.onZoomInOutClick, - toggleLoadModal: load_modal.toggleLoadModal, - toggleSaveModal: save_modal.toggleSaveModal, - loadDataStrategy: quick_strategy.loadDataStrategy, -}))(Toolbar); +export default Toolbar; diff --git a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/workspace-group.tsx b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/workspace-group.tsx index 140fde0fb6c0..fde776f620b4 100644 --- a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/workspace-group.tsx +++ b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbar/workspace-group.tsx @@ -1,7 +1,7 @@ import React from 'react'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import ToolbarIcon from './toolbar-icon'; type TWorkspaceGroup = { @@ -11,81 +11,84 @@ type TWorkspaceGroup = { onSortClick: () => void; onUndoClick: (param?: boolean) => void; onZoomInOutClick: (param?: boolean) => void; - setPreviewOnPopup: (param: boolean) => void; toggleLoadModal: () => void; toggleSaveModal: () => void; }; -const WorkspaceGroup = ({ - has_redo_stack, - has_undo_stack, - onResetClick, - onSortClick, - onUndoClick, - onZoomInOutClick, - setPreviewOnPopup, - toggleLoadModal, - toggleSaveModal, -}: TWorkspaceGroup) => ( -
- - { - setPreviewOnPopup(true); - toggleLoadModal(); - }} - /> - - -
- onUndoClick(/* redo */ false)} - /> - onUndoClick(/* redo */ true)} - /> -
- onZoomInOutClick(/* in */ true)} - /> - onZoomInOutClick(/* in */ false)} - /> -
+const WorkspaceGroup = observer( + ({ + has_redo_stack, + has_undo_stack, + onResetClick, + onSortClick, + onUndoClick, + onZoomInOutClick, + toggleLoadModal, + toggleSaveModal, + }: TWorkspaceGroup) => { + const { dashboard } = useDBotStore(); + const { setPreviewOnPopup } = dashboard; + + return ( +
+ + { + setPreviewOnPopup(true); + toggleLoadModal(); + }} + /> + + +
+ onUndoClick(/* redo */ false)} + /> + onUndoClick(/* redo */ true)} + /> +
+ onZoomInOutClick(/* in */ true)} + /> + onZoomInOutClick(/* in */ false)} + /> +
+ ); + } ); -export default connect(({ dashboard }: RootStore) => ({ - setPreviewOnPopup: dashboard.setPreviewOnPopup, -}))(WorkspaceGroup); +export default WorkspaceGroup; diff --git a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbox/__tests__/toolbox.spec.tsx b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbox/__tests__/toolbox.spec.tsx index 1799cd6428f4..c9fb845b59b3 100644 --- a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbox/__tests__/toolbox.spec.tsx +++ b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbox/__tests__/toolbox.spec.tsx @@ -2,19 +2,11 @@ import React from 'react'; import { isMobile } from '@deriv/shared'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { useDBotStore } from 'Stores/useDBotStore'; import Toolbox from '../toolbox'; -jest.mock('Stores/connect', () => ({ - __esModule: true, - default: 'mockedDefaultExport', - connect: - () => - (Component: T) => - Component, -})); - -describe('Toolbox component', () => { - const mocked_props = { +const mockDbotStore = { + toolbox: { hasSubCategory: jest.fn(), is_search_loading: false, onMount: jest.fn(), @@ -25,19 +17,30 @@ describe('Toolbox component', () => { onToolboxItemClick: jest.fn(), onToolboxItemExpand: jest.fn(), onUnmount: jest.fn(), - setVisibility: jest.fn(), sub_category_index: [], + }, + flyout: { + setVisibility: jest.fn(), + }, + quick_strategy: { loadDataStrategy: jest.fn(), - }; + }, +}; + +jest.mock('Stores/useDBotStore', () => ({ + useDBotStore: jest.fn(() => mockDbotStore), +})); +describe('Toolbox component', () => { it('should render Toolbox with content wrapper is open', () => { - render(); + render(); expect(screen.getByTestId('dashboard__toolbox')).toBeInTheDocument(); expect(screen.getByTestId('db-toolbox__content-wrapper')).toHaveClass('db-toolbox__content-wrapper active'); }); it('should render Toolbox with content wrapper is open', () => { const setVisibility = jest.fn(); - render(); + (useDBotStore as jest.Mock).mockReturnValue({ ...mockDbotStore, flyout: { setVisibility } }); + render(); expect(screen.getByTestId('db-toolbox__title')).toBeInTheDocument(); userEvent.click(screen.getByTestId('db-toolbox__title')); @@ -45,7 +48,7 @@ describe('Toolbox component', () => { expect(setVisibility).toHaveBeenCalled(); }); it('should not render Toolbox if it is mobile version', () => { - render(); + render(); if (isMobile()) { expect(screen.getByRole('dashboard__toolbox')).toBeEmptyDOMElement(); } diff --git a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbox/toolbox.tsx b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbox/toolbox.tsx index 3163d8151967..ead591617037 100644 --- a/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbox/toolbox.tsx +++ b/packages/bot-web-ui/src/components/dashboard/bot-builder/toolbox/toolbox.tsx @@ -2,48 +2,33 @@ import React from 'react'; import classNames from 'classnames'; import { Icon, Text } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from '../../../../stores/useDBotStore'; import ToolbarButton from '../toolbar/toolbar-button'; import SearchBox from './search-box'; import { ToolboxItems } from './toolbox-items'; -type TToolbox = { - hasSubCategory: (param: HTMLCollection) => boolean; - is_search_loading: boolean; - is_toolbox_open: boolean; - onMount: (param?: React.RefObject) => void; - onSearch: () => void; - onSearchBlur: () => void; - onSearchClear: () => void; - onSearchKeyUp: () => void; - onToolboxItemClick: (category: ChildNode) => void; - onToolboxItemExpand: (index: number) => void; - onUnmount: () => void; - setVisibility: (param: boolean) => void; - sub_category_index: number[]; - toggleDrawer: () => void; - toolbox_dom: HTMLElement; - loadDataStrategy: () => void; -}; +const Toolbox = observer(() => { + const { toolbox, flyout, quick_strategy } = useDBotStore(); + const { + hasSubCategory, + is_search_loading, + onMount, + onSearch, + onSearchBlur, + onSearchClear, + onSearchKeyUp, + onToolboxItemClick, + onToolboxItemExpand, + onUnmount, + sub_category_index, + toolbox_dom, + } = toolbox; + + const { setVisibility } = flyout; + const { loadDataStrategy } = quick_strategy; -const Toolbox = ({ - hasSubCategory, - is_search_loading, - onMount, - onSearch, - onSearchBlur, - onSearchClear, - onSearchKeyUp, - onToolboxItemClick, - onToolboxItemExpand, - onUnmount, - setVisibility, - sub_category_index, - toolbox_dom, - loadDataStrategy, -}: TToolbox) => { const toolbox_ref = React.useRef(ToolboxItems); const [is_open, setOpen] = React.useState(true); @@ -164,23 +149,6 @@ const Toolbox = ({ ); } return null; -}; +}); -export default connect(({ toolbox, flyout, quick_strategy }: RootStore) => ({ - hasSubCategory: toolbox.hasSubCategory, - is_search_loading: toolbox.is_search_loading, - is_toolbox_open: toolbox.is_toolbox_open, - onMount: toolbox.onMount, - onSearch: toolbox.onSearch, - onSearchBlur: toolbox.onSearchBlur, - onSearchClear: toolbox.onSearchClear, - onSearchKeyUp: toolbox.onSearchKeyUp, - onToolboxItemClick: toolbox.onToolboxItemClick, - onToolboxItemExpand: toolbox.onToolboxItemExpand, - onUnmount: toolbox.onUnmount, - setVisibility: flyout.setVisibility, - sub_category_index: toolbox.sub_category_index, - toggleDrawer: toolbox.toggleDrawer, - toolbox_dom: toolbox.toolbox_dom, - loadDataStrategy: quick_strategy.loadDataStrategy, -}))(Toolbox); +export default Toolbox; diff --git a/packages/bot-web-ui/src/components/dashboard/bot-builder/workspace-wrapper.tsx b/packages/bot-web-ui/src/components/dashboard/bot-builder/workspace-wrapper.tsx index f51b5284f881..6d82d8a826cf 100644 --- a/packages/bot-web-ui/src/components/dashboard/bot-builder/workspace-wrapper.tsx +++ b/packages/bot-web-ui/src/components/dashboard/bot-builder/workspace-wrapper.tsx @@ -1,19 +1,16 @@ import React from 'react'; +import { observer } from '@deriv/stores'; import Flyout from 'Components/flyout'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import StopBotModal from '../dashboard-component/load-bot-preview/stop-bot-modal'; import Toolbar from './toolbar'; import Toolbox from './toolbox'; import './workspace.scss'; -type TWorkspaceWrapper = { - onMount: () => void; - onUnmount: () => void; - is_loading: boolean; -}; +const WorkspaceWrapper = observer(() => { + const { blockly_store } = useDBotStore(); + const { onMount, onUnmount, is_loading } = blockly_store; -const WorkspaceWrapper = ({ onMount, onUnmount, is_loading }: TWorkspaceWrapper) => { React.useEffect(() => { onMount(); return () => { @@ -34,10 +31,6 @@ const WorkspaceWrapper = ({ onMount, onUnmount, is_loading }: TWorkspaceWrapper) ); return null; -}; +}); -export default connect(({ blockly_store }: RootStore) => ({ - onMount: blockly_store.onMount, - onUnmount: blockly_store.onUnmount, - is_loading: blockly_store.is_loading, -}))(WorkspaceWrapper); +export default WorkspaceWrapper; diff --git a/packages/bot-web-ui/src/components/dashboard/bot-notification.tsx b/packages/bot-web-ui/src/components/dashboard/bot-notification.tsx index 3f1573ed922b..681418d8463c 100644 --- a/packages/bot-web-ui/src/components/dashboard/bot-notification.tsx +++ b/packages/bot-web-ui/src/components/dashboard/bot-notification.tsx @@ -2,16 +2,13 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { Toast } from '@deriv/components'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/root-store'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from 'Stores/useDBotStore'; -type TBotNotification = { - show_toast: boolean; - toast_message: string; - setOpenSettings: (toast_message: string, show_toast: boolean) => void; -}; +const BotNotification = observer(() => { + const { dashboard } = useDBotStore(); + const { show_toast, toast_message, setOpenSettings } = dashboard; -const BotNotification = ({ show_toast, toast_message, setOpenSettings }: TBotNotification) => { React.useEffect(() => { setTimeout(() => { setOpenSettings(toast_message, false); @@ -34,10 +31,6 @@ const BotNotification = ({ show_toast, toast_message, setOpenSettings }: TBotNot ); } return null; -}; +}); -export default connect(({ dashboard }: RootStore) => ({ - show_toast: dashboard.show_toast, - toast_message: dashboard.toast_message, - setOpenSettings: dashboard.setOpenSettings, -}))(BotNotification); +export default BotNotification; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/__tests__/dashboard-component.spec.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/__tests__/dashboard-component.spec.tsx index 3a945f237abf..80810f6ef4ca 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/__tests__/dashboard-component.spec.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/__tests__/dashboard-component.spec.tsx @@ -5,26 +5,6 @@ import userEvent from '@testing-library/user-event'; import Sidebar from '../sidebar'; import UserGuide from '../user-guide'; -const mock_connect_props = { - dialog_options: { - title: 'string', - message: 'string', - ok_button_text: 'string', - cancel_button_text: 'string', - }, - setStrategySaveType: jest.fn(), -}; - -jest.mock('Stores/connect.js', () => ({ - __esModule: true, - default: 'mockedDefaultExport', - connect: - () => - (Component: T) => - props => - Component({ ...props, ...mock_connect_props }), -})); - jest.mock('@deriv/components', () => { const original_module = jest.requireActual('@deriv/components'); diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/cards.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/cards.tsx index 35224f8fa3cd..dccc762ae6b8 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/cards.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/cards.tsx @@ -2,29 +2,16 @@ import React from 'react'; import classNames from 'classnames'; import { DesktopWrapper, Dialog, Icon, MobileFullPageModal, MobileWrapper, Text } from '@deriv/components'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; import { DBOT_TABS } from 'Constants/bot-contents'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; -import SaveModalStore from 'Stores/save-modal-store'; +import { useDBotStore } from 'Stores/useDBotStore'; import GoogleDrive from './load-bot-preview/google-drive'; import Recent from './load-bot-preview/recent'; type TCardProps = { - dialog_options: { [key: string]: string }; has_dashboard_strategies: boolean; - is_dialog_open: boolean; is_mobile: boolean; - save_modal: SaveModalStore; - closeResetDialog: () => void; - handleFileChange: (e: React.ChangeEvent, flag?: boolean) => boolean; - loadFileFromLocal: () => void; - loadDataStrategy: () => void; - setActiveTab: (active_tab: number) => void; - setFileLoaded: (param: boolean) => void; - setPreviewOnPopup: (show: boolean) => void; - setOpenSettings: (toast_message: string, show_toast?: boolean) => void; - showVideoDialog: (param: { [key: string]: string | React.ReactNode }) => void; }; type TCardArray = { @@ -33,21 +20,21 @@ type TCardArray = { method: () => void; }; -const Cards = ({ - closeResetDialog, - dialog_options, - handleFileChange, - has_dashboard_strategies, - is_dialog_open, - is_mobile, - loadFileFromLocal, - setActiveTab, - setFileLoaded, - setPreviewOnPopup, - setOpenSettings, - showVideoDialog, - loadDataStrategy, -}: TCardProps) => { +const Cards = observer(({ is_mobile, has_dashboard_strategies }: TCardProps) => { + const { dashboard, load_modal, quick_strategy } = useDBotStore(); + const { + onCloseDialog, + dialog_options, + is_dialog_open, + setActiveTab, + setFileLoaded, + setPreviewOnPopup, + setOpenSettings, + showVideoDialog, + } = dashboard; + const { handleFileChange, loadFileFromLocal } = load_modal; + const { loadDataStrategy } = quick_strategy; + const [is_file_supported, setIsFileSupported] = React.useState(true); const file_input_ref = React.useRef(null); @@ -141,7 +128,7 @@ const Cards = ({ { setPreviewOnPopup(false); - closeResetDialog(); + onCloseDialog(); }} height_offset='80px' page_overlay @@ -172,20 +159,6 @@ const Cards = ({ ), [is_dialog_open, has_dashboard_strategies] ); -}; +}); -export default connect(({ load_modal, dashboard, quick_strategy }: RootStore) => ({ - closeResetDialog: dashboard.onCloseDialog, - dialog_options: dashboard.dialog_options, - handleFileChange: load_modal.handleFileChange, - is_dialog_open: dashboard.is_dialog_open, - loadFileFromLocal: load_modal.loadFileFromLocal, - onDriveConnect: load_modal.onDriveConnect, - setActiveTab: dashboard.setActiveTab, - setFileLoaded: dashboard.setFileLoaded, - setLoadedLocalFile: load_modal.setLoadedLocalFile, - setPreviewOnPopup: dashboard.setPreviewOnPopup, - setOpenSettings: dashboard.setOpenSettings, - showVideoDialog: dashboard.showVideoDialog, - loadDataStrategy: quick_strategy.loadDataStrategy, -}))(Cards); +export default Cards; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/index.scss b/packages/bot-web-ui/src/components/dashboard/dashboard-component/index.scss index 7ae97dbcae0d..b3ac0f19f376 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/index.scss +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/index.scss @@ -4,6 +4,16 @@ align-items: center; } +@mixin recent-list-properties { + display: -webkit-box; + max-width: 90%; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; +} + .bot-dashboard { position: relative; height: calc(100vh - 8.4rem); @@ -480,14 +490,9 @@ font-size: var(--text-size-xs); } - &__recent-item-text { - display: -webkit-box; - max-width: 90%; - -webkit-line-clamp: 1; - -webkit-box-orient: vertical; - overflow: hidden; - text-overflow: ellipsis; - word-break: break-all; + &__recent-item-text, + &__recent-item-saved { + @include recent-list-properties; } } } diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/info-panel.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/info-panel.tsx index 6b11a21f519d..7910e5ea95b8 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/info-panel.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/info-panel.tsx @@ -2,27 +2,21 @@ import React from 'react'; import classNames from 'classnames'; import { DesktopWrapper, Icon, MobileWrapper, Modal, Text } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { DBOT_TABS } from 'Constants/bot-contents'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import { SIDEBAR_INTRO } from './constants'; -type TInfoPanel = { - has_started_onboarding_tour: boolean; - is_info_panel_visible: boolean; - setActiveTab: (param: number) => void; - setActiveTabTutorial: (param: number) => void; - setInfoPanelVisibility: (state: boolean) => void; -}; - -const InfoPanel = ({ - has_started_onboarding_tour, - is_info_panel_visible, - setActiveTab, - setActiveTabTutorial, - setInfoPanelVisibility, -}: TInfoPanel) => { +const InfoPanel = observer(() => { const is_mobile = isMobile(); + const { dashboard } = useDBotStore(); + const { + has_started_onboarding_tour, + is_info_panel_visible, + setActiveTab, + setActiveTabTutorial, + setInfoPanelVisibility, + } = dashboard; const switchTab = (link: boolean, label: string) => { const tutorial_link = link ? setActiveTab(DBOT_TABS.TUTORIAL) : null; const tutorial_label = label === 'Guide' ? setActiveTabTutorial(0) : setActiveTabTutorial(1); @@ -96,12 +90,6 @@ const InfoPanel = ({ ); -}; +}); -export default connect(({ dashboard }: RootStore) => ({ - has_started_onboarding_tour: dashboard.has_started_onboarding_tour, - is_info_panel_visible: dashboard.is_info_panel_visible, - setActiveTab: dashboard.setActiveTab, - setActiveTabTutorial: dashboard.setActiveTabTutorial, - setInfoPanelVisibility: dashboard.setInfoPanelVisibility, -}))(InfoPanel); +export default InfoPanel; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/delete-dialog.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/delete-dialog.tsx index 0702af559996..78be1c6e154a 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/delete-dialog.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/delete-dialog.tsx @@ -3,26 +3,15 @@ import localForage from 'localforage'; import LZString from 'lz-string'; import { getSavedWorkspaces } from '@deriv/bot-skeleton'; import { Dialog, Text } from '@deriv/components'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; +import { useDBotStore } from 'Stores/useDBotStore'; -type TDeleteDialog = { - is_delete_modal_open: boolean; - onToggleDeleteDialog: (param: boolean) => void; - removeBotStrategy: (param: string) => void; - selected_strategy_id: string; - setDashboardStrategies: (param: string[]) => void; - setStrategies: (param: string[]) => void; - setOpenSettings: (toast_message: string, show_toast: boolean) => void; -}; +const DeleteDialog = observer(() => { + const { load_modal, dashboard } = useDBotStore(); + const { is_delete_modal_open, onToggleDeleteDialog, selected_strategy_id, setDashboardStrategies } = load_modal; + const { setOpenSettings } = dashboard; -const DeleteDialog = ({ - is_delete_modal_open, - onToggleDeleteDialog, - selected_strategy_id, - setDashboardStrategies, - setOpenSettings, -}: TDeleteDialog) => { const removeBotStrategy = async (strategy_id: string) => { const workspaces = await getSavedWorkspaces(); workspaces.map((strategy_from_workspace: string[] | { [key: string]: string }, index: number) => { @@ -77,13 +66,6 @@ const DeleteDialog = ({
); -}; +}); -export default connect(({ toolbar, load_modal, dashboard }) => ({ - is_dialog_open: toolbar.is_dialog_open, - is_delete_modal_open: load_modal.is_delete_modal_open, - onToggleDeleteDialog: load_modal.onToggleDeleteDialog, - selected_strategy_id: load_modal.selected_strategy_id, - setDashboardStrategies: load_modal.setDashboardStrategies, - setOpenSettings: dashboard.setOpenSettings, -}))(DeleteDialog); +export default DeleteDialog; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/google-drive.scss b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/google-drive.scss index 920ce9cf06e4..64eae6defa58 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/google-drive.scss +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/google-drive.scss @@ -20,3 +20,6 @@ } } } +.picker-dialog { + z-index: 9999 !important; +} diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/google-drive.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/google-drive.tsx index 1b1fcee97c26..672ae2b017e1 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/google-drive.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/google-drive.tsx @@ -2,25 +2,16 @@ import React from 'react'; import classnames from 'classnames'; import { Button, Icon, StaticUrl } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { Localize, localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/root-store'; +import { useDBotStore } from 'Stores/useDBotStore'; -type TGoogleDriveProps = { - is_authorised: boolean; - is_open_button_loading: boolean; - onDriveConnect: () => void; - onDriveOpen: () => void; - setOpenSettings: (toast_message: string, show_toast?: boolean) => void; -}; +const GoogleDrive = observer(() => { + const { google_drive, load_modal, dashboard } = useDBotStore(); + const { is_authorised } = google_drive; + const { is_open_button_loading, onDriveConnect, onDriveOpen } = load_modal; + const { setOpenSettings } = dashboard; -const GoogleDrive = ({ - is_authorised, - is_open_button_loading, - onDriveConnect, - onDriveOpen, - setOpenSettings, -}: TGoogleDriveProps) => { return (
@@ -79,12 +70,6 @@ const GoogleDrive = ({
); -}; +}); -export default connect(({ load_modal, google_drive, dashboard }: RootStore) => ({ - is_authorised: google_drive.is_authorised, - is_open_button_loading: load_modal.is_open_button_loading, - onDriveConnect: load_modal.onDriveConnect, - onDriveOpen: load_modal.onDriveOpen, - setOpenSettings: dashboard.setOpenSettings, -}))(GoogleDrive); +export default GoogleDrive; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/index.scss b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/index.scss index 04712e16f0c0..c98f27da3e14 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/index.scss +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/index.scss @@ -1,5 +1,6 @@ @import './google-drive.scss'; @import './delete-dialog.scss'; +@import './save-modal.scss'; .load-strategy { &__wrapper { @@ -283,7 +284,6 @@ @include mobile { width: unset; font-size: var(--text-size-xxs); - white-space: nowrap; } } @@ -438,7 +438,8 @@ } span { - padding-right: 1.5rem; + padding-right: 1.6rem; + word-break: break-word; } } } diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/local-footer.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/local-footer.tsx index bd73f3be1675..2666dbb66e76 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/local-footer.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/local-footer.tsx @@ -1,27 +1,16 @@ import React from 'react'; import { Button } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import './index.scss'; -type Nullable = T | null; -type TLocalFooter = { - is_open_button_loading: boolean; - loadFileFromLocal: () => void; - setLoadedLocalFile: (data: Nullable) => void; - setPreviewOnPopup: (param: boolean) => boolean; - toggleLoadModal: () => void; -}; +const LocalFooter = observer(() => { + const { load_modal, dashboard } = useDBotStore(); + const { is_open_button_loading, loadFileFromLocal, setLoadedLocalFile, toggleLoadModal } = load_modal; + const { setPreviewOnPopup } = dashboard; -const LocalFooter = ({ - is_open_button_loading, - loadFileFromLocal, - setLoadedLocalFile, - setPreviewOnPopup, - toggleLoadModal, -}: TLocalFooter) => { const is_mobile = isMobile(); const Wrapper = is_mobile ? Button.Group : React.Fragment; return ( @@ -43,12 +32,6 @@ const LocalFooter = ({ /> ); -}; +}); -export default connect(({ load_modal, dashboard }: RootStore) => ({ - is_open_button_loading: load_modal.is_open_button_loading, - loadFileFromLocal: load_modal.loadFileFromLocal, - setLoadedLocalFile: load_modal.setLoadedLocalFile, - setPreviewOnPopup: dashboard.setPreviewOnPopup, - toggleLoadModal: load_modal.toggleLoadModal, -}))(LocalFooter); +export default LocalFooter; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/local.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/local.tsx index 85b0ff73bcfd..405461ecd1af 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/local.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/local.tsx @@ -2,49 +2,20 @@ import React from 'react'; import classNames from 'classnames'; import { Dialog, Icon, MobileWrapper, Text } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { Localize, localize } from '@deriv/translations'; import { DBOT_TABS } from 'Constants/bot-contents'; import { clearInjectionDiv } from 'Constants/load-modal'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import BotPreview from './bot-preview'; import './index.scss'; -type TWorkspace = { - id: string; - xml: string; - name: string; - timestamp: number; - save_type: string; -}; +const LocalComponent = observer(() => { + const { load_modal, save_modal, dashboard } = useDBotStore(); + const { handleFileChange, loadFileFromRecent, dashboard_strategies } = load_modal; + const { onConfirmSave } = save_modal; + const { setActiveTab, setPreviewOnDialog, has_mobile_preview_loaded, setActiveTabTutorial } = dashboard; -type Nullable = T | null; -type TLocalComponent = { - handleFileChange: (e: React.ChangeEvent, data: boolean) => boolean; - loadFileFromRecent: () => void; - onConfirmSave: () => void; - onDrop: () => void; - previewRecentStrategy: () => void; - setActiveTab: (param: number) => void; - dashboard_strategies: Array; - setFileLoaded: (param: boolean) => void; - setLoadedLocalFile: (data: Nullable) => void; - setTourDialogVisibility: (param: boolean) => boolean; - setPreviewOnDialog: (param: boolean) => boolean; - has_mobile_preview_loaded: boolean; - setActiveTabTutorial: (param: boolean) => void; -}; - -const LocalComponent = ({ - handleFileChange, - loadFileFromRecent, - onConfirmSave, - setActiveTab, - dashboard_strategies, - setPreviewOnDialog, - has_mobile_preview_loaded, - setActiveTabTutorial, -}: TLocalComponent) => { const file_input_ref = React.useRef(null); const [is_file_supported, setIsFileSupported] = React.useState(true); const el_ref = React.useRef(null); @@ -147,20 +118,6 @@ const LocalComponent = ({ )}
); -}; - -const Local = connect(({ load_modal, save_modal, dashboard }: RootStore) => ({ - handleFileChange: load_modal.handleFileChange, - is_open_button_loading: load_modal.is_open_button_loading, - setLoadedLocalFile: load_modal.setLoadedLocalFile, - dashboard_strategies: load_modal.dashboard_strategies, - onConfirmSave: save_modal.onConfirmSave, - setActiveTab: dashboard.setActiveTab, - loadFileFromRecent: load_modal.loadFileFromRecent, - setFileLoaded: dashboard.setFileLoaded, - setPreviewOnDialog: dashboard.setPreviewOnDialog, - setActiveTabTutorial: dashboard.setActiveTabTutorial, - has_mobile_preview_loaded: dashboard.has_mobile_preview_loaded, -}))(LocalComponent); +}); -export default Local; +export default LocalComponent; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/recent-footer.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/recent-footer.tsx index a70673bf0266..b916a5e66a72 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/recent-footer.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/recent-footer.tsx @@ -1,16 +1,13 @@ import React from 'react'; import { Button } from '@deriv/components'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; import './index.scss'; +import { observer } from 'mobx-react'; +import { useDBotStore } from 'Stores/useDBotStore'; -type TRecentFooter = { - is_open_button_loading: boolean; - loadFileFromRecent: () => void; -}; - -const RecentFooter = ({ is_open_button_loading, loadFileFromRecent }: TRecentFooter) => { +const RecentFooter = observer(() => { + const { load_modal } = useDBotStore(); + const { is_open_button_loading, loadFileFromRecent } = load_modal; return (
); -}; +}); -export default connect(({ load_modal, dashboard, save_modal }: RootStore) => ({ - active_tab: dashboard.active_tab, - dashboard_strategies: load_modal.dashboard_strategies, - getRecentFileIcon: load_modal.getRecentFileIcon, - getSaveType: load_modal.getSaveType, - getSelectedStrategyID: load_modal.getSelectedStrategyID, - loadFileFromRecent: load_modal.loadFileFromRecent, - onToggleDeleteDialog: load_modal.onToggleDeleteDialog, - previewRecentStrategy: load_modal.previewRecentStrategy, - selected_strategy_id: load_modal.selected_strategy_id, - setActiveTab: dashboard.setActiveTab, - setPreviewOnDialog: dashboard.setPreviewOnDialog, - toggleSaveModal: save_modal.toggleSaveModal, -}))(RecentWorkspace); +export default RecentWorkspace; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/recent.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/recent.tsx index 537c1fa65ea1..9e67453d909a 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/recent.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/recent.tsx @@ -3,30 +3,21 @@ import classNames from 'classnames'; import { getSavedWorkspaces } from '@deriv/bot-skeleton'; import { MobileWrapper, Text } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { Localize, localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; -import { TWorkspace } from 'Stores/load-modal-store'; -import SaveModal from '../../../save-modal'; +import { useDBotStore } from 'Stores/useDBotStore'; import DeleteDialog from './delete-dialog'; import RecentWorkspace from './recent-workspace'; +import SaveModal from './save-modal'; import './index.scss'; -type TRecentComponent = { - dashboard_strategies: Array; - setDashboardStrategies: (strategies: Array) => void; - setStrategySaveType: (param: string) => void; - strategy_save_type: string; -}; - const HEADERS = [localize('Bot name'), localize('Last modified'), localize('Status')]; -const RecentComponent = ({ - dashboard_strategies, - setDashboardStrategies, - setStrategySaveType, - strategy_save_type, -}: TRecentComponent) => { +const RecentComponent = observer(() => { + const { load_modal, dashboard } = useDBotStore(); + const { setDashboardStrategies, dashboard_strategies } = load_modal; + const { setStrategySaveType, strategy_save_type } = dashboard; + React.useEffect(() => { setStrategySaveType(''); const getStrategies = async () => { @@ -75,13 +66,6 @@ const RecentComponent = ({
); -}; - -const Recent = connect(({ load_modal, dashboard }: RootStore) => ({ - dashboard_strategies: load_modal.dashboard_strategies, - setDashboardStrategies: load_modal.setDashboardStrategies, - setStrategySaveType: dashboard.setStrategySaveType, - strategy_save_type: dashboard.strategy_save_type, -}))(RecentComponent); +}); -export default Recent; +export default RecentComponent; diff --git a/packages/bot-web-ui/src/components/save-modal/save-modal.scss b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/save-modal.scss similarity index 99% rename from packages/bot-web-ui/src/components/save-modal/save-modal.scss rename to packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/save-modal.scss index 28b050149b7e..5a92cc287b7d 100644 --- a/packages/bot-web-ui/src/components/save-modal/save-modal.scss +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/save-modal.scss @@ -8,6 +8,7 @@ .modal__content { padding: 16px 24px; } + .modal__footer { text-align: right; border-top: 2px solid var(--general-section-2); @@ -17,11 +18,13 @@ display: inline-block; } } + .modal__content-row { display: flex; align-items: center; justify-content: center; } + & form { height: 445px; display: flex; @@ -55,18 +58,22 @@ div.radio-group { font-weight: 700; } } + &-disabled { .save-type__text { color: var(--general-disabled) !important; } + .dc-radio-group__circle { border-color: var(--general-disabled) !important; } } } + &__circle { display: none; } + &__label { align-self: center; } @@ -79,22 +86,27 @@ div.radio-group { &__container { text-align: center; } + &__input { // TODO: [fix-dc-bundle] Fix import issue with Deriv Component stylesheets (app should take precedence, and not repeat) margin: 2rem 0 0 !important; } + &__radio { text-align: center; } + &__radio-text { letter-spacing: normal; } + &__drive-status { cursor: pointer; position: absolute; margin-top: 5px; width: 71px; } + &__icon { &--disabled { opacity: 0.32; @@ -106,6 +118,7 @@ div.radio-group { position: fixed; top: 40px; z-index: 10; + @include mobile { form { display: flex; @@ -113,21 +126,26 @@ div.radio-group { justify-content: space-between; height: 100%; } + & .dc-input { width: 100% !important; margin: 3rem 0 0 !important; } + & .dc-radio-group__item { width: calc(50vw - 24px) !important; height: 35vw; } + & .save-type__drive-status { position: relative; } + & .modal__content { padding: 3rem 1.6rem; height: calc(100% - #{$MOBILE_WRAPPER_FOOTER_HEIGHT}); } + & .modal__footer { position: fixed; bottom: 0px; @@ -147,6 +165,7 @@ div.radio-group { left: unset; bottom: unset; } + &--button { float: right; margin-left: 0.8rem; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/save-modal.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/save-modal.tsx index 47f800ece5e5..ea89a0d7e85a 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/save-modal.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/save-modal.tsx @@ -2,20 +2,11 @@ import React from 'react'; import classNames from 'classnames'; import { Field, Form, Formik } from 'formik'; import { config, save_types } from '@deriv/bot-skeleton'; -import { - Button, - Checkbox, - Icon, - Input, - MobileFullPageModal, - Modal, - RadioGroup, - Text, - ThemedScrollbars, -} from '@deriv/components'; +import { Button, Icon, Input, MobileFullPageModal, Modal, RadioGroup, Text, ThemedScrollbars } from '@deriv/components'; import { isMobile } from '@deriv/shared'; -import { Localize, localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; +import { observer, useStore } from '@deriv/stores'; +import { localize } from '@deriv/translations'; +import { useDBotStore } from '../../../../stores/useDBotStore'; import IconRadio from './icon-radio'; type TSaveModalForm = { @@ -56,12 +47,18 @@ const SaveModalForm = ({ validate={validateBotName} onSubmit={onConfirmSave} > - {({ values: { is_local, save_as_collection }, setFieldValue, touched, errors }) => { + {({ values: { is_local }, setFieldValue, touched, errors }) => { const content_height = !is_mobile ? '500px' : `calc(100%)`; return (
+ + {localize( + 'Enter your bot name, choose to save on your computer or Google Drive, and hit ' + )} + {localize('Save.')} +
{({ field }) => ( @@ -70,7 +67,7 @@ const SaveModalForm = ({ type='text' placeholder={localize('Untitled Strategy')} error={touched[field.name] && errors[field.name]} - label={localize('Strategy name')} + label={localize('Bot name')} onFocus={e => setCurrentFocus(e.currentTarget.name)} onBlur={() => setCurrentFocus(null)} {...field} @@ -116,7 +113,8 @@ const SaveModalForm = ({ />
- <> + {/* removed this from the save modal popup because it is not there in the design */} + {/* <> {({ field }) => ( - + */}
); -const SaveModal = ({ - bot_name, - button_status, - is_authorised, - is_save_modal_open, - onConfirmSave, - onDriveConnect, - toggleSaveModal, - validateBotName, - setCurrentFocus, - is_onscreen_keyboard_active, -}: TSaveModalForm) => { +const SaveModal = observer(() => { + const { save_modal, google_drive } = useDBotStore(); + const { ui } = useStore(); + + const { + button_status, + is_save_modal_open, + onConfirmSave, + onDriveConnect, + toggleSaveModal, + validateBotName, + bot_name, + } = save_modal; + const { is_authorised } = google_drive; + const { is_onscreen_keyboard_active, setCurrentFocus } = ui; + const is_mobile = isMobile(); return is_mobile ? ( ); -}; +}); -export default connect(({ save_modal, google_drive, ui }) => ({ - button_status: save_modal.button_status, - is_authorised: google_drive.is_authorised, - is_save_modal_open: save_modal.is_save_modal_open, - is_onscreen_keyboard_active: ui.is_onscreen_keyboard_active, - onConfirmSave: save_modal.onConfirmSave, - onDriveConnect: save_modal.onDriveConnect, - toggleSaveModal: save_modal.toggleSaveModal, - validateBotName: save_modal.validateBotName, - bot_name: save_modal.bot_name, - setCurrentFocus: ui.setCurrentFocus, -}))(SaveModal); +export default SaveModal; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/stop-bot-modal.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/stop-bot-modal.tsx index e0a6fbafbf1b..2aefb83c5a34 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/stop-bot-modal.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/stop-bot-modal.tsx @@ -1,43 +1,27 @@ import React from 'react'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/root-store'; -import StopBotModalContent, { TStopBotModalContent } from '../stop-bot-modal-content'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from '../../../../stores/useDBotStore'; +import StopBotModalContent from '../stop-bot-modal-content'; -type TStopBotModal = TStopBotModalContent & { - stopMyBot: () => void; -}; +const StopBotModal = observer(() => { + const { run_panel, quick_strategy, summary_card } = useDBotStore(); -const StopBotModal = ({ - is_running, - is_contract_dialog_open, - is_stop_bot_dialog_open, - is_multiplier, - is_dialog_open, - closeMultiplierContract, - stopMyBot, - toggleStopBotDialog, -}: TStopBotModal) => ( - -); + const { is_contract_dialog_open, is_stop_bot_dialog_open, toggleStopBotDialog } = quick_strategy; + const { is_running, closeMultiplierContract, stopMyBot, is_dialog_open } = run_panel; + const { is_multiplier } = summary_card; -export default connect(({ run_panel, quick_strategy, summary_card }: RootStore) => ({ - is_dialog_open: quick_strategy.is_dialog_open, - is_running: run_panel.is_running, - is_multiplier: summary_card.is_multiplier, - is_contract_dialog_open: quick_strategy.is_contract_dialog_open, - is_stop_bot_dialog_open: quick_strategy.is_stop_bot_dialog_open, - closeMultiplierContract: run_panel.closeMultiplierContract, - onOkButtonClick: run_panel.onOkButtonClick, - stopMyBot: run_panel.stopMyBot, - toggleStopBotDialog: quick_strategy.toggleStopBotDialog, - is_strategy_modal_open: quick_strategy.is_strategy_modal_open, -}))(StopBotModal); + return ( + + ); +}); + +export default StopBotModal; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/workspace-control.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/workspace-control.tsx index f657c674529a..df38f5715cda 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/workspace-control.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard-component/load-bot-preview/workspace-control.tsx @@ -1,29 +1,27 @@ import React from 'react'; import { Icon } from '@deriv/components'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from 'Stores/useDBotStore'; -type TWorkspaceControl = { - onZoomInOutClick: (param: boolean) => void; -}; +const WorkspaceControl = observer(() => { + const { dashboard } = useDBotStore(); + const { onZoomInOutClick } = dashboard; + return ( +
+ onZoomInOutClick(true)} + /> + onZoomInOutClick(false)} + /> +
+ ); +}); -const WorkspaceControl = ({ onZoomInOutClick }: TWorkspaceControl) => ( -
- onZoomInOutClick(true)} - /> - onZoomInOutClick(false)} - /> -
-); - -export default connect(({ dashboard }: RootStore) => ({ - onZoomInOutClick: dashboard.onZoomInOutClick, -}))(WorkspaceControl); +export default WorkspaceControl; diff --git a/packages/bot-web-ui/src/components/dashboard/dashboard.tsx b/packages/bot-web-ui/src/components/dashboard/dashboard.tsx index 4173b0a8efc3..c88dbf6dd0f1 100644 --- a/packages/bot-web-ui/src/components/dashboard/dashboard.tsx +++ b/packages/bot-web-ui/src/components/dashboard/dashboard.tsx @@ -3,12 +3,11 @@ import classNames from 'classnames'; import { initTrashCan } from '@deriv/bot-skeleton/src/scratch/hooks/trashcan'; import { DesktopWrapper, Dialog, MobileWrapper, Tabs } from '@deriv/components'; import { isMobile } from '@deriv/shared'; -import { useStore } from '@deriv/stores'; +import { observer, useStore } from '@deriv/stores'; import { localize } from '@deriv/translations'; import Chart from 'Components/chart'; import { DBOT_TABS, TAB_IDS } from 'Constants/bot-contents'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import RunPanel from '../run-panel'; import RunStrategy from './dashboard-component/run-strategy'; import BotNotification from './bot-notification'; @@ -26,62 +25,29 @@ import TourSlider from './tour-slider'; import TourTriggrerDialog from './tour-trigger-dialog'; import Tutorial from './tutorial-tab'; -type TDialogOptions = { - title: string; - message: string; - cancel_button_text?: string; - ok_button_text?: string; -}; +const Dashboard = observer(() => { + const { dashboard, load_modal, run_panel, quick_strategy } = useDBotStore(); + const { + active_tab, + has_file_loaded, + has_tour_started, + setTourActive, + has_started_onboarding_tour, + setOnBoardTourRunState, + setBotBuilderTourState, + setTourDialogVisibility, + setHasTourEnded, + has_started_bot_builder_tour, + is_tour_dialog_visible, + setActiveTab, + setBotBuilderTokenCheck, + setOnBoardingTokenCheck, + } = dashboard; + const { onEntered } = load_modal; + const { is_dialog_open, is_drawer_open, dialog_options, onCancelButtonClick, onCloseDialog, onOkButtonClick } = + run_panel; + const { is_strategy_modal_open } = quick_strategy; -type TDashboard = { - active_tab: number; - dialog_options: TDialogOptions; - has_started_bot_builder_tour: boolean; - has_file_loaded: boolean; - has_started_onboarding_tour: boolean; - has_tour_started: boolean; - is_dialog_open: boolean; - is_drawer_open: boolean; - is_tour_dialog_visible: boolean; - is_strategy_modal_open: boolean; - onCancelButtonClick: () => void; - onCloseDialog: () => void; - onEntered: () => void; - onOkButtonClick: () => void; - setActiveTab: (active_tab: number) => void; - setBotBuilderTourState: (param: boolean) => void; - setOnBoardTourRunState: (param: boolean) => void; - setBotBuilderTokenCheck: (param: string | number) => void; - setOnBoardingTokenCheck: (param: string | number) => void; - setTourActive: (param: boolean) => void; - setTourDialogVisibility: (param: boolean) => void; - setHasTourEnded: (param: boolean) => void; -}; - -const Dashboard = ({ - active_tab, - is_drawer_open, - dialog_options, - has_file_loaded, - has_tour_started, - has_started_onboarding_tour, - has_started_bot_builder_tour, - is_dialog_open, - is_tour_dialog_visible, - is_strategy_modal_open, - onCancelButtonClick, - onCloseDialog, - onEntered, - onOkButtonClick, - setActiveTab, - setBotBuilderTokenCheck, - setBotBuilderTourState, - setOnBoardingTokenCheck, - setOnBoardTourRunState, - setTourActive, - setTourDialogVisibility, - setHasTourEnded, -}: TDashboard) => { const { DASHBOARD, BOT_BUILDER, CHART, TUTORIAL } = DBOT_TABS; const is_tour_complete = React.useRef(true); let bot_tour_token: string | number = ''; @@ -203,11 +169,13 @@ const Dashboard = ({ setOnBoardTourRunState(true); } else { setHasTourEnded(false); - if (show_tour_dialog_mobile || show_tour_dialog_desktop) { - setTourDialogVisibility(true); - } else { - setTourActive(true); - setOnBoardTourRunState(true); + if (!is_strategy_modal_open) { + if (show_tour_dialog_mobile || show_tour_dialog_desktop) { + setTourDialogVisibility(true); + } else { + setTourActive(true); + setOnBoardTourRunState(true); + } } } } @@ -299,30 +267,6 @@ const Dashboard = ({ ); -}; +}); -export default connect(({ dashboard, run_panel, load_modal, quick_strategy }: RootStore) => ({ - active_tab: dashboard.active_tab, - has_file_loaded: dashboard.has_file_loaded, - has_tour_started: dashboard.has_tour_started, - setTourActive: dashboard.setTourActive, - has_started_onboarding_tour: dashboard.has_started_onboarding_tour, - setOnBoardTourRunState: dashboard.setOnBoardTourRunState, - setBotBuilderTourState: dashboard.setBotBuilderTourState, - onEntered: load_modal.onEntered, - setTourDialogVisibility: dashboard.setTourDialogVisibility, - setHasTourEnded: dashboard.setHasTourEnded, - is_dialog_open: run_panel.is_dialog_open, - is_drawer_open: run_panel.is_drawer_open, - has_started_bot_builder_tour: dashboard.has_started_bot_builder_tour, - is_tour_dialog_visible: dashboard.is_tour_dialog_visible, - dialog_options: run_panel.dialog_options, - onCancelButtonClick: run_panel.onCancelButtonClick, - onCloseDialog: run_panel.onCloseDialog, - onOkButtonClick: run_panel.onOkButtonClick, - setActiveTab: dashboard.setActiveTab, - setBotBuilderTokenCheck: dashboard.setBotBuilderTokenCheck, - setOnBoardingTokenCheck: dashboard.setOnBoardingTokenCheck, - has_tour_ended: dashboard.has_tour_ended, - is_strategy_modal_open: quick_strategy.is_strategy_modal_open, -}))(Dashboard); +export default Dashboard; diff --git a/packages/bot-web-ui/src/components/dashboard/quick-strategy/quick-strategy.tsx b/packages/bot-web-ui/src/components/dashboard/quick-strategy/quick-strategy.tsx index 9401f3905e71..b40dc76bef99 100755 --- a/packages/bot-web-ui/src/components/dashboard/quick-strategy/quick-strategy.tsx +++ b/packages/bot-web-ui/src/components/dashboard/quick-strategy/quick-strategy.tsx @@ -1,15 +1,68 @@ import React from 'react'; import { MobileFullPageModal, Modal } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer, useStore } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; -import { TQuickStrategyProps } from './quick-strategy.types'; +import { useDBotStore } from 'Stores/useDBotStore'; import { QuickStrategyContainer } from './quick-strategy-components'; -const QuickStrategy = (props: TQuickStrategyProps) => { +const QuickStrategy = observer(() => { const is_mobile = isMobile(); - const { is_strategy_modal_open, loadDataStrategy } = props; + const { quick_strategy, run_panel } = useDBotStore(); + const { ui } = useStore(); + const { + is_strategy_modal_open, + loadDataStrategy, + active_index, + description, + createStrategy, + duration_unit_dropdown, + types_strategies_dropdown, + getSizeDesc, + initial_values, + onChangeDropdownItem, + onChangeInputValue, + onHideDropdownList, + onScrollStopDropdownList, + selected_symbol, + selected_trade_type, + selected_duration_unit, + selected_type_strategy, + symbol_dropdown, + trade_type_dropdown, + toggleStopBotDialog, + is_contract_dialog_open, + is_stop_bot_dialog_open, + } = quick_strategy; + const { is_stop_button_visible, is_running } = run_panel; + const { is_onscreen_keyboard_active, setCurrentFocus } = ui; + + const quick_strategy_props = { + symbol_dropdown, + trade_type_dropdown, + active_index, + description, + duration_unit_dropdown, + types_strategies_dropdown, + initial_values, + is_onscreen_keyboard_active, + is_stop_button_visible, + selected_symbol, + selected_trade_type, + selected_duration_unit, + selected_type_strategy, + is_running, + is_contract_dialog_open, + is_stop_bot_dialog_open, + createStrategy, + getSizeDesc, + onChangeDropdownItem, + onChangeInputValue, + onHideDropdownList, + onScrollStopDropdownList, + setCurrentFocus, + toggleStopBotDialog, + }; return ( <> @@ -21,7 +74,7 @@ const QuickStrategy = (props: TQuickStrategyProps) => { onClickClose={loadDataStrategy} height_offset='8rem' > - +
) : ( { width={'78rem'} >
- +
)} ); -}; +}); -export default connect(({ run_panel, quick_strategy, ui }: RootStore) => ({ - active_index: quick_strategy.active_index, - description: quick_strategy.description, - createStrategy: quick_strategy.createStrategy, - duration_unit_dropdown: quick_strategy.duration_unit_dropdown, - types_strategies_dropdown: quick_strategy.types_strategies_dropdown, - getSizeDesc: quick_strategy.getSizeDesc, - initial_values: quick_strategy.initial_values, - is_onscreen_keyboard_active: ui.is_onscreen_keyboard_active, - is_stop_button_visible: run_panel.is_stop_button_visible, - onChangeDropdownItem: quick_strategy.onChangeDropdownItem, - onChangeInputValue: quick_strategy.onChangeInputValue, - onHideDropdownList: quick_strategy.onHideDropdownList, - onScrollStopDropdownList: quick_strategy.onScrollStopDropdownList, - selected_symbol: quick_strategy.selected_symbol, - selected_trade_type: quick_strategy.selected_trade_type, - selected_duration_unit: quick_strategy.selected_duration_unit, - selected_type_strategy: quick_strategy.selected_type_strategy, - symbol_dropdown: quick_strategy.symbol_dropdown, - loadDataStrategy: quick_strategy.loadDataStrategy, - trade_type_dropdown: quick_strategy.trade_type_dropdown, - is_strategy_modal_open: quick_strategy.is_strategy_modal_open, - setCurrentFocus: ui.setCurrentFocus, - toggleStopBotDialog: quick_strategy.toggleStopBotDialog, - is_running: run_panel.is_running, - is_contract_dialog_open: quick_strategy.is_contract_dialog_open, - is_stop_bot_dialog_open: quick_strategy.is_stop_bot_dialog_open, -}))(QuickStrategy); +export default QuickStrategy; diff --git a/packages/bot-web-ui/src/components/dashboard/tour-guide.tsx b/packages/bot-web-ui/src/components/dashboard/tour-guide.tsx index 57519e50dd96..1dadba2b5d58 100644 --- a/packages/bot-web-ui/src/components/dashboard/tour-guide.tsx +++ b/packages/bot-web-ui/src/components/dashboard/tour-guide.tsx @@ -1,8 +1,8 @@ import React from 'react'; import { Loading, Text } from '@deriv/components'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; type TTourGuide = { content: string[]; @@ -12,7 +12,10 @@ type TTourGuide = { step_index: number; }; -const TourGuide = ({ content, img, label, onCloseTour, step_index }: TTourGuide) => { +const TourGuide = observer(({ content, img, label, step_index }: TTourGuide) => { + const { dashboard } = useDBotStore(); + const { onCloseTour } = dashboard; + const [has_image_loaded, setImageLoaded] = React.useState(false); React.useEffect(() => { @@ -62,9 +65,6 @@ const TourGuide = ({ content, img, label, onCloseTour, step_index }: TTourGuide)
); -}; -export default connect(({ dashboard }: RootStore) => ({ - setOnBoardTourRunState: dashboard.setOnBoardTourRunState, - setTourActive: dashboard.setTourActive, - onCloseTour: dashboard.onCloseTour, -}))(TourGuide); +}); + +export default TourGuide; diff --git a/packages/bot-web-ui/src/components/dashboard/tour-slider.tsx b/packages/bot-web-ui/src/components/dashboard/tour-slider.tsx index 93d11e358546..d277a0a7f6aa 100644 --- a/packages/bot-web-ui/src/components/dashboard/tour-slider.tsx +++ b/packages/bot-web-ui/src/components/dashboard/tour-slider.tsx @@ -1,9 +1,9 @@ import React from 'react'; import classNames from 'classnames'; import { Icon, ProgressBarOnboarding, Text } from '@deriv/components'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import { BOT_BUILDER_MOBILE, DBOT_ONBOARDING_MOBILE, TStepMobile } from './joyride-config'; type TTourButton = { @@ -12,15 +12,6 @@ type TTourButton = { label: string; }; -type TTourSlider = { - has_started_bot_builder_tour: boolean; - has_started_onboarding_tour: boolean; - onCloseTour: () => void; - onTourEnd: (step: number, has_started_onboarding_tour: boolean) => void; - setTourActiveStep: (param: number) => void; - toggleTourLoadModal: (toggle: boolean) => void; -}; - type TAccordion = { content_data: TStepMobile; expanded: boolean; @@ -67,14 +58,11 @@ const Accordion = ({ content_data, expanded = false, ...props }: TAccordion) => ); }; -const TourSlider = ({ - onCloseTour, - onTourEnd, - has_started_onboarding_tour, - has_started_bot_builder_tour, - setTourActiveStep, - toggleTourLoadModal, -}: TTourSlider) => { +const TourSlider = observer(() => { + const { dashboard, load_modal } = useDBotStore(); + const { has_started_bot_builder_tour, has_started_onboarding_tour, onCloseTour, onTourEnd, setTourActiveStep } = + dashboard; + const { toggleTourLoadModal } = load_modal; const [step, setStep] = React.useState(1); const [slider_content, setContent] = React.useState(''); const [slider_header, setheader] = React.useState(''); @@ -226,15 +214,6 @@ const TourSlider = ({ ); -}; +}); -export default connect(({ dashboard, load_modal }: RootStore) => ({ - active_tab: dashboard.active_tab, - has_started_bot_builder_tour: dashboard.has_started_bot_builder_tour, - has_started_onboarding_tour: dashboard.has_started_onboarding_tour, - onCloseTour: dashboard.onCloseTour, - onTourEnd: dashboard.onTourEnd, - setActiveTab: dashboard.setActiveTab, - setTourActiveStep: dashboard.setTourActiveStep, - toggleTourLoadModal: load_modal.toggleTourLoadModal, -}))(TourSlider); +export default TourSlider; diff --git a/packages/bot-web-ui/src/components/dashboard/tour-trigger-dialog.spec.tsx b/packages/bot-web-ui/src/components/dashboard/tour-trigger-dialog.spec.tsx index 7f0516d763ee..d9bbd0d994ec 100644 --- a/packages/bot-web-ui/src/components/dashboard/tour-trigger-dialog.spec.tsx +++ b/packages/bot-web-ui/src/components/dashboard/tour-trigger-dialog.spec.tsx @@ -1,31 +1,180 @@ import React from 'react'; -import { render, screen } from '@testing-library/react'; -import { mocked_props } from './dashboard-component/__tests__/dashboard-component.spec'; +import { mockStore, StoreProvider } from '@deriv/stores'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { act, fireEvent, render, screen } from '@testing-library/react'; +import RootStore from '../../stores/root-store'; +import { DBotStoreProvider, mockDBotStore } from '../../stores/useDBotStore'; +import { setTourType } from './joyride-config'; import TourTriggrerDialog from './tour-trigger-dialog'; -const mock_connect_props = { - dialog_options: { - title: 'string', - message: 'string', - ok_button_text: 'string', - cancel_button_text: 'string', - }, - setStrategySaveType: jest.fn(), -}; +jest.mock('@deriv/shared', () => ({ + ...jest.requireActual('@deriv/shared'), + isMobile: jest.fn(() => false), +})); -jest.mock('Stores/connect.js', () => ({ - __esModule: true, - default: 'mockedDefaultExport', - connect: - () => - (Component: T) => - props => - Component({ ...props, ...mock_connect_props }), +jest.mock('@deriv/bot-skeleton/src/scratch/blockly', () => jest.fn()); +jest.mock('@deriv/bot-skeleton/src/scratch/dbot', () => ({ + saveRecentWorkspace: jest.fn(), + unHighlightAllBlocks: jest.fn(), +})); +jest.mock('@deriv/bot-skeleton/src/scratch/hooks/block_svg', () => ({ + blocksCoordinate: jest.fn(), })); +const mock_ws = { + authorized: { + subscribeProposalOpenContract: jest.fn(), + send: jest.fn(), + }, + storage: { + send: jest.fn(), + }, + contractUpdate: jest.fn(), + subscribeTicksHistory: jest.fn(), + forgetStream: jest.fn(), + activeSymbols: jest.fn(), + send: jest.fn(), +}; + describe('', () => { - it('renders tour trigger dialog', () => { - render(); + let wrapper: ({ children }: { children: JSX.Element }) => JSX.Element, mock_DBot_store: RootStore | undefined; + + beforeAll(() => { + const mock_store = mockStore({}); + mock_DBot_store = mockDBotStore(mock_store, mock_ws); + + wrapper = ({ children }: { children: JSX.Element }) => ( + + + {children} + + + ); + }); + + it('renders tour trigger component', () => { + const { container } = render(, { + wrapper, + }); + expect(container).toBeInTheDocument(); + }); + + it('should open tour trigger dialog', () => { + act(() => { + mock_DBot_store?.dashboard?.setTourDialogVisibility(true); + }); + render(, { + wrapper, + }); expect(screen.getByText(/Get started on Deriv Bot/i)).toBeInTheDocument(); }); + + it('should show tour end message', () => { + act(() => { + mock_DBot_store?.dashboard?.setTourDialogVisibility(true); + mock_DBot_store?.dashboard?.setHasTourEnded(true); + }); + render(, { + wrapper, + }); + expect(screen.getByText(/Want to retake the tour?/i)).toBeInTheDocument(); + }); + + it('should start onboarding tour', () => { + act(() => { + mock_DBot_store?.dashboard?.setActiveTab(1); + mock_DBot_store?.dashboard?.setTourDialogVisibility(true); + mock_DBot_store?.dashboard?.setHasTourEnded(false); + }); + render(, { + wrapper, + }); + + act(() => { + const buttonElement = screen.getByText('Start', { selector: 'span' }); + fireEvent.click(buttonElement); + }); + + expect(screen.getByText('OK')).toBeInTheDocument(); + }); + + it('should show tour success message', () => { + act(() => { + mock_DBot_store?.dashboard?.setTourDialogVisibility(true); + mock_DBot_store?.dashboard?.setActiveTab(1); + mock_DBot_store?.dashboard?.setHasTourEnded(true); + }); + render(, { + wrapper, + }); + expect(screen.getByTestId('tour-success-message')).toBeInTheDocument(); + }); + + it('should cancel tour', () => { + act(() => { + mock_DBot_store?.dashboard?.setTourDialogVisibility(true); + mock_DBot_store?.dashboard?.setActiveTab(1); + mock_DBot_store?.dashboard?.setHasTourEnded(true); + }); + render(, { + wrapper, + }); + + act(() => { + const buttonElement = screen.getByText('Skip', { selector: 'span' }); + fireEvent.click(buttonElement); + }); + + expect(mock_DBot_store?.dashboard?.is_tour_dialog_visible).toBeFalsy(); + }); + + it('should render bot builder tour', () => { + act(() => { + mock_DBot_store?.dashboard?.setActiveTab(1); + mock_DBot_store?.dashboard?.setTourDialogVisibility(true); + mock_DBot_store?.dashboard?.setHasTourEnded(false); + }); + render(, { + wrapper, + }); + expect(screen.getByText("Let's build a Bot!")).toBeInTheDocument(); + }); + + it('should start bot builder tour', () => { + act(() => { + setTourType('bot_builder'); + mock_DBot_store?.dashboard?.setActiveTab(2); + mock_DBot_store?.dashboard?.setTourDialogVisibility(true); + mock_DBot_store?.dashboard?.setHasTourEnded(false); + }); + render(, { + wrapper, + }); + + act(() => { + const buttonElement = screen.getByText('Start', { selector: 'span' }); + fireEvent.click(buttonElement); + }); + + expect(screen.getByText('OK')).toBeInTheDocument(); + }); + + it('should exit bot builder tour', () => { + act(() => { + setTourType('bot_builder'); + mock_DBot_store?.dashboard?.setActiveTab(2); + mock_DBot_store?.dashboard?.setTourDialogVisibility(true); + mock_DBot_store?.dashboard?.setHasTourEnded(true); + }); + render(, { + wrapper, + }); + + act(() => { + const buttonElement = screen.getByText('Skip', { selector: 'span' }); + fireEvent.click(buttonElement); + }); + + expect(mock_DBot_store?.dashboard?.is_tour_dialog_visible).toBeFalsy(); + }); }); diff --git a/packages/bot-web-ui/src/components/dashboard/tour-trigger-dialog.tsx b/packages/bot-web-ui/src/components/dashboard/tour-trigger-dialog.tsx index 0041c0f02ddf..a8746e9be11c 100644 --- a/packages/bot-web-ui/src/components/dashboard/tour-trigger-dialog.tsx +++ b/packages/bot-web-ui/src/components/dashboard/tour-trigger-dialog.tsx @@ -2,26 +2,15 @@ import React from 'react'; import classNames from 'classnames'; import { Dialog, Text } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { Localize, localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from '../../stores/useDBotStore'; import { setTourSettings, tour_status_ended, tour_type } from './joyride-config'; -type TTourTriggrerDialog = { - active_tab: number; - has_tour_ended: boolean; - is_tour_dialog_visible: boolean; - setTourDialogVisibility: (param: boolean) => void; - toggleOnConfirm: (active_tab: number, value: boolean) => void; -}; +const TourTriggrerDialog = observer(() => { + const { dashboard } = useDBotStore(); + const { active_tab, has_tour_ended, is_tour_dialog_visible, setTourDialogVisibility, toggleOnConfirm } = dashboard; -const TourTriggrerDialog = ({ - active_tab, - has_tour_ended, - is_tour_dialog_visible, - setTourDialogVisibility, - toggleOnConfirm, -}: TTourTriggrerDialog) => { const is_mobile = isMobile(); const toggleTour = (value: boolean, type: string) => { @@ -110,7 +99,7 @@ const TourTriggrerDialog = ({ ) : ( <> -
+
); -}; +}); -export default connect(({ dashboard }: RootStore) => ({ - active_tab: dashboard.active_tab, - has_tour_ended: dashboard.has_tour_ended, - is_tour_dialog_visible: dashboard.is_tour_dialog_visible, - setTourDialogVisibility: dashboard.setTourDialogVisibility, - toggleOnConfirm: dashboard.toggleOnConfirm, -}))(TourTriggrerDialog); +export default TourTriggrerDialog; diff --git a/packages/bot-web-ui/src/components/dashboard/tutorial-tab/faq-content.tsx b/packages/bot-web-ui/src/components/dashboard/tutorial-tab/faq-content.tsx index 79c65d973507..d830656c95aa 100644 --- a/packages/bot-web-ui/src/components/dashboard/tutorial-tab/faq-content.tsx +++ b/packages/bot-web-ui/src/components/dashboard/tutorial-tab/faq-content.tsx @@ -1,14 +1,13 @@ import React from 'react'; -import { Accordion, Text } from '@deriv/components'; +import { Text, Accordion } from '@deriv/components'; import { isMobile } from '@deriv/shared'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from 'Stores/useDBotStore'; import { TDescription } from './tutorial-content'; type TFAQContent = { faq_list: TFAQList[]; - faq_search_value: string; hide_header?: boolean; }; @@ -34,7 +33,11 @@ const FAQ = ({ type, content, src }: TDescription) => { ); }; -const FAQContent = ({ faq_list, faq_search_value, hide_header = false }: TFAQContent) => { +const FAQContent = observer(({ faq_list, hide_header = false }: TFAQContent) => { + const { dashboard } = useDBotStore(); + + const { faq_search_value } = dashboard; + const getList = () => { return faq_list.map(({ title, description }: TFAQList) => ({ header: ( @@ -75,8 +78,6 @@ const FAQContent = ({ faq_list, faq_search_value, hide_header = false }: TFAQCon
); -}; +}); -export default connect(({ dashboard }: RootStore) => ({ - faq_search_value: dashboard.faq_search_value, -}))(FAQContent); +export default FAQContent; diff --git a/packages/bot-web-ui/src/components/dashboard/tutorial-tab/guide-content.tsx b/packages/bot-web-ui/src/components/dashboard/tutorial-tab/guide-content.tsx index 7cc5418151a0..7f5486abc4d0 100644 --- a/packages/bot-web-ui/src/components/dashboard/tutorial-tab/guide-content.tsx +++ b/packages/bot-web-ui/src/components/dashboard/tutorial-tab/guide-content.tsx @@ -2,40 +2,32 @@ import React from 'react'; import classNames from 'classnames'; import { Dialog, Icon, Text } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; import { DBOT_TABS } from 'Constants/bot-contents'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import { removeKeyValue } from '../../../utils/settings'; import { tour_type } from '../joyride-config'; type TGuideContent = { - dialog_options: { [key: string]: string }; - faq_search_value: string; guide_list: []; - is_dialog_open: boolean; - onOkButtonClick: () => void; - setActiveTab: (tab_title: number) => void; - setHasTourEnded: (param: boolean) => boolean; - setOnBoardTourRunState: (param: boolean) => boolean; - setTourActive: (param: boolean) => boolean; - setTourDialogVisibility: (param: boolean) => boolean; - showVideoDialog: (param: { [key: string]: string }) => void; }; -const GuideContent = ({ - dialog_options, - faq_search_value, - guide_list, - is_dialog_open, - onOkButtonClick, - setActiveTab, - setHasTourEnded, - setOnBoardTourRunState, - setTourActive, - setTourDialogVisibility, - showVideoDialog, -}: TGuideContent) => { +const GuideContent = observer(({ guide_list }: TGuideContent) => { + const { dashboard } = useDBotStore(); + const { + dialog_options, + faq_search_value, + is_dialog_open, + onCloseDialog: onOkButtonClick, + setActiveTab, + setHasTourEnded, + setOnBoardTourRunState, + setTourActive, + setTourDialogVisibility, + showVideoDialog, + } = dashboard; + const triggerTour = (type: string) => { const storage = JSON.parse(localStorage?.dbot_settings); if (type === 'OnBoard') { @@ -180,18 +172,6 @@ const GuideContent = ({ ), [guide_list, is_dialog_open] ); -}; +}); -export default connect(({ dashboard, load_modal }: RootStore) => ({ - dialog_options: dashboard.dialog_options, - faq_search_value: dashboard.faq_search_value, - is_dialog_open: dashboard.is_dialog_open, - onOkButtonClick: dashboard.onCloseDialog, - setActiveTab: dashboard.setActiveTab, - setHasTourEnded: dashboard.setHasTourEnded, - setOnBoardTourRunState: dashboard.setOnBoardTourRunState, - setTourActive: dashboard.setTourActive, - setTourDialogVisibility: dashboard.setTourDialogVisibility, - showVideoDialog: dashboard.showVideoDialog, - toggleLoadModal: load_modal.toggleLoadModal, -}))(GuideContent); +export default GuideContent; diff --git a/packages/bot-web-ui/src/components/dashboard/tutorial-tab/sidebar.tsx b/packages/bot-web-ui/src/components/dashboard/tutorial-tab/sidebar.tsx index 33b21097cc37..8e293ef1c166 100644 --- a/packages/bot-web-ui/src/components/dashboard/tutorial-tab/sidebar.tsx +++ b/packages/bot-web-ui/src/components/dashboard/tutorial-tab/sidebar.tsx @@ -3,28 +3,16 @@ import classNames from 'classnames'; import debounce from 'lodash.debounce'; import { DesktopWrapper, Icon, MobileWrapper, SelectNative, Tabs } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { useDBotStore } from 'Stores/useDBotStore'; import FAQContent from './faq-content'; import GuideContent from './guide-content'; import { faq_content, guide_content, user_guide_content } from './tutorial-content'; -type TSidebarProps = { - active_tab_tutorials: number; - active_tab: number; - faq_search_value: string; - setActiveTabTutorial: (active_tab_tutorials: number) => void; - setFAQSearchValue: (setFAQSearchValue: string) => void; -}; - -const Sidebar = ({ - active_tab_tutorials, - active_tab, - faq_search_value, - setActiveTabTutorial, - setFAQSearchValue, -}: TSidebarProps) => { +const Sidebar = observer(() => { + const { dashboard } = useDBotStore(); + const { active_tab_tutorials, active_tab, faq_search_value, setActiveTabTutorial, setFAQSearchValue } = dashboard; const guide_tab_content = [...user_guide_content, ...guide_content]; const [search_filtered_list, setsearchFilteredList] = React.useState(guide_tab_content); const [search_faq_list, setsearchFAQList] = React.useState(faq_content); @@ -123,12 +111,6 @@ const Sidebar = ({ ); -}; +}); -export default connect(({ dashboard }: RootStore) => ({ - active_tab_tutorials: dashboard.active_tab_tutorials, - active_tab: dashboard.active_tab, - faq_search_value: dashboard.faq_search_value, - setActiveTabTutorial: dashboard.setActiveTabTutorial, - setFAQSearchValue: dashboard.setFAQSearchValue, -}))(Sidebar); +export default Sidebar; diff --git a/packages/bot-web-ui/src/components/download/download.tsx b/packages/bot-web-ui/src/components/download/download.tsx index 40424fca8338..5290186132be 100644 --- a/packages/bot-web-ui/src/components/download/download.tsx +++ b/packages/bot-web-ui/src/components/download/download.tsx @@ -1,22 +1,18 @@ import React from 'react'; import { Button, Icon, Popover } from '@deriv/components'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from 'Stores/useDBotStore'; type TDownloadProps = { - onClickDownloadTransaction: () => void; - onClickDownloadJournal: () => void; tab: string; - is_clear_stat_disabled: boolean; }; -const Download = ({ - tab, - onClickDownloadTransaction, - onClickDownloadJournal, - is_clear_stat_disabled, -}: TDownloadProps) => { +const Download = observer(({ tab }: TDownloadProps) => { + const { download, run_panel } = useDBotStore(); + const { is_clear_stat_disabled } = run_panel; + const { onClickDownloadTransaction, onClickDownloadJournal } = download; + let clickFunction, popover_message; if (tab === 'transactions') { clickFunction = onClickDownloadTransaction; @@ -44,10 +40,6 @@ const Download = ({ /> ); -}; +}); -export default connect(({ download, run_panel }: RootStore) => ({ - onClickDownloadTransaction: download.onClickDownloadTransaction, - onClickDownloadJournal: download.onClickDownloadJournal, - is_clear_stat_disabled: run_panel.is_clear_stat_disabled, -}))(Download); +export default Download; diff --git a/packages/bot-web-ui/src/components/flyout/flyout-block.jsx b/packages/bot-web-ui/src/components/flyout/flyout-block.jsx index 3e33e5c543da..a94c7dbbd2d7 100644 --- a/packages/bot-web-ui/src/components/flyout/flyout-block.jsx +++ b/packages/bot-web-ui/src/components/flyout/flyout-block.jsx @@ -1,9 +1,12 @@ import React from 'react'; import classNames from 'classnames'; -import PropTypes from 'prop-types'; -import { connect } from 'Stores/connect'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from 'Stores/useDBotStore'; + +const FlyoutBlock = observer(({ block_node, should_center_block, should_hide_display_name }) => { + const { flyout } = useDBotStore(); + const { initBlockWorkspace } = flyout; -const FlyoutBlock = ({ initBlockWorkspace, block_node, should_center_block, should_hide_display_name }) => { let el_block_workspace = React.useRef(); React.useEffect(() => { @@ -20,15 +23,6 @@ const FlyoutBlock = ({ initBlockWorkspace, block_node, should_center_block, shou })} /> ); -}; - -FlyoutBlock.propTypes = { - block_node: PropTypes.any, - initBlockWorkspace: PropTypes.func, - should_center_block: PropTypes.bool, - should_hide_display_name: PropTypes.bool, -}; +}); -export default connect(({ flyout }) => ({ - initBlockWorkspace: flyout.initBlockWorkspace, -}))(FlyoutBlock); +export default FlyoutBlock; diff --git a/packages/bot-web-ui/src/components/flyout/flyout.jsx b/packages/bot-web-ui/src/components/flyout/flyout.jsx index b30fa383f9f1..4a419eb83484 100644 --- a/packages/bot-web-ui/src/components/flyout/flyout.jsx +++ b/packages/bot-web-ui/src/components/flyout/flyout.jsx @@ -1,11 +1,11 @@ import React from 'react'; import classNames from 'classnames'; -import PropTypes from 'prop-types'; import { Icon, Input, Text, ThemedScrollbars } from '@deriv/components'; import { getPlatformSettings } from '@deriv/shared'; +import { observer, useStore } from '@deriv/stores'; import { localize } from '@deriv/translations'; import { help_content_config } from 'Utils/help-content/help-content.config'; -import { connect } from 'Stores/connect'; +import { useDBotStore } from 'Stores/useDBotStore'; import FlyoutBlockGroup from './flyout-block-group.jsx'; import HelpBase from './help-contents'; @@ -159,7 +159,10 @@ const FlyoutContent = props => { ); }; -const Flyout = props => { +const Flyout = observer(() => { + const { flyout, flyout_help } = useDBotStore(); + const { gtm } = useStore(); + const { active_helper, initFlyoutHelp, setHelpContent } = flyout_help; const { flyout_content, flyout_width, @@ -168,9 +171,11 @@ const Flyout = props => { is_visible, onMount, onUnmount, - pushDataLayer, search_term, - } = props; + selected_category, + first_get_variable_block_index, + } = flyout; + const { pushDataLayer } = gtm; React.useEffect(() => { onMount(); @@ -198,43 +203,23 @@ const Flyout = props => { {is_search_flyout && !is_help_content && ( )} - {is_help_content ? : } + {is_help_content ? ( + + ) : ( + + )} ) ); -}; - -Flyout.propTypes = { - active_helper: PropTypes.string, - flyout_content: PropTypes.any, - flyout_width: PropTypes.number, - initFlyoutHelp: PropTypes.func, - is_help_content: PropTypes.bool, - is_search_flyout: PropTypes.bool, - is_visible: PropTypes.bool, - onMount: PropTypes.func, - onUnmount: PropTypes.func, - setActiveHelper: PropTypes.func, - search_term: PropTypes.string, - setHelpContent: PropTypes.func, - selected_category: PropTypes.object, - first_get_variable_block_index: PropTypes.number, -}; +}); -export default connect(({ flyout, flyout_help, gtm }) => ({ - active_helper: flyout_help.active_helper, - pushDataLayer: gtm.pushDataLayer, - flyout_content: flyout.flyout_content, - flyout_width: flyout.flyout_width, - initFlyoutHelp: flyout_help.initFlyoutHelp, - is_help_content: flyout.is_help_content, - is_search_flyout: flyout.is_search_flyout, - is_visible: flyout.is_visible, - onMount: flyout.onMount, - onUnmount: flyout.onUnmount, - setActiveHelper: flyout_help.setActiveHelper, - search_term: flyout.search_term, - setHelpContent: flyout_help.setHelpContent, - selected_category: flyout.selected_category, - first_get_variable_block_index: flyout.first_get_variable_block_index, -}))(Flyout); +export default Flyout; diff --git a/packages/bot-web-ui/src/components/flyout/help-contents/flyout-help-base.jsx b/packages/bot-web-ui/src/components/flyout/help-contents/flyout-help-base.jsx index 1d967b8db994..b9c766eebef7 100644 --- a/packages/bot-web-ui/src/components/flyout/help-contents/flyout-help-base.jsx +++ b/packages/bot-web-ui/src/components/flyout/help-contents/flyout-help-base.jsx @@ -1,26 +1,29 @@ import React from 'react'; -import PropTypes from 'prop-types'; import { Button, Icon, Text } from '@deriv/components'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; import { help_content_config, help_content_types } from 'Utils/help-content/help-content.config'; -import { connect } from 'Stores/connect'; +import { useDBotStore } from 'Stores/useDBotStore'; import FlyoutBlock from '../flyout-block.jsx'; import FlyoutImage from './flyout-img.jsx'; import FlyoutText from './flyout-text.jsx'; import FlyoutVideo from './flyout-video.jsx'; -const HelpBase = ({ - block_node, - block_type, - examples, - help_string, - is_search_flyout, - onBackClick, - onSequenceClick, - should_next_disable, - should_previous_disable, - title, -}) => { +const HelpBase = observer(() => { + const { flyout, flyout_help } = useDBotStore(); + const { + block_node, + block_type, + examples, + help_string, + onBackClick, + onSequenceClick, + should_next_disable, + should_previous_disable, + title, + } = flyout_help; + const { is_search_flyout } = flyout; + const block_help_component = help_string && help_content_config(__webpack_public_path__)[block_type]; let text_count = 0; @@ -122,30 +125,6 @@ const HelpBase = ({ )} ); -}; - -HelpBase.propTypes = { - block_node: PropTypes.object, - block_type: PropTypes.string, - examples: PropTypes.array, - help_string: PropTypes.object, - is_search_flyout: PropTypes.bool, - onBackClick: PropTypes.func, - onSequenceClick: PropTypes.func, - should_next_disable: PropTypes.bool, - should_previous_disable: PropTypes.bool, - title: PropTypes.string, -}; +}); -export default connect(({ flyout, flyout_help }) => ({ - block_node: flyout_help.block_node, - block_type: flyout_help.block_type, - examples: flyout_help.examples, - help_string: flyout_help.help_string, - is_search_flyout: flyout.is_search_flyout, - onBackClick: flyout_help.onBackClick, - onSequenceClick: flyout_help.onSequenceClick, - should_next_disable: flyout_help.should_next_disable, - should_previous_disable: flyout_help.should_previous_disable, - title: flyout_help.title, -}))(HelpBase); +export default HelpBase; diff --git a/packages/bot-web-ui/src/components/index.js b/packages/bot-web-ui/src/components/index.js index 192befc9f2fd..a207acea4350 100644 --- a/packages/bot-web-ui/src/components/index.js +++ b/packages/bot-web-ui/src/components/index.js @@ -13,7 +13,6 @@ export { default as NetworkToastPopup } from './network-toast-popup'; export { arrayAsMessage, messageWithButton, messageWithImage } from './notify-item'; export { default as RoutePromptDialog } from './route-prompt-dialog'; export { default as RunPanel } from './run-panel'; -export { default as SaveModal } from './save-modal'; export { default as SelfExclusion } from './self-exclusion'; export { default as Summary } from './summary'; export { default as TradeAnimation } from './trade-animation'; diff --git a/packages/bot-web-ui/src/components/journal/journal.tsx b/packages/bot-web-ui/src/components/journal/journal.tsx index 42a37429c97c..9dea7b543b1b 100644 --- a/packages/bot-web-ui/src/components/journal/journal.tsx +++ b/packages/bot-web-ui/src/components/journal/journal.tsx @@ -2,23 +2,28 @@ import React from 'react'; import classnames from 'classnames'; import { DataList, Icon, Text } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; import { contract_stages } from 'Constants/contract-stage'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/index'; -import { TCheckedFilters, TFilterMessageValues, TJournalDataListArgs, TJournalProps } from './journal.types'; +import { useDBotStore } from 'Stores/useDBotStore'; +import { TCheckedFilters, TFilterMessageValues, TJournalDataListArgs } from './journal.types'; import { JournalItem, JournalLoader, JournalTools } from './journal-components'; -const Journal = ({ - contract_stage, - filtered_messages, - is_stop_button_visible, - unfiltered_messages, - ...props -}: TJournalProps) => { +const Journal = observer(() => { + const { journal, run_panel } = useDBotStore(); + const { + checked_filters, + filterMessage, + filters, + filtered_messages, + is_filter_dialog_visible, + toggleFilterDialog, + unfiltered_messages, + } = journal; + const { is_stop_button_visible, contract_stage } = run_panel; + const filtered_messages_length = Array.isArray(filtered_messages) && filtered_messages.length; const unfiltered_messages_length = Array.isArray(unfiltered_messages) && unfiltered_messages.length; - const { checked_filters } = props; const is_mobile = isMobile(); return ( @@ -27,7 +32,13 @@ const Journal = ({ 'run-panel-tab__content': !is_mobile, })} > - +
{filtered_messages_length ? (
); -}; +}); -export default connect(({ journal, run_panel }: RootStore) => ({ - checked_filters: journal.checked_filters, - filterMessage: journal.filterMessage, - filters: journal.filters, - filtered_messages: journal.filtered_messages, - is_filter_dialog_visible: journal.is_filter_dialog_visible, - toggleFilterDialog: journal.toggleFilterDialog, - unfiltered_messages: journal.unfiltered_messages, - is_stop_button_visible: run_panel.is_stop_button_visible, - contract_stage: run_panel.contract_stage, -}))(Journal); +export default Journal; diff --git a/packages/bot-web-ui/src/components/load-modal/load-modal.tsx b/packages/bot-web-ui/src/components/load-modal/load-modal.tsx index 3e07e73567b0..60c9de91c256 100644 --- a/packages/bot-web-ui/src/components/load-modal/load-modal.tsx +++ b/packages/bot-web-ui/src/components/load-modal/load-modal.tsx @@ -1,39 +1,29 @@ import React from 'react'; import { MobileFullPageModal, Modal, Tabs } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; import { tabs_title } from 'Constants/load-modal'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/root-store'; +import { useDBotStore } from 'Stores/useDBotStore'; import GoogleDrive from '../dashboard/dashboard-component/load-bot-preview/google-drive'; import Local from './local'; import LocalFooter from './local-footer'; import Recent from './recent'; import RecentFooter from './recent-footer'; -type TLoadModalProps = { - active_index: number; - is_load_modal_open: boolean; - loaded_local_file: string; - onEntered: () => void; - recent_strategies: any[]; - setActiveTabIndex: () => void; - setPreviewOnPopup: (show: boolean) => void; - tab_name: string; - toggleLoadModal: () => void; -}; - -const LoadModal = ({ - active_index, - is_load_modal_open, - loaded_local_file, - onEntered, - recent_strategies, - setActiveTabIndex, - setPreviewOnPopup, - tab_name, - toggleLoadModal, -}: TLoadModalProps) => { +const LoadModal = observer(() => { + const { load_modal, dashboard } = useDBotStore(); + const { + active_index, + is_load_modal_open, + loaded_local_file, + onEntered, + recent_strategies, + setActiveTabIndex, + toggleLoadModal, + tab_name, + } = load_modal; + const { setPreviewOnPopup } = dashboard; const header_text = localize('Load strategy'); if (isMobile()) { @@ -100,16 +90,6 @@ const LoadModal = ({ )} ); -}; +}); -export default connect(({ load_modal, dashboard }: RootStore) => ({ - active_index: load_modal.active_index, - is_load_modal_open: load_modal.is_load_modal_open, - loaded_local_file: load_modal.loaded_local_file, - onEntered: load_modal.onEntered, - recent_strategies: load_modal.recent_strategies, - setActiveTabIndex: load_modal.setActiveTabIndex, - tab_name: load_modal.tab_name, - toggleLoadModal: load_modal.toggleLoadModal, - setPreviewOnPopup: dashboard.setPreviewOnPopup, -}))(LoadModal); +export default LoadModal; diff --git a/packages/bot-web-ui/src/components/load-modal/local-footer.tsx b/packages/bot-web-ui/src/components/load-modal/local-footer.tsx index 384056add341..a17e70de1e1f 100644 --- a/packages/bot-web-ui/src/components/load-modal/local-footer.tsx +++ b/packages/bot-web-ui/src/components/load-modal/local-footer.tsx @@ -1,27 +1,15 @@ import React from 'react'; import { Button } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/root-store'; +import { useDBotStore } from 'Stores/useDBotStore'; -type TLocalFooterProps = { - is_open_button_loading: boolean; - loadFileFromLocal: () => void; - setLoadedLocalFile: (loaded_local_file: boolean | null) => void; - setOpenSettings: (toast_message: string, show_toast?: boolean) => void; - setPreviewOnPopup: (show: boolean) => void; - toggleLoadModal: () => void; -}; +const LocalFooter = observer(() => { + const { load_modal, dashboard } = useDBotStore(); + const { is_open_button_loading, loadFileFromLocal, setLoadedLocalFile, toggleLoadModal } = load_modal; + const { setOpenSettings, setPreviewOnPopup } = dashboard; -const LocalFooter = ({ - is_open_button_loading, - loadFileFromLocal, - setLoadedLocalFile, - setOpenSettings, - setPreviewOnPopup, - toggleLoadModal, -}: TLocalFooterProps) => { const is_mobile = isMobile(); const Wrapper = is_mobile ? Button.Group : React.Fragment; @@ -45,13 +33,6 @@ const LocalFooter = ({ /> ); -}; +}); -export default connect(({ load_modal, dashboard }: RootStore) => ({ - is_open_button_loading: load_modal.is_open_button_loading, - loadFileFromLocal: load_modal.loadFileFromLocal, - setLoadedLocalFile: load_modal.setLoadedLocalFile, - setOpenSettings: dashboard.setOpenSettings, - setPreviewOnPopup: dashboard.setPreviewOnPopup, - toggleLoadModal: load_modal.toggleLoadModal, -}))(LocalFooter); +export default LocalFooter; diff --git a/packages/bot-web-ui/src/components/load-modal/local.tsx b/packages/bot-web-ui/src/components/load-modal/local.tsx index bdbc581830dd..ef18b5150717 100644 --- a/packages/bot-web-ui/src/components/load-modal/local.tsx +++ b/packages/bot-web-ui/src/components/load-modal/local.tsx @@ -2,31 +2,17 @@ import React from 'react'; import classNames from 'classnames'; import { Button, Icon } from '@deriv/components'; import { isMobile } from '@deriv/shared'; +import { observer } from '@deriv/stores'; import { Localize, localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/root-store'; +import { useDBotStore } from 'Stores/useDBotStore'; import LocalFooter from './local-footer'; import WorkspaceControl from './workspace-control'; -type TLocalComponentProps = { - active_tab: number; - has_started_bot_builder_tour: boolean; - handleFileChange: ( - e: React.MouseEvent | React.FormEvent | DragEvent, - is_body?: boolean - ) => boolean; - is_open_button_loading: boolean; - loaded_local_file: string; - setLoadedLocalFile: (loaded_local_file: boolean | null) => void; -}; +const LocalComponent = observer(() => { + const { dashboard, load_modal } = useDBotStore(); + const { active_tab, has_started_bot_builder_tour } = dashboard; + const { handleFileChange, loaded_local_file, setLoadedLocalFile } = load_modal; -const LocalComponent = ({ - active_tab, - has_started_bot_builder_tour, - handleFileChange, - loaded_local_file, - setLoadedLocalFile, -}: TLocalComponentProps) => { const file_input_ref = React.useRef(null); const [is_file_supported, setIsFileSupported] = React.useState(true); const is_mobile = isMobile(); @@ -104,15 +90,6 @@ const LocalComponent = ({ ); -}; +}); -const Local = connect(({ load_modal, dashboard }: RootStore) => ({ - active_tab: dashboard.active_tab, - has_started_bot_builder_tour: dashboard.has_started_bot_builder_tour, - handleFileChange: load_modal.handleFileChange, - is_open_button_loading: load_modal.is_open_button_loading, - loaded_local_file: load_modal.loaded_local_file, - setLoadedLocalFile: load_modal.setLoadedLocalFile, -}))(LocalComponent); - -export default Local; +export default LocalComponent; diff --git a/packages/bot-web-ui/src/components/load-modal/recent-footer.tsx b/packages/bot-web-ui/src/components/load-modal/recent-footer.tsx index 158f33b1b1a8..f41830c5cb22 100644 --- a/packages/bot-web-ui/src/components/load-modal/recent-footer.tsx +++ b/packages/bot-web-ui/src/components/load-modal/recent-footer.tsx @@ -1,22 +1,14 @@ import React from 'react'; import { Button } from '@deriv/components'; import { localize } from '@deriv/translations'; -import { connect } from 'Stores/connect'; -import RootStore from 'Stores/root-store'; +import { observer } from '@deriv/stores'; +import { useDBotStore } from 'Stores/useDBotStore'; -type TRecentFooterProps = { - is_open_button_loading: boolean; - loadFileFromRecent: () => void; - setOpenSettings: (toast_message: string, show_toast?: boolean) => void; - toggleLoadModal: () => void; -}; +const RecentFooter = observer(() => { + const { load_modal, dashboard } = useDBotStore(); + const { is_open_button_loading, loadFileFromRecent, toggleLoadModal } = load_modal; + const { setOpenSettings } = dashboard; -const RecentFooter = ({ - is_open_button_loading, - loadFileFromRecent, - setOpenSettings, - toggleLoadModal, -}: TRecentFooterProps) => { return ( + + +); + +jest.mock('../../Components/cfd-poa', () => + jest.fn(({ onCancel, onSubmit }) => ( +
+ CFDPOA + +
+ )) +); jest.mock('../../Components/cfd-poi', () => - jest.fn(({ onSubmit }) => ( -
onSubmit(0, {})}> + jest.fn(({ onCancel, onSubmit }) => ( +
CFDPOI +
)) ); +jest.mock('@deriv/shared', () => ({ + ...jest.requireActual('@deriv/shared'), + getAuthenticationStatusInfo: jest.fn().mockReturnValue({}), +})); + const getByTextFn = (text, should_be) => { if (should_be) { expect(screen.getByText(text)).toBeInTheDocument(); @@ -26,14 +47,6 @@ const getByTextFn = (text, should_be) => { } }; -const toHavaClassFn = (item, class_name, should_have) => { - if (should_have) { - expect(item).toHaveClass(class_name); - } else { - expect(item).not.toHaveClass(class_name); - } -}; - const testAllStepsFn = (steps, step_no) => { steps.map((step, index) => { if (index === step_no) { @@ -170,6 +183,7 @@ describe('', () => { storeProofOfAddress: jest.fn(), }, }, + jurisdiction_selected_shortcode: 'svg', }; it('should render CFDFinancialStpRealAccountSignup component', () => { @@ -181,6 +195,7 @@ describe('', () => { }); it('should render properly for the first step content', () => { + getAuthenticationStatusInfo.mockReturnValueOnce({ need_poi_for_bvi_labuan_vanuatu: true }); render(, { wrapper: ({ children }) => {children}, }); @@ -189,14 +204,51 @@ describe('', () => { }); it('should render properly for the second step content', () => { + getAuthenticationStatusInfo.mockReturnValueOnce({ poa_resubmit_for_labuan: true }); const { getByTestId } = render(, { wrapper: ({ children }) => {children}, }); - const div = getByTestId('poa-form'); + testAllStepsFn(steps, 1); + }); - fireEvent.click(div); + it('should check for POI status when Jurisdiction is Vanuatu or maltainvest', () => { + const new_mock_store = { + ...mockRootStore, + modules: { + ...mockRootStore.modules, + cfd: { + ...mockRootStore.modules.cfd, + jurisdiction_selected_shortcode: 'vanuatu', + }, + }, + }; + + getAuthenticationStatusInfo.mockReturnValueOnce({ need_poi_for_bvi_labuan_vanuatu: true }); + + render(, { + wrapper: ({ children }) => {children}, + }); + testAllStepsFn(steps, 0); + }); + it('should check for POA status when Jurisdiction is Labuan and resubmit status is set to true', () => { + const new_mock_store = { + ...mockRootStore, + modules: { + ...mockRootStore.modules, + cfd: { + ...mockRootStore.modules.cfd, + jurisdiction_selected_shortcode: 'labuan', + }, + }, + }; + + getAuthenticationStatusInfo.mockReturnValueOnce({ need_poi_for_maltainvest: true }); + + render(, { + wrapper: ({ children }) => {children}, + }); testAllStepsFn(steps, 1); }); }); diff --git a/packages/cfd/src/Containers/cfd-dbvi-onboarding.tsx b/packages/cfd/src/Containers/cfd-dbvi-onboarding.tsx index 35899f963d04..f02387d3d3c6 100644 --- a/packages/cfd/src/Containers/cfd-dbvi-onboarding.tsx +++ b/packages/cfd/src/Containers/cfd-dbvi-onboarding.tsx @@ -1,4 +1,6 @@ import React from 'react'; +import { PoiPoaDocsSubmitted } from '@deriv/account'; +import { AccountStatusResponse } from '@deriv/api-types'; import { Button, DesktopWrapper, @@ -11,9 +13,7 @@ import { UILoader, } from '@deriv/components'; import { localize } from '@deriv/translations'; -import { PoiPoaDocsSubmitted } from '@deriv/account'; import { getAuthenticationStatusInfo, isMobile, WS, Jurisdiction } from '@deriv/shared'; -import { AccountStatusResponse } from '@deriv/api-types'; import CFDFinancialStpRealAccountSignup from './cfd-financial-stp-real-account-signup'; import { observer, useStore } from '@deriv/stores'; import { useCfdStore } from '../Stores/Modules/CFD/Helpers/useCfdStores'; @@ -59,19 +59,28 @@ const CFDDbviOnboarding = observer(() => { const { get_account_status } = response; if (get_account_status?.authentication) { - const { poi_acknowledged_for_vanuatu_maltainvest, poi_acknowledged_for_bvi_labuan, poa_acknowledged } = - getAuthenticationStatusInfo(get_account_status); - if (jurisdiction_selected_shortcode === Jurisdiction.VANUATU) { + const { + poi_acknowledged_for_maltainvest, + poi_acknowledged_for_bvi_labuan_vanuatu, + poa_acknowledged, + poa_resubmit_for_labuan, + need_poa_submission, + } = getAuthenticationStatusInfo(get_account_status); + if (jurisdiction_selected_shortcode === Jurisdiction.MALTA_INVEST) { + setShowSubmittedModal(poi_acknowledged_for_maltainvest && poa_acknowledged); + } else if (jurisdiction_selected_shortcode === Jurisdiction.LABUAN) { + /* When verified with IDV+ Photo ID, POA is auto verified */ + const is_poa_submitted = poa_resubmit_for_labuan ? false : !need_poa_submission; setShowSubmittedModal( - poi_acknowledged_for_vanuatu_maltainvest && - poa_acknowledged && - has_submitted_cfd_personal_details + poi_acknowledged_for_bvi_labuan_vanuatu && + has_submitted_cfd_personal_details && + is_poa_submitted ); - } else if (jurisdiction_selected_shortcode === Jurisdiction.MALTA_INVEST) { - setShowSubmittedModal(poi_acknowledged_for_vanuatu_maltainvest && poa_acknowledged); } else setShowSubmittedModal( - poi_acknowledged_for_bvi_labuan && poa_acknowledged && has_submitted_cfd_personal_details + poi_acknowledged_for_bvi_labuan_vanuatu && + poa_acknowledged && + has_submitted_cfd_personal_details ); } diff --git a/packages/cfd/src/Containers/cfd-financial-stp-real-account-signup.tsx b/packages/cfd/src/Containers/cfd-financial-stp-real-account-signup.tsx index 8f34449b3e2e..28d3b8f723fe 100644 --- a/packages/cfd/src/Containers/cfd-financial-stp-real-account-signup.tsx +++ b/packages/cfd/src/Containers/cfd-financial-stp-real-account-signup.tsx @@ -1,5 +1,6 @@ import React from 'react'; import { Div100vhContainer } from '@deriv/components'; +import { useIsAccountStatusPresent } from '@deriv/hooks'; import { isDesktop, getAuthenticationStatusInfo, Jurisdiction } from '@deriv/shared'; import CFDPOA from '../Components/cfd-poa'; import CFDPOI from '../Components/cfd-poi'; @@ -85,7 +86,9 @@ const CFDFinancialStpRealAccountSignup = observer(({ onFinish }: TCFDFinancialSt const state_index = step; let is_mounted = React.useRef(true).current; - const { need_poi_for_vanuatu_maltainvest, need_poi_for_bvi_labuan } = getAuthenticationStatusInfo(account_status); + const { need_poi_for_maltainvest, need_poi_for_bvi_labuan_vanuatu } = getAuthenticationStatusInfo(account_status); + + const is_authenticated_with_idv_photoid = useIsAccountStatusPresent('authenticated_with_idv_photoid'); const poi_config: TItemsState = { body: CFDPOI, @@ -112,7 +115,13 @@ const CFDFinancialStpRealAccountSignup = observer(({ onFinish }: TCFDFinancialSt address_postcode: account_settings.address_postcode, upload_file: '', }, - forwarded_props: ['states_list', 'account_settings', 'storeProofOfAddress', 'refreshNotifications'], + forwarded_props: [ + 'states_list', + 'account_settings', + 'storeProofOfAddress', + 'refreshNotifications', + 'jurisdiction_selected_shortcode', + ], }; const personal_details_config: TItemsState = { @@ -128,19 +137,25 @@ const CFDFinancialStpRealAccountSignup = observer(({ onFinish }: TCFDFinancialSt }; const should_show_poi = () => { - if ([Jurisdiction.VANUATU, Jurisdiction.MALTA_INVEST].includes(jurisdiction_selected_shortcode)) { - return need_poi_for_vanuatu_maltainvest; + if (jurisdiction_selected_shortcode === Jurisdiction.MALTA_INVEST) { + return need_poi_for_maltainvest; } - return need_poi_for_bvi_labuan; + return need_poi_for_bvi_labuan_vanuatu; + }; + + const shouldShowPOA = () => { + if (Jurisdiction.LABUAN === jurisdiction_selected_shortcode && is_authenticated_with_idv_photoid) { + return true; + } + return !['pending', 'verified'].includes(authentication_status.document_status); }; - const should_show_poa = !['pending', 'verified'].includes(authentication_status.document_status); const should_show_personal_details = !has_submitted_cfd_personal_details && jurisdiction_selected_shortcode !== Jurisdiction.MALTA_INVEST; const verification_configs = [ ...(should_show_poi() ? [poi_config] : []), - ...(should_show_poa ? [poa_config] : []), + ...(shouldShowPOA() ? [poa_config] : []), ...(should_show_personal_details ? [personal_details_config] : []), ]; @@ -193,13 +208,20 @@ const CFDFinancialStpRealAccountSignup = observer(({ onFinish }: TCFDFinancialSt const form_value = getCurrent('form_value'); - const passthrough = ( - (getCurrent('forwarded_props') || []) as TItemsState['forwarded_props'] - ).reduce((forwarded_prop, item) => { - return Object.assign(forwarded_prop, { - [item]: passthroughProps[item], - }); - }, {}); + const passthrough: Partial & { + is_authenticated_with_idv_photoid?: boolean; + } = ((getCurrent('forwarded_props') || []) as TItemsState['forwarded_props']).reduce( + (forwarded_prop, item) => { + return Object.assign(forwarded_prop, { + [item]: passthroughProps[item], + }); + }, + {} + ); + + if (shouldShowPOA()) { + passthrough.is_authenticated_with_idv_photoid = is_authenticated_with_idv_photoid; + } return ( ( +const SpecBox = ({ value, is_bold, is_broker }: TSpecBoxProps) => (
- + {value} @@ -150,7 +156,7 @@ const DMT5TradeModal = ({
{localize('Broker')} - +
{localize('Server')} diff --git a/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-modal-content-wrapper.tsx b/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-modal-content-wrapper.tsx index 20f46ac54967..aecf6eea4673 100644 --- a/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-modal-content-wrapper.tsx +++ b/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-modal-content-wrapper.tsx @@ -44,10 +44,11 @@ const JurisdictionModalContentWrapper = observer(({ openPasswordModal }: TJurisd const { poi_or_poa_not_submitted, - poi_acknowledged_for_bvi_labuan, - poi_acknowledged_for_vanuatu_maltainvest, + poi_acknowledged_for_bvi_labuan_vanuatu, + poi_acknowledged_for_maltainvest, poa_acknowledged, need_poa_resubmission, + poa_resubmit_for_labuan, } = getAuthenticationStatusInfo(account_status); React.useEffect(() => { @@ -143,7 +144,7 @@ const JurisdictionModalContentWrapper = observer(({ openPasswordModal }: TJurisd openPasswordModal(type_of_account); } else if (is_vanuatu_selected) { if ( - poi_acknowledged_for_vanuatu_maltainvest && + poi_acknowledged_for_bvi_labuan_vanuatu && !poi_or_poa_not_submitted && !should_restrict_vanuatu_account_creation && poa_acknowledged && @@ -155,7 +156,7 @@ const JurisdictionModalContentWrapper = observer(({ openPasswordModal }: TJurisd } } else if (is_bvi_selected) { if ( - poi_acknowledged_for_bvi_labuan && + poi_acknowledged_for_bvi_labuan_vanuatu && !poi_or_poa_not_submitted && !should_restrict_bvi_account_creation && poa_acknowledged && @@ -166,13 +167,18 @@ const JurisdictionModalContentWrapper = observer(({ openPasswordModal }: TJurisd toggleCFDVerificationModal(); } } else if (is_labuan_selected) { - if (poi_acknowledged_for_bvi_labuan && poa_acknowledged && has_submitted_cfd_personal_details) { + if ( + poi_acknowledged_for_bvi_labuan_vanuatu && + poa_acknowledged && + has_submitted_cfd_personal_details && + !poa_resubmit_for_labuan + ) { openPasswordModal(type_of_account); } else { toggleCFDVerificationModal(); } } else if (is_maltainvest_selected) { - if (poi_acknowledged_for_vanuatu_maltainvest && poa_acknowledged) { + if (poi_acknowledged_for_maltainvest && poa_acknowledged) { openPasswordModal(type_of_account); } else { toggleCFDVerificationModal(); diff --git a/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-title-indicator.tsx b/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-title-indicator.tsx index 5583b06c4806..b36ada1d9689 100644 --- a/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-title-indicator.tsx +++ b/packages/cfd/src/Containers/jurisdiction-modal/jurisdiction-title-indicator.tsx @@ -13,12 +13,12 @@ const JurisdictionTitleIndicator = ({ verification_docs, }: TJurisdictionTitleIndicatorProps) => { const { - poi_pending_for_bvi_labuan, - poi_resubmit_for_bvi_labuan, - poi_verified_for_bvi_labuan, - poi_pending_for_vanuatu_maltainvest, - poi_resubmit_for_vanuatu_maltainvest, - poi_verified_for_vanuatu_maltainvest, + poi_pending_for_bvi_labuan_vanuatu, + poi_resubmit_for_bvi_labuan_vanuatu, + poi_verified_for_bvi_labuan_vanuatu, + poi_pending_for_maltainvest, + poi_resubmit_for_maltainvest, + poi_verified_for_maltainvest, poa_pending, need_poa_resubmission, poa_verified, @@ -26,23 +26,23 @@ const JurisdictionTitleIndicator = ({ const getVerificationIconVariant = (verification_document: TJurisdictionCardItemVerificationItem): string => { let icon_variant: TJurisdictionCardVerificationStatus = 'Default'; - if ([Jurisdiction.BVI, Jurisdiction.LABUAN].includes(type_of_card)) { + if ([Jurisdiction.BVI, Jurisdiction.LABUAN, Jurisdiction.VANUATU].includes(type_of_card)) { if (['document_number', 'selfie', 'identity_document'].includes(verification_document)) { - if (poi_pending_for_bvi_labuan) { + if (poi_pending_for_bvi_labuan_vanuatu) { icon_variant = 'Pending'; - } else if (poi_resubmit_for_bvi_labuan) { + } else if (poi_resubmit_for_bvi_labuan_vanuatu) { icon_variant = 'Failed'; - } else if (poi_verified_for_bvi_labuan) { + } else if (poi_verified_for_bvi_labuan_vanuatu) { icon_variant = 'Verified'; } } - } else if ([Jurisdiction.VANUATU, Jurisdiction.MALTA_INVEST].includes(type_of_card)) { + } else if (Jurisdiction.MALTA_INVEST === type_of_card) { if (['document_number', 'selfie', 'identity_document'].includes(verification_document)) { - if (poi_pending_for_vanuatu_maltainvest) { + if (poi_pending_for_maltainvest) { icon_variant = 'Pending'; - } else if (poi_resubmit_for_vanuatu_maltainvest) { + } else if (poi_resubmit_for_maltainvest) { icon_variant = 'Failed'; - } else if (poi_verified_for_vanuatu_maltainvest) { + } else if (poi_verified_for_maltainvest) { icon_variant = 'Verified'; } } diff --git a/packages/cfd/src/Containers/mt5-compare-table-content.tsx b/packages/cfd/src/Containers/mt5-compare-table-content.tsx index e99f193913b2..bcea6221dcbf 100755 --- a/packages/cfd/src/Containers/mt5-compare-table-content.tsx +++ b/packages/cfd/src/Containers/mt5-compare-table-content.tsx @@ -233,8 +233,8 @@ const DMT5CompareModalContent = observer( const is_high_risk_for_mt5 = synthetic_accounts_count === 1 && financial_accounts_count === 1; const { poi_or_poa_not_submitted, - poi_acknowledged_for_vanuatu_maltainvest, - poi_acknowledged_for_bvi_labuan, + poi_acknowledged_for_maltainvest, + poi_acknowledged_for_bvi_labuan_vanuatu, poa_acknowledged, poa_pending, } = getAuthenticationStatusInfo(account_status); @@ -346,7 +346,7 @@ const DMT5CompareModalContent = observer( setAppstorePlatform(CFD_PLATFORMS.MT5); setJurisdictionSelectedShortcode(Jurisdiction.BVI); if ( - poi_acknowledged_for_bvi_labuan && + poi_acknowledged_for_bvi_labuan_vanuatu && !poi_or_poa_not_submitted && !should_restrict_bvi_account_creation && has_submitted_personal_details && @@ -362,7 +362,7 @@ const DMT5CompareModalContent = observer( setAppstorePlatform(CFD_PLATFORMS.MT5); setJurisdictionSelectedShortcode(Jurisdiction.VANUATU); if ( - poi_acknowledged_for_vanuatu_maltainvest && + poi_acknowledged_for_bvi_labuan_vanuatu && !poi_or_poa_not_submitted && !should_restrict_vanuatu_account_creation && has_submitted_personal_details && @@ -376,7 +376,7 @@ const DMT5CompareModalContent = observer( case 'financial_labuan': setAppstorePlatform(CFD_PLATFORMS.MT5); setJurisdictionSelectedShortcode(Jurisdiction.LABUAN); - if (poi_acknowledged_for_bvi_labuan && poa_acknowledged && has_submitted_personal_details) { + if (poi_acknowledged_for_bvi_labuan_vanuatu && poa_acknowledged && has_submitted_personal_details) { openPasswordModal(type_of_account); } else { toggleCFDVerificationModal(); @@ -385,7 +385,7 @@ const DMT5CompareModalContent = observer( case 'financial_maltainvest': setAppstorePlatform(CFD_PLATFORMS.MT5); setJurisdictionSelectedShortcode(Jurisdiction.MALTA_INVEST); - if ((poi_acknowledged_for_vanuatu_maltainvest && poa_acknowledged) || is_demo_tab) { + if ((poi_acknowledged_for_maltainvest && poa_acknowledged) || is_demo_tab) { openPasswordModal(type_of_account); } else { toggleCFDVerificationModal(); diff --git a/packages/cfd/src/Containers/props.types.ts b/packages/cfd/src/Containers/props.types.ts index 156d289a0a0e..d86bd26f8f4a 100644 --- a/packages/cfd/src/Containers/props.types.ts +++ b/packages/cfd/src/Containers/props.types.ts @@ -1,5 +1,11 @@ import React from 'react'; -import { DetailsOfEachMT5Loginid, GetAccountStatus, VerifyEmailResponse } from '@deriv/api-types'; +import { + DetailsOfEachMT5Loginid, + GetAccountStatus, + GetSettings, + ResidenceList, + VerifyEmailResponse, +} from '@deriv/api-types'; import { FormikHelpers as FormikActions } from 'formik'; import { TCFDPasswordFormValues } from './cfd-password-modal'; import { @@ -194,6 +200,8 @@ export type TJurisdictionCardSectionProps = { export type TJurisdictionCardType = 'svg' | 'bvi' | 'vanuatu' | 'labuan' | 'maltainvest'; export type TVerificationStatusBannerProps = { + account_status: GetAccountStatus; + account_settings: GetSettings; account_type: string; card_classname: string; disabled: boolean; @@ -203,6 +211,7 @@ export type TVerificationStatusBannerProps = { real_swapfree_accounts_existing_data: TExistingData; should_restrict_bvi_account_creation: boolean; should_restrict_vanuatu_account_creation: boolean; + residence_list: ResidenceList; }; export type TJurisdictionCheckBoxProps = { diff --git a/packages/cfd/src/Helpers/constants.ts b/packages/cfd/src/Helpers/constants.ts index b65930b3f05c..c272393ed11b 100644 --- a/packages/cfd/src/Helpers/constants.ts +++ b/packages/cfd/src/Helpers/constants.ts @@ -52,7 +52,7 @@ const DXTRADE_IOS_APP_URL = 'https://apps.apple.com/us/app/deriv-x/id1563337503' const DXTRADE_ANDROID_APP_URL = 'https://play.google.com/store/apps/details?id=com.deriv.dx'; const DXTRADE_HUAWEI_APP_URL = 'https://appgallery.huawei.com/app/C104633219'; -const getBrokerName = () => 'Deriv Limited'; +const getBrokerName = () => 'Deriv Holdings (Guernsey) Limited'; const getTopUpConfig = () => { return { @@ -90,17 +90,17 @@ const getPlatformDerivEZDownloadLink = (platform: 'ios' | 'android' | 'huawei') const getPlatformMt5DownloadLink = (platform: string | undefined = undefined) => { switch (platform || OSDetect()) { case 'windows': - return 'https://download.mql5.com/cdn/web/deriv.limited/mt5/derivmt5setup.exe'; + return 'https://download.mql5.com/cdn/web/deriv.holdings.guernsey/mt5/deriv5setup.exe'; case 'linux': return 'https://www.metatrader5.com/en/terminal/help/start_advanced/install_linux'; case 'ios': - return 'https://apps.apple.com/us/app/metatrader-5/id413251709'; + return 'https://download.mql5.com/cdn/mobile/mt5/ios?server=Deriv-Demo,Deriv-Server,Deriv-Server-02'; case 'macos': return 'https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/MetaTrader5.dmg'; case 'huawei': return 'https://appgallery.huawei.com/#/app/C102015329'; case 'android': - return 'https://download.mql5.com/cdn/mobile/mt5/android?server=Deriv-Demo,Deriv-Server'; + return 'https://download.mql5.com/cdn/mobile/mt5/android?server=Deriv-Demo,Deriv-Server,Deriv-Server-02'; default: return getMT5WebTerminalLink({ category: 'real' }); // Web } diff --git a/packages/cfd/types.ts b/packages/cfd/types.ts index 6389dd6f436a..9474ea0e54be 100644 --- a/packages/cfd/types.ts +++ b/packages/cfd/types.ts @@ -1,3 +1,6 @@ +import { Jurisdiction } from '@deriv/shared'; import type { TCoreStores } from '@deriv/stores/types'; export type TTradingPlatformAvailableAccount = TCoreStores['client']['trading_platform_available_accounts'][number]; + +export type TJurisdiction = typeof Jurisdiction[keyof typeof Jurisdiction]; diff --git a/packages/components/src/components/button-toggle/button-toggle.tsx b/packages/components/src/components/button-toggle/button-toggle.tsx index d25113908895..268d839b2e89 100644 --- a/packages/components/src/components/button-toggle/button-toggle.tsx +++ b/packages/components/src/components/button-toggle/button-toggle.tsx @@ -5,7 +5,7 @@ import Counter from '../counter/counter'; import Button from '../button/button'; type TButtonToggleProps = { - buttons_arr: Array<{ text: string; value: string; count?: number }>; + buttons_arr: Array<{ text: string; value: number | string; count?: number }>; className?: string; id?: string; is_animated?: boolean; @@ -50,7 +50,7 @@ const ButtonToggle = ({