From fdce79ad3d167fd079af7c528ff54a87d255d134 Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 17 May 2022 12:25:33 +0800 Subject: [PATCH 01/29] fix: close #6269 (#6270) --- .../src/pages/Personas/components/ContactTableRow/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashboard/src/pages/Personas/components/ContactTableRow/index.tsx b/packages/dashboard/src/pages/Personas/components/ContactTableRow/index.tsx index a31944b549ee..48ba5fda28c4 100644 --- a/packages/dashboard/src/pages/Personas/components/ContactTableRow/index.tsx +++ b/packages/dashboard/src/pages/Personas/components/ContactTableRow/index.tsx @@ -137,7 +137,7 @@ export const ContactTableRowUI = memo( {/* To support emoji */} {String.fromCodePoint( first.codePointAt(0) ?? SPACE_POINT, - last.codePointAt(0) ?? SPACE_POINT, + last?.codePointAt(0) ?? SPACE_POINT, )} {contact.fingerprint ? : null} From 9b8c8713a38640b8f25e8dd89c3d39aa0713e8a0 Mon Sep 17 00:00:00 2001 From: Jack Works Date: Tue, 17 May 2022 13:37:22 +0800 Subject: [PATCH 02/29] docs(i18n): sync i18n files from Crowdin (#6271) * New translations en-US.json (Quenya) docs(i18n): sync translation en-US.json for Quenya * New translations en-US.json (Quenya) docs(i18n): sync translation en-US.json for Quenya --- packages/dashboard/src/locales/qya-AA.json | 1 + packages/mask/shared-ui/locales/qya-AA.json | 22 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/dashboard/src/locales/qya-AA.json b/packages/dashboard/src/locales/qya-AA.json index bd02ffc4a6ae..dfab6f0d573f 100644 --- a/packages/dashboard/src/locales/qya-AA.json +++ b/packages/dashboard/src/locales/qya-AA.json @@ -187,6 +187,7 @@ "wallets_empty_tokens_tip": "crwdns1789:0crwdne1789:0", "wallets_empty_collectible_tip": "crwdns1791:0crwdne1791:0", "wallets_address_copied": "crwdns1793:0crwdne1793:0", + "public_key_copied": "crwdns16574:0crwdne16574:0", "wallets_address_copy": "crwdns1795:0crwdne1795:0", "wallets_history_types": "crwdns1797:0crwdne1797:0", "wallets_history_value": "crwdns1799:0crwdne1799:0", diff --git a/packages/mask/shared-ui/locales/qya-AA.json b/packages/mask/shared-ui/locales/qya-AA.json index 624be4a5c13d..dd17275ea04a 100644 --- a/packages/mask/shared-ui/locales/qya-AA.json +++ b/packages/mask/shared-ui/locales/qya-AA.json @@ -7,6 +7,8 @@ "debug_metadata_put_metadata": "crwdns10061:0crwdne10061:0", "edit": "crwdns10063:0crwdne10063:0", "clear": "crwdns10065:0crwdne10065:0", + "connect": "crwdns16576:0crwdne16576:0", + "back": "crwdns16578:0crwdne16578:0", "more": "crwdns10067:0crwdne10067:0", "approve": "crwdns10069:0crwdne10069:0", "address": "crwdns10071:0crwdne10071:0", @@ -22,6 +24,8 @@ "tip": "crwdns10105:0crwdne10105:0", "tags": "crwdns10107:0crwdne10107:0", "contract": "crwdns10109:0crwdne10109:0", + "plugins": "crwdns16580:0crwdne16580:0", + "persona_required": "crwdns16582:0crwdne16582:0", "initializing": "crwdns10111:0crwdne10111:0", "redirect_alert": "crwdns10113:0crwdne10113:0", "typed_message_text_alert": "crwdns10117:0crwdne10117:0", @@ -51,6 +55,20 @@ "auto_paste_failed_snackbar": "crwdns4005:0crwdne4005:0", "auto_paste_failed_snackbar_action": "crwdns4007:0crwdne4007:0", "auto_paste_failed_snackbar_action_close": "crwdns9363:0crwdne9363:0", + "compose_encrypt_method_text": "crwdns16584:0crwdne16584:0", + "compose_encrypt_method_text_sub_title": "crwdns16586:0crwdne16586:0", + "compose_encrypt_method_image": "crwdns16588:0crwdne16588:0", + "compose_encrypt_method_image_sub_title": "crwdns16590:0crwdne16590:0", + "compose_no_local_key": "crwdns16592:0crwdne16592:0", + "compose_encrypt_visible_to_all": "crwdns16594:0crwdne16594:0", + "compose_encrypt_visible_to_all_sub": "crwdns16596:0crwdne16596:0", + "compose_encrypt_visible_to_private": "crwdns16598:0crwdne16598:0", + "compose_encrypt_visible_to_private_sub": "crwdns16600:0crwdne16600:0", + "compose_shared_friends": "crwdns16602:0crwdne16602:0", + "compose_shared_friends_other": "crwdns16604:0{{count}}crwdne16604:0", + "compose_encrypt_visible_to_share": "crwdns16606:0crwdne16606:0", + "compose_encrypt_visible_to_share_sub": "crwdns16608:0crwdne16608:0", + "compose_encrypt_share_dialog_empty": "crwdns16610:0crwdne16610:0", "automation_request_click_post_button": "crwdns4009:0crwdne4009:0", "try_again": "crwdns8125:0crwdne8125:0", "ok": "crwdns12997:0crwdne12997:0", @@ -139,7 +157,10 @@ "post_dialog__button": "crwdns4257:0crwdne4257:0", "post_dialog__placeholder": "crwdns4265:0crwdne4265:0", "post_dialog__title": "crwdns4275:0crwdne4275:0", + "post_dialog_visible_to": "crwdns16612:0crwdne16612:0", + "post_dialog_encryption_method": "crwdns16614:0crwdne16614:0", "post_dialog_enable_paste_auto": "crwdns10129:0crwdne10129:0", + "post_dialog_share_with_input_placeholder": "crwdns16616:0crwdne16616:0", "post_modal_hint__button": "crwdns4277:0crwdne4277:0", "hide": "crwdns4293:0crwdne4293:0", "reset": "crwdns4301:0crwdne4301:0", @@ -152,6 +173,7 @@ "select_none": "crwdns4335:0crwdne4335:0", "all_friends": "crwdns4337:0crwdne4337:0", "select_specific_friends_dialog__title": "crwdns4341:0crwdne4341:0", + "select_friends_dialog_persona_connect": "crwdns16618:0crwdne16618:0", "service_decryption_failed": "crwdns4343:0crwdne4343:0", "service_username_invalid": "crwdns4359:0crwdne4359:0", "speed_up": "crwdns9393:0crwdne9393:0", From 2d942c604781c8a6594c592c361a896594380a4b Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 17 May 2022 13:39:31 +0800 Subject: [PATCH 03/29] chore: no-for-in (#6262) * chore: disallow no-for-in * fix: build failed * chore: accpet review * chore: accpet review --- package.json | 2 +- packages/.eslintrc.json | 2 +- .../mask/background/database/persona/web.ts | 6 +- .../Jobs/SettingListeners.ts | 8 +- .../mask/src/extension/mask-sdk/hmr-bridge.ts | 4 +- .../twitter.com/customization/i18n.ts | 8 +- packages/mask/src/social-network/ui.ts | 6 +- packages/mask/src/utils/native-rpc/Web.ts | 14 +-- packages/shared-base/src/i18n/register-ns.ts | 8 +- .../src/utils/getLocalImplementation.tsx | 4 +- packages/theme/src/CSSVariables/applyToDOM.ts | 6 +- packages/theme/src/CSSVariables/createVars.ts | 2 +- .../theme/src/UIHelper/custom-ui-helper.tsx | 2 +- packages/theme/stories/utils/Material-UI.ts | 4 +- .../base/binary-encode/decode.ts | 14 ++- .../base/binary-encode/encode.ts | 3 +- pnpm-lock.yaml | 110 +++++++++++++++--- 17 files changed, 142 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index 2c521581f49c..f3673747e6e7 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "devDependencies": { "@commitlint/cli": "^16.2.4", "@commitlint/config-conventional": "^16.2.4", - "@dimensiondev/eslint-plugin": "^0.0.2-20220414093950-7d54c58", + "@dimensiondev/eslint-plugin": "0.0.2-20220516081411-2649814", "@dimensiondev/patch-package": "^6.5.0", "@jest/globals": "^28.1.0", "@magic-works/i18n-codegen": "^0.1.0", diff --git a/packages/.eslintrc.json b/packages/.eslintrc.json index 329c14763de5..2b91bf5350be 100644 --- a/packages/.eslintrc.json +++ b/packages/.eslintrc.json @@ -70,6 +70,7 @@ "@dimensiondev/browser/prefer-location-assign": "error", "@dimensiondev/jsx/no-class-component": "error", "@dimensiondev/jsx/no-template-literal": "error", + "@dimensiondev/no-for-in": "error", "@dimensiondev/no-number-constructor": "off", "@dimensiondev/prefer-early-return": "error", "@dimensiondev/string/no-interpolation": "off", @@ -81,7 +82,6 @@ "@dimensiondev/unicode/specific-set": "error", "@typescript-eslint/await-thenable": "error", "@typescript-eslint/no-base-to-string": "off", - "@typescript-eslint/no-for-in-array": "error", "@typescript-eslint/no-implied-eval": "error", "@typescript-eslint/no-inferrable-types": "error", "@typescript-eslint/no-invalid-this": "error", diff --git a/packages/mask/background/database/persona/web.ts b/packages/mask/background/database/persona/web.ts index 32446804934f..43da926be902 100644 --- a/packages/mask/background/database/persona/web.ts +++ b/packages/mask/background/database/persona/web.ts @@ -299,10 +299,10 @@ export async function updatePersonaDB( else nextLinkedProfiles = nextRecord.linkedProfiles } if (howToMerge.explicitUndefinedField === 'ignore') { - for (const _key in nextRecord) { - const key = _key as keyof typeof nextRecord + const keys = Object.keys(nextRecord) as Array + for (const key of keys) { if (nextRecord[key] === undefined) { - delete nextRecord[key as keyof typeof nextRecord] + delete nextRecord[key] } } } diff --git a/packages/mask/src/extension/background-script/Jobs/SettingListeners.ts b/packages/mask/src/extension/background-script/Jobs/SettingListeners.ts index b9c7573c7720..56860c55572a 100644 --- a/packages/mask/src/extension/background-script/Jobs/SettingListeners.ts +++ b/packages/mask/src/extension/background-script/Jobs/SettingListeners.ts @@ -5,12 +5,12 @@ import { MaskMessages } from '../../../utils' export default function (signal: AbortSignal) { if (!isEnvironment(Environment.ManifestBackground)) return - const obj = ToBeListened() - for (const _key in obj) { - const key = _key as keyof MaskSettingsEvents + const listeners = ToBeListened() + const keys = Object.keys(listeners) as Array + for (const key of keys) { signal.addEventListener( 'abort', - obj[key].addListener((data: any) => MaskMessages.events[key].sendToAll(data as never)), + listeners[key].addListener((data) => MaskMessages.events[key].sendToAll(data as never)), ) } } diff --git a/packages/mask/src/extension/mask-sdk/hmr-bridge.ts b/packages/mask/src/extension/mask-sdk/hmr-bridge.ts index cf4907f75154..9d5545e99dc3 100644 --- a/packages/mask/src/extension/mask-sdk/hmr-bridge.ts +++ b/packages/mask/src/extension/mask-sdk/hmr-bridge.ts @@ -4,10 +4,10 @@ export const hmr_sdkServer = { ...maskSDKServer } if (import.meta.webpackHot) { import.meta.webpackHot.accept('./bridge', () => { - for (const key in hmr_sdkServer) { + for (const key of Object.keys(hmr_sdkServer)) { if (!(key in maskSDKServer)) Reflect.deleteProperty(hmr_sdkServer, key) } - for (const key in maskSDKServer) { + for (const key of Object.keys(maskSDKServer)) { // @ts-expect-error hmr_sdkServer[key] = maskSDKServer[key] } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/customization/i18n.ts b/packages/mask/src/social-network-adaptor/twitter.com/customization/i18n.ts index ae63b2ae5708..60eced5cfe66 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/customization/i18n.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/customization/i18n.ts @@ -4,10 +4,10 @@ import { languages } from '../locales/languages' export const i18NOverwriteTwitter: SocialNetworkUI.Customization.I18NOverwrite = { mask: {}, } -const resource: any = languages -for (const lng in resource) { - for (const key in resource[lng]) { +const resource = languages +for (const language of Object.keys(resource) as Array) { + for (const key of Object.keys(resource[language]) as Array) { i18NOverwriteTwitter.mask[key] ??= {} - i18NOverwriteTwitter.mask[key][lng] = resource[lng][key] + i18NOverwriteTwitter.mask[key][language] = resource[language][key] } } diff --git a/packages/mask/src/social-network/ui.ts b/packages/mask/src/social-network/ui.ts index 8a20ee5c16d0..83763e94d3ad 100644 --- a/packages/mask/src/social-network/ui.ts +++ b/packages/mask/src/social-network/ui.ts @@ -153,11 +153,11 @@ export async function activateSocialNetworkUIInner(ui_deferred: SocialNetworkUI. function i18nOverwrite() { const i18n = ui.customization.i18nOverwrite || {} - for (const namespace in i18n) { + for (const namespace of Object.keys(i18n)) { const ns = i18n[namespace] - for (const i18nKey in ns) { + for (const i18nKey of Object.keys(ns)) { const pair = i18n[namespace][i18nKey] - for (const language in pair) { + for (const language of Object.keys(pair)) { const value = pair[language] i18NextInstance.addResource(language, namespace, i18nKey, value) } diff --git a/packages/mask/src/utils/native-rpc/Web.ts b/packages/mask/src/utils/native-rpc/Web.ts index 62de2b778e79..4e4fd3bcfbde 100644 --- a/packages/mask/src/utils/native-rpc/Web.ts +++ b/packages/mask/src/utils/native-rpc/Web.ts @@ -232,14 +232,14 @@ function wrapWithAssert(env: Environment, f: Function) { } try { - for (const _key in MaskNetworkAPI) { - const key = _key as keyof MaskNetworkAPIs - const f: Function = MaskNetworkAPI[key] - + for (const key of Object.keys(MaskNetworkAPI) as Array) { + const fn: Function = MaskNetworkAPI[key] if (key.startsWith('SNSAdaptor_')) { - MaskNetworkAPI[key] = wrapWithAssert(Environment.ContentScript, f) + MaskNetworkAPI[key] = wrapWithAssert(Environment.ContentScript, fn) } else { - MaskNetworkAPI[key] = wrapWithAssert(Environment.ManifestBackground, f) + MaskNetworkAPI[key] = wrapWithAssert(Environment.ManifestBackground, fn) } } -} catch {} +} catch { + // ignore +} diff --git a/packages/shared-base/src/i18n/register-ns.ts b/packages/shared-base/src/i18n/register-ns.ts index ae7239c88012..bc9a744f17be 100644 --- a/packages/shared-base/src/i18n/register-ns.ts +++ b/packages/shared-base/src/i18n/register-ns.ts @@ -9,13 +9,15 @@ function addI18NBundle(instance: i18n, namespace: string, langs: Record( RPCCache.set(ref, localImpl) const result: any = await impl() - for (const key in localImpl) { + for (const key of Object.keys(localImpl) as Array) { if (!Reflect.has(result, key)) { delete localImpl[key] isUpdate && console.log(`[HMR] ${name}.${key} removed.`) @@ -30,7 +30,7 @@ export async function getLocalImplementation( isUpdate && console.log(`[HMR] ${name}.${key} updated.`) } } - for (const key in result) { + for (const key of Object.keys(result)) { if (!Reflect.has(localImpl, key)) isUpdate && console.log(`[HMR] ${name}.${key} added.`) Object.defineProperty(localImpl, key, { configurable: true, enumerable: true, value: result[key] }) } diff --git a/packages/theme/src/CSSVariables/applyToDOM.ts b/packages/theme/src/CSSVariables/applyToDOM.ts index b1887eeab3ea..62b463e74ac2 100644 --- a/packages/theme/src/CSSVariables/applyToDOM.ts +++ b/packages/theme/src/CSSVariables/applyToDOM.ts @@ -12,7 +12,7 @@ function getRGBFragment(x: Record, key: string) { export function CSSVariableInjectorCSS(scheme: PaletteMode) { const ns: Record = scheme === 'light' ? LightColor : DarkColor const result: Record = {} - for (const key in ns) { + for (const key of Object.keys(ns)) { // --mask-name: val; result[`--mask-${kebabCase(key)}`] = ns[key] result[`--mask-${kebabCase(key)}-fragment`] = getRGBFragment(ns, key) @@ -33,14 +33,14 @@ export function applyMaskColorVars(node: HTMLElement, scheme: PaletteMode) { return } else if (node instanceof HTMLStyleElement) { let rule = ':root, :host {\n' - for (const key in ns) { + for (const key of Object.keys(ns)) { // --mask-name: val; rule += ` --mask-${kebabCase(key)}: ${ns[key]};\n` rule += ` --mask-${kebabCase(key)}-fragment: ${getRGBFragment(ns, key)};\n` } node.textContent = rule + '}' } else { - for (const key in ns) { + for (const key of Object.keys(ns)) { node.style.setProperty('--mask-' + kebabCase(key), ns[key]) node.style.setProperty('--mask-' + kebabCase(key) + '-fragment', getRGBFragment(ns, key)) } diff --git a/packages/theme/src/CSSVariables/createVars.ts b/packages/theme/src/CSSVariables/createVars.ts index 00f17e4be0aa..503b9d311ba7 100644 --- a/packages/theme/src/CSSVariables/createVars.ts +++ b/packages/theme/src/CSSVariables/createVars.ts @@ -3,7 +3,7 @@ export function css_var>( unique_name: string, keys: T, ): { [key in keyof T]: string & ((defaultValue?: string) => string) } { - for (const k in keys) keys[k] = createVar(k) as any + for (const k of Object.keys(keys) as Array) keys[k] = createVar(k as string) as any return keys as any function createVar(name: string) { const val = '--' + unique_name + '-' + name diff --git a/packages/theme/src/UIHelper/custom-ui-helper.tsx b/packages/theme/src/UIHelper/custom-ui-helper.tsx index a7b6b10555e7..db8ed7aba8cd 100644 --- a/packages/theme/src/UIHelper/custom-ui-helper.tsx +++ b/packages/theme/src/UIHelper/custom-ui-helper.tsx @@ -17,7 +17,7 @@ export function mergeClasses(...args: (Partial> | undefined const result = {} as Partial> for (const current of args) { if (!current) continue - for (const key in current) { + for (const key of Object.keys(current)) { if (key === '__proto__') continue if (key in result) result[key] = result[key] + ' ' + current[key] else result[key] = current[key] diff --git a/packages/theme/stories/utils/Material-UI.ts b/packages/theme/stories/utils/Material-UI.ts index 5d888daff774..94ef7291de68 100644 --- a/packages/theme/stories/utils/Material-UI.ts +++ b/packages/theme/stories/utils/Material-UI.ts @@ -4,7 +4,9 @@ import { argsOfArr, ControlType } from './args' function enumIn(enums: { [Prop in keyof T]?: (argsFromEnum: (enumString: NonNullable[], type?: ControlType) => ArgType) => ArgType }): ArgTypes { - for (const key in enums) enums[key] = (enums[key] as any)(argsOfArr) + for (const key of Object.keys(enums) as Array) { + enums[key] = (enums[key] as any)(argsOfArr) + } return enums as ArgTypes } export const MuiArgs = { diff --git a/packages/typed-message/base/binary-encode/decode.ts b/packages/typed-message/base/binary-encode/decode.ts index 6e342faa4613..e11b4032a41c 100644 --- a/packages/typed-message/base/binary-encode/decode.ts +++ b/packages/typed-message/base/binary-encode/decode.ts @@ -49,13 +49,15 @@ function assertString(x: unknown): asserts x is string { if (typeof x !== 'string') throw new TypeError(`${HEAD}Invalid TypedMessage`) } // Detach Uint8Array from it's underlying buffer -function fixU8Array(obj: unknown) { +function fixU8Array(input: unknown) { // for Array and object - if (typeof obj === 'object' && obj !== null) { - for (const key in obj) { - const val = (obj as any)[key] - if (val instanceof Uint8Array) (obj as any)[key] = val.slice() - else fixU8Array(val) + if (typeof input !== 'object' || input === undefined || input === null) return + for (const key of Object.keys(input)) { + const value = Reflect.get(input, key) + if (value instanceof Uint8Array) { + Reflect.set(input, key, value.slice()) + } else { + fixU8Array(value) } } } diff --git a/packages/typed-message/base/binary-encode/encode.ts b/packages/typed-message/base/binary-encode/encode.ts index c4ea1beb6530..58e694bea244 100644 --- a/packages/typed-message/base/binary-encode/encode.ts +++ b/packages/typed-message/base/binary-encode/encode.ts @@ -71,8 +71,7 @@ function collectValue(val: any): any { } const result: Record = {} - for (const key in val) { - if (typeof key !== 'string') throw new TypeError(`${HEAD}Unsupported type symbol.`) + for (const key of Object.keys(val)) { const v = val[key] result[key] = collectValue(v) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa9db6a7ad7b..3a34fa9ce938 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: specifiers: '@commitlint/cli': ^16.2.4 '@commitlint/config-conventional': ^16.2.4 - '@dimensiondev/eslint-plugin': ^0.0.2-20220414093950-7d54c58 + '@dimensiondev/eslint-plugin': 0.0.2-20220516081411-2649814 '@dimensiondev/kit': 0.0.0-20220228054820-f2378be '@dimensiondev/patch-package': ^6.5.0 '@emotion/cache': ^11.7.1 @@ -98,7 +98,7 @@ importers: devDependencies: '@commitlint/cli': 16.2.4_@swc+core@1.2.177 '@commitlint/config-conventional': 16.2.4 - '@dimensiondev/eslint-plugin': 0.0.2-20220414093950-7d54c58_eslint@8.15.0 + '@dimensiondev/eslint-plugin': 0.0.2-20220516081411-2649814_eslint@8.15.0 '@dimensiondev/patch-package': 6.5.0 '@jest/globals': 28.1.0 '@magic-works/i18n-codegen': 0.1.0_typescript@4.7.0-beta @@ -112,7 +112,7 @@ importers: '@typescript-eslint/parser': 5.22.0_dx5yzralznart3ybdl432c3i44 cspell: 5.20.0 eslint: 8.15.0 - eslint-plugin-import: 2.26.0_eslint@8.15.0 + eslint-plugin-import: 2.26.0_6nacgdzqm4zbhelsxkmd2vkvxy eslint-plugin-react: 7.29.4_eslint@8.15.0 eslint-plugin-react-hooks: 4.5.0_eslint@8.15.0 eslint-plugin-unicorn: 42.0.0_eslint@8.15.0 @@ -2209,17 +2209,23 @@ packages: resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.17.10 dev: true /@babel/parser/7.17.3: resolution: {integrity: sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.17.10 /@babel/parser/7.17.9: resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.17.10 dev: true /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.17.10: @@ -5681,9 +5687,8 @@ packages: '@msgpack/msgpack': 1.12.2 dev: false - /@dimensiondev/eslint-plugin/0.0.2-20220414093950-7d54c58_eslint@8.15.0: - resolution: {integrity: sha512-H6ZmwT+mhplwYU0j8bvNmBNp0y5pT6fMfb3OjWiWkhF5W7LKxUy9YZLc6XfsCHC56hPTPq5u/pCjRBtE4Y1qxQ==, tarball: download/@dimensiondev/eslint-plugin/0.0.2-20220414093950-7d54c58/515fb9cbdd7dba3b6da5e0686027b2ec170872dc10618b545a9035dea7a12633} - engines: {node: '>= 16'} + /@dimensiondev/eslint-plugin/0.0.2-20220516081411-2649814_eslint@8.15.0: + resolution: {integrity: sha512-cEEKTD1ku7ScTuifqrZHAXpc8a1hwew12MLee/jvFEdOkoQSDxYiqAh7V35wQLGappUUyqJiLc6vgk6qlpzQeA==, tarball: download/@dimensiondev/eslint-plugin/0.0.2-20220516081411-2649814/f8750f35c321553cee686b564cea6d4c5dffe62eaab4af3ab64a6392d8e4743b} peerDependencies: eslint: '>= 8' dependencies: @@ -12093,6 +12098,8 @@ packages: dependencies: micromatch: 3.1.10 normalize-path: 2.1.1 + transitivePeerDependencies: + - supports-color /anymatch/3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} @@ -13775,6 +13782,8 @@ packages: snapdragon-node: 2.1.1 split-string: 3.1.0 to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -14271,6 +14280,8 @@ packages: upath: 1.2.0 optionalDependencies: fsevents: 1.2.13 + transitivePeerDependencies: + - supports-color /chokidar/3.5.2: resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} @@ -15634,6 +15645,11 @@ packages: /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.0.0 @@ -15645,6 +15661,11 @@ packages: /debug/3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.1.3 @@ -16764,29 +16785,54 @@ packages: dependencies: debug: 3.2.7 resolve: 1.22.0 + transitivePeerDependencies: + - supports-color dev: true - /eslint-module-utils/2.7.3: + /eslint-module-utils/2.7.3_wex3ustmkv4ospy3s77r6ihlwq: resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true dependencies: + '@typescript-eslint/parser': 5.22.0_dx5yzralznart3ybdl432c3i44 debug: 3.2.7 + eslint-import-resolver-node: 0.3.6 find-up: 2.1.0 + transitivePeerDependencies: + - supports-color dev: true - /eslint-plugin-import/2.26.0_eslint@8.15.0: + /eslint-plugin-import/2.26.0_6nacgdzqm4zbhelsxkmd2vkvxy: resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: + '@typescript-eslint/parser': '*' eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true dependencies: + '@typescript-eslint/parser': 5.22.0_dx5yzralznart3ybdl432c3i44 array-includes: 3.1.4 array.prototype.flat: 1.2.5 debug: 2.6.9 doctrine: 2.1.0 eslint: 8.15.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3 + eslint-module-utils: 2.7.3_wex3ustmkv4ospy3s77r6ihlwq has: 1.0.3 is-core-module: 2.8.1 is-glob: 4.0.3 @@ -16794,6 +16840,10 @@ packages: object.values: 1.1.5 resolve: 1.22.0 tsconfig-paths: 3.14.1 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color dev: true /eslint-plugin-react-hooks/4.5.0_eslint@8.15.0: @@ -17505,6 +17555,8 @@ packages: regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color /expand-tilde/2.0.2: resolution: {integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=} @@ -17606,6 +17658,8 @@ packages: regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color /extract-files/9.0.0: resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} @@ -17921,6 +17975,8 @@ packages: is-glob: 3.1.0 micromatch: 3.1.10 resolve-dir: 1.0.1 + transitivePeerDependencies: + - supports-color dev: true /findup-sync/3.0.0: @@ -17931,6 +17987,8 @@ packages: is-glob: 4.0.3 micromatch: 3.1.10 resolve-dir: 1.0.1 + transitivePeerDependencies: + - supports-color dev: true /fined/1.2.0: @@ -18496,6 +18554,8 @@ packages: just-debounce: 1.1.0 normalize-path: 3.0.0 object.defaults: 1.1.0 + transitivePeerDependencies: + - supports-color dev: true /glob/7.1.6: @@ -18750,6 +18810,8 @@ packages: semver-greatest-satisfied-range: 1.1.0 v8flags: 3.2.0 yargs: 7.1.2 + transitivePeerDependencies: + - supports-color dev: true /gulp-zip/5.1.0: @@ -18777,6 +18839,8 @@ packages: gulp-cli: 2.3.0 undertaker: 1.3.0 vinyl-fs: 3.0.3 + transitivePeerDependencies: + - supports-color dev: true /gulplog/1.0.0: @@ -21514,6 +21578,8 @@ packages: object.map: 1.0.1 rechoir: 0.6.2 resolve: 1.22.0 + transitivePeerDependencies: + - supports-color dev: true /lilconfig/2.0.4: @@ -21909,6 +21975,8 @@ packages: micromatch: 3.1.10 resolve: 1.22.0 stack-trace: 0.0.10 + transitivePeerDependencies: + - supports-color dev: true /md5.js/1.3.5: @@ -22115,6 +22183,8 @@ packages: regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} @@ -22583,6 +22653,8 @@ packages: regex-not: 1.0.2 snapdragon: 0.8.2 to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color /native-abort-controller/1.0.4_abort-controller@3.0.0: resolution: {integrity: sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==} @@ -24840,6 +24912,8 @@ packages: graceful-fs: 4.2.10 micromatch: 3.1.10 readable-stream: 2.3.7 + transitivePeerDependencies: + - supports-color /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} @@ -26004,6 +26078,8 @@ packages: source-map: 0.5.7 source-map-resolve: 0.5.3 use: 3.1.1 + transitivePeerDependencies: + - supports-color /socket.io-client/2.4.0: resolution: {integrity: sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==} @@ -28183,14 +28259,6 @@ packages: optional: true dev: false - /use-subscription/1.6.0_react@packages+empty: - resolution: {integrity: sha512-0Y/cTLlZfw547tJhJMoRA16OUbVqRm6DmvGpiGbmLST6BIA5KU5cKlvlz8DVMrACnWpyEjCkgmhLatthP4jUbA==} - peerDependencies: - react: ^18.0.0 - dependencies: - react: link:packages/empty - dev: false - /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} @@ -28560,6 +28628,8 @@ packages: web3-providers-http: 1.7.3 web3-providers-ipc: 1.7.3 web3-providers-ws: 1.7.3 + transitivePeerDependencies: + - supports-color /web3-core-subscriptions/1.7.3: resolution: {integrity: sha512-/i1ZCLW3SDxEs5mu7HW8KL4Vq7x4/fDXY+yf/vPoDljlpvcLEOnI8y9r7om+0kYwvuTlM6DUHHafvW0221TyRQ==} @@ -28579,6 +28649,8 @@ packages: web3-core-method: 1.7.3 web3-core-requestmanager: 1.7.3 web3-utils: 1.7.3 + transitivePeerDependencies: + - supports-color /web3-eth-abi/1.7.3: resolution: {integrity: sha512-ZlD8DrJro0ocnbZViZpAoMX44x5aYAb73u2tMq557rMmpiluZNnhcCYF/NnVMy6UIkn7SF/qEA45GXA1ne6Tnw==} @@ -28722,6 +28794,8 @@ packages: eventemitter3: 4.0.4 web3-core-helpers: 1.7.3 websocket: 1.0.34 + transitivePeerDependencies: + - supports-color /web3-shh/1.7.3: resolution: {integrity: sha512-bQTSKkyG7GkuULdZInJ0osHjnmkHij9tAySibpev1XjYdjLiQnd0J9YGF4HjvxoG3glNROpuCyTaRLrsLwaZuw==} @@ -29266,6 +29340,8 @@ packages: typedarray-to-buffer: 3.1.5 utf-8-validate: 5.0.9 yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color /whatwg-encoding/2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} From f5c2684dfe13353afc020e1c1718004da14b494e Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 17 May 2022 13:52:08 +0800 Subject: [PATCH 04/29] chore: no-array-reduce (#6268) --- packages/.eslintrc.json | 1 + .../backup-format/src/utils/backupPreview.ts | 3 +- .../backup-format/src/utils/hex2buffer.ts | 4 +- packages/gun-utils/src/utils.ts | 1 + .../services/identity/profile/update.ts | 6 +- packages/mask/src/UIRoot.tsx | 1 + .../components/shared/ApplicationBoard.tsx | 44 +++---- .../shared/ApplicationSettingPluginList.tsx | 34 ++---- .../shared/ApplicationSettingPluginSwitch.tsx | 16 +-- .../FindTruman/SNSAdaptor/OptionsCard.tsx | 7 +- .../FindTruman/SNSAdaptor/ResultCard.tsx | 8 +- .../plugins/ITO/SNSAdaptor/NftAirdropCard.tsx | 7 +- .../mask/src/plugins/ITO/Worker/apis/chain.ts | 115 +++++++++--------- .../src/plugins/Polls/SNSAdaptor/Polls.tsx | 5 +- .../src/plugins/PoolTogether/UI/Account.tsx | 19 ++- .../plugins/PoolTogether/UI/DepositDialog.tsx | 2 +- .../hooks/useAvailabilityNftRedPacket.ts | 5 +- .../plugins/RedPacket/Worker/apis/chain.ts | 85 +++++++------ .../Savings/SNSAdaptor/SavingsDialog.tsx | 18 +-- .../Snapshot/SNSAdaptor/ResultCard.tsx | 14 ++- .../plugins/Snapshot/SNSAdaptor/VotesCard.tsx | 15 ++- .../Snapshot/SNSAdaptor/hooks/usePower.ts | 21 ++-- .../Snapshot/SNSAdaptor/hooks/useResults.ts | 21 ++-- .../Snapshot/SNSAdaptor/hooks/useVotes.ts | 7 +- .../plugins/Tips/hooks/useTipsWalletsList.ts | 7 +- .../src/plugins/Trader/apis/balancer/index.ts | 3 +- .../src/plugins/Trader/apis/trending/index.ts | 14 ++- .../src/plugins/Trader/apis/uniswap/index.ts | 10 +- .../trader/uniswap/useAllCommonPairs.ts | 29 ++--- .../trader/uniswap/useTradeBreakdown.ts | 2 + .../Trader/trader/uniswap/useV3BestTrade.ts | 2 + .../Trader/trader/uniswap/useV3SwapPools.ts | 12 +- packages/mask/src/utils/getTextUILength.ts | 5 +- .../src/hooks/useAllPluginsWeb3State.ts | 15 +-- .../plugin-infra/src/manager/sns-adaptor.ts | 15 +-- packages/shared-base/src/color/avatar.ts | 1 + packages/theme/src/Theme/Provider.tsx | 1 + .../typed-message/base/transformer/Flatten.ts | 1 + .../base/transformer/composed.ts | 1 + packages/web3-providers/src/debank/format.ts | 58 ++++----- packages/web3-shared/evm/utils/token.ts | 26 ++-- 41 files changed, 302 insertions(+), 359 deletions(-) diff --git a/packages/.eslintrc.json b/packages/.eslintrc.json index 2b91bf5350be..df53e8dd126b 100644 --- a/packages/.eslintrc.json +++ b/packages/.eslintrc.json @@ -59,6 +59,7 @@ "unicorn/no-new-buffer": "error", "unicorn/no-thenable": "error", "unicorn/no-useless-promise-resolve-reject": "error", + "unicorn/no-array-reduce": ["error", { "allowSimpleOperations": false }], "unicorn/prefer-add-event-listener": "error", "unicorn/prefer-date-now": "error", "unicorn/prefer-dom-node-dataset": "error", diff --git a/packages/backup-format/src/utils/backupPreview.ts b/packages/backup-format/src/utils/backupPreview.ts index eb1be97c3095..baeb83c4c208 100644 --- a/packages/backup-format/src/utils/backupPreview.ts +++ b/packages/backup-format/src/utils/backupPreview.ts @@ -1,4 +1,5 @@ import type { NormalizedBackup } from '@masknet/backup-format' +import { sumBy } from 'lodash-unified' export interface BackupPreview { personas: number @@ -20,7 +21,7 @@ export function getBackupPreviewInfo(json: NormalizedBackup.Data): BackupPreview return { personas: json.personas.size, - accounts: [...json.personas.values()].reduce((a, b) => a + b.linkedProfiles.size, 0), + accounts: sumBy([...json.personas.values()], (persona) => persona.linkedProfiles.size), posts: json.posts.size, contacts: json.profiles.size, relations: json.relations.length, diff --git a/packages/backup-format/src/utils/hex2buffer.ts b/packages/backup-format/src/utils/hex2buffer.ts index 7204339f8dd7..4b8f76f2e0c2 100644 --- a/packages/backup-format/src/utils/hex2buffer.ts +++ b/packages/backup-format/src/utils/hex2buffer.ts @@ -1,3 +1,5 @@ +import { sum } from 'lodash-unified' + /** @internal */ export function hex2buffer(hexString: string, padded?: boolean) { if (hexString.length % 2) { @@ -21,7 +23,7 @@ export function hex2buffer(hexString: string, padded?: boolean) { /** @internal */ function concat(...buf: (Uint8Array | number[])[]) { - const res = new Uint8Array(buf.map((item) => item.length).reduce((prev, cur) => prev + cur)) + const res = new Uint8Array(sum(buf.map((item) => item.length))) let offset = 0 buf.forEach((item) => { for (let i = 0; i < item.length; i += 1) { diff --git a/packages/gun-utils/src/utils.ts b/packages/gun-utils/src/utils.ts index ca0357ddc92d..4ca9392d60c8 100644 --- a/packages/gun-utils/src/utils.ts +++ b/packages/gun-utils/src/utils.ts @@ -2,6 +2,7 @@ import { EventIterator } from 'event-iterator' import { getGunInstance, OnCloseEvent } from './instance' function getGunNodeFromPath(path: string[]) { + // eslint-disable-next-line unicorn/no-array-reduce const resultNode = path.reduce((gun, path) => gun.get(path as never), getGunInstance()) return resultNode } diff --git a/packages/mask/background/services/identity/profile/update.ts b/packages/mask/background/services/identity/profile/update.ts index c82f7a8f5792..2a6189457780 100644 --- a/packages/mask/background/services/identity/profile/update.ts +++ b/packages/mask/background/services/identity/profile/update.ts @@ -58,10 +58,10 @@ export async function resolveUnknownLegacyIdentity(identifier: ProfileIdentifier const unknown = ProfileIdentifier.of(identifier.network, '$unknown').unwrap() const self = ProfileIdentifier.of(identifier.network, '$self').unwrap() - const r = await queryProfilesDB({ identifiers: [unknown, self] }) - if (!r.length) return + const records = await queryProfilesDB({ identifiers: [unknown, self] }) + if (!records.length) return const final = { - ...r.reduce((p, c) => ({ ...p, ...c })), + ...Object.assign({}, ...records), identifier, } try { diff --git a/packages/mask/src/UIRoot.tsx b/packages/mask/src/UIRoot.tsx index 7e0dabf1b201..9cae87e10383 100644 --- a/packages/mask/src/UIRoot.tsx +++ b/packages/mask/src/UIRoot.tsx @@ -17,6 +17,7 @@ import { MaskThemeProvider } from '@masknet/theme' const identity = (jsx: React.ReactNode) => jsx as JSX.Element function compose(init: React.ReactNode, ...f: ((children: React.ReactNode) => JSX.Element)[]) { + // eslint-disable-next-line unicorn/no-array-reduce return f.reduceRight((prev, curr) => curr(prev), <>{init}) } diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index ad043a459618..9f8b3016c9ae 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -4,7 +4,7 @@ import { Typography } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount, NetworkPluginID } from '@masknet/plugin-infra/web3' -import { EMPTY_LIST, CrossIsolationMessages, formatPersonaPublicKey } from '@masknet/shared-base' +import { CrossIsolationMessages, formatPersonaPublicKey } from '@masknet/shared-base' import { getCurrentSNSNetwork } from '../../social-network-adaptor/utils' import { activatedSocialNetworkUI } from '../../social-network' import { useI18N } from '../../utils' @@ -122,33 +122,25 @@ function ApplicationBoardContent(props: Props) { const applicationList = useMemo( () => snsAdaptorPlugins - .reduce((acc, cur) => { - if (!cur.ApplicationEntries) return acc - const currentWeb3NetworkSupportedChainIds = cur.enableRequirement.web3?.[currentWeb3Network] + .flatMap(({ ID, ApplicationEntries, enableRequirement }) => { + if (!ApplicationEntries) return [] + const currentWeb3NetworkSupportedChainIds = enableRequirement.web3?.[currentWeb3Network] const isWalletConnectedRequired = currentWeb3NetworkSupportedChainIds !== undefined - const currentSNSIsSupportedNetwork = cur.enableRequirement.networks.networks[currentSNSNetwork] + const currentSNSIsSupportedNetwork = enableRequirement.networks.networks[currentSNSNetwork] const isSNSEnabled = currentSNSIsSupportedNetwork === undefined || currentSNSIsSupportedNetwork - - return acc.concat( - cur.ApplicationEntries.map((x) => { - return { - entry: x, - enabled: isSNSEnabled, - pluginId: cur.ID, - isWalletConnectedRequired: !account && isWalletConnectedRequired, - isWalletConnectedEVMRequired: Boolean( - account && - currentWeb3Network !== NetworkPluginID.PLUGIN_EVM && - isWalletConnectedRequired, - ), - } - }) ?? EMPTY_LIST, - ) - }, EMPTY_LIST) - .sort( - (a, b) => - (a.entry.appBoardSortingDefaultPriority ?? 0) - (b.entry.appBoardSortingDefaultPriority ?? 0), - ) + return ApplicationEntries.map((entry) => ({ + entry, + enabled: isSNSEnabled, + pluginId: ID, + isWalletConnectedRequired: !account && isWalletConnectedRequired, + isWalletConnectedEVMRequired: Boolean( + account && currentWeb3Network !== NetworkPluginID.PLUGIN_EVM && isWalletConnectedRequired, + ), + })) + }) + .sort((a, b) => { + return (a.entry.appBoardSortingDefaultPriority ?? 0) - (b.entry.appBoardSortingDefaultPriority ?? 0) + }) .filter((x) => Boolean(x.entry.RenderEntryComponent)), [snsAdaptorPlugins, currentWeb3Network, chainId, account], ) diff --git a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx index 60cce9311e2c..5e5d47c7e912 100644 --- a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx +++ b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx @@ -2,7 +2,6 @@ import { useActivatedPluginsSNSAdaptor, Plugin } from '@masknet/plugin-infra/con import { useMemo, useState, useCallback } from 'react' import { List, ListItem, Typography } from '@mui/material' import { makeStyles, getMaskColor } from '@masknet/theme' -import { EMPTY_LIST } from '@masknet/shared-base' import { useI18N } from '../../utils' import { PersistentStorages } from '../../../shared' @@ -81,28 +80,17 @@ export function ApplicationSettingPluginList() { const { classes } = useStyles() const { t } = useI18N() const snsAdaptorPlugins = useActivatedPluginsSNSAdaptor('any') - const applicationList = useMemo( - () => - snsAdaptorPlugins - .reduce((acc, cur) => { - if (!cur.ApplicationEntries) return acc - return acc.concat( - cur.ApplicationEntries.filter( - (x) => x.appBoardSortingDefaultPriority && !x.recommendFeature, - ).map((x) => { - return { - entry: x, - pluginId: cur.ID, - } - }) ?? EMPTY_LIST, - ) - }, EMPTY_LIST) - .sort( - (a, b) => - (a.entry.appBoardSortingDefaultPriority ?? 0) - (b.entry.appBoardSortingDefaultPriority ?? 0), - ), - [snsAdaptorPlugins], - ) + const applicationList = useMemo(() => { + return snsAdaptorPlugins + .flatMap(({ ID, ApplicationEntries: entries }) => + (entries ?? []) + .filter((entry) => entry.appBoardSortingDefaultPriority && !entry.recommendFeature) + .map((entry) => ({ entry, pluginId: ID })), + ) + .sort((a, b) => { + return (a.entry.appBoardSortingDefaultPriority ?? 0) - (b.entry.appBoardSortingDefaultPriority ?? 0) + }) + }, [snsAdaptorPlugins]) const [listedAppList, setListedAppList] = useState(applicationList.filter((x) => !getUnlistedApp(x))) const [unlistedAppList, setUnListedAppList] = useState(applicationList.filter((x) => getUnlistedApp(x))) diff --git a/packages/mask/src/components/shared/ApplicationSettingPluginSwitch.tsx b/packages/mask/src/components/shared/ApplicationSettingPluginSwitch.tsx index e11d80d28614..b8f5de60eed8 100644 --- a/packages/mask/src/components/shared/ApplicationSettingPluginSwitch.tsx +++ b/packages/mask/src/components/shared/ApplicationSettingPluginSwitch.tsx @@ -1,7 +1,7 @@ import { List, ListItem, ListItemAvatar, Avatar, Typography, Box } from '@mui/material' import { openWindow } from '@masknet/shared-base-ui' import { TutorialIcon } from '@masknet/icons' -import { useActivatedPluginsSNSAdaptor, Plugin, PluginI18NFieldRender } from '@masknet/plugin-infra/content-script' +import { useActivatedPluginsSNSAdaptor, PluginI18NFieldRender } from '@masknet/plugin-infra/content-script' import { SettingSwitch } from '@masknet/shared' import { makeStyles, MaskColorVar } from '@masknet/theme' import { Services } from '../../extension/service' @@ -72,17 +72,9 @@ export function ApplicationSettingPluginSwitch(props: Props) { return ( {snsAdaptorPlugins - .reduce<{ entry: Plugin.SNSAdaptor.ApplicationEntry; pluginId: string }[]>((acc, cur) => { - if (!cur.ApplicationEntries) return acc - return acc.concat( - cur.ApplicationEntries.map((x) => { - return { - entry: x, - pluginId: cur.ID, - } - }) ?? [], - ) - }, []) + .flatMap(({ ID, ApplicationEntries: entries }) => + (entries ?? []).map((entry) => ({ entry, pluginId: ID })), + ) .filter((x) => x.entry.category === 'dapp') .sort((a, b) => (a.entry.marketListSortingPriority ?? 0) - (b.entry.marketListSortingPriority ?? 0)) .map((x) => ( diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx index ce66e9674eb6..46a36cc3aa8e 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx @@ -7,6 +7,7 @@ import NoNftCard from './NoNftCard' import { FindTrumanContext } from '../context' import { BorderLinearProgress } from './ResultCard' import { ActionButtonPromise } from '../../../extension/options-page/DashboardComponents/ActionButton' +import { sumBy } from 'lodash-unified' const useOptionsStyles = makeStyles()((theme) => { return { @@ -92,11 +93,7 @@ export default function OptionsCard(props: OptionsViewProps) { const renderOptions = (userStatus: UserPollStatus) => { const showCount = !!userStatus.count - const total = userStatus.count - ? userStatus.count.reduce((total, e) => { - return { choice: -1, value: total.value + e.value } - }).value - : 0 + const total = sumBy(userStatus.count ?? [], (status) => status.value) return userStatus.options.map((option, index) => { const count = userStatus.count ? userStatus.count.find((e) => e.choice === index)?.value || 0 : 0 const percent = (total > 0 ? (count * 100) / total : 0).toFixed(2) diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/ResultCard.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/ResultCard.tsx index 03d293bf378b..519ae4a753d8 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/ResultCard.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/ResultCard.tsx @@ -16,6 +16,7 @@ import { PostType } from '../types' import { useContext, useState } from 'react' import { FindTrumanContext } from '../context' import { makeStyles } from '@masknet/theme' +import { sumBy } from 'lodash-unified' export const BorderLinearProgress: any = styled(LinearProgress)(({ theme }) => ({ height: 10, @@ -49,12 +50,7 @@ export default function ResultCard(props: ResultViewProps) { const { t } = useContext(FindTrumanContext) - const total = - result?.count && result.count.length > 0 - ? result.count.reduce((total, e) => { - return { choice: -1, value: total.value + e.value } - }).value - : 1 + const total = result?.count ? sumBy(result.count, (status) => status.value) : 1 const answer = result ? type === PostType.PuzzleResult diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/NftAirdropCard.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/NftAirdropCard.tsx index 1ecf7565186f..7190867404a9 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/NftAirdropCard.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/NftAirdropCard.tsx @@ -186,12 +186,7 @@ export function NftAirdropCard(props: NftAirdropCardProps) { const currentChainId = useChainId() const { classes } = useStyles() - const claimableCount = campaignInfos - ? campaignInfos.reduce((acc, cur) => { - if (cur.claimableInfo.claimable) return acc + 1 - return acc - }, 0) - : 0 + const claimableCount = campaignInfos?.filter((info) => info.claimableInfo.claimable).length ?? 0 useEffect(() => { setCheckAddress('') diff --git a/packages/mask/src/plugins/ITO/Worker/apis/chain.ts b/packages/mask/src/plugins/ITO/Worker/apis/chain.ts index d856374686aa..302bbc539fed 100644 --- a/packages/mask/src/plugins/ITO/Worker/apis/chain.ts +++ b/packages/mask/src/plugins/ITO/Worker/apis/chain.ts @@ -69,56 +69,58 @@ export async function getAllPoolsAsSeller( _unlock_time: BigNumber } - const payloadList: { payload: JSON_PayloadFromChain; hash: string }[] = (await response.json()).result?.reduce( - (acc: { payload: JSON_PayloadFromChain; hash: string }[], cur: TxType) => { - if (!isSameAddress(cur.from, sellerAddress)) return acc - try { - const decodedInputParam = interFace.decodeFunctionData( - 'fill_pool', - cur.input, - ) as unknown as FillPoolInputParam - - const [sellerName = '', message = '', regions = '-'] = decodedInputParam._message.split(MSG_DELIMITER) - - const payload: JSON_PayloadFromChain = { - end_time: (decodedInputParam._end.toNumber() + ITO_CONTRACT_BASE_TIMESTAMP / 1000) * 1000, - exchange_token_addresses: decodedInputParam._exchange_addrs, - limit: decodedInputParam._limit.toString(), - message, - qualification_address: decodedInputParam._qualification, - exchange_amounts: decodedInputParam._ratios.map((v) => v.toString()), - start_time: (decodedInputParam._start.toNumber() + ITO_CONTRACT_BASE_TIMESTAMP / 1000) * 1000, - token_address: decodedInputParam._token_addr, - total: decodedInputParam._total_tokens.toString(), - unlock_time: - (decodedInputParam._unlock_time.toNumber() + ITO_CONTRACT_BASE_TIMESTAMP / 1000) * 1000, - seller: { - address: cur.from, - name: sellerName, - }, - contract_address: cur.to, - chain_id: chainId, - regions, - block_number: Number(cur.blockNumber), - // #region Retrieve at step 3 - pid: '', - creation_time: 0, - // #endregion - // #region Retrieve at step 4 - total_remaining: '', - // #endregion - // #region Retrieve from database - password: '', - // #endregion - } + interface Payload { + result?: TxType[] + } + + const payload: Payload = await response.json() - return acc.concat({ payload, hash: cur.hash }) - } catch { - return acc + const payloadList = (payload.result ?? []).flatMap((txType: TxType) => { + if (!isSameAddress(txType.from, sellerAddress)) return [] + try { + const decodedInputParam = interFace.decodeFunctionData( + 'fill_pool', + txType.input, + ) as unknown as FillPoolInputParam + + const [sellerName = '', message = '', regions = '-'] = decodedInputParam._message.split(MSG_DELIMITER) + + const payload: JSON_PayloadFromChain = { + end_time: (decodedInputParam._end.toNumber() + ITO_CONTRACT_BASE_TIMESTAMP / 1000) * 1000, + exchange_token_addresses: decodedInputParam._exchange_addrs, + limit: decodedInputParam._limit.toString(), + message, + qualification_address: decodedInputParam._qualification, + exchange_amounts: decodedInputParam._ratios.map((v) => v.toString()), + start_time: (decodedInputParam._start.toNumber() + ITO_CONTRACT_BASE_TIMESTAMP / 1000) * 1000, + token_address: decodedInputParam._token_addr, + total: decodedInputParam._total_tokens.toString(), + unlock_time: (decodedInputParam._unlock_time.toNumber() + ITO_CONTRACT_BASE_TIMESTAMP / 1000) * 1000, + seller: { + address: txType.from, + name: sellerName, + }, + contract_address: txType.to, + chain_id: chainId, + regions, + block_number: Number(txType.blockNumber), + // #region Retrieve at step 3 + pid: '', + creation_time: 0, + // #endregion + // #region Retrieve at step 4 + total_remaining: '', + // #endregion + // #region Retrieve from database + password: '', + // #endregion } - }, - [], - ) + + return { payload, hash: txType.hash } + } catch { + return [] + } + }) // #endregion // #region @@ -212,18 +214,18 @@ export async function getClaimAllPools(chainId: ChainId, endBlock: number, swapp if (!Array.isArray(result)) return [] - const swapRawData: SwapRawType[] = result.reduce((acc: SwapRawType[], cur: TxType) => { - if (!isSameAddress(cur.from, swapperAddress)) return acc + const swapRawData: SwapRawType[] = result.flatMap((txType: TxType) => { + if (!isSameAddress(txType.from, swapperAddress)) return [] try { - const decodedInputParam = interFace.decodeFunctionData('swap', cur.input) as unknown as SwapInputParam - return acc.concat({ - txHash: cur.hash, + const decodedInputParam = interFace.decodeFunctionData('swap', txType.input) as unknown as SwapInputParam + return { + txHash: txType.hash, pid: decodedInputParam.id, - }) + } } catch { - return acc + return [] } - }, []) + }) // 3. filter out pools that have unlock_time. const swapRawFilteredData = ( @@ -273,6 +275,7 @@ export async function getClaimAllPools(chainId: ChainId, endBlock: number, swapp .filter((v) => Boolean(v)) as SwappedTokenType[] // 5. merge same swap token pools into one + // eslint-disable-next-line unicorn/no-array-reduce const swappedTokenList = swappedTokenUnmergedList.reduce((acc: SwappedTokenType[], cur) => { if (acc.some(checkClaimable(cur)) && cur.isClaimable) { // merge same claimable tokens to one diff --git a/packages/mask/src/plugins/Polls/SNSAdaptor/Polls.tsx b/packages/mask/src/plugins/Polls/SNSAdaptor/Polls.tsx index 3167f68adc78..2fedf1d570ad 100644 --- a/packages/mask/src/plugins/Polls/SNSAdaptor/Polls.tsx +++ b/packages/mask/src/plugins/Polls/SNSAdaptor/Polls.tsx @@ -8,6 +8,7 @@ import type { PollGunDB } from '../Services' import { PollStatus } from '../types' import { SupportedLanguages } from '@masknet/public-api' import { safeUnreachable } from '@dimensiondev/kit' +import { sum } from 'lodash-unified' const useStyles = makeStyles()((theme) => ({ card: { @@ -71,9 +72,7 @@ export function PollCardUI(props: PollCardProps) { const { t } = useI18N() const lang = useLanguage() - const totalVotes = poll.results.reduce( - (accumulator: number, currentValue: number): number => accumulator + currentValue, - ) + const totalVotes = sum(poll.results) const getDeadline = (date: number) => { const deadline = new Date(date) diff --git a/packages/mask/src/plugins/PoolTogether/UI/Account.tsx b/packages/mask/src/plugins/PoolTogether/UI/Account.tsx index e6fdde3a26fa..013cdc5be9e5 100644 --- a/packages/mask/src/plugins/PoolTogether/UI/Account.tsx +++ b/packages/mask/src/plugins/PoolTogether/UI/Account.tsx @@ -8,6 +8,7 @@ import { COMMUNITY_URL } from '../constants' import { useAccountBalance } from '../hooks/useAccountBalances' import type { Pool } from '../types' import { AccountPool } from './AccountPool' +import { sumBy } from 'lodash-unified' const useStyles = makeStyles()((theme) => ({ root: { @@ -76,17 +77,13 @@ export function Account(props: AccountProps) { } const noZeroBalances = balances.filter((balance) => Number.parseInt(balance.account.ticketBalance, 10) !== 0) - const totalUsdBalance = noZeroBalances - .map((balance) => { - const ticketBalance = Number.parseFloat( - formatBalance(balance.account.ticketBalance, Number.parseInt(balance.pool.tokens.ticket.decimals, 10)), - ) - const ticketUsdRate = balance.pool.tokens.ticket.usd - if (!ticketUsdRate) return 0 - return ticketBalance * ticketUsdRate - }) - .reduce((x, y) => x + y, 0) - .toLocaleString() + const totalUsdBalance = sumBy(noZeroBalances, (balance) => { + const decimals = Number.parseInt(balance.pool.tokens.ticket.decimals, 10) + const ticketBalance = Number.parseFloat(formatBalance(balance.account.ticketBalance, decimals)) + const ticketUsdRate = balance.pool.tokens.ticket.usd + if (!ticketUsdRate) return 0 + return ticketBalance * ticketUsdRate + }) return ( diff --git a/packages/mask/src/plugins/PoolTogether/UI/DepositDialog.tsx b/packages/mask/src/plugins/PoolTogether/UI/DepositDialog.tsx index ced220768201..68b1561e6db4 100644 --- a/packages/mask/src/plugins/PoolTogether/UI/DepositDialog.tsx +++ b/packages/mask/src/plugins/PoolTogether/UI/DepositDialog.tsx @@ -295,7 +295,7 @@ export function DepositDialog() { {t('plugin_pooltogether_odds_value', { - value: odds.toLocaleString(), + value: odds, period: getPrizePeriod(t, prizePeriodSeconds), })} diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useAvailabilityNftRedPacket.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useAvailabilityNftRedPacket.ts index 95a9b460db6d..1537455aa3d1 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useAvailabilityNftRedPacket.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useAvailabilityNftRedPacket.ts @@ -19,10 +19,7 @@ export function useAvailabilityNftRedPacket(id: string, from: string) { const isClaimed = availability.claimed_id !== '0' const totalAmount = result.erc721_token_ids.length const bits = new BigNumber(result.bit_status).toString(2).split('') - const claimedAmount = bits.reduce((acc, cur) => { - if (cur === '1') return acc + 1 - return acc - }, 0) + const claimedAmount = bits.filter((bit) => bit === '1').length const isClaimedAll = totalAmount === claimedAmount const isCompleted = isClaimedAll && !isClaimed const isEnd = isCompleted || availability.expired diff --git a/packages/mask/src/plugins/RedPacket/Worker/apis/chain.ts b/packages/mask/src/plugins/RedPacket/Worker/apis/chain.ts index 6fda5d4d7125..66029ca049c1 100644 --- a/packages/mask/src/plugins/RedPacket/Worker/apis/chain.ts +++ b/packages/mask/src/plugins/RedPacket/Worker/apis/chain.ts @@ -64,53 +64,50 @@ export async function getRedPacketHistory( _total_tokens: BigNumber } - const { result } = await response.json() + const { result }: { result: TxType[] } = await response.json() if (!result.length) return [] - const payloadList: RedPacketJSONPayloadFromChain[] = result.reduce( - (acc: RedPacketJSONPayloadFromChain[], cur: TxType) => { - if (!isSameAddress(cur.from, senderAddress)) return acc - try { - const decodedInputParam = interFace.decodeFunctionData( - 'create_red_packet', - cur.input, - ) as unknown as CreateRedpacketParam - - const redpacketPayload: RedPacketJSONPayloadFromChain = { - contract_address: cur.to, - txid: cur.hash, - shares: decodedInputParam._number.toNumber(), - is_random: decodedInputParam._ifrandom, - total: decodedInputParam._total_tokens.toString(), - duration: decodedInputParam._duration.toNumber() * 1000, - block_number: Number(cur.blockNumber), - contract_version: 4, - network: getChainName(chainId), - token_address: decodedInputParam._token_addr, - sender: { - address: senderAddress, - name: decodedInputParam._name, - message: decodedInputParam._message, - }, - // #region Retrieve at step 3 - rpid: '', - creation_time: 0, - // #endregion - // #region Retrieve at step 4 - total_remaining: '', - claimers: [], - // #endregion - // #region Retrieve from database - password: '', - // #endregion - } - return acc.concat(redpacketPayload) - } catch { - return acc + const payloadList: RedPacketJSONPayloadFromChain[] = result.flatMap((txType: TxType) => { + if (!isSameAddress(txType.from, senderAddress)) return [] + try { + const decodedInputParam = interFace.decodeFunctionData( + 'create_red_packet', + txType.input, + ) as unknown as CreateRedpacketParam + + const redpacketPayload: RedPacketJSONPayloadFromChain = { + contract_address: txType.to, + txid: txType.hash, + shares: decodedInputParam._number.toNumber(), + is_random: decodedInputParam._ifrandom, + total: decodedInputParam._total_tokens.toString(), + duration: decodedInputParam._duration.toNumber() * 1000, + block_number: Number(txType.blockNumber), + contract_version: 4, + network: getChainName(chainId), + token_address: decodedInputParam._token_addr, + sender: { + address: senderAddress, + name: decodedInputParam._name, + message: decodedInputParam._message, + }, + // #region Retrieve at step 3 + rpid: '', + creation_time: 0, + // #endregion + // #region Retrieve at step 4 + total_remaining: '', + claimers: [], + // #endregion + // #region Retrieve from database + password: '', + // #endregion } - }, - [], - ) + return redpacketPayload + } catch { + return [] + } + }) // #endregion // #region diff --git a/packages/mask/src/plugins/Savings/SNSAdaptor/SavingsDialog.tsx b/packages/mask/src/plugins/Savings/SNSAdaptor/SavingsDialog.tsx index 797928a50a45..86eadc23d02e 100644 --- a/packages/mask/src/plugins/Savings/SNSAdaptor/SavingsDialog.tsx +++ b/packages/mask/src/plugins/Savings/SNSAdaptor/SavingsDialog.tsx @@ -32,19 +32,7 @@ import { LidoProtocol } from '../protocols/LDOProtocol' import { AAVEProtocol } from '../protocols/AAVEProtocol' import { LDO_PAIRS } from '../constants' import type { AbiItem } from 'web3-utils' -import { flatten, compact } from 'lodash-unified' - -function splitToPair(a: FungibleTokenDetailed[] | undefined) { - if (!a) { - return [] - } - return a.reduce(function (result: any, value, index, array) { - if (index % 2 === 0) { - result.push(array.slice(index, index + 2)) - } - return result - }, []) -} +import { flatten, compact, chunk } from 'lodash-unified' export interface SavingsDialogProps { open: boolean @@ -100,7 +88,9 @@ export function SavingsDialog({ open, onClose }: SavingsDialogProps) { const protocols = useMemo( () => [ ...LDO_PAIRS.filter((x) => x[0].chainId === chainId).map((pair) => new LidoProtocol(pair)), - ...splitToPair(detailedAaveTokens).map((pair: any) => new AAVEProtocol(pair)), + ...chunk(detailedAaveTokens, 2).map( + (pair) => new AAVEProtocol(pair as [FungibleTokenDetailed, FungibleTokenDetailed]), + ), ], [chainId, detailedAaveTokens, tab], ) diff --git a/packages/mask/src/plugins/Snapshot/SNSAdaptor/ResultCard.tsx b/packages/mask/src/plugins/Snapshot/SNSAdaptor/ResultCard.tsx index efe8cc1910b9..83351e1e31f0 100644 --- a/packages/mask/src/plugins/Snapshot/SNSAdaptor/ResultCard.tsx +++ b/packages/mask/src/plugins/Snapshot/SNSAdaptor/ResultCard.tsx @@ -125,11 +125,15 @@ function Content() { }} title={ - {result.powerDetail.reduce((sum, cur, i) => { - const name = - millify(cur.power, { precision: 2, lowercase: true }) + ' ' + cur.name - return `${sum} ${i === 0 ? '' : '+'} ${name}` - }, '')} + {result.powerDetail + .flatMap((detail, index) => { + const name = millify(detail.power, { + precision: 2, + lowercase: true, + }) + return [index === 0 ? '' : '+', name, detail.name] + }) + .join(' ')} } placement="top" diff --git a/packages/mask/src/plugins/Snapshot/SNSAdaptor/VotesCard.tsx b/packages/mask/src/plugins/Snapshot/SNSAdaptor/VotesCard.tsx index decf384a4212..b473f4db44aa 100644 --- a/packages/mask/src/plugins/Snapshot/SNSAdaptor/VotesCard.tsx +++ b/packages/mask/src/plugins/Snapshot/SNSAdaptor/VotesCard.tsx @@ -95,14 +95,13 @@ function Content() { const isAverageWeight = v.choices?.every((c) => c.weight === 1) const fullChoiceText = v.totalWeight && v.choices - ? v.choices.reduce((acc, choice, i) => { - return ( - acc + - (i === 0 ? '' : ', ') + - (!isAverageWeight ? formatPercentage(choice.weight / v.totalWeight!) + ' ' : '') + - choice.name - ) - }, '') + ? v.choices + .flatMap((choice, index) => [ + index === 0 ? '' : ', ', + !isAverageWeight ? formatPercentage(choice.weight / v.totalWeight!) + ' ' : '', + choice.name, + ]) + .join('') : null return ( diff --git a/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/usePower.ts b/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/usePower.ts index 9c6699ebfc59..664a656d01fa 100644 --- a/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/usePower.ts +++ b/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/usePower.ts @@ -3,7 +3,7 @@ import { useAccount } from '@masknet/web3-shared-evm' import { PluginSnapshotRPC } from '../../messages' import type { ProposalIdentifier } from '../../types' import { useProposal } from './useProposal' -import { mapKeys } from 'lodash-unified' +import { find, sumBy } from 'lodash-unified' export function usePower(identifier: ProposalIdentifier) { const { payload: proposal } = useProposal(identifier.id) @@ -11,18 +11,13 @@ export function usePower(identifier: ProposalIdentifier) { const account = useAccount() return useAsyncRetry(async () => { if (!account) return 0 - return ( - await PluginSnapshotRPC.getScores( - proposal.snapshot, - [account], - proposal.network, - identifier.space, - proposal.strategies, - ) + const scores = await PluginSnapshotRPC.getScores( + proposal.snapshot, + [account], + proposal.network, + identifier.space, + proposal.strategies, ) - .map((v) => mapKeys(v, (_value, key) => key.toLowerCase()) as { [x: string]: number }) - .reduce((acc, cur) => { - return acc + (cur[account.toLowerCase()] ?? 0) - }, 0) + return sumBy(scores, (score) => find(score, (_, key) => key.toLowerCase() === account.toLowerCase()) ?? 0) }, [account]) } diff --git a/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/useResults.ts b/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/useResults.ts index 203516d92f52..fdadf07e37e9 100644 --- a/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/useResults.ts +++ b/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/useResults.ts @@ -2,6 +2,7 @@ import type { ProposalIdentifier, ProposalResult, VoteItem } from '../../types' import { useSuspense } from '../../../../utils/hooks/useSuspense' import { useProposal } from './useProposal' import { useVotes } from './useVotes' +import { sumBy } from 'lodash-unified' const cache = new Map< string, @@ -25,20 +26,18 @@ async function Suspender(identifier: ProposalIdentifier) { const { payload: proposal } = useProposal(identifier.id) const { payload: votes } = useVotes(identifier) const strategies = proposal.strategies - const powerOfChoices = proposal.choices.map((_choice, i) => - voteForChoice(votes, i).reduce((a, b) => { - if (b.choiceIndex) { - return a + b.balance - } else { - const totalWeight = b.choices!.reduce((_totalWeight, inner_b) => _totalWeight + inner_b.weight, 0) - return a + (b.balance * (b.choices!.find((v) => v.index === i + 1)?.weight ?? 0)) / totalWeight - } - }, 0), + const powerOfChoices = proposal.choices.map((_choice, index) => + sumBy(voteForChoice(votes, index), (choice) => { + if (choice.choiceIndex) return choice.balance + const totalWeight = sumBy(choice.choices, (choice) => choice.weight) + const weight = choice.choices!.find((v) => v.index === index + 1)?.weight ?? 0 + return (choice.balance * weight) / totalWeight + }), ) const powerDetailOfChoices = proposal.choices.map((_choice, i) => - strategies.map((_strategy, sI) => voteForChoice(votes, i).reduce((a, b) => a + b.scores[sI], 0)), + strategies.map((_strategy, index) => sumBy(voteForChoice(votes, i), (vote) => vote.scores[index])), ) - const totalPower = votes.reduce((a, b) => a + b.balance, 0) + const totalPower = sumBy(votes, (vote) => vote.balance) const results: ProposalResult[] = powerOfChoices.map((p, i) => ({ choice: proposal.choices[i], diff --git a/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/useVotes.ts b/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/useVotes.ts index fd8c2f5e2e6c..498e1f244f74 100644 --- a/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/useVotes.ts +++ b/packages/mask/src/plugins/Snapshot/SNSAdaptor/hooks/useVotes.ts @@ -2,6 +2,7 @@ import { PluginSnapshotRPC } from '../../messages' import type { VoteItem, ProposalIdentifier } from '../../types' import { useSuspense } from '../../../../utils/hooks/useSuspense' import { useProposal } from './useProposal' +import { sumBy } from 'lodash-unified' const cache = new Map] | [1, VoteItem[]] | [2, Error]>() export function votesRetry() { @@ -50,13 +51,11 @@ async function Suspender(identifier: ProposalIdentifier) { totalWeight: choices ? Array.isArray(v.choice) ? v.choice.length - : choices.reduce((acc, choice) => { - return acc + choice.weight - }, 0) + : sumBy(choices, (choice) => choice.weight) : undefined, address: v.voter, authorIpfsHash: v.id, - balance: scores.reduce((a, b) => a + (b[v.voter.toLowerCase()] ? b[v.voter.toLowerCase()] : 0), 0), + balance: sumBy(scores, (score) => score[v.voter.toLowerCase()] ?? 0), scores: strategies.map((_strategy, i) => scores[i][v.voter] || 0), strategySymbol: proposal.space.symbol ?? strategies[0].params.symbol, authorName: profileEntries[v.voter.toLowerCase()]?.name, diff --git a/packages/mask/src/plugins/Tips/hooks/useTipsWalletsList.ts b/packages/mask/src/plugins/Tips/hooks/useTipsWalletsList.ts index eb60dcb8551e..606b72c064d5 100644 --- a/packages/mask/src/plugins/Tips/hooks/useTipsWalletsList.ts +++ b/packages/mask/src/plugins/Tips/hooks/useTipsWalletsList.ts @@ -18,7 +18,7 @@ export function useTipsWalletsList( if (kv && kv.proofs.length > 0 && proofs.length > 0) { const kvCache = kv.proofs.find((x) => x.identity === identity) if (!kvCache) return EMPTY_LIST - const result = proofs.reduce((res, x) => { + const result = proofs.map((x) => { x.isDefault = 0 x.isPublic = 1 const matched = kvCache?.content[PluginId.Tips]?.find((proof) => isSameAddress(x.identity, proof.identity)) @@ -26,9 +26,8 @@ export function useTipsWalletsList( x.isDefault = matched.isDefault x.isPublic = matched.isPublic } - res.push(x) - return res - }, []) + return x + }) const idx = result.findIndex((i) => i.isDefault) if (idx !== -1) { result.unshift(result.splice(idx, 1)[0]) diff --git a/packages/mask/src/plugins/Trader/apis/balancer/index.ts b/packages/mask/src/plugins/Trader/apis/balancer/index.ts index 2777f93fe34d..011191a2ab43 100644 --- a/packages/mask/src/plugins/Trader/apis/balancer/index.ts +++ b/packages/mask/src/plugins/Trader/apis/balancer/index.ts @@ -1,7 +1,6 @@ import { SOR } from '@balancer-labs/sor' import { JsonRpcProvider } from '@ethersproject/providers' import { ChainId, getRPCConstants, getTraderConstants, isSameAddress } from '@masknet/web3-shared-evm' -import { ZERO } from '@masknet/web3-shared-base' import BigNumber from 'bignumber.js' import { first, memoize } from 'lodash-unified' import { currentChainIdSettings } from '../../../Wallet/settings' @@ -73,7 +72,7 @@ export async function getSwaps( // compose routes // learn more: https://github.com/balancer-labs/balancer-frontend/blob/develop/src/components/swap/Routing.vue - const totalSwapAmount = swaps.reduce((total, rawHops) => total.plus(first(rawHops)?.swapAmount || '0'), ZERO) + const totalSwapAmount = BigNumber.sum(...swaps.map((rawHops) => first(rawHops)?.swapAmount || '0')) const pools = sor.onChainCache.pools const routes = swaps.map((rawHops) => { diff --git a/packages/mask/src/plugins/Trader/apis/trending/index.ts b/packages/mask/src/plugins/Trader/apis/trending/index.ts index 70a8db6d683c..a8fa0cd65138 100644 --- a/packages/mask/src/plugins/Trader/apis/trending/index.ts +++ b/packages/mask/src/plugins/Trader/apis/trending/index.ts @@ -224,11 +224,15 @@ async function getCoinTrending(id: string, currency: Currency, dataProvider: Dat ) ?? '' ], }, - market: Object.entries(info.market_data).reduce((accumulated, [key, value]) => { - if (value && typeof value === 'object') accumulated[key] = value[currency.id] ?? 0 - else accumulated[key] = value - return accumulated - }, {}), + market: (() => { + const entries = Object.entries(info.market_data).map(([key, value]) => { + if (value && typeof value === 'object') { + return [key, value[currency.id] ?? 0] + } + return [key, value] + }) + return Object.fromEntries(entries) + })(), tickers: info.tickers.slice(0, 30).map((x) => ({ logo_url: x.market.logo, trade_url: x.trade_url, diff --git a/packages/mask/src/plugins/Trader/apis/uniswap/index.ts b/packages/mask/src/plugins/Trader/apis/uniswap/index.ts index ea5dcce00b7a..dfc6a152cf90 100644 --- a/packages/mask/src/plugins/Trader/apis/uniswap/index.ts +++ b/packages/mask/src/plugins/Trader/apis/uniswap/index.ts @@ -310,7 +310,7 @@ export async function getBulkPairData(pairList: string[]) { const oneDayResult = await fetchPairsHistoricalBulk(pairList, oneDayBlock) - const oneDayData = oneDayResult.reduce>((obj, cur) => ({ ...obj, [cur.id]: cur }), {}) + const oneDayData = Object.fromEntries(oneDayResult.map((pair): [string, Data] => [pair.id, pair])) const pairsData = await Promise.all( current?.map(async (pair) => { @@ -340,9 +340,11 @@ export async function getBulkPairData(pairList: string[]) { }), ) - return pairsData.reduce>( - (obj, cur) => ({ ...obj, [cur.id]: cur }), - {}, + return Object.fromEntries( + pairsData.map((pair): [string, Data & { oneDayVolumeUSD: number; oneDayVolumeUntracked: number }] => [ + pair.id, + pair, + ]), ) } diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useAllCommonPairs.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useAllCommonPairs.ts index 204f8e3f5829..04220f26f898 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useAllCommonPairs.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useAllCommonPairs.ts @@ -71,22 +71,19 @@ export function useAllCommonPairs(tradeProvider: TradeProvider, currencyA?: Curr const { value: allPairs, ...asyncResult } = usePairs(tradeProvider, allCurrencyCombinations) // only pass along valid pairs, non-duplicated pairs - const allPairs_ = useMemo( - () => - Object.values( - allPairs - // filter out invalid pairs - .filter((result): result is [PairState.EXISTS, Pair] => - Boolean(result[0] === PairState.EXISTS && result[1]), - ) - // filter out duplicated pairs - .reduce>((memo, [, current]) => { - memo[current.liquidityToken.address] = memo[current.liquidityToken.address] ?? current - return memo - }, {}), - ), - [allPairs], - ) + const allPairs_ = useMemo(() => { + const filtered = new Map() + for (const [state, pair] of allPairs as [PairState.EXISTS, Pair][]) { + // filter out invalid pairs + if (state !== PairState.EXISTS) continue + if (!pair) continue + // filter out duplicated pairs + const { address } = pair.liquidityToken + if (filtered.has(address)) continue + filtered.set(pair.liquidityToken.address, pair) + } + return [...filtered.values()] + }, [allPairs]) return { ...asyncResult, diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useTradeBreakdown.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useTradeBreakdown.ts index 783b57907efb..0c492b38499d 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useTradeBreakdown.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useTradeBreakdown.ts @@ -14,6 +14,7 @@ function computeRealizedLPFeePercent(trade: Trade): Percent { // for each hop in our trade, take away the x*y=k price impact from 0.3% fees // e.g. for 3 tokens/2 hops: 1 - ((1 - .03) * (1-.03)) const percent = ONE_HUNDRED_PERCENT.subtract( + // eslint-disable-next-line unicorn/no-array-reduce trade.route.pairs.reduce( (currentFee: Percent): Percent => currentFee.multiply(INPUT_FRACTION_AFTER_FEE), ONE_HUNDRED_PERCENT, @@ -22,6 +23,7 @@ function computeRealizedLPFeePercent(trade: Trade): Percent { return new Percent(percent.numerator, percent.denominator) } else { const percent = ONE_HUNDRED_PERCENT.subtract( + // eslint-disable-next-line unicorn/no-array-reduce trade.route.pools.reduce( (currentFee: Percent, pool): Percent => currentFee.multiply(ONE_HUNDRED_PERCENT.subtract(new Fraction(pool.fee, 1_000_000))), diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useV3BestTrade.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useV3BestTrade.ts index 8b7b50d09439..d4b44d4dc3af 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useV3BestTrade.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useV3BestTrade.ts @@ -78,6 +78,7 @@ export function useV3BestTradeExactIn( } const { bestRoute, amountOut } = quotesResults .filter((x) => x.succeed) + // eslint-disable-next-line unicorn/no-array-reduce .reduce( ( currentBest: { bestRoute: Route | null; amountOut: string | null }, @@ -198,6 +199,7 @@ export function useV3BestTradeExactOut( } const { bestRoute, amountIn } = quotesResults .filter((x) => x.succeed) + // eslint-disable-next-line unicorn/no-array-reduce .reduce( ( currentBest: { bestRoute: Route | null; amountIn: string | null }, diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useV3SwapPools.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useV3SwapPools.ts index 1c4350cd890a..4e8d6591b71a 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useV3SwapPools.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useV3SwapPools.ts @@ -21,13 +21,11 @@ export function useV3SwapPools( const allCurrencyCombinationsWithAllFees: [Token, Token, FeeAmount][] = useMemo( () => - allCurrencyCombinations.reduce<[Token, Token, FeeAmount][]>((list, [tokenA, tokenB]) => { - return list.concat([ - [tokenA, tokenB, FeeAmount.LOW], - [tokenA, tokenB, FeeAmount.MEDIUM], - [tokenA, tokenB, FeeAmount.HIGH], - ]) - }, []), + allCurrencyCombinations.flatMap<[Token, Token, FeeAmount]>(([tokenA, tokenB]) => [ + [tokenA, tokenB, FeeAmount.LOW], + [tokenA, tokenB, FeeAmount.MEDIUM], + [tokenA, tokenB, FeeAmount.HIGH], + ]), [allCurrencyCombinations], ) const pools = usePools(TradeProvider.UNISWAP_V3, allCurrencyCombinationsWithAllFees) diff --git a/packages/mask/src/utils/getTextUILength.ts b/packages/mask/src/utils/getTextUILength.ts index 21263dbf1884..a4a255501ae3 100644 --- a/packages/mask/src/utils/getTextUILength.ts +++ b/packages/mask/src/utils/getTextUILength.ts @@ -1,6 +1,9 @@ +import { sum } from 'lodash-unified' + /* eslint @dimensiondev/unicode/specific-set: ["error", { "only": "code" }] */ + export function getTextUILength(text: string) { - return Array.from(text).reduce((acc, char) => acc + getCharUILength(char), 0) + return sum(Array.from(text).map(getCharUILength)) } export function sliceTextByUILength(text: string, len: number) { diff --git a/packages/plugin-infra/src/hooks/useAllPluginsWeb3State.ts b/packages/plugin-infra/src/hooks/useAllPluginsWeb3State.ts index bd86889f7cef..812584b89b59 100644 --- a/packages/plugin-infra/src/hooks/useAllPluginsWeb3State.ts +++ b/packages/plugin-infra/src/hooks/useAllPluginsWeb3State.ts @@ -2,16 +2,13 @@ import { useActivatedPluginsDashboard } from '../manager/dashboard' import { useActivatedPluginsSNSAdaptor } from '../manager/sns-adaptor' import type { Web3Plugin } from '../web3-types' +type Capabilities = Web3Plugin.ObjectCapabilities.Capabilities + export function useAllPluginsWeb3State() { const pluginsSNSAdaptor = useActivatedPluginsSNSAdaptor('any') const pluginsDashboard = useActivatedPluginsDashboard() - - return [...pluginsSNSAdaptor, ...pluginsDashboard].reduce< - Record - >((accumulator, current) => { - if (current.Web3State) { - accumulator[current.ID] = current.Web3State - } - return accumulator - }, {}) + const entries = [...pluginsSNSAdaptor, ...pluginsDashboard] + .filter((definition) => definition.Web3State) + .map((definition): [string, Capabilities] => [definition.ID, definition.Web3State!]) + return Object.fromEntries(entries) as Record } diff --git a/packages/plugin-infra/src/manager/sns-adaptor.ts b/packages/plugin-infra/src/manager/sns-adaptor.ts index 202666e5acc7..9635844ca9b7 100644 --- a/packages/plugin-infra/src/manager/sns-adaptor.ts +++ b/packages/plugin-infra/src/manager/sns-adaptor.ts @@ -57,15 +57,12 @@ export function useActivatedPluginSNSAdaptor(pluginID: string, minimalModeEquals export function useActivatedPluginSNSAdaptor_Web3Supported(chainId: number, pluginID: string) { const plugins = useActivatedPluginsSNSAdaptor('any') - return plugins.reduce>((acc, cur) => { - if (!cur.enableRequirement.web3) { - acc[cur.ID] = true - return acc - } - const supportedChainIds = cur.enableRequirement.web3?.[pluginID as NetworkPluginID]?.supportedChainIds - acc[cur.ID] = supportedChainIds?.includes(chainId) ?? false - return acc - }, {}) + const entries = plugins.map((plugin): [string, boolean] => { + if (!plugin.enableRequirement.web3) return [plugin.ID, true] + const supportedChainIds = plugin.enableRequirement.web3?.[pluginID as NetworkPluginID]?.supportedChainIds + return [plugin.ID, supportedChainIds?.includes(chainId) ?? false] + }) + return Object.fromEntries(entries) as Record } export function startPluginSNSAdaptor( diff --git a/packages/shared-base/src/color/avatar.ts b/packages/shared-base/src/color/avatar.ts index 2b32d55b143a..43b5b6d33ea5 100644 --- a/packages/shared-base/src/color/avatar.ts +++ b/packages/shared-base/src/color/avatar.ts @@ -1,4 +1,5 @@ export function generateContactAvatarColor(input: string, theme: 'light' | 'dark') { + // eslint-disable-next-line unicorn/no-array-reduce const hash = [...input].reduce((prev, current) => { // eslint-disable-next-line no-bitwise const next = current.charCodeAt(0) + (prev << 5) - prev diff --git a/packages/theme/src/Theme/Provider.tsx b/packages/theme/src/Theme/Provider.tsx index 226dedd32885..2260bdc1a4d2 100644 --- a/packages/theme/src/Theme/Provider.tsx +++ b/packages/theme/src/Theme/Provider.tsx @@ -3,6 +3,7 @@ import { MaskIconPalette, MaskIconPaletteContext } from '@masknet/icons' import { CustomSnackbarProvider } from '../Components' function compose(init: React.ReactNode, ...f: ((children: React.ReactNode) => JSX.Element)[]) { + // eslint-disable-next-line unicorn/no-array-reduce return f.reduceRight((prev, curr) => curr(prev), <>{init}) } diff --git a/packages/typed-message/base/transformer/Flatten.ts b/packages/typed-message/base/transformer/Flatten.ts index ba5f32c2a154..8ce7cc6b2789 100644 --- a/packages/typed-message/base/transformer/Flatten.ts +++ b/packages/typed-message/base/transformer/Flatten.ts @@ -20,6 +20,7 @@ export function FlattenTypedMessage(message: TypedMessage, context: Transformati .map((x) => FlattenTypedMessage(x, context)) .flatMap((x) => (isTypedMessageTuple(x) ? (x.meta ? x : x.items) : x)) .filter((x) => !isTypedMessageEmpty(x)) + // eslint-disable-next-line unicorn/no-array-reduce .reduce((result, current) => { const lastItem = result.at(-1) if (!lastItem || lastItem.meta || current.meta) return result.concat(current) diff --git a/packages/typed-message/base/transformer/composed.ts b/packages/typed-message/base/transformer/composed.ts index 1fbea4d71607..8f0c0cc73382 100644 --- a/packages/typed-message/base/transformer/composed.ts +++ b/packages/typed-message/base/transformer/composed.ts @@ -18,6 +18,7 @@ export function composeTransformers(): ComposedTransformers { const transformers = new Set() function composed(message: TypedMessage, context: TransformationContext) { + // eslint-disable-next-line unicorn/no-array-reduce return [...transformers].sort((a, b) => b[1] - a[1]).reduce((p, [c]) => c(p, context), message) } diff --git a/packages/web3-providers/src/debank/format.ts b/packages/web3-providers/src/debank/format.ts index a834097eefa7..22493411061b 100644 --- a/packages/web3-providers/src/debank/format.ts +++ b/packages/web3-providers/src/debank/format.ts @@ -6,40 +6,34 @@ import DeBank from '@masknet/web3-constants/evm/debank.json' type Asset = Web3Plugin.Asset -export function formatAssets(data: WalletTokenRecord[]): Asset[] { +export function formatAssets(records: WalletTokenRecord[]): Asset[] { const supportedChains = Object.values(DeBank.CHAIN_ID).filter(Boolean) - - const result: Asset[] = data.reduce((list: Asset[], y) => { - if (!y.is_verified) return list - const chainIdFromChain = getChainIdFromName(y.chain) - if (!chainIdFromChain) return list - const address = supportedChains.includes(y.id) ? createNativeToken(chainIdFromChain).address : y.id - - return [ - ...list, - { + return records.flatMap((asset) => { + if (!asset.is_verified) return [] + const chainIdFromChain = getChainIdFromName(asset.chain) + if (!chainIdFromChain) return [] + const address = supportedChains.includes(asset.id) ? createNativeToken(chainIdFromChain).address : asset.id + return { + id: address, + chainId: chainIdFromChain, + token: { id: address, + address, chainId: chainIdFromChain, - token: { - id: address, - address, - chainId: chainIdFromChain, - type: TokenType.Fungible, - decimals: y.decimals, - name: y.name, - symbol: y.symbol, - logoURI: y.logo_url, - }, - balance: rightShift(y.amount, y.decimals).toFixed(), - price: { - [CurrencyType.USD]: toFixed(y.price), - }, - value: { - [CurrencyType.USD]: multipliedBy(y.price ?? 0, y.amount).toFixed(), - }, - logoURI: y.logo_url, + type: TokenType.Fungible, + decimals: asset.decimals, + name: asset.name, + symbol: asset.symbol, + logoURI: asset.logo_url, + }, + balance: rightShift(asset.amount, asset.decimals).toFixed(), + price: { + [CurrencyType.USD]: toFixed(asset.price), + }, + value: { + [CurrencyType.USD]: multipliedBy(asset.price ?? 0, asset.amount).toFixed(), }, - ] - }, []) - return result + logoURI: asset.logo_url, + } + }) } diff --git a/packages/web3-shared/evm/utils/token.ts b/packages/web3-shared/evm/utils/token.ts index 863bce1ad8fc..d7cf9024203c 100644 --- a/packages/web3-shared/evm/utils/token.ts +++ b/packages/web3-shared/evm/utils/token.ts @@ -123,22 +123,22 @@ export function createERC20Tokens( symbol: string | ((chainId: ChainId) => string), decimals: number | ((chainId: ChainId) => number), ) { - type Table = ChainIdRecord - const base = {} as Table - return getEnumAsArray(ChainId).reduce((accumulator, { value: chainId }) => { + const entries = getEnumAsArray(ChainId).map(({ value: chainId }): [ChainId, ERC20TokenDetailed] => { const evaluator: (f: T | ((chainId: ChainId) => T)) => T = (f) => typeof f === 'function' ? (f as any)(chainId) : f - - accumulator[chainId] = { - type: EthereumTokenType.ERC20, + return [ chainId, - address: getTokenConstants(chainId)[key] ?? '', - name: evaluator(name), - symbol: evaluator(symbol), - decimals: evaluator(decimals), - } - return accumulator - }, base) + { + type: EthereumTokenType.ERC20, + chainId, + address: getTokenConstants(chainId)[key] ?? '', + name: evaluator(name), + symbol: evaluator(symbol), + decimals: evaluator(decimals), + }, + ] + }) + return Object.fromEntries(entries) as ChainIdRecord } export function addGasMargin(value: BigNumber.Value, scale = 3000) { From 2d48cea4506c2b18e57a33e456b42da69b852342 Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 17 May 2022 16:56:52 +0800 Subject: [PATCH 05/29] chore: improve object-assign using (#6272) --- .../mask/background/services/identity/profile/update.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/packages/mask/background/services/identity/profile/update.ts b/packages/mask/background/services/identity/profile/update.ts index 2a6189457780..b3dc946d59a0 100644 --- a/packages/mask/background/services/identity/profile/update.ts +++ b/packages/mask/background/services/identity/profile/update.ts @@ -60,13 +60,10 @@ export async function resolveUnknownLegacyIdentity(identifier: ProfileIdentifier const records = await queryProfilesDB({ identifiers: [unknown, self] }) if (!records.length) return - const final = { - ...Object.assign({}, ...records), - identifier, - } + const finalRecord: ProfileRecord = Object.assign({}, ...records, { identifier }) try { await consistentPersonaDBWriteAccess(async (t) => { - await createProfileDB(final, t) + await createProfileDB(finalRecord, t) await deleteProfileDB(unknown, t).catch(() => {}) await deleteProfileDB(self, t).catch(() => {}) }) From b16f895e3a470d36dae8dbc2f613be0a510bf1ab Mon Sep 17 00:00:00 2001 From: septs Date: Tue, 17 May 2022 20:47:57 +0800 Subject: [PATCH 06/29] chore: no-useless-{catch,rename} (#6274) * chore: no-useless-{catch,rename} * chore: no-useless-{catch,rename} --- packages/.eslintrc.json | 2 ++ .../src/components/Restore/RestoreFromCloud.tsx | 2 +- packages/encryption/src/encryption/Encryption.ts | 2 +- packages/mask/shared-ui/locales/en-US.json | 1 - packages/mask/shared-ui/locales/qya-AA.json | 1 - packages/mask/src/plugins/Avatar/Services/index.ts | 10 +++------- .../plugins/FindTruman/SNSAdaptor/CompletionCard.tsx | 2 -- .../src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx | 2 -- .../src/plugins/PoolTogether/UI/PoolTogetherView.tsx | 2 +- 9 files changed, 8 insertions(+), 16 deletions(-) diff --git a/packages/.eslintrc.json b/packages/.eslintrc.json index df53e8dd126b..a06fafd88039 100644 --- a/packages/.eslintrc.json +++ b/packages/.eslintrc.json @@ -40,6 +40,8 @@ "no-unmodified-loop-condition": "error", "no-unneeded-ternary": "error", "no-useless-concat": "error", + "no-useless-rename": "error", + "no-useless-catch": "error", "no-loss-of-precision": "error", "prefer-regex-literals": "error", "react/jsx-boolean-value": "error", diff --git a/packages/dashboard/src/components/Restore/RestoreFromCloud.tsx b/packages/dashboard/src/components/Restore/RestoreFromCloud.tsx index f810606257b4..808d9f29f6cd 100644 --- a/packages/dashboard/src/components/Restore/RestoreFromCloud.tsx +++ b/packages/dashboard/src/components/Restore/RestoreFromCloud.tsx @@ -159,7 +159,7 @@ export const RestoreFromCloud = memo(() => { )} - {(_, { backupJson: backupBasicInfoJson, handleRestore: handleRestore }) => ( + {(_, { backupJson: backupBasicInfoJson, handleRestore }) => ( <> diff --git a/packages/encryption/src/encryption/Encryption.ts b/packages/encryption/src/encryption/Encryption.ts index 1e297d84c30d..f05b9132f092 100644 --- a/packages/encryption/src/encryption/Encryption.ts +++ b/packages/encryption/src/encryption/Encryption.ts @@ -94,7 +94,7 @@ async function e2e_v37( target: EncryptTargetE2E, io: EncryptIO, ): Promise<[PayloadWellFormed.EndToEndEncryption, EncryptResult['e2e']]> { - const { authorPublic, postIV: postIV, postKeyEncoded } = context + const { authorPublic, postIV, postKeyEncoded } = context const authorPublicKey = await authorPublic if (!authorPublicKey.some) throw new EncryptError(EncryptErrorReasons.PublicKeyNotFound) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index c97bf81ed945..7331c936d720 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -65,7 +65,6 @@ "compose_encrypt_visible_to_private": "Private", "compose_encrypt_visible_to_private_sub": "Just Me", "compose_shared_friends": "1 friend", - "compose_shared_friends_other": "{{count}} friends", "compose_encrypt_visible_to_share": "Share with", "compose_encrypt_visible_to_share_sub": "Just Selected Contacts", "compose_encrypt_share_dialog_empty": "No encrypted friends, you can try searching.", diff --git a/packages/mask/shared-ui/locales/qya-AA.json b/packages/mask/shared-ui/locales/qya-AA.json index dd17275ea04a..6f6aaf8e7002 100644 --- a/packages/mask/shared-ui/locales/qya-AA.json +++ b/packages/mask/shared-ui/locales/qya-AA.json @@ -65,7 +65,6 @@ "compose_encrypt_visible_to_private": "crwdns16598:0crwdne16598:0", "compose_encrypt_visible_to_private_sub": "crwdns16600:0crwdne16600:0", "compose_shared_friends": "crwdns16602:0crwdne16602:0", - "compose_shared_friends_other": "crwdns16604:0{{count}}crwdne16604:0", "compose_encrypt_visible_to_share": "crwdns16606:0crwdne16606:0", "compose_encrypt_visible_to_share_sub": "crwdns16608:0crwdne16608:0", "compose_encrypt_share_dialog_empty": "crwdns16610:0crwdne16610:0", diff --git a/packages/mask/src/plugins/Avatar/Services/index.ts b/packages/mask/src/plugins/Avatar/Services/index.ts index 2f25a164f0f5..c59479fc0d79 100644 --- a/packages/mask/src/plugins/Avatar/Services/index.ts +++ b/packages/mask/src/plugins/Avatar/Services/index.ts @@ -42,13 +42,9 @@ export async function saveNFTAvatar( networkPluginId?: NetworkPluginID, chainId?: number, ) { - try { - const avatar = await saveNFTAvatarToRSS(address, nft, '', snsKey) - await setUserAddress(nft.userId, address, network, networkPluginId, chainId) - return avatar - } catch (error) { - throw error - } + const avatar = await saveNFTAvatarToRSS(address, nft, '', snsKey) + await setUserAddress(nft.userId, address, network, networkPluginId, chainId) + return avatar } export async function getAddress(userId: string, network: string, networkPluginId?: NetworkPluginID, chainId?: number) { diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/CompletionCard.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/CompletionCard.tsx index 7105ba2da5a0..67789590560a 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/CompletionCard.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/CompletionCard.tsx @@ -63,8 +63,6 @@ export default function CompletionCard(props: CompletionCardProps) { answer: e.answer || '', })), ) - } catch (error) { - throw error } finally { setSubmitting(false) } diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx index 46a36cc3aa8e..6429f1f4c46d 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/OptionsCard.tsx @@ -196,8 +196,6 @@ export default function OptionsCard(props: OptionsViewProps) { setSubmitting(true) try { await onSubmit(choice) - } catch (error) { - throw error } finally { setSubmitting(false) } diff --git a/packages/mask/src/plugins/PoolTogether/UI/PoolTogetherView.tsx b/packages/mask/src/plugins/PoolTogether/UI/PoolTogetherView.tsx index 192076f9db5d..bcc6a144941b 100644 --- a/packages/mask/src/plugins/PoolTogether/UI/PoolTogetherView.tsx +++ b/packages/mask/src/plugins/PoolTogether/UI/PoolTogetherView.tsx @@ -73,7 +73,7 @@ export function PoolTogetherView(props: PoolTogetherViewProps) { const [pools, setPools] = useState([]) // #region pools - const { value: _pools = [], error: error, loading: loading, retry: retry } = usePools() + const { value: _pools = [], error, loading, retry } = usePools() _pools.sort((x, y) => Number(y.prize.weeklyTotalValueUsd) - Number(x.prize.weeklyTotalValueUsd)) // #endregion From 0d2c239ba700ed43eac24ea00aff4c9cbb51c28d Mon Sep 17 00:00:00 2001 From: lelenei <72531217+lelenei@users.noreply.github.com> Date: Wed, 18 May 2022 01:20:32 +0800 Subject: [PATCH 07/29] feat: timeline plugin rendering optimization (#6134) * feat: timeline plugin rendering optimization * feat: enable plugin * refactor: reply review * fix: plugin configuration * refactor: reply review * fix: css style * fix: fileserve plugin * fix: css style * fix: parse plugin when on wallet * fix: css style * fix: css style * fix: css style * fix: ito icon * fix: ito icon * refactor: remove console.log * fix: file service name * fix: rename switch network * fix: css style * fix: cyberconnect style * fix: ito style * fix: ito style * fix: css style * fix: css style * fix: css style * fix: css style * fix: ito title * fix: fungible token detailed hook * fix: css style * chore: update red packet * fix: ito connect wallet * fix: css style * fix: css style * fix: maskbox css style * fix: persona verified * fix: remove unused code * fix: show connect wallet * fix: css style * fix: open connect wallet * fix: css style * fix: enabled plugin * fix: remove unused code * fix: css style * fix: build error * fix: build error * fix: reply review * fix: css style * fix: css style * fix: css style * fix: css style * fix: chainnet name * fix: revert code * fix: css style * fix: check wallet chainnet * fix: remove settings * fix: wallet connect * fix: css style * fix: css style * fix: show token * fix: dependency * fix: typo * chore: remove locale key * fix: token * fix: connect wallet * fix: opensea * fix: remove debug * fix: opensea * fix: revert code * fix: remove unused code * fix: reply review * fix: css style * fix: css style * fix: reply review * fix: reply review * fix: reply review * fix: reply review * fix: reply review * fix: typo * fix: reply review * fix: reply review * fix: revert code Co-authored-by: zhouhanseng --- packages/icons/general/Plugin.tsx | 12 + packages/icons/general/Provider.tsx | 14 ++ packages/icons/general/index.ts | 2 + packages/icons/plugins/CyberConnect.tsx | 2 +- packages/icons/plugins/MarketsClaim.tsx | 3 +- packages/icons/plugins/connect.tsx | 31 +++ packages/icons/plugins/index.ts | 2 + packages/icons/plugins/shared.tsx | 20 ++ packages/mask/shared-ui/locales/en-US.json | 30 +-- packages/mask/shared-ui/locales/ja-JP.json | 3 - packages/mask/shared-ui/locales/ko-KR.json | 6 - packages/mask/shared-ui/locales/qya-AA.json | 5 - packages/mask/shared-ui/locales/zh-CN.json | 5 - packages/mask/shared-ui/locales/zh-TW.json | 4 - .../DisabledPluginSuggestion.tsx | 67 +++++- .../InjectedComponents/SearchResultBox.tsx | 2 +- .../ArtBlocks/SNSAdaptor/ActionBar.tsx | 7 +- .../ArtBlocks/SNSAdaptor/Collectible.tsx | 12 +- .../plugins/ArtBlocks/SNSAdaptor/index.tsx | 7 +- .../Collectible/SNSAdaptor/ActionBar.tsx | 106 +++++---- .../Collectible/SNSAdaptor/Collectible.tsx | 34 ++- .../SNSAdaptor/MakeOfferDialog.tsx | 16 +- .../Collectible/SNSAdaptor/PostInspector.tsx | 19 +- .../Collectible/hooks/useCollectibleState.ts | 1 - .../CryptoartAI/SNSAdaptor/ActionBar.tsx | 13 +- .../CryptoartAI/SNSAdaptor/Collectible.tsx | 9 +- .../CryptoartAI/SNSAdaptor/PostInspector.tsx | 21 +- .../CryptoartAI/hooks/useCollectibleState.ts | 1 + .../mask/src/plugins/EVM/hooks/useAsset.ts | 15 +- .../FindTruman/SNSAdaptor/FindTruman.tsx | 154 +++++++------ .../plugins/FindTruman/SNSAdaptor/index.tsx | 9 + packages/mask/src/plugins/FindTruman/base.ts | 20 -- .../plugins/Furucombo/SNSAdaptor/index.tsx | 7 +- .../plugins/Furucombo/UI/FurucomboView.tsx | 87 +++++--- .../src/plugins/Furucombo/UI/PoolView.tsx | 21 +- .../Gitcoin/SNSAdaptor/PreviewCard.tsx | 139 ++++++++---- .../src/plugins/Gitcoin/SNSAdaptor/index.tsx | 7 +- packages/mask/src/plugins/Gitcoin/base.ts | 9 - .../mask/src/plugins/ITO/SNSAdaptor/ITO.tsx | 211 ++++++++++-------- .../plugins/ITO/SNSAdaptor/PostInspector.tsx | 12 +- .../ITO/SNSAdaptor/hooks/useAvailability.ts | 11 +- .../hooks/useAvailabilityComputed.ts | 7 +- .../ITO/SNSAdaptor/hooks/useIfQualified.ts | 5 +- .../mask/src/plugins/ITO/SNSAdaptor/index.tsx | 12 +- packages/mask/src/plugins/ITO/base.ts | 19 -- .../SNSAdaptor/components/ArticlesTab.tsx | 5 +- .../components/DrawResultDialog.tsx | 11 +- .../SNSAdaptor/components/PreviewCard.tsx | 141 +++++++----- .../src/plugins/MaskBox/SNSAdaptor/index.tsx | 9 +- .../mask/src/plugins/MaskPluginWrapper.tsx | 137 +++++++----- .../plugins/PoolTogether/SNSAdaptor/index.tsx | 19 +- .../PoolTogether/UI/PoolTogetherView.tsx | 66 +++--- .../src/plugins/PoolTogether/UI/PoolView.tsx | 18 +- .../mask/src/plugins/PoolTogether/base.tsx | 2 +- .../SNSAdaptor/RedPacket/OperationFooter.tsx | 67 ++++-- .../RedPacket/SNSAdaptor/RedPacket/index.tsx | 41 ++-- .../SNSAdaptor/RedPacket/useStyles.ts | 2 +- .../RedPacket/SNSAdaptor/RedPacketNft.tsx | 41 ++-- .../SNSAdaptor/RedPacketNftInPost.tsx | 7 +- .../SNSAdaptor/RedpacketNftConfirmDialog.tsx | 2 +- .../SNSAdaptor/hooks/useAvailability.ts | 9 +- .../SNSAdaptor/hooks/useRedPacketContract.ts | 14 +- .../plugins/RedPacket/SNSAdaptor/index.tsx | 9 + packages/mask/src/plugins/RedPacket/base.ts | 22 +- .../Snapshot/SNSAdaptor/LoadingFailCard.tsx | 25 ++- .../plugins/Snapshot/SNSAdaptor/Snapshot.tsx | 111 +++++---- .../Snapshot/SNSAdaptor/SnapshotCard.tsx | 2 + .../Snapshot/SNSAdaptor/VotingCard.tsx | 53 +++-- .../src/plugins/Snapshot/SNSAdaptor/index.tsx | 9 + .../src/plugins/Trader/SNSAdaptor/index.tsx | 9 + .../src/plugins/dHEDGE/SNSAdaptor/index.tsx | 9 + .../mask/src/plugins/dHEDGE/UI/PoolView.tsx | 15 +- .../src/plugins/dHEDGE/UI/PoolViewDeck.tsx | 11 +- .../src/utils/hooks/useSettingSwitcher.tsx | 16 +- .../src/web3/UI/EthereumChainBoundary.tsx | 174 ++++++++++----- .../UI/EthereumWalletConnectedBoundary.tsx | 97 ++++---- packages/plugin-infra/src/types.ts | 8 + packages/plugins/CrossChainBridge/src/base.ts | 2 +- .../CyberConnect/src/SNSAdaptor/FollowTab.tsx | 14 +- .../CyberConnect/src/SNSAdaptor/Profile.tsx | 4 +- .../CyberConnect/src/SNSAdaptor/index.tsx | 9 + packages/plugins/CyberConnect/src/base.tsx | 13 -- .../FileService/src/SNSAdaptor/index.tsx | 9 + packages/theme/src/CSSVariables/constants.ts | 8 + packages/web3-providers/src/opensea/index.ts | 2 +- .../evm/contracts/useBalanceChecker.ts | 2 +- .../evm/contracts/useMulticallContract.ts | 2 +- .../evm/contracts/useWrappedEtherContract.ts | 2 +- .../evm/hooks/useFungibleTokenDetailed.ts | 4 +- 89 files changed, 1465 insertions(+), 966 deletions(-) create mode 100644 packages/icons/general/Plugin.tsx create mode 100644 packages/icons/general/Provider.tsx create mode 100644 packages/icons/plugins/connect.tsx create mode 100644 packages/icons/plugins/shared.tsx diff --git a/packages/icons/general/Plugin.tsx b/packages/icons/general/Plugin.tsx new file mode 100644 index 000000000000..98c5b861bc0e --- /dev/null +++ b/packages/icons/general/Plugin.tsx @@ -0,0 +1,12 @@ +import { createIcon } from '../utils' + +export const PluginIcon = createIcon( + 'PluginIcon', + + + , + '0 0 19 18', +) diff --git a/packages/icons/general/Provider.tsx b/packages/icons/general/Provider.tsx new file mode 100644 index 000000000000..3524f1decfe2 --- /dev/null +++ b/packages/icons/general/Provider.tsx @@ -0,0 +1,14 @@ +import { createIcon } from '../utils' + +export const ProviderByIcon = createIcon( + 'ProviderByIcon', + + + , + '0 0 17 16', +) diff --git a/packages/icons/general/index.ts b/packages/icons/general/index.ts index d30eda75b638..24df574b958f 100644 --- a/packages/icons/general/index.ts +++ b/packages/icons/general/index.ts @@ -116,6 +116,8 @@ export * from './MindsRound' export * from './CircleLoading' export * from './AddUser' export * from './PopupRestore' +export * from './Provider' +export * from './Plugin' export * from './Direct' export * from './SearchEmpty' export * from './WarningTriangle' diff --git a/packages/icons/plugins/CyberConnect.tsx b/packages/icons/plugins/CyberConnect.tsx index d2dada033e36..6aafbe3351fe 100644 --- a/packages/icons/plugins/CyberConnect.tsx +++ b/packages/icons/plugins/CyberConnect.tsx @@ -15,7 +15,7 @@ export const CyberConnectIcon: typeof SvgIcon = createPaletteAwareIcon( fillRule="evenodd" clipRule="evenodd" d="M20.8194 14.1385L29.6618 23.2918C29.768 23.4001 29.8525 23.529 29.9105 23.6712C29.9685 23.8133 29.9989 23.9659 30 24.1202C30.001 24.2745 29.9727 24.4275 29.9165 24.5705C29.8604 24.7135 29.7777 24.8436 29.673 24.9535L29.0242 25.6228C28.8418 25.8206 28.601 25.9497 28.3397 25.9897C28.1672 26.0136 27.9917 25.9958 27.8269 25.9377C27.6621 25.8797 27.5126 25.7829 27.3899 25.6551L16.5922 14.4778C16.4045 14.2838 16.2556 14.0534 16.1539 13.7997C16.0523 13.5461 16 13.2742 16 12.9996C16 12.725 16.0523 12.4531 16.1539 12.1994C16.2556 11.9458 16.4045 11.7153 16.5922 11.5213L27.3899 0.344062C27.4951 0.234991 27.62 0.148459 27.7576 0.0894208C27.8951 0.0303825 28.0425 0 28.1914 0C28.3403 0 28.4877 0.0303825 28.6253 0.0894208C28.7628 0.148459 28.8878 0.234991 28.993 0.344062L29.6618 1.04798C29.7672 1.15687 29.8508 1.2862 29.9078 1.42856C29.9648 1.57093 29.9942 1.72354 29.9942 1.87767C29.9942 2.03179 29.9648 2.1844 29.9078 2.32677C29.8508 2.46914 29.7672 2.59848 29.6618 2.70738L20.8194 11.8629C20.5294 12.1655 20.3667 12.5745 20.3667 13.0007C20.3667 13.427 20.5294 13.8359 20.8194 14.1385ZM9.18017 11.8726L0.341223 2.71698C0.233969 2.60853 0.148579 2.47911 0.0900066 2.33622C0.0314345 2.19333 0.000846678 2.03982 1.73677e-05 1.88459C-0.000811943 1.72936 0.0281358 1.5755 0.0851776 1.43194C0.142219 1.28839 0.226225 1.158 0.332313 1.04833L0.978629 0.376712C1.16268 0.180155 1.40373 0.0512975 1.66506 0.00975571C1.83749 -0.0133774 2.01275 0.00476068 2.17734 0.0627778C2.34194 0.120795 2.49149 0.217133 2.61448 0.344398L13.408 11.5218C13.5957 11.7158 13.7445 11.9463 13.8461 12.1999C13.9477 12.4536 14 12.7255 14 13.0001C14 13.2747 13.9477 13.5466 13.8461 13.8002C13.7445 14.0539 13.5957 14.2843 13.408 14.4783L2.61448 25.6557C2.50913 25.7649 2.38405 25.8515 2.24639 25.9105C2.10872 25.9696 1.96117 26 1.81215 26C1.66314 26 1.51558 25.9696 1.37792 25.9105C1.24025 25.8515 1.11517 25.7649 1.00983 25.6557L0.341223 24.9634C0.235829 24.8543 0.152224 24.7247 0.0951825 24.5822C0.038141 24.4396 0.00878436 24.2868 0.00878436 24.1325C0.00878436 23.9782 0.038141 23.8254 0.0951825 23.6828C0.152224 23.5402 0.235829 23.4107 0.341223 23.3016L9.18017 14.1483C9.47006 13.8457 9.63272 13.4367 9.63272 13.0104C9.63272 12.5842 9.47006 12.1752 9.18017 11.8726Z" - fill="white" + fill="black" />, undefined, '-8 -10 44 44', diff --git a/packages/icons/plugins/MarketsClaim.tsx b/packages/icons/plugins/MarketsClaim.tsx index f94a2736ade3..1e82b939ee43 100644 --- a/packages/icons/plugins/MarketsClaim.tsx +++ b/packages/icons/plugins/MarketsClaim.tsx @@ -1,7 +1,6 @@ import { createIcon } from '../utils' -import type { SvgIcon } from '@mui/material' -export const MarketsClaimIcon: typeof SvgIcon = createIcon( +export const MarketsClaimIcon = createIcon( 'Markets', <> diff --git a/packages/icons/plugins/connect.tsx b/packages/icons/plugins/connect.tsx new file mode 100644 index 000000000000..291662e4980f --- /dev/null +++ b/packages/icons/plugins/connect.tsx @@ -0,0 +1,31 @@ +import { createIcon } from '@masknet/icons' +export const PluginWalletConnectIcon = createIcon( + 'PluginWalletConnectIcon', + + + + + + , + '0 0 17 16', +) diff --git a/packages/icons/plugins/index.ts b/packages/icons/plugins/index.ts index 996563638215..042cbb8b08a1 100644 --- a/packages/icons/plugins/index.ts +++ b/packages/icons/plugins/index.ts @@ -24,3 +24,5 @@ export * from './DHEDGEIcon' export * from './PoolTogetherIcon' export * from './SecurityChecker' export * from './ArtBlocks' +export * from './connect' +export * from './shared' diff --git a/packages/icons/plugins/shared.tsx b/packages/icons/plugins/shared.tsx new file mode 100644 index 000000000000..fa880e3d3136 --- /dev/null +++ b/packages/icons/plugins/shared.tsx @@ -0,0 +1,20 @@ +import { createIcon } from '@masknet/icons' +export const SharedIcon = createIcon( + 'SharedIcon', + + + + + + + + + + , + '0 0 19 18', +) diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index 7331c936d720..5fee71e29b8f 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -132,10 +132,6 @@ "user_guide_tip_2": "Connect and switch your wallet.", "user_guide_tip_3": "Browse the Web 3 footprints of your Twitter friends, enjoy the freedom of Web 3.", "user_guide_tip_4": "Click here to have a quick start.", - "create_persona": "Create persona", - "connect_persona": "Connect persona", - "please_create_persona": "Please create persona", - "please_connect_persona": "Please connect persona", "mask_network": "Mask Network", "import": "Import", "no_search_result": "No result", @@ -196,7 +192,6 @@ "wallet_search_no_result": "No results.", "wallet_confirm_with_password": "Confirm with password", "wallet_airdrop_nft_unclaimed_title": "NFT Airdrop Unclaimed:", - "plugin_not_enabled": "{{plugin}} (Not Enabled)", "plugin_external_unknown_plugin": "New unknown Mask plugins found. Do you want to load them?", "plugin_external_loader_search_holder": "Search for an external plugin", "plugin_external_loader_search_button": "Search for plugin", @@ -297,7 +292,7 @@ "plugin_wallet_nft_approving_all": "Unlocking {{symbol}}...", "plugin_wallet_approve_all_nft": "Unlock {{symbol}}", "plugin_wallet_approve_all_nft_successfully": "Unlock {{symbol}} successfully", - "plugin_wallet_connect_a_wallet": "Connect a Wallet", + "plugin_wallet_connect_a_wallet": "Connect wallet", "plugin_wallet_confirm_risk_warning": "Confirm Risk Warning", "plugin_wallet_no_gas_fee": "No Gas Fee", "plugin_wallet_update_gas_fee": "Updating Gas Fee…", @@ -331,11 +326,13 @@ "plugin_wallet_on_connect_in_firefox": "Connect", "plugin_wallet_return_mobile_wallet_options": "Return to Mobile Wallet Options", "plugin_wallet_view_qr_code": "View QR Code", - "plugin_wallet_switch_network": "Switch to {{network}} Network", - "plugin_wallet_switch_network_under_going": "Switching to {{network}} Network…", + "plugin_wallet_switch_network": "Switch to {{network}}", + "plugin_wallet_switch_network_under_going": "Switching to {{network}}", + "plugin_wallet_connect_tips": "You’re connected to a walletConnect\nwallet. Please switch network in that wallet, \nor switch to another wallet.", + "plugin_wallet_connect_network": "Connect {{network}} wallet", + "plugin_wallet_connect_network_under_going": "Connect {{network}} wallet", "plugin_wallet_not_available_on": "Not available on {{network}} Network.", - "plugin_wallet_connect_wallet": "Connect Wallet", - "plugin_wallet_connect_wallet_tip": "Please connect to a wallet.", + "plugin_wallet_connect_wallet": "Connect wallet", "plugin_wallet_name_placeholder": "Enter 1-12 characters", "plugin_wallet_fail_to_sign": "Failed to sign password.", "plugin_wallet_cancel_sign": "Signature canceled.", @@ -607,14 +604,14 @@ "plugin_ito_list_table_got": "Balance", "plugin_ito_list_button_send": "Send", "plugin_ito_withdraw": "Withdraw", - "plugin_ito_qualification_loading": "Verify qualification…", - "plugin_ito_qualification_failed": "The wallet address isn't on the list.", "plugin_ito_withdrawn": "Withdrawn", "plugin_ito_your_swapped_amount": "You swapped {{amount}} {{symbol}}", "plugin_ito_your_claimed_amount": "You claimed {{amount}} {{symbol}}", "plugin_ito_your_refund_amount": "return {{amount}} {{symbol}}.", "plugin_ito_unlock_in_advance": "Unlock in Advance", "plugin_ito_swapped_status": "{{remain}} / {{total}} {{token}} Swapped", + "plugin_ito_qualification_loading": "Verify qualification…", + "plugin_ito_qualification_failed": "The wallet address isn't on the list.", "plugin_ito_congratulations": "Congratulations!", "plugin_ito_out_of_stock_hit": "Better luck next time", "plugin_ito_claim_success_share": "I just attended @{{user}}'s #ITO with @{{account}} to swap ${{symbol}}. Install mask.io and start your own Initial Twitter Offering! \n {{link}}", @@ -816,7 +813,6 @@ "plugin_dhedge_buy_token": "GET {{symbol}}", "plugin_dhedge_enter_an_amount": "Enter an amount", "plugin_dhedge_insufficient_balance": "Insufficient {{symbol}} balance", - "plugin_dhedge_loading": "Loading...", "plugin_dhedge_pool_not_found": "Invalid pool address.", "plugin_dhedge_smt_wrong": "Something went wrong!", "plugin_pooltogether_tab_pools": "Pools", @@ -915,7 +911,8 @@ "plugin_furucombo_rewards": "Rewards", "plugin_furucombo_invest": "Invest", "plugin_furucombo_pool_not_found": "Invalid pool address.", - "plugin_furucombo_smt_wrong": "Something went wrong!", + "plugin_furucombo_load_failed": "Load failed", + "plugin_furucombo_reload": "Reload", "plugin_furucombo_head_pools": "Pools", "plugin_furucombo_head_action": "Action", "plugin_pets_dialog_title": "Non-Fungible Friends", @@ -1123,5 +1120,8 @@ "plugin_transak_name": "Fiat On-Ramp", "plugin_transak_description": "Fiat On-Ramp Aggregator on Twitter. Buy crypto in 60+ countries with Transak support.", "plugin_valuables_name": "Valuables", - "plugin_valuables_description": "Buy & sell tweets autographed by their original creators." + "plugin_valuables_description": "Buy & sell tweets autographed by their original creators.", + "plugin_default_title": "Default", + "plugin_provider_by": "Provided by", + "plugin_enables": "Enable plugins" } diff --git a/packages/mask/shared-ui/locales/ja-JP.json b/packages/mask/shared-ui/locales/ja-JP.json index e66fd9af6238..22e985b3dab6 100644 --- a/packages/mask/shared-ui/locales/ja-JP.json +++ b/packages/mask/shared-ui/locales/ja-JP.json @@ -246,8 +246,6 @@ "plugin_ito_list_table_got": "バランス", "plugin_ito_list_button_send": "送る", "plugin_ito_withdraw": "取り消す", - "plugin_ito_qualification_loading": "資格認証中…", - "plugin_ito_qualification_failed": "ウォレットアドレスがリストにありません。", "plugin_ito_withdrawn": "取り消しました", "plugin_ito_your_swapped_amount": "あなたは {{amount}} {{symbol}} を獲得しました", "plugin_ito_your_claimed_amount": "あなたは {{amount}} {{symbol}} を請求しました", @@ -384,7 +382,6 @@ "plugin_dhedge_buy_token": "{{symbol}} を得る", "plugin_dhedge_enter_an_amount": "量を入力", "plugin_dhedge_insufficient_balance": "{{symbol}} の残高が不十分です", - "plugin_dhedge_loading": "ロード中…", "plugin_dhedge_pool_not_found": "無効なプールアドレスです!", "plugin_dhedge_smt_wrong": "何か間違いが発生しました!" } diff --git a/packages/mask/shared-ui/locales/ko-KR.json b/packages/mask/shared-ui/locales/ko-KR.json index 39b48625493f..309f9b81d1b8 100644 --- a/packages/mask/shared-ui/locales/ko-KR.json +++ b/packages/mask/shared-ui/locales/ko-KR.json @@ -80,8 +80,6 @@ "user_guide_tip_connected": "해당 계정에 성공적으로 연결되었습니다.", "user_guide_tip_1": "클릭하여 메인 기능을 확인하세요.", "user_guide_tip_2": "여기서 월렛을 연결하세요. 여기서 네트워크나 월렛을 바꿀 수 있습니다.", - "create_persona": "페르소나 만들기", - "connect_persona": "페로소나 연결하기", "mask_network": "Mask Network", "import": "불러오기", "no_search_result": "결과 없음", @@ -219,7 +217,6 @@ "plugin_wallet_switch_network_under_going": "{{network}} 네트워크로 바꾸는 중...", "plugin_wallet_not_available_on": "{{network}} 에서는 사용할 수 없습니다.", "plugin_wallet_connect_wallet": "월렛 연결", - "plugin_wallet_connect_wallet_tip": "월렛을 연결하세요.", "plugin_wallet_name_placeholder": "1-12 자 입력하세요", "plugin_wallet_fail_to_sign": "비밀번호 사인 실패합니다.", "plugin_wallet_cancel_sign": "서명이 실패되었습니다.", @@ -437,8 +434,6 @@ "plugin_ito_list_table_got": "잔액", "plugin_ito_list_button_send": "발송", "plugin_ito_withdraw": "철회", - "plugin_ito_qualification_loading": "자격 인증...", - "plugin_ito_qualification_failed": "이 월렛 주소는 리스트에 없습니다.", "plugin_ito_withdrawn": "철회됨", "plugin_ito_your_swapped_amount": "{{amount}} {{symbol}} 스왑되었습니다.", "plugin_ito_your_claimed_amount": "{{amount}} {{symbol}} 수령되었습니다.", @@ -597,7 +592,6 @@ "plugin_dhedge_buy_token": "{{symbol}} 획득", "plugin_dhedge_enter_an_amount": "수액 입력", "plugin_dhedge_insufficient_balance": "{{symbol}} 잔액 부족", - "plugin_dhedge_loading": "로딩 중", "plugin_dhedge_pool_not_found": "무효한 풀 주소!", "plugin_dhedge_smt_wrong": "오류가 발생합니다.", "plugin_pooltogether_tab_pools": "풀(Pools)", diff --git a/packages/mask/shared-ui/locales/qya-AA.json b/packages/mask/shared-ui/locales/qya-AA.json index 6f6aaf8e7002..fa190e5951ae 100644 --- a/packages/mask/shared-ui/locales/qya-AA.json +++ b/packages/mask/shared-ui/locales/qya-AA.json @@ -196,7 +196,6 @@ "wallet_search_no_result": "crwdns8139:0crwdne8139:0", "wallet_confirm_with_password": "crwdns10141:0crwdne10141:0", "wallet_airdrop_nft_unclaimed_title": "crwdns8093:0crwdne8093:0", - "plugin_not_enabled": "crwdns10811:0{{plugin}}crwdne10811:0", "plugin_external_unknown_plugin": "crwdns10143:0crwdne10143:0", "plugin_external_loader_search_holder": "crwdns10145:0crwdne10145:0", "plugin_external_loader_search_button": "crwdns10147:0crwdne10147:0", @@ -335,7 +334,6 @@ "plugin_wallet_switch_network_under_going": "crwdns4689:0{{network}}crwdne4689:0", "plugin_wallet_not_available_on": "crwdns7913:0{{network}}crwdne7913:0", "plugin_wallet_connect_wallet": "crwdns4693:0crwdne4693:0", - "plugin_wallet_connect_wallet_tip": "crwdns4695:0crwdne4695:0", "plugin_wallet_name_placeholder": "crwdns4705:0crwdne4705:0", "plugin_wallet_fail_to_sign": "crwdns4707:0crwdne4707:0", "plugin_wallet_cancel_sign": "crwdns4709:0crwdne4709:0", @@ -607,8 +605,6 @@ "plugin_ito_list_table_got": "crwdns5131:0crwdne5131:0", "plugin_ito_list_button_send": "crwdns5133:0crwdne5133:0", "plugin_ito_withdraw": "crwdns5135:0crwdne5135:0", - "plugin_ito_qualification_loading": "crwdns5137:0crwdne5137:0", - "plugin_ito_qualification_failed": "crwdns5139:0crwdne5139:0", "plugin_ito_withdrawn": "crwdns5141:0crwdne5141:0", "plugin_ito_your_swapped_amount": "crwdns5143:0{{amount}}crwdnd5143:0{{symbol}}crwdne5143:0", "plugin_ito_your_claimed_amount": "crwdns5145:0{{amount}}crwdnd5145:0{{symbol}}crwdne5145:0", @@ -816,7 +812,6 @@ "plugin_dhedge_buy_token": "crwdns5423:0{{symbol}}crwdne5423:0", "plugin_dhedge_enter_an_amount": "crwdns5425:0crwdne5425:0", "plugin_dhedge_insufficient_balance": "crwdns5427:0{{symbol}}crwdne5427:0", - "plugin_dhedge_loading": "crwdns5429:0crwdne5429:0", "plugin_dhedge_pool_not_found": "crwdns5431:0crwdne5431:0", "plugin_dhedge_smt_wrong": "crwdns5433:0crwdne5433:0", "plugin_pooltogether_tab_pools": "crwdns5435:0crwdne5435:0", diff --git a/packages/mask/shared-ui/locales/zh-CN.json b/packages/mask/shared-ui/locales/zh-CN.json index 2e983f733945..8794b0935615 100644 --- a/packages/mask/shared-ui/locales/zh-CN.json +++ b/packages/mask/shared-ui/locales/zh-CN.json @@ -168,7 +168,6 @@ "wallet_search_no_result": "没有任何结果。", "wallet_confirm_with_password": "使用密码确认", "wallet_airdrop_nft_unclaimed_title": "未认领的NFT Airdrop:", - "plugin_not_enabled": "{{plugin}} (未启用)", "plugin_external_unknown_plugin": "发现新的未知Mask插件,您想要加载它们吗?", "plugin_external_loader_search_holder": "查找外部插件", "plugin_external_loader_search_button": "查找插件", @@ -299,7 +298,6 @@ "plugin_wallet_switch_network_under_going": "正在切换到 {{network}} 网络…", "plugin_wallet_not_available_on": "在 {{network}} 网络上不可用。", "plugin_wallet_connect_wallet": "连接钱包", - "plugin_wallet_connect_wallet_tip": "请连接钱包", "plugin_wallet_name_placeholder": "输入1-12 个字符", "plugin_wallet_fail_to_sign": "无法签名密码。", "plugin_wallet_cancel_sign": "签名已取消。", @@ -552,8 +550,6 @@ "plugin_ito_list_table_got": "余额", "plugin_ito_list_button_send": "发送", "plugin_ito_withdraw": "提取", - "plugin_ito_qualification_loading": "资格认证中…", - "plugin_ito_qualification_failed": "钱包地址不在列表内。", "plugin_ito_withdrawn": "已提取", "plugin_ito_your_swapped_amount": "你兑换了 {{amount}} {{symbol}}", "plugin_ito_your_claimed_amount": "你认领了 {{amount}} {{symbol}}", @@ -740,7 +736,6 @@ "plugin_dhedge_buy_token": "获得 {{symbol}}", "plugin_dhedge_enter_an_amount": "输入数额", "plugin_dhedge_insufficient_balance": "{{symbol}} 余额不足", - "plugin_dhedge_loading": "加载中...", "plugin_dhedge_pool_not_found": "无效的池子地址。", "plugin_dhedge_smt_wrong": "发生了一些错误!", "plugin_pooltogether_tab_pools": "池子", diff --git a/packages/mask/shared-ui/locales/zh-TW.json b/packages/mask/shared-ui/locales/zh-TW.json index fa3f8544fd20..5377ab10b6a7 100644 --- a/packages/mask/shared-ui/locales/zh-TW.json +++ b/packages/mask/shared-ui/locales/zh-TW.json @@ -203,7 +203,6 @@ "plugin_wallet_switch_network_under_going": "切換至 {{network}} 中", "plugin_wallet_not_available_on": "{{network}} 不可用", "plugin_wallet_connect_wallet": "連接錢包", - "plugin_wallet_connect_wallet_tip": "請連接你的錢包", "plugin_red_packet_display_name": "插件:紅包", "plugin_red_packet_claimed": "已認領", "plugin_red_packet_erc20_tab_title": "代幣", @@ -382,8 +381,6 @@ "plugin_ito_list_table_got": "餘額", "plugin_ito_list_button_send": "送出", "plugin_ito_withdraw": "提取", - "plugin_ito_qualification_loading": "驗證資格…", - "plugin_ito_qualification_failed": "錢包地址不在清單上。", "plugin_ito_withdrawn": "已提取", "plugin_ito_your_swapped_amount": "你交換了 {{amount}} {{symbol}}", "plugin_ito_your_claimed_amount": "你認領了 {{amount}} {{symbol}}", @@ -536,7 +533,6 @@ "plugin_dhedge_buy_token": "取得 {{symbol}}", "plugin_dhedge_enter_an_amount": "輸入一個金額", "plugin_dhedge_insufficient_balance": "{{symbol}} 餘額不足", - "plugin_dhedge_loading": "讀取中…", "plugin_dhedge_pool_not_found": "錯誤的池地址!", "plugin_dhedge_smt_wrong": "出錯了!" } diff --git a/packages/mask/src/components/InjectedComponents/DisabledPluginSuggestion.tsx b/packages/mask/src/components/InjectedComponents/DisabledPluginSuggestion.tsx index a018a42e6b65..68a9c33a14b4 100644 --- a/packages/mask/src/components/InjectedComponents/DisabledPluginSuggestion.tsx +++ b/packages/mask/src/components/InjectedComponents/DisabledPluginSuggestion.tsx @@ -4,12 +4,15 @@ import { registeredPlugins, usePostInfoDetails, Plugin, - usePluginI18NField, + PluginI18NFieldRender, } from '@masknet/plugin-infra/content-script' import { extractTextFromTypedMessage } from '@masknet/typed-message' -import { Switch } from '@mui/material' import Services from '../../extension/service' import MaskPostExtraInfoWrapper from '../../plugins/MaskPluginWrapper' +import { HTMLProps, useCallback } from 'react' +import { Button, Skeleton, useTheme } from '@mui/material' +import { PluginIcon } from '@masknet/icons' +import { makeStyles } from '@masknet/theme' import { useI18N } from '../../utils' function useDisabledPlugins() { @@ -52,25 +55,71 @@ export function PossiblePluginSuggestionPostInspector() { return } export function PossiblePluginSuggestionUI(props: { plugins: Plugin.DeferredDefinition[] }) { - const { t } = useI18N() - const t2 = usePluginI18NField() const { plugins } = props + const { t } = useI18N() + const theme = useTheme() + const onClick = useCallback((x: Plugin.DeferredDefinition) => { + Services.Settings.setPluginMinimalModeEnabled(x.ID, false) + }, []) + const _plugins = useActivatedPluginsSNSAdaptor('any') if (!plugins.length) return null + return ( <> {plugins.map((x) => ( } + publisher={ + x.publisher ? : undefined + } + publisherLink={x.publisher?.link} + wrapperProps={_plugins.find((y) => y.ID === x.ID)?.wrapperProps} action={ - Services.Settings.setPluginMinimalModeEnabled(x.ID, false)} - /> + } + content={} /> ))} ) } + +const useRectangleStyles = makeStyles()(() => ({ + rectangle: { + background: 'rgba(255, 255, 255, 0.5)', + }, +})) +interface RectangleProps extends HTMLProps {} + +export function Rectangle(props: RectangleProps) { + const { classes } = useRectangleStyles() + return ( +
+ + + +
+ ) +} diff --git a/packages/mask/src/components/InjectedComponents/SearchResultBox.tsx b/packages/mask/src/components/InjectedComponents/SearchResultBox.tsx index c917be2bf891..5d09af03a749 100644 --- a/packages/mask/src/components/InjectedComponents/SearchResultBox.tsx +++ b/packages/mask/src/components/InjectedComponents/SearchResultBox.tsx @@ -1,7 +1,7 @@ import { createInjectHooksRenderer, useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' const PluginRenderer = createInjectHooksRenderer( - useActivatedPluginsSNSAdaptor.visibility.useNotMinimalMode, + useActivatedPluginsSNSAdaptor.visibility.useAnyMode, (x) => x.SearchResultBox, ) diff --git a/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/ActionBar.tsx b/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/ActionBar.tsx index c0a8bd58ef41..7a227a1f65d2 100644 --- a/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/ActionBar.tsx +++ b/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/ActionBar.tsx @@ -7,17 +7,12 @@ import type { Project } from '../types' const useStyles = makeStyles()((theme) => { return { - root: { - marginLeft: theme.spacing(-0.5), - marginRight: theme.spacing(-0.5), - marginTop: theme.spacing(1), - }, + root: {}, content: { padding: theme.spacing(0), }, button: { flex: 1, - margin: `${theme.spacing(0)} ${theme.spacing(0.5)}`, }, } }) diff --git a/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/Collectible.tsx b/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/Collectible.tsx index 581c3601a1bb..b1fe65404fac 100644 --- a/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/Collectible.tsx +++ b/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/Collectible.tsx @@ -1,14 +1,15 @@ import { useI18N } from '../../../utils' -import { Tab, Tabs, Paper, Card, CardHeader, CardContent, Link, Typography, Avatar } from '@mui/material' +import { Tab, Tabs, Paper, Card, CardHeader, CardContent, Link, Typography, Avatar, Box } from '@mui/material' import { useState } from 'react' import { makeStyles } from '@masknet/theme' import { CollectionView } from './CollectionView' import { DetailsView } from './DetailsView' -import { formatWeiToEther, useChainId } from '@masknet/web3-shared-evm' +import { ChainId, formatWeiToEther, useChainId } from '@masknet/web3-shared-evm' import { useFetchProject } from '../hooks/useProject' import { ActionBar } from './ActionBar' import { resolveProjectLinkOnArtBlocks, resolveUserLinkOnArtBlocks } from '../pipes' import { ArtBlocksLogoUrl } from '../constants' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const useStyles = makeStyles()((theme) => { return { @@ -53,6 +54,7 @@ const useStyles = makeStyles()((theme) => { interface CollectibleProps { projectId: string + chainId?: ChainId } export function Collectible(props: CollectibleProps) { @@ -129,7 +131,11 @@ export function Collectible(props: CollectibleProps) { {pages[tabIndex]} - + + + + + ) } diff --git a/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/index.tsx b/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/index.tsx index d86872021181..a55e7c7bea67 100644 --- a/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/ArtBlocks/SNSAdaptor/index.tsx @@ -7,7 +7,6 @@ import { base } from '../base' import { extractTextFromTypedMessage } from '@masknet/typed-message' import { Collectible } from './Collectible' import type { ChainId } from '@masknet/web3-shared-evm' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' import { ArtBlocksIcon } from '@masknet/icons' const sns: Plugin.SNSAdaptor.Definition = { @@ -39,11 +38,7 @@ const sns: Plugin.SNSAdaptor.Definition = { function Renderer(props: React.PropsWithChildren<{ chainId: ChainId; projectId: string }>) { usePluginWrapper(true) - return ( - - - - ) + return } export default sns diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx index a51866d7b24a..d17cb3043318 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/ActionBar.tsx @@ -7,16 +7,21 @@ import { useControlledDialog } from '../../../utils/hooks/useControlledDialog' import { MakeOfferDialog } from './MakeOfferDialog' import { PostListingDialog } from './PostListingDialog' import { CheckoutDialog } from './CheckoutDialog' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' +import { useChainId } from '@masknet/web3-shared-evm' const useStyles = makeStyles()((theme) => { return { root: { - marginLeft: theme.spacing(-0.5), - marginRight: theme.spacing(-0.5), + width: 'calc(100% - 24px)', }, button: { flex: 1, - margin: `0 ${theme.spacing(0.5)}`, + backgroundColor: theme.palette.maskColor.dark, + '&:hover': { + backgroundColor: theme.palette.maskColor.dark, + }, + color: 'white', }, } }) @@ -28,6 +33,7 @@ export function ActionBar(props: ActionBarProps) { const { classes } = useStyles() const { asset, assetOrder } = CollectibleState.useContainer() const assets = asset.value + const chainId = useChainId() const { open: openCheckoutDialog, @@ -43,53 +49,55 @@ export function ActionBar(props: ActionBarProps) { if (!asset.value) return null return ( - - {!asset.value.isOwner && asset.value.is_auction && assetOrder.value ? ( - - {t('plugin_collectible_buy_now')} - - ) : null} - {!asset.value.isOwner && asset.value.is_auction ? ( - - {t('plugin_collectible_place_bid')} - - ) : null} + + + {!asset.value.isOwner && asset.value.is_auction && assetOrder.value ? ( + + {t('plugin_collectible_buy_now')} + + ) : null} + {!asset.value.isOwner && asset.value.is_auction ? ( + + {t('plugin_collectible_place_bid')} + + ) : null} - {!asset.value.isOwner && !asset.value.is_auction ? ( - - {t('plugin_collectible_make_offer')} - - ) : null} - {assets?.isOwner ? ( - - {t('plugin_collectible_sell')} - - ) : null} - - - + {!asset.value.isOwner && !asset.value.is_auction ? ( + + {t('plugin_collectible_make_offer')} + + ) : null} + {assets?.isOwner ? ( + + {t('plugin_collectible_sell')} + + ) : null} + + + + ) } diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/Collectible.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/Collectible.tsx index cb4d5b9afac0..eadb415fdc7a 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/Collectible.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/Collectible.tsx @@ -1,6 +1,6 @@ import { ReactElement, useCallback } from 'react' import { Box, Button, CardActions, CardContent, CardHeader, Link, Paper, Tab, Tabs, Typography } from '@mui/material' -import { makeStyles } from '@masknet/theme' +import { makeStyles, MaskColorVar } from '@masknet/theme' import { Trans } from 'react-i18next' import { findIndex } from 'lodash-unified' import formatDateTime from 'date-fns/format' @@ -33,7 +33,6 @@ const useStyles = makeStyles()((theme) => { width: '100%', border: `solid 1px ${theme.palette.divider}`, padding: 0, - marginBottom: 12, }, content: { width: '100%', @@ -141,24 +140,35 @@ export function Collectible(props: CollectibleProps) { setProvider, getEnumAsArray(NonFungibleAssetProvider).map((x) => x.value), resolveCollectibleProviderName, + true, ) // #endregion if (!asset.value || !token) return ( - + Failed to load your collectible on {resolveCollectibleProviderName(provider)}. - {CollectibleProviderSwitcher} - + + {CollectibleProviderSwitcher} + + + + ) const tabs = [ diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx index cd7c207be1eb..c87ac106b624 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/MakeOfferDialog.tsx @@ -13,14 +13,19 @@ import { import { makeStyles } from '@masknet/theme' import { first, uniqBy } from 'lodash-unified' import BigNumber from 'bignumber.js' -import { FungibleTokenDetailed, EthereumTokenType, useAccount, useFungibleTokenWatched } from '@masknet/web3-shared-evm' +import { + FungibleTokenDetailed, + EthereumTokenType, + useAccount, + useFungibleTokenWatched, + useChainId, +} from '@masknet/web3-shared-evm' import formatDateTime from 'date-fns/format' import { useI18N } from '../../../utils' import { InjectedDialog } from '@masknet/shared' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' import { UnreviewedWarning } from './UnreviewedWarning' import ActionButton, { ActionButtonPromise } from '../../../extension/options-page/DashboardComponents/ActionButton' -import { EthereumWalletConnectedBoundary } from '../../../web3/UI/EthereumWalletConnectedBoundary' import { DateTimePanel } from '../../../web3/UI/DateTimePanel' import { PluginCollectibleRPC } from '../messages' import { toAsset } from '../helpers' @@ -32,6 +37,7 @@ import { rightShift, ZERO } from '@masknet/web3-shared-base' import type { Coin } from '../../Trader/types' import { SelectTokenListPanel } from './SelectTokenListPanel' import { isWyvernSchemaName } from '../utils' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const useStyles = makeStyles()((theme) => { return { @@ -86,7 +92,7 @@ export function MakeOfferDialog(props: MakeOfferDialogProps) { const { classes } = useStyles() const account = useAccount() - + const chainId = useChainId() const [expirationDateTime, setExpirationDateTime] = useState(new Date()) const [unreviewedChecked, setUnreviewedChecked] = useState(false) const [ToS_Checked, setToS_Checked] = useState(false) @@ -236,7 +242,7 @@ export function MakeOfferDialog(props: MakeOfferDialogProps) { )} - + ) : null} - + diff --git a/packages/mask/src/plugins/Collectible/SNSAdaptor/PostInspector.tsx b/packages/mask/src/plugins/Collectible/SNSAdaptor/PostInspector.tsx index bad1491c86bd..0e66ed8a0044 100644 --- a/packages/mask/src/plugins/Collectible/SNSAdaptor/PostInspector.tsx +++ b/packages/mask/src/plugins/Collectible/SNSAdaptor/PostInspector.tsx @@ -1,7 +1,6 @@ import type { CollectibleJSON_Payload } from '../types' import { Collectible } from './Collectible' import { CollectibleState } from '../hooks/useCollectibleState' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' export interface PostInspectorProps { payload: CollectibleJSON_Payload @@ -11,15 +10,13 @@ export function PostInspector(props: PostInspectorProps) { const token = props.payload return ( - - - - - + + + ) } diff --git a/packages/mask/src/plugins/Collectible/hooks/useCollectibleState.ts b/packages/mask/src/plugins/Collectible/hooks/useCollectibleState.ts index 976962f468f9..f3f79d40d886 100644 --- a/packages/mask/src/plugins/Collectible/hooks/useCollectibleState.ts +++ b/packages/mask/src/plugins/Collectible/hooks/useCollectibleState.ts @@ -15,7 +15,6 @@ function useCollectibleState(token?: CollectibleToken) { const [provider, setProvider] = useState(NonFungibleAssetProvider.OPENSEA) const asset = useAsset(token?.contractAddress ?? '', token?.tokenId ?? '', provider) - // #region asset order from sdk const assetOrder = useAssetOrder(provider, token) // #endregion diff --git a/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/ActionBar.tsx b/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/ActionBar.tsx index f6dce0601a4b..ef9a9d9fccfd 100644 --- a/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/ActionBar.tsx +++ b/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/ActionBar.tsx @@ -10,13 +10,14 @@ import { CheckoutDialog } from './CheckoutDialog' const useStyles = makeStyles()((theme) => { return { - root: { - marginLeft: theme.spacing(-0.5), - marginRight: theme.spacing(-0.5), - }, + root: {}, button: { flex: 1, - margin: `0 ${theme.spacing(0.5)}`, + backgroundColor: theme.palette.maskColor.dark, + color: 'white', + '&:hover': { + backgroundColor: theme.palette.maskColor.dark, + }, }, } }) @@ -43,7 +44,7 @@ export function ActionBar(props: ActionBarProps) { if (!asset.value) return null return ( - + {!assetSource?.isSoldOut && !assetSource?.is_owner && assetSource?.is24Auction && diff --git a/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/Collectible.tsx b/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/Collectible.tsx index 12718c75e0e1..40165f6de8cf 100644 --- a/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/Collectible.tsx +++ b/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/Collectible.tsx @@ -16,6 +16,7 @@ import { resolveAssetLinkOnCryptoartAI, resolveWebLinkOnCryptoartAI } from '../p import { Markdown } from '../../Snapshot/SNSAdaptor/Markdown' import { ActionBar } from './ActionBar' import { useChainId } from '@masknet/web3-shared-evm' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const useStyles = makeStyles()((theme) => { return { @@ -77,7 +78,7 @@ export function Collectible(props: CollectibleProps) { const { t } = useI18N() const { classes } = useStyles() const chainId = useChainId() - const { asset, events, tabIndex, setTabIndex } = CollectibleState.useContainer() + const { asset, events, tabIndex, setTabIndex, chainId: expectChainId } = CollectibleState.useContainer() const assetSource = useMemo(() => { if (!asset.value || asset.error) return @@ -265,7 +266,11 @@ export function Collectible(props: CollectibleProps) { - + + + + + ) } diff --git a/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/PostInspector.tsx b/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/PostInspector.tsx index b611ed2f1710..745131e28932 100644 --- a/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/PostInspector.tsx +++ b/packages/mask/src/plugins/CryptoartAI/SNSAdaptor/PostInspector.tsx @@ -1,7 +1,6 @@ import type { PayloadType } from '../types' import { Collectible } from './Collectible' import { CollectibleState } from '../hooks/useCollectibleState' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' export interface PostInspectorProps { payload: PayloadType @@ -11,16 +10,14 @@ export function PostInspector(props: PostInspectorProps) { const token = props.payload return ( - - - - - + + + ) } diff --git a/packages/mask/src/plugins/CryptoartAI/hooks/useCollectibleState.ts b/packages/mask/src/plugins/CryptoartAI/hooks/useCollectibleState.ts index 282dd2f04f34..057f45b6c10e 100644 --- a/packages/mask/src/plugins/CryptoartAI/hooks/useCollectibleState.ts +++ b/packages/mask/src/plugins/CryptoartAI/hooks/useCollectibleState.ts @@ -20,6 +20,7 @@ function useCollectibleState(token?: Token) { setTabIndex, offers, events, + chainId: token?.chainId, } } diff --git a/packages/mask/src/plugins/EVM/hooks/useAsset.ts b/packages/mask/src/plugins/EVM/hooks/useAsset.ts index fbca7176d93e..4ee7eba31865 100644 --- a/packages/mask/src/plugins/EVM/hooks/useAsset.ts +++ b/packages/mask/src/plugins/EVM/hooks/useAsset.ts @@ -7,6 +7,7 @@ import { useChainId, useTokenConstants, resolveIPFSLinkFromURL, + ChainId, } from '@masknet/web3-shared-evm' import { EVM_RPC } from '../messages' import { resolveAvatarLinkOnCurrentProvider } from '../../Collectible/pipes' @@ -17,14 +18,24 @@ export function useAsset(address: string, tokenId: string, provider: NonFungible const { WNATIVE_ADDRESS } = useTokenConstants() return useAsyncRetry(async () => { - const asset = await EVM_RPC.getAsset({ address, tokenId, chainId, provider }) + const asset = await EVM_RPC.getAsset({ + address, + tokenId, + chainId: provider === NonFungibleAssetProvider.OPENSEA ? ChainId.Mainnet : chainId, + provider, + }) + if (!asset) return return { ...asset, image_url: resolveIPFSLinkFromURL(asset?.image_url ?? ''), isOrderWeth: isSameAddress(asset?.desktopOrder?.payment_token ?? '', WNATIVE_ADDRESS) ?? false, isCollectionWeth: asset?.collection?.payment_tokens?.some(currySameAddress(WNATIVE_ADDRESS)) ?? false, isOwner: asset?.top_ownerships.some((item) => isSameAddress(item.owner.address, account)) ?? false, - collectionLinkUrl: resolveAvatarLinkOnCurrentProvider(chainId, asset, provider), + collectionLinkUrl: resolveAvatarLinkOnCurrentProvider( + provider === NonFungibleAssetProvider.OPENSEA ? ChainId.Mainnet : chainId, + asset, + provider, + ), } }, [account, chainId, WNATIVE_ADDRESS, address, tokenId, provider]) } diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/FindTruman.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/FindTruman.tsx index 9ab793fd4f4a..fd870fe64ebf 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/FindTruman.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/FindTruman.tsx @@ -1,7 +1,7 @@ import { useContext, useState } from 'react' import { makeStyles } from '@masknet/theme' import { FindTrumanContext } from '../context' -import { Alert, Avatar, Box, Card, CardHeader, CardMedia, Chip, Skeleton, Tooltip, Typography } from '@mui/material' +import { Avatar, Box, Card, CardHeader, CardMedia, Chip, Skeleton, Tooltip, Typography } from '@mui/material' import type { CompletionQuestionAnswer, PollResult, @@ -18,6 +18,10 @@ import Footer from './Footer' import StageCard from './StageCard' import EncryptionCard from './EncryptionCard' import CompletionCard from './CompletionCard' +import { PluginWalletConnectIcon } from '@masknet/icons' +import { EthereumWalletConnectedBoundary } from '../../../web3/UI/EthereumWalletConnectedBoundary' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' +import { useChainId } from '@masknet/web3-shared-evm' const useStyles = makeStyles()((theme) => { return { @@ -137,6 +141,7 @@ export function getPostTypeTitle(t: FindTrumanI18nFunction, postType: PostType) export function FindTruman(props: FindTrumanProps) { const { classes } = useStyles() const { address, t } = useContext(FindTrumanContext) + const chainId = useChainId() const { postType, clueId, @@ -182,74 +187,87 @@ export function FindTruman(props: FindTrumanProps) { } return ( - - {postType !== PostType.Encryption ? ( - <> - { - setLoadImg(false) - }} - alt="" - component="img" - height={140} - sx={{ - visibility: loadImg ? 'hidden' : 'unset', - }} - image={storyInfo?.img} - /> - {loadImg && ( - - - - )} - - - {storyInfo.name} - - - - - {isCritical && C} - {isNoncritical && N} - - - + <> + + {postType !== PostType.Encryption ? ( + <> + { + setLoadImg(false) + }} + alt="" + component="img" + height={140} + sx={{ + visibility: loadImg ? 'hidden' : 'unset', + }} + image={storyInfo?.img} + /> + {loadImg && ( + + + + )} + + + {storyInfo.name} + + + + + {isCritical && C} + {isNoncritical && ( + N + )} + + + + - - ) - } + ) + } + /> + {renderCard()} + + ) : ( + + )} + +
+ + + + + } /> - {renderCard()} - - ) : ( - - )} - {!address && ( - - {t('plugin_find_truman_connect_wallet_tip')} - - )} -
- + + + ) } diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx index d623af5cede9..2d7f34795942 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx @@ -114,6 +114,15 @@ const sns: Plugin.SNSAdaptor.Definition = { } })(), ], + wrapperProps: { + icon: ( + + ), + backgroundGradient: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(251, 49, 32, 0.2) 100%), #FFFFFF;', + }, } export default sns diff --git a/packages/mask/src/plugins/FindTruman/base.ts b/packages/mask/src/plugins/FindTruman/base.ts index ad23830b6f09..4895ed1f8934 100644 --- a/packages/mask/src/plugins/FindTruman/base.ts +++ b/packages/mask/src/plugins/FindTruman/base.ts @@ -1,6 +1,4 @@ import type { Plugin } from '@masknet/plugin-infra' -import { NetworkPluginID } from '@masknet/plugin-infra/web3' -import { ChainId } from '@masknet/web3-shared-evm' import { FIND_TRUMAN_PLUGIN_ID, FIND_TRUMAN_PLUGIN_NAME } from './constants' export const base: Plugin.Shared.Definition = { @@ -14,24 +12,6 @@ export const base: Plugin.Shared.Definition = { architecture: { app: true, web: true }, networks: { type: 'opt-out', networks: {} }, target: 'stable', - web3: { - [NetworkPluginID.PLUGIN_EVM]: { - supportedChainIds: [ - ChainId.Mainnet, - ChainId.BSC, - ChainId.Matic, - ChainId.Arbitrum, - ChainId.xDai, - ChainId.Fantom, - ChainId.Avalanche, - ChainId.Aurora, - ChainId.Conflux, - ChainId.Harmony, - ], - }, - [NetworkPluginID.PLUGIN_FLOW]: { supportedChainIds: [] }, - [NetworkPluginID.PLUGIN_SOLANA]: { supportedChainIds: [] }, - }, }, contribution: { postContent: new Set([ diff --git a/packages/mask/src/plugins/Furucombo/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Furucombo/SNSAdaptor/index.tsx index 7e96c7999908..b5ba4e7383a8 100644 --- a/packages/mask/src/plugins/Furucombo/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Furucombo/SNSAdaptor/index.tsx @@ -6,7 +6,6 @@ import { extractTextFromTypedMessage } from '@masknet/typed-message' import { parseURL } from '@masknet/shared-base' import { FurucomboIcon } from '@masknet/icons' import { FurucomboView } from '../UI/FurucomboView' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const matchLink = /^https:\/\/furucombo.app\/invest\/(pool|farm)\/(137|1)\/(0x\w+)/ const isFurucomboLink = (link: string): boolean => matchLink.test(link) @@ -47,11 +46,7 @@ const sns: Plugin.SNSAdaptor.Definition = { function Renderer(props: React.PropsWithChildren<{ url: string }>) { const [, category, chainId, address] = props.url.match(matchLink) ?? [] usePluginWrapper(true) - return ( - - - - ) + return } export default sns diff --git a/packages/mask/src/plugins/Furucombo/UI/FurucomboView.tsx b/packages/mask/src/plugins/Furucombo/UI/FurucomboView.tsx index 3f3411e84c74..b7118e239bc0 100644 --- a/packages/mask/src/plugins/Furucombo/UI/FurucomboView.tsx +++ b/packages/mask/src/plugins/Furucombo/UI/FurucomboView.tsx @@ -1,8 +1,9 @@ -import { makeStyles } from '@masknet/theme' +import { makeStyles, MaskColorVar } from '@masknet/theme' import { isSameAddress, useChainId } from '@masknet/web3-shared-evm' -import { Card, CardContent, Tabs, Tab, Typography, Paper } from '@mui/material' +import { Card, CardContent, Tabs, Tab, Typography, Paper, CircularProgress, Button, Stack, Box } from '@mui/material' import { useState } from 'react' import { useI18N } from '../../../utils/i18n-next-ui' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' import { useFetchPools } from '../hooks/usePool' import type { Investable } from '../types' import { InvestmentsView } from './InvestmentsView' @@ -33,11 +34,20 @@ const useStyles = makeStyles()((theme) => ({ fontFamily: 'inherit', color: 'white', }, + reload: { + backgroundColor: theme.palette.maskColor.dark, + '&:hover': { + backgroundColor: theme.palette.maskColor.dark, + }, + color: 'white', + width: 254, + }, })) interface PoolViewProps { address: string category: string + chainId: number } export function FurucomboView(props: PoolViewProps) { @@ -46,15 +56,25 @@ export function FurucomboView(props: PoolViewProps) { const [tabIndex, setTabIndex] = useState(0) const currentChainId = useChainId() - const { value, loading, error } = useFetchPools() + const { value, loading, error, retry } = useFetchPools() - if (loading) return {t('loading')} + if (loading) + return ( + + + + ) if (error || !value) return ( - - {t('plugin_furucombo_smt_wrong')} - + + + {t('plugin_furucombo_load_failed')} + + + ) const { investables = [] } = value @@ -68,29 +88,40 @@ export function FurucomboView(props: PoolViewProps) { if (!investable) return ( - - {t('plugin_furucombo_pool_not_found')} - + <> + + {t('plugin_furucombo_pool_not_found')} + + + + + + ) return ( - - - setTabIndex(newValue)}> - , - , - - - {tabIndex === 0 ? : null} - {tabIndex === 1 ? : null} - - - + <> + + + setTabIndex(newValue)}> + , + , + + + {tabIndex === 0 ? : null} + {tabIndex === 1 ? : null} + + + + + + + ) } diff --git a/packages/mask/src/plugins/Furucombo/UI/PoolView.tsx b/packages/mask/src/plugins/Furucombo/UI/PoolView.tsx index 990d1e37cc1f..4b8ae7705579 100644 --- a/packages/mask/src/plugins/Furucombo/UI/PoolView.tsx +++ b/packages/mask/src/plugins/Furucombo/UI/PoolView.tsx @@ -1,4 +1,5 @@ import { makeStyles } from '@masknet/theme' +import { useAccount, useChainIdMatched } from '@masknet/web3-shared-evm' import { Button, Divider, Grid, Typography, Container } from '@mui/material' import { FurucomboIcon } from '../../../resources/FurucomboIcon' import { useI18N } from '../../../utils' @@ -87,6 +88,8 @@ export function PoolView(props: PoolProps) { const { classes } = useStyles() const { t } = useI18N() const { category, chainId, address, name, protocol, liquidity, apy, angels } = props.investable + const account = useAccount() + const isValidChainId = useChainIdMatched(chainId) const displayRewardIcon = (rewardToken: Token) => { if (rewardToken.symbol === 'WMATIC') return @@ -114,14 +117,16 @@ export function PoolView(props: PoolProps) { - + {isValidChainId && account ? ( + + ) : null} diff --git a/packages/mask/src/plugins/Gitcoin/SNSAdaptor/PreviewCard.tsx b/packages/mask/src/plugins/Gitcoin/SNSAdaptor/PreviewCard.tsx index 4fccc31502fa..05c1e3d799ad 100644 --- a/packages/mask/src/plugins/Gitcoin/SNSAdaptor/PreviewCard.tsx +++ b/packages/mask/src/plugins/Gitcoin/SNSAdaptor/PreviewCard.tsx @@ -1,5 +1,5 @@ import { useCallback } from 'react' -import { Box, Card, Typography, Button, Grid, Avatar } from '@mui/material' +import { Box, Card, Typography, Button, Avatar, CircularProgress, useTheme } from '@mui/material' import { makeStyles } from '@masknet/theme' import QueryBuilderIcon from '@mui/icons-material/QueryBuilder' import VerifiedUserIcon from '@mui/icons-material/VerifiedUser' @@ -9,6 +9,9 @@ import { useGrant } from '../hooks/useGrant' import { PluginGitcoinMessages } from '../messages' import urlcat from 'urlcat' import { usePostLink } from '../../../components/DataSource/usePostInfo' +import { NetworkPluginID, useChainId } from '@masknet/plugin-infra/web3' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' +import { ChainId } from '@masknet/web3-shared-evm' const useStyles = makeStyles()((theme) => ({ root: { @@ -56,7 +59,8 @@ const useStyles = makeStyles()((theme) => ({ margin: theme.spacing(0, 1), }, buttons: { - padding: theme.spacing(4, 0, 0), + width: '100%', + margin: 0, }, verified: { borderRadius: 50, @@ -68,6 +72,10 @@ const useStyles = makeStyles()((theme) => ({ '-webkit-line-clamp': '4', '-webkit-box-orient': 'vertical', }, + button: { + color: theme.palette.mode === 'dark' ? 'white' : 'black', + width: '100%', + }, })) interface PreviewCardProps { @@ -78,6 +86,9 @@ export function PreviewCard(props: PreviewCardProps) { const { t } = useI18N() const { classes } = useStyles() const { value: grant, error, loading, retry } = useGrant(props.id) + const chainId = useChainId(NetworkPluginID.PLUGIN_EVM) + const isGitCoinSupported = (chainId: ChainId) => [ChainId.Mainnet, ChainId.Matic].includes(chainId) + const theme = useTheme() // #region the donation dialog const postLink = usePostLink() @@ -93,12 +104,26 @@ export function PreviewCard(props: PreviewCardProps) { }, [grant, setDonationDialog]) // #endregion - if (loading) return {t('loading')} + if (loading) + return ( + + + + ) if (error) return ( - + {t('go_wrong')} - @@ -106,60 +131,78 @@ export function PreviewCard(props: PreviewCardProps) { if (!grant) return null return ( - -
- -
-
- - {grant.title} - - {grant.verified ? : null} -
-
- - {grant.description} - -
-
-
- - - {t('plugin_gitcoin_last_updated')} {grant.last_update_natural} - + <> + +
+
-
- - {t('plugin_gitcoin_by')} +
+ + {grant.title} - - - {grant.admin_profile.handle} + {grant.verified ? : null} +
+
+ + {grant.description}
-
- - +
+
+ + + {t('plugin_gitcoin_last_updated')} {grant.last_update_natural} + +
+
+ + {t('plugin_gitcoin_by')} + + + + {grant.admin_profile.handle} + +
+
+
+ + - - - - - - + + + + + + + + ) } diff --git a/packages/mask/src/plugins/Gitcoin/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Gitcoin/SNSAdaptor/index.tsx index 440dac162f56..956f016b34d3 100644 --- a/packages/mask/src/plugins/Gitcoin/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Gitcoin/SNSAdaptor/index.tsx @@ -10,7 +10,6 @@ import { Trans } from 'react-i18next' import { base } from '../base' import { PLUGIN_NAME, PLUGIN_META_KEY } from '../constants' import { DonateDialog } from './DonateDialog' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const isGitcoin = (x: string): boolean => /^https:\/\/gitcoin.co\/grants\/\d+/.test(x) const isGitCoinSupported = (chainId: ChainId) => [ChainId.Mainnet, ChainId.Matic].includes(chainId) @@ -55,11 +54,7 @@ function Renderer(props: React.PropsWithChildren<{ url: string }>) { const [id = ''] = props.url.match(/\d+/) ?? [] const chainId = useChainId(NetworkPluginID.PLUGIN_EVM) usePluginWrapper(true) - return ( - - - - ) + return } export default sns diff --git a/packages/mask/src/plugins/Gitcoin/base.ts b/packages/mask/src/plugins/Gitcoin/base.ts index c247ddc24c7b..65995d21a8a0 100644 --- a/packages/mask/src/plugins/Gitcoin/base.ts +++ b/packages/mask/src/plugins/Gitcoin/base.ts @@ -1,6 +1,4 @@ -import { NetworkPluginID } from '@masknet/plugin-infra/web3' import type { Plugin } from '@masknet/plugin-infra' -import { ChainId } from '@masknet/web3-shared-evm' import { PLUGIN_ID, PLUGIN_NAME, PLUGIN_DESCRIPTION } from './constants' export const base: Plugin.Shared.Definition = { @@ -12,13 +10,6 @@ export const base: Plugin.Shared.Definition = { architecture: { app: true, web: true }, networks: { type: 'opt-out', networks: {} }, target: 'stable', - web3: { - [NetworkPluginID.PLUGIN_EVM]: { - supportedChainIds: [ChainId.Mainnet, ChainId.Rinkeby, ChainId.Matic, ChainId.Mumbai], - }, - [NetworkPluginID.PLUGIN_FLOW]: { supportedChainIds: [] }, - [NetworkPluginID.PLUGIN_SOLANA]: { supportedChainIds: [] }, - }, }, contribution: { postContent: new Set([/https:\/\/gitcoin.co\/grants\/\d+/]) }, } diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/ITO.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/ITO.tsx index 0233d450294e..fb5df44e3024 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/ITO.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/ITO.tsx @@ -16,14 +16,13 @@ import { } from '@masknet/web3-shared-evm' import { isZero, ZERO, isGreaterThan } from '@masknet/web3-shared-base' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' -import { Box, Card, Grid, Link, Typography } from '@mui/material' +import { Box, Card, Link, Typography } from '@mui/material' import { makeStyles } from '@masknet/theme' import OpenInNewIcon from '@mui/icons-material/OpenInNew' import { BigNumber } from 'bignumber.js' import classNames from 'classnames' import formatDateTime from 'date-fns/format' import urlcat from 'urlcat' -import { startCase } from 'lodash-unified' import { EnhanceableSite } from '@masknet/shared-base' import { usePostLink } from '../../../components/DataSource/usePostInfo' import ActionButton from '../../../extension/options-page/DashboardComponents/ActionButton' @@ -44,6 +43,10 @@ import { StyledLinearProgress } from './StyledLinearProgress' import { SwapGuide, SwapStatus } from './SwapGuide' import { isFacebook } from '../../../social-network-adaptor/facebook.com/base' import { isTwitter } from '../../../social-network-adaptor/twitter.com/base' +import { SharedIcon, PluginWalletConnectIcon } from '@masknet/icons' +import { EthereumWalletConnectedBoundary } from '../../../web3/UI/EthereumWalletConnectedBoundary' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' +import { startCase } from 'lodash-unified' export interface IconProps { size?: number @@ -56,6 +59,7 @@ interface StyleProps { } const useStyles = makeStyles()((theme, props) => ({ root: { + width: '100%', position: 'relative', color: theme.palette.common.white, flexDirection: 'column', @@ -68,17 +72,14 @@ const useStyles = makeStyles()((theme, props) => ({ backgroundRepeat: 'no-repeat', backgroundColor: '#FF5238', borderRadius: theme.spacing(1), - paddingLeft: theme.spacing(4), - paddingRight: theme.spacing(1), - paddingTop: theme.spacing(4), - paddingBottom: theme.spacing(2), + padding: theme.spacing(2), }, header: { display: 'flex', justifyContent: 'space-between', alignItems: 'end', width: props.snsId === EnhanceableSite.Facebook ? '98%' : '100%', - maxWidth: props.snsId === EnhanceableSite.Facebook ? 'auto' : 470, + maxWidth: props.snsId === EnhanceableSite.Facebook ? 'auto' : '100%', }, title: { fontSize: props.titleLength! > 31 ? '1.3rem' : '1.6rem', @@ -151,10 +152,22 @@ const useStyles = makeStyles()((theme, props) => ({ }, }, actionFooter: { - marginTop: theme.spacing(1), + padding: 0, + display: 'flex', }, actionButton: { width: '100%', + backgroundColor: theme.palette.maskColor.dark, + color: 'white', + fontSize: 14, + paddingTop: 10, + fontWeight: 700, + margin: '0 !important', + paddingBottom: 10, + lineHeight: '20px', + '&:hover': { + backgroundColor: theme.palette.maskColor.dark, + }, }, textProviderErr: { color: '#EB5757', @@ -185,6 +198,10 @@ const useStyles = makeStyles()((theme, props) => ({ marginTop: 16, color: '#F4212E', }, + grid: { + width: '100%', + margin: 0, + }, })) // #region token item @@ -266,7 +283,6 @@ export function ITO(props: ITO_Props) { const { listOfStatus, startTime, unlockTime, isUnlocked, hasLockTime, endTime, qualificationAddress } = availabilityComputed // #endregion - const total = new BigNumber(payload_total) const total_remaining = new BigNumber(availability?.remaining ?? '0') const sold = total.minus(total_remaining) @@ -575,7 +591,7 @@ export function ITO(props: ITO_Props) { const FooterBuyerWithLockTimeButton = useMemo( () => ( - + {(() => { if (isUnlocked) return FooterBuyerLockedButton @@ -590,7 +606,7 @@ export function ITO(props: ITO_Props) { ) })()} - + ), [noRemain, listOfStatus, isUnlocked], ) @@ -599,21 +615,18 @@ export function ITO(props: ITO_Props) { () => (
{(() => { - if (hasLockTime) - return ( - - {FooterBuyerWithLockTimeButton} - - ) + if (hasLockTime) return FooterBuyerWithLockTimeButton if (canWithdraw) { return ( - - {t('plugin_ito_withdraw')} - + + + {t('plugin_ito_withdraw')} + + ) } return null @@ -624,8 +637,11 @@ export function ITO(props: ITO_Props) { ) return ( -
- + <> + {title} @@ -699,14 +715,16 @@ export function ITO(props: ITO_Props) { if (!isRegionAllow) { return ( - undefined} - variant="contained" - size="large" - className={classes.actionButton}> - {t('plugin_ito_region_ban')} - + + undefined} + variant="contained" + size="large" + className={classes.actionButton}> + {t('plugin_ito_region_ban')} + + ) } @@ -720,26 +738,16 @@ export function ITO(props: ITO_Props) { if (loadingTradeInfo || loadingAvailability) { return ( - undefined} - variant="contained" - size="large" - className={classes.actionButton}> - {t('plugin_ito_loading')} - - ) - } - - if (!account || !chainIdValid) { - return ( - - {t('plugin_wallet_connect_a_wallet')} - + + undefined} + variant="contained" + size="large" + className={classes.actionButton}> + {t('plugin_ito_loading')} + + ) } @@ -747,13 +755,15 @@ export function ITO(props: ITO_Props) { if (canWithdraw) { return ( - - {t('plugin_ito_withdraw')} - + + + {t('plugin_ito_withdraw')} + + ) } @@ -762,20 +772,41 @@ export function ITO(props: ITO_Props) { !isNativeTokenAddress(qualificationAddress) ) { return ( - - {loadingIfQualified - ? t('plugin_ito_qualification_loading') - : !ifQualified - ? t('plugin_ito_qualification_failed') - : !(ifQualified as Qual_V2).qualified - ? startCase((ifQualified as Qual_V2).errorMsg) - : null} - + <> + + } + onClick={onShareSuccess} + variant="contained" + size="large" + className={classes.actionButton}> + {t('plugin_ito_share')} + + + + + } + classes={{ button: classes.actionButton }}> + + {loadingIfQualified + ? t('plugin_ito_qualification_loading') + : !ifQualified + ? t('plugin_ito_qualification_failed') + : !(ifQualified as Qual_V2).qualified + ? startCase((ifQualified as Qual_V2).errorMsg) + : null} + + + + + ) } @@ -783,8 +814,8 @@ export function ITO(props: ITO_Props) { if (listOfStatus.includes(ITO_Status.waited)) { return ( - - + <> + {t('plugin_ito_unlock_in_advance')} - + {shareText ? ( - + } onClick={onShare} variant="contained" size="large" className={classes.actionButton}> {t('plugin_ito_share')} - + ) : undefined} - + ) } if (listOfStatus.includes(ITO_Status.started)) { return ( - - + <> + {t('plugin_ito_enter')} - - + + } onClick={onShareSuccess} variant="contained" size="large" className={classes.actionButton}> {t('plugin_ito_share')} - - + + ) } @@ -849,7 +882,7 @@ export function ITO(props: ITO_Props) { onClose={() => setOpenClaimDialog(false)} retryPayload={retryITOCard} /> -
+ ) } @@ -858,7 +891,7 @@ export function ITO_Loading() { const PoolBackground = getAssetAsBlobURL(new URL('../assets/pool-loading-background.jpg', import.meta.url)) const { classes } = useStyles({}) return ( -
+
), ), [JSON.stringify(_payload.exchange_tokens)], @@ -65,7 +67,7 @@ export function PostInspector(props: PostInspectorProps) { value: exchangeTokensDetailed, loading: loadingExchangeTokensDetailed, retry: retryExchangeTokensDetailed, - } = useFungibleTokensDetailed(exchangeFungibleTokens) + } = useFungibleTokensDetailed(exchangeFungibleTokens, _payload.chain_id) const retry = useCallback(() => { retryPayload() @@ -97,9 +99,5 @@ export function PostInspector(props: PostInspectorProps) { const theme = useClassicMaskSNSPluginTheme() - return ( - - {renderITO()} - - ) + return {renderITO()} } diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAvailability.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAvailability.ts index 3e738a0cf28f..360546fee49f 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAvailability.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAvailability.ts @@ -1,16 +1,17 @@ import { useAsyncRetry } from 'react-use' -import { useAccount, useITOConstants, useChainId, isSameAddress } from '@masknet/web3-shared-evm' +import { useAccount, useITOConstants, useChainId, isSameAddress, ChainId } from '@masknet/web3-shared-evm' import { checkAvailability } from '../../Worker/apis/checkAvailability' -export function useAvailability(id: string, contract_address: string) { +export function useAvailability(id: string, contract_address: string, from?: string, chainId?: ChainId) { const account = useAccount() - const chainId = useChainId() + const fromAccount = from ?? account + const _chainId = useChainId() const { ITO_CONTRACT_ADDRESS } = useITOConstants() const isV1 = isSameAddress(contract_address ?? '', ITO_CONTRACT_ADDRESS) return useAsyncRetry(async () => { if (!id || !contract_address) return null - return checkAvailability(id, account, contract_address, chainId, isV1) - }, [id, account]) + return checkAvailability(id, account ?? fromAccount, contract_address, chainId ?? _chainId, isV1) + }, [id, account, fromAccount, _chainId, chainId]) } diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAvailabilityComputed.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAvailabilityComputed.ts index a1da99b9af88..d8df7c1a0b77 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAvailabilityComputed.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useAvailabilityComputed.ts @@ -9,7 +9,12 @@ import { ITO_CONTRACT_BASE_TIMESTAMP } from '../../constants' export function useAvailabilityComputed(payload: JSON_PayloadInMask | JSON_PayloadFromChain) { const chainId = useChainId() const { DEFAULT_QUALIFICATION2_ADDRESS } = useITOConstants() - const asyncResult = useAvailability(payload.pid, payload.contract_address) + const asyncResult = useAvailability( + payload.pid, + payload.contract_address, + payload.seller.address, + payload.chain_id ?? chainId, + ) const { value: availability, loading: loadingITO } = asyncResult const qualificationAddress = payload.qualification_address ?? availability?.qualification_addr ?? DEFAULT_QUALIFICATION2_ADDRESS diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useIfQualified.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useIfQualified.ts index 602c0c61b636..d7b655333501 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useIfQualified.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useIfQualified.ts @@ -1,11 +1,12 @@ import { useAsyncRetry } from 'react-use' -import { useAccount } from '@masknet/web3-shared-evm' +import { useAccount, useChainId } from '@masknet/web3-shared-evm' import type { Qualification } from '@masknet/web3-contracts/types/Qualification' import type { Qualification2 } from '@masknet/web3-contracts/types/Qualification2' import { useQualificationContract } from './useQualificationContract' export function useIfQualified(address: string, ito_address: string) { const account = useAccount() + const chainId = useChainId() const { contract: qualificationContract, version } = useQualificationContract(address, ito_address) return useAsyncRetry(async () => { @@ -17,5 +18,5 @@ export function useIfQualified(address: string, ito_address: string) { ).call({ from: account, }) - }, [account, qualificationContract]) + }, [account, qualificationContract, chainId]) } diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx index 141b5d0b1ecb..a25c322daaf4 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx @@ -16,7 +16,6 @@ import type { JSON_PayloadComposeMask } from '../types' import { ITO_MetadataReader, payloadIntoMask } from './helpers' import { CompositionDialog } from './CompositionDialog' import { set } from 'lodash-unified' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' import { MarketsIcon, MarketsClaimIcon } from '@masknet/icons' import { ApplicationEntry } from '@masknet/shared' import { CrossIsolationMessages } from '@masknet/shared-base' @@ -39,11 +38,7 @@ const sns: Plugin.SNSAdaptor.Definition = { const payload = ITO_MetadataReader(props.message.meta) usePluginWrapper(payload.ok) if (!payload.ok) return null - return ( - - - - ) + return }, CompositionDialogMetadataBadgeRender: new Map([ [ITO_MetaKey_1, onAttached_ITO], @@ -120,6 +115,11 @@ const sns: Plugin.SNSAdaptor.Definition = { } })(), ], + wrapperProps: { + icon: , + backgroundGradient: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(41, 228, 253, 0.2) 100%), #FFFFFF;', + }, } function onAttached_ITO(payload: JSON_PayloadComposeMask) { diff --git a/packages/mask/src/plugins/ITO/base.ts b/packages/mask/src/plugins/ITO/base.ts index 84fc5cbb4949..eddc066a64c6 100644 --- a/packages/mask/src/plugins/ITO/base.ts +++ b/packages/mask/src/plugins/ITO/base.ts @@ -1,6 +1,4 @@ -import { NetworkPluginID } from '@masknet/plugin-infra/web3' import type { Plugin } from '@masknet/plugin-infra' -import { ChainId } from '@masknet/web3-shared-evm' import { ITO_MetaKey_1, ITO_MetaKey_2, ITO_PluginID } from './constants' export const base: Plugin.Shared.Definition = { @@ -17,23 +15,6 @@ export const base: Plugin.Shared.Definition = { networks: {}, }, target: 'stable', - web3: { - [NetworkPluginID.PLUGIN_EVM]: { - supportedChainIds: [ - ChainId.Mainnet, - ChainId.BSC, - ChainId.Matic, - ChainId.Arbitrum, - ChainId.xDai, - ChainId.Aurora, - ChainId.Avalanche, - ChainId.Fantom, - ChainId.Harmony, - ], - }, - [NetworkPluginID.PLUGIN_FLOW]: { supportedChainIds: [] }, - [NetworkPluginID.PLUGIN_SOLANA]: { supportedChainIds: [] }, - }, }, contribution: { metadataKeys: new Set([ITO_MetaKey_1, ITO_MetaKey_2]) }, } diff --git a/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/ArticlesTab.tsx b/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/ArticlesTab.tsx index 9c1ab0004493..50a92ddaf103 100644 --- a/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/ArticlesTab.tsx +++ b/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/ArticlesTab.tsx @@ -5,7 +5,10 @@ import { MaskSharpIconOfSize } from '../../../../resources/MaskIcon' import { Video } from '../../../../components/shared/Video' const useStyles = makeStyles()((theme) => ({ - main: {}, + main: { + paddingLeft: 16, + paddingRight: 16, + }, body: { width: '100%', height: 360, diff --git a/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/DrawResultDialog.tsx b/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/DrawResultDialog.tsx index cbcd770a0b99..e371a827b775 100644 --- a/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/DrawResultDialog.tsx +++ b/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/DrawResultDialog.tsx @@ -10,9 +10,10 @@ import ActionButton from '../../../../extension/options-page/DashboardComponents import { activatedSocialNetworkUI } from '../../../../social-network' import { usePostLink } from '../../../../components/DataSource/usePostInfo' import { Context } from '../../hooks/useContext' +import { SharedIcon } from '@masknet/icons' const useStyles = makeStyles()((theme) => ({ - main: {}, + main: { padding: 8 }, list: { height: 360, overflow: 'auto', @@ -21,6 +22,7 @@ const useStyles = makeStyles()((theme) => ({ flexWrap: 'wrap', gridTemplateColumns: 'repeat(auto-fill, minmax(160px, 1fr))', gridGap: theme.spacing(1), + padding: 8, }, token: {}, })) @@ -59,7 +61,12 @@ export function DrawResultDialog(props: DrawResultDialogProps) { ))} - + } + size="medium" + fullWidth + variant="contained" + onClick={onShare}> Share diff --git a/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/PreviewCard.tsx b/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/PreviewCard.tsx index 94a9a1fbd89c..bded23df3d24 100644 --- a/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/PreviewCard.tsx +++ b/packages/mask/src/plugins/MaskBox/SNSAdaptor/components/PreviewCard.tsx @@ -1,8 +1,8 @@ import { useCallback, useEffect, useMemo, useState } from 'react' import { useContainer } from 'unstated-next' import { makeStyles } from '@masknet/theme' -import { Box, Button, Skeleton, Typography } from '@mui/material' -import { formatBalance, TransactionStateType, useTransactionCallback } from '@masknet/web3-shared-evm' +import { Box, Button, CircularProgress, Typography, useTheme } from '@mui/material' +import { formatBalance, TransactionStateType, useChainId, useTransactionCallback } from '@masknet/web3-shared-evm' import AbstractTab, { AbstractTabProps } from '../../../../components/shared/AbstractTab' import { EthereumWalletConnectedBoundary } from '../../../../web3/UI/EthereumWalletConnectedBoundary' import ActionButton from '../../../../extension/options-page/DashboardComponents/ActionButton' @@ -14,6 +14,7 @@ import { DetailsTab } from './DetailsTab' import { DrawResultDialog } from './DrawResultDialog' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' import { WalletMessages } from '../../../Wallet/messages' +import { EthereumChainBoundary } from '../../../../web3/UI/EthereumChainBoundary' const useTabsStyles = makeStyles()((theme) => ({ tab: { @@ -47,6 +48,8 @@ export function PreviewCard(props: PreviewCardProps) { const state = useState(CardTab.Articles) const [openDrawDialog, setOpenDrawDialog] = useState(false) const [openDrawResultDialog, setOpenDrawResultDialog] = useState(false) + const chainId = useChainId() + const theme = useTheme() const { boxId, @@ -147,16 +150,26 @@ export function PreviewCard(props: PreviewCardProps) { if (boxState === BoxState.UNKNOWN) return ( - - - + + ) if (boxState === BoxState.ERROR) return ( - Something went wrong. - @@ -164,8 +177,19 @@ export function PreviewCard(props: PreviewCardProps) { if (boxState === BoxState.NOT_FOUND || !boxInfo) return ( - Failed to load box. - @@ -189,47 +213,62 @@ export function PreviewCard(props: PreviewCardProps) { } return ( - - - - setOpenDrawDialog(true)}> - {(() => { - return boxState === BoxState.READY && paymentTokenAddress ? ( - <> - {boxStateMessage} ( - {formatBalance(paymentTokenPrice, paymentTokenDetailed?.decimals ?? 0)}{' '} - {paymentTokenDetailed?.symbol}/Time) - - ) : ( - boxStateMessage - ) - })()} - - - { - setOpenBoxTransactionOverrides(null) - setOpenDrawDialog(false) - }} - onSubmit={onDraw} - /> - { - refreshLastPurchasedTokenIds() - setOpenDrawResultDialog(false) - }} - /> - + <> + + + + { + setOpenBoxTransactionOverrides(null) + setOpenDrawDialog(false) + }} + onSubmit={onDraw} + /> + { + refreshLastPurchasedTokenIds() + setOpenDrawResultDialog(false) + }} + /> + + + + + setOpenDrawDialog(true)}> + {(() => { + return boxState === BoxState.READY && paymentTokenAddress ? ( + <> + {boxStateMessage} ( + {formatBalance(paymentTokenPrice, paymentTokenDetailed?.decimals ?? 0)}{' '} + {paymentTokenDetailed?.symbol}/Time) + + ) : ( + boxStateMessage + ) + })()} + + + + + ) } diff --git a/packages/mask/src/plugins/MaskBox/SNSAdaptor/index.tsx b/packages/mask/src/plugins/MaskBox/SNSAdaptor/index.tsx index b471787ab708..f40ea9b5b7f5 100644 --- a/packages/mask/src/plugins/MaskBox/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/MaskBox/SNSAdaptor/index.tsx @@ -4,7 +4,6 @@ import { base } from '../base' import { extractTextFromTypedMessage } from '@masknet/typed-message' import { Trans } from 'react-i18next' import { parseURL } from '@masknet/shared-base' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' import { PreviewCard } from './components/PreviewCard' import { Context } from '../hooks/useContext' import { ApplicationEntry } from '@masknet/shared' @@ -70,10 +69,8 @@ function Renderer(props: React.PropsWithChildren<{ url: string }>) { if (shouldNotRender) return null return ( - - - - - + + + ) } diff --git a/packages/mask/src/plugins/MaskPluginWrapper.tsx b/packages/mask/src/plugins/MaskPluginWrapper.tsx index 6618f9b41ba0..82f6f215d111 100644 --- a/packages/mask/src/plugins/MaskPluginWrapper.tsx +++ b/packages/mask/src/plugins/MaskPluginWrapper.tsx @@ -1,10 +1,7 @@ -import { Typography, SnackbarContent, Button, Link } from '@mui/material' +import { Typography, SnackbarContent, Link, useTheme } from '@mui/material' import { makeStyles, MaskColorVar } from '@masknet/theme' -import { activatedSocialNetworkUI } from '../social-network' import { MaskIcon } from '../resources/MaskIcon' import { Suspense, ReactNode, useMemo, forwardRef, useImperativeHandle, useState } from 'react' -import { isTwitter } from '../social-network-adaptor/twitter.com/base' -import { usePersonaConnectStatus } from '../components/DataSource/usePersonaConnectStatus' import { useI18N } from '../utils' import { Box } from '@mui/system' import { @@ -14,104 +11,110 @@ import { Plugin, PluginWrapperMethods, } from '@masknet/plugin-infra/content-script' +import { ProviderByIcon } from '@masknet/icons' interface PluginWrapperProps extends React.PropsWithChildren<{}> { open?: boolean - title: string + title: JSX.Element | string width?: number + content?: ReactNode action?: ReactNode publisher?: JSX.Element + wrapperProps?: Plugin.SNSAdaptor.PluginWrapperProps publisherLink?: string } -const useStyles = makeStyles()((theme) => { +const useStyles = makeStyles<{ backgroundGradient?: string }>()((theme, props) => { return { card: { + background: + props?.backgroundGradient ?? + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(45, 41, 253, 0.2) 100%), #FFFFFF;', margin: theme.spacing(2, 0), width: '100%', boxSizing: 'border-box', - border: `1px solid ${theme.palette.secondaryDivider}`, cursor: 'default', - ...(isTwitter(activatedSocialNetworkUI) - ? { - borderRadius: 15, - overflow: 'hidden', - } - : null), + borderRadius: 15, + overflow: 'hidden', }, header: { backgroundColor: 'transparent', color: theme.palette.text.primary, display: 'flex', alignItems: 'center', - padding: theme.spacing(2), + padding: 15, }, title: { display: 'flex', flexDirection: 'column', paddingLeft: theme.spacing(1.5), }, - action: { + provider: { + display: 'flex', + alignItems: 'center', + '& > a': { + lineHeight: 0, + }, + }, + publish: { flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'flex-end', }, + action: { + textAlign: 'center', + margin: theme.spacing(1), + width: '100%', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + marginBottom: 16, + }, body: { - borderTop: `1px solid ${theme.palette.secondaryDivider}`, - padding: theme.spacing(2), + padding: theme.spacing(0), }, button: { - color: MaskColorVar.twitterButtonText, + backgroundColor: theme.palette.maskColor.dark, + color: 'white', + width: 254, '&,&:hover': { - background: MaskColorVar.twitterButton, + background: theme.palette.maskColor.dark, }, + borderRadius: 9999, }, } }) export default function MaskPostExtraInfoWrapper(props: PluginWrapperProps) { - const { classes } = useStyles() - const { open, title, children, action, publisher, publisherLink } = props - const personaConnectStatus = usePersonaConnectStatus() + const { open, title, children, action, publisher, publisherLink, content, wrapperProps } = props + const { classes } = useStyles({ backgroundGradient: wrapperProps?.backgroundGradient }) + const theme = useTheme() const { t } = useI18N() - const name = !personaConnectStatus.hasPersona - ? t('please_create_persona') - : !personaConnectStatus.connected - ? t('please_connect_persona') - : title - - const actionButton = useMemo(() => { - if (!personaConnectStatus.action) return null - - const button = personaConnectStatus.hasPersona ? t('connect_persona') : t('create_persona') - return ( - - ) - }, [personaConnectStatus, t]) - const publisherInfo = useMemo(() => { - if (!publisher) return null + if (!publisher) return const main = ( - + {publisher} ) return ( - - - Provided by + + + {t('plugin_provider_by')} + {main} {publisherLink ? ( - {main} + - ) : ( - main - )} + ) : null} ) }, [publisher, publisherLink]) @@ -122,26 +125,39 @@ export default function MaskPostExtraInfoWrapper(props: PluginWrapperProps) { style={{ display: open ? 'block' : 'none' }} onClick={(ev) => ev.stopPropagation()}>
- -
- - Mask Plugin {!personaConnectStatus.connected && title ? `(${title})` : ''} - - - {name} - -
-
{actionButton || action || publisherInfo}
+ {wrapperProps?.icon ?? ( + + )} + + {wrapperProps?.title ?? title ?? t('plugin_default_title')} + +
{publisherInfo}
- {personaConnectStatus.connected && children ?
{children}
: null} + {action ? ( + <> + + {content} + +
{action}
+ + ) : null} + {children ?
{children}
: null}
) + return } children={inner} /> } export const MaskPostExtraPluginWrapper: PluginWrapperComponent = forwardRef( (props, ref) => { - const { ID, name, publisher } = props.definition + const { ID, name, publisher, wrapperProps } = props.definition const t = usePluginI18NField() const [width, setWidth] = useState(undefined) const [open, setOpen] = useState(false) @@ -159,6 +175,7 @@ export const MaskPostExtraPluginWrapper: PluginWrapperComponent URL_PATTERN.test(url) @@ -46,17 +44,20 @@ const sns: Plugin.SNSAdaptor.Definition = { icon: , }, ], + wrapperProps: { + icon: ( + + ), + backgroundGradient: + ' linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(70, 39, 155, 0.2) 100%), #FFFFFF;', + }, } export default sns function Renderer(props: React.PropsWithChildren<{ url: string }>) { usePluginWrapper(true) - return ( - [ChainId.Mainnet, ChainId.Matic].includes(chainId)}> - - - ) + return } diff --git a/packages/mask/src/plugins/PoolTogether/UI/PoolTogetherView.tsx b/packages/mask/src/plugins/PoolTogether/UI/PoolTogetherView.tsx index bcc6a144941b..c97b4f92f9f9 100644 --- a/packages/mask/src/plugins/PoolTogether/UI/PoolTogetherView.tsx +++ b/packages/mask/src/plugins/PoolTogether/UI/PoolTogetherView.tsx @@ -1,7 +1,7 @@ import { RefreshIcon } from '@masknet/icons' import { DarkColor } from '@masknet/theme/base' -import { usePoolTogetherConstants } from '@masknet/web3-shared-evm' -import { Card, CardContent, CircularProgress, Paper, Tab, Tabs, Typography } from '@mui/material' +import { ChainId, usePoolTogetherConstants } from '@masknet/web3-shared-evm' +import { Box, Card, CardContent, CircularProgress, Paper, Tab, Tabs, Typography } from '@mui/material' import { makeStyles } from '@masknet/theme' import React, { useState, useEffect } from 'react' import { useI18N } from '../../../utils/i18n-next-ui' @@ -9,6 +9,7 @@ import { usePool, usePools } from '../hooks/usePools' import type { Pool } from '../types' import { Account } from './Account' import { PoolsView } from './PoolsView' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const useStyles = makeStyles()((theme) => ({ root: { @@ -18,10 +19,11 @@ const useStyles = makeStyles()((theme) => ({ padding: 0, backgroundColor: '#290b5a', textAlign: 'center', + width: '100%', }, message: { - color: theme.palette.text.primary, textAlign: 'center', + padding: 16, }, refresh: { bottom: theme.spacing(1), @@ -112,31 +114,43 @@ export function PoolTogetherView(props: PoolTogetherViewProps) { } if (pools.length === 0) { - return {t('plugin_pooltogether_no_pool')} + return ( + + {t('plugin_pooltogether_no_pool')} + + ) } return ( - - - , newValue: number) => setTabIndex(newValue)} - TabIndicatorProps={{ - style: { - display: 'none', - }, - }}> - {tabs} - - - {tabIndex === 0 ? : null} - {tabIndex === 1 ? : null} - - - + <> + + + , newValue: number) => setTabIndex(newValue)} + TabIndicatorProps={{ + style: { + display: 'none', + }, + }}> + {tabs} + + + {tabIndex === 0 ? : null} + {tabIndex === 1 ? : null} + + + + + [ChainId.Mainnet, ChainId.Matic].includes(chainId)} + /> + + ) } diff --git a/packages/mask/src/plugins/PoolTogether/UI/PoolView.tsx b/packages/mask/src/plugins/PoolTogether/UI/PoolView.tsx index 54a94a62dd84..883d734b2ab1 100644 --- a/packages/mask/src/plugins/PoolTogether/UI/PoolView.tsx +++ b/packages/mask/src/plugins/PoolTogether/UI/PoolView.tsx @@ -2,7 +2,7 @@ import { first } from 'lodash-unified' import type { Pool } from '../types' import { Typography, Grid, CircularProgress, Button } from '@mui/material' import { makeStyles } from '@masknet/theme' -import { useChainId, useERC20TokenDetailed } from '@masknet/web3-shared-evm' +import { useAccount, useChainId, useERC20TokenDetailed } from '@masknet/web3-shared-evm' import { RefreshIcon } from '@masknet/icons' import { usePoolURL } from '../hooks/usePoolURL' import { CountdownView } from './CountdownView' @@ -13,6 +13,7 @@ import { NetworkView } from './NetworkView' import { useI18N } from '../../../utils' import { TokenIcon } from '@masknet/shared' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' +import { NetworkPluginID, useCurrentWeb3NetworkPluginID } from '@masknet/plugin-infra/web3' const useStyles = makeStyles()((theme) => ({ root: { @@ -172,6 +173,8 @@ export function PoolView(props: PoolProps) { const chainId = useChainId() const [prize, setPrize] = useState('TBD') const [period, setPeriod] = useState('Custom Period') + const currentPluginID = useCurrentWeb3NetworkPluginID() + const account = useAccount() // #region pool token const { @@ -261,9 +264,16 @@ export function PoolView(props: PoolProps) { /> - + {currentPluginID === NetworkPluginID.PLUGIN_EVM && account ? ( + + ) : null} diff --git a/packages/mask/src/plugins/PoolTogether/base.tsx b/packages/mask/src/plugins/PoolTogether/base.tsx index 0ffc2b3de710..948c07d5d994 100644 --- a/packages/mask/src/plugins/PoolTogether/base.tsx +++ b/packages/mask/src/plugins/PoolTogether/base.tsx @@ -3,7 +3,7 @@ import { POOLTOGETHER_PLUGIN_ID, URL_PATTERN } from './constants' export const base: Plugin.Shared.Definition = { ID: POOLTOGETHER_PLUGIN_ID, - name: { fallback: 'PoolTogether' }, + name: { fallback: 'Pooltogether' }, description: { fallback: 'PoolTogether is a protocol for no-loss prize games on the Ethereum blockchain' }, publisher: { name: { fallback: 'iRhonin' }, link: 'https://github.com/iRhonin' }, enableRequirement: { diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/OperationFooter.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/OperationFooter.tsx index 589980fe5af0..27f65dc82f39 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/OperationFooter.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/OperationFooter.tsx @@ -1,13 +1,16 @@ +import { SharedIcon, PluginWalletConnectIcon } from '@masknet/icons' import { WalletMessages } from '@masknet/plugin-wallet' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' -import { TransactionState, TransactionStateType, useAccount, useChainIdValid } from '@masknet/web3-shared-evm' -import { Box } from '@mui/material' +import { ChainId, TransactionState, TransactionStateType, useAccount, useChainIdValid } from '@masknet/web3-shared-evm' +import { Box, useTheme } from '@mui/material' import ActionButton from '../../../../extension/options-page/DashboardComponents/ActionButton' import { useI18N } from '../../../../utils' +import { EthereumChainBoundary } from '../../../../web3/UI/EthereumChainBoundary' import { EthereumWalletConnectedBoundary } from '../../../../web3/UI/EthereumWalletConnectedBoundary' import { useStyles } from './useStyles' interface OperationFooterProps { + chainId?: ChainId canClaim: boolean canRefund: boolean claimState: TransactionState @@ -16,6 +19,7 @@ interface OperationFooterProps { onClaimOrRefund: () => void | Promise } export function OperationFooter({ + chainId, canClaim, canRefund, claimState, @@ -27,6 +31,7 @@ export function OperationFooter({ const { t } = useI18N() const account = useAccount() const chainIdValid = useChainIdValid() + const theme = useTheme() // #region remote controlled select provider dialog const { openDialog: openSelectProviderDialog } = useRemoteControlledDialog( @@ -39,14 +44,14 @@ export function OperationFooter({ if (!account) { return ( - + {t('plugin_wallet_connect_a_wallet')} ) } if (!chainIdValid) { return ( - + {t('plugin_wallet_invalid_network')} ) @@ -57,11 +62,18 @@ export function OperationFooter({ return ( {canClaim ? claimState.type === TransactionStateType.HASH @@ -75,18 +87,37 @@ export function OperationFooter({ } return ( - - - {canRefund ? null : ( - - {t('share')} - - )} - - - + + + } + classes={{ + connectWallet: classes.connectWallet, + }}> + + {canRefund ? null : ( + } + variant="contained" + fullWidth + onClick={onShare}> + {t('share')} + + )} + + + + + ) } diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/index.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/index.tsx index bf01e18c4647..47361baad7e1 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/index.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/index.tsx @@ -3,25 +3,21 @@ import { useCallback, useEffect, useMemo } from 'react' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' import { Card, Typography } from '@mui/material' import { - ChainId, formatBalance, - getChainIdFromName, resolveNetworkName, TransactionStateType, useAccount, - useFungibleTokenDetailed, useNetworkType, useWeb3, useTokenConstants, - EthereumTokenType, - isSameAddress, + getChainIdFromName, + ChainId, } from '@masknet/web3-shared-evm' import { usePostLink } from '../../../../components/DataSource/usePostInfo' import { activatedSocialNetworkUI } from '../../../../social-network' import { isTwitter } from '../../../../social-network-adaptor/twitter.com/base' import { isFacebook } from '../../../../social-network-adaptor/facebook.com/base' import { useI18N } from '../../../../utils' -import { EthereumChainBoundary } from '../../../../web3/UI/EthereumChainBoundary' import { WalletMessages } from '../../../Wallet/messages' import type { RedPacketAvailability, RedPacketJSONPayload } from '../../types' import { RedPacketStatus } from '../../types' @@ -51,22 +47,12 @@ export function RedPacket(props: RedPacketProps) { value: availability, computed: availabilityComputed, retry: revalidateAvailability, - } = useAvailabilityComputed(account, payload) + } = useAvailabilityComputed(account ?? payload.contract_address, payload) const { NATIVE_TOKEN_ADDRESS } = useTokenConstants() - const { value: tokenDetailed } = useFungibleTokenDetailed( - payload.token?.type ?? - payload.token_type ?? - (isSameAddress(NATIVE_TOKEN_ADDRESS, payload.token_address) - ? EthereumTokenType.Native - : EthereumTokenType.ERC20), - payload.token?.address ?? payload.token_address ?? '', - ) - const token = - payload.token && ['chainId', 'decimal', 'symbol'].every((k) => Reflect.has(payload.token ?? {}, k)) - ? payload.token - : tokenDetailed + const token = payload.token + // #endregion const { canFetch, canClaim, canRefund, listOfStatus } = availabilityComputed @@ -180,17 +166,15 @@ export function RedPacket(props: RedPacketProps) { // the red packet can fetch without account if (!availability || !token) return ( - - - - {t('loading')} - - - + + + {t('loading')} + + ) return ( - + <>
{/* it might be fontSize: 12 on twitter based on theme? */} @@ -219,6 +203,7 @@ export function RedPacket(props: RedPacketProps) { {listOfStatus.includes(RedPacketStatus.empty) ? null : ( )} - + ) } diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/useStyles.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/useStyles.ts index c1981af2d161..b05f09cec7e1 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/useStyles.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacket/useStyles.ts @@ -24,6 +24,7 @@ to { padding: theme.spacing(1, 1.5), height: 202, }, + width: '100%', }, header: { display: 'flex', @@ -44,7 +45,6 @@ to { flexWrap: 'wrap', }, footer: { - paddingTop: theme.spacing(2), width: '100%', display: 'flex', gap: theme.spacing(2), diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketNft.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketNft.tsx index 30bd4ca1f3aa..7ed8a172141f 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketNft.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketNft.tsx @@ -23,10 +23,13 @@ import { isTwitter } from '../../../social-network-adaptor/twitter.com/base' import { isFacebook } from '../../../social-network-adaptor/facebook.com/base' import { NFTCardStyledAssetPlayer } from '@masknet/shared' import { openWindow } from '@masknet/shared-base-ui' +import { PluginWalletConnectIcon } from '@masknet/icons' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const useStyles = makeStyles()((theme) => ({ root: { position: 'relative', + width: '100%', }, actions: { paddingTop: theme.spacing(2), @@ -98,7 +101,7 @@ const useStyles = makeStyles()((theme) => ({ }, }, buttonWrapper: { - marginTop: 4, + marginTop: 0, }, loadingBox: { borderRadius: theme.spacing(1), @@ -432,23 +435,25 @@ export function RedPacketNft({ payload }: RedPacketNftProps) { {availability.isClaimed ? null : ( - - - {isClaiming ? t('plugin_red_packet_claiming') : t('plugin_red_packet_claim')} - - + + } + classes={{ + connectWallet: classes.button, + unlockMetaMask: classes.button, + gasFeeButton: classes.button, + }}> + + {isClaiming ? t('plugin_red_packet_claiming') : t('plugin_red_packet_claim')} + + + )} diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketNftInPost.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketNftInPost.tsx index 3183e6bc7213..4711aae40d63 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketNftInPost.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketNftInPost.tsx @@ -1,5 +1,4 @@ import { useEffect } from 'react' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' import { RedPacketRPC } from '../messages' import type { RedPacketNftJSONPayload } from '../types' import { RedPacketNft } from './RedPacketNft' @@ -17,9 +16,5 @@ export function RedPacketNftInPost({ payload }: RedPacketNftInPostProps) { contract_version: payload.contractVersion, }) }, [payload]) - return ( - - - - ) + return } diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx index 882358c0816f..0a676a0f9a01 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedpacketNftConfirmDialog.tsx @@ -108,7 +108,7 @@ const useStyles = makeStyles()((theme) => ({ textOverflow: 'ellipsis', }, buttonWrapper: { - marginTop: 16, + marginTop: 0, }, button: { minHeight: 36, diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useAvailability.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useAvailability.ts index 69e321ad3803..090137577199 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useAvailability.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useAvailability.ts @@ -1,16 +1,15 @@ import { useAsyncRetry } from 'react-use' -import { ChainId, useChainId } from '@masknet/web3-shared-evm' +import type { ChainId } from '@masknet/web3-shared-evm' import { useRedPacketContract } from './useRedPacketContract' export function useAvailability(version: number, from: string, id: string, redpacketChainId: ChainId) { - const redPacketContract = useRedPacketContract(version) - const currentChainId = useChainId() + const redPacketContract = useRedPacketContract(version, redpacketChainId) return useAsyncRetry(async () => { - if (!id || redpacketChainId !== currentChainId) return null + if (!id) return null if (!redPacketContract) return null return redPacketContract.methods.check_availability(id).call({ // check availability is ok w/o account from, }) - }, [id, from, redpacketChainId, currentChainId, redPacketContract]) + }, [id, from, redpacketChainId, redPacketContract]) } diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketContract.ts b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketContract.ts index b4556452b883..2b0039114616 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketContract.ts +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/hooks/useRedPacketContract.ts @@ -6,20 +6,20 @@ import type { HappyRedPacketV1 } from '@masknet/web3-contracts/types/HappyRedPac import type { HappyRedPacketV2 } from '@masknet/web3-contracts/types/HappyRedPacketV2' import type { HappyRedPacketV3 } from '@masknet/web3-contracts/types/HappyRedPacketV3' import type { HappyRedPacketV4 } from '@masknet/web3-contracts/types/HappyRedPacketV4' -import { useContract, useRedPacketConstants } from '@masknet/web3-shared-evm' +import { useContract, useRedPacketConstants, ChainId } from '@masknet/web3-shared-evm' import type { AbiItem } from 'web3-utils' -export function useRedPacketContract(version: number) { +export function useRedPacketContract(version: number, chainId?: ChainId) { const { HAPPY_RED_PACKET_ADDRESS_V1: addressV1, HAPPY_RED_PACKET_ADDRESS_V2: addressV2, HAPPY_RED_PACKET_ADDRESS_V3: addressV3, HAPPY_RED_PACKET_ADDRESS_V4: addressV4, - } = useRedPacketConstants() - const v1 = useContract(addressV1, HappyRedPacketV1ABI as AbiItem[]) - const v2 = useContract(addressV2, HappyRedPacketV2ABI as AbiItem[]) - const v3 = useContract(addressV3, HappyRedPacketV3ABI as AbiItem[]) - const v4 = useContract(addressV4, HappyRedPacketV4ABI as AbiItem[]) + } = useRedPacketConstants(chainId) + const v1 = useContract(addressV1, HappyRedPacketV1ABI as AbiItem[], chainId) + const v2 = useContract(addressV2, HappyRedPacketV2ABI as AbiItem[], chainId) + const v3 = useContract(addressV3, HappyRedPacketV3ABI as AbiItem[], chainId) + const v4 = useContract(addressV4, HappyRedPacketV4ABI as AbiItem[], chainId) const versions = [v1, v2, v3, v4] as const return versions[version - 1] } diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx index 845a1cfb01f1..f56ca1eb9aec 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/index.tsx @@ -133,6 +133,15 @@ const sns: Plugin.SNSAdaptor.Definition = { } })(), ], + wrapperProps: { + icon: ( + + ), + backgroundGradient: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(249, 55, 55, 0.2) 100%), #FFFFFF', + }, } interface ERC20RedpacketBadgeProps { payload: RedPacketJSONPayload diff --git a/packages/mask/src/plugins/RedPacket/base.ts b/packages/mask/src/plugins/RedPacket/base.ts index 42cc70a2d840..017b71a9a04b 100644 --- a/packages/mask/src/plugins/RedPacket/base.ts +++ b/packages/mask/src/plugins/RedPacket/base.ts @@ -1,11 +1,9 @@ -import { NetworkPluginID } from '@masknet/plugin-infra/web3' import type { Plugin } from '@masknet/plugin-infra' -import { ChainId } from '@masknet/web3-shared-evm' import { RedPacketMetaKey, RedPacketNftMetaKey, RedPacketPluginID } from './constants' export const base: Plugin.Shared.Definition = { ID: RedPacketPluginID, - name: { fallback: 'Lucky drop' }, + name: { fallback: 'Lucky Drop' }, description: { fallback: 'Lucky drop is a special feature in Mask Network which was launched in early 2020. Once users have installed the Chrome/Firefox plugin, they can claim and give out cryptocurrencies on Twitter.', @@ -18,24 +16,6 @@ export const base: Plugin.Shared.Definition = { networks: {}, }, target: 'stable', - web3: { - [NetworkPluginID.PLUGIN_EVM]: { - supportedChainIds: [ - ChainId.Mainnet, - ChainId.BSC, - ChainId.Matic, - ChainId.Arbitrum, - ChainId.xDai, - ChainId.Fantom, - ChainId.Avalanche, - ChainId.Aurora, - ChainId.Harmony, - ChainId.Conflux, - ], - }, - [NetworkPluginID.PLUGIN_FLOW]: { supportedChainIds: [] }, - [NetworkPluginID.PLUGIN_SOLANA]: { supportedChainIds: [] }, - }, }, contribution: { metadataKeys: new Set([RedPacketMetaKey, RedPacketNftMetaKey]), diff --git a/packages/mask/src/plugins/Snapshot/SNSAdaptor/LoadingFailCard.tsx b/packages/mask/src/plugins/Snapshot/SNSAdaptor/LoadingFailCard.tsx index fdb45c198733..f9ad3e55f307 100644 --- a/packages/mask/src/plugins/Snapshot/SNSAdaptor/LoadingFailCard.tsx +++ b/packages/mask/src/plugins/Snapshot/SNSAdaptor/LoadingFailCard.tsx @@ -1,6 +1,6 @@ import { Component, PropsWithChildren } from 'react' import { SnapshotCard } from './SnapshotCard' -import { Typography, Button } from '@mui/material' +import { Typography, Button, Box } from '@mui/material' export class LoadingFailCard extends Component< PropsWithChildren<{ title: string; retry: () => void; isFullPluginDown?: boolean }> @@ -12,24 +12,35 @@ export class LoadingFailCard extends Component< override render() { if (this.state.error) { return this.props.isFullPluginDown ? ( - <> - Loading fails due to Snapshot API service breakdown. + + + Loading fails due to Snapshot API service breakdown. + - + ) : ( Loading fails due to Snapshot API service breakdown. - ))} - - - + {account && networkPluginId === NetworkPluginID.PLUGIN_EVM ? ( + <> + {choices.map((choiceText, i) => ( + + ))} + + + + ) : null} , }, ], + wrapperProps: { + icon: ( + + ), + backgroundGradient: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(255, 159, 10, 0.2) 100%), #FFFFFF;', + }, } export default sns diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx index ec738c3ac367..2594adcb01a4 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx @@ -51,6 +51,15 @@ const sns: Plugin.SNSAdaptor.Definition = { } })(), ], + wrapperProps: { + icon: ( + + ), + backgroundGradient: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(254, 156, 0, 0.2) 100%), #FFFFFF;', + }, } export default sns diff --git a/packages/mask/src/plugins/dHEDGE/SNSAdaptor/index.tsx b/packages/mask/src/plugins/dHEDGE/SNSAdaptor/index.tsx index 0721071fbcbd..61354024815c 100644 --- a/packages/mask/src/plugins/dHEDGE/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/dHEDGE/SNSAdaptor/index.tsx @@ -56,6 +56,15 @@ const sns: Plugin.SNSAdaptor.Definition = { tutorialLink: 'https://realmasknetwork.notion.site/fb00ff2e626949279c83b59ed9207b9a', }, ], + wrapperProps: { + icon: ( + + ), + backgroundGradient: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(0, 150, 202, 0.2) 100%), #FFFFFF;', + }, } export default sns diff --git a/packages/mask/src/plugins/dHEDGE/UI/PoolView.tsx b/packages/mask/src/plugins/dHEDGE/UI/PoolView.tsx index b134d31ee75d..158285d2c292 100644 --- a/packages/mask/src/plugins/dHEDGE/UI/PoolView.tsx +++ b/packages/mask/src/plugins/dHEDGE/UI/PoolView.tsx @@ -1,14 +1,14 @@ import { RefreshIcon } from '@masknet/icons' import { useChainId } from '@masknet/web3-shared-evm' -import { Card, CardContent, CardHeader, Paper, Tab, Tabs, Typography } from '@mui/material' +import { Box, Card, CardContent, CardHeader, CircularProgress, Paper, Tab, Tabs, Typography } from '@mui/material' import { makeStyles } from '@masknet/theme' import { useState } from 'react' import { useI18N } from '../../../utils/i18n-next-ui' -import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' import { useFetchPool, usePoolDepositAssets } from '../hooks/usePool' import { PerformanceChart } from './PerformanceChart' import { PoolStats } from './PoolStats' import { PoolViewDeck } from './PoolViewDeck' +import { EthereumChainBoundary } from '../../../web3/UI/EthereumChainBoundary' const useStyles = makeStyles()((theme) => ({ root: { @@ -86,8 +86,8 @@ export function PoolView(props: PoolViewProps) { if (loading || loadingAllowedTokens) return ( - - {t('plugin_dhedge_loading')} + + ) if (!pool) @@ -108,7 +108,7 @@ export function PoolView(props: PoolViewProps) { ) return ( - + <> } /> @@ -132,6 +132,9 @@ export function PoolView(props: PoolViewProps) { - + + + + ) } diff --git a/packages/mask/src/plugins/dHEDGE/UI/PoolViewDeck.tsx b/packages/mask/src/plugins/dHEDGE/UI/PoolViewDeck.tsx index 9e58bebd5911..8274f0abb469 100644 --- a/packages/mask/src/plugins/dHEDGE/UI/PoolViewDeck.tsx +++ b/packages/mask/src/plugins/dHEDGE/UI/PoolViewDeck.tsx @@ -1,4 +1,4 @@ -import { resolveAddressLinkOnExplorer, useChainId } from '@masknet/web3-shared-evm' +import { resolveAddressLinkOnExplorer, useAccount, useChainId } from '@masknet/web3-shared-evm' import { Avatar, Button, Grid, Link, Typography } from '@mui/material' import { makeStyles } from '@masknet/theme' import BigNumber from 'bignumber.js' @@ -65,6 +65,7 @@ export function PoolViewDeck(props: PoolDeckProps) { const blockie = useAvatar(pool.managerAddress) const chainId = useChainId() + const account = useAccount() // #region manager share const managerShare = new BigNumber(pool.balanceOfManager) @@ -138,9 +139,11 @@ export function PoolViewDeck(props: PoolDeckProps) { - + {account && pool.chainId === chainId ? ( + + ) : null} ) diff --git a/packages/mask/src/utils/hooks/useSettingSwitcher.tsx b/packages/mask/src/utils/hooks/useSettingSwitcher.tsx index d804a8105252..c109ca983fdc 100644 --- a/packages/mask/src/utils/hooks/useSettingSwitcher.tsx +++ b/packages/mask/src/utils/hooks/useSettingSwitcher.tsx @@ -2,6 +2,7 @@ import { useMemo, useCallback } from 'react' import { useValueRef } from '@masknet/shared-base-ui' import ActionButton from '../../extension/options-page/DashboardComponents/ActionButton' import type { InternalSettings } from '../../settings/createSettings' +import { useTheme } from '@mui/material' export function useSettingsSwitcher>( settings: S, @@ -36,7 +37,9 @@ export function useSwitcher( onSwitch: (option: T) => void, options: T[], resolver: (option: T) => string, + fullWidth?: boolean, ) { + const theme = useTheme() const nextOption = useMemo(() => { if (options.length === 0) return if (typeof currentOption === 'undefined') return options[0] @@ -50,7 +53,18 @@ export function useSwitcher( if (typeof nextOption === 'undefined') return null return ( - onSwitch(nextOption)}> + onSwitch(nextOption)}> Switch to {resolver(nextOption)} ) diff --git a/packages/mask/src/web3/UI/EthereumChainBoundary.tsx b/packages/mask/src/web3/UI/EthereumChainBoundary.tsx index 0fd96c4c8388..5eaaa17c574c 100644 --- a/packages/mask/src/web3/UI/EthereumChainBoundary.tsx +++ b/packages/mask/src/web3/UI/EthereumChainBoundary.tsx @@ -1,16 +1,20 @@ import React, { useCallback } from 'react' -import { Box, Typography, Theme } from '@mui/material' -import { makeStyles, useStylesExtends } from '@masknet/theme' +import { Box, Typography, Theme, useTheme } from '@mui/material' +import { makeStyles, MaskColorVar, ShadowRootTooltip, useStylesExtends } from '@masknet/theme' import type { SxProps } from '@mui/system' import { useActivatedPlugin } from '@masknet/plugin-infra/dom' -import { NetworkPluginID, useCurrentWeb3NetworkPluginID, useAccount } from '@masknet/plugin-infra/web3' +import { + NetworkPluginID, + useCurrentWeb3NetworkPluginID, + useAccount, + useNetworkDescriptor, +} from '@masknet/plugin-infra/web3' import { ChainId, getChainDetailedCAIP, getChainName, getNetworkTypeFromChainId, isChainIdValid, - isValidAddress as isValidEthereumAddress, NetworkType, ProviderType, resolveNetworkName, @@ -27,9 +31,32 @@ import { currentProviderSettings } from '../../plugins/Wallet/settings' import { useI18N } from '../../utils' import { WalletMessages, WalletRPC } from '../../plugins/Wallet/messages' import Services from '../../extension/service' -import { pluginIDSettings } from '../../settings/settings' +import { WalletIcon } from '@masknet/shared' +import { PluginWalletConnectIcon } from '@masknet/icons' -const useStyles = makeStyles()(() => ({})) +const useStyles = makeStyles()((theme) => ({ + button: { + backgroundColor: theme.palette.maskColor.dark, + color: 'white', + width: 254, + '&,&:hover': { + background: theme.palette.maskColor.dark, + }, + }, + action: { + textAlign: 'center', + margin: theme.spacing(1), + width: '100%', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + marginBottom: 48, + }, + tooltip: { + borderRadius: 4, + padding: 10, + }, +})) export interface EthereumChainBoundaryProps extends withClasses<'switchButton'> { className?: string @@ -45,16 +72,18 @@ export interface EthereumChainBoundaryProps extends withClasses<'switchButton'> export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { const { t } = useI18N() + const theme = useTheme() const pluginID = useCurrentWeb3NetworkPluginID() const plugin = useActivatedPlugin(pluginID, 'any') const account = useAccount() const chainId = useChainId() + const allowTestnet = useAllowTestnet() const providerType = useValueRef(currentProviderSettings) - const { noSwitchNetworkTip = false } = props + const { noSwitchNetworkTip = true } = props const classes = useStylesExtends(useStyles(), props) const expectedChainId = props.chainId const expectedNetwork = getChainName(expectedChainId) @@ -80,12 +109,7 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { WalletMessages.events.selectProviderDialogUpdated, ) - // #region connect wallet dialog - const { setDialog: setConnectWalletDialog } = useRemoteControlledDialog( - WalletMessages.events.connectWalletDialogUpdated, - ) - // #endregion - + const networkDescriptor = useNetworkDescriptor(expectedChainId, NetworkPluginID.PLUGIN_EVM) // request ethereum-compatible network const networkType = getNetworkTypeFromChainId(expectedChainId) @@ -134,41 +158,54 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { } } - const switchToPlugin = async () => { - pluginIDSettings.value = NetworkPluginID.PLUGIN_EVM + if (providerType === ProviderType.WalletConnect && networkType) { + openSelectProviderDialog() + return } - if (!isChainMatched) await switchToChain() if (!isPluginMatched) { - await switchToPlugin() - if (!networkType || networkType !== NetworkType.Ethereum || isValidEthereumAddress(account)) return - setConnectWalletDialog({ - open: true, - providerType: ProviderType.MetaMask, - networkType, - }) + openSelectProviderDialog() + return } + if (!isChainMatched) await switchToChain() }, [account, isAllowed, isChainMatched, isPluginMatched, providerType, expectedChainId]) - const renderBox = (children?: React.ReactNode) => { + const renderBox = (children?: React.ReactNode, tips?: string) => { return ( - - {children} - + + + {children} + + ) } if (!account) return renderBox( <> - - {t('plugin_wallet_connect_wallet_tip')} - {!props.hiddenConnectButton ? ( + startIcon={} + variant="contained" + size={props.ActionButtonPromiseProps?.size} + sx={{ + backgroundColor: theme.palette.maskColor.dark, + width: '100%', + color: 'white', + '&:hover': { + backgroundColor: theme.palette.maskColor.dark, + }, + margin: 0, + lineHeight: 0, + paddingTop: 1.25, + paddingBottom: 1.25, + }} + onClick={openSelectProviderDialog}> {t('plugin_wallet_connect_wallet')} ) : null} @@ -179,7 +216,7 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { if (!isAllowed) return renderBox( - + {t('plugin_wallet_not_available_on', { network: actualNetwork, @@ -192,7 +229,7 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { return renderBox( <> {!noSwitchNetworkTip ? ( - + {t('plugin_wallet_not_available_on', { network: plugin?.name?.fallback ?? 'Unknown Plugin', @@ -203,19 +240,37 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { {isAllowed ? ( + } + sx={ + props.switchButtonStyle ?? { + backgroundColor: theme.palette.maskColor.dark, + width: '100%', + color: 'white', + '&:hover': { + backgroundColor: theme.palette.maskColor.dark, + }, + padding: 1, + margin: 0, + } + } + style={{ borderRadius: 10 }} init={ - {t('plugin_wallet_switch_network', { - network: expectedNetwork, + {t('plugin_wallet_connect_network', { + network: 'EVM', })} } - waiting={t('plugin_wallet_switch_network_under_going', { - network: expectedNetwork, + waiting={t('plugin_wallet_connect_network_under_going', { + network: 'EVM', })} - complete={t('plugin_wallet_switch_network', { - network: expectedNetwork, + complete={t('plugin_wallet_connect_network', { + network: 'EVM', })} failed={t('retry')} executor={onSwitchChain} @@ -231,7 +286,7 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { return renderBox( <> {!noSwitchNetworkTip ? ( - + {t('plugin_wallet_not_available_on', { network: actualNetwork, @@ -241,21 +296,35 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { ) : null} {isAllowed ? ( + } + sx={ + props.switchButtonStyle ?? { + backgroundColor: theme.palette.maskColor.dark, + width: '100%', + color: 'white', + '&:hover': { + backgroundColor: theme.palette.maskColor.dark, + }, + padding: 1, + margin: 0, + } + } + style={{ borderRadius: 10, paddingTop: 11, paddingBottom: 11 }} init={ - {t('plugin_wallet_switch_network', { - network: expectedNetwork, - })} + {t('plugin_wallet_switch_network', { network: expectedNetwork.replace('Mainnet', '') })} } waiting={t('plugin_wallet_switch_network_under_going', { - network: expectedNetwork, - })} - complete={t('plugin_wallet_switch_network', { - network: expectedNetwork, + network: expectedNetwork.replace('Mainnet', ''), })} + complete={t('plugin_wallet_switch_network', { network: expectedNetwork.replace('Mainnet', '') })} failed={t('retry')} executor={onSwitchChain} completeOnClick={onSwitchChain} @@ -264,5 +333,6 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { /> ) : null} , + providerType === ProviderType.WalletConnect ? t('plugin_wallet_connect_tips') : '', ) } diff --git a/packages/mask/src/web3/UI/EthereumWalletConnectedBoundary.tsx b/packages/mask/src/web3/UI/EthereumWalletConnectedBoundary.tsx index 2eb116847743..1f5a08c3e18d 100644 --- a/packages/mask/src/web3/UI/EthereumWalletConnectedBoundary.tsx +++ b/packages/mask/src/web3/UI/EthereumWalletConnectedBoundary.tsx @@ -1,4 +1,3 @@ -import { Grid } from '@mui/material' import { makeStyles, useStylesExtends } from '@masknet/theme' import classNames from 'classnames' import { useRemoteControlledDialog } from '@masknet/shared-base-ui' @@ -11,7 +10,19 @@ import { useWalletRiskWarningDialog } from '../../plugins/Wallet/hooks/useWallet const useStyles = makeStyles()((theme) => ({ button: { - marginTop: theme.spacing(1.5), + backgroundColor: theme.palette.maskColor.dark, + color: 'white', + fontSize: 14, + fontWeight: 700, + width: '100%', + '&:hover': { + backgroundColor: theme.palette.maskColor.dark, + }, + margin: 0, + }, + grid: { + justifyContent: 'center', + padding: 8, }, })) @@ -21,6 +32,7 @@ export interface EthereumWalletConnectedBoundaryProps children?: React.ReactNode hideRiskWarningConfirmed?: boolean ActionButtonProps?: ActionButtonProps + startIcon?: React.ReactNode } export function EthereumWalletConnectedBoundary(props: EthereumWalletConnectedBoundaryProps) { @@ -45,64 +57,53 @@ export function EthereumWalletConnectedBoundary(props: EthereumWalletConnectedBo if (!account) return ( - - - {t('plugin_wallet_connect_a_wallet')} - - + + {t('plugin_wallet_connect_a_wallet')} + ) if (!isRiskWarningConfirmed && !hideRiskWarningConfirmed) return ( - - - {t('plugin_wallet_confirm_risk_warning')} - - + + {t('plugin_wallet_confirm_risk_warning')} + ) if (isZero(nativeTokenBalance.value ?? '0') && !offChain) return ( - - - {t(nativeTokenBalance.loading ? 'plugin_wallet_update_gas_fee' : 'plugin_wallet_no_gas_fee')} - - + + {t(nativeTokenBalance.loading ? 'plugin_wallet_update_gas_fee' : 'plugin_wallet_no_gas_fee')} + ) if (!chainIdValid && !offChain) return ( - - - {t('plugin_wallet_invalid_network')} - - + + {t('plugin_wallet_invalid_network')} + ) - return {children} + return <>{children} } diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index 99697cefb7ed..6c2f87585320 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -244,6 +244,8 @@ export namespace Plugin.SNSAdaptor { ProfileSliders?: ProfileSlider[] /** This UI will be rendered as tabs on the profile page */ ProfileTabs?: ProfileTab[] + /** This UI will be rendered as plugin wrapper page */ + wrapperProps?: PluginWrapperProps /** * A hook for if this plugin can enhance the #hash or $cash tag. */ @@ -350,6 +352,12 @@ export namespace Plugin.SNSAdaptor { } } + export interface PluginWrapperProps { + icon?: React.ReactNode + title?: string + backgroundGradient?: string + } + export interface ProfileIdentity { avatar?: string bio?: string diff --git a/packages/plugins/CrossChainBridge/src/base.ts b/packages/plugins/CrossChainBridge/src/base.ts index 790a217a8f6e..7625b7388e5b 100644 --- a/packages/plugins/CrossChainBridge/src/base.ts +++ b/packages/plugins/CrossChainBridge/src/base.ts @@ -6,7 +6,7 @@ export const base: Plugin.Shared.Definition = { ID: PLUGIN_ID, name: { fallback: PLUGIN_NAME }, description: { fallback: PLUGIN_DESCRIPTION }, - publisher: { name: { fallback: '' }, link: '' }, + publisher: { name: { fallback: 'Mask Network' }, link: 'https://mask.io/' }, enableRequirement: { architecture: { app: false, web: true }, networks: { type: 'opt-out', networks: {} }, diff --git a/packages/plugins/CyberConnect/src/SNSAdaptor/FollowTab.tsx b/packages/plugins/CyberConnect/src/SNSAdaptor/FollowTab.tsx index df9a9ff21a91..ea74e6be060d 100644 --- a/packages/plugins/CyberConnect/src/SNSAdaptor/FollowTab.tsx +++ b/packages/plugins/CyberConnect/src/SNSAdaptor/FollowTab.tsx @@ -1,6 +1,6 @@ import { useState } from 'react' import { Typography } from '@mui/material' -import { makeStyles, MaskColorVar } from '@masknet/theme' +import { makeStyles } from '@masknet/theme' import Box from '@mui/material/Box' import Tab from '@mui/material/Tab' import TabContext from '@mui/lab/TabContext' @@ -62,18 +62,18 @@ export default function FollowTab({ {followingList.map((f: IFollowIdentity) => { @@ -98,7 +98,7 @@ export default function FollowTab({ className={classes.tabPanel} value="2" sx={{ - color: MaskColorVar.cyberconnectPrimary, + color: 'black', width: '100%', }}> {followerList.map((f: IFollowIdentity) => { diff --git a/packages/plugins/CyberConnect/src/SNSAdaptor/Profile.tsx b/packages/plugins/CyberConnect/src/SNSAdaptor/Profile.tsx index 5cd00e93d46a..f5e6a3711b5e 100644 --- a/packages/plugins/CyberConnect/src/SNSAdaptor/Profile.tsx +++ b/packages/plugins/CyberConnect/src/SNSAdaptor/Profile.tsx @@ -38,9 +38,9 @@ const useStyles = makeStyles()((theme) => ({ textAlign: 'center', wordBreak: 'break-word', marginTop: '20px', - color: MaskColorVar.textPrimary, + color: 'black', }, - address: { marginTop: '20px', opacity: 0.6, color: MaskColorVar.textPrimary }, + address: { marginTop: '20px', opacity: 0.6, color: 'black' }, socialMedia: { width: '100%', display: 'flex', diff --git a/packages/plugins/CyberConnect/src/SNSAdaptor/index.tsx b/packages/plugins/CyberConnect/src/SNSAdaptor/index.tsx index 16730db08508..49eb7d2d0a9a 100644 --- a/packages/plugins/CyberConnect/src/SNSAdaptor/index.tsx +++ b/packages/plugins/CyberConnect/src/SNSAdaptor/index.tsx @@ -44,6 +44,15 @@ const sns: Plugin.SNSAdaptor.Definition = { tutorialLink: 'https://cyberconnect.me/', }, ], + wrapperProps: { + icon: ( + + ), + backgroundGradient: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(45, 41, 253, 0.2) 100%), #FFFFFF;', + }, } export default sns diff --git a/packages/plugins/CyberConnect/src/base.tsx b/packages/plugins/CyberConnect/src/base.tsx index 1d133b171379..83a0be124b1d 100644 --- a/packages/plugins/CyberConnect/src/base.tsx +++ b/packages/plugins/CyberConnect/src/base.tsx @@ -1,6 +1,4 @@ import type { Plugin } from '@masknet/plugin-infra' -import { NetworkPluginID } from '@masknet/plugin-infra/web3' -import { ChainId } from '@masknet/web3-shared-evm' import { CYBERCONNECT_PLUGIN_ID } from './constants' export const base: Plugin.Shared.Definition = { @@ -14,17 +12,6 @@ export const base: Plugin.Shared.Definition = { architecture: { app: false, web: true }, networks: { type: 'opt-out', networks: {} }, target: 'stable', - web3: { - [NetworkPluginID.PLUGIN_EVM]: { - supportedChainIds: [ChainId.Mainnet, ChainId.BSC, ChainId.Matic, ChainId.Arbitrum, ChainId.xDai], - }, - [NetworkPluginID.PLUGIN_SOLANA]: { - supportedChainIds: [], - }, - [NetworkPluginID.PLUGIN_FLOW]: { - supportedChainIds: [], - }, - }, }, contribution: { postContent: new Set([/https:\/\/app.cyberconnect.me/]) }, } diff --git a/packages/plugins/FileService/src/SNSAdaptor/index.tsx b/packages/plugins/FileService/src/SNSAdaptor/index.tsx index 2170634bb605..94d5a656f151 100644 --- a/packages/plugins/FileService/src/SNSAdaptor/index.tsx +++ b/packages/plugins/FileService/src/SNSAdaptor/index.tsx @@ -71,6 +71,15 @@ const definition: Plugin.SNSAdaptor.Definition = { } })(), ], + wrapperProps: { + icon: ( + + ), + backgroundGradient: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(255, 177, 16, 0.2) 100%), #FFFFFF;', + }, } export default definition diff --git a/packages/theme/src/CSSVariables/constants.ts b/packages/theme/src/CSSVariables/constants.ts index 8c6025ff1db5..48d83bcda028 100644 --- a/packages/theme/src/CSSVariables/constants.ts +++ b/packages/theme/src/CSSVariables/constants.ts @@ -70,6 +70,10 @@ export const LightColor = { tooltipBackground: '#ffffff', warningBackground: 'rgba(255, 185, 21, 0.1)', cyberconnectPrimary: '#000000', + errorPlugin: '#FF3545', + buttonPluginBackground: '#07101B', + textPluginColor: '#07101B', + buttonPluginColor: '#FFFFFF', } export const DarkColor: typeof LightColor = { primary: '#1c68f3', @@ -145,5 +149,9 @@ export const DarkColor: typeof LightColor = { tooltipBackground: '#1A1D20', warningBackground: 'rgba(255, 185, 21, 0.1)', cyberconnectPrimary: '#ffffff', + errorPlugin: '#FF3545', + buttonPluginBackground: '#07101B', + textPluginColor: '#07101B', + buttonPluginColor: '#FFFFFF', } export type Color = typeof LightColor diff --git a/packages/web3-providers/src/opensea/index.ts b/packages/web3-providers/src/opensea/index.ts index 6e1bfb50ebe3..1cd048fd2ed6 100644 --- a/packages/web3-providers/src/opensea/index.ts +++ b/packages/web3-providers/src/opensea/index.ts @@ -79,7 +79,7 @@ function createERC721TokenFromAsset( { name: asset.collection.name, image: asset.collection.image_url || undefined, - slug: asset.collection.slug, + slug: asset.collection.slug ?? '', }, ) } diff --git a/packages/web3-shared/evm/contracts/useBalanceChecker.ts b/packages/web3-shared/evm/contracts/useBalanceChecker.ts index 1429800c8caf..91c4059b9dff 100644 --- a/packages/web3-shared/evm/contracts/useBalanceChecker.ts +++ b/packages/web3-shared/evm/contracts/useBalanceChecker.ts @@ -7,5 +7,5 @@ import type { ChainId } from '../types' export function useBalanceCheckerContract(chainId?: ChainId) { const { BALANCE_CHECKER_ADDRESS } = useEthereumConstants(chainId) - return useContract(BALANCE_CHECKER_ADDRESS, BalanceCheckerABI as AbiItem[]) + return useContract(BALANCE_CHECKER_ADDRESS, BalanceCheckerABI as AbiItem[], chainId) } diff --git a/packages/web3-shared/evm/contracts/useMulticallContract.ts b/packages/web3-shared/evm/contracts/useMulticallContract.ts index 47b20e9aa883..220e18523c7e 100644 --- a/packages/web3-shared/evm/contracts/useMulticallContract.ts +++ b/packages/web3-shared/evm/contracts/useMulticallContract.ts @@ -7,5 +7,5 @@ import type { ChainId } from '../types' export function useMulticallContract(chainId?: ChainId) { const { MULTICALL_ADDRESS } = useEthereumConstants(chainId) - return useContract(MULTICALL_ADDRESS, MulticallABI as AbiItem[]) + return useContract(MULTICALL_ADDRESS, MulticallABI as AbiItem[], chainId) } diff --git a/packages/web3-shared/evm/contracts/useWrappedEtherContract.ts b/packages/web3-shared/evm/contracts/useWrappedEtherContract.ts index 65fee1ab9e59..9e2f33d8b58f 100644 --- a/packages/web3-shared/evm/contracts/useWrappedEtherContract.ts +++ b/packages/web3-shared/evm/contracts/useWrappedEtherContract.ts @@ -7,5 +7,5 @@ import type { ChainId } from '../types' export function useNativeTokenWrapperContract(chainId?: ChainId) { const { WNATIVE_ADDRESS } = useTokenConstants(chainId) - return useContract(WNATIVE_ADDRESS, WETH_ABI as AbiItem[]) + return useContract(WNATIVE_ADDRESS, WETH_ABI as AbiItem[], chainId) } diff --git a/packages/web3-shared/evm/hooks/useFungibleTokenDetailed.ts b/packages/web3-shared/evm/hooks/useFungibleTokenDetailed.ts index 005f17304a3d..38211d089312 100644 --- a/packages/web3-shared/evm/hooks/useFungibleTokenDetailed.ts +++ b/packages/web3-shared/evm/hooks/useFungibleTokenDetailed.ts @@ -1,6 +1,6 @@ import type { AsyncStateRetry } from 'react-use/lib/useAsyncRetry' import { unreachable } from '@dimensiondev/kit' -import { ERC20TokenDetailed, EthereumTokenDetailedType, EthereumTokenType } from '../types' +import { ChainId, ERC20TokenDetailed, EthereumTokenDetailedType, EthereumTokenType } from '../types' import { useERC20TokenDetailed } from './useERC20TokenDetailed' import { useNativeTokenDetailed } from './useNativeTokenDetailed' @@ -10,11 +10,13 @@ export function useFungibleTokenDetailed< type: EthereumTokenType.ERC20 | EthereumTokenType.Native, address: string, token?: Partial

, + chainId?: ChainId, ): AsyncStateRetry

{ const r1 = useNativeTokenDetailed() const r2 = useERC20TokenDetailed( type === EthereumTokenType.ERC20 ? address : '', token as unknown as ERC20TokenDetailed, + chainId, ) switch (type) { case EthereumTokenType.Native: From ffeb9b078a3d63c16dbe03237cf34bd95f6545a7 Mon Sep 17 00:00:00 2001 From: lelenei <72531217+lelenei@users.noreply.github.com> Date: Wed, 18 May 2022 01:45:16 +0800 Subject: [PATCH 08/29] feat: nft avatar (#6079) * feat: nft avatar * feat: upload avatar image * feat: update twitter avatar * feat: move code * fix: remove unused code * fix: import error * refactor: code style * fix: typo * fix: can't read wallet address * feat: use wizard page mode * fix: typo * fix: userid lowercase * feat: add badge for persona avatar * fix: add rainbow at avatar * fix: remove unused code * feat: selcted token * fix: icons * fix: button status * fix: save button status * fix: save button status * fix: when user has no avatar, can't open nft list page * fix: save button status * fix: show rainbow * feat: use nextID strorage * refactor: remove console.log * feat: save avatar to nextid storage * fix: wallet sign * feat: useI18N * fix: reply review * fix: typo * fix: use generateSignResult sign * fix: get nickname * fix: nextid kv storage * fix: use context * fix: reply review * fix: wallet background * feat: new nft list page for polygon * refactor: remove unused code * fix: login user * feat: application board tooltip * fix: style * fix: useI18N * refactor: code style * fix: icon color * fix: wallet icon * fix: css style * fix: css style * fix: open nft pfp dialog from edit profile * fix: cspell * fix: need popup for sign * fix: tranlate component * fix: nextid sign * fix: sign flow * fix: css style * fix: wallet connect dialog * fix: get current persona from nextid * fix: save nft avatar meta * fix: kv storage * chore: temp * chore: disable tips entry as no nextId * chore: remove useless interface * chore: handle sns persona unmatched * chore: rename * fix: little fix * chore: little fix * fix: code style * chore: icon * fix: reply review * fix: reply review * fix: reply review * fix(twitter): renmove unused code * fix: css style * chore: hide entry on unsupported sns * fix: can't show avatar plugin * fix: nft pfp button at profile page * fix: update avatar * fix: css style * fix: get nft at polygon * fix: css style * fix: css style * fix: profile icon * fix: save nft error * chore: translate * fix: css style * fix: connect wallet * fix: typo * fix: recovery code * fix: recovery code * fix: pnpm-lock * fix: revert pnpm-lock * fix: revert pnpm-lock * fix: lockfile * fix: css style * fix: typo * fix: get nft from opensea * fix: have nft avatar * fix: css style * fix: css style * fix: css style * fix: add nft dialog * fix: code style * fix: css style * fix: remove nft avatar selector * fix: css style * fix: css style * fix: css style * fix: css style * fix: css style * fix: navigate to connect wallet when params has internal * fix: adjust facebook profile edit dom selector * fix: css style * fix: css style * fix: chain link address * fix: scollbar style * fix: find avatar meta from next id by avatarid * fix: list persona * fix: show local persona * fix: filter user * fix: name * fix: css style * fix: ploygon contract * fix: opensea link for polygon * fix: check owner * fix: get nft from polygon * fix: revert code * fix: reply review * fix: typo * fix: typo * fix: revert code * fix: connect / create persona * refactor: remove unused code * fix: filter non-twitter user * fix: verifed persona * fix: remove non-evm wallet * fix: scroll page * fix: verified user token * fix: css style * fix: css style * fix: css style * chore: add recommend area * chore: style * chore: add shadow color * chore: style * fix: application tips * chore: tooltip hint postion * chore: style * chore: style * fix: reply review * fix: build error * fix: add loading * fix: remove console.log * fix: reply review * chore: add disabled * fix: reply review * fix: typo * fix: disabled * fix: reply review * fix: remove unused word Co-authored-by: zhouhanseng Co-authored-by: unclebill Co-authored-by: nuanyang233 --- .i18n-codegen.json | 12 + cspell.json | 3 +- packages/icons/plugins/NFTAvatar.tsx | 29 ++ packages/icons/plugins/index.ts | 1 + packages/mask/package.json | 2 + packages/mask/shared-ui/locales/en-US.json | 14 +- packages/mask/shared-ui/locales/ko-KR.json | 1 - packages/mask/shared-ui/locales/qya-AA.json | 3 - packages/mask/shared-ui/locales/zh-CN.json | 1 - .../components/shared/ApplicationBoard.tsx | 22 +- .../shared/ApplicationSettingPluginList.tsx | 11 +- .../pages/Personas/ConnectedWallets/index.tsx | 10 + .../plugins/Avatar/Application/NFTAvatar.tsx | 46 +++ .../Avatar/Application/NFTAvatarsDialog.tsx | 106 ++++++ .../plugins/Avatar/Application/NFTInfo.tsx | 65 ++++ .../plugins/Avatar/Application/NFTList.tsx | 103 ++++++ .../Avatar/Application/NFTListDialog.tsx | 279 +++++++++++++++ .../Avatar/Application/NFTListPage.tsx | 118 +++++++ .../Avatar/Application/PersonaItem.tsx | 94 +++++ .../Avatar/Application/PersonaPage.tsx | 107 ++++++ .../Avatar/Application/UploadAvatarDialog.tsx | 202 +++++++++++ .../Avatar/Application/WalletConnect.tsx | 114 ++++++ .../plugins/Avatar/Application/WalletList.tsx | 331 ++++++++++++++++++ .../src/plugins/Avatar/SNSAdaptor/AddNFT.tsx | 56 ++- .../Avatar/SNSAdaptor/NFTAvatarButton.tsx | 17 +- .../plugins/Avatar/SNSAdaptor/NFTBadge.tsx | 6 +- .../Avatar/SNSAdaptor/NFTBadgeTimeline.tsx | 4 +- .../plugins/Avatar/SNSAdaptor/NFTImage.tsx | 20 +- .../Avatar/SNSAdaptor/background/amount.png | Bin 1246 -> 0 bytes .../Avatar/SNSAdaptor/background/noamount.png | Bin 1128 -> 0 bytes .../Avatar/SNSAdaptor/background/noname.png | Bin 1075 -> 0 bytes .../src/plugins/Avatar/SNSAdaptor/index.tsx | 51 ++- .../src/plugins/Avatar/assets/Verify2.tsx | 19 + .../src/plugins/Avatar/assets/application.tsx | 63 ++++ .../src/plugins/Avatar/assets/checked.tsx | 25 ++ .../mask/src/plugins/Avatar/assets/close.tsx | 12 + .../mask/src/plugins/Avatar/assets/copy.tsx | 20 ++ .../mask/src/plugins/Avatar/assets/frame.tsx | 44 +++ .../mask/src/plugins/Avatar/assets/info.tsx | 26 ++ .../mask/src/plugins/Avatar/assets/link.tsx | 14 + .../mask/src/plugins/Avatar/assets/more.tsx | 14 + .../src/plugins/Avatar/assets/nftavatar.png | Bin 0 -> 1007 bytes .../mask/src/plugins/Avatar/assets/point.tsx | 12 + .../src/plugins/Avatar/assets/selected.tsx | 16 + .../src/plugins/Avatar/assets/setting.tsx | 16 + .../src/plugins/Avatar/assets/twitter.tsx | 20 ++ .../mask/src/plugins/Avatar/assets/verify.tsx | 17 + .../mask/src/plugins/Avatar/assets/wallet.tsx | 32 ++ packages/mask/src/plugins/Avatar/base.ts | 9 +- packages/mask/src/plugins/Avatar/constants.ts | 9 +- packages/mask/src/plugins/Avatar/context.ts | 5 + .../mask/src/plugins/Avatar/hooks/useNFT.ts | 28 +- .../Avatar/hooks/usePersonaNFTAvatar.ts | 22 ++ .../Avatar/hooks/usePersonaVerified.ts | 23 ++ .../src/plugins/Avatar/hooks/usePersonas.ts | 38 ++ .../src/plugins/Avatar/hooks/useTokenOwner.ts | 45 +++ .../src/plugins/Avatar/locales/en-US.json | 27 ++ .../mask/src/plugins/Avatar/locales/index.ts | 6 + .../src/plugins/Avatar/locales/languages.ts | 19 + packages/mask/src/plugins/Avatar/types.ts | 20 +- .../mask/src/plugins/Avatar/utils/index.ts | 116 +++++- .../plugins/FindTruman/SNSAdaptor/index.tsx | 3 + .../mask/src/plugins/ITO/SNSAdaptor/index.tsx | 6 + .../src/plugins/MaskBox/SNSAdaptor/index.tsx | 3 + .../src/plugins/Pets/SNSAdaptor/index.tsx | 3 + .../src/plugins/Savings/SNSAdaptor/index.tsx | 3 + .../src/plugins/Tips/SNSAdaptor/index.tsx | 3 + .../src/plugins/Trader/SNSAdaptor/index.tsx | 3 + .../src/plugins/Transak/SNSAdaptor/index.tsx | 3 + packages/mask/src/resources/NFTAvatar.tsx | 28 ++ .../facebook.com/utils/selector.ts | 4 +- .../twitter.com/collecting/identity.ts | 40 ++- .../injection/NFT/NFTAvatarEditProfile.tsx | 52 ++- .../injection/NFT/NFTAvatarInTwitter.tsx | 10 +- .../injection/NFT/ProfileNFTAvatar.tsx | 105 ------ .../twitter.com/ui-provider.ts | 4 +- .../twitter.com/utils/selector.ts | 3 + packages/plugin-infra/src/types.ts | 2 + .../CrossChainBridge/src/SNSAdaptor/index.tsx | 3 + .../FileService/src/SNSAdaptor/index.tsx | 25 +- .../GoPlusSecurity/src/SNSAdaptor/index.tsx | 3 + .../UI/components/ApplicationEntry/index.tsx | 158 +++++---- .../contexts/components/InjectedDialog.tsx | 6 +- packages/web3-providers/src/NextID/kv.ts | 24 +- packages/web3-providers/src/twitter/index.ts | 46 ++- packages/web3-providers/src/types.ts | 35 +- .../evm/contracts/useERC721TokenContract.ts | 5 +- .../web3-shared/evm/hooks/useCollectibles.ts | 10 +- .../evm/hooks/useERC721TokenDetailed.ts | 1 + packages/web3-shared/evm/pipes/index.ts | 8 +- pnpm-lock.yaml | 205 +++++++++-- 91 files changed, 3015 insertions(+), 334 deletions(-) create mode 100644 packages/icons/plugins/NFTAvatar.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/NFTAvatar.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/NFTInfo.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/NFTList.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/NFTListDialog.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/NFTListPage.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/PersonaItem.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/PersonaPage.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/UploadAvatarDialog.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/WalletConnect.tsx create mode 100644 packages/mask/src/plugins/Avatar/Application/WalletList.tsx delete mode 100644 packages/mask/src/plugins/Avatar/SNSAdaptor/background/amount.png delete mode 100644 packages/mask/src/plugins/Avatar/SNSAdaptor/background/noamount.png delete mode 100644 packages/mask/src/plugins/Avatar/SNSAdaptor/background/noname.png create mode 100644 packages/mask/src/plugins/Avatar/assets/Verify2.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/application.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/checked.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/close.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/copy.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/frame.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/info.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/link.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/more.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/nftavatar.png create mode 100644 packages/mask/src/plugins/Avatar/assets/point.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/selected.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/setting.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/twitter.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/verify.tsx create mode 100644 packages/mask/src/plugins/Avatar/assets/wallet.tsx create mode 100644 packages/mask/src/plugins/Avatar/context.ts create mode 100644 packages/mask/src/plugins/Avatar/hooks/usePersonaNFTAvatar.ts create mode 100644 packages/mask/src/plugins/Avatar/hooks/usePersonaVerified.ts create mode 100644 packages/mask/src/plugins/Avatar/hooks/usePersonas.ts create mode 100644 packages/mask/src/plugins/Avatar/hooks/useTokenOwner.ts create mode 100644 packages/mask/src/plugins/Avatar/locales/en-US.json create mode 100644 packages/mask/src/plugins/Avatar/locales/index.ts create mode 100644 packages/mask/src/plugins/Avatar/locales/languages.ts create mode 100644 packages/mask/src/resources/NFTAvatar.tsx delete mode 100644 packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/ProfileNFTAvatar.tsx diff --git a/.i18n-codegen.json b/.i18n-codegen.json index ded70c3006bd..d54cdcd12b53 100644 --- a/.i18n-codegen.json +++ b/.i18n-codegen.json @@ -229,6 +229,18 @@ "trans": "Translate", "sourceMap": "inline" } + }, + { + "input": "./packages/mask/src/plugins/Avatar/locales/en-US.json", + "output": "./packages/mask/src/plugins/Avatar/locales/i18n_generated", + "parser": "i18next", + "generator": { + "type": "i18next/react-hooks", + "hooks": "useI18N", + "namespace": "com.maskbook.avatar", + "trans": "Translate", + "sourceMap": "inline" + } } ] } diff --git a/cspell.json b/cspell.json index 9e1391ac7183..b26de3d954c0 100644 --- a/cspell.json +++ b/cspell.json @@ -120,6 +120,7 @@ "multicall", "multihop", "newsfeed", + "nftavatar", "nftrss", "nftscan", "nums", @@ -215,7 +216,7 @@ "aicanft", "algr", "anft", - "avator", + "armv", "blocto", "bsct", "btcb", diff --git a/packages/icons/plugins/NFTAvatar.tsx b/packages/icons/plugins/NFTAvatar.tsx new file mode 100644 index 000000000000..4ba11fbe2ed0 --- /dev/null +++ b/packages/icons/plugins/NFTAvatar.tsx @@ -0,0 +1,29 @@ +import { createIcon } from '../utils' +import type { SvgIcon } from '@mui/material' + +export const NFTAvatarIcon: typeof SvgIcon = createIcon( + 'nft_avatar', + + + + + + + + + + , + '0 0 37 36', +) diff --git a/packages/icons/plugins/index.ts b/packages/icons/plugins/index.ts index 042cbb8b08a1..3915a4d0166c 100644 --- a/packages/icons/plugins/index.ts +++ b/packages/icons/plugins/index.ts @@ -24,5 +24,6 @@ export * from './DHEDGEIcon' export * from './PoolTogetherIcon' export * from './SecurityChecker' export * from './ArtBlocks' +export * from './NFTAvatar' export * from './connect' export * from './shared' diff --git a/packages/mask/package.json b/packages/mask/package.json index 25d28a0b9d5a..68d24f9efcda 100644 --- a/packages/mask/package.json +++ b/packages/mask/package.json @@ -56,6 +56,7 @@ "@types/json-stable-stringify": "^1.0.34", "@types/json2csv": "^5.0.3", "@types/node": "^17.0.31", + "@types/react-avatar-editor": "^10.3.6", "@types/react-highlight-words": "^0.16.4", "@types/react-router-dom": "^5.3.3", "@types/react-virtualized-auto-sizer": "^1.0.1", @@ -100,6 +101,7 @@ "pure-react-carousel": "^1.28.1", "promievent": "^0.1.4", "protobufjs": "^6.11.2", + "react-avatar-editor": "^12.0.0", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", "react-draggable": "^4.4.4", diff --git a/packages/mask/shared-ui/locales/en-US.json b/packages/mask/shared-ui/locales/en-US.json index 5fee71e29b8f..5471db0b8fa6 100644 --- a/packages/mask/shared-ui/locales/en-US.json +++ b/packages/mask/shared-ui/locales/en-US.json @@ -336,12 +336,14 @@ "plugin_wallet_name_placeholder": "Enter 1-12 characters", "plugin_wallet_fail_to_sign": "Failed to sign password.", "plugin_wallet_cancel_sign": "Signature canceled.", + "plugin_nft_avatar_recommend_feature_description": "Set your NFT as profile picture with exclusive aura", "plugin_red_packet_display_name": "Plugin: Lucky Drop", + "application_hint": "Socialize and show off your NFTs. People can bid,buy, view your valuable NFTs without leaving Twitter.", "plugin_red_packet_claimed": "Claimed", "plugin_red_packet_erc20_tab_title": "Token", "plugin_red_packet_erc721_tab_title": "Collectibles", "plugin_red_packet_name": "Lucky Drop", - "plugin_red_packet_recommend_feature_description": "Surpirse your social friends with Lucky Drop", + "plugin_red_packet_recommend_feature_description": "Astonish your friends with a surprise gift", "plugin_red_packet_description": "Gift crypto or NFTs to any users, first come, first served.", "plugin_red_packet_erc721_insufficient_balance": "Insufficient Balance", "plugin_red_packet_details": "Lucky Drop Details", @@ -950,8 +952,6 @@ "popups_social_account": "Social Accounts", "popups_connected_wallets": "Connected Wallets", "popups_loading": "Loading", - "popups_wallet_disconnect_success": "Wallet disconnect successfully", - "popups_wallet_disconnect_failed": "Wallet disconnect failed", "popups_connect_your_web2_social_accounts": "Connect your web2 social accounts", "popups_connect_social_account": "Connect Social Account", "popups_disconnect_success": " Disconnect successfully. ", @@ -1018,6 +1018,7 @@ "popups_wallet_token_buy": "Buy", "popups_wallet_token_send": "Send", "popups_wallet_token_swap": "Swap", + "popups_wallet_disconnect_failed": "Wallet disconnect failed", "popups_wallet_view_on_explorer": "View on Explorer", "popups_wallet_gas_fee_settings": "Gas fee settings", "popups_wallet_gas_fee_settings_description": "Gas fees are the fees for paying ethereum miners. The miners prefer to pack transactions with higher gas fees. Transactions with low gas fees might fail, and the paid gas fees won’t be returned.", @@ -1029,7 +1030,6 @@ "popups_wallet_gas_fee_settings_max_priority_fee": "Max priority fee", "popups_wallet_gas_fee_settings_max_fee": "Max fee", "popups_wallet_gas_fee_settings_min_gas_limit_tips": "Gas limit must be at least {{limit}}", - "popups_wallet_unsupported_network": "Unsupported network type", "popups_wallet_signature_request_title": "Signature Request", "popups_wallet_signature_request": "Signature request", "popups_wallet_signature_request_message": "Message", @@ -1075,13 +1075,13 @@ "plugin_vcent_last_offer_at": "LATEST OFFER at", "nft_input_address_label": "Please input contract address", "nft_input_tokenid_label": "Please input token ID", - "nft_owner_hint": "This NFT does not exist or does not belong to you.", + "nft_owner_hint": "The contract address is incorrect or the collection does not belong to you", "nft_add_dialog_title": "Add Collectible", "nft_add_button_label": "Add", "nft_list_title": "NFT Avatar Setting", "nft_wallet_change": "Change", "nft_button_add_collectible": "Add Collectible", - "nft_avatar": "NFT Avatar", + "nft_avatar": "NFT PFP", "web3_tab_hint": "No address found.", "plugin_artblocks_not_active": "This project is no more active", "plugin_artblocks_completed": "Completed", @@ -1104,6 +1104,7 @@ "plugin_artblocks_blockchain_row": "Blockchain:", "plugin_artblocks_contract_row": "Contract:", "plugin_artblocks_smt_wrong": "Something went wrong!", + "popups_wallet_disconnect_success": "Wallet disconnect successfully", "plugin_artblocks_share": "I just purchased a beautiful piece of art from '{{name}}' collection for {{price}} {{symbol}}. Install @realMaskNetwork to get yours.", "plugin_artblocks_share_no_official_account": "I just purchased a beautiful piece of art from '{{name}}' collection for {{price}} {{symbol}}. Welcome to join.", "plugin_tips_disconnect_introduction": "Are you going to disconnect {{persona}} from wallet {{address}}?", @@ -1121,6 +1122,7 @@ "plugin_transak_description": "Fiat On-Ramp Aggregator on Twitter. Buy crypto in 60+ countries with Transak support.", "plugin_valuables_name": "Valuables", "plugin_valuables_description": "Buy & sell tweets autographed by their original creators.", + "popups_wallet_unsupported_network": "Unsupported network type", "plugin_default_title": "Default", "plugin_provider_by": "Provided by", "plugin_enables": "Enable plugins" diff --git a/packages/mask/shared-ui/locales/ko-KR.json b/packages/mask/shared-ui/locales/ko-KR.json index 309f9b81d1b8..03f0790092aa 100644 --- a/packages/mask/shared-ui/locales/ko-KR.json +++ b/packages/mask/shared-ui/locales/ko-KR.json @@ -721,7 +721,6 @@ "popups_wallet_gas_fee_settings_max_priority_fee": "최대 우선 가스비", "popups_wallet_gas_fee_settings_max_fee": "최대 가스비", "popups_wallet_gas_fee_settings_min_gas_limit_tips": "최소한 가스비는 {{limit}} 입니다", - "popups_wallet_unsupported_network": "지원되지 않는 네트워크", "popups_wallet_signature_request": "서명", "popups_wallet_signature_request_message": "메시지", "popups_wallet_contract_interaction": "컨트렉트 인터액션", diff --git a/packages/mask/shared-ui/locales/qya-AA.json b/packages/mask/shared-ui/locales/qya-AA.json index fa190e5951ae..2d3a312335e6 100644 --- a/packages/mask/shared-ui/locales/qya-AA.json +++ b/packages/mask/shared-ui/locales/qya-AA.json @@ -948,8 +948,6 @@ "popups_social_account": "crwdns16328:0crwdne16328:0", "popups_connected_wallets": "crwdns16330:0crwdne16330:0", "popups_loading": "crwdns16332:0crwdne16332:0", - "popups_wallet_disconnect_success": "crwdns16334:0crwdne16334:0", - "popups_wallet_disconnect_failed": "crwdns16336:0crwdne16336:0", "popups_connect_your_web2_social_accounts": "crwdns16338:0crwdne16338:0", "popups_connect_social_account": "crwdns16340:0crwdne16340:0", "popups_disconnect_success": "crwdns16342:0crwdne16342:0", @@ -1027,7 +1025,6 @@ "popups_wallet_gas_fee_settings_max_priority_fee": "crwdns7857:0crwdne7857:0", "popups_wallet_gas_fee_settings_max_fee": "crwdns7859:0crwdne7859:0", "popups_wallet_gas_fee_settings_min_gas_limit_tips": "crwdns8993:0{{limit}}crwdne8993:0", - "popups_wallet_unsupported_network": "crwdns8995:0crwdne8995:0", "popups_wallet_signature_request_title": "crwdns16386:0crwdne16386:0", "popups_wallet_signature_request": "crwdns7861:0crwdne7861:0", "popups_wallet_signature_request_message": "crwdns8059:0crwdne8059:0", diff --git a/packages/mask/shared-ui/locales/zh-CN.json b/packages/mask/shared-ui/locales/zh-CN.json index 8794b0935615..74cde5626191 100644 --- a/packages/mask/shared-ui/locales/zh-CN.json +++ b/packages/mask/shared-ui/locales/zh-CN.json @@ -837,7 +837,6 @@ "popups_wallet_gas_fee_settings_max_priority_fee": "Max priority fee", "popups_wallet_gas_fee_settings_max_fee": "Max fee", "popups_wallet_gas_fee_settings_min_gas_limit_tips": "Gas limit 必须至少 {{limit}}", - "popups_wallet_unsupported_network": "不支持的网络类型", "popups_wallet_signature_request": "签名请求", "popups_wallet_signature_request_message": "信息", "popups_wallet_contract_interaction": "合约交互", diff --git a/packages/mask/src/components/shared/ApplicationBoard.tsx b/packages/mask/src/components/shared/ApplicationBoard.tsx index 9f8b3016c9ae..bba3a2fd9cfc 100644 --- a/packages/mask/src/components/shared/ApplicationBoard.tsx +++ b/packages/mask/src/components/shared/ApplicationBoard.tsx @@ -4,7 +4,7 @@ import { Typography } from '@mui/material' import { useChainId } from '@masknet/web3-shared-evm' import { useActivatedPluginsSNSAdaptor } from '@masknet/plugin-infra/content-script' import { useCurrentWeb3NetworkPluginID, useAccount, NetworkPluginID } from '@masknet/plugin-infra/web3' -import { CrossIsolationMessages, formatPersonaPublicKey } from '@masknet/shared-base' +import { formatPersonaPublicKey } from '@masknet/shared-base' import { getCurrentSNSNetwork } from '../../social-network-adaptor/utils' import { activatedSocialNetworkUI } from '../../social-network' import { useI18N } from '../../utils' @@ -31,7 +31,7 @@ const useStyles = makeStyles<{ shouldScroll: boolean }>()((theme, props) => { gridGap: 10, justifyContent: 'space-between', height: 320, - width: props.shouldScroll ? 575 : 562, + width: props.shouldScroll ? 589 : 576, '::-webkit-scrollbar': { backgroundColor: 'transparent', width: 20, @@ -145,7 +145,9 @@ function ApplicationBoardContent(props: Props) { [snsAdaptorPlugins, currentWeb3Network, chainId, account], ) - const recommendFeatureAppList = applicationList.filter((x) => x.entry.recommendFeature) + const recommendFeatureAppList = applicationList + .filter((x) => x.entry.recommendFeature) + .sort((a, b) => (a.entry.appBoardSortingDefaultPriority ?? 0) - (b.entry.appBoardSortingDefaultPriority ?? 0)) const listedAppList = applicationList.filter((x) => !x.entry.recommendFeature).filter((x) => !getUnlistedApp(x)) const { classes } = useStyles({ shouldScroll: listedAppList.length > 12 }) @@ -208,7 +210,7 @@ function RenderEntryComponent({ application }: { application: Application }) { const verifyPersona = useCallback(() => { closeApplicationBoard() - CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) + ApplicationEntryStatus.personaNextIDReset?.() }, []) const clickHandler = (() => { @@ -225,6 +227,7 @@ function RenderEntryComponent({ application }: { application: Application }) { // #region tooltip hint const tooltipHint = (() => { + if (ApplicationEntryStatus.isLoading) return if (application.isWalletConnectedRequired) return t('application_tooltip_hint_connect_wallet') if (application.isWalletConnectedEVMRequired) return t('application_tooltip_hint_switch_to_evm_wallet') if (!application.entry.nextIdRequired) return @@ -261,6 +264,7 @@ interface ApplicationEntryStatusContextProps { currentPersonaPublicKey: string | undefined currentSNSConnectedPersonaPublicKey: string | undefined personaConnectAction: (() => void) | undefined + personaNextIDReset: (() => void) | undefined isLoading: boolean } @@ -274,6 +278,7 @@ const ApplicationEntryStatusContext = createContext) { const personaConnectStatus = usePersonaConnectStatus() const nextIDConnectStatus = useNextIDConnectStatus() - const { value: ApplicationCurrentStatus, retry } = usePersonaAgainstSNSConnectStatus() + const { + value: ApplicationCurrentStatus, + retry, + loading: personaAgainstSNSConnectStatusLoading, + } = usePersonaAgainstSNSConnectStatus() useEffect(() => { return MaskMessages.events.currentPersonaIdentifier.on(retry) @@ -294,6 +303,7 @@ function ApplicationEntryStatusProvider(props: PropsWithChildren<{}>) { ) { shouldVerifyNextId: Boolean(!nextIDConnectStatus.isVerified && ApplicationCurrentStatus), currentPersonaPublicKey, currentSNSConnectedPersonaPublicKey, - isLoading: nextIDConnectStatus.loading, + isLoading: nextIDConnectStatus.loading || personaAgainstSNSConnectStatusLoading, }}> {props.children} diff --git a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx index 5e5d47c7e912..e1ae1c7860e9 100644 --- a/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx +++ b/packages/mask/src/components/shared/ApplicationSettingPluginList.tsx @@ -24,7 +24,7 @@ export function getUnlistedApp(app: Application): boolean { } // #endregion -const useStyles = makeStyles()((theme) => ({ +const useStyles = makeStyles<{ iconFilterColor?: string }>()((theme, { iconFilterColor }) => ({ list: { display: 'grid', gap: theme.spacing(2, 1), @@ -54,6 +54,9 @@ const useStyles = makeStyles()((theme) => ({ width: 36, height: 36, }, + ...(iconFilterColor + ? { filter: `drop-shadow(0px 6px 12px ${iconFilterColor})`, backdropFilter: 'blur(16px)' } + : {}), }, loadingWrapper: { display: 'flex', @@ -77,7 +80,7 @@ const useStyles = makeStyles()((theme) => ({ })) export function ApplicationSettingPluginList() { - const { classes } = useStyles() + const { classes } = useStyles({ iconFilterColor: undefined }) const { t } = useI18N() const snsAdaptorPlugins = useActivatedPluginsSNSAdaptor('any') const applicationList = useMemo(() => { @@ -123,7 +126,7 @@ interface AppListProps { function AppList(props: AppListProps) { const { appList, setUnlistedApp, isListed } = props - const { classes } = useStyles() + const { classes } = useStyles({ iconFilterColor: undefined }) const { t } = useI18N() return appList.length > 0 ? ( @@ -156,7 +159,7 @@ interface AppListItemProps { function AppListItem(props: AppListItemProps) { const { application, setUnlistedApp, isListed } = props - const { classes } = useStyles() + const { classes } = useStyles({ iconFilterColor: application.entry.iconFilterColor }) return ( setUnlistedApp(application, isListed)}>

{application.entry.icon}
diff --git a/packages/mask/src/extension/popups/pages/Personas/ConnectedWallets/index.tsx b/packages/mask/src/extension/popups/pages/Personas/ConnectedWallets/index.tsx index b47e4de10d78..09e057afa2b9 100644 --- a/packages/mask/src/extension/popups/pages/Personas/ConnectedWallets/index.tsx +++ b/packages/mask/src/extension/popups/pages/Personas/ConnectedWallets/index.tsx @@ -12,12 +12,15 @@ import type { ConnectedWalletInfo } from '../type' import { NextIDProof } from '@masknet/web3-providers' import Service from '../../../../service' import { usePopupCustomSnackbar } from '@masknet/theme' +import { useLocation, useNavigate } from 'react-router-dom' const ConnectedWallets = memo(() => { const { t } = useI18N() const chainId = useChainId() const { NameService } = useWeb3State() const wallets = useWallets() + const navigate = useNavigate() + const location = useLocation() const { proofs, currentPersona, refreshProofs, fetchProofsLoading } = PersonaContext.useContainer() const { showSnackbar } = usePopupCustomSnackbar() @@ -107,6 +110,13 @@ const ConnectedWallets = memo(() => { ) const navigateToConnectWallet = async () => { + const params = new URLSearchParams(location.search) + const internal = params.get('internal') + + if (internal) { + navigate(PopupRoutes.ConnectWallet) + return + } await Service.Helper.openPopupWindow(PopupRoutes.ConnectWallet) window.close() } diff --git a/packages/mask/src/plugins/Avatar/Application/NFTAvatar.tsx b/packages/mask/src/plugins/Avatar/Application/NFTAvatar.tsx new file mode 100644 index 000000000000..33205b509739 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/NFTAvatar.tsx @@ -0,0 +1,46 @@ +import { EnhanceableSite } from '@masknet/shared-base' +import { Avatar, Stack } from '@mui/material' +import { PointIcon } from '../assets/point' +import { TwitterIcon } from '../assets/twitter' +import { RainbowBox } from '../SNSAdaptor/RainbowBox' + +export const SOCIAL_MEDIA_ICON_MAPPING: Record = { + [EnhanceableSite.Twitter]: , + [EnhanceableSite.Localhost]: null, +} + +interface NFTAvatarProps { + hasBorder: boolean + platform?: string + avatar?: string + owner?: boolean +} + +export function NFTAvatar(props: NFTAvatarProps) { + const { avatar, hasBorder, platform = '', owner = false } = props + + return ( + + {hasBorder ? ( + + + + ) : ( + + )} + + + {SOCIAL_MEDIA_ICON_MAPPING[EnhanceableSite.Twitter]} + + {owner ? : null} + + ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx b/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx new file mode 100644 index 000000000000..d76817e316b6 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/NFTAvatarsDialog.tsx @@ -0,0 +1,106 @@ +import { useCallback, useState } from 'react' +import { NFTListDialog } from './NFTListDialog' +import { InjectedDialog } from '@masknet/shared' +import { UploadAvatarDialog } from './UploadAvatarDialog' +import type { BindingProof } from '@masknet/shared-base' +import type { SelectTokenInfo, TokenInfo } from '../types' +import { PersonaPage } from './PersonaPage' +import { DialogContent } from '@mui/material' +import { useI18N } from '../locales/i18n_generated' +import { isSameAddress } from '@masknet/web3-shared-evm' +import { makeStyles } from '@masknet/theme' + +const useStyles = makeStyles()((theme) => ({ + root: { + margin: 0, + padding: '1px !important', + '::-webkit-scrollbar': { + backgroundColor: 'transparent', + width: 20, + }, + '::-webkit-scrollbar-thumb': { + borderRadius: '20px', + width: 5, + border: '7px solid rgba(0, 0, 0, 0)', + backgroundColor: theme.palette.mode === 'dark' ? 'rgba(250, 250, 250, 0.2)' : 'rgba(0, 0, 0, 0.2)', + backgroundClip: 'padding-box', + }, + }, +})) +enum CreateNFTAvatarStep { + Persona = 'persona', + NFTList = 'NFTList', + UploadAvatar = 'UploadAvatar', +} + +interface NFTAvatarsDialogProps { + open: boolean + onClose: () => void +} + +export function NFTAvatarDialog(props: NFTAvatarsDialogProps) { + const [step, setStep] = useState(CreateNFTAvatarStep.Persona) + const [wallets, setWallets] = useState() + const [selectedTokenInfo, setSelectedTokenInfo] = useState() + const [tokenInfo, setTokenInfo] = useState() + const [proof, setProof] = useState() + const t = useI18N() + const { classes } = useStyles() + + const onPersonaChange = (proof: BindingProof, wallets?: BindingProof[], tokenInfo?: TokenInfo) => { + setWallets(wallets) + setTokenInfo(tokenInfo) + setProof(proof) + } + + const onSelected = (info: SelectTokenInfo) => { + setSelectedTokenInfo(info) + } + + const onNext = useCallback(() => { + if (step === CreateNFTAvatarStep.Persona) setStep(CreateNFTAvatarStep.NFTList) + else if (step === CreateNFTAvatarStep.NFTList) setStep(CreateNFTAvatarStep.UploadAvatar) + }, [step]) + + const onBack = useCallback(() => { + if (step === CreateNFTAvatarStep.UploadAvatar) setStep(CreateNFTAvatarStep.NFTList) + else if (step === CreateNFTAvatarStep.NFTList) setStep(CreateNFTAvatarStep.Persona) + else props.onClose() + }, [step]) + + const onClose = useCallback(() => { + setStep(CreateNFTAvatarStep.Persona) + props.onClose() + }, [props.onClose]) + + return ( + + + {step === CreateNFTAvatarStep.Persona ? ( + + ) : null} + {step === CreateNFTAvatarStep.NFTList ? ( + + ) : null} + {step === CreateNFTAvatarStep.UploadAvatar ? ( + isSameAddress(x.identity, selectedTokenInfo?.account))} + account={selectedTokenInfo?.account} + image={selectedTokenInfo?.image} + token={selectedTokenInfo?.token} + onBack={onBack} + onClose={onClose} + /> + ) : null} + + + ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/NFTInfo.tsx b/packages/mask/src/plugins/Avatar/Application/NFTInfo.tsx new file mode 100644 index 000000000000..77647436ee5a --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/NFTInfo.tsx @@ -0,0 +1,65 @@ +import { Box, CircularProgress, Link, Stack, Typography } from '@mui/material' +import { makeStyles, useStylesExtends } from '@masknet/theme' +import { LinkIcon } from '../assets/link' +import { ChainId, resolveOpenSeaLink } from '@masknet/web3-shared-evm' +import { formatTokenId } from '../utils' +import { useI18N } from '../locales/i18n_generated' +import { ApplicationRoundIcon } from '../assets/application' +import { formatPersonaName } from '@masknet/shared-base' + +const useStyles = makeStyles()(() => ({ + root: { + width: 160, + }, + nft: { + display: 'flex', + alignItems: 'center', + }, +})) +interface NFTInfoProps extends withClasses<'root'> { + nft?: { name: string; address: string; tokenId: string; symbol: string; chainId: ChainId } + owner: boolean + loading?: boolean +} + +export function NFTInfo(props: NFTInfoProps) { + const { nft, owner, loading = false } = props + const classes = useStylesExtends(useStyles(), props) + const t = useI18N() + + if (loading) return + return ( + + {!nft ? ( + + {t.persona_set_nft()} + + ) : !owner ? ( + + {t.persona_verification_failed()} + + ) : ( + + + + + {formatPersonaName(nft.name.replace(/#\d+/, ''))} + + + + {formatTokenId(nft.symbol, nft.tokenId)} + + + + + + + + )} + + ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/NFTList.tsx b/packages/mask/src/plugins/Avatar/Application/NFTList.tsx new file mode 100644 index 000000000000..eb9615527ce4 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/NFTList.tsx @@ -0,0 +1,103 @@ +import { makeStyles, useTabs } from '@masknet/theme' +import { ChainId, ERC721TokenDetailed } from '@masknet/web3-shared-evm' +import { TabContext, TabPanel } from '@mui/lab' +import { Tab, Tabs, Typography } from '@mui/material' +import { Application_NFT_LIST_PAGE, SUPPORTED_CHAIN_IDS } from '../constants' +import type { TokenInfo } from '../types' +import { NFTListPage } from './NFTListPage' + +const useStyles = makeStyles<{ currentTab: Application_NFT_LIST_PAGE }>()((theme, props) => ({ + selected: { + backgroundColor: theme.palette.mode === 'dark' ? 'black' : 'white', + border: 'none', + borderTop: `1px solid ${theme.palette.mode === 'dark' ? '#2F3336' : '#EFF3F4'}`, + color: `${theme.palette.text.primary} !important`, + minHeight: 37, + height: 37, + zIndex: 1, + }, + tab: { + backgroundColor: theme.palette.mode === 'dark' ? '#15171A' : '#F6F8F8', + color: theme.palette.text.secondary, + border: `1px solid ${theme.palette.mode === 'dark' ? '#2F3336' : '#EFF3F4'}`, + minHeight: 37, + height: 37, + zIndex: 1, + }, + tabPanel: { + padding: theme.spacing(1), + paddingTop: 50, + paddingBottom: 80, + }, +})) +interface NFTListProps { + address: string + tokenInfo?: TokenInfo + onSelect: (token: ERC721TokenDetailed) => void + onChangePage?: (page: Application_NFT_LIST_PAGE) => void + tokens?: ERC721TokenDetailed[] + children?: React.ReactElement +} + +export function NFTList(props: NFTListProps) { + const { address, onSelect, tokenInfo, onChangePage, tokens = [], children } = props + + const [currentTab, onChange, tabs] = useTabs( + Application_NFT_LIST_PAGE.Application_nft_tab_eth_page, + Application_NFT_LIST_PAGE.Application_nft_tab_polygon_page, + ) + + const { classes } = useStyles({ currentTab }) + const _onChange = (event: unknown, value: any) => { + onChange(event, value) + onChangePage?.(value) + } + + if (!address) return null + return ( + + + {SUPPORTED_CHAIN_IDS.map((x, i) => { + const curChainId = currentTab === tabs.ETH ? ChainId.Mainnet : ChainId.Matic + return ( + + {x === ChainId.Mainnet + ? Application_NFT_LIST_PAGE.Application_nft_tab_eth_page + : Application_NFT_LIST_PAGE.Application_nft_tab_polygon_page} +
+ } + value={x === ChainId.Mainnet ? tabs.ETH : tabs.Polygon} + className={curChainId === x ? classes.selected : classes.tab} + /> + ) + })} + + {SUPPORTED_CHAIN_IDS.map((x, i) => ( + + y.contractDetailed.chainId === x) ?? []} + tokenInfo={tokenInfo} + chainId={x} + address={address} + onSelect={onSelect} + children={children} + /> + + ))} + + ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/NFTListDialog.tsx b/packages/mask/src/plugins/Avatar/Application/NFTListDialog.tsx new file mode 100644 index 000000000000..1488f4fc3deb --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/NFTListDialog.tsx @@ -0,0 +1,279 @@ +import { makeStyles, useCustomSnackbar } from '@masknet/theme' +import { ChainId, ERC721TokenDetailed, isSameAddress, SocketState, useCollectibles } from '@masknet/web3-shared-evm' +import { Box, Button, DialogActions, DialogContent, Skeleton, Stack, Typography } from '@mui/material' +import { useCallback, useState, useEffect } from 'react' +import { downloadUrl } from '../../../utils' +import { AddNFT } from '../SNSAdaptor/AddNFT' +import type { BindingProof } from '@masknet/shared-base' +import type { SelectTokenInfo, TokenInfo } from '../types' +import { range, uniqBy } from 'lodash-unified' +import { Translate, useI18N } from '../locales' +import { AddressNames } from './WalletList' +import { NFTList } from './NFTList' +import { Application_NFT_LIST_PAGE } from '../constants' +import { NetworkPluginID, useAccount, useCurrentWeb3NetworkPluginID } from '@masknet/plugin-infra/web3' +import { NFTWalletConnect } from './WalletConnect' + +const useStyles = makeStyles()((theme) => ({ + AddressNames: { + position: 'absolute', + top: 10, + right: 10, + }, + + button: { + width: 219.5, + borderRadius: 999, + }, + AddCollectiblesButton: { + fontWeight: 600, + color: '#1D9BF0', + }, + actions: { + padding: theme.spacing(2), + backgroundColor: theme.palette.mode === 'dark' ? 'black' : 'white', + position: 'absolute', + left: 0, + bottom: 0, + width: 'calc(100% - 32px)', + }, + content: { + height: 612, + padding: 0, + backgroundColor: theme.palette.mode === 'dark' ? 'black' : 'white', + }, + error: { + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + margin: 'auto', + paddingTop: 260, + }, + skeleton: { + width: 97, + height: 97, + objectFit: 'cover', + borderRadius: '100%', + boxSizing: 'border-box', + padding: 6, + margin: theme.spacing(0.5, 1), + }, + skeletonBox: { + marginLeft: 'auto', + marginRight: 'auto', + }, + gallery: { + display: 'flex', + flexFlow: 'row wrap', + overflowY: 'auto', + '&::-webkit-scrollbar': { + display: 'none', + }, + }, +})) + +function isSameToken(token?: ERC721TokenDetailed, tokenInfo?: TokenInfo) { + if (!token && !tokenInfo) return false + return isSameAddress(token?.contractDetailed.address, tokenInfo?.address) && token?.tokenId === tokenInfo?.tokenId +} +interface NFTListDialogProps { + onNext: () => void + tokenInfo?: TokenInfo + wallets?: BindingProof[] + onSelected: (info: SelectTokenInfo) => void +} + +export function NFTListDialog(props: NFTListDialogProps) { + const { onNext, wallets, onSelected, tokenInfo } = props + const { classes } = useStyles() + + const account = useAccount() + const [open_, setOpen_] = useState(false) + const [selectedAccount, setSelectedAccount] = useState('') + const [selectedToken, setSelectedToken] = useState() + const [disabled, setDisabled] = useState(false) + const t = useI18N() + const [tokens, setTokens] = useState([]) + const [currentPage, setCurrentPage] = useState( + Application_NFT_LIST_PAGE.Application_nft_tab_eth_page, + ) + + const POLYGON_PAGE = Application_NFT_LIST_PAGE.Application_nft_tab_polygon_page + + const currentPluginId = useCurrentWeb3NetworkPluginID() + const { + data: collectibles, + error, + retry, + state, + } = useCollectibles(selectedAccount, currentPage !== POLYGON_PAGE ? ChainId.Mainnet : ChainId.Matic) + + const { showSnackbar } = useCustomSnackbar() + const onChange = useCallback((address: string) => { + setSelectedAccount(address) + }, []) + + const onSelect = (token: ERC721TokenDetailed) => { + setSelectedToken(token) + } + + const onSave = useCallback(async () => { + if (!selectedToken?.info?.imageURL) return + setDisabled(true) + try { + const image = await downloadUrl(selectedToken.info.imageURL) + onSelected({ image: URL.createObjectURL(image), account: selectedAccount, token: selectedToken }) + onNext() + setDisabled(false) + } catch (error) { + console.log(error) + } + setDisabled(false) + }, [selectedToken, selectedAccount]) + + const onClick = useCallback(() => { + if (!account && !wallets?.length) { + showSnackbar('Please connect your wallet!', { variant: 'error' }) + return + } + setOpen_(true) + }, [account, wallets, showSnackbar]) + + useEffect(() => { + setDisabled(!selectedToken || isSameToken(selectedToken, tokenInfo)) + }, [selectedToken, tokenInfo]) + + useEffect(() => setSelectedAccount(account || wallets?.[0]?.identity || ''), [account, wallets]) + + const onAddClick = (token: ERC721TokenDetailed) => { + setTokens((_tokens) => uniqBy([..._tokens, token], (x) => x.contractDetailed.address && x.tokenId)) + } + + const onChangePage = (name: Application_NFT_LIST_PAGE) => { + setCurrentPage(name) + setSelectedToken(undefined) + } + + const AddCollectible = ( + + + {currentPluginId !== NetworkPluginID.PLUGIN_EVM ? ( + , + }} + /> + ) : currentPage === POLYGON_PAGE ? ( + , + }} + /> + ) : ( + t.collectible_no_eth() + )} + + {currentPluginId === NetworkPluginID.PLUGIN_EVM ? ( + + ) : null} + + ) + + const LoadStatus = ( +
+ {range(8).map((i) => ( + + ))} +
+ ) + + const Retry = ( + + {t.no_collectible_found()} + + + ) + + const NoNFTList = () => { + if (currentPage === POLYGON_PAGE && tokens.length === 0) return AddCollectible + else if (currentPage === POLYGON_PAGE && tokens.length) return + if (state !== SocketState.done) { + return LoadStatus + } + if (error) { + return Retry + } + if (tokens.length === 0 && collectibles.length === 0) { + return AddCollectible + } + + return + } + + if (!wallets?.length && (currentPluginId !== NetworkPluginID.PLUGIN_EVM || !account)) + return ( + + + + ) + + return ( + <> + + + {((account && currentPluginId === NetworkPluginID.PLUGIN_EVM) || Boolean(wallets?.length)) && ( + x.contractDetailed.address && x.tokenId)} + children={NoNFTList()} + /> + )} + + + {tokens.length || collectibles.length ? ( + + + {t.collectible_not_found()} + + + {t.add_collectible()} + + + ) : null} + + + + setOpen_(false)} + onAddClick={onAddClick} + /> + + ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/NFTListPage.tsx b/packages/mask/src/plugins/Avatar/Application/NFTListPage.tsx new file mode 100644 index 000000000000..065ead46a817 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/NFTListPage.tsx @@ -0,0 +1,118 @@ +import { makeStyles } from '@masknet/theme' +import { + ChainId, + createERC721Token, + ERC721TokenDetailed, + EthereumTokenType, + useImageChecker, +} from '@masknet/web3-shared-evm' +import { Box, Skeleton } from '@mui/material' +import { useState } from 'react' +import { NFTImage } from '../SNSAdaptor/NFTImage' +import type { TokenInfo } from '../types' + +const useStyles = makeStyles()((theme) => ({ + root: {}, + + button: { + textAlign: 'center', + paddingTop: theme.spacing(1), + display: 'flex', + justifyContent: 'space-around', + flexDirection: 'row', + color: '#1D9BF0', + }, + gallery: { + display: 'flex', + flexFlow: 'row wrap', + overflowY: 'auto', + '&::-webkit-scrollbar': { + display: 'none', + }, + }, + skeleton: { + width: 97, + height: 97, + objectFit: 'cover', + borderRadius: '100%', + boxSizing: 'border-box', + padding: 6, + margin: theme.spacing(0.5, 1), + }, + skeletonBox: { + marginLeft: 'auto', + marginRight: 'auto', + }, +})) + +interface NFTListPageProps { + chainId: ChainId + address: string + tokenInfo?: TokenInfo + tokens: ERC721TokenDetailed[] + onSelect?: (token: ERC721TokenDetailed) => void + children?: React.ReactElement +} + +export function NFTListPage(props: NFTListPageProps) { + const { classes } = useStyles() + const { onSelect, chainId, tokenInfo, tokens, children } = props + const [selectedToken, setSelectedToken] = useState( + tokenInfo + ? createERC721Token( + { + name: '', + address: tokenInfo.address, + chainId, + symbol: '', + type: EthereumTokenType.ERC721, + }, + {}, + tokenInfo.tokenId, + ) + : undefined, + ) + + const onChange = (token: ERC721TokenDetailed) => { + if (!token) return + setSelectedToken(token) + onSelect?.(token) + } + + return ( + <> + + + {children ?? + tokens.map((token: ERC721TokenDetailed, i) => ( + onChange(token)} + /> + ))} + + + + ) +} + +interface NFTImageCollectibleAvatarProps { + token: ERC721TokenDetailed + onChange: (token: ERC721TokenDetailed) => void + selectedToken?: ERC721TokenDetailed +} + +function NFTImageCollectibleAvatar({ token, onChange, selectedToken }: NFTImageCollectibleAvatarProps) { + const { classes } = useStyles() + const { value: isImageToken, loading } = useImageChecker(token.info?.imageURL) + + if (loading) + return ( +
+ +
+ ) + return isImageToken ? : null +} diff --git a/packages/mask/src/plugins/Avatar/Application/PersonaItem.tsx b/packages/mask/src/plugins/Avatar/Application/PersonaItem.tsx new file mode 100644 index 000000000000..7aee1cc9a42c --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/PersonaItem.tsx @@ -0,0 +1,94 @@ +import { makeStyles } from '@masknet/theme' +import { Box, Typography, ListItemButton } from '@mui/material' +import { NFTAvatar } from './NFTAvatar' +import { NFTInfo } from './NFTInfo' +import { MoreIcon } from '../assets/more' +import { RSS3_KEY_SNS } from '../constants' +import { useCheckTokenOwner, useTokenOwner } from '../hooks/useTokenOwner' +import { getAvatarId } from '../../../social-network-adaptor/twitter.com/utils/user' +import type { TokenInfo } from '../types' +import { useCallback } from 'react' +import type { BindingProof } from '@masknet/shared-base' +import { usePersonaNFTAvatar } from '../hooks/usePersonaNFTAvatar' +import { ChainId } from '@masknet/web3-shared-evm' + +const useStyles = makeStyles<{ disabled: boolean }>()((theme, props) => ({ + root: { + margin: theme.spacing(2, 0.5), + border: `1px solid ${theme.palette.divider}`, + borderRadius: 16, + padding: 16, + display: 'flex', + alignItems: 'center', + cursor: 'pointer', + }, + + userInfo: { + fontSize: 14, + marginLeft: 16, + flex: 1, + }, +})) + +interface PersonaItemProps { + owner?: boolean + avatar: string + userId: string + nickname?: string + proof?: BindingProof + onSelect?: (proof: BindingProof, tokenInfo?: TokenInfo) => void +} + +export function PersonaItem(props: PersonaItemProps) { + const { userId, onSelect, owner = false, proof, avatar, nickname = '' } = props + const { classes } = useStyles({ disabled: !owner }) + const { value: _avatar, loading } = usePersonaNFTAvatar(userId, getAvatarId(avatar) ?? '', RSS3_KEY_SNS.TWITTER) + const { value: token, loading: loadingToken } = useTokenOwner( + _avatar?.address ?? '', + _avatar?.tokenId ?? '', + _avatar?.chainId, + ) + const { loading: loadingCheckOwner, isOwner } = useCheckTokenOwner(userId, token?.owner) + + const onClick = useCallback(() => { + if (!proof) return + onSelect?.(proof, _avatar && isOwner ? { address: _avatar?.address, tokenId: _avatar?.tokenId } : undefined) + }, [_avatar, proof]) + + return ( + + + + + {nickname || _avatar?.nickname} + + + @{userId} + + + + + + + + ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/PersonaPage.tsx b/packages/mask/src/plugins/Avatar/Application/PersonaPage.tsx new file mode 100644 index 000000000000..38a67e5b0312 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/PersonaPage.tsx @@ -0,0 +1,107 @@ +import { BindingProof, NextIDPlatform } from '@masknet/shared-base' +import { makeStyles } from '@masknet/theme' +import { Box, CircularProgress, DialogContent, Stack, Typography } from '@mui/material' +import { useCallback, useState } from 'react' +import { useSubscription } from 'use-subscription' +import { CloseIcon } from '../assets/close' +import { context } from '../context' +import { usePersonas } from '../hooks/usePersonas' +import { useI18N } from '../locales/i18n_generated' +import type { TokenInfo } from '../types' +import { PersonaItem } from './PersonaItem' +import { InfoIcon } from '../assets/info' +import { useMyPersonas } from '../../../components/DataSource/useMyPersonas' + +const useStyles = makeStyles()((theme) => ({ + messageBox: { + display: 'flex', + borderRadius: 4, + padding: 8, + backgroundColor: theme.palette.mode === 'dark' ? '#15171A' : '#F9F9F9', + fontSize: 14, + alignItems: 'center', + color: theme.palette.text.primary, + }, +})) + +interface PersonaPageProps { + onNext: () => void + onClose(): void + onChange: (proof: BindingProof, wallets?: BindingProof[], tokenInfo?: TokenInfo) => void +} + +export function PersonaPage(props: PersonaPageProps) { + const { onNext, onChange, onClose } = props + const [visible, setVisible] = useState(true) + const currentIdentity = useSubscription(context.lastRecognizedProfile) + const { classes } = useStyles() + const { loading, value: persona } = usePersonas() + const myPersonas = useMyPersonas() + const t = useI18N() + + const onSelect = useCallback( + (proof: BindingProof, tokenInfo?: TokenInfo) => { + onChange(proof, persona?.wallets, tokenInfo) + onNext() + }, + [persona?.wallets], + ) + + return ( + + {loading ? ( + + + + ) : ( + <> + {visible ? ( + + + + {t.persona_hint()} + + setVisible(false)} /> + + ) : null} + {persona?.binds?.proofs + .filter((proof) => proof.platform === NextIDPlatform.Twitter) + .filter((x) => x.identity.toLowerCase() === currentIdentity?.identifier?.userId.toLowerCase()) + .map((x, i) => ( + + ))} + + {myPersonas?.[0] && + myPersonas[0].linkedProfiles + .filter((x) => x.identifier.network === currentIdentity?.identifier?.network) + .map((x, i) => + persona?.binds.proofs.some( + (y) => y.identity === x.identifier.userId.toLowerCase(), + ) ? null : ( + + ), + )} + {persona?.binds?.proofs + .filter((proof) => proof.platform === NextIDPlatform.Twitter) + .filter((x) => x.identity.toLowerCase() !== currentIdentity?.identifier?.userId.toLowerCase()) + .map((x, i) => ( + + ))} + + )} + + ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/UploadAvatarDialog.tsx b/packages/mask/src/plugins/Avatar/Application/UploadAvatarDialog.tsx new file mode 100644 index 000000000000..c310ea817d8e --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/UploadAvatarDialog.tsx @@ -0,0 +1,202 @@ +import { Button, DialogActions, DialogContent, Slider } from '@mui/material' +import AvatarEditor from 'react-avatar-editor' +import { makeStyles, useCustomSnackbar } from '@masknet/theme' +import { useCallback, useState } from 'react' +import { NextIDStorage, Twitter, TwitterBaseAPI } from '@masknet/web3-providers' +import type { ERC721TokenDetailed } from '@masknet/web3-shared-evm' +import { getAvatarId } from '../../../social-network-adaptor/twitter.com/utils/user' +import { usePersonaConnectStatus } from '../../../components/DataSource/usePersonaConnectStatus' +import { BindingProof, fromHex, PersonaIdentifier, ProfileIdentifier, toBase64 } from '@masknet/shared-base' +import type { NextIDAvatarMeta } from '../types' +import { useI18N } from '../locales/i18n_generated' +import { context } from '../context' +import { PluginNFTAvatarRPC } from '../messages' +import { PLUGIN_ID, RSS3_KEY_SNS } from '../constants' +import { useSubscription } from 'use-subscription' +import Services from '../../../extension/service' + +const useStyles = makeStyles()((theme) => ({ + actions: { + padding: theme.spacing(0, 2, 2, 2), + }, + cancel: { + backgroundColor: theme.palette.background.default, + color: theme.palette.mode === 'dark' ? '#FFFFFF' : '#111418', + border: 'none', + '&:hover': { + border: 'none', + }, + }, +})) + +interface UploadAvatarDialogProps { + account?: string + isBindAccount?: boolean + image?: string | File + token?: ERC721TokenDetailed + proof?: BindingProof + onBack: () => void + onClose: () => void +} + +type AvatarInfo = TwitterBaseAPI.AvatarInfo & { avatarId: string } + +async function saveToRSS3(info: NextIDAvatarMeta, account: string, identifier: ProfileIdentifier) { + const avatar = await PluginNFTAvatarRPC.saveNFTAvatar( + account, + info, + identifier.network, + RSS3_KEY_SNS.TWITTER, + ).catch((error) => { + console.log(error) + return + }) + return avatar +} + +async function saveToNextID(info: NextIDAvatarMeta, persona?: PersonaIdentifier, proof?: BindingProof) { + if (!proof?.identity || !persona?.publicKeyAsHex) return + const payload = await NextIDStorage.getPayload( + persona.publicKeyAsHex, + proof?.platform, + proof?.identity, + info, + PLUGIN_ID, + ) + if (!payload.ok) { + return + } + const result = await Services.Identity.generateSignResult(persona, payload.val.signPayload) + if (!result) return + const response = await NextIDStorage.set( + payload.val.uuid, + persona.publicKeyAsHex, + toBase64(fromHex(result.signature.signature)), + proof.platform, + proof.identity, + payload.val.createdAt, + info, + PLUGIN_ID, + ) + return response.ok +} + +async function Save( + account: string, + isBindAccount: boolean, + token: ERC721TokenDetailed, + data: AvatarInfo, + persona: PersonaIdentifier, + proof: BindingProof, + identifier: ProfileIdentifier, +) { + if (!data) return false + + const info: NextIDAvatarMeta = { + nickname: data.nickname, + userId: data.userId, + imageUrl: data.imageUrl, + avatarId: data.avatarId, + address: token.contractDetailed.address, + tokenId: token.tokenId, + chainId: token.contractDetailed.chainId, + } + + if (isBindAccount) { + return saveToNextID(info, persona, proof) + } + return saveToRSS3(info, account, identifier) +} + +async function uploadAvatar(blob: Blob, userId: string): Promise { + try { + const media = await Twitter.uploadUserAvatar(userId, blob) + const data = await Twitter.updateProfileImage(userId, media.media_id_string) + if (!data) { + return + } + const avatarId = getAvatarId(data?.imageUrl ?? '') + return { ...data, avatarId } + } catch (err) { + return + } +} +export function UploadAvatarDialog(props: UploadAvatarDialogProps) { + const { image, account, token, onClose, onBack, proof, isBindAccount = false } = props + const { classes } = useStyles() + const identifier = useSubscription(context.currentVisitingProfile) + const [editor, setEditor] = useState(null) + const [scale, setScale] = useState(1) + const { showSnackbar } = useCustomSnackbar() + const [disabled, setDisabled] = useState(false) + const { currentConnectedPersona } = usePersonaConnectStatus() + const t = useI18N() + + const onSave = useCallback(() => { + if (!editor) return + editor.getImage().toBlob(async (blob) => { + if (!blob || !account || !token || !currentConnectedPersona?.linkedProfiles[0].identifier || !proof) return + setDisabled(true) + + const avatarData = await uploadAvatar(blob, currentConnectedPersona?.linkedProfiles[0].identifier.userId) + if (!avatarData) { + setDisabled(false) + return + } + + const response = await Save( + account, + isBindAccount, + token, + avatarData, + currentConnectedPersona.identifier, + proof, + currentConnectedPersona.linkedProfiles[0].identifier, + ) + + if (!response) { + showSnackbar(t.upload_avatar_failed_message(), { variant: 'error' }) + setDisabled(false) + return + } + showSnackbar(t.upload_avatar_success_message(), { variant: 'success' }) + location.reload() + onClose() + setDisabled(false) + }) + }, [account, editor, identifier, onClose, currentConnectedPersona, proof, isBindAccount]) + + if (!account || !image || !token || !proof) return null + + return ( + <> + + setEditor(e)} + image={image!} + border={50} + style={{ width: '100%', height: '100%' }} + scale={scale ?? 1} + rotate={0} + borderRadius={300} + /> + setScale(value as number)} + aria-label="Scale" + /> + + + + + + + ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/WalletConnect.tsx b/packages/mask/src/plugins/Avatar/Application/WalletConnect.tsx new file mode 100644 index 000000000000..14f261fad9cd --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/WalletConnect.tsx @@ -0,0 +1,114 @@ +import { WalletMessages } from '@masknet/plugin-wallet' +import { useRemoteControlledDialog } from '@masknet/shared-base-ui' +import { makeStyles, useStylesExtends } from '@masknet/theme' +import { resolveProviderHomeLink, useProviderType } from '@masknet/web3-shared-evm' +import { Box, Button, Link, Typography } from '@mui/material' +import { WalletIcon } from '../assets/wallet' +import LaunchIcon from '@mui/icons-material/Launch' +import { useI18N } from '../locales/i18n_generated' +import type { HTMLProps } from 'react' +import { ApplicationSmallIcon } from '../assets/application' +import { NetworkPluginID } from '@masknet/plugin-infra/web3' + +const useStyles = makeStyles()((theme) => ({ + root: { + background: + 'linear-gradient(180deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%), linear-gradient(90deg, rgba(28, 104, 243, 0.2) 0%, rgba(249, 55, 55, 0.2) 100%), #FFFFFF', + borderRadius: 16, + padding: 14, + position: 'relative', + height: 196, + margin: theme.spacing(2), + }, + title: { + display: 'flex', + color: '#07101b', + }, + button: { + textAlign: 'center', + alignItems: 'center', + position: 'absolute', + bottom: 16, + width: '100%', + }, + link: { + padding: 0, + marginLeft: theme.spacing(0.5), + marginTop: 2, + color: '#6E767D', + }, + rectangle: { + marginLeft: theme.spacing(1), + marginTop: theme.spacing(6), + }, +})) + +interface NFTWalletConnectProps extends withClasses<'root'> {} + +export function NFTWalletConnect(props: NFTWalletConnectProps) { + const classes = useStylesExtends(useStyles(), props) + const providerType = useProviderType() + const t = useI18N() + + const { setDialog: openSelectProviderDialog } = useRemoteControlledDialog( + WalletMessages.events.selectProviderDialogUpdated, + ) + return ( + + + + + {t.application_dialog_title()} + + + + {t.provider_by()} + + + Mask Network + + + + + + + + + + + ) +} + +const useRectangleStyles = makeStyles()(() => ({ + rectangle: { + height: 8, + background: 'rgba(255, 255, 255, 0.5)', + borderRadius: 8, + }, +})) +interface RectangleProps extends HTMLProps {} + +export function Rectangle(props: RectangleProps) { + const { classes } = useRectangleStyles() + return ( +
+
+
+
+
+ ) +} diff --git a/packages/mask/src/plugins/Avatar/Application/WalletList.tsx b/packages/mask/src/plugins/Avatar/Application/WalletList.tsx new file mode 100644 index 000000000000..aebe972e725b --- /dev/null +++ b/packages/mask/src/plugins/Avatar/Application/WalletList.tsx @@ -0,0 +1,331 @@ +import { ImageIcon, useSnackbarCallback } from '@masknet/shared' +import { makeStyles, MaskColorVar, ShadowRootMenu, ShadowRootTooltip, useStylesExtends } from '@masknet/theme' +import { isSameAddress } from '@masknet/web3-shared-evm' +import { Button, Divider, IconProps, Link, ListItemIcon, MenuItem, Stack, Typography, useTheme } from '@mui/material' +import { memo, useCallback, useEffect, useState } from 'react' +import ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown' +import { WalletSettingIcon } from '../assets/setting' +import { CheckedIcon, UncheckIcon } from '../assets/checked' +import { useRemoteControlledDialog } from '@masknet/shared-base-ui' +import { WalletMessages } from '@masknet/plugin-wallet' +import { NFTWalletConnect } from './WalletConnect' +import { BindingProof, PopupRoutes } from '@masknet/shared-base' +import { + NetworkPluginID, + useChainId, + useCurrentWeb3NetworkPluginID, + useNetworkDescriptor, + useReverseAddress, + useWeb3State, +} from '@masknet/plugin-infra/web3' +import { Services } from '../../../extension/service' +import { useI18N } from '../locales/i18n_generated' +import { useCopyToClipboard } from 'react-use' +import { LinkIcon } from '../assets/link' +import { CopyIcon } from '../assets/copy' +import classNames from 'classnames' +import { VerifyIcon } from '../assets/verify' +import { noop } from 'lodash-unified' +import { Verify2Icon } from '../assets/Verify2' +import { formatAddress } from '../utils' + +const useStyles = makeStyles()((theme) => ({ + root: { + borderRadius: 9999, + paddingLeft: 4, + paddingRight: 4, + cursor: 'pointer', + backgroundColor: theme.palette.mode === 'dark' ? '#15171A' : '#F6F8F8', + }, + wrapper: {}, + address: { + lineHeight: 1.5, + }, + copy: { + color: theme.palette.secondary.main, + }, + + icon: { + width: 24, + height: 24, + }, + iconShadow: { + filter: 'drop-shadow(0px 0px 6px rgba(28, 104, 243, 0.6))', + }, + change: { + marginLeft: theme.spacing(4), + backgroundColor: MaskColorVar.twitterButton, + borderRadius: 9999, + fontWeight: 600, + fontSize: 14, + }, + divider: { + borderColor: theme.palette.mode === 'dark' ? '#2F3336' : '#F2F5F6', + marginLeft: 16, + marginRight: 16, + }, + paper: { + backgroundColor: 'black', + width: 335, + }, +})) + +interface AddressNamesProps extends withClasses<'root'> { + onChange: (address: string) => void + account: string + wallets: BindingProof[] +} + +export function AddressNames(props: AddressNamesProps) { + const { onChange, account, wallets } = props + const classes = useStylesExtends(useStyles(), props) + const [anchorEl, setAnchorEl] = useState(null) + const onClose = () => setAnchorEl(null) + const onOpen = (event: React.MouseEvent) => setAnchorEl(event.currentTarget) + const t = useI18N() + const currentPluginId = useCurrentWeb3NetworkPluginID() + + const [selectedWallet, setSelectedWallet] = useState(account || wallets?.[0]?.identity || '') + const onClick = useCallback((address: string) => { + onChange(address) + setSelectedWallet(address) + onClose() + }, []) + + const theme = useTheme() + + useEffect(() => { + if (!account && !wallets?.[0]?.identity) return + setSelectedWallet(account || wallets?.[0]?.identity) + }, [account, wallets?.[0]?.identity]) + + const { setDialog: openSelectProviderDialog } = useRemoteControlledDialog( + WalletMessages.events.selectProviderDialogUpdated, + ) + const chainId = useChainId() + const openPopupsWindow = useCallback(() => { + Services.Helper.openPopupWindow(PopupRoutes.ConnectedWallets, { + chainId, + internal: true, + }) + }, [chainId]) + + const onConnectWallet = useCallback(() => { + openSelectProviderDialog({ open: true, pluginID: NetworkPluginID.PLUGIN_EVM }) + onClose() + }, [openSelectProviderDialog, onClose]) + + const walletItem = ( + selectedWallet: string, + wallet: string, + enableChange: boolean, + onClick: (wallet: string) => void, + onChange?: () => void, + verify?: boolean, + isETH?: boolean, + ) => ( + onClick(account)}> + + {selectedWallet === wallet ? ( + <> + + + ) : ( + + )} + + + {enableChange && ( + + )} + + ) + + if (!wallets.length && (currentPluginId !== NetworkPluginID.PLUGIN_EVM || !account)) return + + return ( + + + isSameAddress(x.identity, account)) + ? true + : currentPluginId === NetworkPluginID.PLUGIN_EVM + } + /> + + + + {account ? ( + walletItem( + selectedWallet, + account, + Boolean(account), + () => onClick(account), + onConnectWallet, + wallets.some((x) => isSameAddress(x.identity, account)), + wallets.some((x) => isSameAddress(x.identity, account)) + ? true + : currentPluginId === NetworkPluginID.PLUGIN_EVM, + ) + ) : ( + + + + )} + + {wallets + .sort((a, b) => Number.parseInt(b.created_at, 10) - Number.parseInt(a.created_at, 10)) + ?.filter((x) => !isSameAddress(x.identity, account)) + .map((x) => ( + <> + {walletItem( + selectedWallet, + x.identity, + false, + () => onClick(x.identity), + () => noop, + true, + true, + )} + + + ))} + + { + openPopupsWindow() + onClose() + }}> + + + + + {t.wallet_settings()} + + + + + + ) +} + +const useWalletUIStyles = makeStyles()((theme) => ({ + root: {}, + address: { + fontSize: 10, + }, + copy: { + fontSize: 16, + cursor: 'pointer', + }, + link: { + color: theme.palette.text.secondary, + lineHeight: 0, + }, + linkIcon: { + width: 16, + height: 16, + }, + walletName: { + color: theme.palette.mode === 'dark' ? '#D9D9D9' : '#0F1419', + }, + walletAddress: { + color: theme.palette.mode === 'dark' ? '#6E767D' : '#536471', + }, +})) + +interface WalletUIProps { + address: string + verify?: boolean + isETH?: boolean +} + +function WalletUI(props: WalletUIProps) { + const { Utils } = useWeb3State() + const { isETH, address, verify = false } = props + + const { classes } = useWalletUIStyles() + const chainId = useChainId() + const currentPluginId = useCurrentWeb3NetworkPluginID() + const networkDescriptor = useNetworkDescriptor(chainId, isETH ? NetworkPluginID.PLUGIN_EVM : currentPluginId) + const { value: domain } = useReverseAddress(address, NetworkPluginID.PLUGIN_EVM) + if (!address) return null + return ( + + + + + + {currentPluginId === NetworkPluginID.PLUGIN_EVM + ? domain ?? formatAddress(address, 4) + : formatAddress(address, 4)} + + {verify ? : null} + + + + {formatAddress(address, 4)} + + + + + + + + + ) +} + +interface CopyIconButtonProps extends IconProps { + text: string +} +const CopyIconButton = memo(({ text, ...props }) => { + const t = useI18N() + const theme = useTheme() + const [, copyToClipboard] = useCopyToClipboard() + const [open, setOpen] = useState(false) + + const onCopy = useSnackbarCallback({ + executor: async () => copyToClipboard(text), + deps: [], + successText: t.copy_success_of_wallet_address(), + }) + + return ( + {t.copied()}} + open={open} + onMouseLeave={() => setOpen(false)} + disableFocusListener + disableTouchListener> + + + ) +}) diff --git a/packages/mask/src/plugins/Avatar/SNSAdaptor/AddNFT.tsx b/packages/mask/src/plugins/Avatar/SNSAdaptor/AddNFT.tsx index 97c7c707fe60..2dc642f172f3 100644 --- a/packages/mask/src/plugins/Avatar/SNSAdaptor/AddNFT.tsx +++ b/packages/mask/src/plugins/Avatar/SNSAdaptor/AddNFT.tsx @@ -1,11 +1,11 @@ import { makeStyles } from '@masknet/theme' -import { ERC721TokenDetailed, isSameAddress, useAccount } from '@masknet/web3-shared-evm' -import { Button, DialogContent, Typography } from '@mui/material' +import { ChainId, ERC721TokenDetailed, isSameAddress, useAccount } from '@masknet/web3-shared-evm' +import { Button, DialogContent, InputBase, Typography } from '@mui/material' import { useCallback, useState } from 'react' import { InjectedDialog } from '@masknet/shared' -import { InputBox } from '../../../extension/options-page/DashboardComponents/InputBox' import { useI18N } from '../../../utils' import { createNFT } from '../utils' +import { WalletRPC } from '../../Wallet/messages' const useStyles = makeStyles()((theme) => ({ root: {}, @@ -17,6 +17,13 @@ const useStyles = makeStyles()((theme) => ({ input: { marginTop: theme.spacing(1), marginBottom: theme.spacing(1), + display: 'block', + width: '100%', + border: `1px solid ${theme.palette.mode === 'dark' ? '#2F3336' : '#EFF3F4'}`, + alignItems: 'center', + padding: theme.spacing(1), + boxSizing: 'border-box', + borderRadius: 8, }, message: { '&:before': { @@ -27,9 +34,12 @@ const useStyles = makeStyles()((theme) => ({ }, })) export interface AddNFTProps { + account?: string onClose: () => void - onAddClick: (token: ERC721TokenDetailed) => void + chainId?: ChainId + onAddClick?: (token: ERC721TokenDetailed) => void open: boolean + title?: string } export function AddNFT(props: AddNFTProps) { const { t } = useI18N() @@ -37,8 +47,8 @@ export function AddNFT(props: AddNFTProps) { const [address, setAddress] = useState('') const [tokenId, setTokenId] = useState('') const [message, setMessage] = useState('') - const { onClose, open, onAddClick } = props - const account = useAccount() + const { onClose, open, onAddClick, title, chainId, account } = props + const _account = useAccount() const onClick = useCallback(async () => { if (!address) { @@ -50,14 +60,18 @@ export function AddNFT(props: AddNFTProps) { return } - createNFT(address, tokenId) - .then((token) => { - if (!token || !isSameAddress(token?.info.owner, account)) { + createNFT(address, tokenId, chainId) + .then(async (token) => { + if (chainId && token && token.contractDetailed.chainId !== chainId) { + setMessage('chain does not match.') + return + } + if (!token || !isSameAddress(token?.info.owner, account ?? _account)) { setMessage(t('nft_owner_hint')) return } - - onAddClick(token) + await WalletRPC.addToken(token) + onAddClick?.(token) handleClose() }) .catch((error) => setMessage(t('nft_owner_hint'))) @@ -78,19 +92,31 @@ export function AddNFT(props: AddNFTProps) { } return ( - +
- onAddressChange(address)} /> + onAddressChange(e.target.value)} + />
- onTokenIdChange(tokenId)} /> + onTokenIdChange(e.target.value)} + />
{message ? ( - + {message} ) : null} diff --git a/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTAvatarButton.tsx b/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTAvatarButton.tsx index 93a23fbbab07..17c4115fe58f 100644 --- a/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTAvatarButton.tsx +++ b/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTAvatarButton.tsx @@ -2,6 +2,7 @@ import { GearSettingsIcon } from '@masknet/icons' import { makeStyles, useStylesExtends } from '@masknet/theme' import { Typography } from '@mui/material' import { useI18N } from '../../../utils' +import { ApplicationSmallIcon } from '../assets/application' const useStyles = makeStyles()((theme) => ({ root: { @@ -10,11 +11,10 @@ const useStyles = makeStyles()((theme) => ({ justifyContent: 'center', alignItems: 'center', borderRadius: 9999, - paddingLeft: theme.spacing(1), - paddingRight: theme.spacing(1), - border: '1px solid', - backgroundColor: theme.palette.mode === 'dark' ? 'rgb(255, 255, 255)' : 'rgb(0, 0, 0)', - color: theme.palette.mode === 'dark' ? 'rgb(0, 0, 0)' : 'rgb(255, 255, 255)', + paddingLeft: theme.spacing(2), + paddingRight: theme.spacing(2), + border: `1px solid ${theme.palette.mode === 'dark' ? '#2F3336' : '#EFF3F4'}`, + color: theme.palette.text.primary, cursor: 'pointer', }, icon: { @@ -25,10 +25,11 @@ const useStyles = makeStyles()((theme) => ({ text: { display: 'flex', alignItems: 'center', + marginLeft: 4, }, })) -interface NFTAvatarButtonProps extends withClasses<'root'> { +interface NFTAvatarButtonProps extends withClasses<'root' | 'text'> { onClick: () => void showSetting?: boolean } @@ -40,9 +41,9 @@ export function NFTAvatarButton(props: NFTAvatarButtonProps) { return (
+ - 🔥 - {t('nft_avatar')} + {t('nft_avatar')} {props.showSetting ? : null}
diff --git a/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTBadge.tsx b/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTBadge.tsx index 42a0d94f1b07..fc1cb595c64b 100644 --- a/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTBadge.tsx +++ b/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTBadge.tsx @@ -34,6 +34,7 @@ export function NFTBadge(props: NFTBadgeProps) { const { value = { amount: '0', symbol: 'ETH', name: '', slug: '' }, loading } = useNFT( avatar.address, avatar.tokenId, + avatar.chainId, ) const { amount, symbol, name, slug } = value @@ -45,7 +46,10 @@ export function NFTBadge(props: NFTBadgeProps) { e.preventDefault() openWindow(resolveOpenSeaLink(avatar.address, avatar.tokenId)) }}> - + { userId: string @@ -23,7 +23,7 @@ const useStyles = makeStyles()(() => ({ export function NFTBadgeTimeline(props: NFTBadgeTimelineProps) { const { userId, avatarId, width, height, snsKey } = props - const { loading, value: _avatar } = useNFTAvatar(userId, snsKey) + const { loading, value: _avatar } = usePersonaNFTAvatar(userId, avatarId, snsKey) const [avatar, setAvatar] = useState() const [avatarId_, setAvatarId_] = useState('') const classes = useStylesExtends(useStyles(), props) diff --git a/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTImage.tsx b/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTImage.tsx index efd80e29ec7f..5a019eb2032c 100644 --- a/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTImage.tsx +++ b/packages/mask/src/plugins/Avatar/SNSAdaptor/NFTImage.tsx @@ -1,11 +1,12 @@ import { makeStyles } from '@masknet/theme' import { ERC721TokenDetailed, isSameAddress } from '@masknet/web3-shared-evm' import classNames from 'classnames' +import { SelectedIcon } from '../assets/selected' const useStyles = makeStyles()((theme) => ({ imgBackground: { position: 'relative', - margin: theme.spacing(0.5, 1), + margin: theme.spacing(1.25, 1, 1.25, 1.5), borderRadius: '100%', display: 'flex', alignItems: 'center', @@ -13,10 +14,11 @@ const useStyles = makeStyles()((theme) => ({ }, icon: { position: 'absolute', - top: 5, - right: 5, - width: 24, - height: 24, + top: 2, + right: 2, + width: 20, + height: 20, + color: theme.palette.primary.main, }, image: { width: 97, @@ -25,11 +27,11 @@ const useStyles = makeStyles()((theme) => ({ borderRadius: '100%', boxSizing: 'border-box', '&:hover': { - border: `4px solid ${theme.palette.primary.main}`, + border: `1px solid ${theme.palette.primary.main}`, }, }, selected: { - border: `4px solid ${theme.palette.primary.main}`, + border: `1px solid ${theme.palette.primary.main}`, }, })) @@ -37,6 +39,7 @@ interface NFTImageProps { token: ERC721TokenDetailed selectedToken?: ERC721TokenDetailed onChange: (token: ERC721TokenDetailed) => void + showBadge?: boolean } function isSameNFT(a: ERC721TokenDetailed, b?: ERC721TokenDetailed) { @@ -48,7 +51,7 @@ function isSameNFT(a: ERC721TokenDetailed, b?: ERC721TokenDetailed) { } export function NFTImage(props: NFTImageProps) { - const { token, onChange, selectedToken } = props + const { token, onChange, selectedToken, showBadge = false } = props const { classes } = useStyles() return ( @@ -58,6 +61,7 @@ export function NFTImage(props: NFTImageProps) { src={token.info.imageURL} className={classNames(classes.image, isSameNFT(token, selectedToken) ? classes.selected : '')} /> + {showBadge && isSameNFT(token, selectedToken) ? : null}
) } diff --git a/packages/mask/src/plugins/Avatar/SNSAdaptor/background/amount.png b/packages/mask/src/plugins/Avatar/SNSAdaptor/background/amount.png deleted file mode 100644 index 9df02cb6ee4abc4a3e0b0f10bbed07d2862309ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1246 zcmV<41R?v0P)Iqyt@Z_GwNJIE+x^+Cz`I!0#%lVDKE89tJxY{~1_Ea&`+`VubGT5C^=A*TpZw z0-po;05?Oi38%RggJ^~jWj38`eIr*&bt{<-$t8+ncaC_9N2u|t0`N|Ne23hx8973} zM~G;iI8_gwQFx-``=!hV@3jLIlXa z=5U@6T1rA-fM6m<;EZ$n;V52|g!~}E$*!m5XUhpuPa!)XRGG;%S5pu%i1RN481@y$ zkO49|rDw$`BMc#G2H75CUQkyjVH*?!T7(==gpt?C&rcvi&Tu?qzhTvSnh(2rOT3WZ2 zZf12twj$(5%MbQ|legnbWhBFBB+g9={=J(+BpE9Gj= z0}7e{2gyGq3Gfg0cn#l(zd!>5N5X#m^n!jKt7RNdA5=nQr~fNTsp77V<>+fxI;bf3 za9_NIKu8>m0*@T|%MaMf+iJO*b{CW~3-|Y&OV@6>7p=zyobx#X5b_riqMAF|B;*rt zIw8(QOHsn|1(3@R*s7@=j=D_PEQl2r~#$`%MaM<6U_6=OgIwR{XG=} z2SEtsl%S#kHZ5C#r3P%2eEy6_gdNQk1zIqiPBD_d?bre=S9%(b>(giYRE$JXY$+K| zr=sLFaMt!P4om@-nRFU?lF4SIti+xd=^0yQ45w33R+V$U!(0J?{VDGNBTqBgY_N^G zI{we_XKbYyPN#6>JNIwQAVPDjBC3y z_-;-K`T`PP&%KP>*{*kJ#3s_g#GexBgUb9~UsZ(oE0}eQkG}mw{D31NkP!AOyaI`r zp@1HvI4+*eDVjF`o|-HJF4VB@QQ|5$tcToX=JF(`fC_6EoV)i}_c`EvBp>C~+UK1> z<9f)qL*AHzyiP^GS9DL6K+ys_18fIuI<#jMetqz#c#KH=4+$r`sG}lX-2eap07*qo IM6N<$f=cyjQik`(D z%gk8OBYS9IbkCpjF}>r~q1@i1T`cl<6)Cj1LetaYvd4c%_I%8)fDIhF=K*f<23{0D z3k!S%;4SPg#fX~{D^i5cH^RttvGrcekQx=Uaj{fW?B!1QfZtH#IR)VLnD_&w+h@f> z@re`#5Q^bxKWh5P#)ghf{Jo7i>xN`-! zh!HrY^b{#&B;SZSLu`+Wi%3>;tfFQ>3nufu5%ie&zl-Fv8@S;vPq9w$IR^YSVi_dg0X`PU*R3y_GG(eO4{W7PFq~Gas zYP|~28*$+T=F1Cj3bu6-6__{08<1~;JbmfePOSA_{5$b>lIiag#XroH|C|B2Cdkv5 zo^4Xr$IolA%;QF~WTR2efpQ$tIK4-1B01#~SIz1T!^2;-;nJOg0;=*sSJjy}x5CwLdPn znVkV0;j3dzHd|c8N=%9=;cJ!`|1Z?|VRi;o3UA&@d^csX*@%lk;2^6RQ=$(ln}J9D z{ytt38fRJpXI%Dk$e*6Y^SZ=c17IV26kycw9ey_$i7BAM5-rxd_t@dPW9`I;8TLNz uUb@^pcXu$LT{zJl8h_$@yeu|26vzKnm2@Yav?C)T=$r)+{33%VaYYvqW=A|IC<=S|wxz46-8PmylsE zG7f$M9TW%gBI~%bNhYZz`*w=%qKev3)f;l!z>lg_^&IBMdsXidJbg^qrULrw*g=j1 zWOx-RfQ*Z>ox#PD8!Z!E~DqR4C}mbAdwI8SBre_jJrsBd(5tF{bGavoQKKKdhnO;c$BLoC? zhGiHytI^UgN{j>3q9fivWgi}3q$diNaU0L$UwjFH7lLmV@AE>-k;q&ra*sGBzW9xO zdW;bt*1rjXfAB39xJJYTkP$Sl=kq6R+7y-1m{}dIWA8%5x@p66#J1hYIoFzQ3-}L; za}3YbSj89ky7`5D65$N5Bg6G|Uy@jT%50nhOp4%J#jY{D!2<-r3nY1mkGEdyf8dzo zB?3;8v8vJVTSZ9-r!PgYkVQ*KAZxM1O##+ij8u&V+$y>n%^fAWRghV;BzCc zbYu|7loTsM5@I%vjLzfWEX_Sv7wfYY92u<8DPl>nBV^Nd-d&BBM!Hx;=5HEg0dRX$%b3@Xj}Co?BxpUVQLjB| z-zpwaVjPI@Iv1zZYe~EmW1GEaC8nC!O>EPpj#!d&d~HF4~-5bLJp=(HIq1D z0MLJhT|~GBffTWlps|{^*u7V*zNG1|ZN_KEbL+hjiMu(okoIrnQZ;1vj0R1wsdr;7 tDS)k(sELMs@aBDX_aQ7Q>J`>VLoomV002ovPDHLkV1gsp?c)Fd diff --git a/packages/mask/src/plugins/Avatar/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Avatar/SNSAdaptor/index.tsx index cbabb7a159eb..2f43bfb07606 100644 --- a/packages/mask/src/plugins/Avatar/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Avatar/SNSAdaptor/index.tsx @@ -1,9 +1,56 @@ -import type { Plugin } from '@masknet/plugin-infra' +import type { Plugin } from '@masknet/plugin-infra/content-script' +import { ApplicationEntry } from '@masknet/shared' +import { useState } from 'react' +import { NFTAvatarDialog } from '../Application/NFTAvatarsDialog' import { base } from '../base' +import { setupContext } from '../context' +import { Trans } from 'react-i18next' +import { PluginI18NFieldRender } from '@masknet/plugin-infra/content-script' +import { ApplicationIcon } from '../assets/application' const sns: Plugin.SNSAdaptor.Definition = { ...base, - init(signal) {}, + init(signal, context) { + setupContext(context) + }, + ApplicationEntries: [ + (() => { + const name = { fallback: 'NFT PFP' } + const icon = + const recommendFeature = { + description: , + backgroundGradient: 'linear-gradient(360deg, #FFECD2 -0.43%, #FCB69F 99.57%)', + } + return { + RenderEntryComponent(EntryComponentProps) { + const [open, setOpen] = useState(false) + return ( + <> + } + icon={icon} + recommendFeature={recommendFeature} + {...EntryComponentProps} + onClick={EntryComponentProps.onClick ?? (() => setOpen(true))} + tooltipHint={ + EntryComponentProps.tooltipHint ?? + (EntryComponentProps.disabled ? undefined : ) + } + /> + + setOpen(false)} /> + + ) + }, + appBoardSortingDefaultPriority: 3, + name, + icon, + ApplicationEntryID: base.ID, + nextIdRequired: true, + recommendFeature, + } + })(), + ], } export default sns diff --git a/packages/mask/src/plugins/Avatar/assets/Verify2.tsx b/packages/mask/src/plugins/Avatar/assets/Verify2.tsx new file mode 100644 index 000000000000..32b015145de2 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/Verify2.tsx @@ -0,0 +1,19 @@ +import { createIcon } from '@masknet/icons' +export const Verify2Icon = createIcon( + 'Verify2Icon', + + + + , + '0 0 20 20', +) diff --git a/packages/mask/src/plugins/Avatar/assets/application.tsx b/packages/mask/src/plugins/Avatar/assets/application.tsx new file mode 100644 index 000000000000..7dc9378ccd8a --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/application.tsx @@ -0,0 +1,63 @@ +import { createIcon } from '@masknet/icons' + +export const ApplicationIcon = createIcon( + 'ApplicationIcon', + + + + + + + + + + , + '0 0 24 24', +) + +export const ApplicationRoundIcon = createIcon( + 'ApplicationRoundIcon', + + + + + + + + + + , + '0 0 24 25', +) + +export const ApplicationSmallIcon = createIcon( + 'ApplicationSmallIcon', + + + , + '0 0 21 20', +) diff --git a/packages/mask/src/plugins/Avatar/assets/checked.tsx b/packages/mask/src/plugins/Avatar/assets/checked.tsx new file mode 100644 index 000000000000..4b3ce7be9630 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/checked.tsx @@ -0,0 +1,25 @@ +import { createIcon } from '@masknet/icons' + +export const CheckedIcon = createIcon( + 'CheckedIcon', + + + + , + '0 0 24 24', +) + +export const UncheckIcon = createIcon( + 'UncheckIcon', + + + , + '0 0 24 24', +) diff --git a/packages/mask/src/plugins/Avatar/assets/close.tsx b/packages/mask/src/plugins/Avatar/assets/close.tsx new file mode 100644 index 000000000000..cc9f93529008 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/close.tsx @@ -0,0 +1,12 @@ +import { createIcon } from '@masknet/icons' + +export const CloseIcon = createIcon( + 'CloseIcon', + + + , + '0 0 20 20', +) diff --git a/packages/mask/src/plugins/Avatar/assets/copy.tsx b/packages/mask/src/plugins/Avatar/assets/copy.tsx new file mode 100644 index 000000000000..bf8033061abf --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/copy.tsx @@ -0,0 +1,20 @@ +import { createIcon } from '@masknet/icons' + +export const CopyIcon = createIcon( + 'CopyIcon', + + + + , + '0 0 12 12', +) diff --git a/packages/mask/src/plugins/Avatar/assets/frame.tsx b/packages/mask/src/plugins/Avatar/assets/frame.tsx new file mode 100644 index 000000000000..7ea6f3306244 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/frame.tsx @@ -0,0 +1,44 @@ +import { SvgIcon, SvgIconProps } from '@mui/material' + +const svg = ( + + + + + + + + + + + + + + + + + + + +) + +export const FrameIcon = (props: SvgIconProps) => {svg} diff --git a/packages/mask/src/plugins/Avatar/assets/info.tsx b/packages/mask/src/plugins/Avatar/assets/info.tsx new file mode 100644 index 000000000000..d37e4a7b6f4f --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/info.tsx @@ -0,0 +1,26 @@ +import { createIcon } from '@masknet/icons' + +export const InfoIcon = createIcon( + 'InfoIcon', + + + + + , + '0 0 20 21', +) diff --git a/packages/mask/src/plugins/Avatar/assets/link.tsx b/packages/mask/src/plugins/Avatar/assets/link.tsx new file mode 100644 index 000000000000..80e7df2ab6ea --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/link.tsx @@ -0,0 +1,14 @@ +import { createIcon } from '@masknet/icons' + +export const LinkIcon = createIcon( + 'LinkIcon', + + + , + '0 0 16 16', +) diff --git a/packages/mask/src/plugins/Avatar/assets/more.tsx b/packages/mask/src/plugins/Avatar/assets/more.tsx new file mode 100644 index 000000000000..bae220e80a16 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/more.tsx @@ -0,0 +1,14 @@ +import { SvgIcon, SvgIconProps } from '@mui/material' + +const svg = ( + + + +) + +export const MoreIcon = (props: SvgIconProps) => {svg} diff --git a/packages/mask/src/plugins/Avatar/assets/nftavatar.png b/packages/mask/src/plugins/Avatar/assets/nftavatar.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac22a7c4f2f33e781d6361b77fdb13b126d74de GIT binary patch literal 1007 zcmV7NQ%4kszq!749tMX9lci=F z6^Tk95R2^lhg59ImJNjkEU1L4s;bhch#&%#M>7Zs&tUX2Jo~*$po&?l=MWq`CF7+P#gX5`AJA6Ve|)>9)na0P!Q;YFV8~fCvf9?SojA9 z&&dJiry&w@3`)PdGW4zcAQ&!qG6GX$khWwM%sha5H)Xv05d3`)CT@Yd4tkH;>vRmt zF!arz$>7;P^y@R@vhMGY`O{IEf4J9Pr-sUNpUW-%ffJBivH#9fFXQkFDHGmiFx`+^ z)$4Tx%Eqi~S=q9^xK^dII+i0)?}Y{*#KIMTva^)MzjGblYHE;S!r}9P%F0^SF+Glp za(SSv)5qSxi@!A5+!`Gj>l(^2sPeMUqK=Pk)-y7e`*OdjJo}WsSrq7lu1|~0Saao2 zXAYI=zMR2?}2h{3}vx3Tn64iWv_q#jF4T002ovPDHLkV1iKV^P&I% literal 0 HcmV?d00001 diff --git a/packages/mask/src/plugins/Avatar/assets/point.tsx b/packages/mask/src/plugins/Avatar/assets/point.tsx new file mode 100644 index 000000000000..79dc37bd92df --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/point.tsx @@ -0,0 +1,12 @@ +import { createIcon } from '@masknet/icons' +export const PointIcon = createIcon( + 'PointIcon', + + + , + '0 0 9 9', +) diff --git a/packages/mask/src/plugins/Avatar/assets/selected.tsx b/packages/mask/src/plugins/Avatar/assets/selected.tsx new file mode 100644 index 000000000000..d6576f1d8a41 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/selected.tsx @@ -0,0 +1,16 @@ +import { createIcon } from '@masknet/icons' +export const SelectedIcon = createIcon( + 'SelectedIcon', + + + + , + '0 0 24 24', +) diff --git a/packages/mask/src/plugins/Avatar/assets/setting.tsx b/packages/mask/src/plugins/Avatar/assets/setting.tsx new file mode 100644 index 000000000000..25593367bade --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/setting.tsx @@ -0,0 +1,16 @@ +import { createIcon } from '@masknet/icons' + +export const WalletSettingIcon = createIcon( + 'WalletSettingIcon', + + + + , + '0 0 20 20', +) diff --git a/packages/mask/src/plugins/Avatar/assets/twitter.tsx b/packages/mask/src/plugins/Avatar/assets/twitter.tsx new file mode 100644 index 000000000000..a77f6b2beb40 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/twitter.tsx @@ -0,0 +1,20 @@ +import { createIcon } from '@masknet/icons' + +export const TwitterIcon = createIcon( + 'TwitterIcon', + + + + + , + '0 0 15 15', +) diff --git a/packages/mask/src/plugins/Avatar/assets/verify.tsx b/packages/mask/src/plugins/Avatar/assets/verify.tsx new file mode 100644 index 000000000000..d0987974f62d --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/verify.tsx @@ -0,0 +1,17 @@ +import { createIcon } from '@masknet/icons' +export const VerifyIcon = createIcon( + 'VerifyIcon', + + + + , + '0 0 16 16', +) diff --git a/packages/mask/src/plugins/Avatar/assets/wallet.tsx b/packages/mask/src/plugins/Avatar/assets/wallet.tsx new file mode 100644 index 000000000000..181d745050a2 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/assets/wallet.tsx @@ -0,0 +1,32 @@ +import { createIcon } from '@masknet/icons' + +export const WalletIcon = createIcon( + 'WalletIcon', + + + + + + , + '0 0 18 18', +) diff --git a/packages/mask/src/plugins/Avatar/base.ts b/packages/mask/src/plugins/Avatar/base.ts index 68359a709d4f..f75751d6eb86 100644 --- a/packages/mask/src/plugins/Avatar/base.ts +++ b/packages/mask/src/plugins/Avatar/base.ts @@ -1,5 +1,6 @@ import { PLUGIN_ID } from './constants' -import { CurrentSNSNetwork, Plugin } from '@masknet/plugin-infra' +import { languages } from './locales/languages' +import { Plugin, CurrentSNSNetwork } from '@masknet/plugin-infra' export const base: Plugin.Shared.Definition = { ID: PLUGIN_ID, @@ -14,10 +15,12 @@ export const base: Plugin.Shared.Definition = { type: 'opt-in', networks: { [CurrentSNSNetwork.Twitter]: true, - [CurrentSNSNetwork.Facebook]: true, - [CurrentSNSNetwork.Instagram]: true, + [CurrentSNSNetwork.Facebook]: false, + [CurrentSNSNetwork.Instagram]: false, }, }, target: 'stable', }, + + i18n: languages, } diff --git a/packages/mask/src/plugins/Avatar/constants.ts b/packages/mask/src/plugins/Avatar/constants.ts index 7d715a838706..952ee5b534ea 100644 --- a/packages/mask/src/plugins/Avatar/constants.ts +++ b/packages/mask/src/plugins/Avatar/constants.ts @@ -1,10 +1,10 @@ import { PluginId } from '@masknet/plugin-infra' +import { ChainId } from '@masknet/web3-shared-evm' export const NFT_AVATAR_JSON_SERVER = 'https://configuration.r2d2.to/com.maskbook.avatar.json' export const NFT_AVATAR_DB_NAME = 'com.maskbook.user' export const NFT_AVATAR_DB_NAME_STORAGE = 'com.maskbook.user.storage' -export const NFT_CONTRACT_JSON_VERIFIED_SERVER = 'https://configuration.r2d2.to/com.maskbook.verified_nft.json' export const PLUGIN_ID = PluginId.Avatar export const PLUGIN_NAME = 'Avatar' export const PLUGIN_DESCRIPTION = 'NFT Avatar' @@ -14,3 +14,10 @@ export enum RSS3_KEY_SNS { FACEBOOK = '_facebook_nfts', INSTAGRAM = '_instagram_nfts', } + +export enum Application_NFT_LIST_PAGE { + Application_nft_tab_eth_page = 'ETH', + Application_nft_tab_polygon_page = 'Polygon', +} + +export const SUPPORTED_CHAIN_IDS: ChainId[] = [ChainId.Mainnet, ChainId.Matic] diff --git a/packages/mask/src/plugins/Avatar/context.ts b/packages/mask/src/plugins/Avatar/context.ts new file mode 100644 index 000000000000..e6904a0c28f5 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/context.ts @@ -0,0 +1,5 @@ +import type { Plugin } from '@masknet/plugin-infra/content-script' +export let context: Plugin.SNSAdaptor.SNSAdaptorContext +export function setupContext(x: typeof context) { + context = x +} diff --git a/packages/mask/src/plugins/Avatar/hooks/useNFT.ts b/packages/mask/src/plugins/Avatar/hooks/useNFT.ts index c2be4ebcedc1..5e3c0344e83b 100644 --- a/packages/mask/src/plugins/Avatar/hooks/useNFT.ts +++ b/packages/mask/src/plugins/Avatar/hooks/useNFT.ts @@ -1,16 +1,32 @@ +import { ChainId } from '@masknet/web3-shared-evm' import { useAsyncRetry } from 'react-use' import type { NFT } from '../types' -import { getNFT } from '../utils' +import { getNFT, getNFTByChain } from '../utils' const NFTCache = new Map>() -export function useNFT(address: string, tokenId: string) { +export function useNFT(address: string, tokenId: string, chainId?: ChainId) { return useAsyncRetry(async () => { if (!address || !tokenId) return - let f = NFTCache.get(`${address}-${tokenId}`) + let f = NFTCache.get(`${address}-${tokenId}-${chainId ?? ChainId.Mainnet}`) if (!f) { - f = getNFT(address, tokenId) - NFTCache.set(`${address}-${tokenId}`, f) + f = _getNFT(address, tokenId, chainId ?? ChainId.Mainnet) + NFTCache.set(`${address}-${tokenId}-${chainId ?? ChainId.Mainnet}`, f) } return f - }, [address, tokenId, NFTCache, getNFT]) + }, [address, tokenId, NFTCache, getNFT, chainId]) +} + +async function _getNFT(address: string, tokenId: string, chainId: ChainId) { + if (chainId === ChainId.Mainnet) { + return getNFT(address, tokenId) + } + const nft = await getNFTByChain(address, tokenId, chainId) + return { + amount: '0', + name: nft?.contractDetailed.name ?? '', + symbol: nft?.contractDetailed.symbol ?? 'ETH', + image: nft?.info.imageURL ?? '', + owner: nft?.info.owner ?? '', + slug: '', + } } diff --git a/packages/mask/src/plugins/Avatar/hooks/usePersonaNFTAvatar.ts b/packages/mask/src/plugins/Avatar/hooks/usePersonaNFTAvatar.ts new file mode 100644 index 000000000000..73db8002948a --- /dev/null +++ b/packages/mask/src/plugins/Avatar/hooks/usePersonaNFTAvatar.ts @@ -0,0 +1,22 @@ +import { useAsyncRetry } from 'react-use' +import { activatedSocialNetworkUI } from '../../../social-network' +import type { RSS3_KEY_SNS } from '../constants' +import { PluginNFTAvatarRPC } from '../messages' +import { getNFTAvatarByUserId } from '../utils' + +export function usePersonaNFTAvatar(userId: string, avatarId: string, snsKey: RSS3_KEY_SNS) { + return useAsyncRetry(async () => { + const avatarMetaFromPersona = await getNFTAvatarByUserId(userId, avatarId) + if (avatarMetaFromPersona) return avatarMetaFromPersona + + const avatarMeta = await PluginNFTAvatarRPC.getNFTAvatar( + userId, + activatedSocialNetworkUI.networkIdentifier, + snsKey, + ) + + if (!avatarMeta) return + + return { ...avatarMeta, imageUrl: '', nickname: '' } + }, [userId]) +} diff --git a/packages/mask/src/plugins/Avatar/hooks/usePersonaVerified.ts b/packages/mask/src/plugins/Avatar/hooks/usePersonaVerified.ts new file mode 100644 index 000000000000..2df5604f5e0f --- /dev/null +++ b/packages/mask/src/plugins/Avatar/hooks/usePersonaVerified.ts @@ -0,0 +1,23 @@ +import type { NextIDPlatform } from '@masknet/shared-base' +import { NextIDProof } from '@masknet/web3-providers' +import { useAsyncRetry } from 'react-use' +import { useSubscription } from 'use-subscription' +import Services from '../../../extension/service' +import { activatedSocialNetworkUI } from '../../../social-network' +import { context } from '../context' + +export function usePersonaVerify() { + const platform = activatedSocialNetworkUI.configuration.nextIDConfig?.platform as NextIDPlatform + const visitingPersonaIdentifier = useSubscription(context.lastRecognizedProfile) + return useAsyncRetry(async () => { + if (!visitingPersonaIdentifier?.identifier) return + const persona = await Services.Identity.queryPersonaByProfile(visitingPersonaIdentifier.identifier) + if (!persona?.identifier.publicKeyAsHex) return + const isVerified = await NextIDProof.queryIsBound( + persona.identifier.publicKeyAsHex, + platform, + visitingPersonaIdentifier.identifier.userId, + ) + return { isVerified } + }, [platform, visitingPersonaIdentifier]) +} diff --git a/packages/mask/src/plugins/Avatar/hooks/usePersonas.ts b/packages/mask/src/plugins/Avatar/hooks/usePersonas.ts new file mode 100644 index 000000000000..c44a73ddc0b0 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/hooks/usePersonas.ts @@ -0,0 +1,38 @@ +import { NextIDPlatform } from '@masknet/shared-base' +import { NextIDProof } from '@masknet/web3-providers' +import { first } from 'lodash-unified' +import { useAsyncRetry } from 'react-use' +import { useSubscription } from 'use-subscription' +import { usePersonaConnectStatus } from '../../../components/DataSource/usePersonaConnectStatus' +import { activatedSocialNetworkUI } from '../../../social-network' +import { context } from '../context' +import { sortPersonaBindings } from '../utils' + +export function usePersonas(userId?: string) { + const personaConnectStatus = usePersonaConnectStatus() + const currentIdentifier = useSubscription(context.currentVisitingProfile) + const platform = activatedSocialNetworkUI.configuration.nextIDConfig?.platform as NextIDPlatform + const identifier = useSubscription(context.lastRecognizedProfile) + return useAsyncRetry(async () => { + if (!identifier?.identifier?.userId) return + const personaBindings = await NextIDProof.queryExistedBindingByPlatform( + platform, + userId?.toLowerCase() ?? identifier.identifier.userId.toLowerCase(), + ) + + const currentPersonaBinding = first( + personaBindings.sort((a, b) => + sortPersonaBindings(a, b, userId?.toLowerCase() ?? identifier.identifier?.userId.toLowerCase() ?? ''), + ), + ) + if (!currentPersonaBinding) return + + const isOwner = userId + ? currentIdentifier?.identifier?.toText() === userId.toLowerCase() + : currentIdentifier?.identifier && + identifier.identifier && + currentIdentifier?.identifier.toText() === identifier.identifier.toText() + const wallets = currentPersonaBinding?.proofs.filter((proof) => proof.platform === NextIDPlatform.Ethereum) + return { wallets, isOwner, binds: currentPersonaBinding, status: personaConnectStatus } + }, [currentIdentifier, identifier, personaConnectStatus.hasPersona, platform, userId]) +} diff --git a/packages/mask/src/plugins/Avatar/hooks/useTokenOwner.ts b/packages/mask/src/plugins/Avatar/hooks/useTokenOwner.ts new file mode 100644 index 000000000000..878dd96181cd --- /dev/null +++ b/packages/mask/src/plugins/Avatar/hooks/useTokenOwner.ts @@ -0,0 +1,45 @@ +import { + ChainId, + isSameAddress, + safeNonPayableTransactionCall, + useAccount, + useERC721TokenContract, +} from '@masknet/web3-shared-evm' +import { useAsyncRetry } from 'react-use' +import { activatedSocialNetworkUI } from '../../../social-network' +import { PluginNFTAvatarRPC } from '../messages' +import { getNFTByOpensea } from '../utils' +import { usePersonas } from './usePersonas' + +export function useTokenOwner(address: string, tokenId: string, chainId?: ChainId) { + const ERC721Contract = useERC721TokenContract(address, chainId ?? ChainId.Mainnet) + return useAsyncRetry(async () => { + if (!ERC721Contract || !tokenId) return + const nft = await getNFTByOpensea(address, tokenId) + if (nft) return nft + const allSettled = await Promise.allSettled([ + safeNonPayableTransactionCall(ERC721Contract?.methods.ownerOf(tokenId)), + safeNonPayableTransactionCall(ERC721Contract.methods.name()), + safeNonPayableTransactionCall(ERC721Contract.methods.symbol()), + ]) + const result = allSettled.map((x) => (x.status === 'fulfilled' ? x.value : undefined)) + return { owner: result[0], name: result[1], symbol: result[2] } + }, [ERC721Contract, tokenId]) +} + +export function useCheckTokenOwner(userId: string, owner?: string) { + const account = useAccount() + const { value: persona, loading } = usePersonas(userId) + const { value: address, loading: loadingAddress } = useAsyncRetry( + () => PluginNFTAvatarRPC.getAddress(userId, activatedSocialNetworkUI.networkIdentifier), + [userId], + ) + + return { + loading: loading || loadingAddress, + isOwner: Boolean( + (address && owner && isSameAddress(address, owner)) || + persona?.wallets.some((x) => isSameAddress(x.identity, owner)), + ), + } +} diff --git a/packages/mask/src/plugins/Avatar/locales/en-US.json b/packages/mask/src/plugins/Avatar/locales/en-US.json new file mode 100644 index 000000000000..a267c4b7a6bb --- /dev/null +++ b/packages/mask/src/plugins/Avatar/locales/en-US.json @@ -0,0 +1,27 @@ +{ + "application_dialog_title": "NFT PFP", + "application_edit_profile_dialog_title": "Edit Profile", + "persona_set_nft": "Set NFT PFPs", + "persona_verification_failed": "NFT PFP verification failed", + "cancel": "Cancel", + "save": "Save", + "change": "Change", + "connect_your_wallet": "Connect your wallet", + "upload_avatar_failed_message": "Sorry, failed to save NFT Avatar. Please set again.", + "upload_avatar_success_message": "Update NFT Avatar Success!", + "collectible_not_found": "Can' find it.", + "add_collectible": "Add Collectibles", + "set_avatar_title": "Set NFT Avatar", + "set_PFP_title": "Set NFT PFP", + "wallet_settings": "Wallet settings", + "persona_hint": "Customize NFT experience by connecting social accounts. Enjoy Web2 with a whole new Web3 vibe.", + "copy_success_of_wallet_address": "Copy wallet address successfully!", + "copied": "Copied", + "collectible_on_polygon": "Only NFTs on Ethereum are supported to preview. We are currently
working on supporting Polygon NFTs as well.
Please add your collectibles here.", + "collectible_no_eth": "No any collectible is available to preview. Please add your collectible here.", + "no_collectible_found": "No collectible found.", + "retry": "Retry", + "application_hint": "Socialize and show off your NFTs. People can bid,buy, view your valuable NFTs without leaving Twitter.", + "provider_by": "Provided by", + "wallet_non_evm_warning": "The NFT PFP feature currently supports only EVM chains. Support for other
chains will be added in the future." +} diff --git a/packages/mask/src/plugins/Avatar/locales/index.ts b/packages/mask/src/plugins/Avatar/locales/index.ts new file mode 100644 index 000000000000..d6ead60252e4 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/locales/index.ts @@ -0,0 +1,6 @@ +// This file is auto generated. DO NOT EDIT +// Run `npx gulp sync-languages` to regenerate. +// Default fallback language in a family of languages are chosen by the alphabet order +// To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts + +export * from './i18n_generated' diff --git a/packages/mask/src/plugins/Avatar/locales/languages.ts b/packages/mask/src/plugins/Avatar/locales/languages.ts new file mode 100644 index 000000000000..db91c03aa516 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/locales/languages.ts @@ -0,0 +1,19 @@ +// This file is auto generated. DO NOT EDIT +// Run `npx gulp sync-languages` to regenerate. +// Default fallback language in a family of languages are chosen by the alphabet order +// To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts +import en_US from './en-US.json' +export const languages = { + en: en_US, +} +// @ts-ignore +if (import.meta.webpackHot) { + // @ts-ignore + import.meta.webpackHot.accept(['./en-US.json'], () => + globalThis.dispatchEvent?.( + new CustomEvent('MASK_I18N_HMR', { + detail: ['com.maskbook.avatar', { en: en_US }], + }), + ), + ) +} diff --git a/packages/mask/src/plugins/Avatar/types.ts b/packages/mask/src/plugins/Avatar/types.ts index f61a59d91dc9..8fddf38cc416 100644 --- a/packages/mask/src/plugins/Avatar/types.ts +++ b/packages/mask/src/plugins/Avatar/types.ts @@ -1,9 +1,11 @@ +import type { ChainId, ERC721TokenDetailed } from '@masknet/web3-shared-evm' + export interface AvatarMetaDB { userId: string tokenId: string address: string avatarId: string - updateFlag?: boolean + chainId?: ChainId } export interface NFT { @@ -14,3 +16,19 @@ export interface NFT { owner: string slug: string } + +export interface SelectTokenInfo { + account: string + token: ERC721TokenDetailed + image: string +} + +export interface TokenInfo { + address: string + tokenId: string +} + +export interface NextIDAvatarMeta extends AvatarMetaDB { + nickname: string + imageUrl: string +} diff --git a/packages/mask/src/plugins/Avatar/utils/index.ts b/packages/mask/src/plugins/Avatar/utils/index.ts index df7dfe24f71f..3c03939f0808 100644 --- a/packages/mask/src/plugins/Avatar/utils/index.ts +++ b/packages/mask/src/plugins/Avatar/utils/index.ts @@ -1,16 +1,49 @@ -import { isNull } from 'lodash-unified' -import { ChainId, NonFungibleAssetProvider, formatBalance } from '@masknet/web3-shared-evm' +import { first, isNull } from 'lodash-unified' +import { + ChainId, + NonFungibleAssetProvider, + formatBalance, + createContract, + createWeb3, + getERC721ContractDetailed, + getERC721TokenDetailedFromChain, + ERC721TokenDetailed, + getERC721TokenAssetFromChain, +} from '@masknet/web3-shared-evm' import { EVM_RPC } from '../../EVM/messages' import Services from '../../../extension/service' -import { getOrderUnitPrice, NonFungibleTokenAPI } from '@masknet/web3-providers' +import { getOrderUnitPrice, NextIDProof, NextIDStorage, NonFungibleTokenAPI } from '@masknet/web3-providers' import { ZERO } from '@masknet/web3-shared-base' import BigNumber from 'bignumber.js' +import { activatedSocialNetworkUI } from '../../../social-network' +import type { NextIDPersonaBindings, NextIDPlatform } from '@masknet/shared-base' +import type { NextIDAvatarMeta } from '../types' +import { PLUGIN_ID } from '../constants' +import type { ERC721 } from '@masknet/web3-contracts/types/ERC721' +import type { AbiItem } from 'web3-utils' +import ERC721ABI from '@masknet/web3-contracts/abis/ERC721.json' function getLastSalePrice(lastSale?: NonFungibleTokenAPI.AssetEvent | null) { if (!lastSale?.total_price || !lastSale?.payment_token?.decimals) return return formatBalance(lastSale.total_price, lastSale.payment_token.decimals) } +export async function getNFTByOpensea(address: string, tokenId: string) { + const asset = await EVM_RPC.getAsset({ + address, + tokenId, + chainId: ChainId.Mainnet, + provider: NonFungibleAssetProvider.OPENSEA, + }) + + if (!asset) return + return { + name: asset?.name ?? '', + symbol: asset?.desktopOrder?.payment_token_contract?.symbol ?? 'ETH', + owner: asset?.top_ownerships[0].owner.address ?? '', + } +} + export async function getNFT(address: string, tokenId: string) { const asset = await EVM_RPC.getAsset({ address, @@ -31,13 +64,48 @@ export async function getNFT(address: string, tokenId: string) { name: asset?.name ?? '', symbol: asset?.desktopOrder?.payment_token_contract?.symbol ?? 'ETH', image: asset?.image_url ?? '', - owner: asset?.top_ownerships[0].owner.address ?? '', + owner: asset?.top_ownerships?.[0]?.owner.address ?? '', slug: asset?.slug ?? '', } } -export async function createNFT(address: string, tokenId: string) { - return EVM_RPC.getNFT({ address, tokenId, chainId: ChainId.Mainnet, provider: NonFungibleAssetProvider.OPENSEA }) +export async function getNFTByChain( + address: string, + tokenId: string, + chainId: ChainId, +): Promise { + const web3 = createWeb3(Services.Ethereum.request, () => ({ + chainId, + })) + const contract = createContract(web3, address, ERC721ABI as AbiItem[]) + if (!contract) return + + const contractDetailed = await getERC721ContractDetailed(contract, address, chainId) + const tokenDetailedFromChain = await getERC721TokenDetailedFromChain(contractDetailed, contract, tokenId) + if (!tokenDetailedFromChain) return + const info = await getERC721TokenAssetFromChain(tokenDetailedFromChain?.info.tokenURI) + const owner = await contract.methods.ownerOf(tokenId).call() + if (info && tokenDetailedFromChain) { + tokenDetailedFromChain.info = { + ...info, + owner, + ...tokenDetailedFromChain.info, + hasTokenDetailed: true, + name: info?.name ?? tokenDetailedFromChain?.info.name ?? '', + } + } + return tokenDetailedFromChain +} + +export async function createNFT(address: string, tokenId: string, chainId?: ChainId) { + const token = await getNFTByChain(address, tokenId, chainId ?? ChainId.Mainnet) + if (token) return token + return EVM_RPC.getNFT({ + address, + tokenId, + chainId: chainId ?? ChainId.Mainnet, + provider: chainId === ChainId.Matic ? NonFungibleAssetProvider.NFTSCAN : NonFungibleAssetProvider.OPENSEA, + }) } export async function getImage(image: string): Promise { @@ -91,3 +159,39 @@ export function formatText(name: string, tokenId: string) { } return `${_name} #${token}` } + +export function formatTokenId(symbol: string, tokenId: string) { + const name = tokenId + return name.length > 18 ? name.slice(0, 12) + '...' : name +} + +export function formatAddress(address: string, size = 0) { + if (size === 0 || size >= 20) return address + return `${address.slice(0, Math.max(0, 2 + size))}...${address.slice(-size)}` +} + +export const sortPersonaBindings = (a: NextIDPersonaBindings, b: NextIDPersonaBindings, userId: string): number => { + const p_a = first(a.proofs.filter((x) => x.identity === userId.toLowerCase())) + const p_b = first(b.proofs.filter((x) => x.identity === userId.toLowerCase())) + + if (!p_a || !p_b) return 0 + if (p_a.created_at > p_b.created_at) return -1 + return 1 +} + +export async function getNFTAvatarByUserId(userId: string, avatarId: string): Promise { + const platform = activatedSocialNetworkUI.configuration.nextIDConfig?.platform as NextIDPlatform + const bindings = await NextIDProof.queryExistedBindingByPlatform(platform, userId.toLowerCase()) + + for (const binding of bindings.sort((a, b) => sortPersonaBindings(a, b, userId))) { + const response = await NextIDStorage.getByIdentity( + binding.persona, + platform, + userId.toLowerCase(), + PLUGIN_ID, + ) + if (!avatarId && response.ok) return response.val + if (response.ok && response.val.avatarId === avatarId) return response.val + } + return +} diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx b/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx index 2d7f34795942..ee079f50d649 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/index.tsx @@ -92,6 +92,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const iconFilterColor = 'rgba(251, 49, 32, 0.3)' return { ApplicationEntryID: base.ID, RenderEntryComponent(EntryComponentProps) { @@ -101,6 +102,7 @@ const sns: Plugin.SNSAdaptor.Definition = { setOpen(true))} /> @@ -111,6 +113,7 @@ const sns: Plugin.SNSAdaptor.Definition = { appBoardSortingDefaultPriority: 12, icon, name: , + iconFilterColor, } })(), ], diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx index a25c322daaf4..defdb691d080 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/index.tsx @@ -59,6 +59,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const iconFilterColor = 'rgba(56, 228, 239, 0.3)' return { ApplicationEntryID: base.ID, RenderEntryComponent(EntryComponentProps) { @@ -67,6 +68,7 @@ const sns: Plugin.SNSAdaptor.Definition = { {...EntryComponentProps} title={name} icon={icon} + iconFilterColor={iconFilterColor} onClick={ EntryComponentProps.onClick ?? (() => @@ -84,6 +86,7 @@ const sns: Plugin.SNSAdaptor.Definition = { appBoardSortingDefaultPriority: 3, marketListSortingPriority: 3, icon, + iconFilterColor, description: , category: 'dapp', name, @@ -93,6 +96,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const iconFilterColor = 'rgba(240, 51, 51, 0.3)' return { ApplicationEntryID: `${base.ID}_claim`, RenderEntryComponent(EntryComponentProps) { @@ -101,6 +105,7 @@ const sns: Plugin.SNSAdaptor.Definition = { <> setOpen(true))} @@ -112,6 +117,7 @@ const sns: Plugin.SNSAdaptor.Definition = { appBoardSortingDefaultPriority: 4, icon, name, + iconFilterColor, } })(), ], diff --git a/packages/mask/src/plugins/MaskBox/SNSAdaptor/index.tsx b/packages/mask/src/plugins/MaskBox/SNSAdaptor/index.tsx index f40ea9b5b7f5..51fec2cdb271 100644 --- a/packages/mask/src/plugins/MaskBox/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/MaskBox/SNSAdaptor/index.tsx @@ -33,6 +33,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const iconFilterColor = 'rgba(0, 87, 255, 0.3)' return { ApplicationEntryID: base.ID, RenderEntryComponent({ disabled }) { @@ -40,6 +41,7 @@ const sns: Plugin.SNSAdaptor.Definition = { openWindow('https://box.mask.io/#/')} /> @@ -51,6 +53,7 @@ const sns: Plugin.SNSAdaptor.Definition = { tutorialLink: 'https://realmasknetwork.notion.site/d0941687649a4ef7a38d71f23ecbe4da', description: , category: 'dapp', + iconFilterColor, name, } })(), diff --git a/packages/mask/src/plugins/Pets/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Pets/SNSAdaptor/index.tsx index 6ff2c8752464..915e88770a5c 100644 --- a/packages/mask/src/plugins/Pets/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Pets/SNSAdaptor/index.tsx @@ -22,6 +22,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const iconFilterColor = 'rgba(226, 0, 233, 0.2)' return { ApplicationEntryID: base.ID, RenderEntryComponent(EntryComponentProps) { @@ -32,6 +33,7 @@ const sns: Plugin.SNSAdaptor.Definition = { {...EntryComponentProps} title={name} icon={icon} + iconFilterColor={iconFilterColor} onClick={EntryComponentProps.onClick ?? openDialog} /> ) @@ -42,6 +44,7 @@ const sns: Plugin.SNSAdaptor.Definition = { description: , name, tutorialLink: 'https://twitter.com/NonFFriend', + iconFilterColor, category: 'dapp', } })(), diff --git a/packages/mask/src/plugins/Savings/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Savings/SNSAdaptor/index.tsx index 2683744563f4..2d3693295dac 100644 --- a/packages/mask/src/plugins/Savings/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Savings/SNSAdaptor/index.tsx @@ -13,6 +13,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const iconFilterColor = 'rgba(255, 83, 146, 0.3)' return { ApplicationEntryID: base.ID, RenderEntryComponent(EntryComponentProps) { @@ -22,6 +23,7 @@ const sns: Plugin.SNSAdaptor.Definition = { setOpen(true))} /> @@ -32,6 +34,7 @@ const sns: Plugin.SNSAdaptor.Definition = { appBoardSortingDefaultPriority: 7, icon, name, + iconFilterColor, } })(), ], diff --git a/packages/mask/src/plugins/Tips/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Tips/SNSAdaptor/index.tsx index 8a6f38fa2d51..8800886982fa 100644 --- a/packages/mask/src/plugins/Tips/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Tips/SNSAdaptor/index.tsx @@ -18,6 +18,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const name = base.name const icon = + const iconFilterColor = 'rgba(247, 147, 30, 0.3)' return { RenderEntryComponent(EntryComponentProps) { const [open, setOpen] = useState(false) @@ -27,6 +28,7 @@ const sns: Plugin.SNSAdaptor.Definition = { } {...EntryComponentProps} + iconFilterColor={iconFilterColor} icon={icon} onClick={EntryComponentProps.onClick ?? (() => setOpen(true))} /> @@ -38,6 +40,7 @@ const sns: Plugin.SNSAdaptor.Definition = { ApplicationEntryID: base.ID, icon, name, + iconFilterColor, appBoardSortingDefaultPriority: 8, nextIdRequired: true, } diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx index 2594adcb01a4..a6f9ab174c5c 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/index.tsx @@ -27,6 +27,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const iconFilterColor = 'rgba(247, 147, 30, 0.3)' return { ApplicationEntryID: base.ID, RenderEntryComponent(EntryComponentProps) { @@ -37,6 +38,7 @@ const sns: Plugin.SNSAdaptor.Definition = { {...EntryComponentProps} title={name} icon={icon} + iconFilterColor={iconFilterColor} onClick={EntryComponentProps.onClick ?? openDialog} /> ) @@ -48,6 +50,7 @@ const sns: Plugin.SNSAdaptor.Definition = { name, tutorialLink: 'https://realmasknetwork.notion.site/f2e7d081ee38487ca1db958393ac1edc', description: , + iconFilterColor, } })(), ], diff --git a/packages/mask/src/plugins/Transak/SNSAdaptor/index.tsx b/packages/mask/src/plugins/Transak/SNSAdaptor/index.tsx index 17c21b451749..e378b0370b1d 100644 --- a/packages/mask/src/plugins/Transak/SNSAdaptor/index.tsx +++ b/packages/mask/src/plugins/Transak/SNSAdaptor/index.tsx @@ -17,6 +17,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = + const iconFilterColor = 'rgba(69, 110, 255, 0.3)' return { ApplicationEntryID: base.ID, RenderEntryComponent(EntryComponentProps) { @@ -26,6 +27,7 @@ const sns: Plugin.SNSAdaptor.Definition = { @@ -38,6 +40,7 @@ const sns: Plugin.SNSAdaptor.Definition = { description: , name, category: 'dapp', + iconFilterColor, } })(), ], diff --git a/packages/mask/src/resources/NFTAvatar.tsx b/packages/mask/src/resources/NFTAvatar.tsx new file mode 100644 index 000000000000..fd2272b36ca7 --- /dev/null +++ b/packages/mask/src/resources/NFTAvatar.tsx @@ -0,0 +1,28 @@ +import { SvgIconProps, SvgIcon } from '@mui/material' + +const svg = ( + + + + + + + + + + +) + +export const NFTAvatarsIcon = (props: SvgIconProps) => {svg} diff --git a/packages/mask/src/social-network-adaptor/facebook.com/utils/selector.ts b/packages/mask/src/social-network-adaptor/facebook.com/utils/selector.ts index a8db839959cf..4cadcc089825 100644 --- a/packages/mask/src/social-network-adaptor/facebook.com/utils/selector.ts +++ b/packages/mask/src/social-network-adaptor/facebook.com/utils/selector.ts @@ -71,7 +71,9 @@ export const searchFacebookProfileSettingButtonSelector = () => querySelector('[role="button"] [role="img"]').closest(10).querySelector('input[type="file"] ~ div').closest(2) export const searchFacebookEditProfileSelector = () => - querySelector('[role="button"] [role="img"]').closest(1).querySelector('i[data-visualcompletion="css-img"]') + querySelector('[role="main"] [role="button"] [role="img"]') + .closest(1) + .querySelector('i[data-visualcompletion="css-img"]') export const searchFacebookSaveAvatarButtonSelector = () => new LiveSelector() diff --git a/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts b/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts index 52eb21793cf8..3eca2d3fb5c0 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts @@ -8,6 +8,7 @@ import { searchSelfHandleSelector, searchSelfNicknameSelector, searchSelfAvatarSelector, + searchWatcherAvatarSelector, selfInfoSelectors, } from '../utils/selector' import { creator, SocialNetworkUI as Next } from '../../../social-network' @@ -48,9 +49,11 @@ function resolveLastRecognizedIdentityInner( ref: Next.CollectingCapabilities.IdentityResolveProvider['recognized'], cancel: AbortSignal, ) { - const task = isMobileTwitter ? recognizeMobile() : recognizeDesktop() - const assign = () => { - const { handle, nickname, avatar } = task.collect() + const assign = async () => { + await delay(5000) + const avatar = searchSelfAvatarSelector().evaluate()?.getAttribute('src') ?? '' + const handle = searchSelfHandleSelector().evaluate()?.textContent?.trim()?.replace(/^@/, '') + const nickname = searchSelfNicknameSelector().evaluate()?.textContent?.trim() ?? '' if (handle) { ref.value = { @@ -60,14 +63,29 @@ function resolveLastRecognizedIdentityInner( } } } - const watcher = task.watcher - .addListener('onAdd', () => assign()) - .addListener('onChange', () => assign()) - .startWatch({ - childList: true, - subtree: true, + + const createWatcher = (selector: LiveSelector) => { + const watcher = new MutationObserverWatcher(selector) + .addListener('onAdd', () => assign()) + .addListener('onChange', () => assign()) + .startWatch({ + childList: true, + subtree: true, + attributes: true, + attributeFilter: ['src'], + }) + + window.addEventListener('locationchange', assign) + cancel.addEventListener('abort', () => { + window.removeEventListener('locationchange', assign) + watcher.stopWatch() }) - cancel.addEventListener('abort', () => watcher.stopWatch()) + } + + assign() + + createWatcher(searchSelfHandleSelector()) + createWatcher(searchWatcherAvatarSelector()) } function resolveLastRecognizedIdentityMobileInner( @@ -99,7 +117,7 @@ function resolveCurrentVisitingIdentityInner( const avatarSelector = searchAvatarSelector() const avatarMetaSelector = searchAvatarMetaSelector() const assign = async () => { - await delay(500) + await delay(5000) const bio = getBio() const homepage = getPersonalHomepage() const nickname = getNickname() diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarEditProfile.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarEditProfile.tsx index a13a3ebff6f7..b74ec72baf40 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarEditProfile.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarEditProfile.tsx @@ -1,6 +1,9 @@ import { MutationObserverWatcher } from '@dimensiondev/holoflows-kit' +import { CrossIsolationMessages } from '@masknet/shared-base' import { makeStyles } from '@masknet/theme' -import { useState, useEffect } from 'react' +import { useState, useEffect, useCallback } from 'react' +import { usePersonaConnectStatus } from '../../../../components/DataSource/usePersonaConnectStatus' +import { NFTAvatarDialog } from '../../../../plugins/Avatar/Application/NFTAvatarsDialog' import { NFTAvatarButton } from '../../../../plugins/Avatar/SNSAdaptor/NFTAvatarButton' import { startWatch, createReactRootShadowed, useLocationChange } from '../../../../utils' import { searchEditProfileSelector } from '../../utils/selector' @@ -17,6 +20,8 @@ interface StyleProps { minHeight: number fontSize: number marginBottom: number + border: string + color: string } const useStyles = makeStyles()((theme, props) => ({ root: { @@ -24,7 +29,11 @@ const useStyles = makeStyles()((theme, props) => ({ fontSize: props.fontSize, marginBottom: props.marginBottom, marginTop: 1, - marginRight: theme.spacing(0.5), + marginRight: theme.spacing(2), + border: props.border, + }, + text: { + color: props.color, }, })) @@ -34,16 +43,43 @@ export function openNFTAvatarSettingDialog() { } function OpenNFTAvatarEditProfileButtonInTwitter() { - const [style, setStyle] = useState({ minHeight: 32, fontSize: 14, marginBottom: 11 }) + const [style, setStyle] = useState({ + minHeight: 32, + fontSize: 14, + marginBottom: 11, + border: 'none', + color: '', + }) + const [open, setOpen] = useState(false) + + const personaConnectStatus = usePersonaConnectStatus() + + const createOrConnectPersona = useCallback(() => { + personaConnectStatus.action?.() + }, [personaConnectStatus]) + + const verifyPersona = useCallback(() => { + CrossIsolationMessages.events.verifyNextID.sendToAll(undefined) + }, []) + + const clickHandler = (() => { + if (personaConnectStatus.hasPersona === false) return createOrConnectPersona + if (personaConnectStatus.connected === false) return verifyPersona + return + })() const setStyleFromEditProfileSelector = () => { const editDom = searchEditProfileSelector().evaluate() if (!editDom) return + const css = window.getComputedStyle(editDom) + const spanCss = window.getComputedStyle(editDom.querySelector('span')!) setStyle({ minHeight: Number(css.minHeight.replace('px', '')), fontSize: Number(css.fontSize.replace('px', '')), marginBottom: Number(css.marginBottom.replace('px', '')), + border: css.border, + color: spanCss.color, }) } @@ -52,5 +88,13 @@ function OpenNFTAvatarEditProfileButtonInTwitter() { useLocationChange(() => setStyleFromEditProfileSelector()) const { classes } = useStyles(style) - return + return ( + <> + setOpen(true))} + /> + setOpen(false)} /> + + ) } diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarInTwitter.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarInTwitter.tsx index cefd28736ec5..1fb279a56651 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarInTwitter.tsx +++ b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/NFTAvatarInTwitter.tsx @@ -6,7 +6,6 @@ import { useEffect, useMemo, useRef, useState } from 'react' import { useCurrentVisitingIdentity } from '../../../../components/DataSource/useActivatedUI' import { resolveOpenSeaLink, useWallet } from '@masknet/web3-shared-evm' import type { AvatarMetaDB } from '../../../../plugins/Avatar/types' -import { useNFTAvatar } from '../../../../plugins/Avatar/hooks' import { getAvatarId } from '../../utils/user' import { PluginNFTAvatarRPC } from '../../../../plugins/Avatar/messages' import { NFTBadge } from '../../../../plugins/Avatar/SNSAdaptor/NFTBadge' @@ -16,6 +15,7 @@ import { rainbowBorderKeyFrames } from '../../../../plugins/Avatar/SNSAdaptor/Ra import { trim } from 'lodash-unified' import { RSS3_KEY_SNS } from '../../../../plugins/Avatar/constants' import { openWindow } from '@masknet/shared-base-ui' +import { usePersonaNFTAvatar } from '../../../../plugins/Avatar/hooks/usePersonaNFTAvatar' export function injectNFTAvatarInTwitter(signal: AbortSignal) { const watcher = new MutationObserverWatcher(searchTwitterAvatarSelector()) @@ -52,7 +52,11 @@ function NFTAvatarInTwitter() { const borderElement = useRef() const identity = useCurrentVisitingIdentity() const wallet = useWallet() - const { value: _avatar } = useNFTAvatar(identity.identifier?.userId, RSS3_KEY_SNS.TWITTER) + const { value: _avatar } = usePersonaNFTAvatar( + identity.identifier?.userId ?? '', + getAvatarId(identity.avatar ?? ''), + RSS3_KEY_SNS.TWITTER, + ) const [avatar, setAvatar] = useState() const windowSize = useWindowSize() const location = useLocation() @@ -196,7 +200,7 @@ function NFTAvatarInTwitter() { if (!avatar || !linkParentDom || !showAvatar) return const handler = () => { - openWindow(resolveOpenSeaLink(avatar.address, avatar.tokenId)) + openWindow(resolveOpenSeaLink(avatar.address, avatar.tokenId, avatar.chainId)) } linkParentDom.addEventListener('click', handler) diff --git a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/ProfileNFTAvatar.tsx b/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/ProfileNFTAvatar.tsx deleted file mode 100644 index d5f59f5f0b5c..000000000000 --- a/packages/mask/src/social-network-adaptor/twitter.com/injection/NFT/ProfileNFTAvatar.tsx +++ /dev/null @@ -1,105 +0,0 @@ -import { MutationObserverWatcher } from '@dimensiondev/holoflows-kit' -import { makeStyles } from '@masknet/theme' -import { useEffect, useState } from 'react' -import { createReactRootShadowed, MaskMessages, NFTAvatarEvent, startWatch } from '../../../../utils' -import { - searchTwitterAvatarOpenFilesSelector, - searchProfessionalButtonSelector, - searchProfileSaveSelector, - searchProfileSetAvatarSelector, -} from '../../utils/selector' -import { useCurrentVisitingIdentity } from '../../../../components/DataSource/useActivatedUI' -import { getAvatarId } from '../../utils/user' -import { toPNG } from '../../../../plugins/Avatar/utils' -import type { ERC721TokenDetailed } from '@masknet/web3-shared-evm' -import { NFTAvatar } from '../../../../plugins/Avatar/SNSAdaptor/NFTAvatar' -import { hookInputUploadOnce } from '@masknet/injected-script' - -export async function injectProfileNFTAvatarInTwitter(signal: AbortSignal) { - const watcher = new MutationObserverWatcher(searchProfileSetAvatarSelector()) - startWatch(watcher, signal) - createReactRootShadowed(watcher.firstDOMProxy.afterShadow, { signal }).render() -} - -const useStyles = makeStyles<{ - paddingTop: string - paddingLeft: string - paddingRight: string - paddingBottom: string -}>()((theme, props) => ({ - root: { - paddingLeft: props.paddingLeft, - paddingTop: props.paddingTop, - paddingRight: props.paddingRight, - paddingBottom: props.paddingBottom, - }, -})) - -function getStyles() { - const ele = searchProfessionalButtonSelector().evaluate() - - if (!ele) - return { - paddingTop: '11px', - paddingLeft: '14px', - paddingRight: '14px', - paddingBottom: '14px', - } - const style = window.getComputedStyle(ele) - return { - paddingTop: style.paddingTop, - paddingLeft: style.paddingLeft, - paddingRight: style.paddingRight, - paddingBottom: style.paddingBottom, - } -} - -async function changeImageToActiveElements(image: File | Blob): Promise { - const imageBuffer = await image.arrayBuffer() - hookInputUploadOnce('image/png', 'avatar.png', new Uint8Array(imageBuffer)) - ;(searchTwitterAvatarOpenFilesSelector().evaluate()[0]?.parentElement?.children[0] as HTMLElement)?.click() -} - -function NFTAvatarInTwitter() { - const { classes } = useStyles(getStyles()) - const identity = useCurrentVisitingIdentity() - - const [avatarEvent, setAvatarEvent] = useState() - - const onChange = async (token: ERC721TokenDetailed) => { - if (!token.info.imageURL) return - const image = await toPNG(token.info.imageURL) - if (!image) return - if (!identity.identifier) return - changeImageToActiveElements(image) - - setAvatarEvent({ - userId: identity.identifier.userId, - avatarId: getAvatarId(identity.avatar ?? ''), - address: token.contractDetailed.address, - tokenId: token.tokenId, - }) - } - - const handler = () => { - if (!identity.identifier) return - MaskMessages.events.NFTAvatarUpdated.sendToLocal( - avatarEvent ?? { - userId: identity.identifier.userId, - avatarId: getAvatarId(identity.avatar ?? ''), - address: '', - tokenId: '', - }, - ) - setAvatarEvent(undefined) - } - - useEffect(() => { - const profileSave = searchProfileSaveSelector().evaluate() - if (!profileSave) return - profileSave.addEventListener('click', handler) - return () => profileSave.removeEventListener('click', handler) - }, [handler]) - - return -} diff --git a/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts b/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts index f7cd82bef7eb..a51c4e3bcb8a 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts @@ -29,7 +29,6 @@ import { EnhanceableSite, NextIDPlatform, ProfileIdentifier } from '@masknet/sha import { makeStyles } from '@masknet/theme' import { injectNFTAvatarInTwitter } from './injection/NFT/NFTAvatarInTwitter' import { injectOpenTipButtonOnProfile } from './injection/Tip/index' -import { injectProfileNFTAvatarInTwitter } from './injection/NFT/ProfileNFTAvatar' import { injectUserNFTAvatarAtTwitter } from './injection/NFT/Avatar' import { injectOpenNFTAvatarEditProfileButton, openNFTAvatarSettingDialog } from './injection/NFT/NFTAvatarEditProfile' import { injectUserNFTAvatarAtTweet } from './injection/NFT/TweetNFTAvatar' @@ -51,7 +50,7 @@ const useInjectedDialogClassesOverwriteTwitter = makeStyles()((theme) => { alignItems: 'center', }, paper: { - width: '600px !important', + width: '612px !important', maxWidth: 'none', boxShadow: 'none', backgroundImage: 'none', @@ -179,7 +178,6 @@ const twitterUI: SocialNetworkUI.Definition = { userBadge: injectMaskUserBadgeAtTwitter, commentComposition: undefined, userAvatar: injectUserNFTAvatarAtTwitter, - enhancedProfileNFTAvatar: injectProfileNFTAvatarInTwitter, profileAvatar: injectNFTAvatarInTwitter, profileTip: injectOpenTipButtonOnProfile, openNFTAvatar: injectOpenNFTAvatarEditProfileButton, diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts index 9ef0a8486c87..197b49efeb03 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts @@ -255,6 +255,9 @@ export const searchSelfNicknameSelector = () => { ) } +export const searchWatcherAvatarSelector = () => + querySelector('[data-testid="SideNav_AccountSwitcher_Button"] img') + export const searchSelfAvatarSelector = () => { return querySelector( [ diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index 6c2f87585320..15aa383c7e6b 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -335,6 +335,8 @@ export namespace Plugin.SNSAdaptor { description?: I18NFieldOrReactNode + iconFilterColor?: string + tutorialLink?: string /** * Does the application listed in the DAPP list diff --git a/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx b/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx index 09511e7f3052..d0fb13072772 100644 --- a/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx +++ b/packages/plugins/CrossChainBridge/src/SNSAdaptor/index.tsx @@ -13,6 +13,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = { i18nKey: '__plugin_name', fallback: 'Cross-chain' } + const iconFilterColor = 'rgba(183, 212, 255, 0.3)' return { ApplicationEntryID: base.ID, RenderEntryComponent({ disabled }) { @@ -22,6 +23,7 @@ const sns: Plugin.SNSAdaptor.Definition = { } disabled={disabled} + iconFilterColor={iconFilterColor} icon={icon} onClick={() => setOpen(true)} /> @@ -32,6 +34,7 @@ const sns: Plugin.SNSAdaptor.Definition = { appBoardSortingDefaultPriority: 5, name, icon, + iconFilterColor, } })(), ], diff --git a/packages/plugins/FileService/src/SNSAdaptor/index.tsx b/packages/plugins/FileService/src/SNSAdaptor/index.tsx index 94d5a656f151..5a6fd71d8c6f 100644 --- a/packages/plugins/FileService/src/SNSAdaptor/index.tsx +++ b/packages/plugins/FileService/src/SNSAdaptor/index.tsx @@ -37,22 +37,26 @@ const definition: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = { i18nKey: '__plugin_name', fallback: 'File Service' } + const iconFilterColor = 'rgba(247, 147, 30, 0.3)' return { ApplicationEntryID: base.ID, - RenderEntryComponent({ disabled }) { + RenderEntryComponent(EntryComponentProps) { return ( } - disabled={disabled} + {...EntryComponentProps} icon={icon} - onClick={() => - CrossIsolationMessages.events.requestComposition.sendToLocal({ - reason: 'timeline', - open: true, - options: { - startupPlugin: base.ID, - }, - }) + iconFilterColor={iconFilterColor} + onClick={ + EntryComponentProps.onClick ?? + (() => + CrossIsolationMessages.events.requestComposition.sendToLocal({ + reason: 'timeline', + open: true, + options: { + startupPlugin: base.ID, + }, + })) } /> ) @@ -67,6 +71,7 @@ const definition: Plugin.SNSAdaptor.Definition = { 'Decentralized file storage, permanently. Upload and share files to your Mask friends on top of Arweave Network.', }, name, + iconFilterColor, tutorialLink: 'https://realmasknetwork.notion.site/8c8fe1efce5a48b49739a38f4ea8c60f', } })(), diff --git a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx index 1a7a963e487b..f4ce3d0d3d84 100644 --- a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx +++ b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/index.tsx @@ -13,6 +13,7 @@ const sns: Plugin.SNSAdaptor.Definition = { (() => { const icon = const name = { i18nKey: '__plugin_name', fallback: 'Check Security' } + const iconFilterColor = 'rgba(69, 110, 255, 0.3)' return { ApplicationEntryID: base.ID, @@ -23,6 +24,7 @@ const sns: Plugin.SNSAdaptor.Definition = { } disabled={disabled} + iconFilterColor={iconFilterColor} icon={icon} onClick={() => setOpen(true)} /> @@ -32,6 +34,7 @@ const sns: Plugin.SNSAdaptor.Definition = { }, name, icon, + iconFilterColor, appBoardSortingDefaultPriority: 13, marketListSortingPriority: 16, } diff --git a/packages/shared/src/UI/components/ApplicationEntry/index.tsx b/packages/shared/src/UI/components/ApplicationEntry/index.tsx index 56a241599d1b..96192f8a466d 100644 --- a/packages/shared/src/UI/components/ApplicationEntry/index.tsx +++ b/packages/shared/src/UI/components/ApplicationEntry/index.tsx @@ -3,89 +3,105 @@ import type { Plugin } from '@masknet/plugin-infra' import { makeStyles, ShadowRootTooltip } from '@masknet/theme' import { Typography } from '@mui/material' -const useStyles = makeStyles<{ disabled: boolean }>()((theme, { disabled }) => ({ - applicationBox: { - display: 'flex', - flexDirection: 'column', - justifyContent: 'center', - alignItems: 'center', - backgroundColor: theme.palette.background.default, - borderRadius: '8px', - height: 100, - }, - applicationBoxHover: { - cursor: 'pointer', - '&:hover': { - transform: 'scale(1.02) translateY(-2px)', - background: theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.common.black, - boxShadow: theme.palette.mode === 'light' ? '0 5px 8px rgba(0, 0, 0, 0.05)' : 'none', +const useStyles = makeStyles<{ disabled: boolean; iconFilterColor?: string }>()( + (theme, { disabled, iconFilterColor }) => ({ + applicationBox: { + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + backgroundColor: theme.palette.background.default, + borderRadius: '8px', + height: 100, }, - }, - applicationImg: { - width: 36, - height: 36, - marginBottom: 10, - }, - title: { - fontSize: 15, - }, - disabled: { - opacity: 0.4, - cursor: 'default !important', - pointerEvent: 'none', - }, - iconWrapper: { - '> *': { + applicationBoxHover: { + cursor: 'pointer', + '&:hover': { + transform: 'scale(1.02) translateY(-2px)', + background: theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.common.black, + boxShadow: theme.palette.mode === 'light' ? '0px 5px 8px rgba(0, 0, 0, 0.05)' : 'none', + }, + }, + applicationImg: { width: 36, height: 36, + marginBottom: 10, + }, + title: { + fontSize: 15, + }, + disabled: { + opacity: 0.4, + cursor: 'default !important', + pointerEvent: 'none', + }, + iconWrapper: { + '> *': { + width: 36, + height: 36, + }, + ...(iconFilterColor + ? { filter: `drop-shadow(0px 6px 12px ${iconFilterColor})`, backdropFilter: 'blur(16px)' } + : {}), + }, + tooltip: { + backgroundColor: theme.palette.mode === 'light' ? theme.palette.common.black : theme.palette.common.white, + }, + tooltipHint: { + fontSize: 14, + color: theme.palette.mode === 'light' ? theme.palette.common.white : theme.palette.common.black, + }, + arrow: { + color: theme.palette.mode === 'light' ? theme.palette.common.black : theme.palette.common.white, + }, + recommendFeatureApplicationBox: { + width: 260, + minWidth: 260, + height: 97, + marginRight: 12, + cursor: 'pointer', + display: 'inline-flex', + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'space-between', + padding: 10, + borderRadius: 8, + }, + recommendFeatureAppIconWrapper: { + marginRight: 12, + '> *': { + width: 48, + height: 48, + }, + }, + recommendFeatureAppListItemName: { + fontSize: 14, + fontWeight: 500, + cursor: disabled ? 'default' : 'pointer', + color: theme.palette.common.white, }, - }, - recommendFeatureApplicationBox: { - width: 225, - minWidth: 225, - height: 97, - marginRight: 12, - cursor: 'pointer', - display: 'inline-flex', - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-between', - padding: 10, - borderRadius: 8, - }, - recommendFeatureAppIconWrapper: { - marginRight: 12, - '> *': { - width: 48, - height: 48, + recommendFeatureAppListItemDescription: { + fontSize: 12, + fontWeight: 500, + cursor: disabled ? 'default' : 'pointer', + color: theme.palette.common.white, }, - }, - recommendFeatureAppListItemName: { - fontSize: 14, - fontWeight: 500, - cursor: disabled ? 'default' : 'pointer', - color: theme.palette.common.white, - }, - recommendFeatureAppListItemDescription: { - fontSize: 12, - fontWeight: 500, - cursor: disabled ? 'default' : 'pointer', - color: theme.palette.common.white, - }, -})) + }), +) interface ApplicationEntryProps { icon: React.ReactNode title: React.ReactNode disabled?: boolean recommendFeature?: Plugin.SNSAdaptor.ApplicationEntry['recommendFeature'] - tooltipHint?: string + iconFilterColor?: string + tooltipHint?: string | React.ReactElement onClick: () => void } export function ApplicationEntry(props: ApplicationEntryProps) { - const { title, onClick, disabled = false, icon, tooltipHint, recommendFeature } = props - const { classes } = useStyles({ disabled }) + const { title, onClick, disabled = false, icon, tooltipHint, recommendFeature, iconFilterColor } = props + const { classes } = useStyles({ disabled, iconFilterColor }) const jsx = recommendFeature ? (
{tooltipHint}}> + title={{tooltipHint}}> {jsx} ) : ( diff --git a/packages/shared/src/contexts/components/InjectedDialog.tsx b/packages/shared/src/contexts/components/InjectedDialog.tsx index f62c51d8da29..a81a51cf4ea5 100644 --- a/packages/shared/src/contexts/components/InjectedDialog.tsx +++ b/packages/shared/src/contexts/components/InjectedDialog.tsx @@ -152,7 +152,11 @@ export function InjectedDialog(props: InjectedDialogProps) { aria-label={t.dialog_dismiss()} onClick={onClose}> diff --git a/packages/web3-providers/src/NextID/kv.ts b/packages/web3-providers/src/NextID/kv.ts index d9dcaefcaf4f..08e323a8f23f 100644 --- a/packages/web3-providers/src/NextID/kv.ts +++ b/packages/web3-providers/src/NextID/kv.ts @@ -4,7 +4,7 @@ import urlcat from 'urlcat' import type { NextIDStoragePayload, NextIDPlatform } from '@masknet/shared-base' import { fetchJSON } from './helper' -import type { Result } from 'ts-results' +import { Err, Ok, Result } from 'ts-results' import type { NextIDBaseAPI } from '../types' import { KV_BASE_URL_DEV, KV_BASE_URL_PROD } from './constants' @@ -29,10 +29,30 @@ export class NextIDStorageAPI implements NextIDBaseAPI.Storage { * @param personaPublicKey * */ + async getByIdentity( + personaPublicKey: string, + platform: NextIDPlatform, + identity: string, + pluginId: string, + ): Promise> { + const response = await fetchJSON<{ + persona: string + proofs: { + platform: NextIDPlatform + identity: string + content: Record + }[] + }>(urlcat(BASE_URL, '/v1/kv', { persona: personaPublicKey })) + if (!response.ok) return Err('User not found') + + const data = + response.val.proofs?.filter((x) => x.identity === identity.toLowerCase() && x.platform === platform) ?? [] + if (!data.length) return Err('Not found') + return Ok(data[0].content[pluginId]) + } async get(personaPublicKey: string): Promise> { return fetchJSON(urlcat(BASE_URL, '/v1/kv', { persona: personaPublicKey })) } - /** * Get signature payload for updating * @param personaPublicKey diff --git a/packages/web3-providers/src/twitter/index.ts b/packages/web3-providers/src/twitter/index.ts index 8b38595f9116..83533ae075ea 100644 --- a/packages/web3-providers/src/twitter/index.ts +++ b/packages/web3-providers/src/twitter/index.ts @@ -128,7 +128,7 @@ export class TwitterAPI implements TwitterBaseAPI.Provider { } } - async uploadUserAvatar(image: File | Blob) { + async uploadUserAvatar(screenName: string, image: File | Blob): Promise { // INIT const initURL = `${UPLOAD_AVATAR_URL}?command=INIT&total_bytes=${image.size}&media_type=${encodeURIComponent( image.type, @@ -151,21 +151,43 @@ export class TwitterAPI implements TwitterBaseAPI.Provider { // FINALIZE const finalizeURL = `${UPLOAD_AVATAR_URL}?command=FINALIZE&media_id=${mediaId}` - const data = await request<{ - media_id: number - media_id_string: string - size: number - image: { - image_type: string - w: number - h: number - } - }>(finalizeURL, { + return request(finalizeURL, { method: 'POST', credentials: 'include', }) + } + async updateProfileImage(screenName: string, media_id_str: string): Promise { + const { bearerToken, queryToken, csrfToken } = await getTokens() + const headers = { + authorization: `Bearer ${bearerToken}`, + 'x-csrf-token': csrfToken, + 'content-type': 'application/json', + 'x-twitter-auth-type': 'OAuth2Session', + 'x-twitter-active-user': 'yes', + referer: `https://twitter.com/${screenName}`, + } + const updateProfileImageURL = 'https://twitter.com/i/api/1.1/account/update_profile_image.json' + if (!bearerToken || !queryToken || !csrfToken) return + const response = await fetch( + urlcat(updateProfileImageURL, { + media_id: media_id_str, + skip_status: 1, + return_user: true, + }), + { + method: 'POST', + credentials: 'include', + headers, + }, + ) - return data + const updateInfo = await response.json() + return { + imageUrl: updateInfo.profile_image_url_https, + mediaId: updateInfo.id_str, + nickname: updateInfo.name, + userId: updateInfo.screen_name, + } } } diff --git a/packages/web3-providers/src/types.ts b/packages/web3-providers/src/types.ts index 124a9110374d..e33ba8eed336 100644 --- a/packages/web3-providers/src/types.ts +++ b/packages/web3-providers/src/types.ts @@ -9,13 +9,7 @@ import type { } from '@masknet/web3-shared-evm' import type { CurrencyType } from '@masknet/plugin-infra/web3' import type { Result } from 'ts-results' -import type { - NextIDAction, - NextIDStoragePayload, - NextIDPayload, - NextIDPlatform, - NextIDStorageInfo, -} from '@masknet/shared-base' +import type { NextIDAction, NextIDStoragePayload, NextIDPayload, NextIDPlatform } from '@masknet/shared-base' export namespace ExplorerAPI { export type Transaction = Web3Transaction & { @@ -328,7 +322,13 @@ export namespace NextIDBaseAPI { patchData: unknown, pluginId: string, ): Promise> - get(key: string): Promise> + getByIdentity( + key: string, + platform: NextIDPlatform, + identity: string, + pluginId: string, + ): Promise> + get(key: string): Promise> getPayload( personaPublicKey: string, platform: NextIDPlatform, @@ -470,11 +470,28 @@ export namespace TwitterBaseAPI { }[] } } + export interface AvatarInfo { + nickname: string + userId: string + imageUrl: string + mediaId: string + } export interface Settings { screen_name: string } + export interface TwitterResult { + media_id: number + media_id_string: string + size: number + image: { + image_type: string + w: number + h: number + } + } + export interface Provider { getSettings: () => Promise getUserNftContainer: (screenName: string) => Promise< @@ -485,6 +502,8 @@ export namespace TwitterBaseAPI { } | undefined > + uploadUserAvatar: (screenName: string, image: Blob | File) => Promise + updateProfileImage: (screenName: string, media_id_str: string) => Promise } } diff --git a/packages/web3-shared/evm/contracts/useERC721TokenContract.ts b/packages/web3-shared/evm/contracts/useERC721TokenContract.ts index 49e4e3d2c548..75a1c81d892d 100644 --- a/packages/web3-shared/evm/contracts/useERC721TokenContract.ts +++ b/packages/web3-shared/evm/contracts/useERC721TokenContract.ts @@ -2,7 +2,8 @@ import type { AbiItem } from 'web3-utils' import ERC721ABI from '@masknet/web3-contracts/abis/ERC721.json' import type { ERC721 } from '@masknet/web3-contracts/types/ERC721' import { useContract } from '../hooks/useContract' +import type { ChainId } from '../types' -export function useERC721TokenContract(address?: string) { - return useContract(address, ERC721ABI as AbiItem[]) +export function useERC721TokenContract(address?: string, chainId?: ChainId) { + return useContract(address, ERC721ABI as AbiItem[], chainId) } diff --git a/packages/web3-shared/evm/hooks/useCollectibles.ts b/packages/web3-shared/evm/hooks/useCollectibles.ts index 57f342812b1b..89e9f992cb60 100644 --- a/packages/web3-shared/evm/hooks/useCollectibles.ts +++ b/packages/web3-shared/evm/hooks/useCollectibles.ts @@ -1,6 +1,6 @@ -import type { ChainId, ERC721TokenCollectionInfo, ERC721TokenDetailed } from '../types' +import { ChainId, ERC721TokenCollectionInfo, ERC721TokenDetailed } from '../types' import { useWeb3Context } from '../context' -import { uniqWith } from 'lodash-unified' +import { noop, uniqWith } from 'lodash-unified' import { isSameAddress } from '../utils' import { useSocket } from './useSocket' import { useMemo } from 'react' @@ -54,9 +54,9 @@ export function useCollectibles(address: string, chainId: ChainId | null, depend (a, b) => isSameAddress(a.contractDetailed.address, b.contractDetailed.address) && a.tokenId === b.tokenId, ) return { - data: all as ERC721TokenDetailed[], + data: chainId === ChainId.Mainnet ? (all as ERC721TokenDetailed[]) : [], state, - error, - retry, + error: chainId === ChainId.Mainnet ? error : undefined, + retry: chainId === ChainId.Mainnet ? retry : noop, } } diff --git a/packages/web3-shared/evm/hooks/useERC721TokenDetailed.ts b/packages/web3-shared/evm/hooks/useERC721TokenDetailed.ts index 6dd2eb3d033f..cc9397ca4313 100644 --- a/packages/web3-shared/evm/hooks/useERC721TokenDetailed.ts +++ b/packages/web3-shared/evm/hooks/useERC721TokenDetailed.ts @@ -117,6 +117,7 @@ export async function getERC721TokenAssetFromChain(tokenURI?: string): Promise=6.12'} dependencies: '@0xproject/typescript-typings': 0.3.2 @@ -1519,7 +1523,7 @@ packages: dev: false /@0xproject/types/0.7.0: - resolution: {integrity: sha1-+tE5Je6SrU7hmAZopcsr7U3Kq48=} + resolution: {integrity: sha512-LlTnq7raPnCioCokNy5CLDxZJeg3KtcHT4PBJD6BDiXYtNJxBWvL7/jr6JiwdjReNg7ihGi1265VKfFX7qukRw==} engines: {node: '>=6.12'} dependencies: '@types/node': 17.0.31 @@ -1527,7 +1531,7 @@ packages: dev: false /@0xproject/typescript-typings/0.3.2: - resolution: {integrity: sha1-q8NgtEGv2pkxAEUMqDad+r91k2s=} + resolution: {integrity: sha512-sHwGTxerREyQhyXFHhZRHvy7PlbBUjsoVbxhf5f+9JasC+IhQ2Nv4uJFjOo16uUPPp7l+lsRUvK/ZwrdGRbFBA==} engines: {node: '>=6.12'} dependencies: '@0xproject/types': 0.7.0 @@ -1761,9 +1765,24 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.16.7 - '@babel/types': 7.17.0 + '@babel/types': 7.17.10 dev: true + /@babel/helper-compilation-targets/7.16.7: + resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/helper-validator-option': 7.16.7 + browserslist: 4.20.3 + semver: 6.3.0 + dev: false + /@babel/helper-compilation-targets/7.16.7_@babel+core@7.17.10: resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} engines: {node: '>=6.9.0'} @@ -1796,6 +1815,22 @@ packages: semver: 6.3.0 dev: true + /@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.9: + resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/compat-data': 7.17.10 + '@babel/core': 7.17.9 + '@babel/helper-validator-option': 7.16.7 + browserslist: 4.20.3 + semver: 6.3.0 + dev: true + /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.10: resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} engines: {node: '>=6.9.0'} @@ -1907,10 +1942,10 @@ packages: optional: true dependencies: '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.10 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 - '@babel/traverse': 7.17.9 + '@babel/traverse': 7.17.10 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.0 @@ -1928,10 +1963,10 @@ packages: optional: true dependencies: '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.9 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.9 '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 - '@babel/traverse': 7.17.9 + '@babel/traverse': 7.17.10 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.0 @@ -1940,6 +1975,26 @@ packages: - supports-color dev: true + /@babel/helper-define-polyfill-provider/0.2.4: + resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} + peerDependencies: + '@babel/core': ^7.4.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/helper-compilation-targets': 7.16.7 + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.16.5 + '@babel/traverse': 7.16.10 + debug: 4.3.3 + lodash.debounce: 4.0.8 + resolve: 1.22.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/helper-define-polyfill-provider/0.2.4_@babel+core@7.17.10: resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} peerDependencies: @@ -2013,7 +2068,7 @@ packages: resolution: {integrity: sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.17.10 dev: true /@babel/helper-function-name/7.16.7: @@ -2037,7 +2092,7 @@ packages: resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.16.8 + '@babel/types': 7.17.10 dev: false /@babel/helper-hoist-variables/7.16.7: @@ -2064,7 +2119,7 @@ packages: resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.17.10 /@babel/helper-module-transforms/7.17.7: resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} @@ -2108,7 +2163,7 @@ packages: dependencies: '@babel/helper-annotate-as-pure': 7.16.7 '@babel/helper-wrap-function': 7.16.8 - '@babel/types': 7.17.0 + '@babel/types': 7.17.10 transitivePeerDependencies: - supports-color dev: true @@ -2130,7 +2185,7 @@ packages: resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.17.10 dev: true /@babel/helper-skip-transparent-expression-wrappers/7.16.0: @@ -2165,8 +2220,8 @@ packages: dependencies: '@babel/helper-function-name': 7.17.9 '@babel/template': 7.16.7 - '@babel/traverse': 7.17.9 - '@babel/types': 7.17.0 + '@babel/traverse': 7.17.10 + '@babel/types': 7.17.10 transitivePeerDependencies: - supports-color dev: true @@ -2203,6 +2258,8 @@ packages: resolution: {integrity: sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.17.10 dev: false /@babel/parser/7.17.10: @@ -4203,6 +4260,8 @@ packages: dependencies: '@babel/helper-annotate-as-pure': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.10 + '@babel/types': 7.17.10 dev: true /@babel/plugin-transform-react-pure-annotations/7.16.7_@babel+core@7.17.10: @@ -4285,6 +4344,25 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true + /@babel/plugin-transform-runtime/7.15.0: + resolution: {integrity: sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/helper-module-imports': 7.16.0 + '@babel/helper-plugin-utils': 7.16.5 + babel-plugin-polyfill-corejs2: 0.2.3 + babel-plugin-polyfill-corejs3: 0.2.4 + babel-plugin-polyfill-regenerator: 0.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/plugin-transform-runtime/7.15.0_@babel+core@7.17.10: resolution: {integrity: sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==} engines: {node: '>=6.9.0'} @@ -4742,7 +4820,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.10 '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.10 - '@babel/types': 7.17.0 + '@babel/types': 7.17.10 esutils: 2.0.3 dev: true @@ -4758,7 +4836,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.9 '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.9 - '@babel/types': 7.17.0 + '@babel/types': 7.17.10 esutils: 2.0.3 dev: true @@ -4898,7 +4976,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.16.7 - '@babel/parser': 7.17.3 + '@babel/parser': 7.17.10 '@babel/types': 7.17.0 /@babel/traverse/7.16.10: @@ -10822,6 +10900,12 @@ packages: resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} dev: true + /@types/keyv/3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 17.0.31 + dev: false + /@types/lodash-es/4.17.6: resolution: {integrity: sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==} dependencies: @@ -10932,6 +11016,12 @@ packages: /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + /@types/react-avatar-editor/10.3.6: + resolution: {integrity: sha512-2r9+WYriqXIyjOTxy/DSiCUhr2TBiYD4Gzbyych1WUEwdPboNj0JRz9B5868TwiGgKD61jdWYyKy/OutHs7L6A==} + dependencies: + '@types/react': 18.0.9 + dev: false + /@types/react-avatar-editor/12.0.0: resolution: {integrity: sha512-835jSnCdQ2Kgrtz2sTYKMv9YSGJG0j2vd8C0sxWtYJoYOmYPs8nt25rTsbCOha3SVzWNiuw1TOQCVqN0iBQgrw==} dependencies: @@ -11021,6 +11111,12 @@ packages: '@types/node': 17.0.31 dev: true + /@types/responselike/1.0.0: + resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + dependencies: + '@types/node': 17.0.31 + dev: false + /@types/retry/0.12.1: resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==} dev: true @@ -12913,6 +13009,21 @@ packages: '@babel/core': 7.17.10 dev: true + /babel-plugin-polyfill-corejs2/0.2.3: + resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/compat-data': 7.16.8 + '@babel/helper-define-polyfill-provider': 0.2.4 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-corejs2/0.2.3_@babel+core@7.17.10: resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==} peerDependencies: @@ -12971,7 +13082,7 @@ packages: dependencies: '@babel/core': 7.17.10 '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.17.10 - core-js-compat: 3.22.2 + core-js-compat: 3.22.4 transitivePeerDependencies: - supports-color dev: true @@ -12986,11 +13097,25 @@ packages: dependencies: '@babel/core': 7.17.9 '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.17.9 - core-js-compat: 3.22.2 + core-js-compat: 3.22.4 transitivePeerDependencies: - supports-color dev: true + /babel-plugin-polyfill-corejs3/0.2.4: + resolution: {integrity: sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/helper-define-polyfill-provider': 0.2.4 + core-js-compat: 3.20.1 + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-corejs3/0.2.4_@babel+core@7.17.10: resolution: {integrity: sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==} peerDependencies: @@ -13036,6 +13161,19 @@ packages: - supports-color dev: true + /babel-plugin-polyfill-regenerator/0.2.3: + resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/helper-define-polyfill-provider': 0.2.4 + transitivePeerDependencies: + - supports-color + dev: false + /babel-plugin-polyfill-regenerator/0.2.3_@babel+core@7.17.10: resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==} peerDependencies: @@ -17048,7 +17186,7 @@ packages: resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} engines: {node: '>=8.3.0'} dependencies: - '@babel/traverse': 7.17.9 + '@babel/traverse': 7.17.10 '@babel/types': 7.17.0 c8: 7.11.2 transitivePeerDependencies: @@ -18718,6 +18856,8 @@ packages: resolution: {integrity: sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==} engines: {node: '>=4'} dependencies: + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.0 decompress-response: 3.3.0 duplexer3: 0.1.4 get-stream: 3.0.0 @@ -18740,6 +18880,8 @@ packages: dependencies: '@sindresorhus/is': 0.14.0 '@szmarczak/http-timer': 1.1.2 + '@types/keyv': 3.1.4 + '@types/responselike': 1.0.0 cacheable-request: 6.1.0 decompress-response: 3.3.0 duplexer3: 0.1.4 @@ -24309,6 +24451,25 @@ packages: webpack: 4.46.0 dev: true + /react-avatar-editor/12.0.0: + resolution: {integrity: sha512-l7NrN8CXlUXbMhnbkuduAtR3+AlDz+DzYWlYBNr7q+rNeJMZlv26ap3Dk/D1WK/MPlnoS33iITlhLkuDsYQpug==} + peerDependencies: + react: ^0.14.0 || ^17.0.0 || 18 + react-dom: '>=0.14.0 || 18' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + '@babel/plugin-transform-runtime': 7.15.0 + '@babel/runtime': 7.16.5 + prop-types: 15.8.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: false + /react-avatar-editor/12.0.0_@babel+core@7.17.10: resolution: {integrity: sha512-l7NrN8CXlUXbMhnbkuduAtR3+AlDz+DzYWlYBNr7q+rNeJMZlv26ap3Dk/D1WK/MPlnoS33iITlhLkuDsYQpug==} peerDependencies: @@ -27050,6 +27211,7 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: + acorn: 8.7.1 commander: 2.20.3 source-map: 0.6.1 source-map-support: 0.5.21 @@ -27065,6 +27227,7 @@ packages: acorn: optional: true dependencies: + acorn: 8.7.1 commander: 2.20.3 source-map: 0.7.3 source-map-support: 0.5.21 From 7885c898c9ab2931eeabb77cedf833545cfb4933 Mon Sep 17 00:00:00 2001 From: septs Date: Wed, 18 May 2022 12:27:54 +0800 Subject: [PATCH 09/29] chore: array-type (#6280) --- packages/.eslintrc.json | 1 + .../backup-format/src/utils/hex2buffer.ts | 2 +- packages/backup-format/src/version-1/index.ts | 6 +++--- packages/backup-format/src/version-2/index.ts | 4 ++-- .../src/components/CreateWalletForm/index.tsx | 4 ++-- .../components/FungibleTokenTable/index.tsx | 2 +- .../encryption/src/encryption/Decryption.ts | 2 +- .../encryption/src/encryption/v38-ecdh.ts | 2 +- .../main/EventListenerPatch/capture.ts | 2 +- .../database/avatar-cache/avatar.ts | 2 +- .../mask/background/database/post/dbType.ts | 2 +- .../mask/background/database/utils/openDB.ts | 8 ++++---- .../background/services/__utils__/convert.ts | 4 ++-- .../background/services/backup/restore.ts | 2 +- .../services/helper/deprecated-storage.ts | 2 +- packages/mask/src/UIRoot.tsx | 2 +- .../DecryptedPost/DecryptedPost.tsx | 2 +- .../src/components/shared/AbstractTab.tsx | 12 ++++++----- .../mask/src/database/helpers/pagination.ts | 2 +- .../EthereumServices/nonce.ts | 2 +- .../providers/WalletConnect.ts | 4 ++-- .../EthereumServices/rpc/abi.ts | 4 ++-- .../Wallet/Transfer/Prior1559Transfer.tsx | 2 +- .../pages/Wallet/Transfer/Transfer1559.tsx | 2 +- .../components/DeriveWalletTable/index.tsx | 2 +- .../src/plugins/Collectible/types/opensea.ts | 4 ++-- .../src/plugins/Collectible/types/rarible.ts | 4 ++-- .../plugins/EVM/UI/Web3State/getAssetsFn.ts | 6 +++--- .../FindTruman/SNSAdaptor/ConstPromise.ts | 4 ++-- packages/mask/src/plugins/FindTruman/types.ts | 2 +- .../Gitcoin/hooks/useDonateCallback.ts | 2 +- .../plugins/ITO/SNSAdaptor/NftAirdropCard.tsx | 4 ++-- .../plugins/ITO/SNSAdaptor/hooks/useFill.ts | 2 +- .../plugins/ITO/SNSAdaptor/hooks/useRegion.ts | 4 ++-- .../ITO/Worker/apis/spaceStationGalaxy.ts | 2 +- .../src/plugins/ITO/Worker/apis/subgraph.ts | 20 +++++++++---------- packages/mask/src/plugins/ITO/types.ts | 4 ++-- packages/mask/src/plugins/MaskBox/type.ts | 4 ++-- .../RedPacket/Worker/apis/erc20Redpacket.ts | 2 +- packages/mask/src/plugins/RedPacket/types.ts | 6 +++--- .../mask/src/plugins/Savings/constants.ts | 4 ++-- .../plugins/Savings/protocols/AAVEProtocol.ts | 8 ++++---- .../src/plugins/Snapshot/Worker/apis/index.ts | 2 +- packages/mask/src/plugins/Snapshot/types.ts | 8 ++++---- .../SNSAdaptor/trending/CoinMetadataTable.tsx | 2 +- .../SNSAdaptor/trending/LBPPriceChart.tsx | 2 +- .../SNSAdaptor/trending/PriceChangedTable.tsx | 2 +- .../mask/src/plugins/Trader/apis/LBP/index.ts | 6 +++--- .../plugins/Trader/apis/coingecko/index.ts | 4 ++-- .../Trader/apis/uniswap-health/index.ts | 4 ++-- .../Trader/apis/uniswap-v2-subgraph/index.ts | 6 +++--- .../Trader/graphs/usePriceLineChart.ts | 2 +- .../trader/uniswap/useAllCommonPairs.ts | 6 +++--- .../Trader/trader/uniswap/useAllV3Routes.ts | 6 +++--- .../plugins/Trader/trader/uniswap/usePools.ts | 8 ++++---- .../Trader/trader/uniswap/useV3SwapPools.ts | 2 +- .../Trader/trending/useCurrentCurrency.ts | 4 ++-- packages/mask/src/plugins/Trader/types/0x.ts | 4 ++-- .../mask/src/plugins/Trader/types/trader.ts | 4 +++- .../src/plugins/UnlockProtocol/Services.ts | 8 ++++---- packages/mask/src/plugins/Wallet/apis/ens.ts | 4 ++-- .../plugins/Wallet/services/wallet/index.ts | 16 ++++++++------- .../mask/src/plugins/hooks/useLineChart.ts | 2 +- .../src/plugins/hooks/usePriceLineChart.ts | 2 +- .../utils/create-post-context.ts | 2 +- packages/mask/src/utils/hooks/useSuspense.ts | 2 +- .../utils/shadow-root/renderInShadowRoot.tsx | 2 +- packages/plugin-infra/src/web3-types.ts | 2 +- .../Flow/src/apis/getFungibleAssets.ts | 8 ++++---- .../SNSAdaptor/components/DonationCard.tsx | 4 ++-- packages/plugins/RSS3/src/types.ts | 4 ++-- .../Solana/src/apis/getFungibleAssets.ts | 4 ++-- packages/plugins/Solana/src/apis/shared.ts | 2 +- packages/plugins/example/src/Worker/index.ts | 2 +- packages/shared-base/src/Identifier/map.ts | 8 ++++---- packages/shared-base/src/NextID/type.ts | 2 +- .../UI/components/ConcealableTabs/index.tsx | 2 +- .../components/MiniNetworkSelector/index.tsx | 4 ++-- packages/theme/src/ShadowRoot/Contexts.ts | 2 +- .../ShadowRoot/createReactRootShadowed.tsx | 2 +- packages/theme/src/Theme/Provider.tsx | 2 +- .../theme/src/UIHelper/custom-ui-helper.tsx | 2 +- packages/theme/stories/utils/Material-UI.ts | 4 +++- packages/theme/stories/utils/args.ts | 2 +- packages/typed-message/base/utils/extract.ts | 4 ++-- packages/typed-message/base/utils/internal.ts | 4 ++-- packages/web3-constants/compile-constants.ts | 2 +- packages/web3-contracts/compile-contracts.ts | 2 +- packages/web3-providers/src/opensea/types.ts | 12 +++++------ packages/web3-providers/src/rarible/index.ts | 2 +- packages/web3-providers/src/rarible/types.ts | 4 ++-- packages/web3-providers/src/types.ts | 16 +++++++-------- .../evm/constants/getContractOwnerDomain.ts | 5 ++++- .../evm/hooks/useERC20TokenDetailed.ts | 5 ++++- .../useERC20TokensDetailedFromTokenLists.ts | 4 ++-- .../evm/hooks/useERC721TokenDetailed.ts | 2 +- .../web3-shared/evm/hooks/useMulticall.ts | 4 ++-- 97 files changed, 204 insertions(+), 189 deletions(-) diff --git a/packages/.eslintrc.json b/packages/.eslintrc.json index a06fafd88039..7654e02a4c00 100644 --- a/packages/.eslintrc.json +++ b/packages/.eslintrc.json @@ -83,6 +83,7 @@ "@dimensiondev/type/no-instanceof-wrapper": "error", "@dimensiondev/type/no-wrapper-type-reference": "error", "@dimensiondev/unicode/specific-set": "error", + "@typescript-eslint/array-type": ["error", { "default": "array-simple" }], "@typescript-eslint/await-thenable": "error", "@typescript-eslint/no-base-to-string": "off", "@typescript-eslint/no-implied-eval": "error", diff --git a/packages/backup-format/src/utils/hex2buffer.ts b/packages/backup-format/src/utils/hex2buffer.ts index 4b8f76f2e0c2..b4fa7099a733 100644 --- a/packages/backup-format/src/utils/hex2buffer.ts +++ b/packages/backup-format/src/utils/hex2buffer.ts @@ -22,7 +22,7 @@ export function hex2buffer(hexString: string, padded?: boolean) { } /** @internal */ -function concat(...buf: (Uint8Array | number[])[]) { +function concat(...buf: Array) { const res = new Uint8Array(sum(buf.map((item) => item.length))) let offset = 0 buf.forEach((item) => { diff --git a/packages/backup-format/src/version-1/index.ts b/packages/backup-format/src/version-1/index.ts index 09006f754713..c21a843b3bb4 100644 --- a/packages/backup-format/src/version-1/index.ts +++ b/packages/backup-format/src/version-1/index.ts @@ -89,16 +89,16 @@ interface BackupJSONFileVersion1 { publicKey: EC_Public_JsonWebKey privateKey: EC_Private_JsonWebKey localKey: AESJsonWebKey - previousIdentifiers?: { network: string; userId: string }[] + previousIdentifiers?: Array<{ network: string; userId: string }> nickname?: string }> people?: Array<{ network: string userId: string publicKey: EC_Public_JsonWebKey - previousIdentifiers?: { network: string; userId: string }[] + previousIdentifiers?: Array<{ network: string; userId: string }> nickname?: string - groups?: { network: string; groupID: string; virtualGroupOwner: string | null }[] + groups?: Array<{ network: string; groupID: string; virtualGroupOwner: string | null }> // Note: those props are not existed in the backup, just to make the code more readable privateKey?: EC_Private_JsonWebKey diff --git a/packages/backup-format/src/version-2/index.ts b/packages/backup-format/src/version-2/index.ts index ec5400e4ef55..752e64b71b89 100644 --- a/packages/backup-format/src/version-2/index.ts +++ b/packages/backup-format/src/version-2/index.ts @@ -322,7 +322,7 @@ interface BackupJSONFileVersion2 { privateKey?: JsonWebKey localKey?: JsonWebKey nickname?: string - linkedProfiles: [/** ProfileIdentifier.toText() */ string, LinkedProfileDetails][] + linkedProfiles: Array<[/** ProfileIdentifier.toText() */ string, LinkedProfileDetails]> createdAt: number // Unix timestamp updatedAt: number // Unix timestamp }> @@ -345,7 +345,7 @@ interface BackupJSONFileVersion2 { postBy: string // ProfileIdentifier.toText() identifier: string // PostIVIdentifier.toText() postCryptoKey?: JsonWebKey - recipients: 'everyone' | [/** ProfileIdentifier.toText() */ string, { reason: RecipientReasonJSON[] }][] + recipients: 'everyone' | Array<[/** ProfileIdentifier.toText() */ string, { reason: RecipientReasonJSON[] }]> /** @deprecated */ recipientGroups: never[] foundAt: number // Unix timestamp diff --git a/packages/dashboard/src/components/CreateWalletForm/index.tsx b/packages/dashboard/src/components/CreateWalletForm/index.tsx index ddb77638de16..2a5df398e1a0 100644 --- a/packages/dashboard/src/components/CreateWalletForm/index.tsx +++ b/packages/dashboard/src/components/CreateWalletForm/index.tsx @@ -31,11 +31,11 @@ const useStyles = makeStyles()((theme) => ({ // TODO: actions, and icon may be an img url export interface CreateWalletFormProps { - options: { + options: Array<{ label: string icon: React.ReactNode value: number - }[] + }> } export function CreateWalletForm(props: CreateWalletFormProps) { diff --git a/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx b/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx index dd7a4a744d6a..e2236f600657 100644 --- a/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/FungibleTokenTable/index.tsx @@ -125,7 +125,7 @@ export const FungibleTokenTable = memo(({ selectedChainId }) => export interface TokenTableUIProps { isLoading: boolean isEmpty: boolean - dataSource: Web3Plugin.Asset[] + dataSource: Array> onSwap(token: Web3Plugin.FungibleToken): void onSend(token: Web3Plugin.FungibleToken): void } diff --git a/packages/encryption/src/encryption/Decryption.ts b/packages/encryption/src/encryption/Decryption.ts index ca41d207507e..ba50cec0ba9f 100644 --- a/packages/encryption/src/encryption/Decryption.ts +++ b/packages/encryption/src/encryption/Decryption.ts @@ -167,7 +167,7 @@ async function* v38To40StaticECDH( } type StaticV38OrOlderECDH = { type: 'static-v38-or-older' - derive: (postKeyIV: Uint8Array) => Promise<(readonly [key: AESCryptoKey, iv: Uint8Array])[]> + derive: (postKeyIV: Uint8Array) => Promise> } type EphemeralECDH = { type: 'ephemeral' diff --git a/packages/encryption/src/encryption/v38-ecdh.ts b/packages/encryption/src/encryption/v38-ecdh.ts index e01036308290..91e82cba52db 100644 --- a/packages/encryption/src/encryption/v38-ecdh.ts +++ b/packages/encryption/src/encryption/v38-ecdh.ts @@ -27,7 +27,7 @@ export async function deriveAESByECDH_version38OrOlderExtraSteps( deriveAESByECDH: (key: EC_Public_CryptoKey) => Promise, pub: EC_Public_CryptoKey, iv: Uint8Array, -): Promise<(readonly [key: AESCryptoKey, iv: Uint8Array])[]> { +): Promise> { const deriveResult = await deriveAESByECDH(pub) const extraSteps = deriveResult.map(async (key) => { const derivedKeyRaw = await crypto.subtle.exportKey('raw', key) diff --git a/packages/injected-script/main/EventListenerPatch/capture.ts b/packages/injected-script/main/EventListenerPatch/capture.ts index a70a3e4e0556..30c231554d85 100644 --- a/packages/injected-script/main/EventListenerPatch/capture.ts +++ b/packages/injected-script/main/EventListenerPatch/capture.ts @@ -1,7 +1,7 @@ import { clone_into, redefineEventTargetPrototype, unwrapXRay_CPPBindingObject } from '../utils' import { apply, error, no_xray_Proxy, warn, xray_Map } from '../intrinsic' -const CapturingEvents: Set = new Set(['keyup', 'input', 'paste', 'change'] as (keyof DocumentEventMap)[]) +const CapturingEvents: Set = new Set(['keyup', 'input', 'paste', 'change'] as Array) type EventListenerDescriptor = { once: boolean; passive: boolean; capture: boolean } const CapturedListeners = new WeakMap>>() diff --git a/packages/mask/background/database/avatar-cache/avatar.ts b/packages/mask/background/database/avatar-cache/avatar.ts index 1488e8bf04f1..cf993a959ba3 100644 --- a/packages/mask/background/database/avatar-cache/avatar.ts +++ b/packages/mask/background/database/avatar-cache/avatar.ts @@ -19,7 +19,7 @@ async function nativeImpl(identifiers: IdentifierWithAvatar[]): Promise> { - const promises: Promise[] = [] + const promises: Array> = [] const map = new Map() const t = createTransaction(await createAvatarDBAccess(), 'readonly')('avatars') diff --git a/packages/mask/background/database/post/dbType.ts b/packages/mask/background/database/post/dbType.ts index 4ccf9e3490ad..890481c1d85a 100644 --- a/packages/mask/background/database/post/dbType.ts +++ b/packages/mask/background/database/post/dbType.ts @@ -7,7 +7,7 @@ export declare namespace PostDB_HistoryTypes { postBy: { userId: string; network: string } | undefined identifier: string recipientGroups?: unknown - recipients?: { userId: string; network: string }[] + recipients?: Array<{ userId: string; network: string }> foundAt: Date postCryptoKey?: CryptoKey } diff --git a/packages/mask/background/database/utils/openDB.ts b/packages/mask/background/database/utils/openDB.ts index 1581315ca75b..4c5c9fcc5e65 100644 --- a/packages/mask/background/database/utils/openDB.ts +++ b/packages/mask/background/database/utils/openDB.ts @@ -109,7 +109,7 @@ export function createDBAccessWithAsyncUpgrade[] = StoreNames[], + TxStores extends Array> = Array>, StoreName extends StoreNames = StoreNames, Writable extends boolean = boolean, > extends Pick< @@ -170,14 +170,14 @@ export interface IDBPSafeObjectStore< } export type IDBPSafeTransaction< DBTypes extends DBSchema, - TxStores extends StoreNames[], + TxStores extends Array>, Mode extends IDBTransactionMode = 'readonly', > = Omit, 'mode' | 'objectStoreNames' | 'objectStore' | 'store'> & { readonly objectStoreNames: TypedDOMStringList & string> readonly mode: IDBTransactionMode readonly __writable__?: Mode extends 'readwrite' ? true : boolean readonly __stores__?: Record< - TxStores extends readonly (infer ValueOfUsedStoreName)[] + TxStores extends ReadonlyArray ? ValueOfUsedStoreName extends string | number | symbol ? ValueOfUsedStoreName : never @@ -194,7 +194,7 @@ export function createTransaction[] = []>(...storeNames: UsedStoreName) => { + return > = []>(...storeNames: UsedStoreName) => { return db.transaction(storeNames, mode) as IDBPSafeTransaction } } diff --git a/packages/mask/background/services/__utils__/convert.ts b/packages/mask/background/services/__utils__/convert.ts index dcbb60a43f30..88814d3f4c27 100644 --- a/packages/mask/background/services/__utils__/convert.ts +++ b/packages/mask/background/services/__utils__/convert.ts @@ -25,8 +25,8 @@ export function toProfileInformation(profiles: ProfileRecord[]) { /** @internal */ export function toPersonaInformation(personas: PersonaRecord[], t: FullPersonaDBTransaction<'readonly'>) { const personaInfo: PersonaInformation[] = [] - const dbQueryPass2: Promise[] = [] - const dbQuery: Promise[] = personas.map(async (persona) => { + const dbQueryPass2: Array> = [] + const dbQuery: Array> = personas.map(async (persona) => { const map: ProfileInformation[] = [] personaInfo.push({ nickname: persona.nickname, diff --git a/packages/mask/background/services/backup/restore.ts b/packages/mask/background/services/backup/restore.ts index 7a386d13f7b3..67e270e2c264 100644 --- a/packages/mask/background/services/backup/restore.ts +++ b/packages/mask/background/services/backup/restore.ts @@ -44,7 +44,7 @@ export async function addUnconfirmedBackup(raw: string): Promise { +): Promise }> { if (!unconfirmedBackup.has(id)) return undefined const backup = unconfirmedBackup.get(id)! return { diff --git a/packages/mask/background/services/helper/deprecated-storage.ts b/packages/mask/background/services/helper/deprecated-storage.ts index 9e618ad9e031..a55a66364678 100644 --- a/packages/mask/background/services/helper/deprecated-storage.ts +++ b/packages/mask/background/services/helper/deprecated-storage.ts @@ -5,7 +5,7 @@ import { timeout } from '@dimensiondev/kit' * Make sure that the storage is used serially. */ class MutexStorage { - private tasks: (() => void)[] = [] + private tasks: Array<() => void> = [] private locked = false private lock() { diff --git a/packages/mask/src/UIRoot.tsx b/packages/mask/src/UIRoot.tsx index 9cae87e10383..8fc356a07313 100644 --- a/packages/mask/src/UIRoot.tsx +++ b/packages/mask/src/UIRoot.tsx @@ -16,7 +16,7 @@ import { isTwitter } from './social-network-adaptor/twitter.com/base' import { MaskThemeProvider } from '@masknet/theme' const identity = (jsx: React.ReactNode) => jsx as JSX.Element -function compose(init: React.ReactNode, ...f: ((children: React.ReactNode) => JSX.Element)[]) { +function compose(init: React.ReactNode, ...f: Array<(children: React.ReactNode) => JSX.Element>) { // eslint-disable-next-line unicorn/no-array-reduce return f.reduceRight((prev, curr) => curr(prev), <>{init}) } diff --git a/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPost.tsx b/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPost.tsx index 1ab0de6a8474..04c7deb6aa61 100644 --- a/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPost.tsx +++ b/packages/mask/src/components/InjectedComponents/DecryptedPost/DecryptedPost.tsx @@ -15,7 +15,7 @@ import { type PostContext, usePostInfoDetails, usePostInfo } from '@masknet/plug import { Some } from 'ts-results' function progressReducer( - state: { key: string; progress: SuccessDecryption | FailureDecryption | DecryptionProgress }[], + state: Array<{ key: string; progress: SuccessDecryption | FailureDecryption | DecryptionProgress }>, payload: { type: 'refresh' key: string diff --git a/packages/mask/src/components/shared/AbstractTab.tsx b/packages/mask/src/components/shared/AbstractTab.tsx index 6b6d5c8dbc73..fc124d5bbcfc 100644 --- a/packages/mask/src/components/shared/AbstractTab.tsx +++ b/packages/mask/src/components/shared/AbstractTab.tsx @@ -23,11 +23,13 @@ interface TabPanelProps extends BoxProps { export interface AbstractTabProps extends withClasses<'tab' | 'tabs' | 'tabPanel' | 'indicator' | 'focusTab' | 'tabPaper' | 'flexContainer'> { - tabs: (Omit & { - cb?: () => void - disableFocusRipple?: boolean - disableRipple?: boolean - })[] + tabs: Array< + Omit & { + cb?: () => void + disableFocusRipple?: boolean + disableRipple?: boolean + } + > state?: readonly [number, (next: number) => void] index?: number disableFocusRipple?: boolean diff --git a/packages/mask/src/database/helpers/pagination.ts b/packages/mask/src/database/helpers/pagination.ts index 9d267b7a5ca3..ea6f4619e7c6 100644 --- a/packages/mask/src/database/helpers/pagination.ts +++ b/packages/mask/src/database/helpers/pagination.ts @@ -3,7 +3,7 @@ import type { IDBPSafeTransaction } from '../../../background/database/utils/ope export async function queryTransactionPaged< DBType extends DBSchema, - TxStores extends StoreNames[], + TxStores extends Array>, Mode extends 'readonly' | 'readwrite', RecordType extends IDBPCursorWithValueIteratorValue['value'], >( diff --git a/packages/mask/src/extension/background-script/EthereumServices/nonce.ts b/packages/mask/src/extension/background-script/EthereumServices/nonce.ts index 4963d8a79965..54a828312be7 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/nonce.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/nonce.ts @@ -7,7 +7,7 @@ class NonceManager { constructor(private address: string) {} private nonce = NonceManager.INITIAL_NONCE private locked = false - private tasks: (() => void)[] = [] + private tasks: Array<() => void> = [] private lock() { this.locked = true diff --git a/packages/mask/src/extension/background-script/EthereumServices/providers/WalletConnect.ts b/packages/mask/src/extension/background-script/EthereumServices/providers/WalletConnect.ts index b5f1133b1544..14e20bc09ccb 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/providers/WalletConnect.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/providers/WalletConnect.ts @@ -92,10 +92,10 @@ const onConnect = () => onUpdate(null) const onUpdate = async ( error: Error | null, payload?: { - params: { + params: Array<{ chainId: number accounts: string[] - }[] + }> }, ) => { if (error) return diff --git a/packages/mask/src/extension/background-script/EthereumServices/rpc/abi.ts b/packages/mask/src/extension/background-script/EthereumServices/rpc/abi.ts index 5460b661eaa2..0bf230349bc6 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/rpc/abi.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/rpc/abi.ts @@ -16,10 +16,10 @@ const coder = ABICoder as unknown as ABICoder.AbiCoder type InternalItem = { name: string - parameters: { + parameters: Array<{ name: string type: string - }[] + }> } const ABI_MAP: Map = new Map() diff --git a/packages/mask/src/extension/popups/pages/Wallet/Transfer/Prior1559Transfer.tsx b/packages/mask/src/extension/popups/pages/Wallet/Transfer/Prior1559Transfer.tsx index 1bfc6b0934a3..10ef1fda1fa4 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/Transfer/Prior1559Transfer.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/Transfer/Prior1559Transfer.tsx @@ -146,7 +146,7 @@ const useStyles = makeStyles()({ export interface Prior1559TransferProps { selectedAsset?: Asset - otherWallets: { name: string; address: string }[] + otherWallets: Array<{ name: string; address: string }> openAssetMenu: (anchorElOrEvent: HTMLElement | SyntheticEvent) => void } diff --git a/packages/mask/src/extension/popups/pages/Wallet/Transfer/Transfer1559.tsx b/packages/mask/src/extension/popups/pages/Wallet/Transfer/Transfer1559.tsx index 7cbfe4f51144..b250aa196786 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/Transfer/Transfer1559.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/Transfer/Transfer1559.tsx @@ -176,7 +176,7 @@ const useStyles = makeStyles()({ const MIN_GAS_LIMIT = 21000 export interface Transfer1559Props { selectedAsset?: Asset - otherWallets: { name: string; address: string }[] + otherWallets: Array<{ name: string; address: string }> openAssetMenu: (anchorElOrEvent: HTMLElement | SyntheticEvent) => void } diff --git a/packages/mask/src/extension/popups/pages/Wallet/components/DeriveWalletTable/index.tsx b/packages/mask/src/extension/popups/pages/Wallet/components/DeriveWalletTable/index.tsx index c5fd78aead04..0c625ce957aa 100644 --- a/packages/mask/src/extension/popups/pages/Wallet/components/DeriveWalletTable/index.tsx +++ b/packages/mask/src/extension/popups/pages/Wallet/components/DeriveWalletTable/index.tsx @@ -41,7 +41,7 @@ const useStyles = makeStyles()({ export interface DeriveWalletTableProps { loading: boolean - dataSource?: { address: string; added: boolean; selected: boolean }[] + dataSource?: Array<{ address: string; added: boolean; selected: boolean }> onCheck: (checked: boolean, index: number) => void confirmLoading: boolean } diff --git a/packages/mask/src/plugins/Collectible/types/opensea.ts b/packages/mask/src/plugins/Collectible/types/opensea.ts index 98bbd2557b12..929bccf9b03d 100644 --- a/packages/mask/src/plugins/Collectible/types/opensea.ts +++ b/packages/mask/src/plugins/Collectible/types/opensea.ts @@ -216,10 +216,10 @@ export interface OpenSeaResponse extends Asset { background_color: string | null transfer_fee: string | null transfer_fee_payment_token: OpenSeaFungibleToken | null - top_ownerships: { + top_ownerships: Array<{ owner: OpenSeaCustomAccount quantity: string - }[] + }> creator: OpenSeaCustomAccount endTime: string } diff --git a/packages/mask/src/plugins/Collectible/types/rarible.ts b/packages/mask/src/plugins/Collectible/types/rarible.ts index 28387ada41c6..772dc83e6877 100644 --- a/packages/mask/src/plugins/Collectible/types/rarible.ts +++ b/packages/mask/src/plugins/Collectible/types/rarible.ts @@ -60,10 +60,10 @@ export interface Creator { export interface Meta { name: string description: string - attributes: { + attributes: Array<{ key: string value: string - }[] + }> image: { meta: { PREVIEW: { diff --git a/packages/mask/src/plugins/EVM/UI/Web3State/getAssetsFn.ts b/packages/mask/src/plugins/EVM/UI/Web3State/getAssetsFn.ts index 0b11a8f2617e..31feb1eb43ff 100644 --- a/packages/mask/src/plugins/EVM/UI/Web3State/getAssetsFn.ts +++ b/packages/mask/src/plugins/EVM/UI/Web3State/getAssetsFn.ts @@ -136,13 +136,13 @@ export const getFungibleAssetsFn = const tokenUnavailableFromDebankResults = (await Promise.allSettled(allRequest)) .map((x) => (x.status === 'fulfilled' ? x.value : null)) - .filter((x) => Boolean(x)) as { + .filter((x) => Boolean(x)) as Array<{ chainId: ChainId balance: string price: PriceRecord - }[] + }> - const nativeTokens: Web3Plugin.Asset[] = networks + const nativeTokens: Array> = networks .filter( (t) => t.isMainnet && diff --git a/packages/mask/src/plugins/FindTruman/SNSAdaptor/ConstPromise.ts b/packages/mask/src/plugins/FindTruman/SNSAdaptor/ConstPromise.ts index 0d303203dda1..1c654cd8ab02 100644 --- a/packages/mask/src/plugins/FindTruman/SNSAdaptor/ConstPromise.ts +++ b/packages/mask/src/plugins/FindTruman/SNSAdaptor/ConstPromise.ts @@ -20,8 +20,8 @@ export default class FindTrumanConstPromise { value?: FindTrumanConst err?: any - successCallback: ((value?: FindTrumanConst) => void)[] = [] - failCallback: ((err: any) => void)[] = [] + successCallback: Array<(value?: FindTrumanConst) => void> = [] + failCallback: Array<(err: any) => void> = [] resolve = (value: FindTrumanConst) => { if (this.status !== Status.PENDING) return diff --git a/packages/mask/src/plugins/FindTruman/types.ts b/packages/mask/src/plugins/FindTruman/types.ts index 349cd201ae53..92ead19e5538 100644 --- a/packages/mask/src/plugins/FindTruman/types.ts +++ b/packages/mask/src/plugins/FindTruman/types.ts @@ -235,7 +235,7 @@ export interface SubmitPollParams { export interface SubmitCompletionParams { timestamp: number quesId: string - answers: { id: string; answer: string }[] + answers: Array<{ id: string; answer: string }> } export enum ClueConditionType { diff --git a/packages/mask/src/plugins/Gitcoin/hooks/useDonateCallback.ts b/packages/mask/src/plugins/Gitcoin/hooks/useDonateCallback.ts index b1e20207f16a..ffa862e25976 100644 --- a/packages/mask/src/plugins/Gitcoin/hooks/useDonateCallback.ts +++ b/packages/mask/src/plugins/Gitcoin/hooks/useDonateCallback.ts @@ -26,7 +26,7 @@ export function useDonateCallback(address: string, amount: string, token?: Fungi const account = useAccount() const [donateState, setDonateState] = useTransactionState() - const donations = useMemo((): [string, string, string][] => { + const donations = useMemo((): Array<[string, string, string]> => { if (!address || !token) return [] if (!GITCOIN_ETH_ADDRESS || !GITCOIN_TIP_PERCENTAGE) return [] const tipAmount = new BigNumber(GITCOIN_TIP_PERCENTAGE / 100).multipliedBy(amount) diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/NftAirdropCard.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/NftAirdropCard.tsx index 7190867404a9..240ddc8a2edc 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/NftAirdropCard.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/NftAirdropCard.tsx @@ -159,13 +159,13 @@ const useStyles = makeStyles()((theme) => ({ })) interface NftAirdropCardProps { - campaignInfos: { + campaignInfos: Array<{ campaignInfo: CampaignInfo claimableInfo: { claimable: boolean claimed: boolean } - }[] + }> loading: boolean retry: () => void } diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useFill.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useFill.ts index cefaf4bad112..8779d7402a1a 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useFill.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useFill.ts @@ -53,7 +53,7 @@ type paramsObjType = { total: string limit: string qualificationAddress: string - exchangeAmountsDivided: (readonly [BigNumber, BigNumber])[] + exchangeAmountsDivided: Array now: number invalidTokenAt: number exchangeAmounts: string[] diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useRegion.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useRegion.ts index e283feedbd78..04de368b83af 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useRegion.ts +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useRegion.ts @@ -300,9 +300,9 @@ export function useIPRegion(): AsyncStateRetry { return useAsyncRetry(IPGeoResolver) } -export function useRegionList(): Array { +export function useRegionList(): Region[] { // TODO return name by i18n - return regions as Array + return regions as Region[] } export function useRegionSelect(initRegionCodes?: RegionCode[]) { diff --git a/packages/mask/src/plugins/ITO/Worker/apis/spaceStationGalaxy.ts b/packages/mask/src/plugins/ITO/Worker/apis/spaceStationGalaxy.ts index 9a3cc8b4a9c6..9380fb990c71 100644 --- a/packages/mask/src/plugins/ITO/Worker/apis/spaceStationGalaxy.ts +++ b/packages/mask/src/plugins/ITO/Worker/apis/spaceStationGalaxy.ts @@ -58,7 +58,7 @@ export async function getCampaignInfo(id: number): Promise { endTime: number startTime: number gamification: { - nfts: { nft: { image: string } }[] + nfts: Array<{ nft: { image: string } }> } } }>(` diff --git a/packages/mask/src/plugins/ITO/Worker/apis/subgraph.ts b/packages/mask/src/plugins/ITO/Worker/apis/subgraph.ts index 4f6ab889688c..9cba129fa129 100644 --- a/packages/mask/src/plugins/ITO/Worker/apis/subgraph.ts +++ b/packages/mask/src/plugins/ITO/Worker/apis/subgraph.ts @@ -68,7 +68,7 @@ async function fetchFromMarketSubgraph(query: string, chainId?: ChainId) { export async function getTradeInfo(pid: string, trader: string) { const data = await fetchFromMarketSubgraph<{ - buyInfos: { + buyInfos: Array<{ buyer: { address: string name: string @@ -77,23 +77,23 @@ export async function getTradeInfo(pid: string, trader: string) { amount: string amount_sold: string amount_bought: string - }[] - sellInfos: { + }> + sellInfos: Array<{ buyer: { address: string name: string } token: JSON_PayloadOutMask['token'] amount: string - }[] - destructInfos: { + }> + destructInfos: Array<{ buyer: { address: string name: string } token: JSON_PayloadOutMask['token'] amount: string - }[] + }> }>(` { buyInfos (where: { pool: "${pid.toLowerCase()}", buyer: "${trader.toLowerCase()}" }) { @@ -147,12 +147,12 @@ export async function getPool(pid: string) { export async function getAllPoolsAsSeller(address: string, page: number, chainId: ChainId) { const data = await fetchFromMarketSubgraph<{ - sellInfos: { + sellInfos: Array<{ pool: JSON_PayloadOutMask & { exchange_in_volumes: string[] exchange_out_volumes: string[] } - }[] + }> }>( ` { @@ -183,12 +183,12 @@ export async function getAllPoolsAsSeller(address: string, page: number, chainId export async function getAllPoolsAsBuyer(address: string, chainId: ChainId) { const data = await fetchFromMarketSubgraph<{ - buyInfos: { + buyInfos: Array<{ pool: JSON_PayloadOutMask & { exchange_in_volumes: string[] exchange_out_volumes: string[] } - }[] + }> }>( ` { diff --git a/packages/mask/src/plugins/ITO/types.ts b/packages/mask/src/plugins/ITO/types.ts index abe216b9556f..7e7649c54dae 100644 --- a/packages/mask/src/plugins/ITO/types.ts +++ b/packages/mask/src/plugins/ITO/types.ts @@ -57,7 +57,7 @@ export interface JSON_PayloadOutMask extends Omit { token: string - exchange_tokens: { address: string }[] + exchange_tokens: Array<{ address: string }> } export enum ITO_Status { @@ -113,7 +113,7 @@ export interface CampaignInfo { chain: string endTime: number startTime: number - nfts: { image: string }[] + nfts: Array<{ image: string }> } export interface ClaimParams { diff --git a/packages/mask/src/plugins/MaskBox/type.ts b/packages/mask/src/plugins/MaskBox/type.ts index ac12d96c65a3..063518d7aac7 100644 --- a/packages/mask/src/plugins/MaskBox/type.ts +++ b/packages/mask/src/plugins/MaskBox/type.ts @@ -76,8 +76,8 @@ export interface BoxMetadata { name: string mediaType: MediaType mediaUrl: string - activities: { + activities: Array<{ title: string body: string - }[] + }> } diff --git a/packages/mask/src/plugins/RedPacket/Worker/apis/erc20Redpacket.ts b/packages/mask/src/plugins/RedPacket/Worker/apis/erc20Redpacket.ts index c3a96cc598f8..33d07a7d27e7 100644 --- a/packages/mask/src/plugins/RedPacket/Worker/apis/erc20Redpacket.ts +++ b/packages/mask/src/plugins/RedPacket/Worker/apis/erc20Redpacket.ts @@ -57,7 +57,7 @@ const RED_PACKET_FIELDS = ` type RedpacketFromSubgraphType = { chain_id: ChainId - claimers: { name: string; address: string }[] + claimers: Array<{ name: string; address: string }> contract_address: string contract_version: number block_number: number diff --git a/packages/mask/src/plugins/RedPacket/types.ts b/packages/mask/src/plugins/RedPacket/types.ts index 824649e80d42..4d94b4e98a59 100644 --- a/packages/mask/src/plugins/RedPacket/types.ts +++ b/packages/mask/src/plugins/RedPacket/types.ts @@ -62,7 +62,7 @@ export interface RedPacketJSONPayload extends RedPacketBasic { token_type?: EthereumTokenType.Native | EthereumTokenType.ERC20 token?: FungibleTokenDetailed token_address?: string - claimers?: { address: string; name: string }[] + claimers?: Array<{ address: string; name: string }> total_remaining?: string } @@ -126,10 +126,10 @@ export interface NftRedPacketSubgraphInMask extends Omit creator: { name: string address: string diff --git a/packages/mask/src/plugins/Savings/constants.ts b/packages/mask/src/plugins/Savings/constants.ts index 4f800312198b..83f06963c5e3 100644 --- a/packages/mask/src/plugins/Savings/constants.ts +++ b/packages/mask/src/plugins/Savings/constants.ts @@ -3,14 +3,14 @@ import { ChainId, createERC20Tokens, createNativeToken, FungibleTokenDetailed } export const SAVINGS_PLUGIN_NAME = 'Savings' export const SAVINGS_PLUGIN_ID = 'com.savings' -export const LDO_PAIRS: [FungibleTokenDetailed, FungibleTokenDetailed][] = [ +export const LDO_PAIRS: Array<[FungibleTokenDetailed, FungibleTokenDetailed]> = [ [ createNativeToken(ChainId.Mainnet), createERC20Tokens('LDO_stETH_ADDRESS', 'Liquid staked Ether 2.0', 'stETH', 18)[ChainId.Mainnet], ], ] -export const AAVE_PAIRS: [FungibleTokenDetailed, FungibleTokenDetailed][] = [ +export const AAVE_PAIRS: Array<[FungibleTokenDetailed, FungibleTokenDetailed]> = [ [ createERC20Tokens('USDT_ADDRESS', 'Tether USD', 'USDT', 6)[ChainId.Mainnet], createERC20Tokens('aUSDT_ADDRESS', 'Aave Interest bearing USDT', 'aUSDT', 6)[ChainId.Mainnet], diff --git a/packages/mask/src/plugins/Savings/protocols/AAVEProtocol.ts b/packages/mask/src/plugins/Savings/protocols/AAVEProtocol.ts index 9ce14d79921a..1349d35b9d31 100644 --- a/packages/mask/src/plugins/Savings/protocols/AAVEProtocol.ts +++ b/packages/mask/src/plugins/Savings/protocols/AAVEProtocol.ts @@ -80,13 +80,13 @@ export class AAVEProtocol implements SavingsProtocol { }) const fullResponse: { data: { - reserves: { + reserves: Array<{ id: string name: string decimals: number underlyingAsset: string liquidityRate: number - }[] + }> } } = await response.json() const liquidityRate = +fullResponse.data.reserves[0].liquidityRate @@ -132,11 +132,11 @@ export class AAVEProtocol implements SavingsProtocol { const fullResponse: { data: { - reserves: { + reserves: Array<{ aToken: { id: string } - }[] + }> } } = await response.json() diff --git a/packages/mask/src/plugins/Snapshot/Worker/apis/index.ts b/packages/mask/src/plugins/Snapshot/Worker/apis/index.ts index 64411842eb66..5f266290aedf 100644 --- a/packages/mask/src/plugins/Snapshot/Worker/apis/index.ts +++ b/packages/mask/src/plugins/Snapshot/Worker/apis/index.ts @@ -113,7 +113,7 @@ export async function getScores( space: string, strategies: Strategy[], ) { - const scores: { [key in string]: number }[] = await ss.utils.getScores( + const scores: Array<{ [key in string]: number }> = await ss.utils.getScores( space, strategies, network, diff --git a/packages/mask/src/plugins/Snapshot/types.ts b/packages/mask/src/plugins/Snapshot/types.ts index 5959e80fad7d..d57fded9f0a8 100644 --- a/packages/mask/src/plugins/Snapshot/types.ts +++ b/packages/mask/src/plugins/Snapshot/types.ts @@ -89,11 +89,11 @@ export interface VoteItem { choice: string | undefined totalWeight: number | undefined choices: - | { + | Array<{ index: number weight: number name: string - }[] + }> | undefined address: string authorIpfsHash: string @@ -115,10 +115,10 @@ export type VoteItemList = { export interface ProposalResult { choice: string - powerDetail: { + powerDetail: Array<{ power: number name: string - }[] + }> power: number percentage: number } diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trending/CoinMetadataTable.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trending/CoinMetadataTable.tsx index 7e77157fcb48..5193d749fe21 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trending/CoinMetadataTable.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trending/CoinMetadataTable.tsx @@ -63,7 +63,7 @@ export function CoinMetadataTable(props: CoinMetadataTableProps) { ['Tech Docs', trending.coin.tech_docs_urls], ['Source Code', trending.coin.source_code_urls], ['Community', trending.coin.community_urls], - ] as [string, string[] | undefined][] + ] as Array<[string, string[] | undefined]> return ( diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trending/LBPPriceChart.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trending/LBPPriceChart.tsx index 20f7dca725ae..baae9010c044 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trending/LBPPriceChart.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trending/LBPPriceChart.tsx @@ -15,7 +15,7 @@ const DEFAULT_DIMENSION: Dimension = { } export interface PriceChartProps extends withClasses<'root'> { - data: { date: Date; value: number }[] + data: Array<{ date: Date; value: number }> width?: number height?: number currency: Currency diff --git a/packages/mask/src/plugins/Trader/SNSAdaptor/trending/PriceChangedTable.tsx b/packages/mask/src/plugins/Trader/SNSAdaptor/trending/PriceChangedTable.tsx index 21e3693aae00..77b758e5c011 100644 --- a/packages/mask/src/plugins/Trader/SNSAdaptor/trending/PriceChangedTable.tsx +++ b/packages/mask/src/plugins/Trader/SNSAdaptor/trending/PriceChangedTable.tsx @@ -56,7 +56,7 @@ export function PriceChangedTable({ market }: PriceChangedTableProps) { }, ] - const filteredRecords = records.filter((record) => typeof record.percentage === 'number') as Required[] + const filteredRecords = records.filter((record) => typeof record.percentage === 'number') as Array> return ( diff --git a/packages/mask/src/plugins/Trader/apis/LBP/index.ts b/packages/mask/src/plugins/Trader/apis/LBP/index.ts index 6f9e848c3aa2..5f3aa16d4f09 100644 --- a/packages/mask/src/plugins/Trader/apis/LBP/index.ts +++ b/packages/mask/src/plugins/Trader/apis/LBP/index.ts @@ -18,10 +18,10 @@ async function fetchFromBalancerPoolSubgraph(query: string) { export async function fetchLBP_PoolsByTokenAddress(address: string) { const data = await fetchFromBalancerPoolSubgraph<{ - pools: { + pools: Array<{ id: string createTime: number - }[] + }> }>(` { pools( @@ -53,7 +53,7 @@ export async function fetchLBP_PoolTokenPrices(poolId: string, address: string, } `, ) - const data = await fetchFromBalancerPoolSubgraph>(` + const data = await fetchFromBalancerPoolSubgraph>>(` query tokenPrices { ${queries.join('\n')} } diff --git a/packages/mask/src/plugins/Trader/apis/coingecko/index.ts b/packages/mask/src/plugins/Trader/apis/coingecko/index.ts index 201a83f7aff3..8acd1076337b 100644 --- a/packages/mask/src/plugins/Trader/apis/coingecko/index.ts +++ b/packages/mask/src/plugins/Trader/apis/coingecko/index.ts @@ -74,7 +74,7 @@ export interface CoinInfo { platforms: Record name: string symbol: string - tickers: { + tickers: Array<{ base: string target: string market: { @@ -105,7 +105,7 @@ export interface CoinInfo { trade_url: string coin_id: string target_coin_id?: string - }[] + }> } export async function getCoinInfo(coinId: string) { diff --git a/packages/mask/src/plugins/Trader/apis/uniswap-health/index.ts b/packages/mask/src/plugins/Trader/apis/uniswap-health/index.ts index 959e6798fd54..a59243a21705 100644 --- a/packages/mask/src/plugins/Trader/apis/uniswap-health/index.ts +++ b/packages/mask/src/plugins/Trader/apis/uniswap-health/index.ts @@ -20,14 +20,14 @@ export async function fetchLatestBlocks() { type status = { synced: string health: string - chains: { + chains: Array<{ chainHeadBlock: { number: number } latestBlock: { number: number } - }[] + }> } const response = await fetchFromUniswapV2Health<{ indexingStatusForCurrentVersion: status diff --git a/packages/mask/src/plugins/Trader/apis/uniswap-v2-subgraph/index.ts b/packages/mask/src/plugins/Trader/apis/uniswap-v2-subgraph/index.ts index dd59d68420f9..b70283cbc0ff 100644 --- a/packages/mask/src/plugins/Trader/apis/uniswap-v2-subgraph/index.ts +++ b/packages/mask/src/plugins/Trader/apis/uniswap-v2-subgraph/index.ts @@ -182,7 +182,7 @@ export async function fetchTokenDayData(address: string, date: Date) { const utcTimestamp = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()) const data = await fetchFromUniswapV2Subgraph<{ data: { - tokenDayData: { + tokenDayData: Array<{ id: string date: number priceUSD: string @@ -192,7 +192,7 @@ export async function fetchTokenDayData(address: string, date: Date) { dailyVolumeETH: number dailyVolumeToken: number dailyVolumeUSD: number - }[] + }> } }>(` { @@ -317,7 +317,7 @@ export async function fetchPairData(pairAddress: string, blockNumber?: string) { */ export async function fetchPricesByBlocks( tokenAddress: string, - blocks: { blockNumber?: string; timestamp: number }[], + blocks: Array<{ blockNumber?: string; timestamp: number }>, skipCount = 50, ) { // avoiding request entity too large diff --git a/packages/mask/src/plugins/Trader/graphs/usePriceLineChart.ts b/packages/mask/src/plugins/Trader/graphs/usePriceLineChart.ts index e6a8cd169539..59296bedbfde 100644 --- a/packages/mask/src/plugins/Trader/graphs/usePriceLineChart.ts +++ b/packages/mask/src/plugins/Trader/graphs/usePriceLineChart.ts @@ -5,7 +5,7 @@ import type { Dimension } from './useDimension' export function usePriceLineChart( svgRef: RefObject, - data: { date: Date; value: number }[], + data: Array<{ date: Date; value: number }>, dimension: Dimension, id: string, color = 'steelblue', diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useAllCommonPairs.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useAllCommonPairs.ts index 04220f26f898..ac7928175153 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useAllCommonPairs.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useAllCommonPairs.ts @@ -24,8 +24,8 @@ export function useAllCurrencyCombinations(tradeProvider: TradeProvider, currenc return [...common, ...additionalA, ...additionalB].map((x) => toUniswapToken(chainId, x)) }, [chainId, chainIdValid, tokenA?.address, tokenB?.address]) - const basePairs: [Token, Token][] = useMemo( - () => flatMap(bases, (base): [Token, Token][] => bases.map((otherBase) => [base, otherBase])), + const basePairs: Array<[Token, Token]> = useMemo( + () => flatMap(bases, (base): Array<[Token, Token]> => bases.map((otherBase) => [base, otherBase])), [bases], ) @@ -73,7 +73,7 @@ export function useAllCommonPairs(tradeProvider: TradeProvider, currencyA?: Curr // only pass along valid pairs, non-duplicated pairs const allPairs_ = useMemo(() => { const filtered = new Map() - for (const [state, pair] of allPairs as [PairState.EXISTS, Pair][]) { + for (const [state, pair] of allPairs as Array<[PairState.EXISTS, Pair]>) { // filter out invalid pairs if (state !== PairState.EXISTS) continue if (!pair) continue diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useAllV3Routes.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useAllV3Routes.ts index b0d496ab37c2..6d2dff736c20 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useAllV3Routes.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useAllV3Routes.ts @@ -11,10 +11,10 @@ function computeAllRoutes( pools: Pool[], chainId: number, currentPath: Pool[] = [], - allPaths: Route[] = [], + allPaths: Array> = [], startCurrencyIn: Currency = currencyIn, maxHops = 2, -): Route[] { +): Array> { const tokenIn = currencyIn?.wrapped const tokenOut = currencyOut?.wrapped if (!tokenIn || !tokenOut) throw new Error('Missing tokenIn/tokenOut') @@ -54,7 +54,7 @@ function computeAllRoutes( export function useAllV3Routes( currencyIn?: Currency, currencyOut?: Currency, -): { loading: boolean; routes: Route[] } { +): { loading: boolean; routes: Array> } { const { targetChainId: chainId } = TargetChainIdContext.useContainer() const { pools, loading: poolsLoading } = useV3SwapPools(currencyIn, currencyOut) const singleHopOnly = useSingleHopOnly() diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/usePools.ts b/packages/mask/src/plugins/Trader/trader/uniswap/usePools.ts index 79640191d3db..5614c9170847 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/usePools.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/usePools.ts @@ -19,12 +19,12 @@ export enum PoolState { export function usePools( tradeProvider: TradeProvider, - poolKeys: [Currency | undefined, Currency | undefined, FeeAmount | undefined][], -): [PoolState, Pool | null][] { + poolKeys: Array<[Currency | undefined, Currency | undefined, FeeAmount | undefined]>, +): Array<[PoolState, Pool | null]> { const { targetChainId: chainId } = TargetChainIdContext.useContainer() const context = useGetTradeContext(tradeProvider) - const transformed: ([Token, Token, FeeAmount] | null)[] = useMemo(() => { + const transformed: Array<[Token, Token, FeeAmount] | null> = useMemo(() => { return poolKeys.map(([currencyA, currencyB, feeAmount]) => { if (!chainId || !currencyA || !currencyB || !feeAmount) return null @@ -111,7 +111,7 @@ export function usePool( currencyB: Currency | undefined, feeAmount: FeeAmount | undefined, ): [PoolState, Pool | null] { - const poolKeys: [Currency | undefined, Currency | undefined, FeeAmount | undefined][] = useMemo( + const poolKeys: Array<[Currency | undefined, Currency | undefined, FeeAmount | undefined]> = useMemo( () => [[currencyA, currencyB, feeAmount]], [currencyA, currencyB, feeAmount], ) diff --git a/packages/mask/src/plugins/Trader/trader/uniswap/useV3SwapPools.ts b/packages/mask/src/plugins/Trader/trader/uniswap/useV3SwapPools.ts index 4e8d6591b71a..059f68186f7b 100644 --- a/packages/mask/src/plugins/Trader/trader/uniswap/useV3SwapPools.ts +++ b/packages/mask/src/plugins/Trader/trader/uniswap/useV3SwapPools.ts @@ -19,7 +19,7 @@ export function useV3SwapPools( } { const allCurrencyCombinations = useAllCurrencyCombinations(TradeProvider.UNISWAP_V3, currencyIn, currencyOut) - const allCurrencyCombinationsWithAllFees: [Token, Token, FeeAmount][] = useMemo( + const allCurrencyCombinationsWithAllFees: Array<[Token, Token, FeeAmount]> = useMemo( () => allCurrencyCombinations.flatMap<[Token, Token, FeeAmount]>(([tokenA, tokenB]) => [ [tokenA, tokenB, FeeAmount.LOW], diff --git a/packages/mask/src/plugins/Trader/trending/useCurrentCurrency.ts b/packages/mask/src/plugins/Trader/trending/useCurrentCurrency.ts index bfa644cd3812..c71eef46e687 100644 --- a/packages/mask/src/plugins/Trader/trending/useCurrentCurrency.ts +++ b/packages/mask/src/plugins/Trader/trending/useCurrentCurrency.ts @@ -3,12 +3,12 @@ import { DataProvider } from '@masknet/public-api' const CURRENCIES_MAP: Record< DataProvider, | undefined - | { + | Array<{ id: string name: string symbol: string description: string - }[] + }> > = { [DataProvider.COIN_GECKO]: [ { diff --git a/packages/mask/src/plugins/Trader/types/0x.ts b/packages/mask/src/plugins/Trader/types/0x.ts index 5d7ad2e8c5f6..5175a9d86ed0 100644 --- a/packages/mask/src/plugins/Trader/types/0x.ts +++ b/packages/mask/src/plugins/Trader/types/0x.ts @@ -76,11 +76,11 @@ export interface SwapQuoteResponse { export interface SwapValidationErrorResponse { code: number reason: string - validationErrors: { + validationErrors: Array<{ code: number field: string reason: string - }[] + }> } export interface SwapServerErrorResponse { diff --git a/packages/mask/src/plugins/Trader/types/trader.ts b/packages/mask/src/plugins/Trader/types/trader.ts index 956f1a8fc0f7..20fa860c5e49 100644 --- a/packages/mask/src/plugins/Trader/types/trader.ts +++ b/packages/mask/src/plugins/Trader/types/trader.ts @@ -92,7 +92,9 @@ export interface TradeComputed { maximumSold: BigNumber minimumReceived: BigNumber fee: BigNumber - path?: (PartialRequired | PartialRequired)[][] + path?: Array< + Array | PartialRequired> + > trade_?: T } diff --git a/packages/mask/src/plugins/UnlockProtocol/Services.ts b/packages/mask/src/plugins/UnlockProtocol/Services.ts index f18ca77677b2..5a3329a0095d 100644 --- a/packages/mask/src/plugins/UnlockProtocol/Services.ts +++ b/packages/mask/src/plugins/UnlockProtocol/Services.ts @@ -10,15 +10,15 @@ for (const [key, url] of Object.entries(graphEndpointKeyVal)) { } export interface verifyHolderResponse { - keyHolders: { - keys: { + keyHolders: Array<{ + keys: Array<{ expiration: number keyId: string lock: { address: string } - }[] - }[] + }> + }> } const verifyHolder = async (_lockAddress: string, _holder: string, _chain: number) => { diff --git a/packages/mask/src/plugins/Wallet/apis/ens.ts b/packages/mask/src/plugins/Wallet/apis/ens.ts index a422c0cdb61a..48ec09c400c9 100644 --- a/packages/mask/src/plugins/Wallet/apis/ens.ts +++ b/packages/mask/src/plugins/Wallet/apis/ens.ts @@ -17,10 +17,10 @@ export async function fetchAddressNamesByTwitterId(twitterId: string) { if (!twitterId) return [] const data = await fetchFromENSTextResolverSubgraph<{ twitterHandle?: { - domains: { + domains: Array<{ id: string owner: string - }[] + }> } }>(` query twitterHandle { diff --git a/packages/mask/src/plugins/Wallet/services/wallet/index.ts b/packages/mask/src/plugins/Wallet/services/wallet/index.ts index 29ef45a18c76..96c990f49f0c 100644 --- a/packages/mask/src/plugins/Wallet/services/wallet/index.ts +++ b/packages/mask/src/plugins/Wallet/services/wallet/index.ts @@ -51,11 +51,13 @@ export async function getWallet(address?: string) { } export async function getWallets(providerType?: ProviderType): Promise< - (Omit & { - configurable: boolean - hasStoredKeyInfo: boolean - hasDerivationPath: boolean - })[] + Array< + Omit & { + configurable: boolean + hasStoredKeyInfo: boolean + hasDerivationPath: boolean + } + > > { if (hasNativeAPI) { if (providerType && providerType !== ProviderType.MaskWallet) return [] @@ -112,11 +114,11 @@ export async function getDerivableAccounts(mnemonic: string, page: number, pageS }) if (!imported?.StoredKey) throw new Error('Failed to import the wallet.') - const accounts: { + const accounts: Array<{ index: number address: string derivationPath: string - }[] = [] + }> = [] for (let i = pageSize * page; i < pageSize * (page + 1); i += 1) { const derivationPath = `${HD_PATH_WITHOUT_INDEX_ETHEREUM}/${i}` diff --git a/packages/mask/src/plugins/hooks/useLineChart.ts b/packages/mask/src/plugins/hooks/useLineChart.ts index bd35c37089db..3555285d7133 100644 --- a/packages/mask/src/plugins/hooks/useLineChart.ts +++ b/packages/mask/src/plugins/hooks/useLineChart.ts @@ -5,7 +5,7 @@ import type { Dimension } from './useDimension' export function useLineChart( svgRef: RefObject, - data: { date: Date; value: number }[], + data: Array<{ date: Date; value: number }>, dimension: Dimension, id: string, opts: { color?: string; tickFormat?: string; formatTooltip?: Function }, diff --git a/packages/mask/src/plugins/hooks/usePriceLineChart.ts b/packages/mask/src/plugins/hooks/usePriceLineChart.ts index f173a19c7e52..89998fc0966b 100644 --- a/packages/mask/src/plugins/hooks/usePriceLineChart.ts +++ b/packages/mask/src/plugins/hooks/usePriceLineChart.ts @@ -5,7 +5,7 @@ import { useLineChart } from './useLineChart' export function usePriceLineChart( svgRef: RefObject, - data: { date: Date; value: number }[], + data: Array<{ date: Date; value: number }>, dimension: Dimension, id: string, opts: { color?: string; sign?: string }, diff --git a/packages/mask/src/social-network/utils/create-post-context.ts b/packages/mask/src/social-network/utils/create-post-context.ts index 240cf305a258..25650d2d0b90 100644 --- a/packages/mask/src/social-network/utils/create-post-context.ts +++ b/packages/mask/src/social-network/utils/create-post-context.ts @@ -33,7 +33,7 @@ import { difference } from 'lodash-unified' export function createSNSAdaptorSpecializedPostContext(create: PostContextSNSActions) { return function createPostContext(opt: PostContextCreation): PostContext { - const cancel: (Function | undefined)[] = [] + const cancel: Array = [] opt.signal?.addEventListener('abort', () => cancel.forEach((fn) => fn?.())) // #region Mentioned links diff --git a/packages/mask/src/utils/hooks/useSuspense.ts b/packages/mask/src/utils/hooks/useSuspense.ts index 9903775e2679..5b981f27dddd 100644 --- a/packages/mask/src/utils/hooks/useSuspense.ts +++ b/packages/mask/src/utils/hooks/useSuspense.ts @@ -1,6 +1,6 @@ import { useUpdate } from 'react-use' -export function useSuspense>( +export function useSuspense( id: string, args: U, cache: Map] | [1, T] | [2, Error]>, diff --git a/packages/mask/src/utils/shadow-root/renderInShadowRoot.tsx b/packages/mask/src/utils/shadow-root/renderInShadowRoot.tsx index f0166037968c..b43757e4740e 100644 --- a/packages/mask/src/utils/shadow-root/renderInShadowRoot.tsx +++ b/packages/mask/src/utils/shadow-root/renderInShadowRoot.tsx @@ -2,7 +2,7 @@ import { createReactRootShadowedPartial, setupPortalShadowRoot, CSSVariableInjec import { MaskUIRoot } from '../../UIRoot' import { useClassicMaskSNSTheme } from '../theme' -const captureEvents: (keyof HTMLElementEventMap)[] = [ +const captureEvents: Array = [ 'paste', 'keydown', 'keypress', diff --git a/packages/plugin-infra/src/web3-types.ts b/packages/plugin-infra/src/web3-types.ts index fcc289bd62a6..057cd24024b2 100644 --- a/packages/plugin-infra/src/web3-types.ts +++ b/packages/plugin-infra/src/web3-types.ts @@ -281,7 +281,7 @@ export declare namespace Web3Plugin { providerType: string, network: NetworkDescriptor, pagination?: Pagination, - ) => Promise[]> + ) => Promise>> /** Get non-fungible assets of given account. */ getNonFungibleAssets?: ( address: string, diff --git a/packages/plugins/Flow/src/apis/getFungibleAssets.ts b/packages/plugins/Flow/src/apis/getFungibleAssets.ts index a1335e23a821..8888c2d0fb8f 100644 --- a/packages/plugins/Flow/src/apis/getFungibleAssets.ts +++ b/packages/plugins/Flow/src/apis/getFungibleAssets.ts @@ -103,14 +103,14 @@ export async function getFungibleAssets( provider: string, network: Web3Plugin.NetworkDescriptor, pagination?: Pagination, -): Promise[]> { +): Promise>> { const allSettled = await Promise.allSettled([ getAssetFLOW(network.chainId, address), getAssetFUSD(network.chainId, address), getAssetTether(network.chainId, address), ]) - return allSettled - .map((x) => (x.status === 'fulfilled' ? x.value : null)) - .filter(Boolean) as Web3Plugin.Asset[] + return allSettled.map((x) => (x.status === 'fulfilled' ? x.value : null)).filter(Boolean) as Array< + Web3Plugin.Asset + > } diff --git a/packages/plugins/RSS3/src/SNSAdaptor/components/DonationCard.tsx b/packages/plugins/RSS3/src/SNSAdaptor/components/DonationCard.tsx index 3e6b365975ee..b012d9304989 100644 --- a/packages/plugins/RSS3/src/SNSAdaptor/components/DonationCard.tsx +++ b/packages/plugins/RSS3/src/SNSAdaptor/components/DonationCard.tsx @@ -8,10 +8,10 @@ export interface DonationCardProps extends HTMLProps { imageUrl: string name: string contribCount: number - contribDetails: { + contribDetails: Array<{ token: string amount: string - }[] + }> } const useStyles = makeStyles()((theme) => ({ diff --git a/packages/plugins/RSS3/src/types.ts b/packages/plugins/RSS3/src/types.ts index 5a94d76053a5..fbd9d744ac23 100644 --- a/packages/plugins/RSS3/src/types.ts +++ b/packages/plugins/RSS3/src/types.ts @@ -23,10 +23,10 @@ export interface GeneralAsset { animation_original_url?: string | null title?: string total_contribs?: number - token_contribs?: { + token_contribs?: Array<{ token: string amount: string - }[] + }> start_date?: string end_date?: string country?: string diff --git a/packages/plugins/Solana/src/apis/getFungibleAssets.ts b/packages/plugins/Solana/src/apis/getFungibleAssets.ts index 7859f6a017ca..fb8073a36ca9 100644 --- a/packages/plugins/Solana/src/apis/getFungibleAssets.ts +++ b/packages/plugins/Solana/src/apis/getFungibleAssets.ts @@ -68,7 +68,7 @@ export async function getFungibleAssets( provider: string, network: Web3Plugin.NetworkDescriptor, pagination?: Pagination, -): Promise[]> { +): Promise>> { const allSettled = await Promise.allSettled([ getSolanaBalance(network.chainId, address).then((x) => [x]), getSplTokenList(network.chainId, address), @@ -77,5 +77,5 @@ export async function getFungibleAssets( return allSettled .map((x) => (x.status === 'fulfilled' ? x.value : null)) .flat() - .filter(Boolean) as Web3Plugin.Asset[] + .filter(Boolean) as Array> } diff --git a/packages/plugins/Solana/src/apis/shared.ts b/packages/plugins/Solana/src/apis/shared.ts index 54aa78d0697e..20b57481355d 100644 --- a/packages/plugins/Solana/src/apis/shared.ts +++ b/packages/plugins/Solana/src/apis/shared.ts @@ -49,7 +49,7 @@ export interface ProgramAccount { pubkey: string } -export type GetProgramAccountsResponse = RpcResponse> +export type GetProgramAccountsResponse = RpcResponse let id = 0 export async function requestRPC(chainId: ChainId, options: RpcOptions): Promise { diff --git a/packages/plugins/example/src/Worker/index.ts b/packages/plugins/example/src/Worker/index.ts index c9a0027ae6d5..f336e4386a26 100644 --- a/packages/plugins/example/src/Worker/index.ts +++ b/packages/plugins/example/src/Worker/index.ts @@ -10,7 +10,7 @@ interface File { interface Folder { type: 'folder' id: string - files: File['id'][] + files: Array } let storage: Plugin.Worker.DatabaseStorage | undefined const worker: Plugin.Worker.Definition = { diff --git a/packages/shared-base/src/Identifier/map.ts b/packages/shared-base/src/Identifier/map.ts index 531ee0814f62..18b4311d65c3 100644 --- a/packages/shared-base/src/Identifier/map.ts +++ b/packages/shared-base/src/Identifier/map.ts @@ -7,10 +7,10 @@ import { PostIVIdentifier as D } from './post-iv' type I = Iterable // you're free to add a new overload... -export function convertRawMapToIdentifierMap(it: I, ...of: typeof A[]): Map -export function convertRawMapToIdentifierMap(it: I, ...of: typeof B[]): Map -export function convertRawMapToIdentifierMap(it: I, ...of: typeof C[]): Map -export function convertRawMapToIdentifierMap(it: I, ...of: typeof D[]): Map +export function convertRawMapToIdentifierMap(it: I, ...of: Array): Map +export function convertRawMapToIdentifierMap(it: I, ...of: Array): Map +export function convertRawMapToIdentifierMap(it: I, ...of: Array): Map +export function convertRawMapToIdentifierMap(it: I, ...of: Array): Map export function convertRawMapToIdentifierMap(it: I, ...of: unknown[]): Map { const hasProfileIdentifier = of.includes(A) const hasECKeyIdentifier = of.includes(B) diff --git a/packages/shared-base/src/NextID/type.ts b/packages/shared-base/src/NextID/type.ts index 17c8f914b586..e6ab5e2d52bc 100644 --- a/packages/shared-base/src/NextID/type.ts +++ b/packages/shared-base/src/NextID/type.ts @@ -61,7 +61,7 @@ export interface NextIDStoragePayload { } export interface NextIDStorageInfo { persona: string - proofs: NextIDStorageProofs[] + proofs: Array> } export interface NextIDStorageProofs { content: { diff --git a/packages/shared/src/UI/components/ConcealableTabs/index.tsx b/packages/shared/src/UI/components/ConcealableTabs/index.tsx index 6ea0aa321f2a..dc4c95a7ef59 100644 --- a/packages/shared/src/UI/components/ConcealableTabs/index.tsx +++ b/packages/shared/src/UI/components/ConcealableTabs/index.tsx @@ -106,7 +106,7 @@ interface TabOption { } export interface ConcealableTabsProps extends Omit, 'onChange'> { - tabs: TabOption[] + tabs: Array> selectedId?: T onChange?(id: T): void tail?: ReactNode diff --git a/packages/shared/src/UI/components/MiniNetworkSelector/index.tsx b/packages/shared/src/UI/components/MiniNetworkSelector/index.tsx index c3498dc4b812..aa64050dcd92 100644 --- a/packages/shared/src/UI/components/MiniNetworkSelector/index.tsx +++ b/packages/shared/src/UI/components/MiniNetworkSelector/index.tsx @@ -44,13 +44,13 @@ export interface NetworkSelectorMinProps { ID: string chainId: number } | null - networks: { + networks: Array<{ ID: string isMainnet: boolean chainId: number icon: URL iconColor: string - }[] + }> onSelect(network: { chainId: number } | null): void hideAllNetworkButton?: boolean disabledNonCurrentNetwork?: boolean diff --git a/packages/theme/src/ShadowRoot/Contexts.ts b/packages/theme/src/ShadowRoot/Contexts.ts index fef9cfa0b3d3..91515aa2e9b8 100644 --- a/packages/theme/src/ShadowRoot/Contexts.ts +++ b/packages/theme/src/ShadowRoot/Contexts.ts @@ -4,6 +4,6 @@ import type { StyleSheet } from './ShadowRootStyleSheet' /** @internal */ export const StyleSheetsContext = createContext(null!) /** @internal */ -export const PreventEventPropagationListContext = createContext<(keyof HTMLElementEventMap)[]>([]) +export const PreventEventPropagationListContext = createContext>([]) /** This context does not join any ShadowRoot related feature. */ export const DisableShadowRootContext = createContext(false) diff --git a/packages/theme/src/ShadowRoot/createReactRootShadowed.tsx b/packages/theme/src/ShadowRoot/createReactRootShadowed.tsx index 32535b1a52af..66949d641135 100644 --- a/packages/theme/src/ShadowRoot/createReactRootShadowed.tsx +++ b/packages/theme/src/ShadowRoot/createReactRootShadowed.tsx @@ -20,7 +20,7 @@ export interface CreateRenderInShadowRootHostConfig { * * ! This is not a security boundary ! */ - preventEventPropagationList: (keyof HTMLElementEventMap)[] + preventEventPropagationList: Array wrapJSX?(jsx: React.ReactChild): React.ReactChild } export interface ReactRootShadowed { diff --git a/packages/theme/src/Theme/Provider.tsx b/packages/theme/src/Theme/Provider.tsx index 2260bdc1a4d2..7ab86e6dcacf 100644 --- a/packages/theme/src/Theme/Provider.tsx +++ b/packages/theme/src/Theme/Provider.tsx @@ -2,7 +2,7 @@ import { CssBaseline, Theme, ThemeProvider } from '@mui/material' import { MaskIconPalette, MaskIconPaletteContext } from '@masknet/icons' import { CustomSnackbarProvider } from '../Components' -function compose(init: React.ReactNode, ...f: ((children: React.ReactNode) => JSX.Element)[]) { +function compose(init: React.ReactNode, ...f: Array<(children: React.ReactNode) => JSX.Element>) { // eslint-disable-next-line unicorn/no-array-reduce return f.reduceRight((prev, curr) => curr(prev), <>{init}) } diff --git a/packages/theme/src/UIHelper/custom-ui-helper.tsx b/packages/theme/src/UIHelper/custom-ui-helper.tsx index db8ed7aba8cd..233d13ffcf70 100644 --- a/packages/theme/src/UIHelper/custom-ui-helper.tsx +++ b/packages/theme/src/UIHelper/custom-ui-helper.tsx @@ -11,7 +11,7 @@ export function useStylesExtends> | undefined)[]): Partial> { +export function mergeClasses(...args: Array> | undefined>): Partial> { args = args.filter(Boolean) if (args.length === 1) return args[0]! const result = {} as Partial> diff --git a/packages/theme/stories/utils/Material-UI.ts b/packages/theme/stories/utils/Material-UI.ts index 94ef7291de68..2bc1c3fd4dc3 100644 --- a/packages/theme/stories/utils/Material-UI.ts +++ b/packages/theme/stories/utils/Material-UI.ts @@ -2,7 +2,9 @@ import type { ButtonProps, SelectProps, TextFieldProps } from '@mui/material' import type { ArgType, ArgTypes } from '@storybook/addons' import { argsOfArr, ControlType } from './args' function enumIn(enums: { - [Prop in keyof T]?: (argsFromEnum: (enumString: NonNullable[], type?: ControlType) => ArgType) => ArgType + [Prop in keyof T]?: ( + argsFromEnum: (enumString: Array>, type?: ControlType) => ArgType, + ) => ArgType }): ArgTypes { for (const key of Object.keys(enums) as Array) { enums[key] = (enums[key] as any)(argsOfArr) diff --git a/packages/theme/stories/utils/args.ts b/packages/theme/stories/utils/args.ts index 01a6609863f2..9561b40cc1c1 100644 --- a/packages/theme/stories/utils/args.ts +++ b/packages/theme/stories/utils/args.ts @@ -1,5 +1,5 @@ export type ControlType = 'radio' | 'inline-radio' | 'check' | 'inline-check' | 'select' | 'multi-select' -export function argsOfArr(keys: NonNullable[], type?: ControlType) { +export function argsOfArr(keys: Array>, type?: ControlType) { if (type === undefined) { if (keys.length <= 6) type = 'inline-radio' else type = 'select' diff --git a/packages/typed-message/base/utils/extract.ts b/packages/typed-message/base/utils/extract.ts index 5a1220fe216a..2e1e5ba38ddc 100644 --- a/packages/typed-message/base/utils/extract.ts +++ b/packages/typed-message/base/utils/extract.ts @@ -27,10 +27,10 @@ export function extractTextFromTypedMessage( if (text.length) return Some(text.join(' ')) return None } -export function extractImageFromTypedMessage(message: TypedMessage | null): (string | Blob)[] { +export function extractImageFromTypedMessage(message: TypedMessage | null): Array { if (!message) return [] - const image: (string | Blob)[] = [] + const image: Array = [] function visitor(message: TypedMessage): void { if (isTypedMessageImage(message)) return void image.push(message.image) return forEachTypedMessageChild(message, visitor) diff --git a/packages/typed-message/base/utils/internal.ts b/packages/typed-message/base/utils/internal.ts index cd9523604cdb..eda1b255c5ea 100644 --- a/packages/typed-message/base/utils/internal.ts +++ b/packages/typed-message/base/utils/internal.ts @@ -8,11 +8,11 @@ export function createIsType(x: T['type'], version?: num } } /** @internal */ -export function composeSome(...fns: ((...args: Args) => boolean)[]) { +export function composeSome(...fns: Array<(...args: Args) => boolean>) { return (...args: Args) => fns.some((f) => f(...args)) } /** @internal */ -export function composeEvery(...fns: ((...args: Args) => boolean)[]) { +export function composeEvery(...fns: Array<(...args: Args) => boolean>) { return (...args: Args) => fns.every((f) => f(...args)) } diff --git a/packages/web3-constants/compile-constants.ts b/packages/web3-constants/compile-constants.ts index ab288a6150c3..ef2c95494704 100644 --- a/packages/web3-constants/compile-constants.ts +++ b/packages/web3-constants/compile-constants.ts @@ -11,7 +11,7 @@ async function compileConstants(folderPath: string, names: string[]) { for (const name of Object.keys(constants)) { const values = constants[name] const defaultValue = getDefaultValue(Object.values(values)[0]) - const pairs: [string, unknown][] = [] + const pairs: Array<[string, unknown]> = [] for (const name of names) { pairs.push([name, values[name] ?? defaultValue]) } diff --git a/packages/web3-contracts/compile-contracts.ts b/packages/web3-contracts/compile-contracts.ts index 24911661fd24..494476eb1c5d 100644 --- a/packages/web3-contracts/compile-contracts.ts +++ b/packages/web3-contracts/compile-contracts.ts @@ -6,7 +6,7 @@ import { run } from './utils' const ABIS_PATH = path.join(__dirname, 'abis') const GENERATED_PATH = path.join(__dirname, 'types') -async function replaceFileAll(file: string, pairs: [string, string][]) { +async function replaceFileAll(file: string, pairs: Array<[string, string]>) { let content = await fs.readFile(file, 'utf-8') for (const [pattern, value] of pairs) { content = content.replace(new RegExp(pattern, 'img'), value) diff --git a/packages/web3-providers/src/opensea/types.ts b/packages/web3-providers/src/opensea/types.ts index 9ee7062c7b14..efd8ce281dc2 100644 --- a/packages/web3-providers/src/opensea/types.ts +++ b/packages/web3-providers/src/opensea/types.ts @@ -80,11 +80,11 @@ export interface OpenSeaCollection extends OpenSeaFees { wiki_link?: string safelist_request_status: string owned_asset_count: number - primary_asset_contracts: { + primary_asset_contracts: Array<{ address: string asset_contract_type: string symbol: string - }[] + }> } export interface OpenSeaResponse extends Asset { @@ -104,19 +104,19 @@ export interface OpenSeaResponse extends Asset { image_thumbnail_url: string opensea_link: string external_link: string - traits: { + traits: Array<{ trait_type: string value: string - }[] + }> num_sales: number last_sale: NonFungibleTokenAPI.AssetEvent | null background_color: string | null transfer_fee: string | null transfer_fee_payment_token: OpenSeaFungibleToken | null - top_ownerships: { + top_ownerships: Array<{ owner: OpenSeaCustomAccount quantity: string - }[] + }> creator: OpenSeaCustomAccount endTime: string } diff --git a/packages/web3-providers/src/rarible/index.ts b/packages/web3-providers/src/rarible/index.ts index 4d660764186e..cdd1b548266e 100644 --- a/packages/web3-providers/src/rarible/index.ts +++ b/packages/web3-providers/src/rarible/index.ts @@ -36,7 +36,7 @@ async function fetchFromRarible(url: string, path: string, init?: RequestInit return response.json() as Promise } -function getProfilesFromRarible(addresses: (string | undefined)[]) { +function getProfilesFromRarible(addresses: Array) { return fetchFromRarible(RaribleMainnetURL, '/profiles/list', { method: 'POST', body: JSON.stringify(addresses), diff --git a/packages/web3-providers/src/rarible/types.ts b/packages/web3-providers/src/rarible/types.ts index d772dcabc1d0..7616b1d8e9a1 100644 --- a/packages/web3-providers/src/rarible/types.ts +++ b/packages/web3-providers/src/rarible/types.ts @@ -58,10 +58,10 @@ export interface Creator { export interface Meta { name: string description: string - attributes: { + attributes: Array<{ key: string value: string - }[] + }> image?: { meta: { PREVIEW: { diff --git a/packages/web3-providers/src/types.ts b/packages/web3-providers/src/types.ts index e33ba8eed336..ca204bd3db7e 100644 --- a/packages/web3-providers/src/types.ts +++ b/packages/web3-providers/src/types.ts @@ -40,10 +40,10 @@ export namespace RSS3BaseAPI { animation_original_url?: string | null title?: string total_contribs?: number - token_contribs?: { + token_contribs?: Array<{ token: string amount: string - }[] + }> start_date?: string end_date?: string country?: string @@ -204,13 +204,13 @@ export namespace NonFungibleTokenAPI { collection_name: string animation_url?: string end_time: Date | null - order_payment_tokens: (ERC20TokenDetailed | NativeTokenDetailed)[] - offer_payment_tokens: (ERC20TokenDetailed | NativeTokenDetailed)[] + order_payment_tokens: Array + offer_payment_tokens: Array slug: string | null desktopOrder?: AssetOrder - top_ownerships: { + top_ownerships: Array<{ owner: AssetOwner - }[] + }> last_sale: AssetEvent | null response_: any } @@ -464,10 +464,10 @@ export namespace TwitterBaseAPI { name: string } } - traits: { + traits: Array<{ trait_type: string value: string - }[] + }> } } export interface AvatarInfo { diff --git a/packages/web3-shared/evm/constants/getContractOwnerDomain.ts b/packages/web3-shared/evm/constants/getContractOwnerDomain.ts index ae6757dc5d64..b38f5de4fe91 100644 --- a/packages/web3-shared/evm/constants/getContractOwnerDomain.ts +++ b/packages/web3-shared/evm/constants/getContractOwnerDomain.ts @@ -13,7 +13,10 @@ import RedPacket from '@masknet/web3-constants/evm/red-packet.json' import Trader from '@masknet/web3-constants/evm/trader.json' import { filter, flatten, pick, uniq, values } from 'lodash-unified' -const collect = >>(data: T, fields: (keyof T)[]): string[] => { +const collect = >>( + data: T, + fields: Array, +): string[] => { const groupedByFields = values(pick(data, fields)) const listOfAddresses = groupedByFields.map((v) => values(v)) const listOfAddress = flatten(listOfAddresses) diff --git a/packages/web3-shared/evm/hooks/useERC20TokenDetailed.ts b/packages/web3-shared/evm/hooks/useERC20TokenDetailed.ts index c6f3234250a8..cc91b05ed1d7 100644 --- a/packages/web3-shared/evm/hooks/useERC20TokenDetailed.ts +++ b/packages/web3-shared/evm/hooks/useERC20TokenDetailed.ts @@ -25,7 +25,10 @@ export function useERC20TokenDetailed(address?: string, token?: Partial[], _chainId?: ChainId) { +export function useFungibleTokensDetailed( + listOfToken: Array>, + _chainId?: ChainId, +) { const currentChainId = useChainId() const chainId = _chainId ? _chainId : currentChainId const listOfAddress = useMemo(() => listOfToken.map((t) => t.address), [JSON.stringify(listOfToken)]) diff --git a/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts b/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts index 93e933e1c887..d9eaf14e3ca6 100644 --- a/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts +++ b/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts @@ -12,9 +12,9 @@ import { EMPTY_LIST } from '@masknet/shared-base' export function useERC20TokensDetailedFromTokenLists( lists?: string[], keyword = '', - additionalTokens: (ERC20TokenDetailed | NativeTokenDetailed)[] = EMPTY_LIST, + additionalTokens: Array = EMPTY_LIST, targetChainId?: ChainId, -): AsyncStateRetry<(ERC20TokenDetailed | NativeTokenDetailed)[]> { +): AsyncStateRetry> { // #region fetch token lists const currentChainId = useChainId() const chainId = targetChainId ?? currentChainId diff --git a/packages/web3-shared/evm/hooks/useERC721TokenDetailed.ts b/packages/web3-shared/evm/hooks/useERC721TokenDetailed.ts index cc9397ca4313..41b177ef1d99 100644 --- a/packages/web3-shared/evm/hooks/useERC721TokenDetailed.ts +++ b/packages/web3-shared/evm/hooks/useERC721TokenDetailed.ts @@ -39,7 +39,7 @@ export async function getERC721TokenDetailedFromOpensea( description: string image_url: string animation_url: string - top_ownerships: { owner: { address: string } }[] + top_ownerships: Array<{ owner: { address: string } }> } if (response.ok) { diff --git a/packages/web3-shared/evm/hooks/useMulticall.ts b/packages/web3-shared/evm/hooks/useMulticall.ts index 323d362272e2..f05a80aecb2a 100644 --- a/packages/web3-shared/evm/hooks/useMulticall.ts +++ b/packages/web3-shared/evm/hooks/useMulticall.ts @@ -192,7 +192,7 @@ export function useMulticallStateDecoded< export function useSingleContractMultipleData( contract: T | null, names: K[], - callDatas: Parameters[], + callDatas: Array>, gasLimit = DEFAULT_GAS_LIMIT, chainId?: ChainId, blockNumber?: number, @@ -241,7 +241,7 @@ export function useMultipleContractSingleData( contracts: T[], names: K[], - callDatas: Parameters[], + callDatas: Array>, gasLimit = DEFAULT_GAS_LIMIT, chainId?: ChainId, ) { From 9b527821e8e772cf1d6c36242884d0d177b3127f Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 18 May 2022 13:24:10 +0800 Subject: [PATCH 10/29] chore: upgrade deps (#6281) * chore: upgrade deps * fix: lockfile * fix: ts * fix: eslint --- package.json | 34 +- packages/dashboard/package.json | 14 +- packages/injected-script/package.json | 4 +- packages/mask-sdk/package.json | 4 +- packages/mask/package.json | 28 +- .../src/components/shared/DraggableDiv.tsx | 1 - packages/polyfills/package.json | 10 +- packages/provider-proxy/package.json | 4 +- packages/scripts/package.json | 2 +- packages/storybook-shared/package.json | 4 +- packages/theme/package.json | 6 +- packages/web3-providers/package.json | 4 +- packages/web3-providers/src/NextID/kv.ts | 4 +- packages/web3-shared/evm/package.json | 2 +- pnpm-lock.yaml | 5017 ++++++++--------- 15 files changed, 2319 insertions(+), 2819 deletions(-) diff --git a/package.json b/package.json index f3673747e6e7..baaa50f1801d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mask-network", - "packageManager": "pnpm@7.0.0", + "packageManager": "pnpm@7.1.1", "engines": { "node": ">=17.0.0", "pnpm": ">=7.0.0", @@ -33,16 +33,16 @@ "@emotion/serialize": "^1.0.3", "@emotion/styled": "^11.8.1", "@emotion/utils": "^1.1.0", - "@mui/icons-material": "5.6.2", - "@mui/lab": "5.0.0-alpha.80", - "@mui/material": "5.6.4", - "@mui/system": "5.6.4", + "@mui/icons-material": "5.8.0", + "@mui/lab": "5.0.0-alpha.82", + "@mui/material": "5.8.0", + "@mui/system": "5.8.0", "@solana/web3.js": "1.39.1", "@types/masknet__global-types": "workspace:*", "@types/react": "18.0.8", - "@types/react-dom": "^18.0.3", - "@types/web": "^0.0.64", - "i18next": "^21.7.1", + "@types/react-dom": "^18.0.4", + "@types/web": "^0.0.66", + "i18next": "^21.8.2", "immer": "9.0.12", "lodash": "^4.17.21", "lodash-es": "^4.17.21", @@ -56,8 +56,8 @@ "web3-core-method": "1.7.3" }, "devDependencies": { - "@commitlint/cli": "^16.2.4", - "@commitlint/config-conventional": "^16.2.4", + "@commitlint/cli": "^17.0.0", + "@commitlint/config-conventional": "^17.0.0", "@dimensiondev/eslint-plugin": "0.0.2-20220516081411-2649814", "@dimensiondev/patch-package": "^6.5.0", "@jest/globals": "^28.1.0", @@ -67,10 +67,10 @@ "@nice-labs/git-rev": "^3.5.0", "@swc/core": "^1.2.177", "@types/lodash-es": "^4.17.6", - "@typescript-eslint/eslint-plugin": "^5.22.0", - "@typescript-eslint/experimental-utils": "^5.22.0", - "@typescript-eslint/parser": "^5.22.0", - "cspell": "^5.20.0", + "@typescript-eslint/eslint-plugin": "^5.25.0", + "@typescript-eslint/experimental-utils": "^5.25.0", + "@typescript-eslint/parser": "^5.25.0", + "cspell": "^5.21.0", "eslint": "8.15.0", "eslint-plugin-import": "2.26.0", "eslint-plugin-react": "^7.29.4", @@ -78,17 +78,17 @@ "eslint-plugin-unicorn": "^42.0.0", "eslint-plugin-unused-imports": "^2.0.0", "gulp": "^4.0.2", - "husky": "^7.0.4", + "husky": "^8.0.1", "jest": "^28.1.0", "lint-staged": "^12.4.1", "prettier": "^2.6.2", - "ts-jest": "^28.0.1", + "ts-jest": "^28.0.2", "ts-node": "^10.7.0", "typescript": "4.7.0-beta" }, "pnpm": { "overrides": { - "@types/node": "^17.0.31", + "@types/node": "^17.0.34", "@types/react": "18.0.9", "@solana/web3.js": "1.39.1" }, diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json index 794d858b72de..146c914615be 100644 --- a/packages/dashboard/package.json +++ b/packages/dashboard/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "@dimensiondev/holoflows-kit": "^0.9.0-20210902104757-7c3d0d0", - "@hookform/resolvers": "^2.8.8", + "@hookform/resolvers": "^2.8.10", "@masknet/backup-format": "workspace:*", "@masknet/icons": "workspace:*", "@masknet/plugin-example": "workspace:*", @@ -43,13 +43,13 @@ "date-fns": "2.28.0", "html-to-image": "^1.9.0", "json-stable-stringify": "^1.0.1", - "react-avatar-editor": "^12.0.0", + "react-avatar-editor": "^13.0.0", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", - "react-hook-form": "^7.30.0", + "react-hook-form": "^7.31.1", "react-qrcode-logo": "^2.7.0", "react-router-dom": "^6.3.0", - "react-to-print": "^2.14.6", + "react-to-print": "^2.14.7", "react-use": "^17.3.2", "unstated-next": "^1.1.0", "urlcat": "^2.0.4", @@ -58,10 +58,10 @@ "wallet.ts": "^1.0.1", "web3-core-helpers": "1.7.3", "web3-utils": "1.7.3", - "zod": "^3.14.4" + "zod": "^3.16.0" }, "devDependencies": { - "@babel/core": "^7.17.10", + "@babel/core": "^7.17.12", "@storybook/addon-actions": "^6.4.22", "@storybook/addon-essentials": "^6.4.22", "@storybook/addon-links": "^6.4.22", @@ -71,6 +71,6 @@ "@types/use-subscription": "^1.0.0", "@types/uuid": "^8.3.4", "babel-loader": "^8.2.5", - "webpack": "^5.72.0" + "webpack": "^5.72.1" } } diff --git a/packages/injected-script/package.json b/packages/injected-script/package.json index 822f0e34f894..24da8df40a8d 100644 --- a/packages/injected-script/package.json +++ b/packages/injected-script/package.json @@ -10,8 +10,8 @@ } }, "devDependencies": { - "@rollup/plugin-sucrase": "^4.0.3", - "rollup": "^2.72.0", + "@rollup/plugin-sucrase": "^4.0.4", + "rollup": "^2.73.0", "rollup-plugin-terser": "^7.0.2" }, "scripts": { diff --git a/packages/mask-sdk/package.json b/packages/mask-sdk/package.json index cee771cbfc9d..c30980a45fcc 100644 --- a/packages/mask-sdk/package.json +++ b/packages/mask-sdk/package.json @@ -11,8 +11,8 @@ "types": "./dist/server/index.d.ts", "devDependencies": { "@rollup/plugin-node-resolve": "^13.3.0", - "@rollup/plugin-sucrase": "^4.0.3", - "rollup": "^2.72.0", + "@rollup/plugin-sucrase": "^4.0.4", + "rollup": "^2.73.0", "rollup-plugin-terser": "^7.0.2" }, "scripts": { diff --git a/packages/mask/package.json b/packages/mask/package.json index 68d24f9efcda..035e8d79141f 100644 --- a/packages/mask/package.json +++ b/packages/mask/package.json @@ -13,7 +13,7 @@ "@ethersproject/address": "^5.0.4", "@ethersproject/providers": "^5.0.9", "@ethersproject/solidity": "^5.0.4", - "@hookform/resolvers": "2.8.8", + "@hookform/resolvers": "2.8.10", "@masknet/backup-format": "workspace:*", "@masknet/dashboard": "workspace:*", "@masknet/encryption": "workspace:^0.0.0", @@ -55,8 +55,8 @@ "@types/elliptic": "^6.4.14", "@types/json-stable-stringify": "^1.0.34", "@types/json2csv": "^5.0.3", - "@types/node": "^17.0.31", - "@types/react-avatar-editor": "^10.3.6", + "@types/node": "^17.0.34", + "@types/react-avatar-editor": "^12.0.0", "@types/react-highlight-words": "^0.16.4", "@types/react-router-dom": "^5.3.3", "@types/react-virtualized-auto-sizer": "^1.0.1", @@ -85,7 +85,7 @@ "ethereumjs-util": "^7.1.0", "ethjs-ens": "^2.0.1", "event-iterator": "^2.0.0", - "fuse.js": "^6.5.3", + "fuse.js": "^6.6.2", "graphql": "^15.5.1", "graphql-request": "^3.4.0", "https-browserify": "^1.0.0", @@ -98,16 +98,16 @@ "millify": "^4.0.0", "next-tick": "^1.0.0", "opensea-js": "^1.2.7", - "pure-react-carousel": "^1.28.1", "promievent": "^0.1.4", "protobufjs": "^6.11.2", - "react-avatar-editor": "^12.0.0", + "pure-react-carousel": "^1.28.1", + "react-avatar-editor": "^13.0.0", "react-dnd": "^16.0.1", "react-dnd-html5-backend": "^16.0.1", - "react-draggable": "^4.4.4", + "react-draggable": "^4.4.5", "react-feather": "^2.0.9", "react-highlight-words": "^0.18.0", - "react-hook-form": "7.30.0", + "react-hook-form": "7.31.1", "react-router-dom": "^6.3.0", "react-transition-group": "^4.4.2", "react-use": "^17.3.2", @@ -133,22 +133,22 @@ "web3-utils": "1.7.3", "webextension-polyfill": "^0.9.0", "z-schema": "^5.0.3", - "zod": "3.14.4" + "zod": "3.16.0" }, "devDependencies": { "@dimensiondev/webextension-shim": "0.0.3-20210823035705-4257e12", "@nice-labs/emit-file-webpack-plugin": "^1.1.2", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.5", + "@pmmmwh/react-refresh-webpack-plugin": "^0.5.6", "@types/color": "^3.0.3", "binaryen": "^107.0.0", - "copy-webpack-plugin": "^10.2.4", + "copy-webpack-plugin": "^11.0.0", "html-webpack-plugin": "^5.5.0", - "react-devtools-core": "^4.24.5", + "react-devtools-core": "^4.24.6", "react-refresh": "^0.13.0", "resolve-typescript-plugin": "^1.2.0", "source-map-loader": "^3.0.1", - "swc-loader": "^0.2.0", - "webpack": "^5.72.0", + "swc-loader": "^0.2.1", + "webpack": "^5.72.1", "webpack-cli": "^4.9.2", "webpack-dev-server": "^4.9.0", "webpack-target-webextension": "^1.0.3" diff --git a/packages/mask/src/components/shared/DraggableDiv.tsx b/packages/mask/src/components/shared/DraggableDiv.tsx index ca2cf87eec02..f30c9a7bbe4f 100644 --- a/packages/mask/src/components/shared/DraggableDiv.tsx +++ b/packages/mask/src/components/shared/DraggableDiv.tsx @@ -39,7 +39,6 @@ export function DraggableDiv({ cancel="p, h1, input, button, address" handle="nav" {...DraggableProps} - // @ts-expect-error @types/react 18 children={
} />
diff --git a/packages/polyfills/package.json b/packages/polyfills/package.json index 98ca724ca701..e0d198566017 100644 --- a/packages/polyfills/package.json +++ b/packages/polyfills/package.json @@ -6,11 +6,11 @@ "@rollup/plugin-commonjs": "^22.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.3.0", - "@rollup/plugin-sucrase": "^4.0.3", - "@types/node": "^17.0.31", - "core-js-builder": "^3.22.4", + "@rollup/plugin-sucrase": "^4.0.4", + "@types/node": "^17.0.34", + "core-js-builder": "^3.22.5", "regenerator-runtime": "^0.13.9", - "rollup": "^2.72.0", + "rollup": "^2.73.0", "rollup-plugin-terser": "^7.0.2" }, "scripts": { @@ -19,6 +19,6 @@ "dependencies": { "buffer": "^6.0.3", "clipboard-polyfill": "^3.0.3", - "core-js": "^3.22.4" + "core-js": "^3.22.5" } } diff --git a/packages/provider-proxy/package.json b/packages/provider-proxy/package.json index cfab1792e503..f5147a7214ce 100644 --- a/packages/provider-proxy/package.json +++ b/packages/provider-proxy/package.json @@ -18,9 +18,9 @@ "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^13.3.0", "@rollup/plugin-replace": "^4.0.0", - "@rollup/plugin-sucrase": "^4.0.3", + "@rollup/plugin-sucrase": "^4.0.4", "date-fns": "^2.28.0", - "rollup": "^2.72.0", + "rollup": "^2.73.0", "rollup-plugin-dts": "4.2.1" } } diff --git a/packages/scripts/package.json b/packages/scripts/package.json index bda434dfc98b..b101bd729c99 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -14,7 +14,7 @@ "gulp-zip": "^5.1.0", "proper-lockfile": "^4.1.1", "rimraf": "^3.0.2", - "yargs": "^17.4.1" + "yargs": "^17.5.1" }, "devDependencies": { "@types/fs-extra": "^9.0.13", diff --git a/packages/storybook-shared/package.json b/packages/storybook-shared/package.json index 2b54223df2af..757d1e0c1f67 100644 --- a/packages/storybook-shared/package.json +++ b/packages/storybook-shared/package.json @@ -8,8 +8,8 @@ "@storybook/react": "^6.4.22", "@swc/core": "^1.2.177", "stream-browserify": "3", - "swc-loader": "^0.2.0", - "webpack": "^5.72.0" + "swc-loader": "^0.2.1", + "webpack": "^5.72.1" }, "peerDependencies": { "@storybook/addons": "^6", diff --git a/packages/theme/package.json b/packages/theme/package.json index d41dc7c53f5d..4f045fb661a6 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -34,8 +34,8 @@ "@types/qrcode": "^1.4.2", "@types/tinycolor2": "^1.4.3", "classnames": "^2.3.1", - "fuse.js": "^6.5.3", - "notistack": "2.0.4", + "fuse.js": "^6.6.2", + "notistack": "2.0.5", "react-window": "^1.8.7", "tinycolor2": "^1.4.2", "tss-react": "^3.6.2", @@ -43,7 +43,7 @@ "use-subscription": "1.6.0" }, "devDependencies": { - "@babel/core": "^7.17.10", + "@babel/core": "^7.17.12", "@storybook/addon-actions": "^6.4.22", "@storybook/addon-essentials": "^6.4.22", "@storybook/addon-links": "^6.4.22", diff --git a/packages/web3-providers/package.json b/packages/web3-providers/package.json index 38a566a34864..48ab3e18511d 100644 --- a/packages/web3-providers/package.json +++ b/packages/web3-providers/package.json @@ -21,7 +21,7 @@ "graphql-request": "^3.4.0", "json-stable-stringify": "^1.0.1", "lodash-unified": "1.0.2", - "lru-cache": "^7.8.1", + "lru-cache": "^7.10.1", "react-use": "^17.3.2", "rss3-next": "^0.6.17", "socket.io-client": "2.4.0", @@ -30,6 +30,6 @@ "wallet.ts": "^1.0.1" }, "devDependencies": { - "@types/lru-cache": "^7.6.1" + "@types/lru-cache": "^7.10.10" } } diff --git a/packages/web3-providers/src/NextID/kv.ts b/packages/web3-providers/src/NextID/kv.ts index 08e323a8f23f..c38a8fbed289 100644 --- a/packages/web3-providers/src/NextID/kv.ts +++ b/packages/web3-providers/src/NextID/kv.ts @@ -37,11 +37,11 @@ export class NextIDStorageAPI implements NextIDBaseAPI.Storage { ): Promise> { const response = await fetchJSON<{ persona: string - proofs: { + proofs: Array<{ platform: NextIDPlatform identity: string content: Record - }[] + }> }>(urlcat(BASE_URL, '/v1/kv', { persona: personaPublicKey })) if (!response.ok) return Err('User not found') diff --git a/packages/web3-shared/evm/package.json b/packages/web3-shared/evm/package.json index 7c2a76db6a04..ba79197ba9f3 100644 --- a/packages/web3-shared/evm/package.json +++ b/packages/web3-shared/evm/package.json @@ -20,7 +20,7 @@ "bignumber.js": "9.0.2", "ethereum-blockies": "^0.1.1", "fortmatic": "^2.2.1", - "fuse.js": "^6.5.3", + "fuse.js": "^6.6.2", "punycode": "^2.1.1", "react-use": "^17.3.2", "unstated-next": "^1.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aedafd9611ce..999ec0856b2d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,7 +3,7 @@ lockfileVersion: 5.4 onlyBuiltDependencies: [] overrides: - '@types/node': ^17.0.31 + '@types/node': ^17.0.34 '@types/react': 18.0.9 '@solana/web3.js': 1.39.1 @@ -11,8 +11,8 @@ importers: .: specifiers: - '@commitlint/cli': ^16.2.4 - '@commitlint/config-conventional': ^16.2.4 + '@commitlint/cli': ^17.0.0 + '@commitlint/config-conventional': ^17.0.0 '@dimensiondev/eslint-plugin': 0.0.2-20220516081411-2649814 '@dimensiondev/kit': 0.0.0-20220228054820-f2378be '@dimensiondev/patch-package': ^6.5.0 @@ -25,22 +25,22 @@ importers: '@magic-works/i18n-codegen': ^0.1.0 '@masknet/cli': workspace:* '@masknet/serializer': workspace:* - '@mui/icons-material': 5.6.2 - '@mui/lab': 5.0.0-alpha.80 - '@mui/material': 5.6.4 - '@mui/system': 5.6.4 + '@mui/icons-material': 5.8.0 + '@mui/lab': 5.0.0-alpha.82 + '@mui/material': 5.8.0 + '@mui/system': 5.8.0 '@nice-labs/git-rev': ^3.5.0 '@solana/web3.js': 1.39.1 '@swc/core': ^1.2.177 '@types/lodash-es': ^4.17.6 '@types/masknet__global-types': workspace:* '@types/react': 18.0.9 - '@types/react-dom': ^18.0.3 - '@types/web': ^0.0.64 - '@typescript-eslint/eslint-plugin': ^5.22.0 - '@typescript-eslint/experimental-utils': ^5.22.0 - '@typescript-eslint/parser': ^5.22.0 - cspell: ^5.20.0 + '@types/react-dom': ^18.0.4 + '@types/web': ^0.0.66 + '@typescript-eslint/eslint-plugin': ^5.25.0 + '@typescript-eslint/experimental-utils': ^5.25.0 + '@typescript-eslint/parser': ^5.25.0 + cspell: ^5.21.0 eslint: 8.15.0 eslint-plugin-import: 2.26.0 eslint-plugin-react: ^7.29.4 @@ -48,8 +48,8 @@ importers: eslint-plugin-unicorn: ^42.0.0 eslint-plugin-unused-imports: ^2.0.0 gulp: ^4.0.2 - husky: ^7.0.4 - i18next: ^21.7.1 + husky: ^8.0.1 + i18next: ^21.8.2 immer: 9.0.12 jest: ^28.1.0 lint-staged: ^12.4.1 @@ -61,7 +61,7 @@ importers: react-dom: 18.1.0 react-i18next: ^11.16.9 ses: 0.15.15 - ts-jest: ^28.0.1 + ts-jest: ^28.0.2 ts-node: ^10.7.0 ts-results: 3.3.0 typescript: 4.7.0-beta @@ -74,30 +74,30 @@ importers: '@emotion/serialize': 1.0.3 '@emotion/styled': 11.8.1_ycz2ostpb5cpb2s3izz5qyhrbm '@emotion/utils': 1.1.0 - '@mui/icons-material': 5.6.2_bgi5kwlph7gi5zmorztz2chbuq - '@mui/lab': 5.0.0-alpha.80_wzmhkwmqqx52evdrbuaj25eek4 - '@mui/material': 5.6.4_4xriuibr7qayay6mzcpq5f43me - '@mui/system': 5.6.4_2f7y4c3dlygqpuszd3d43oslwi + '@mui/icons-material': 5.8.0_ar3vczqpton7uep5462l6mtgi4 + '@mui/lab': 5.0.0-alpha.82_ygk7qgdlnpugkmqdrmzyce476m + '@mui/material': 5.8.0_4xriuibr7qayay6mzcpq5f43me + '@mui/system': 5.8.0_2f7y4c3dlygqpuszd3d43oslwi '@solana/web3.js': 1.39.1 '@types/masknet__global-types': link:packages/polyfills/types '@types/react': 18.0.9 - '@types/react-dom': 18.0.3 - '@types/web': 0.0.64 - i18next: 21.7.1 + '@types/react-dom': 18.0.4 + '@types/web': 0.0.66 + i18next: 21.8.2 immer: 9.0.12 lodash: 4.17.21 lodash-es: 4.17.21 lodash-unified: 1.0.2_3ib2ivapxullxkx3xftsimdk7u react: 18.1.0 react-dom: 18.1.0_react@18.1.0 - react-i18next: 11.16.9_2xmduy7g43rnjce2rgborrjowa + react-i18next: 11.16.9_nlaekqjbpikw4agfyzvj2iejnm ses: 0.15.15 ts-results: 3.3.0 web3-core: 1.7.3 web3-core-method: 1.7.3 devDependencies: - '@commitlint/cli': 16.2.4_@swc+core@1.2.177 - '@commitlint/config-conventional': 16.2.4 + '@commitlint/cli': 17.0.0_@swc+core@1.2.177 + '@commitlint/config-conventional': 17.0.0 '@dimensiondev/eslint-plugin': 0.0.2-20220516081411-2649814_eslint@8.15.0 '@dimensiondev/patch-package': 6.5.0 '@jest/globals': 28.1.0 @@ -107,22 +107,22 @@ importers: '@nice-labs/git-rev': 3.5.0 '@swc/core': 1.2.177 '@types/lodash-es': 4.17.6 - '@typescript-eslint/eslint-plugin': 5.22.0_dvfvfxjgp6zej7ga25lbfx7lze - '@typescript-eslint/experimental-utils': 5.22.0_dx5yzralznart3ybdl432c3i44 - '@typescript-eslint/parser': 5.22.0_dx5yzralznart3ybdl432c3i44 - cspell: 5.20.0 + '@typescript-eslint/eslint-plugin': 5.25.0_ba4jjn6kijvdzygv7x6qvskqee + '@typescript-eslint/experimental-utils': 5.25.0_dx5yzralznart3ybdl432c3i44 + '@typescript-eslint/parser': 5.25.0_dx5yzralznart3ybdl432c3i44 + cspell: 5.21.0 eslint: 8.15.0 - eslint-plugin-import: 2.26.0_6nacgdzqm4zbhelsxkmd2vkvxy + eslint-plugin-import: 2.26.0_eor5fr4wgkua4fh2zz3r4cqkce eslint-plugin-react: 7.29.4_eslint@8.15.0 eslint-plugin-react-hooks: 4.5.0_eslint@8.15.0 eslint-plugin-unicorn: 42.0.0_eslint@8.15.0 - eslint-plugin-unused-imports: 2.0.0_4lhejcve573tk5ngahyfsatu2i + eslint-plugin-unused-imports: 2.0.0_xcfg2fwnjcimwhunpire36ffsy gulp: 4.0.2 - husky: 7.0.4 + husky: 8.0.1 jest: 28.1.0_ts-node@10.7.0 lint-staged: 12.4.1 prettier: 2.6.2 - ts-jest: 28.0.1_xactucw2klfireixld4575ducu + ts-jest: 28.0.2_xactucw2klfireixld4575ducu ts-node: 10.7.0_7d2xj2vhpg3cmdbhr7qq77usiy typescript: 4.7.0-beta @@ -149,9 +149,9 @@ importers: packages/dashboard: specifiers: - '@babel/core': ^7.17.10 + '@babel/core': ^7.17.12 '@dimensiondev/holoflows-kit': ^0.9.0-20210902104757-7c3d0d0 - '@hookform/resolvers': ^2.8.8 + '@hookform/resolvers': ^2.8.10 '@masknet/backup-format': workspace:* '@masknet/icons': workspace:* '@masknet/plugin-example': workspace:* @@ -188,13 +188,13 @@ importers: date-fns: 2.28.0 html-to-image: ^1.9.0 json-stable-stringify: ^1.0.1 - react-avatar-editor: ^12.0.0 + react-avatar-editor: ^13.0.0 react-dnd: ^16.0.1 react-dnd-html5-backend: ^16.0.1 - react-hook-form: ^7.30.0 + react-hook-form: ^7.31.1 react-qrcode-logo: ^2.7.0 react-router-dom: ^6.3.0 - react-to-print: ^2.14.6 + react-to-print: ^2.14.7 react-use: ^17.3.2 unstated-next: ^1.1.0 urlcat: ^2.0.4 @@ -203,11 +203,11 @@ importers: wallet.ts: ^1.0.1 web3-core-helpers: 1.7.3 web3-utils: 1.7.3 - webpack: ^5.72.0 - zod: ^3.14.4 + webpack: ^5.72.1 + zod: ^3.16.0 dependencies: '@dimensiondev/holoflows-kit': 0.9.0-20210902104757-7c3d0d0 - '@hookform/resolvers': 2.8.8_react-hook-form@7.30.0 + '@hookform/resolvers': 2.8.10_react-hook-form@7.31.1 '@masknet/backup-format': link:../backup-format '@masknet/icons': link:../icons '@masknet/plugin-example': link:../plugins/example @@ -235,13 +235,13 @@ importers: date-fns: 2.28.0 html-to-image: 1.9.0 json-stable-stringify: 1.0.1 - react-avatar-editor: 12.0.0_@babel+core@7.17.10 + react-avatar-editor: 13.0.0_@babel+core@7.17.12 react-dnd: 16.0.1 react-dnd-html5-backend: 16.0.1 - react-hook-form: 7.30.0 + react-hook-form: 7.31.1 react-qrcode-logo: 2.7.0 react-router-dom: 6.3.0 - react-to-print: 2.14.6 + react-to-print: 2.14.7 react-use: 17.3.2 unstated-next: 1.1.0 urlcat: 2.0.4 @@ -250,19 +250,19 @@ importers: wallet.ts: 1.0.1 web3-core-helpers: 1.7.3 web3-utils: 1.7.3 - zod: 3.14.4 + zod: 3.16.0 devDependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@storybook/addon-actions': 6.4.22 - '@storybook/addon-essentials': 6.4.22_iy5746u7mvp22b5wkaw35cerlm + '@storybook/addon-essentials': 6.4.22_gqsw6pqr75fjity56y4wz4ur5q '@storybook/addon-links': 6.4.22 '@storybook/builder-webpack5': 6.4.22 '@storybook/manager-webpack5': 6.4.22 - '@storybook/react': 6.4.22_25edyf2dljasinbq77nivmb22m + '@storybook/react': 6.4.22_hrbnwp53bf7wfnzfgeil2y6kbe '@types/use-subscription': 1.0.0 '@types/uuid': 8.3.4 - babel-loader: 8.2.5_rb5fcebzp6kx3hqg3ucus54t3m - webpack: 5.72.0 + babel-loader: 8.2.5_72ctybzk7ntig5kqkayinqycte + webpack: 5.72.1 packages/empty: specifiers: {} @@ -305,16 +305,16 @@ importers: packages/injected-script: specifiers: - '@rollup/plugin-sucrase': ^4.0.3 - rollup: ^2.72.0 + '@rollup/plugin-sucrase': ^4.0.4 + rollup: ^2.73.0 rollup-plugin-terser: ^7.0.2 web3-core-helpers: 1.7.3 dependencies: web3-core-helpers: 1.7.3 devDependencies: - '@rollup/plugin-sucrase': 4.0.3_rollup@2.72.0 - rollup: 2.72.0 - rollup-plugin-terser: 7.0.2_rollup@2.72.0 + '@rollup/plugin-sucrase': 4.0.4_rollup@2.73.0 + rollup: 2.73.0 + rollup-plugin-terser: 7.0.2_rollup@2.73.0 packages/mask: specifiers: @@ -328,7 +328,7 @@ importers: '@ethersproject/address': ^5.0.4 '@ethersproject/providers': ^5.0.9 '@ethersproject/solidity': ^5.0.4 - '@hookform/resolvers': 2.8.8 + '@hookform/resolvers': 2.8.10 '@masknet/backup-format': workspace:* '@masknet/dashboard': workspace:* '@masknet/encryption': workspace:^0.0.0 @@ -363,7 +363,7 @@ importers: '@metamask/eth-sig-util': ^4.0.0 '@msgpack/msgpack': ^2.7.2 '@nice-labs/emit-file-webpack-plugin': ^1.1.2 - '@pmmmwh/react-refresh-webpack-plugin': ^0.5.5 + '@pmmmwh/react-refresh-webpack-plugin': ^0.5.6 '@servie/events': ^3.0.0 '@sinonjs/text-encoding': ^0.7.1 '@snapshot-labs/snapshot.js': ^0.3.31 @@ -373,8 +373,8 @@ importers: '@types/elliptic': ^6.4.14 '@types/json-stable-stringify': ^1.0.34 '@types/json2csv': ^5.0.3 - '@types/node': ^17.0.31 - '@types/react-avatar-editor': ^10.3.6 + '@types/node': ^17.0.34 + '@types/react-avatar-editor': ^12.0.0 '@types/react-highlight-words': ^0.16.4 '@types/react-router-dom': ^5.3.3 '@types/react-virtualized-auto-sizer': ^1.0.1 @@ -397,7 +397,7 @@ importers: classnames: ^2.3.1 clipboard-polyfill: ^3.0.3 color: ^4.2.3 - copy-webpack-plugin: ^10.2.4 + copy-webpack-plugin: ^11.0.0 crypto-browserify: ^3.12.0 d3: ^5.16.0 date-fns: ^2.28.0 @@ -405,7 +405,7 @@ importers: ethereumjs-util: ^7.1.0 ethjs-ens: ^2.0.1 event-iterator: ^2.0.0 - fuse.js: ^6.5.3 + fuse.js: ^6.6.2 graphql: ^15.5.1 graphql-request: ^3.4.0 html-webpack-plugin: ^5.5.0 @@ -422,14 +422,14 @@ importers: promievent: ^0.1.4 protobufjs: ^6.11.2 pure-react-carousel: ^1.28.1 - react-avatar-editor: ^12.0.0 - react-devtools-core: ^4.24.5 + react-avatar-editor: ^13.0.0 + react-devtools-core: ^4.24.6 react-dnd: ^16.0.1 react-dnd-html5-backend: ^16.0.1 - react-draggable: ^4.4.4 + react-draggable: ^4.4.5 react-feather: ^2.0.9 react-highlight-words: ^0.18.0 - react-hook-form: 7.30.0 + react-hook-form: 7.31.1 react-refresh: ^0.13.0 react-router-dom: ^6.3.0 react-transition-group: ^4.4.2 @@ -445,7 +445,7 @@ importers: source-map-loader: ^3.0.1 stream-browserify: ^3.0.0 stream-http: ^2.8.3 - swc-loader: ^0.2.0 + swc-loader: ^0.2.1 unstated-next: ^1.1.0 urlcat: ^2.0.4 use-subscription: 1.6.0 @@ -458,12 +458,12 @@ importers: web3-eth-contract: 1.7.3 web3-utils: 1.7.3 webextension-polyfill: ^0.9.0 - webpack: ^5.72.0 + webpack: ^5.72.1 webpack-cli: ^4.9.2 webpack-dev-server: ^4.9.0 webpack-target-webextension: ^1.0.3 z-schema: ^5.0.3 - zod: 3.14.4 + zod: 3.16.0 dependencies: '@balancer-labs/sor': 1.0.0 '@dimensiondev/holoflows-kit': 0.9.0-20210902104757-7c3d0d0_5owzivba7saavwcb3imbrcsadu @@ -474,7 +474,7 @@ importers: '@ethersproject/address': 5.4.0 '@ethersproject/providers': 5.4.2 '@ethersproject/solidity': 5.4.0 - '@hookform/resolvers': 2.8.8_react-hook-form@7.30.0 + '@hookform/resolvers': 2.8.10_react-hook-form@7.31.1 '@masknet/backup-format': link:../backup-format '@masknet/dashboard': link:../dashboard '@masknet/encryption': link:../encryption @@ -516,8 +516,8 @@ importers: '@types/elliptic': 6.4.14 '@types/json-stable-stringify': 1.0.34 '@types/json2csv': 5.0.3 - '@types/node': 17.0.31 - '@types/react-avatar-editor': 10.3.6 + '@types/node': 17.0.34 + '@types/react-avatar-editor': 12.0.0 '@types/react-highlight-words': 0.16.4 '@types/react-router-dom': 5.3.3 '@types/react-virtualized-auto-sizer': 1.0.1 @@ -546,7 +546,7 @@ importers: ethereumjs-util: 7.1.0 ethjs-ens: 2.0.1 event-iterator: 2.0.0 - fuse.js: 6.5.3 + fuse.js: 6.6.2 graphql: 15.5.3 graphql-request: 3.5.0_graphql@15.5.3 https-browserify: 1.0.0 @@ -558,17 +558,17 @@ importers: json2csv: 5.0.6 millify: 4.0.0 next-tick: 1.1.0 - opensea-js: 1.2.7 + opensea-js: 1.2.7_webpack-cli@4.9.2 promievent: 0.1.5 protobufjs: 6.11.2 pure-react-carousel: 1.28.1 - react-avatar-editor: 12.0.0 - react-dnd: 16.0.1_@types+node@17.0.31 + react-avatar-editor: 13.0.0 + react-dnd: 16.0.1_@types+node@17.0.34 react-dnd-html5-backend: 16.0.1 - react-draggable: 4.4.4 + react-draggable: 4.4.5 react-feather: 2.0.9 react-highlight-words: 0.18.0 - react-hook-form: 7.30.0 + react-hook-form: 7.31.1 react-router-dom: 6.3.0 react-transition-group: 4.4.2 react-use: 17.3.2 @@ -594,39 +594,39 @@ importers: web3-utils: 1.7.3 webextension-polyfill: 0.9.0 z-schema: 5.0.3 - zod: 3.14.4 + zod: 3.16.0 devDependencies: '@dimensiondev/webextension-shim': 0.0.3-20210823035705-4257e12 - '@nice-labs/emit-file-webpack-plugin': 1.1.2_webpack@5.72.0 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.5_ffoope4bxc6zqgcasyqmdgdxky + '@nice-labs/emit-file-webpack-plugin': 1.1.2_webpack@5.72.1 + '@pmmmwh/react-refresh-webpack-plugin': 0.5.6_dht25cu4po3ounlhlctzwihdn4 '@types/color': 3.0.3 binaryen: 107.0.0 - copy-webpack-plugin: 10.2.4_webpack@5.72.0 - html-webpack-plugin: 5.5.0_webpack@5.72.0 - react-devtools-core: 4.24.5 + copy-webpack-plugin: 11.0.0_webpack@5.72.1 + html-webpack-plugin: 5.5.0_webpack@5.72.1 + react-devtools-core: 4.24.6 react-refresh: 0.13.0 - resolve-typescript-plugin: 1.2.0_webpack@5.72.0 - source-map-loader: 3.0.1_webpack@5.72.0 - swc-loader: 0.2.0_webpack@5.72.0 - webpack: 5.72.0_webpack-cli@4.9.2 - webpack-cli: 4.9.2_4evrg3m2qioscfus6hwjof6pci - webpack-dev-server: 4.9.0_q7qo2wgeiyigo3znjsjh7f36ue - webpack-target-webextension: 1.0.3_webpack@5.72.0 + resolve-typescript-plugin: 1.2.0_webpack@5.72.1 + source-map-loader: 3.0.1_webpack@5.72.1 + swc-loader: 0.2.1_webpack@5.72.1 + webpack: 5.72.1_webpack-cli@4.9.2 + webpack-cli: 4.9.2_cwh63z5eu3fmemh7flfnfpcp74 + webpack-dev-server: 4.9.0_smhu6mcfcg7aivfsuosc335k3u + webpack-target-webextension: 1.0.3_webpack@5.72.1 packages/mask-sdk: specifiers: '@rollup/plugin-node-resolve': ^13.3.0 - '@rollup/plugin-sucrase': ^4.0.3 + '@rollup/plugin-sucrase': ^4.0.4 async-call-rpc: ^6.0.2 - rollup: ^2.72.0 + rollup: ^2.73.0 rollup-plugin-terser: ^7.0.2 dependencies: async-call-rpc: 6.0.2 devDependencies: - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.72.0 - '@rollup/plugin-sucrase': 4.0.3_rollup@2.72.0 - rollup: 2.72.0 - rollup-plugin-terser: 7.0.2_rollup@2.72.0 + '@rollup/plugin-node-resolve': 13.3.0_rollup@2.73.0 + '@rollup/plugin-sucrase': 4.0.4_rollup@2.73.0 + rollup: 2.73.0 + rollup-plugin-terser: 7.0.2_rollup@2.73.0 packages/plugin-infra: specifiers: @@ -967,29 +967,29 @@ importers: '@rollup/plugin-commonjs': ^22.0.0 '@rollup/plugin-json': ^4.1.0 '@rollup/plugin-node-resolve': ^13.3.0 - '@rollup/plugin-sucrase': ^4.0.3 - '@types/node': ^17.0.31 + '@rollup/plugin-sucrase': ^4.0.4 + '@types/node': ^17.0.34 buffer: ^6.0.3 clipboard-polyfill: ^3.0.3 - core-js: ^3.22.4 - core-js-builder: ^3.22.4 + core-js: ^3.22.5 + core-js-builder: ^3.22.5 regenerator-runtime: ^0.13.9 - rollup: ^2.72.0 + rollup: ^2.73.0 rollup-plugin-terser: ^7.0.2 dependencies: buffer: 6.0.3 clipboard-polyfill: 3.0.3 - core-js: 3.22.4 + core-js: 3.22.5 devDependencies: - '@rollup/plugin-commonjs': 22.0.0_rollup@2.72.0 - '@rollup/plugin-json': 4.1.0_rollup@2.72.0 - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.72.0 - '@rollup/plugin-sucrase': 4.0.3_rollup@2.72.0 - '@types/node': 17.0.31 - core-js-builder: 3.22.4 + '@rollup/plugin-commonjs': 22.0.0_rollup@2.73.0 + '@rollup/plugin-json': 4.1.0_rollup@2.73.0 + '@rollup/plugin-node-resolve': 13.3.0_rollup@2.73.0 + '@rollup/plugin-sucrase': 4.0.4_rollup@2.73.0 + '@types/node': 17.0.34 + core-js-builder: 3.22.5 regenerator-runtime: 0.13.9 - rollup: 2.72.0 - rollup-plugin-terser: 7.0.2_rollup@2.72.0 + rollup: 2.73.0 + rollup-plugin-terser: 7.0.2_rollup@2.73.0 packages/polyfills/types: specifiers: {} @@ -1005,9 +1005,9 @@ importers: '@rollup/plugin-json': ^4.1.0 '@rollup/plugin-node-resolve': ^13.3.0 '@rollup/plugin-replace': ^4.0.0 - '@rollup/plugin-sucrase': ^4.0.3 + '@rollup/plugin-sucrase': ^4.0.4 date-fns: ^2.28.0 - rollup: ^2.72.0 + rollup: ^2.73.0 rollup-plugin-dts: 4.2.1 urlcat: ^2.0.4 dependencies: @@ -1017,15 +1017,15 @@ importers: '@masknet/web3-shared-evm': link:../web3-shared/evm urlcat: 2.0.4 devDependencies: - '@rollup/plugin-alias': 3.1.9_rollup@2.72.0 - '@rollup/plugin-commonjs': 22.0.0_rollup@2.72.0 - '@rollup/plugin-json': 4.1.0_rollup@2.72.0 - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.72.0 - '@rollup/plugin-replace': 4.0.0_rollup@2.72.0 - '@rollup/plugin-sucrase': 4.0.3_rollup@2.72.0 + '@rollup/plugin-alias': 3.1.9_rollup@2.73.0 + '@rollup/plugin-commonjs': 22.0.0_rollup@2.73.0 + '@rollup/plugin-json': 4.1.0_rollup@2.73.0 + '@rollup/plugin-node-resolve': 13.3.0_rollup@2.73.0 + '@rollup/plugin-replace': 4.0.0_rollup@2.73.0 + '@rollup/plugin-sucrase': 4.0.4_rollup@2.73.0 date-fns: 2.28.0 - rollup: 2.72.0 - rollup-plugin-dts: 4.2.1_rollup@2.72.0 + rollup: 2.73.0 + rollup-plugin-dts: 4.2.1_rollup@2.73.0 packages/public-api: specifiers: {} @@ -1044,7 +1044,7 @@ importers: proper-lockfile: ^4.1.1 rimraf: ^3.0.2 ts-node: ^10.7.0 - yargs: ^17.4.1 + yargs: ^17.5.1 dependencies: '@types/rimraf': 3.0.2 chalk: 4.1.2 @@ -1053,7 +1053,7 @@ importers: gulp-zip: 5.1.0 proper-lockfile: 4.1.2 rimraf: 3.0.2 - yargs: 17.4.1 + yargs: 17.5.1 devDependencies: '@types/fs-extra': 9.0.13 '@types/gulp': 4.0.9 @@ -1177,22 +1177,22 @@ importers: '@storybook/react': ^6.4.22 '@swc/core': ^1.2.177 stream-browserify: '3' - swc-loader: ^0.2.0 - webpack: ^5.72.0 + swc-loader: ^0.2.1 + webpack: ^5.72.1 devDependencies: '@storybook/addons': 6.4.22 '@storybook/react': 6.4.22 '@swc/core': 1.2.177 stream-browserify: 3.0.0 - swc-loader: 0.2.0_bv6b5h5gpy5xmvv4nr5rsqz4y4 - webpack: 5.72.0_@swc+core@1.2.177 + swc-loader: 0.2.1_x4y5r4zvu22k667e7z56zns5yi + webpack: 5.72.1_@swc+core@1.2.177 packages/test-serializer: specifiers: {} packages/theme: specifiers: - '@babel/core': ^7.17.10 + '@babel/core': ^7.17.12 '@masknet/icons': workspace:* '@masknet/shared-base': workspace:* '@masknet/storybook-shared': workspace:* @@ -1207,8 +1207,8 @@ importers: '@types/tinycolor2': ^1.4.3 babel-loader: ^8.2.5 classnames: ^2.3.1 - fuse.js: ^6.5.3 - notistack: 2.0.4 + fuse.js: ^6.6.2 + notistack: 2.0.5 react-window: ^1.8.7 tinycolor2: ^1.4.2 tss-react: ^3.6.2 @@ -1221,23 +1221,23 @@ importers: '@types/qrcode': 1.4.2 '@types/tinycolor2': 1.4.3 classnames: 2.3.1 - fuse.js: 6.5.3 - notistack: 2.0.4 + fuse.js: 6.6.2 + notistack: 2.0.5 react-window: 1.8.7 tinycolor2: 1.4.2 tss-react: 3.6.2 unstated-next: 1.1.0 use-subscription: 1.6.0 devDependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@storybook/addon-actions': 6.4.22 - '@storybook/addon-essentials': 6.4.22_h4miks6pfc5gp3ldsh3xdoze4y + '@storybook/addon-essentials': 6.4.22_xdqfd2fjgpzmle5fhbmnsnx2ne '@storybook/addon-links': 6.4.22 '@storybook/builder-webpack5': 6.4.22 '@storybook/manager-webpack5': 6.4.22 - '@storybook/react': 6.4.22_25edyf2dljasinbq77nivmb22m + '@storybook/react': 6.4.22_hrbnwp53bf7wfnzfgeil2y6kbe '@types/react-window': 1.8.5 - babel-loader: 8.2.5_@babel+core@7.17.10 + babel-loader: 8.2.5_@babel+core@7.17.12 packages/typed-message: specifiers: @@ -1277,14 +1277,14 @@ importers: '@masknet/web3-contracts': workspace:* '@masknet/web3-shared-base': workspace:* '@masknet/web3-shared-evm': workspace:* - '@types/lru-cache': ^7.6.1 + '@types/lru-cache': ^7.10.10 '@types/socket.io-client': ^1.4.36 bignumber.js: 9.0.2 date-fns: ^2.28.0 graphql-request: ^3.4.0 json-stable-stringify: ^1.0.1 lodash-unified: 1.0.2 - lru-cache: ^7.8.1 + lru-cache: ^7.10.1 react-use: ^17.3.2 rss3-next: ^0.6.17 socket.io-client: 2.4.0 @@ -1304,7 +1304,7 @@ importers: graphql-request: 3.5.0 json-stable-stringify: 1.0.1 lodash-unified: 1.0.2 - lru-cache: 7.8.1 + lru-cache: 7.10.1 react-use: 17.3.2 rss3-next: 0.6.17 socket.io-client: 2.4.0 @@ -1312,7 +1312,7 @@ importers: uuid: 8.3.2 wallet.ts: 1.0.1 devDependencies: - '@types/lru-cache': 7.6.1 + '@types/lru-cache': 7.10.10 packages/web3-shared/base: specifiers: @@ -1345,7 +1345,7 @@ importers: bignumber.js: 9.0.2 ethereum-blockies: ^0.1.1 fortmatic: ^2.2.1 - fuse.js: ^6.5.3 + fuse.js: ^6.6.2 punycode: ^2.1.1 react-use: ^17.3.2 unstated-next: ^1.1.0 @@ -1367,7 +1367,7 @@ importers: bignumber.js: 9.0.2 ethereum-blockies: 0.1.1 fortmatic: 2.2.1 - fuse.js: 6.5.3 + fuse.js: 6.6.2 punycode: 2.1.1 react-use: 17.3.2 unstated-next: 1.1.0 @@ -1423,7 +1423,7 @@ packages: bintrees: 1.0.2 bn.js: 4.12.0 compare-versions: 3.6.0 - ethereumjs-abi: 0.6.8 + ethereumjs-abi: 0.6.6 ethereumjs-blockstream: 2.0.7 ethereumjs-util: 5.2.1 find-versions: 2.0.0 @@ -1463,7 +1463,7 @@ packages: dependencies: '@0xproject/utils': 0.2.4 chalk: 2.4.2 - glob: 7.2.0 + glob: 7.2.3 handlebars: 4.7.7 lodash: 4.17.21 mkdirp: 0.5.6 @@ -1478,7 +1478,7 @@ packages: dependencies: '@0xproject/utils': 0.3.4 chalk: 2.4.2 - glob: 7.2.0 + glob: 7.2.3 handlebars: 4.7.7 lodash: 4.17.21 mkdirp: 0.5.6 @@ -1510,8 +1510,8 @@ packages: engines: {node: '>=6.12'} dependencies: '@0xproject/typescript-typings': 0.3.2 - '@types/node': 17.0.31 - jsonschema: 1.4.0 + '@types/node': 17.0.34 + jsonschema: 1.4.1 lodash.values: 4.3.0 dev: false @@ -1526,7 +1526,7 @@ packages: resolution: {integrity: sha512-LlTnq7raPnCioCokNy5CLDxZJeg3KtcHT4PBJD6BDiXYtNJxBWvL7/jr6JiwdjReNg7ihGi1265VKfFX7qukRw==} engines: {node: '>=6.12'} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 bignumber.js: 4.1.0 dev: false @@ -1623,6 +1623,14 @@ packages: '@jridgewell/trace-mapping': 0.3.4 dev: true + /@ampproject/remapping/2.2.0: + resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.1.1 + '@jridgewell/trace-mapping': 0.3.13 + dev: true + /@babel/code-frame/7.16.0: resolution: {integrity: sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==} engines: {node: '>=6.9.0'} @@ -1634,40 +1642,28 @@ packages: resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.16.10 - - /@babel/compat-data/7.16.8: - resolution: {integrity: sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/compat-data/7.17.0: - resolution: {integrity: sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==} - engines: {node: '>=6.9.0'} - dev: false + '@babel/highlight': 7.17.12 /@babel/compat-data/7.17.10: resolution: {integrity: sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==} engines: {node: '>=6.9.0'} - dev: true /@babel/compat-data/7.17.7: resolution: {integrity: sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==} engines: {node: '>=6.9.0'} - dev: true /@babel/core/7.12.9: resolution: {integrity: sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.16.7 - '@babel/generator': 7.17.10 - '@babel/helper-module-transforms': 7.17.7 + '@babel/generator': 7.17.12 + '@babel/helper-module-transforms': 7.17.12 '@babel/helpers': 7.17.9 - '@babel/parser': 7.17.10 + '@babel/parser': 7.17.12 '@babel/template': 7.16.7 - '@babel/traverse': 7.17.10 - '@babel/types': 7.17.10 + '@babel/traverse': 7.17.12 + '@babel/types': 7.17.12 convert-source-map: 1.8.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -1703,6 +1699,29 @@ packages: - supports-color dev: true + /@babel/core/7.17.12: + resolution: {integrity: sha512-44ODe6O1IVz9s2oJE3rZ4trNNKTX9O7KpQpfAP4t8QII/zwrVRHL7i2pxhqtcY7tqMLrrKfMlBKnm1QlrRFs5w==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.17.12 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.12 + '@babel/helper-module-transforms': 7.17.12 + '@babel/helpers': 7.17.9 + '@babel/parser': 7.17.12 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.12 + '@babel/types': 7.17.12 + convert-source-map: 1.8.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.1 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/core/7.17.9: resolution: {integrity: sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==} engines: {node: '>=6.9.0'} @@ -1726,15 +1745,6 @@ packages: - supports-color dev: true - /@babel/generator/7.16.8: - resolution: {integrity: sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.16.8 - jsesc: 2.5.2 - source-map: 0.5.7 - dev: false - /@babel/generator/7.17.10: resolution: {integrity: sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==} engines: {node: '>=6.9.0'} @@ -1744,6 +1754,14 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator/7.17.12: + resolution: {integrity: sha512-V49KtZiiiLjH/CnIW6OjJdrenrGoyh6AmKQ3k2AZFKozC1h846Q4NYlZ5nqAigPDUXfGzC88+LOUuG8yKd2kCw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.12 + '@jridgewell/gen-mapping': 0.3.1 + jsesc: 2.5.2 + /@babel/generator/7.17.9: resolution: {integrity: sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==} engines: {node: '>=6.9.0'} @@ -1757,7 +1775,7 @@ packages: resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.17.12 dev: true /@babel/helper-builder-binary-assignment-operator-visitor/7.16.7: @@ -1765,26 +1783,11 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.16.7 - '@babel/types': 7.17.10 + '@babel/types': 7.17.12 dev: true - /@babel/helper-compilation-targets/7.16.7: - resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/compat-data': 7.17.0 - '@babel/helper-validator-option': 7.16.7 - browserslist: 4.20.3 - semver: 6.3.0 - dev: false - - /@babel/helper-compilation-targets/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} + /@babel/helper-compilation-targets/7.17.10: + resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1792,8 +1795,7 @@ packages: '@babel/core': optional: true dependencies: - '@babel/compat-data': 7.17.0 - '@babel/core': 7.17.10 + '@babel/compat-data': 7.17.10 '@babel/helper-validator-option': 7.16.7 browserslist: 4.20.3 semver: 6.3.0 @@ -1815,7 +1817,7 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.9: + /@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.12: resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1825,27 +1827,10 @@ packages: optional: true dependencies: '@babel/compat-data': 7.17.10 - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-validator-option': 7.16.7 browserslist: 4.20.3 semver: 6.3.0 - dev: true - - /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.10: - resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/compat-data': 7.17.7 - '@babel/core': 7.17.10 - '@babel/helper-validator-option': 7.16.7 - browserslist: 4.20.2 - semver: 6.3.0 - dev: true /@babel/helper-compilation-targets/7.17.7_@babel+core@7.17.9: resolution: {integrity: sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==} @@ -1863,28 +1848,7 @@ packages: semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.17.9_@babel+core@7.17.10: - resolution: {integrity: sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-environment-visitor': 7.16.7 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-member-expression-to-functions': 7.17.7 - '@babel/helper-optimise-call-expression': 7.16.7 - '@babel/helper-replace-supers': 7.16.7 - '@babel/helper-split-export-declaration': 7.16.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-create-class-features-plugin/7.17.9_@babel+core@7.17.9: + /@babel/helper-create-class-features-plugin/7.17.9_@babel+core@7.17.12: resolution: {integrity: sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1893,7 +1857,7 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-annotate-as-pure': 7.16.7 '@babel/helper-environment-visitor': 7.16.7 '@babel/helper-function-name': 7.17.9 @@ -1905,7 +1869,7 @@ packages: - supports-color dev: true - /@babel/helper-create-regexp-features-plugin/7.17.0_@babel+core@7.17.10: + /@babel/helper-create-regexp-features-plugin/7.17.0_@babel+core@7.17.12: resolution: {integrity: sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -1914,47 +1878,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-annotate-as-pure': 7.16.7 - regexpu-core: 5.0.1 - dev: true - - /@babel/helper-create-regexp-features-plugin/7.17.0_@babel+core@7.17.9: - resolution: {integrity: sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-annotate-as-pure': 7.16.7 regexpu-core: 5.0.1 dev: true - /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.17.10: - resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} - peerDependencies: - '@babel/core': ^7.4.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/traverse': 7.17.10 - debug: 4.3.4 - lodash.debounce: 4.0.8 - resolve: 1.22.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.17.9: + /@babel/helper-define-polyfill-provider/0.1.5_@babel+core@7.17.12: resolution: {integrity: sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==} peerDependencies: '@babel/core': ^7.4.0-0 @@ -1962,11 +1891,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.12 '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 - '@babel/traverse': 7.17.10 + '@babel/traverse': 7.17.12 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.0 @@ -1975,48 +1904,7 @@ packages: - supports-color dev: true - /@babel/helper-define-polyfill-provider/0.2.4: - resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} - peerDependencies: - '@babel/core': ^7.4.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/helper-compilation-targets': 7.16.7 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/traverse': 7.16.10 - debug: 4.3.3 - lodash.debounce: 4.0.8 - resolve: 1.22.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-define-polyfill-provider/0.2.4_@babel+core@7.17.10: - resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} - peerDependencies: - '@babel/core': ^7.4.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.10 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - '@babel/traverse': 7.16.10 - debug: 4.3.3 - lodash.debounce: 4.0.8 - resolve: 1.22.0 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /@babel/helper-define-polyfill-provider/0.3.1_@babel+core@7.17.10: + /@babel/helper-define-polyfill-provider/0.3.1: resolution: {integrity: sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==} peerDependencies: '@babel/core': ^7.4.0-0 @@ -2024,20 +1912,19 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.10 + '@babel/helper-compilation-targets': 7.17.10 '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 - '@babel/traverse': 7.17.9 + '@babel/traverse': 7.17.12 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.0 semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true + dev: false - /@babel/helper-define-polyfill-provider/0.3.1_@babel+core@7.17.9: + /@babel/helper-define-polyfill-provider/0.3.1_@babel+core@7.17.12: resolution: {integrity: sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==} peerDependencies: '@babel/core': ^7.4.0-0 @@ -2045,81 +1932,72 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.12 '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 - '@babel/traverse': 7.17.9 + '@babel/traverse': 7.17.12 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.0 semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true /@babel/helper-environment-visitor/7.16.7: resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.16.8 + '@babel/types': 7.17.12 /@babel/helper-explode-assignable-expression/7.16.7: resolution: {integrity: sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.10 + '@babel/types': 7.17.12 dev: true - /@babel/helper-function-name/7.16.7: - resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-get-function-arity': 7.16.7 - '@babel/template': 7.16.7 - '@babel/types': 7.16.8 - dev: false - /@babel/helper-function-name/7.17.9: resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==} engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.16.7 - '@babel/types': 7.17.0 - dev: true - - /@babel/helper-get-function-arity/7.16.7: - resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.10 - dev: false + '@babel/types': 7.17.12 /@babel/helper-hoist-variables/7.16.7: resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.10 + '@babel/types': 7.17.12 /@babel/helper-member-expression-to-functions/7.17.7: resolution: {integrity: sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.17.12 dev: true - /@babel/helper-module-imports/7.16.0: - resolution: {integrity: sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==} + /@babel/helper-module-imports/7.16.7: + resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.16.8 - dev: false + '@babel/types': 7.17.12 - /@babel/helper-module-imports/7.16.7: - resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} + /@babel/helper-module-transforms/7.17.12: + resolution: {integrity: sha512-t5s2BeSWIghhFRPh9XMn6EIGmvn8Lmw5RVASJzkIx1mSemubQQBNIZiQD7WzaFmaHIrjAec4x8z9Yx8SjJ1/LA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.10 + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-simple-access': 7.17.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/helper-validator-identifier': 7.16.7 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.12 + '@babel/types': 7.17.12 + transitivePeerDependencies: + - supports-color + dev: true /@babel/helper-module-transforms/7.17.7: resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} @@ -2141,29 +2019,29 @@ packages: resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.17.12 dev: true /@babel/helper-plugin-utils/7.10.4: resolution: {integrity: sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==} dev: true - /@babel/helper-plugin-utils/7.16.5: - resolution: {integrity: sha512-59KHWHXxVA9K4HNF4sbHCf+eJeFe0Te/ZFGqBT4OjXhrwvA04sGfaEGsVTdsjoszq0YTP49RC9UKe5g8uN2RwQ==} - engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-plugin-utils/7.16.7: resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} engines: {node: '>=6.9.0'} + /@babel/helper-plugin-utils/7.17.12: + resolution: {integrity: sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==} + engines: {node: '>=6.9.0'} + dev: false + /@babel/helper-remap-async-to-generator/7.16.8: resolution: {integrity: sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-annotate-as-pure': 7.16.7 '@babel/helper-wrap-function': 7.16.8 - '@babel/types': 7.17.10 + '@babel/types': 7.17.12 transitivePeerDependencies: - supports-color dev: true @@ -2175,8 +2053,8 @@ packages: '@babel/helper-environment-visitor': 7.16.7 '@babel/helper-member-expression-to-functions': 7.17.7 '@babel/helper-optimise-call-expression': 7.16.7 - '@babel/traverse': 7.17.9 - '@babel/types': 7.17.0 + '@babel/traverse': 7.17.12 + '@babel/types': 7.17.12 transitivePeerDependencies: - supports-color dev: true @@ -2185,21 +2063,21 @@ packages: resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.10 + '@babel/types': 7.17.12 dev: true /@babel/helper-skip-transparent-expression-wrappers/7.16.0: resolution: {integrity: sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.0 + '@babel/types': 7.17.12 dev: true /@babel/helper-split-export-declaration/7.16.7: resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.16.8 + '@babel/types': 7.17.12 /@babel/helper-validator-identifier/7.15.7: resolution: {integrity: sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==} @@ -2220,8 +2098,8 @@ packages: dependencies: '@babel/helper-function-name': 7.17.9 '@babel/template': 7.16.7 - '@babel/traverse': 7.17.10 - '@babel/types': 7.17.10 + '@babel/traverse': 7.17.12 + '@babel/types': 7.17.12 transitivePeerDependencies: - supports-color dev: true @@ -2231,8 +2109,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.16.7 - '@babel/traverse': 7.17.9 - '@babel/types': 7.17.0 + '@babel/traverse': 7.17.12 + '@babel/types': 7.17.12 transitivePeerDependencies: - supports-color dev: true @@ -2246,22 +2124,14 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/highlight/7.16.10: - resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} + /@babel/highlight/7.17.12: + resolution: {integrity: sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.16.7 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.16.12: - resolution: {integrity: sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.17.10 - dev: false - /@babel/parser/7.17.10: resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==} engines: {node: '>=6.0.0'} @@ -2270,12 +2140,12 @@ packages: '@babel/types': 7.17.10 dev: true - /@babel/parser/7.17.3: - resolution: {integrity: sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==} + /@babel/parser/7.17.12: + resolution: {integrity: sha512-FLzHmN9V3AJIrWfOpvRlZCeVg/WLdicSnTMsLur6uDj9TT8ymUlG9XxURdW/XvuygK+2CW0poOJABdA4m/YKxA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.17.10 + '@babel/types': 7.17.12 /@babel/parser/7.17.9: resolution: {integrity: sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==} @@ -2285,7 +2155,7 @@ packages: '@babel/types': 7.17.10 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.17.10: + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.17.12: resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -2294,72 +2164,77 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.13.0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.12 dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==} + /@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.17.12: + resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.13.0 + '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.10 + '@babel/helper-remap-async-to-generator': 7.16.8 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.12 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==} + /@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.13.0 + '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.9 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.17.10: - resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==} + /@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.17.12: + resolution: {integrity: sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.12.0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-remap-async-to-generator': 7.16.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.10 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.12 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-async-generator-functions/7.16.8_@babel+core@7.17.9: - resolution: {integrity: sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==} + /@babel/plugin-proposal-decorators/7.17.9_@babel+core@7.17.12: + resolution: {integrity: sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2367,16 +2242,19 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-remap-async-to-generator': 7.16.8 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.9 + '@babel/helper-replace-supers': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/plugin-syntax-decorators': 7.17.0_@babel+core@7.17.12 + charcodes: 0.2.0 transitivePeerDependencies: - supports-color dev: true - /@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} + /@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2384,15 +2262,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-class-properties/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==} + /@babel/plugin-proposal-export-default-from/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2400,49 +2276,41 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-export-default-from': 7.16.7_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.17.10: - resolution: {integrity: sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==} + /@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.12.0 + '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-class-static-block/7.17.6_@babel+core@7.17.9: - resolution: {integrity: sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==} + /@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.12.0 + '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.9 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-decorators/7.17.9_@babel+core@7.17.10: - resolution: {integrity: sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==} + /@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2450,19 +2318,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-replace-supers': 7.16.7 - '@babel/helper-split-export-declaration': 7.16.7 - '@babel/plugin-syntax-decorators': 7.17.0_@babel+core@7.17.10 - charcodes: 0.2.0 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-decorators/7.17.9_@babel+core@7.17.9: - resolution: {integrity: sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==} + /@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2470,19 +2332,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-replace-supers': 7.16.7 - '@babel/helper-split-export-declaration': 7.16.7 - '@babel/plugin-syntax-decorators': 7.17.0_@babel+core@7.17.9 - charcodes: 0.2.0 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==} + /@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2490,27 +2346,27 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.10 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-dynamic-import/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==} - engines: {node: '>=6.9.0'} + /@babel/plugin-proposal-object-rest-spread/7.12.1_@babel+core@7.12.9: + resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.9 + '@babel/core': 7.12.9 + '@babel/helper-plugin-utils': 7.10.4 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 + '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.12.9 dev: true - /@babel/plugin-proposal-export-default-from/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==} + /@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.17.12: + resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2518,13 +2374,16 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/compat-data': 7.17.7 + '@babel/core': 7.17.12 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-export-default-from': 7.16.7_@babel+core@7.17.10 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-export-default-from/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-+cENpW1rgIjExn+o5c8Jw/4BuH4eGKKYvkMB8/0ZxFQ9mC0t4z09VsPIwNg6waF69QYC81zxGeAsREGuqQoKeg==} + /@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2532,13 +2391,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-export-default-from': 7.16.7_@babel+core@7.17.9 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==} + /@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2546,13 +2405,14 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.10 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.12 dev: true - /@babel/plugin-proposal-export-namespace-from/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==} + /@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.17.12: + resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2560,13 +2420,15 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.9 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==} + /@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2574,28 +2436,31 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.10 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.12 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-proposal-json-strings/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} + engines: {node: '>=4'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.9 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.10: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: @@ -2604,26 +2469,22 @@ packages: dependencies: '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.10 dev: true - /@babel/plugin-proposal-logical-assignment-operators/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.12: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.9 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.17.10: + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: @@ -2632,39 +2493,34 @@ packages: dependencies: '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.10 dev: true - /@babel/plugin-proposal-nullish-coalescing-operator/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.10: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.9 dev: true - /@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.12: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.10 dev: true - /@babel/plugin-proposal-numeric-separator/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==} + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.17.12: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2672,44 +2528,37 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.9 dev: true - /@babel/plugin-proposal-object-rest-spread/7.12.1_@babel+core@7.12.9: - resolution: {integrity: sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==} + /@babel/plugin-syntax-decorators/7.17.0_@babel+core@7.17.12: + resolution: {integrity: sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.10.4 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.12.9 + '@babel/core': 7.17.12 + '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.17.10: - resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.17.12: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/compat-data': 7.17.7 - '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.10 dev: true - /@babel/plugin-proposal-object-rest-spread/7.17.3_@babel+core@7.17.9: - resolution: {integrity: sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==} + /@babel/plugin-syntax-export-default-from/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2717,30 +2566,24 @@ packages: '@babel/core': optional: true dependencies: - '@babel/compat-data': 7.17.7 - '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.9 dev: true - /@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.17.12: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.10 dev: true - /@babel/plugin-proposal-optional-catch-binding/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==} + /@babel/plugin-syntax-flow/7.16.7: + resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2748,13 +2591,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.9 dev: true - /@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} + /@babel/plugin-syntax-flow/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2762,30 +2603,24 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.10 dev: true - /@babel/plugin-proposal-optional-chaining/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.17.10: + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.9 dev: true - /@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.17.10: - resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.10: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: @@ -2793,48 +2628,35 @@ packages: optional: true dependencies: '@babel/core': 7.17.10 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.10 '@babel/helper-plugin-utils': 7.16.7 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-proposal-private-methods/7.16.11_@babel+core@7.17.9: - resolution: {integrity: sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.12: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-jsx/7.12.1_@babel+core@7.12.9: + resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.10 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-proposal-private-property-in-object/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==} + /@babel/plugin-syntax-jsx/7.16.7: + resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2842,18 +2664,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.9 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.9 - transitivePeerDependencies: - - supports-color - dev: true - /@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} - engines: {node: '>=4'} + /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.10: + resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: @@ -2861,62 +2676,61 @@ packages: optional: true dependencies: '@babel/core': 7.17.10 - '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.10 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-proposal-unicode-property-regex/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==} - engines: {node: '>=4'} + /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.10: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.9: + resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.9 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.9: - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.10: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.12: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.10: - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.10: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: @@ -2927,21 +2741,20 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.9: - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.12: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.17.10: - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.10: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: @@ -2952,121 +2765,117 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.17.9: - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.12: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-decorators/7.17.0_@babel+core@7.17.10: - resolution: {integrity: sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.12.9: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-decorators/7.17.0_@babel+core@7.17.9: - resolution: {integrity: sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.10: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.12: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.17.9: - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.10: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-export-default-from/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.12: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-export-default-from/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-4C3E4NsrLOgftKaTYTULhHsuQrGv3FHrBzOMDiS7UYKIpgGBkAdawg4h+EI8zPeK9M0fiIIh72hIwsI24K7MbA==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.10: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.12: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.17.9: - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.17.12: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-flow/7.16.7: - resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.10: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3074,11 +2883,12 @@ packages: '@babel/core': optional: true dependencies: + '@babel/core': 7.17.10 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-flow/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-UDo3YGQO0jH6ytzVwgSLv9i/CzMcUjbKenL67dTrAZPPv6GFAtDhe6jqnvmoKzC/7htNTohhos+onPtDMqJwaQ==} + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.12: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3086,12 +2896,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.17.10: - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.17.10: + resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: @@ -3102,44 +2913,51 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.9: - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-jsx/7.12.1_@babel+core@7.12.9: - resolution: {integrity: sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==} + /@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.17.12: + resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.12 + '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-remap-async-to-generator': 7.16.8 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-jsx/7.16.7: - resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + /@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3147,10 +2965,12 @@ packages: '@babel/core': optional: true dependencies: + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + dev: true - /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + /@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3158,12 +2978,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + /@babel/plugin-transform-classes/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3171,168 +2991,204 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-function-name': 7.17.9 + '@babel/helper-optimise-call-expression': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-replace-supers': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.10: - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + /@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.9: - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + /@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.17.12: + resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + /@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.9: - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + /@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.10: - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + /@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.9: - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + /@babel/plugin-transform-flow-strip-types/7.16.7: + resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-flow': 7.16.7 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.12.9: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-transform-flow-strip-types/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.12.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-flow': 7.16.7_@babel+core@7.17.12 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-transform-for-of/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.9: - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + /@babel/plugin-transform-function-name/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.12 + '@babel/helper-function-name': 7.17.9 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + /@babel/plugin-transform-literals/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.9: - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + /@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.10: - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + /@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-module-transforms': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.9: - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + /@babel/plugin-transform-modules-commonjs/7.17.9_@babel+core@7.17.12: + resolution: {integrity: sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-module-transforms': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-simple-access': 7.17.7 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.17.10: - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + /@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.17.12: + resolution: {integrity: sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3340,12 +3196,18 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-hoist-variables': 7.16.7 + '@babel/helper-module-transforms': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-validator-identifier': 7.16.7 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.17.9: - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + /@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3353,25 +3215,28 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-module-transforms': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.10: - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + /@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.17.12: + resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/core': ^7.0.0 peerDependenciesMeta: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/core': 7.17.12 + '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.12 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.9: - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + /@babel/plugin-transform-new-target/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3379,12 +3244,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} + /@babel/plugin-transform-object-super/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3392,12 +3257,15 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-replace-supers': 7.16.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} + /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.12.9: + resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3405,12 +3273,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.12.9 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} + /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3418,12 +3286,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-arrow-functions/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==} + /@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3431,12 +3299,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.17.10: - resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} + /@babel/plugin-transform-react-display-name/7.16.7: + resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3444,16 +3312,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-remap-async-to-generator': 7.16.8 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-async-to-generator/7.16.8_@babel+core@7.17.9: - resolution: {integrity: sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==} + /@babel/plugin-transform-react-display-name/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3461,16 +3324,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-module-imports': 7.16.7 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-remap-async-to-generator': 7.16.8 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} + /@babel/plugin-transform-react-display-name/7.16.7_@babel+core@7.17.9: + resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3478,12 +3337,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.9 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} + /@babel/plugin-transform-react-jsx-development/7.16.7: + resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3491,12 +3350,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-transform-react-jsx': 7.17.3 dev: true - /@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} + /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3504,12 +3362,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/core': 7.17.12 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.12 dev: true - /@babel/plugin-transform-block-scoping/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==} + /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.17.9: + resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3518,11 +3376,11 @@ packages: optional: true dependencies: '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.9 dev: true - /@babel/plugin-transform-classes/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} + /@babel/plugin-transform-react-jsx/7.17.3: + resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3530,21 +3388,15 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-environment-visitor': 7.16.7 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-optimise-call-expression': 7.16.7 + '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-replace-supers': 7.16.7 - '@babel/helper-split-export-declaration': 7.16.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-jsx': 7.16.7 + '@babel/types': 7.17.12 dev: true - /@babel/plugin-transform-classes/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==} + /@babel/plugin-transform-react-jsx/7.17.3_@babel+core@7.17.12: + resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3552,21 +3404,16 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-environment-visitor': 7.16.7 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-optimise-call-expression': 7.16.7 + '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-replace-supers': 7.16.7 - '@babel/helper-split-export-declaration': 7.16.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.12 + '@babel/types': 7.17.12 dev: true - /@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==} + /@babel/plugin-transform-react-jsx/7.17.3_@babel+core@7.17.9: + resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3574,683 +3421,16 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.9 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-module-imports': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.9 + '@babel/types': 7.17.12 dev: true - /@babel/plugin-transform-computed-properties/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.17.10: - resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-destructuring/7.17.7_@babel+core@7.17.9: - resolution: {integrity: sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-dotall-regex/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-duplicate-keys/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.7 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-exponentiation-operator/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.16.7 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-flow-strip-types/7.16.7: - resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-flow': 7.16.7 - dev: true - - /@babel/plugin-transform-flow-strip-types/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-mzmCq3cNsDpZZu9FADYYyfZJIOrSONmHcop2XEKPdBNMa4PDC4eEvcOvzZaCNcjKu72v0XQlA5y1g58aLRXdYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-flow': 7.16.7_@babel+core@7.17.10 - dev: true - - /@babel/plugin-transform-for-of/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-for-of/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-function-name/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.10 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-function-name/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.9 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-literals/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helper-plugin-utils': 7.16.7 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-amd/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helper-plugin-utils': 7.16.7 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-commonjs/7.17.9_@babel+core@7.17.10: - resolution: {integrity: sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-simple-access': 7.17.7 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-commonjs/7.17.9_@babel+core@7.17.9: - resolution: {integrity: sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-simple-access': 7.17.7 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.17.10: - resolution: {integrity: sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-hoist-variables': 7.16.7 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-validator-identifier': 7.16.7 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-systemjs/7.17.8_@babel+core@7.17.9: - resolution: {integrity: sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-hoist-variables': 7.16.7 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-validator-identifier': 7.16.7 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helper-plugin-utils': 7.16.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-modules-umd/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helper-plugin-utils': 7.16.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.17.10: - resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.10 - dev: true - - /@babel/plugin-transform-named-capturing-groups-regex/7.16.8_@babel+core@7.17.9: - resolution: {integrity: sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.9 - dev: true - - /@babel/plugin-transform-new-target/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-new-target/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-object-super/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-replace-supers': 7.16.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-object-super/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-replace-supers': 7.16.7 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.12.9: - resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.12.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-parameters/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-react-display-name/7.16.7: - resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-react-display-name/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-react-display-name/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-react-jsx-development/7.16.7: - resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/plugin-transform-react-jsx': 7.17.3 - dev: true - - /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 - dev: true - - /@babel/plugin-transform-react-jsx-development/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.9 - dev: true - - /@babel/plugin-transform-react-jsx/7.17.3: - resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-jsx': 7.16.7 - '@babel/types': 7.17.0 - dev: true - - /@babel/plugin-transform-react-jsx/7.17.3_@babel+core@7.17.10: - resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.10 - '@babel/types': 7.17.0 - dev: true - - /@babel/plugin-transform-react-jsx/7.17.3_@babel+core@7.17.9: - resolution: {integrity: sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.9 - '@babel/types': 7.17.0 - dev: true - - /@babel/plugin-transform-react-pure-annotations/7.16.7: - resolution: {integrity: sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==} + /@babel/plugin-transform-react-pure-annotations/7.16.7: + resolution: {integrity: sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4264,7 +3444,7 @@ packages: '@babel/types': 7.17.10 dev: true - /@babel/plugin-transform-react-pure-annotations/7.16.7_@babel+core@7.17.10: + /@babel/plugin-transform-react-pure-annotations/7.16.7_@babel+core@7.17.12: resolution: {integrity: sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4273,7 +3453,7 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-annotate-as-pure': 7.16.7 '@babel/helper-plugin-utils': 7.16.7 dev: true @@ -4292,20 +3472,7 @@ packages: '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-regenerator/7.17.9_@babel+core@7.17.10: - resolution: {integrity: sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - regenerator-transform: 0.15.0 - dev: true - - /@babel/plugin-transform-regenerator/7.17.9_@babel+core@7.17.9: + /@babel/plugin-transform-regenerator/7.17.9_@babel+core@7.17.12: resolution: {integrity: sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4314,24 +3481,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 regenerator-transform: 0.15.0 dev: true - /@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.17.9: + /@babel/plugin-transform-reserved-words/7.16.7_@babel+core@7.17.12: resolution: {integrity: sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4340,12 +3494,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-runtime/7.15.0: - resolution: {integrity: sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==} + /@babel/plugin-transform-runtime/7.17.12: + resolution: {integrity: sha512-xsl5MeGjWnmV6Ui9PfILM2+YRpa3GqLOrczPpXV3N2KCgQGU+sU8OfzuMbjkIdfvZEZIm+3y0V7w58sk0SGzlw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4353,18 +3507,18 @@ packages: '@babel/core': optional: true dependencies: - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - babel-plugin-polyfill-corejs2: 0.2.3 - babel-plugin-polyfill-corejs3: 0.2.4 - babel-plugin-polyfill-regenerator: 0.2.3 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.17.12 + babel-plugin-polyfill-corejs2: 0.3.1 + babel-plugin-polyfill-corejs3: 0.5.2 + babel-plugin-polyfill-regenerator: 0.3.1 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-runtime/7.15.0_@babel+core@7.17.10: - resolution: {integrity: sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==} + /@babel/plugin-transform-runtime/7.17.12_@babel+core@7.17.12: + resolution: {integrity: sha512-xsl5MeGjWnmV6Ui9PfILM2+YRpa3GqLOrczPpXV3N2KCgQGU+sU8OfzuMbjkIdfvZEZIm+3y0V7w58sk0SGzlw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4372,31 +3526,18 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-module-imports': 7.16.0 - '@babel/helper-plugin-utils': 7.16.5 - babel-plugin-polyfill-corejs2: 0.2.3_@babel+core@7.17.10 - babel-plugin-polyfill-corejs3: 0.2.4_@babel+core@7.17.10 - babel-plugin-polyfill-regenerator: 0.2.3_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-plugin-utils': 7.17.12 + babel-plugin-polyfill-corejs2: 0.3.1_@babel+core@7.17.12 + babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.17.12 + babel-plugin-polyfill-regenerator: 0.3.1_@babel+core@7.17.12 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: false - /@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.17.9: + /@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.17.12: resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4405,25 +3546,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-spread/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 dev: true - /@babel/plugin-transform-spread/7.16.7_@babel+core@7.17.9: + /@babel/plugin-transform-spread/7.16.7_@babel+core@7.17.12: resolution: {integrity: sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4432,91 +3559,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - dev: true - - /@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 dev: true - /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.17.10: - resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==} + /@babel/plugin-transform-sticky-regex/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4524,16 +3573,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.17.9: - resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==} + /@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4541,16 +3586,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.17.9 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==} + /@babel/plugin-transform-template-literals/7.16.7_@babel+core@7.17.9: + resolution: {integrity: sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4558,12 +3599,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.9 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==} + /@babel/plugin-transform-typeof-symbol/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4571,12 +3612,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==} + /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.17.12: + resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4584,13 +3625,16 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-create-class-features-plugin': 7.17.9_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.17.12 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.17.9: - resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==} + /@babel/plugin-transform-unicode-escapes/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4598,13 +3642,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 dev: true - /@babel/preset-env/7.16.11_@babel+core@7.17.10: - resolution: {integrity: sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==} + /@babel/plugin-transform-unicode-regex/7.16.7_@babel+core@7.17.12: + resolution: {integrity: sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4612,86 +3655,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/compat-data': 7.17.7 - '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/helper-create-regexp-features-plugin': 7.17.0_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-async-generator-functions': 7.16.8_@babel+core@7.17.10 - '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-class-static-block': 7.17.6_@babel+core@7.17.10 - '@babel/plugin-proposal-dynamic-import': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-export-namespace-from': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-json-strings': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-logical-assignment-operators': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-numeric-separator': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.10 - '@babel/plugin-proposal-optional-catch-binding': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.10 - '@babel/plugin-proposal-private-property-in-object': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.10 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.10 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.10 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.10 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.10 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.10 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.10 - '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-async-to-generator': 7.16.8_@babel+core@7.17.10 - '@babel/plugin-transform-block-scoped-functions': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-computed-properties': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.10 - '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-duplicate-keys': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-exponentiation-operator': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-function-name': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-literals': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-modules-amd': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-modules-commonjs': 7.17.9_@babel+core@7.17.10 - '@babel/plugin-transform-modules-systemjs': 7.17.8_@babel+core@7.17.10 - '@babel/plugin-transform-modules-umd': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-named-capturing-groups-regex': 7.16.8_@babel+core@7.17.10 - '@babel/plugin-transform-new-target': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-object-super': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-property-literals': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-regenerator': 7.17.9_@babel+core@7.17.10 - '@babel/plugin-transform-reserved-words': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-sticky-regex': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-typeof-symbol': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.17.10 - '@babel/preset-modules': 0.1.5_@babel+core@7.17.10 - '@babel/types': 7.17.0 - babel-plugin-polyfill-corejs2: 0.3.1_@babel+core@7.17.10 - babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.17.10 - babel-plugin-polyfill-regenerator: 0.3.1_@babel+core@7.17.10 - core-js-compat: 3.22.2 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color dev: true - /@babel/preset-env/7.16.11_@babel+core@7.17.9: + /@babel/preset-env/7.16.11_@babel+core@7.17.12: resolution: {integrity: sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4701,78 +3670,78 @@ packages: optional: true dependencies: '@babel/compat-data': 7.17.7 - '@babel/core': 7.17.9 - '@babel/helper-compilation-targets': 7.17.7_@babel+core@7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.12 '@babel/helper-plugin-utils': 7.16.7 '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-async-generator-functions': 7.16.8_@babel+core@7.17.9 - '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-class-static-block': 7.17.6_@babel+core@7.17.9 - '@babel/plugin-proposal-dynamic-import': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-export-namespace-from': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-json-strings': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-logical-assignment-operators': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-numeric-separator': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.9 - '@babel/plugin-proposal-optional-catch-binding': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.9 - '@babel/plugin-proposal-private-property-in-object': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.9 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.9 - '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.9 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.9 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.9 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.9 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.9 - '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-async-to-generator': 7.16.8_@babel+core@7.17.9 - '@babel/plugin-transform-block-scoped-functions': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-computed-properties': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.9 - '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-duplicate-keys': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-exponentiation-operator': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-function-name': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-literals': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-modules-amd': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-modules-commonjs': 7.17.9_@babel+core@7.17.9 - '@babel/plugin-transform-modules-systemjs': 7.17.8_@babel+core@7.17.9 - '@babel/plugin-transform-modules-umd': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-named-capturing-groups-regex': 7.16.8_@babel+core@7.17.9 - '@babel/plugin-transform-new-target': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-object-super': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-property-literals': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-regenerator': 7.17.9_@babel+core@7.17.9 - '@babel/plugin-transform-reserved-words': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-sticky-regex': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-typeof-symbol': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.17.9 - '@babel/preset-modules': 0.1.5_@babel+core@7.17.9 - '@babel/types': 7.17.0 - babel-plugin-polyfill-corejs2: 0.3.1_@babel+core@7.17.9 - babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.17.9 - babel-plugin-polyfill-regenerator: 0.3.1_@babel+core@7.17.9 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-async-generator-functions': 7.16.8_@babel+core@7.17.12 + '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-class-static-block': 7.17.6_@babel+core@7.17.12 + '@babel/plugin-proposal-dynamic-import': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-export-namespace-from': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-json-strings': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-logical-assignment-operators': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-numeric-separator': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.12 + '@babel/plugin-proposal-optional-catch-binding': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.12 + '@babel/plugin-proposal-private-property-in-object': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.12 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.12 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.17.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.12 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.12 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.17.12 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.12 + '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-async-to-generator': 7.16.8_@babel+core@7.17.12 + '@babel/plugin-transform-block-scoped-functions': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-computed-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.12 + '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-duplicate-keys': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-exponentiation-operator': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-function-name': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-literals': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-modules-amd': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-modules-commonjs': 7.17.9_@babel+core@7.17.12 + '@babel/plugin-transform-modules-systemjs': 7.17.8_@babel+core@7.17.12 + '@babel/plugin-transform-modules-umd': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-named-capturing-groups-regex': 7.16.8_@babel+core@7.17.12 + '@babel/plugin-transform-new-target': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-object-super': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-property-literals': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-regenerator': 7.17.9_@babel+core@7.17.12 + '@babel/plugin-transform-reserved-words': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-sticky-regex': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-typeof-symbol': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-unicode-escapes': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-unicode-regex': 7.16.7_@babel+core@7.17.12 + '@babel/preset-modules': 0.1.5_@babel+core@7.17.12 + '@babel/types': 7.17.12 + babel-plugin-polyfill-corejs2: 0.3.1_@babel+core@7.17.12 + babel-plugin-polyfill-corejs3: 0.5.2_@babel+core@7.17.12 + babel-plugin-polyfill-regenerator: 0.3.1_@babel+core@7.17.12 core-js-compat: 3.22.2 semver: 6.3.0 transitivePeerDependencies: @@ -4793,7 +3762,7 @@ packages: '@babel/plugin-transform-flow-strip-types': 7.16.7 dev: true - /@babel/preset-flow/7.16.7_@babel+core@7.17.10: + /@babel/preset-flow/7.16.7_@babel+core@7.17.12: resolution: {integrity: sha512-6ceP7IyZdUYQ3wUVqyRSQXztd1YmFHWI4Xv11MIqAlE4WqxBSd/FZ61V9k+TS5Gd4mkHOtQtPp9ymRpxH4y1Ug==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4802,29 +3771,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-transform-flow-strip-types': 7.16.7_@babel+core@7.17.10 - dev: true - - /@babel/preset-modules/0.1.5_@babel+core@7.17.10: - resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.10 - '@babel/types': 7.17.10 - esutils: 2.0.3 + '@babel/plugin-transform-flow-strip-types': 7.16.7_@babel+core@7.17.12 dev: true - /@babel/preset-modules/0.1.5_@babel+core@7.17.9: + /@babel/preset-modules/0.1.5_@babel+core@7.17.12: resolution: {integrity: sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4832,11 +3785,11 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 - '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.9 - '@babel/types': 7.17.10 + '@babel/plugin-proposal-unicode-property-regex': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-dotall-regex': 7.16.7_@babel+core@7.17.12 + '@babel/types': 7.17.12 esutils: 2.0.3 dev: true @@ -4857,7 +3810,7 @@ packages: '@babel/plugin-transform-react-pure-annotations': 7.16.7 dev: true - /@babel/preset-react/7.16.7_@babel+core@7.17.10: + /@babel/preset-react/7.16.7_@babel+core@7.17.12: resolution: {integrity: sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4866,13 +3819,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-transform-react-display-name': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 - '@babel/plugin-transform-react-jsx-development': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-react-pure-annotations': 7.16.7_@babel+core@7.17.10 + '@babel/plugin-transform-react-display-name': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.12 + '@babel/plugin-transform-react-jsx-development': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-react-pure-annotations': 7.16.7_@babel+core@7.17.12 dev: true /@babel/preset-react/7.16.7_@babel+core@7.17.9: @@ -4893,24 +3846,7 @@ packages: '@babel/plugin-transform-react-pure-annotations': 7.16.7_@babel+core@7.17.9 dev: true - /@babel/preset-typescript/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/preset-typescript/7.16.7_@babel+core@7.17.9: + /@babel/preset-typescript/7.16.7_@babel+core@7.17.12: resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4919,15 +3855,15 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 '@babel/helper-plugin-utils': 7.16.7 '@babel/helper-validator-option': 7.16.7 - '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.17.9 + '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.17.12 transitivePeerDependencies: - supports-color dev: true - /@babel/register/7.17.7_@babel+core@7.17.9: + /@babel/register/7.17.7_@babel+core@7.17.12: resolution: {integrity: sha512-fg56SwvXRifootQEDQAu1mKdjh5uthPzdO0N6t358FktfL4XjAVXuH58ULoiW8mesxiOgNIrxiImqEwv0+hRRA==} engines: {node: '>=6.9.0'} peerDependencies: @@ -4936,7 +3872,7 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -4976,44 +3912,43 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.16.7 - '@babel/parser': 7.17.10 - '@babel/types': 7.17.0 + '@babel/parser': 7.17.12 + '@babel/types': 7.17.12 - /@babel/traverse/7.16.10: - resolution: {integrity: sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==} + /@babel/traverse/7.17.10: + resolution: {integrity: sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.16.7 - '@babel/generator': 7.16.8 + '@babel/generator': 7.17.10 '@babel/helper-environment-visitor': 7.16.7 - '@babel/helper-function-name': 7.16.7 + '@babel/helper-function-name': 7.17.9 '@babel/helper-hoist-variables': 7.16.7 '@babel/helper-split-export-declaration': 7.16.7 - '@babel/parser': 7.16.12 - '@babel/types': 7.16.8 - debug: 4.3.3 + '@babel/parser': 7.17.10 + '@babel/types': 7.17.10 + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: false + dev: true - /@babel/traverse/7.17.10: - resolution: {integrity: sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==} + /@babel/traverse/7.17.12: + resolution: {integrity: sha512-zULPs+TbCvOkIFd4FrG53xrpxvCBwLIgo6tO0tJorY7YV2IWFxUfS/lXDJbGgfyYt9ery/Gxj2niwttNnB0gIw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.16.7 - '@babel/generator': 7.17.10 + '@babel/generator': 7.17.12 '@babel/helper-environment-visitor': 7.16.7 '@babel/helper-function-name': 7.17.9 '@babel/helper-hoist-variables': 7.16.7 '@babel/helper-split-export-declaration': 7.16.7 - '@babel/parser': 7.17.10 - '@babel/types': 7.17.10 + '@babel/parser': 7.17.12 + '@babel/types': 7.17.12 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true /@babel/traverse/7.17.9: resolution: {integrity: sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==} @@ -5033,22 +3968,24 @@ packages: - supports-color dev: true - /@babel/types/7.16.8: - resolution: {integrity: sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==} + /@babel/types/7.17.0: + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.16.7 to-fast-properties: 2.0.0 + dev: true - /@babel/types/7.17.0: - resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} + /@babel/types/7.17.10: + resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.16.7 to-fast-properties: 2.0.0 + dev: true - /@babel/types/7.17.10: - resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==} + /@babel/types/7.17.12: + resolution: {integrity: sha512-rH8i29wcZ6x9xjzI5ILHL/yZkbQnCERdHlogKuIb4PUr7do4iT8DPekrTbBLWTnRQm6U0GYABbTMSzijmEqlAg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.16.7 @@ -5306,193 +4243,193 @@ packages: dev: true optional: true - /@commitlint/cli/16.2.4_@swc+core@1.2.177: - resolution: {integrity: sha512-rbvqvz9JI+uiKxV2nH65BtSU01fsADd3bxe9fWtO3rM0c+CI/H9FfzKkDLvSRmXjvk1G2/wXlCGeqO9IBT4X9g==} - engines: {node: '>=v12'} + /@commitlint/cli/17.0.0_@swc+core@1.2.177: + resolution: {integrity: sha512-Np6slCdVVG1XwMvwbZrXIzS1INPAD5QmN4L6al04AmCd4nAPU63gxgxC5Mz0Fmx7va23Uvb0S7yEFV1JPhvPUQ==} + engines: {node: '>=v14'} hasBin: true dependencies: - '@commitlint/format': 16.2.1 - '@commitlint/lint': 16.2.4 - '@commitlint/load': 16.2.4_@swc+core@1.2.177 - '@commitlint/read': 16.2.1 - '@commitlint/types': 16.2.1 + '@commitlint/format': 17.0.0 + '@commitlint/lint': 17.0.0 + '@commitlint/load': 17.0.0_@swc+core@1.2.177 + '@commitlint/read': 17.0.0 + '@commitlint/types': 17.0.0 lodash: 4.17.21 resolve-from: 5.0.0 resolve-global: 1.0.0 - yargs: 17.4.1 + yargs: 17.5.1 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /@commitlint/config-conventional/16.2.4: - resolution: {integrity: sha512-av2UQJa3CuE5P0dzxj/o/B9XVALqYzEViHrMXtDrW9iuflrqCStWBAioijppj9URyz6ONpohJKAtSdgAOE0gkA==} - engines: {node: '>=v12'} + /@commitlint/config-conventional/17.0.0: + resolution: {integrity: sha512-jttJXBIq3AuQCvUVwxSctCwKfHxxbALE0IB9OIHYCu/eQdOzPxN72pugeZsWDo1VK/T9iFx+MZoPb6Rb1/ylsw==} + engines: {node: '>=v14'} dependencies: conventional-changelog-conventionalcommits: 4.6.3 dev: true - /@commitlint/config-validator/16.2.1: - resolution: {integrity: sha512-hogSe0WGg7CKmp4IfNbdNES3Rq3UEI4XRPB8JL4EPgo/ORq5nrGTVzxJh78omibNuB8Ho4501Czb1Er1MoDWpw==} - engines: {node: '>=v12'} + /@commitlint/config-validator/17.0.0: + resolution: {integrity: sha512-78IQjoZWR4kDHp/U5y17euEWzswJpPkA9TDL5F6oZZZaLIEreWzrDZD5PWtM8MsSRl/K2LDU/UrzYju2bKLMpA==} + engines: {node: '>=v14'} dependencies: - '@commitlint/types': 16.2.1 + '@commitlint/types': 17.0.0 ajv: 6.12.6 dev: true - /@commitlint/ensure/16.2.1: - resolution: {integrity: sha512-/h+lBTgf1r5fhbDNHOViLuej38i3rZqTQnBTk+xEg+ehOwQDXUuissQ5GsYXXqI5uGy+261ew++sT4EA3uBJ+A==} - engines: {node: '>=v12'} + /@commitlint/ensure/17.0.0: + resolution: {integrity: sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==} + engines: {node: '>=v14'} dependencies: - '@commitlint/types': 16.2.1 + '@commitlint/types': 17.0.0 lodash: 4.17.21 dev: true - /@commitlint/execute-rule/16.2.1: - resolution: {integrity: sha512-oSls82fmUTLM6cl5V3epdVo4gHhbmBFvCvQGHBRdQ50H/690Uq1Dyd7hXMuKITCIdcnr9umyDkr8r5C6HZDF3g==} - engines: {node: '>=v12'} + /@commitlint/execute-rule/17.0.0: + resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} + engines: {node: '>=v14'} dev: true - /@commitlint/format/16.2.1: - resolution: {integrity: sha512-Yyio9bdHWmNDRlEJrxHKglamIk3d6hC0NkEUW6Ti6ipEh2g0BAhy8Od6t4vLhdZRa1I2n+gY13foy+tUgk0i1Q==} - engines: {node: '>=v12'} + /@commitlint/format/17.0.0: + resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} + engines: {node: '>=v14'} dependencies: - '@commitlint/types': 16.2.1 + '@commitlint/types': 17.0.0 chalk: 4.1.2 dev: true - /@commitlint/is-ignored/16.2.4: - resolution: {integrity: sha512-Lxdq9aOAYCOOOjKi58ulbwK/oBiiKz+7Sq0+/SpFIEFwhHkIVugvDvWjh2VRBXmRC/x5lNcjDcYEwS/uYUvlYQ==} - engines: {node: '>=v12'} + /@commitlint/is-ignored/17.0.0: + resolution: {integrity: sha512-UmacD0XM/wWykgdXn5CEWVS4XGuqzU+ZGvM2hwv85+SXGnIOaG88XHrt81u37ZeVt1riWW+YdOxcJW6+nd5v5w==} + engines: {node: '>=v14'} dependencies: - '@commitlint/types': 16.2.1 + '@commitlint/types': 17.0.0 semver: 7.3.7 dev: true - /@commitlint/lint/16.2.4: - resolution: {integrity: sha512-AUDuwOxb2eGqsXbTMON3imUGkc1jRdtXrbbohiLSCSk3jFVXgJLTMaEcr39pR00N8nE9uZ+V2sYaiILByZVmxQ==} - engines: {node: '>=v12'} + /@commitlint/lint/17.0.0: + resolution: {integrity: sha512-5FL7VLvGJQby24q0pd4UdM8FNFcL+ER1T/UBf8A9KRL5+QXV1Rkl6Zhcl7+SGpGlVo6Yo0pm6aLW716LVKWLGg==} + engines: {node: '>=v14'} dependencies: - '@commitlint/is-ignored': 16.2.4 - '@commitlint/parse': 16.2.1 - '@commitlint/rules': 16.2.4 - '@commitlint/types': 16.2.1 + '@commitlint/is-ignored': 17.0.0 + '@commitlint/parse': 17.0.0 + '@commitlint/rules': 17.0.0 + '@commitlint/types': 17.0.0 dev: true - /@commitlint/load/16.2.4_@swc+core@1.2.177: - resolution: {integrity: sha512-HjANm3/29ROV+zt4yfaY/K6gpr9Dbzgtlp0kSwZGW0poDXlD/yqVYgPQ6JolJzZii5FUz5R4yVLC15hVL/w60w==} - engines: {node: '>=v12'} + /@commitlint/load/17.0.0_@swc+core@1.2.177: + resolution: {integrity: sha512-XaiHF4yWQOPAI0O6wXvk+NYLtJn/Xb7jgZEeKd4C1ZWd7vR7u8z5h0PkWxSr0uLZGQsElGxv3fiZ32C5+q6M8w==} + engines: {node: '>=v14'} dependencies: - '@commitlint/config-validator': 16.2.1 - '@commitlint/execute-rule': 16.2.1 - '@commitlint/resolve-extends': 16.2.1 - '@commitlint/types': 16.2.1 - '@types/node': 17.0.31 + '@commitlint/config-validator': 17.0.0 + '@commitlint/execute-rule': 17.0.0 + '@commitlint/resolve-extends': 17.0.0 + '@commitlint/types': 17.0.0 + '@types/node': 17.0.34 chalk: 4.1.2 cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 1.0.9_ghcombcbpherolfxll753x4zfy + cosmiconfig-typescript-loader: 2.0.0_irygwokje3xcg7hcy4cl5oqrma lodash: 4.17.21 resolve-from: 5.0.0 - typescript: 4.6.3 + typescript: 4.6.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /@commitlint/message/16.2.1: - resolution: {integrity: sha512-2eWX/47rftViYg7a3axYDdrgwKv32mxbycBJT6OQY/MJM7SUfYNYYvbMFOQFaA4xIVZt7t2Alyqslbl6blVwWw==} - engines: {node: '>=v12'} + /@commitlint/message/17.0.0: + resolution: {integrity: sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==} + engines: {node: '>=v14'} dev: true - /@commitlint/parse/16.2.1: - resolution: {integrity: sha512-2NP2dDQNL378VZYioLrgGVZhWdnJO4nAxQl5LXwYb08nEcN+cgxHN1dJV8OLJ5uxlGJtDeR8UZZ1mnQ1gSAD/g==} - engines: {node: '>=v12'} + /@commitlint/parse/17.0.0: + resolution: {integrity: sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==} + engines: {node: '>=v14'} dependencies: - '@commitlint/types': 16.2.1 + '@commitlint/types': 17.0.0 conventional-changelog-angular: 5.0.13 conventional-commits-parser: 3.2.4 dev: true - /@commitlint/read/16.2.1: - resolution: {integrity: sha512-tViXGuaxLTrw2r7PiYMQOFA2fueZxnnt0lkOWqKyxT+n2XdEMGYcI9ID5ndJKXnfPGPppD0w/IItKsIXlZ+alw==} - engines: {node: '>=v12'} + /@commitlint/read/17.0.0: + resolution: {integrity: sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==} + engines: {node: '>=v14'} dependencies: - '@commitlint/top-level': 16.2.1 - '@commitlint/types': 16.2.1 + '@commitlint/top-level': 17.0.0 + '@commitlint/types': 17.0.0 fs-extra: 10.1.0 git-raw-commits: 2.0.11 dev: true - /@commitlint/resolve-extends/16.2.1: - resolution: {integrity: sha512-NbbCMPKTFf2J805kwfP9EO+vV+XvnaHRcBy6ud5dF35dxMsvdJqke54W3XazXF1ZAxC4a3LBy4i/GNVBAthsEg==} - engines: {node: '>=v12'} + /@commitlint/resolve-extends/17.0.0: + resolution: {integrity: sha512-wi60WiJmwaQ7lzMXK8Vbc18Hq9tE2j/6iv2AFfPUGV7fvfY6Sf1iNKuUHirSqR0fquUyufIXe4y/K9A6LVIIvw==} + engines: {node: '>=v14'} dependencies: - '@commitlint/config-validator': 16.2.1 - '@commitlint/types': 16.2.1 + '@commitlint/config-validator': 17.0.0 + '@commitlint/types': 17.0.0 import-fresh: 3.3.0 lodash: 4.17.21 resolve-from: 5.0.0 resolve-global: 1.0.0 dev: true - /@commitlint/rules/16.2.4: - resolution: {integrity: sha512-rK5rNBIN2ZQNQK+I6trRPK3dWa0MtaTN4xnwOma1qxa4d5wQMQJtScwTZjTJeallFxhOgbNOgr48AMHkdounVg==} - engines: {node: '>=v12'} + /@commitlint/rules/17.0.0: + resolution: {integrity: sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==} + engines: {node: '>=v14'} dependencies: - '@commitlint/ensure': 16.2.1 - '@commitlint/message': 16.2.1 - '@commitlint/to-lines': 16.2.1 - '@commitlint/types': 16.2.1 + '@commitlint/ensure': 17.0.0 + '@commitlint/message': 17.0.0 + '@commitlint/to-lines': 17.0.0 + '@commitlint/types': 17.0.0 execa: 5.1.1 dev: true - /@commitlint/to-lines/16.2.1: - resolution: {integrity: sha512-9/VjpYj5j1QeY3eiog1zQWY6axsdWAc0AonUUfyZ7B0MVcRI0R56YsHAfzF6uK/g/WwPZaoe4Lb1QCyDVnpVaQ==} - engines: {node: '>=v12'} + /@commitlint/to-lines/17.0.0: + resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} + engines: {node: '>=v14'} dev: true - /@commitlint/top-level/16.2.1: - resolution: {integrity: sha512-lS6GSieHW9y6ePL73ied71Z9bOKyK+Ib9hTkRsB8oZFAyQZcyRwq2w6nIa6Fngir1QW51oKzzaXfJL94qwImyw==} - engines: {node: '>=v12'} + /@commitlint/top-level/17.0.0: + resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} + engines: {node: '>=v14'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types/16.2.1: - resolution: {integrity: sha512-7/z7pA7BM0i8XvMSBynO7xsB3mVQPUZbVn6zMIlp/a091XJ3qAXRXc+HwLYhiIdzzS5fuxxNIHZMGHVD4HJxdA==} - engines: {node: '>=v12'} + /@commitlint/types/17.0.0: + resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} + engines: {node: '>=v14'} dependencies: chalk: 4.1.2 dev: true - /@cspell/cspell-bundled-dicts/5.20.0: - resolution: {integrity: sha512-tCO32xVSuey4Tg8XuayBzcrCAfrAXL8J1PeYl26+/ZUl5zkAL4AuyL0Cf4e2PpeEomnUWP2y5noZLLbUeOIwnw==} + /@cspell/cspell-bundled-dicts/5.21.0: + resolution: {integrity: sha512-pPL7EEWyeVnhyKbIHuGP0uGJy7ixzCrr1MIAM57CcyFuIKL0ewFvn4fdIyLoOzKtujfbreY5+BWVLsILMpZ70A==} engines: {node: '>=12.13.0'} dependencies: '@cspell/dict-ada': 2.0.0 '@cspell/dict-aws': 2.0.0 '@cspell/dict-bash': 2.0.2 '@cspell/dict-companies': 2.0.4 - '@cspell/dict-cpp': 2.0.3 + '@cspell/dict-cpp': 3.0.1 '@cspell/dict-cryptocurrencies': 2.0.0 - '@cspell/dict-csharp': 2.0.1 + '@cspell/dict-csharp': 3.0.1 '@cspell/dict-css': 2.0.0 '@cspell/dict-dart': 1.1.0 '@cspell/dict-django': 2.0.0 '@cspell/dict-dotnet': 2.0.1 '@cspell/dict-elixir': 2.0.1 - '@cspell/dict-en_us': 2.2.3 + '@cspell/dict-en_us': 2.2.5 '@cspell/dict-en-gb': 1.1.33 '@cspell/dict-filetypes': 2.0.1 '@cspell/dict-fonts': 2.0.0 '@cspell/dict-fullstack': 2.0.5 '@cspell/dict-git': 1.0.1 - '@cspell/dict-golang': 2.0.0 + '@cspell/dict-golang': 3.0.1 '@cspell/dict-haskell': 2.0.0 '@cspell/dict-html': 3.0.1 - '@cspell/dict-html-symbol-entities': 2.0.0 + '@cspell/dict-html-symbol-entities': 3.0.0 '@cspell/dict-java': 2.0.0 - '@cspell/dict-latex': 2.0.0 + '@cspell/dict-latex': 2.0.2 '@cspell/dict-lorem-ipsum': 2.0.0 '@cspell/dict-lua': 2.0.0 '@cspell/dict-node': 2.0.1 @@ -5505,19 +4442,19 @@ packages: '@cspell/dict-ruby': 2.0.1 '@cspell/dict-rust': 2.0.0 '@cspell/dict-scala': 2.0.0 - '@cspell/dict-software-terms': 2.1.5 + '@cspell/dict-software-terms': 2.1.7 '@cspell/dict-swift': 1.0.2 '@cspell/dict-typescript': 2.0.0 '@cspell/dict-vue': 2.0.2 dev: true - /@cspell/cspell-pipe/5.20.0: - resolution: {integrity: sha512-dGHf4XZgPlGqviYTD+5ZwSk3hpiywsuuDqnoPo9SeQ1xPon7uFVKsMiAAzvhGAkkBaKIBNP/nwPU0feYvLoCJg==} + /@cspell/cspell-pipe/5.21.0: + resolution: {integrity: sha512-7Y+cjXU1JUxWy+oXUYpb3KzC21IC4YZDWLLkRCZE2tL2QGzr3JKtHtKVJf7nMSnIFMJqmZSV2RRCjqijifTJrw==} engines: {node: '>=12.13.0'} dev: true - /@cspell/cspell-types/5.20.0: - resolution: {integrity: sha512-p06/HAKgalqyGHfnowJvjO3SQHxuOzKdiJTUlUi8x1CrEk7PmZEHuORlt9tVVZ46Xf2qY9+QLeTtattlWPJ39A==} + /@cspell/cspell-types/5.21.0: + resolution: {integrity: sha512-B0WT5Yl3T9CI0ShzZCq3ZX57ZnVI/CcxuDBk5jnevCGW8dfQGLEmpDRuZqFwGargDEjJX2GgTPnNdXp4OHmCDg==} engines: {node: '>=12.13.0'} dev: true @@ -5537,16 +4474,16 @@ packages: resolution: {integrity: sha512-nLNVddo+iu4q/Mu03nkVTMnSPxBkoLyZ0MgpHJZWCqxVATbBkzoZNNNjsTkJhvkbrUIWydf8YW4U4wYY+kyh7Q==} dev: true - /@cspell/dict-cpp/2.0.3: - resolution: {integrity: sha512-aWRvI3CQW2M3XeJpDVffItw/9n4hxsN5EPwyBa6Po6EnCxZZZLOqpieZk4JNz4pH0/xbnOX+sMMuSeKWr71r/w==} + /@cspell/dict-cpp/3.0.1: + resolution: {integrity: sha512-mWBRdbO/ZDXMf18ntp9EpKsoAW1/gIP1FJ6zVTwEQZHYyjKqbMCDZy1rtNGuZ5hS1XPpvY23s4l2xe6GrfDgHw==} dev: true /@cspell/dict-cryptocurrencies/2.0.0: resolution: {integrity: sha512-nREysmmfOp7L2YCRAUufQahwD5/Punzb5AZ6eyg4zUamdRWHgBFphb5/9h2flt1vgdUfhc6hZcML21Ci7iXjaA==} dev: true - /@cspell/dict-csharp/2.0.1: - resolution: {integrity: sha512-ZzAr+WRP2FUtXHZtfhe8f3j9vPjH+5i44Hcr5JqbWxmqciGoTbWBPQXwu9y+J4mbdC69HSWRrVGkNJ8rQk8pSw==} + /@cspell/dict-csharp/3.0.1: + resolution: {integrity: sha512-xkfQu03F388w4sdVQSSjrVMkxAxpTYB2yW7nw0XYtTjl3L/jBgvTr/j1BTjdFbQhdNf10Lg0Ak1kXOjmHodVqA==} dev: true /@cspell/dict-css/2.0.0: @@ -5573,8 +4510,8 @@ packages: resolution: {integrity: sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==} dev: true - /@cspell/dict-en_us/2.2.3: - resolution: {integrity: sha512-JV+aD4mzTcF0T3sZB/PC91ByLqtKIxz21xLQNq0ZGM+cK+EbMLqfKTYjB72WkLZtqkjsPhQ2Bv5JtIlLCCXDIw==} + /@cspell/dict-en_us/2.2.5: + resolution: {integrity: sha512-gRHem02ZY83AQUTYBxtiVNmtM6gWFCJKumRoAKLj7vWYelmNLcCBsMA3BOOOJ7cZNKCI04lDEdh0u2f2akKZtQ==} dev: true /@cspell/dict-filetypes/2.0.1: @@ -5593,16 +4530,16 @@ packages: resolution: {integrity: sha512-Rk+eTof/9inF11lvxmkCRK+gODatA3qai8kSASv6OG/JfPvpj7fTHErx/rdgPw/LOTDUafnoTjTYmj7B2MOQXg==} dev: true - /@cspell/dict-golang/2.0.0: - resolution: {integrity: sha512-rUeZJR/S/ZjAsOURtxsAO6xDQhL0IzF458ScahaeOqe0zVL3tx7tCLikCgT92NWPs3BNqmsZGqYSDbn/1KsSIA==} + /@cspell/dict-golang/3.0.1: + resolution: {integrity: sha512-0KNfXTbxHW2l8iVjxeOf+KFv9Qrw3z5cyKnkuYJWlBTSB5KcUBfeKCb4fsds26VdANqiy6U91b4gDx5kNEmBjQ==} dev: true /@cspell/dict-haskell/2.0.0: resolution: {integrity: sha512-cjX1Br+gSWqtcmJD/IMHz1UoP3pUaKIIKy/JfhEs7ANtRt6hhfEKe9dl2kQzDkkKt4pXol+YgdYxL/sVc/nLgQ==} dev: true - /@cspell/dict-html-symbol-entities/2.0.0: - resolution: {integrity: sha512-71S5wGCe7dq6C+zGDwsEAe5msub/irrLi6SExeG11a/EkpA3RKAEheDGPk0hOY4+vOcIFHaApxOjLTtgQfYWfA==} + /@cspell/dict-html-symbol-entities/3.0.0: + resolution: {integrity: sha512-04K7cPTcbYXmHICfiob4gZA1yaj4hpfM+Nl5WIJ1EAZsSGHdqmGEF28GuCjyQ8ZeKiJAsPt/vXuLBbjxkHqZyQ==} dev: true /@cspell/dict-html/3.0.1: @@ -5613,8 +4550,8 @@ packages: resolution: {integrity: sha512-9f5LDATlAiXRGqxLxgqbOLlQxuMW2zcN7tBgxwtN+4u90vM03ZUOR/gKIuDV/y0ZuAiWBIjA73cjk8DJ13Q1eA==} dev: true - /@cspell/dict-latex/2.0.0: - resolution: {integrity: sha512-H6RRwbHhQ9ARoO1R57SDqB+q/J5jUDdVnkdfukJkA+HNlJBhCcDuzGOIJqr+GBkJYDkF3obZ3LEOk2lUfT+Eyg==} + /@cspell/dict-latex/2.0.2: + resolution: {integrity: sha512-4tjuaieh5NJsYLco45lWu9SRT5H61aC1vtUNKS0+bpA+JaRJYvlpv/wAsq5HB0I9Iz17XHATDvX1zkp3QJ89gw==} dev: true /@cspell/dict-lorem-ipsum/2.0.0: @@ -5665,8 +4602,8 @@ packages: resolution: {integrity: sha512-MUwA2YKpqaQOSR4V1/CVGRNk8Ii5kf6I8Ch+4/BhRZRQXuwWbi21rDRYWPqdQWps7VNzAbbMA+PQDWsD5YY38g==} dev: true - /@cspell/dict-software-terms/2.1.5: - resolution: {integrity: sha512-ylXWCsOJlYuucaMoHaHQLVaB8HeDrsCZ42a3jrTC/i6F/SF9I+4tBg4lMivd4w31bXBgILdbIvVHtWzJf+5m0A==} + /@cspell/dict-software-terms/2.1.7: + resolution: {integrity: sha512-2FW5MlbazmWPFHzMh2xKYFcYnX+E5MdOPRrfYkbVXvWecA0466l54V+op2zlh1CbngMk4eY7AY3qahfWv6gDHA==} dev: true /@cspell/dict-swift/1.0.2: @@ -5711,52 +4648,52 @@ packages: - encoding dev: false - /@date-io/core/2.13.1: - resolution: {integrity: sha512-pVI9nfkf2qClb2Cxdq0Q4zJhdawMG4ybWZUVGifT78FDwzRMX2SwXBb55s5NRJk0HcIicDuxktmCtemZqMH1Zg==} + /@date-io/core/2.14.0: + resolution: {integrity: sha512-qFN64hiFjmlDHJhu+9xMkdfDG2jLsggNxKXglnekUpXSq8faiqZgtHm2lsHCUuaPDTV6wuXHcCl8J1GQ5wLmPw==} dev: false - /@date-io/date-fns/2.13.1: - resolution: {integrity: sha512-8fmfwjiLMpFLD+t4NBwDx0eblWnNcgt4NgfT/uiiQTGI81fnPu9tpBMYdAcuWxaV7LLpXgzLBx1SYWAMDVUDQQ==} + /@date-io/date-fns/2.14.0: + resolution: {integrity: sha512-4fJctdVyOd5cKIKGaWUM+s3MUXMuzkZaHuTY15PH70kU1YTMrCoauA7hgQVx9qj0ZEbGrH9VSPYJYnYro7nKiA==} peerDependencies: date-fns: ^2.0.0 peerDependenciesMeta: date-fns: optional: true dependencies: - '@date-io/core': 2.13.1 + '@date-io/core': 2.14.0 dev: false - /@date-io/dayjs/2.13.1: - resolution: {integrity: sha512-5bL4WWWmlI4uGZVScANhHJV7Mjp93ec2gNeUHDqqLaMZhp51S0NgD25oqj/k0LqBn1cdU2MvzNpk/ObMmVv5cQ==} + /@date-io/dayjs/2.14.0: + resolution: {integrity: sha512-4fRvNWaOh7AjvOyJ4h6FYMS7VHLQnIEeAV5ahv6sKYWx+1g1UwYup8h7+gPuoF+sW2hTScxi7PVaba2Jk/U8Og==} peerDependencies: dayjs: ^1.8.17 peerDependenciesMeta: dayjs: optional: true dependencies: - '@date-io/core': 2.13.1 + '@date-io/core': 2.14.0 dev: false - /@date-io/luxon/2.13.1: - resolution: {integrity: sha512-yG+uM7lXfwLyKKEwjvP8oZ7qblpmfl9gxQYae55ifbwiTs0CoCTkYkxEaQHGkYtTqGTzLqcb0O9Pzx6vgWg+yg==} + /@date-io/luxon/2.14.0: + resolution: {integrity: sha512-KmpBKkQFJ/YwZgVd0T3h+br/O0uL9ZdE7mn903VPAG2ZZncEmaUfUdYKFT7v7GyIKJ4KzCp379CRthEbxevEVg==} peerDependencies: luxon: ^1.21.3 || ^2.x peerDependenciesMeta: luxon: optional: true dependencies: - '@date-io/core': 2.13.1 + '@date-io/core': 2.14.0 dev: false - /@date-io/moment/2.13.1: - resolution: {integrity: sha512-XX1X/Tlvl3TdqQy2j0ZUtEJV6Rl8tOyc5WOS3ki52He28Uzme4Ro/JuPWTMBDH63weSWIZDlbR7zBgp3ZA2y1A==} + /@date-io/moment/2.14.0: + resolution: {integrity: sha512-VsoLXs94GsZ49ecWuvFbsa081zEv2xxG7d+izJsqGa2L8RPZLlwk27ANh87+SNnOUpp+qy2AoCAf0mx4XXhioA==} peerDependencies: moment: ^2.24.0 peerDependenciesMeta: moment: optional: true dependencies: - '@date-io/core': 2.13.1 + '@date-io/core': 2.14.0 dev: false /@dimensiondev/common-protocols/1.6.0-20210723072221-8f46a92: @@ -5767,6 +4704,7 @@ packages: /@dimensiondev/eslint-plugin/0.0.2-20220516081411-2649814_eslint@8.15.0: resolution: {integrity: sha512-cEEKTD1ku7ScTuifqrZHAXpc8a1hwew12MLee/jvFEdOkoQSDxYiqAh7V35wQLGappUUyqJiLc6vgk6qlpzQeA==, tarball: download/@dimensiondev/eslint-plugin/0.0.2-20220516081411-2649814/f8750f35c321553cee686b564cea6d4c5dffe62eaab4af3ab64a6392d8e4743b} + engines: {node: '>= 16'} peerDependencies: eslint: '>= 8' dependencies: @@ -6783,12 +5721,12 @@ packages: '@hapi/hoek': 9.2.1 dev: false - /@hookform/resolvers/2.8.8_react-hook-form@7.30.0: - resolution: {integrity: sha512-meAEDur1IJBfKyTo9yPYAuzjIfrxA7m9Ov+1nxaW/YupsqMeseWifoUjWK03+hz/RJizsVQAaUjVxFEkyu0GWg==} + /@hookform/resolvers/2.8.10_react-hook-form@7.31.1: + resolution: {integrity: sha512-DDFtNlugsbwAhCJHYp3NcN5LvJrwSsCLPi41Wo5O8UAIbUFnBfY/jW+zKnlX57BZ4jE0j/g6R9rB3JlO89ad0g==} peerDependencies: react-hook-form: ^7.0.0 dependencies: - react-hook-form: 7.30.0 + react-hook-form: 7.31.1 dev: false /@humanwhocodes/config-array/0.9.5: @@ -6864,7 +5802,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 chalk: 4.1.2 jest-message-util: 28.1.0 jest-util: 28.1.0 @@ -6885,14 +5823,14 @@ packages: '@jest/test-result': 28.1.0 '@jest/transform': 28.1.0 '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.3.0 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 28.0.2 - jest-config: 28.1.0_6llz3imlg24hiqj7rrwntziuoi + jest-config: 28.1.0_3sezc6gs5coetj25lugeybzyb4 jest-haste-map: 28.1.0 jest-message-util: 28.1.0 jest-regex-util: 28.0.2 @@ -6920,7 +5858,7 @@ packages: dependencies: '@jest/fake-timers': 28.1.0 '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 jest-mock: 28.1.0 dev: true @@ -6947,7 +5885,7 @@ packages: dependencies: '@jest/types': 28.1.0 '@sinonjs/fake-timers': 9.1.1 - '@types/node': 17.0.31 + '@types/node': 17.0.34 jest-message-util: 28.1.0 jest-mock: 28.1.0 jest-util: 28.1.0 @@ -6979,11 +5917,11 @@ packages: '@jest/transform': 28.1.0 '@jest/types': 28.1.0 '@jridgewell/trace-mapping': 0.3.9 - '@types/node': 17.0.31 + '@types/node': 17.0.34 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 - glob: 7.2.0 + glob: 7.2.3 graceful-fs: 4.2.10 istanbul-lib-coverage: 3.2.0 istanbul-lib-instrument: 5.1.0 @@ -7041,7 +5979,7 @@ packages: resolution: {integrity: sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==} engines: {node: '>= 10.14.2'} dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@jest/types': 26.6.2 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 @@ -7089,7 +6027,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/yargs': 15.0.14 chalk: 4.1.2 dev: true @@ -7101,7 +6039,7 @@ packages: '@jest/schemas': 28.0.2 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/yargs': 17.0.10 chalk: 4.1.2 dev: true @@ -7111,9 +6049,17 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.1.1 - '@jridgewell/sourcemap-codec': 1.4.11 + '@jridgewell/sourcemap-codec': 1.4.13 dev: true + /@jridgewell/gen-mapping/0.3.1: + resolution: {integrity: sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.1 + '@jridgewell/sourcemap-codec': 1.4.13 + '@jridgewell/trace-mapping': 0.3.13 + /@jridgewell/resolve-uri/3.0.5: resolution: {integrity: sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==} engines: {node: '>=6.0.0'} @@ -7124,15 +6070,27 @@ packages: engines: {node: '>=6.0.0'} dev: true + /@jridgewell/resolve-uri/3.0.7: + resolution: {integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==} + engines: {node: '>=6.0.0'} + /@jridgewell/set-array/1.1.1: resolution: {integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==} engines: {node: '>=6.0.0'} - dev: true /@jridgewell/sourcemap-codec/1.4.11: resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} dev: true + /@jridgewell/sourcemap-codec/1.4.13: + resolution: {integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==} + + /@jridgewell/trace-mapping/0.3.13: + resolution: {integrity: sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==} + dependencies: + '@jridgewell/resolve-uri': 3.0.7 + '@jridgewell/sourcemap-codec': 1.4.13 + /@jridgewell/trace-mapping/0.3.4: resolution: {integrity: sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==} dependencies: @@ -7382,8 +6340,8 @@ packages: engines: {node: '>= 10'} dev: false - /@mui/base/5.0.0-alpha.79_ohobp6rpsmerwlq5ipwfh5yigy: - resolution: {integrity: sha512-/lZLF027BkiEjM8MIYoeS/FEhTKf+41ePU9SOijMGrCin1Y0Igucw+IHa1fF8HXD7wDbFKqHuso3J1jMG8wyNw==} + /@mui/base/5.0.0-alpha.81_ohobp6rpsmerwlq5ipwfh5yigy: + resolution: {integrity: sha512-KJP+RdKBLSbhiAliy1b5xFuoAezawupfIHc/MRtEZdqAmUW0+UFNDXIUDlBKR9zLCjgjQ7eVJsSe0TwAgd8OMQ==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -7400,7 +6358,7 @@ packages: '@babel/runtime': 7.17.9 '@emotion/is-prop-valid': 1.1.2 '@mui/types': 7.1.3_@types+react@18.0.9 - '@mui/utils': 5.6.1_react@18.1.0 + '@mui/utils': 5.8.0_react@18.1.0 '@popperjs/core': 2.11.5 '@types/react': 18.0.9 clsx: 1.1.1 @@ -7410,8 +6368,8 @@ packages: react-is: 17.0.2 dev: false - /@mui/icons-material/5.6.2_bgi5kwlph7gi5zmorztz2chbuq: - resolution: {integrity: sha512-9QdI7axKuBAyaGz4mtdi7Uy1j73/thqFmEuxpJHxNC7O8ADEK1Da3t2veK2tgmsXsUlAHcAG63gg+GvWWeQNqQ==} + /@mui/icons-material/5.8.0_ar3vczqpton7uep5462l6mtgi4: + resolution: {integrity: sha512-ScwLxa0q5VYV70Jfc60V/9VD0b9SvIeZ0Jddx2Dt2pBUFFO9vKdrbt9LYiT+4p21Au5NdYIb2XSHj46CLN1v3g==} engines: {node: '>=12.0.0'} peerDependencies: '@mui/material': ^5.0.0 @@ -7426,13 +6384,13 @@ packages: optional: true dependencies: '@babel/runtime': 7.17.9 - '@mui/material': 5.6.4_4xriuibr7qayay6mzcpq5f43me + '@mui/material': 5.8.0_4xriuibr7qayay6mzcpq5f43me '@types/react': 18.0.9 react: 18.1.0 dev: false - /@mui/lab/5.0.0-alpha.80_wzmhkwmqqx52evdrbuaj25eek4: - resolution: {integrity: sha512-td5Ak0Hx+EzVN9MJqBlZJ6BKFGjTrHyNjXncjSHTvp8Z9p157AlOA/Sf7r+RyqyVzOzBfv4S37i9ShFTzSK61Q==} + /@mui/lab/5.0.0-alpha.82_ygk7qgdlnpugkmqdrmzyce476m: + resolution: {integrity: sha512-SUkHbMUVTmn+tqOjkRBNdX/wKS97rfvoOBMY6+QThJhTyIOym9ELcpKbEN7uf/UEPEnRNuqekLid5wHudS2cLw==} engines: {node: '>=12.0.0'} peerDependencies: '@mui/material': ^5.0.0 @@ -7462,11 +6420,11 @@ packages: optional: true dependencies: '@babel/runtime': 7.17.9 - '@mui/base': 5.0.0-alpha.79_ohobp6rpsmerwlq5ipwfh5yigy - '@mui/material': 5.6.4_4xriuibr7qayay6mzcpq5f43me - '@mui/system': 5.6.4_2f7y4c3dlygqpuszd3d43oslwi - '@mui/utils': 5.6.1_react@18.1.0 - '@mui/x-date-pickers': 5.0.0-alpha.0_6w7d4dctfrbbtfw4csfd2vfuh4 + '@mui/base': 5.0.0-alpha.81_ohobp6rpsmerwlq5ipwfh5yigy + '@mui/material': 5.8.0_4xriuibr7qayay6mzcpq5f43me + '@mui/system': 5.8.0_2f7y4c3dlygqpuszd3d43oslwi + '@mui/utils': 5.8.0_react@18.1.0 + '@mui/x-date-pickers': 5.0.0-alpha.0_o36hyyuuxy33zrbbujazrz54iu '@types/react': 18.0.9 clsx: 1.1.1 prop-types: 15.8.1 @@ -7480,8 +6438,8 @@ packages: - '@emotion/styled' dev: false - /@mui/material/5.6.4_4xriuibr7qayay6mzcpq5f43me: - resolution: {integrity: sha512-7TD+u/SExZK2a55w6reX56oPk37gKr/M/XGt156X+m0d9LhzOsW864nkErIX/H8oSkX/6kCimxu1FDsO+gjiVw==} + /@mui/material/5.8.0_4xriuibr7qayay6mzcpq5f43me: + resolution: {integrity: sha512-yvt3sUmUZ1i8SPadRYBCThcB57lBZsvyhC7ufVpRxA3AD39O+WXtXAapEfpDdDkJnnKb5MCimDMwBYgWLmY89Q==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -7504,14 +6462,14 @@ packages: '@babel/runtime': 7.17.9 '@emotion/react': 11.9.0_7cpxmzzodpxnolj5zcc5cr63ji '@emotion/styled': 11.8.1_ycz2ostpb5cpb2s3izz5qyhrbm - '@mui/base': 5.0.0-alpha.79_ohobp6rpsmerwlq5ipwfh5yigy - '@mui/system': 5.6.4_2f7y4c3dlygqpuszd3d43oslwi + '@mui/base': 5.0.0-alpha.81_ohobp6rpsmerwlq5ipwfh5yigy + '@mui/system': 5.8.0_2f7y4c3dlygqpuszd3d43oslwi '@mui/types': 7.1.3_@types+react@18.0.9 - '@mui/utils': 5.6.1_react@18.1.0 + '@mui/utils': 5.8.0_react@18.1.0 '@types/react': 18.0.9 '@types/react-transition-group': 4.4.4 clsx: 1.1.1 - csstype: 3.0.11 + csstype: 3.1.0 hoist-non-react-statics: 3.3.2 prop-types: 15.8.1 react: 18.1.0 @@ -7520,8 +6478,8 @@ packages: react-transition-group: 4.4.2_ef5jwxihqo6n7gxfmzogljlgcm dev: false - /@mui/private-theming/5.6.2_7cpxmzzodpxnolj5zcc5cr63ji: - resolution: {integrity: sha512-IbrSfFXfiZdyhRMC2bgGTFtb16RBQ5mccmjeh3MtAERWuepiCK7gkW5D9WhEsfTu6iez+TEjeUKSgmMHlsM2mg==} + /@mui/private-theming/5.8.0_7cpxmzzodpxnolj5zcc5cr63ji: + resolution: {integrity: sha512-MjRAneTmCKLR9u2S4jtjLUe6gpHxlbb4g2bqpDJ2PdwlvwsWIUzbc/gVB4dvccljXeWxr5G2M/Co2blXisvFIw==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -7533,14 +6491,14 @@ packages: optional: true dependencies: '@babel/runtime': 7.17.9 - '@mui/utils': 5.6.1_react@18.1.0 + '@mui/utils': 5.8.0_react@18.1.0 '@types/react': 18.0.9 prop-types: 15.8.1 react: 18.1.0 dev: false - /@mui/styled-engine/5.6.1_t4r7icl7x3elshpaxc4xm7jrem: - resolution: {integrity: sha512-jEhH6TBY8jc9S8yVncXmoTYTbATjEu44RMFXj6sIYfKr5NArVwTwRo3JexLL0t3BOAiYM4xsFLgfKEIvB9SAeQ==} + /@mui/styled-engine/5.8.0_t4r7icl7x3elshpaxc4xm7jrem: + resolution: {integrity: sha512-Q3spibB8/EgeMYHc+/o3RRTnAYkSl7ROCLhXJ830W8HZ2/iDiyYp16UcxKPurkXvLhUaILyofPVrP3Su2uKsAw==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.4.1 @@ -7562,8 +6520,8 @@ packages: react: 18.1.0 dev: false - /@mui/system/5.6.4_2f7y4c3dlygqpuszd3d43oslwi: - resolution: {integrity: sha512-7rsWED1wMFMePySJobsBerFZNu7ga580QSi3Zd6sJR8nVj12qD3yIdfvxA70/PxJ/805KbIT0GX7edKI+hpyhA==} + /@mui/system/5.8.0_2f7y4c3dlygqpuszd3d43oslwi: + resolution: {integrity: sha512-1tEj2S59RjlZ/6JMJMUktQDbV2ev7hyGXqO7dRRUQ7nOJi9qHmCFP0uXj3YS6LbM6hVasgYXJg8GBjbEtfTJvg==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -7583,13 +6541,13 @@ packages: '@babel/runtime': 7.17.9 '@emotion/react': 11.9.0_7cpxmzzodpxnolj5zcc5cr63ji '@emotion/styled': 11.8.1_ycz2ostpb5cpb2s3izz5qyhrbm - '@mui/private-theming': 5.6.2_7cpxmzzodpxnolj5zcc5cr63ji - '@mui/styled-engine': 5.6.1_t4r7icl7x3elshpaxc4xm7jrem + '@mui/private-theming': 5.8.0_7cpxmzzodpxnolj5zcc5cr63ji + '@mui/styled-engine': 5.8.0_t4r7icl7x3elshpaxc4xm7jrem '@mui/types': 7.1.3_@types+react@18.0.9 - '@mui/utils': 5.6.1_react@18.1.0 + '@mui/utils': 5.8.0_react@18.1.0 '@types/react': 18.0.9 clsx: 1.1.1 - csstype: 3.0.11 + csstype: 3.1.0 prop-types: 15.8.1 react: 18.1.0 dev: false @@ -7605,8 +6563,8 @@ packages: '@types/react': 18.0.9 dev: false - /@mui/utils/5.6.1_react@18.1.0: - resolution: {integrity: sha512-CPrzrkiBusCZBLWu0Sg5MJvR3fKJyK3gKecLVX012LULyqg2U64Oz04BKhfkbtBrPBbSQxM+DWW9B1c9hmV9nQ==} + /@mui/utils/5.8.0_react@18.1.0: + resolution: {integrity: sha512-7LgUtCvz78676iC0wpTH7HizMdCrTphhBmRWimIMFrp5Ph6JbDFVuKS1CwYnWWxRyYKL0QzXrDL0lptAU90EXg==} engines: {node: '>=12.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 || 18 @@ -7622,7 +6580,7 @@ packages: react-is: 17.0.2 dev: false - /@mui/x-date-pickers/5.0.0-alpha.0_6w7d4dctfrbbtfw4csfd2vfuh4: + /@mui/x-date-pickers/5.0.0-alpha.0_o36hyyuuxy33zrbbujazrz54iu: resolution: {integrity: sha512-JTzTaNSWbxNi8KDUJjHCH6im0YlIEv88gPoKhGm7s6xCGT1q6FtMp/oQ40nhfwrJ73nkM5G1JXRIzI/yfsHXQQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -7647,13 +6605,13 @@ packages: react: optional: true dependencies: - '@date-io/date-fns': 2.13.1 - '@date-io/dayjs': 2.13.1 - '@date-io/luxon': 2.13.1 - '@date-io/moment': 2.13.1 - '@mui/material': 5.6.4_4xriuibr7qayay6mzcpq5f43me - '@mui/system': 5.6.4_2f7y4c3dlygqpuszd3d43oslwi - '@mui/utils': 5.6.1_react@18.1.0 + '@date-io/date-fns': 2.14.0 + '@date-io/dayjs': 2.14.0 + '@date-io/luxon': 2.14.0 + '@date-io/moment': 2.14.0 + '@mui/material': 5.8.0_4xriuibr7qayay6mzcpq5f43me + '@mui/system': 5.8.0_2f7y4c3dlygqpuszd3d43oslwi + '@mui/utils': 5.8.0_react@18.1.0 clsx: 1.1.1 prop-types: 15.8.1 react: 18.1.0 @@ -7667,13 +6625,13 @@ packages: resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} dev: false - /@nice-labs/emit-file-webpack-plugin/1.1.2_webpack@5.72.0: + /@nice-labs/emit-file-webpack-plugin/1.1.2_webpack@5.72.1: resolution: {integrity: sha512-sa5df1UnX/Gej9C/jvLAF2u0rxZ5A0oPlwRHh3Y7Qdf+laHssT6AtAntsxKwRbEEZ1KZr9m90K5LTA7j59LtEw==} engines: {node: '>= 12'} peerDependencies: webpack: '>= 5' dependencies: - webpack: 5.72.0_webpack-cli@4.9.2 + webpack: 5.72.1_webpack-cli@4.9.2 dev: true /@nice-labs/git-rev/3.5.0: @@ -7862,8 +6820,8 @@ packages: webpack: 4.46.0 dev: true - /@pmmmwh/react-refresh-webpack-plugin/0.5.5_ffoope4bxc6zqgcasyqmdgdxky: - resolution: {integrity: sha512-RbG7h6TuP6nFFYKJwbcToA1rjC1FyPg25NR2noAZ0vKI+la01KTSRPkuVPE+U88jXv7javx2JHglUcL1MHcshQ==} + /@pmmmwh/react-refresh-webpack-plugin/0.5.6_dht25cu4po3ounlhlctzwihdn4: + resolution: {integrity: sha512-IIWxofIYt/AbMwoeBgj+O2aAXLrlCQVg+A4a2zfpXFNHgP8o8rvi3v+oe5t787Lj+KXlKOh8BAiUp9bhuELXhg==} engines: {node: '>= 10.13'} peerDependencies: '@types/webpack': 4.x || 5.x @@ -7890,7 +6848,7 @@ packages: dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 - core-js-pure: 3.21.1 + core-js-pure: 3.22.5 error-stack-parser: 2.0.7 find-up: 5.0.0 html-entities: 2.3.3 @@ -7898,8 +6856,8 @@ packages: react-refresh: 0.13.0 schema-utils: 3.1.1 source-map: 0.7.3 - webpack: 5.72.0_webpack-cli@4.9.2 - webpack-dev-server: 4.9.0_q7qo2wgeiyigo3znjsjh7f36ue + webpack: 5.72.1_webpack-cli@4.9.2 + webpack-dev-server: 4.9.0_smhu6mcfcg7aivfsuosc335k3u dev: true /@popperjs/core/2.11.5: @@ -7988,78 +6946,78 @@ packages: resolution: {integrity: sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==} dev: false - /@rollup/plugin-alias/3.1.9_rollup@2.72.0: + /@rollup/plugin-alias/3.1.9_rollup@2.73.0: resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} engines: {node: '>=8.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0 dependencies: - rollup: 2.72.0 + rollup: 2.73.0 slash: 3.0.0 dev: true - /@rollup/plugin-commonjs/22.0.0_rollup@2.72.0: + /@rollup/plugin-commonjs/22.0.0_rollup@2.73.0: resolution: {integrity: sha512-Ktvf2j+bAO+30awhbYoCaXpBcyPmJbaEUYClQns/+6SNCYFURbvBiNbWgHITEsIgDDWCDUclWRKEuf8cwZCFoQ==} engines: {node: '>= 12.0.0'} peerDependencies: rollup: ^2.68.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.72.0 + '@rollup/pluginutils': 3.1.0_rollup@2.73.0 commondir: 1.0.1 estree-walker: 2.0.2 glob: 7.2.0 is-reference: 1.2.1 magic-string: 0.25.9 resolve: 1.22.0 - rollup: 2.72.0 + rollup: 2.73.0 dev: true - /@rollup/plugin-json/4.1.0_rollup@2.72.0: + /@rollup/plugin-json/4.1.0_rollup@2.73.0: resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.72.0 - rollup: 2.72.0 + '@rollup/pluginutils': 3.1.0_rollup@2.73.0 + rollup: 2.73.0 dev: true - /@rollup/plugin-node-resolve/13.3.0_rollup@2.72.0: + /@rollup/plugin-node-resolve/13.3.0_rollup@2.73.0: resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^2.42.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.72.0 + '@rollup/pluginutils': 3.1.0_rollup@2.73.0 '@types/resolve': 1.17.1 deepmerge: 4.2.2 is-builtin-module: 3.1.0 is-module: 1.0.0 resolve: 1.22.0 - rollup: 2.72.0 + rollup: 2.73.0 dev: true - /@rollup/plugin-replace/4.0.0_rollup@2.72.0: + /@rollup/plugin-replace/4.0.0_rollup@2.73.0: resolution: {integrity: sha512-+rumQFiaNac9y64OHtkHGmdjm7us9bo1PlbgQfdihQtuNxzjpaB064HbRnewUOggLQxVCCyINfStkgmBeQpv1g==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.72.0 + '@rollup/pluginutils': 3.1.0_rollup@2.73.0 magic-string: 0.25.9 - rollup: 2.72.0 + rollup: 2.73.0 dev: true - /@rollup/plugin-sucrase/4.0.3_rollup@2.72.0: - resolution: {integrity: sha512-gZrjT985isK+EmHt3Dyr9z4JfO9IGuYkxck96yIyIUU9EKnZtDXUZ6ap5kvIdEnY8kLeiypiUEfK+/QtMIlA2A==} + /@rollup/plugin-sucrase/4.0.4_rollup@2.73.0: + resolution: {integrity: sha512-YH4J8yoJb5EVnLhAwWxYAQNh2SJOR+SdZ6XdgoKEv6Kxm33riYkM8MlMaggN87UoISP52qAFyZ5ey56wu6umGg==} engines: {node: '>=12.0.0'} peerDependencies: rollup: ^2.53.1 dependencies: '@rollup/pluginutils': 4.2.1 - rollup: 2.72.0 + rollup: 2.73.0 sucrase: 3.21.0 dev: true - /@rollup/pluginutils/3.1.0_rollup@2.72.0: + /@rollup/pluginutils/3.1.0_rollup@2.73.0: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -8068,7 +7026,7 @@ packages: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 - rollup: 2.72.0 + rollup: 2.73.0 dev: true /@rollup/pluginutils/4.2.1: @@ -8524,11 +7482,11 @@ packages: webpack: optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/generator': 7.17.9 - '@babel/parser': 7.17.9 - '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 - '@babel/preset-env': 7.16.11_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/generator': 7.17.12 + '@babel/parser': 7.17.12 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.12 + '@babel/preset-env': 7.16.11_@babel+core@7.17.12 '@jest/transform': 26.6.2 '@mdx-js/loader': 1.6.22 '@mdx-js/mdx': 1.6.22 @@ -8545,7 +7503,7 @@ packages: '@storybook/node-logger': 6.4.22 '@storybook/postinstall': 6.4.22 '@storybook/preview-web': 6.4.22 - '@storybook/react': 6.4.22_25edyf2dljasinbq77nivmb22m + '@storybook/react': 6.4.22_hrbnwp53bf7wfnzfgeil2y6kbe '@storybook/source-loader': 6.4.22 '@storybook/store': 6.4.22 '@storybook/theming': 6.4.22 @@ -8575,6 +7533,7 @@ packages: - '@storybook/builder-webpack5' - '@storybook/manager-webpack5' - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -8586,7 +7545,7 @@ packages: - webpack-command dev: true - /@storybook/addon-docs/6.4.22_o7zowbft2gvvx7yzf7n2np2444: + /@storybook/addon-docs/6.4.22_fj7kitdife4rko2kg45pyrp6fm: resolution: {integrity: sha512-9j+i+W+BGHJuRe4jUrqk6ubCzP4fc1xgFS2o8pakRiZgPn5kUQPdkticmsyh1XeEJifwhqjKJvkEDrcsleytDA==} peerDependencies: '@storybook/angular': 6.4.22 @@ -8633,11 +7592,11 @@ packages: webpack: optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/generator': 7.17.9 - '@babel/parser': 7.17.9 - '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 - '@babel/preset-env': 7.16.11_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/generator': 7.17.12 + '@babel/parser': 7.17.12 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.12 + '@babel/preset-env': 7.16.11_@babel+core@7.17.12 '@jest/transform': 26.6.2 '@mdx-js/loader': 1.6.22 '@mdx-js/mdx': 1.6.22 @@ -8647,14 +7606,14 @@ packages: '@storybook/builder-webpack4': 6.4.22 '@storybook/client-logger': 6.4.22 '@storybook/components': 6.4.22 - '@storybook/core': 6.4.22_kprb6es4eecmxi2chusf33dgee + '@storybook/core': 6.4.22_z54h3mi5tyrl2zsqpcy6jpfvsq '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.22 '@storybook/node-logger': 6.4.22 '@storybook/postinstall': 6.4.22 '@storybook/preview-web': 6.4.22 - '@storybook/react': 6.4.22_25edyf2dljasinbq77nivmb22m + '@storybook/react': 6.4.22_hrbnwp53bf7wfnzfgeil2y6kbe '@storybook/source-loader': 6.4.22 '@storybook/store': 6.4.22 '@storybook/theming': 6.4.22 @@ -8680,11 +7639,12 @@ packages: remark-slug: 6.1.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 - webpack: 5.72.0 + webpack: 5.72.1 transitivePeerDependencies: - '@storybook/builder-webpack5' - '@storybook/manager-webpack5' - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -8696,7 +7656,7 @@ packages: - webpack-command dev: true - /@storybook/addon-essentials/6.4.22_h4miks6pfc5gp3ldsh3xdoze4y: + /@storybook/addon-essentials/6.4.22_gqsw6pqr75fjity56y4wz4ur5q: resolution: {integrity: sha512-GTv291fqvWq2wzm7MruBvCGuWaCUiuf7Ca3kzbQ/WqWtve7Y/1PDsqRNQLGZrQxkXU0clXCqY1XtkTrtA3WGFQ==} peerDependencies: '@babel/core': ^7.9.6 @@ -8723,11 +7683,11 @@ packages: webpack: optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@storybook/addon-actions': 6.4.22 '@storybook/addon-backgrounds': 6.4.22 '@storybook/addon-controls': 6.4.22 - '@storybook/addon-docs': 6.4.22_dclt4naqw4kpwkahfqsmmzslbe + '@storybook/addon-docs': 6.4.22_fj7kitdife4rko2kg45pyrp6fm '@storybook/addon-measure': 6.4.22 '@storybook/addon-outline': 6.4.22 '@storybook/addon-toolbars': 6.4.22 @@ -8735,10 +7695,11 @@ packages: '@storybook/addons': 6.4.22 '@storybook/api': 6.4.22 '@storybook/node-logger': 6.4.22 - babel-loader: 8.2.5_@babel+core@7.17.10 + babel-loader: 8.2.5_72ctybzk7ntig5kqkayinqycte core-js: 3.22.2 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 + webpack: 5.72.1 transitivePeerDependencies: - '@storybook/angular' - '@storybook/builder-webpack5' @@ -8747,6 +7708,7 @@ packages: - '@storybook/react' - '@storybook/vue3' - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -8762,7 +7724,7 @@ packages: - webpack-command dev: true - /@storybook/addon-essentials/6.4.22_iy5746u7mvp22b5wkaw35cerlm: + /@storybook/addon-essentials/6.4.22_xdqfd2fjgpzmle5fhbmnsnx2ne: resolution: {integrity: sha512-GTv291fqvWq2wzm7MruBvCGuWaCUiuf7Ca3kzbQ/WqWtve7Y/1PDsqRNQLGZrQxkXU0clXCqY1XtkTrtA3WGFQ==} peerDependencies: '@babel/core': ^7.9.6 @@ -8789,11 +7751,11 @@ packages: webpack: optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 '@storybook/addon-actions': 6.4.22 '@storybook/addon-backgrounds': 6.4.22 '@storybook/addon-controls': 6.4.22 - '@storybook/addon-docs': 6.4.22_o7zowbft2gvvx7yzf7n2np2444 + '@storybook/addon-docs': 6.4.22_dclt4naqw4kpwkahfqsmmzslbe '@storybook/addon-measure': 6.4.22 '@storybook/addon-outline': 6.4.22 '@storybook/addon-toolbars': 6.4.22 @@ -8801,11 +7763,10 @@ packages: '@storybook/addons': 6.4.22 '@storybook/api': 6.4.22 '@storybook/node-logger': 6.4.22 - babel-loader: 8.2.5_rb5fcebzp6kx3hqg3ucus54t3m + babel-loader: 8.2.5_@babel+core@7.17.12 core-js: 3.22.2 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - webpack: 5.72.0 transitivePeerDependencies: - '@storybook/angular' - '@storybook/builder-webpack5' @@ -8814,6 +7775,7 @@ packages: - '@storybook/react' - '@storybook/vue3' - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -9017,27 +7979,27 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-decorators': 7.17.9_@babel+core@7.17.10 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.10 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.10 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.10 - '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.10 - '@babel/preset-env': 7.16.11_@babel+core@7.17.10 - '@babel/preset-react': 7.16.7_@babel+core@7.17.10 - '@babel/preset-typescript': 7.16.7_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-decorators': 7.17.9_@babel+core@7.17.12 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.12 + '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.12 + '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.12 + '@babel/preset-env': 7.16.11_@babel+core@7.17.12 + '@babel/preset-react': 7.16.7_@babel+core@7.17.12 + '@babel/preset-typescript': 7.16.7_@babel+core@7.17.12 '@storybook/addons': 6.4.22 '@storybook/api': 6.4.22 '@storybook/channel-postmessage': 6.4.22 @@ -9054,18 +8016,18 @@ packages: '@storybook/store': 6.4.22 '@storybook/theming': 6.4.22 '@storybook/ui': 6.4.22 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/webpack': 4.41.32 autoprefixer: 9.8.8 - babel-loader: 8.2.5_usdhdj5awexcm2e5jtwd44bofa + babel-loader: 8.2.5_tlrwjfnbl7llelxqoonrmw2kde babel-plugin-macros: 2.8.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.10 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.12 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.22.2 css-loader: 3.6.0_webpack@4.46.0 file-loader: 6.2.0_webpack@4.46.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 4.1.6 + fork-ts-checker-webpack-plugin: 4.1.6_webpack@4.46.0 glob: 7.2.0 glob-promise: 3.4.0_glob@7.2.0 global: 4.4.0 @@ -9088,6 +8050,7 @@ packages: webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - '@types/react' + - bluebird - eslint - supports-color - vue-template-compiler @@ -9109,26 +8072,26 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-decorators': 7.17.9_@babel+core@7.17.10 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.10 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.10 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.10 - '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.10 - '@babel/preset-env': 7.16.11_@babel+core@7.17.10 - '@babel/preset-react': 7.16.7_@babel+core@7.17.10 - '@babel/preset-typescript': 7.16.7_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-decorators': 7.17.9_@babel+core@7.17.12 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.12 + '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.12 + '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.12 + '@babel/preset-env': 7.16.11_@babel+core@7.17.12 + '@babel/preset-react': 7.16.7_@babel+core@7.17.12 + '@babel/preset-typescript': 7.16.7_@babel+core@7.17.12 '@storybook/addons': 6.4.22 '@storybook/api': 6.4.22 '@storybook/channel-postmessage': 6.4.22 @@ -9144,10 +8107,10 @@ packages: '@storybook/semver': 7.3.2 '@storybook/store': 6.4.22 '@storybook/theming': 6.4.22 - '@types/node': 17.0.31 - babel-loader: 8.2.5_rb5fcebzp6kx3hqg3ucus54t3m + '@types/node': 17.0.34 + babel-loader: 8.2.5_3qwzuvaup7d4ulskf4dijce23a babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.10 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.12 case-sensitive-paths-webpack-plugin: 2.4.0 core-js: 3.22.2 css-loader: 5.2.7_webpack@5.72.0 @@ -9169,7 +8132,6 @@ packages: transitivePeerDependencies: - '@swc/core' - '@types/react' - - acorn - esbuild - eslint - supports-color @@ -9407,6 +8369,46 @@ packages: - '@types/react' dev: true + /@storybook/core-client/6.4.22_webpack@5.72.1: + resolution: {integrity: sha512-uHg4yfCBeM6eASSVxStWRVTZrAnb4FT6X6v/xDqr4uXCpCttZLlBzrSDwPBLNNLtCa7ntRicHM8eGKIOD5lMYQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || 18 + react-dom: ^16.8.0 || ^17.0.0 || 18 + typescript: '*' + webpack: '*' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + typescript: + optional: true + dependencies: + '@storybook/addons': 6.4.22 + '@storybook/channel-postmessage': 6.4.22 + '@storybook/channel-websocket': 6.4.22 + '@storybook/client-api': 6.4.22 + '@storybook/client-logger': 6.4.22 + '@storybook/core-events': 6.4.22 + '@storybook/csf': 0.0.2--canary.87bc651.0 + '@storybook/preview-web': 6.4.22 + '@storybook/store': 6.4.22 + '@storybook/ui': 6.4.22 + airbnb-js-shims: 2.2.1 + ansi-to-html: 0.6.15 + core-js: 3.22.2 + global: 4.4.0 + lodash: 4.17.21 + qs: 6.10.3 + regenerator-runtime: 0.13.9 + ts-dedent: 2.2.0 + unfetch: 4.2.0 + util-deprecate: 1.0.2 + webpack: 5.72.1 + transitivePeerDependencies: + - '@types/react' + dev: true + /@storybook/core-common/6.4.22: resolution: {integrity: sha512-PD3N/FJXPNRHeQS2zdgzYFtqPLdi3MLwAicbnw+U3SokcsspfsAuyYHZOYZgwO8IAEKy6iCc7TpBdiSJZ/vAKQ==} peerDependencies: @@ -9421,34 +8423,34 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-decorators': 7.17.9_@babel+core@7.17.9 - '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.9 - '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.9 - '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.9 - '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.9 - '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.9 - '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.9 - '@babel/preset-env': 7.16.11_@babel+core@7.17.9 - '@babel/preset-react': 7.16.7_@babel+core@7.17.9 - '@babel/preset-typescript': 7.16.7_@babel+core@7.17.9 - '@babel/register': 7.17.7_@babel+core@7.17.9 + '@babel/core': 7.17.12 + '@babel/plugin-proposal-class-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-decorators': 7.17.9_@babel+core@7.17.12 + '@babel/plugin-proposal-export-default-from': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-object-rest-spread': 7.17.3_@babel+core@7.17.12 + '@babel/plugin-proposal-optional-chaining': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-proposal-private-methods': 7.16.11_@babel+core@7.17.12 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.17.12 + '@babel/plugin-transform-arrow-functions': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-block-scoping': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-classes': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-destructuring': 7.17.7_@babel+core@7.17.12 + '@babel/plugin-transform-for-of': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.12 + '@babel/plugin-transform-spread': 7.16.7_@babel+core@7.17.12 + '@babel/preset-env': 7.16.11_@babel+core@7.17.12 + '@babel/preset-react': 7.16.7_@babel+core@7.17.12 + '@babel/preset-typescript': 7.16.7_@babel+core@7.17.12 + '@babel/register': 7.17.7_@babel+core@7.17.12 '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/pretty-hrtime': 1.0.1 - babel-loader: 8.2.5_lgfes7hlvohbl3uptzldef4omm + babel-loader: 8.2.5_tlrwjfnbl7llelxqoonrmw2kde babel-plugin-macros: 3.1.0 - babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.9 + babel-plugin-polyfill-corejs3: 0.1.7_@babel+core@7.17.12 chalk: 4.1.2 core-js: 3.22.2 express: 4.17.3 @@ -9515,7 +8517,7 @@ packages: '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 '@storybook/store': 6.4.22 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/node-fetch': 2.6.1 '@types/pretty-hrtime': 1.0.1 '@types/webpack': 4.41.32 @@ -9548,6 +8550,7 @@ packages: ws: 8.5.0 transitivePeerDependencies: - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -9591,7 +8594,7 @@ packages: '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 '@storybook/store': 6.4.22 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/node-fetch': 2.6.1 '@types/pretty-hrtime': 1.0.1 '@types/webpack': 4.41.32 @@ -9624,6 +8627,7 @@ packages: ws: 8.5.0 transitivePeerDependencies: - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -9659,6 +8663,7 @@ packages: transitivePeerDependencies: - '@storybook/manager-webpack5' - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -9693,6 +8698,7 @@ packages: transitivePeerDependencies: - '@storybook/manager-webpack5' - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -9703,7 +8709,7 @@ packages: - webpack-command dev: true - /@storybook/core/6.4.22_kprb6es4eecmxi2chusf33dgee: + /@storybook/core/6.4.22_webpack@4.46.0: resolution: {integrity: sha512-KZYJt7GM5NgKFXbPRZZZPEONZ5u/tE/cRbMdkn/zWN3He8+VP+65/tz8hbriI/6m91AWVWkBKrODSkeq59NgRA==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -9721,13 +8727,13 @@ packages: typescript: optional: true dependencies: - '@storybook/builder-webpack5': 6.4.22 - '@storybook/core-client': 6.4.22_webpack@5.72.0 - '@storybook/core-server': 6.4.22_7tqogqlp6fsyu3hnbnt5jaietq - webpack: 5.72.0 + '@storybook/core-client': 6.4.22_webpack@4.46.0 + '@storybook/core-server': 6.4.22 + webpack: 4.46.0 transitivePeerDependencies: - '@storybook/manager-webpack5' - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -9738,7 +8744,7 @@ packages: - webpack-command dev: true - /@storybook/core/6.4.22_webpack@4.46.0: + /@storybook/core/6.4.22_z54h3mi5tyrl2zsqpcy6jpfvsq: resolution: {integrity: sha512-KZYJt7GM5NgKFXbPRZZZPEONZ5u/tE/cRbMdkn/zWN3He8+VP+65/tz8hbriI/6m91AWVWkBKrODSkeq59NgRA==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -9756,12 +8762,14 @@ packages: typescript: optional: true dependencies: - '@storybook/core-client': 6.4.22_webpack@4.46.0 - '@storybook/core-server': 6.4.22 - webpack: 4.46.0 + '@storybook/builder-webpack5': 6.4.22 + '@storybook/core-client': 6.4.22_webpack@5.72.1 + '@storybook/core-server': 6.4.22_7tqogqlp6fsyu3hnbnt5jaietq + webpack: 5.72.1 transitivePeerDependencies: - '@storybook/manager-webpack5' - '@types/react' + - bluebird - bufferutil - encoding - eslint @@ -9775,13 +8783,13 @@ packages: /@storybook/csf-tools/6.4.22: resolution: {integrity: sha512-LMu8MZAiQspJAtMBLU2zitsIkqQv7jOwX7ih5JrXlyaDticH7l2j6Q+1mCZNWUOiMTizj0ivulmUsSaYbpToSw==} dependencies: - '@babel/core': 7.17.10 - '@babel/generator': 7.17.10 - '@babel/parser': 7.17.10 - '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.10 - '@babel/preset-env': 7.16.11_@babel+core@7.17.10 - '@babel/traverse': 7.17.10 - '@babel/types': 7.17.10 + '@babel/core': 7.17.12 + '@babel/generator': 7.17.12 + '@babel/parser': 7.17.12 + '@babel/plugin-transform-react-jsx': 7.17.3_@babel+core@7.17.12 + '@babel/preset-env': 7.16.11_@babel+core@7.17.12 + '@babel/traverse': 7.17.12 + '@babel/types': 7.17.12 '@mdx-js/mdx': 1.6.22 '@storybook/csf': 0.0.2--canary.87bc651.0 core-js: 3.22.2 @@ -9825,7 +8833,7 @@ packages: '@storybook/node-logger': 6.4.22 '@storybook/theming': 6.4.22 '@storybook/ui': 6.4.22 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/webpack': 4.41.32 babel-loader: 8.2.5_lgfes7hlvohbl3uptzldef4omm case-sensitive-paths-webpack-plugin: 2.4.0 @@ -9854,6 +8862,7 @@ packages: webpack-virtual-modules: 0.2.2 transitivePeerDependencies: - '@types/react' + - bluebird - encoding - eslint - supports-color @@ -9876,17 +8885,17 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.10 - '@babel/preset-react': 7.16.7_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/plugin-transform-template-literals': 7.16.7_@babel+core@7.17.12 + '@babel/preset-react': 7.16.7_@babel+core@7.17.12 '@storybook/addons': 6.4.22 '@storybook/core-client': 6.4.22_webpack@5.72.0 '@storybook/core-common': 6.4.22 '@storybook/node-logger': 6.4.22 '@storybook/theming': 6.4.22 '@storybook/ui': 6.4.22 - '@types/node': 17.0.31 - babel-loader: 8.2.5_rb5fcebzp6kx3hqg3ucus54t3m + '@types/node': 17.0.34 + babel-loader: 8.2.5_3qwzuvaup7d4ulskf4dijce23a case-sensitive-paths-webpack-plugin: 2.4.0 chalk: 4.1.2 core-js: 3.22.2 @@ -9912,7 +8921,6 @@ packages: transitivePeerDependencies: - '@swc/core' - '@types/react' - - acorn - encoding - esbuild - eslint @@ -10037,6 +9045,7 @@ packages: - '@storybook/manager-webpack5' - '@types/react' - '@types/webpack' + - bluebird - bufferutil - encoding - eslint @@ -10052,7 +9061,7 @@ packages: - webpack-plugin-serve dev: true - /@storybook/react/6.4.22_25edyf2dljasinbq77nivmb22m: + /@storybook/react/6.4.22_hrbnwp53bf7wfnzfgeil2y6kbe: resolution: {integrity: sha512-5BFxtiguOcePS5Ty/UoH7C6odmvBYIZutfiy4R3Ua6FYmtxac5vP9r5KjCz1IzZKT8mCf4X+PuK1YvDrPPROgQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -10071,9 +9080,9 @@ packages: typescript: optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/preset-flow': 7.16.7_@babel+core@7.17.10 - '@babel/preset-react': 7.16.7_@babel+core@7.17.10 + '@babel/core': 7.17.12 + '@babel/preset-flow': 7.16.7_@babel+core@7.17.12 + '@babel/preset-react': 7.16.7_@babel+core@7.17.12 '@pmmmwh/react-refresh-webpack-plugin': 0.5.5_a3gyllrqvxpec3fpybsrposvju '@storybook/addons': 6.4.22 '@storybook/core': 6.4.22_3fbhyijvrchqengy7suoplhr3y @@ -10085,7 +9094,7 @@ packages: '@storybook/store': 6.4.22 '@types/webpack-env': 1.16.4 babel-plugin-add-react-displayname: 0.0.5 - babel-plugin-named-asset-import: 0.3.8_@babel+core@7.17.10 + babel-plugin-named-asset-import: 0.3.8_@babel+core@7.17.12 babel-plugin-react-docgen: 4.2.1 core-js: 3.22.2 global: 4.4.0 @@ -10101,6 +9110,7 @@ packages: - '@storybook/manager-webpack5' - '@types/react' - '@types/webpack' + - bluebird - bufferutil - encoding - eslint @@ -10466,24 +9476,24 @@ packages: /@types/bn.js/4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 /@types/bn.js/5.1.0: resolution: {integrity: sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/bonjour/3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/bs58/4.0.1: @@ -10516,13 +9526,13 @@ packages: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: '@types/express-serve-static-core': 4.17.28 - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 /@types/d3-array/1.2.9: resolution: {integrity: sha512-E/7RgPr2ylT5dWG0CswMi9NpFcjIEDqLcUSBgNHe/EMahfqYaTx4zhcggG3khqoEB/leY4Vl6nTSbwLUPjXceA==} @@ -10726,12 +9736,12 @@ packages: /@types/eslint-scope/3.7.3: resolution: {integrity: sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==} dependencies: - '@types/eslint': 8.4.1 + '@types/eslint': 8.4.2 '@types/estree': 0.0.51 dev: true - /@types/eslint/8.4.1: - resolution: {integrity: sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==} + /@types/eslint/8.4.2: + resolution: {integrity: sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==} dependencies: '@types/estree': 0.0.51 '@types/json-schema': 7.0.11 @@ -10756,7 +9766,7 @@ packages: /@types/express-serve-static-core/4.17.28: resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 @@ -10782,7 +9792,7 @@ packages: /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/geojson/7946.0.8: @@ -10793,25 +9803,25 @@ packages: resolution: {integrity: sha512-AGOUTsTdbPkRS0qDeyeS+6KypmfVpbT5j23SN8UPG63qjKXNKjXn6V9wZUr8Fin0m9l8oGYaPK8b2WUMF8xI1A==} dependencies: '@types/glob': 7.1.4 - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/glob/7.1.4: resolution: {integrity: sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==} dependencies: '@types/minimatch': 3.0.5 - '@types/node': 17.0.31 + '@types/node': 17.0.34 /@types/glob/7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 3.0.5 - '@types/node': 17.0.31 + '@types/node': 17.0.34 /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/gulp/4.0.9: @@ -10851,7 +9861,7 @@ packages: /@types/http-proxy/1.17.8: resolution: {integrity: sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/is-function/1.0.1: @@ -10893,7 +9903,7 @@ packages: /@types/json2csv/5.0.3: resolution: {integrity: sha512-ZJEv6SzhPhgpBpxZU4n/TZekbZqI4EcyXXRwms1lAITG2kIAtj85PfNYafUOY1zy8bWs5ujaub0GU4copaA0sw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: false /@types/json5/0.0.29: @@ -10903,7 +9913,7 @@ packages: /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: false /@types/lodash-es/4.17.6: @@ -10927,8 +9937,11 @@ packages: resolution: {integrity: sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==} dev: false - /@types/lru-cache/7.6.1: - resolution: {integrity: sha512-69x+Dhrm2aShFkTqUuPgUXbKYwvq4FH/DVeeQH7MBfTjbKjPX51NGLERxVV1vf33N71dzLvXCko4OLqRvsq53Q==} + /@types/lru-cache/7.10.10: + resolution: {integrity: sha512-nEpVRPWW9EBmx2SCfNn3ClYxPL7IktPX12HhIoSc/H5mMjdeW3+YsXIpseLQ2xF35+OcpwKQbEUw5VtqE4PDNA==} + deprecated: This is a stub types definition. lru-cache provides its own type definitions, so you do not need this installed. + dependencies: + lru-cache: 7.10.1 dev: true /@types/mdast/3.0.10: @@ -10950,12 +9963,16 @@ packages: /@types/node-fetch/2.6.1: resolution: {integrity: sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 form-data: 3.0.1 dev: true /@types/node/17.0.31: resolution: {integrity: sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==} + dev: false + + /@types/node/17.0.34: + resolution: {integrity: sha512-XImEz7XwTvDBtzlTnm8YvMqGW/ErMWBsKZ+hMTvnDIjGCKxwK5Xpc+c/oQjOauwq8M4OS11hEkpjX8rrI/eEgA==} /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -10978,7 +9995,7 @@ packages: /@types/pbkdf2/3.1.0: resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 /@types/prettier/2.3.2: resolution: {integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==} @@ -11008,7 +10025,7 @@ packages: /@types/qrcode/1.4.2: resolution: {integrity: sha512-7uNT9L4WQTNJejHTSTdaJhfBSCN73xtXaHFyBJ8TSwiLhe4PRuTue7Iph0s2nG9R/ifUaSnGhLUOZavlBEqDWQ==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} @@ -11016,20 +10033,14 @@ packages: /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} - /@types/react-avatar-editor/10.3.6: - resolution: {integrity: sha512-2r9+WYriqXIyjOTxy/DSiCUhr2TBiYD4Gzbyych1WUEwdPboNj0JRz9B5868TwiGgKD61jdWYyKy/OutHs7L6A==} - dependencies: - '@types/react': 18.0.9 - dev: false - /@types/react-avatar-editor/12.0.0: resolution: {integrity: sha512-835jSnCdQ2Kgrtz2sTYKMv9YSGJG0j2vd8C0sxWtYJoYOmYPs8nt25rTsbCOha3SVzWNiuw1TOQCVqN0iBQgrw==} dependencies: '@types/react': 18.0.9 dev: false - /@types/react-dom/18.0.3: - resolution: {integrity: sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ==} + /@types/react-dom/18.0.4: + resolution: {integrity: sha512-FgTtbqPOCI3dzZPZoC2T/sx3L34qxy99ITWn4eoSA95qPyXDMH0ALoAqUp49ITniiJFsXUVBtalh/KffMpg21Q==} dependencies: '@types/react': 18.0.9 dev: false @@ -11108,13 +10119,13 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/responselike/1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: false /@types/retry/0.12.1: @@ -11125,7 +10136,7 @@ packages: resolution: {integrity: sha512-F3OznnSLAUxFrCEu/L5PY8+ny8DtcFRjx7fZZ9bycvXRi3KPTRS9HOitGZwvPg0juRhXFWIeKX58cnX5YqLohQ==} dependencies: '@types/glob': 7.1.4 - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: false /@types/scheduler/0.16.2: @@ -11134,7 +10145,7 @@ packages: /@types/secp256k1/4.0.3: resolution: {integrity: sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 /@types/serve-index/1.9.1: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} @@ -11146,7 +10157,7 @@ packages: resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} dependencies: '@types/mime': 1.3.2 - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/socket.io-client/1.4.36: @@ -11156,7 +10167,7 @@ packages: /@types/sockjs/0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/source-list-map/0.1.2: @@ -11192,7 +10203,7 @@ packages: /@types/undertaker/1.2.7: resolution: {integrity: sha512-xuY7nBwo1zSRoY2aitp/HArHfTulFAKql2Fr4b4mWbBBP+F50n7Jm6nwISTTMaDk2xvl92O10TTejVF0Q9mInw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/undertaker-registry': 1.0.1 async-done: 1.3.2 dev: true @@ -11211,7 +10222,7 @@ packages: resolution: {integrity: sha512-LgBpYIWuuGsihnlF+OOWWz4ovwCYlT03gd3DuLwex50cYZLmX3yrW+sFF9ndtmh7zcZpS6Ri47PrIu+fV+sbXw==} dependencies: '@types/glob-stream': 6.1.1 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/vinyl': 2.0.5 dev: true @@ -11219,11 +10230,11 @@ packages: resolution: {integrity: sha512-1m6uReH8R/RuLVQGvTT/4LlWq67jZEUxp+FBHt0hYv2BT7TUwFbKI0wa7JZVEU/XtlcnX1QcTuZ36es4rGj7jg==} dependencies: '@types/expect': 1.20.4 - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true - /@types/web/0.0.64: - resolution: {integrity: sha512-WhKccWzApbeiTFznYJZbegURL7zYSS9y6LMBiI+ypffs+eh4XOHXWt5ky5vM5/XhAu+rTGFKixbJtgmGawvEEA==} + /@types/web/0.0.66: + resolution: {integrity: sha512-V5B9aWZqR1UyGN9zOV/pRaT8GfRJLIpmxf/nEPiZYtNm7PBV8XEa/8xPD6ZPBYKLXMcgbs6JcCeqrqHYoRFoPQ==} dev: false /@types/webpack-env/1.16.4: @@ -11233,7 +10244,7 @@ packages: /@types/webpack-sources/3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/source-list-map': 0.1.2 source-map: 0.7.3 dev: true @@ -11241,7 +10252,7 @@ packages: /@types/webpack/4.41.32: resolution: {integrity: sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/tapable': 1.0.8 '@types/uglify-js': 3.13.2 '@types/webpack-sources': 3.2.0 @@ -11252,13 +10263,13 @@ packages: /@types/ws/7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: false /@types/ws/8.5.3: resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /@types/yargs-parser/21.0.0: @@ -11277,8 +10288,8 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.22.0_dvfvfxjgp6zej7ga25lbfx7lze: - resolution: {integrity: sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==} + /@typescript-eslint/eslint-plugin/5.25.0_ba4jjn6kijvdzygv7x6qvskqee: + resolution: {integrity: sha512-icYrFnUzvm+LhW0QeJNKkezBu6tJs9p/53dpPLFH8zoM9w1tfaKzVurkPotEpAqQ8Vf8uaFyL5jHd0Vs6Z0ZQg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -11288,10 +10299,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.22.0_dx5yzralznart3ybdl432c3i44 - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/type-utils': 5.22.0_dx5yzralznart3ybdl432c3i44 - '@typescript-eslint/utils': 5.22.0_dx5yzralznart3ybdl432c3i44 + '@typescript-eslint/parser': 5.25.0_dx5yzralznart3ybdl432c3i44 + '@typescript-eslint/scope-manager': 5.25.0 + '@typescript-eslint/type-utils': 5.25.0_dx5yzralznart3ybdl432c3i44 + '@typescript-eslint/utils': 5.25.0_dx5yzralznart3ybdl432c3i44 debug: 4.3.4 eslint: 8.15.0 functional-red-black-tree: 1.0.1 @@ -11304,21 +10315,21 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils/5.22.0_dx5yzralznart3ybdl432c3i44: - resolution: {integrity: sha512-rKxoCUtAHwEH6IcAoVpqipY6Th+YKW7WFspAKu0IFdbdKZpveFBeqxxE9Xn+GWikhq1o03V3VXbxIe+GdhggiQ==} + /@typescript-eslint/experimental-utils/5.25.0_dx5yzralznart3ybdl432c3i44: + resolution: {integrity: sha512-YTe9rmslCh1xAvNa3X+uZe4L2lsyb8V3WIeK9z46nNiPswk/V/0SGLJSfo8W9Hj4R7ak7bolazXGn3DErmb8QA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.22.0_dx5yzralznart3ybdl432c3i44 + '@typescript-eslint/utils': 5.25.0_dx5yzralznart3ybdl432c3i44 eslint: 8.15.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser/5.22.0_dx5yzralznart3ybdl432c3i44: - resolution: {integrity: sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==} + /@typescript-eslint/parser/5.25.0_dx5yzralznart3ybdl432c3i44: + resolution: {integrity: sha512-r3hwrOWYbNKP1nTcIw/aZoH+8bBnh/Lh1iDHoFpyG4DnCpvEdctrSl6LOo19fZbzypjQMHdajolxs6VpYoChgA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -11327,9 +10338,9 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/typescript-estree': 5.22.0_typescript@4.7.0-beta + '@typescript-eslint/scope-manager': 5.25.0 + '@typescript-eslint/types': 5.25.0 + '@typescript-eslint/typescript-estree': 5.25.0_typescript@4.7.0-beta debug: 4.3.4 eslint: 8.15.0 typescript: 4.7.0-beta @@ -11337,16 +10348,16 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager/5.22.0: - resolution: {integrity: sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==} + /@typescript-eslint/scope-manager/5.25.0: + resolution: {integrity: sha512-p4SKTFWj+2VpreUZ5xMQsBMDdQ9XdRvODKXN4EksyBjFp2YvQdLkyHqOffakYZPuWJUDNu3jVXtHALDyTv3cww==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/visitor-keys': 5.22.0 + '@typescript-eslint/types': 5.25.0 + '@typescript-eslint/visitor-keys': 5.25.0 dev: true - /@typescript-eslint/type-utils/5.22.0_dx5yzralznart3ybdl432c3i44: - resolution: {integrity: sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==} + /@typescript-eslint/type-utils/5.25.0_dx5yzralznart3ybdl432c3i44: + resolution: {integrity: sha512-B6nb3GK3Gv1Rsb2pqalebe/RyQoyG/WDy9yhj8EE0Ikds4Xa8RR28nHz+wlt4tMZk5bnAr0f3oC8TuDAd5CPrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -11355,7 +10366,7 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.22.0_dx5yzralznart3ybdl432c3i44 + '@typescript-eslint/utils': 5.25.0_dx5yzralznart3ybdl432c3i44 debug: 4.3.4 eslint: 8.15.0 tsutils: 3.21.0_typescript@4.7.0-beta @@ -11364,13 +10375,13 @@ packages: - supports-color dev: true - /@typescript-eslint/types/5.22.0: - resolution: {integrity: sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==} + /@typescript-eslint/types/5.25.0: + resolution: {integrity: sha512-7fWqfxr0KNHj75PFqlGX24gWjdV/FDBABXL5dyvBOWHpACGyveok8Uj4ipPX/1fGU63fBkzSIycEje4XsOxUFA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.22.0_typescript@4.7.0-beta: - resolution: {integrity: sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==} + /@typescript-eslint/typescript-estree/5.25.0_typescript@4.7.0-beta: + resolution: {integrity: sha512-MrPODKDych/oWs/71LCnuO7NyR681HuBly2uLnX3r5i4ME7q/yBqC4hW33kmxtuauLTM0OuBOhhkFaxCCOjEEw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -11378,8 +10389,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/visitor-keys': 5.22.0 + '@typescript-eslint/types': 5.25.0 + '@typescript-eslint/visitor-keys': 5.25.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -11390,16 +10401,16 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.22.0_dx5yzralznart3ybdl432c3i44: - resolution: {integrity: sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==} + /@typescript-eslint/utils/5.25.0_dx5yzralznart3ybdl432c3i44: + resolution: {integrity: sha512-qNC9bhnz/n9Kba3yI6HQgQdBLuxDoMgdjzdhSInZh6NaDnFpTUlwNGxplUFWfY260Ya0TRPvkg9dd57qxrJI9g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/typescript-estree': 5.22.0_typescript@4.7.0-beta + '@typescript-eslint/scope-manager': 5.25.0 + '@typescript-eslint/types': 5.25.0 + '@typescript-eslint/typescript-estree': 5.25.0_typescript@4.7.0-beta eslint: 8.15.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.15.0 @@ -11408,11 +10419,11 @@ packages: - typescript dev: true - /@typescript-eslint/visitor-keys/5.22.0: - resolution: {integrity: sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==} + /@typescript-eslint/visitor-keys/5.25.0: + resolution: {integrity: sha512-yd26vFgMsC4h2dgX4+LR+GeicSKIfUvZREFLf3DDjZPtqgLx5AJZr6TetMNwFP9hcKreTTeztQYBTNbNoOycwA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.22.0 + '@typescript-eslint/types': 5.25.0 eslint-visitor-keys: 3.3.0 dev: true @@ -11778,14 +10789,14 @@ packages: '@xtuc/long': 4.2.2 dev: true - /@webpack-cli/configtest/1.1.1_q7qo2wgeiyigo3znjsjh7f36ue: + /@webpack-cli/configtest/1.1.1_smhu6mcfcg7aivfsuosc335k3u: resolution: {integrity: sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==} peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x dependencies: - webpack: 5.72.0_webpack-cli@4.9.2 - webpack-cli: 4.9.2_4evrg3m2qioscfus6hwjof6pci + webpack: 5.72.1_webpack-cli@4.9.2 + webpack-cli: 4.9.2_cwh63z5eu3fmemh7flfnfpcp74 dev: true /@webpack-cli/info/1.4.1_webpack-cli@4.9.2: @@ -11794,7 +10805,7 @@ packages: webpack-cli: 4.x.x dependencies: envinfo: 7.8.1 - webpack-cli: 4.9.2_4evrg3m2qioscfus6hwjof6pci + webpack-cli: 4.9.2_cwh63z5eu3fmemh7flfnfpcp74 dev: true /@webpack-cli/serve/1.6.1_efhxflzxrvzsrtpw5o3zelaodm: @@ -11806,8 +10817,8 @@ packages: webpack-dev-server: optional: true dependencies: - webpack-cli: 4.9.2_4evrg3m2qioscfus6hwjof6pci - webpack-dev-server: 4.9.0_q7qo2wgeiyigo3znjsjh7f36ue + webpack-cli: 4.9.2_cwh63z5eu3fmemh7flfnfpcp74 + webpack-dev-server: 4.9.0_smhu6mcfcg7aivfsuosc335k3u dev: true /@xobotyi/scrollbar-width/1.9.5: @@ -11883,6 +10894,14 @@ packages: acorn: 8.7.0 dev: true + /acorn-import-assertions/1.8.0_acorn@8.7.1: + resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.7.1 + dev: true + /acorn-jsx/5.3.2_acorn@7.4.1: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -12136,7 +11155,7 @@ packages: dev: true /ansi-styles/2.2.1: - resolution: {integrity: sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=} + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} engines: {node: '>=0.10.0'} dev: false @@ -12175,7 +11194,7 @@ packages: engines: {node: '>=0.10.0'} /any-promise/1.3.0: - resolution: {integrity: sha1-q8av7tzqUugJzcA3au0845Y10X8=} + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} dev: true /any-signal/2.1.2: @@ -12197,6 +11216,16 @@ packages: transitivePeerDependencies: - supports-color + /anymatch/2.0.0_supports-color@4.5.0: + resolution: {integrity: sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==} + dependencies: + micromatch: 3.1.10_supports-color@4.5.0 + normalize-path: 2.1.1 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /anymatch/3.1.2: resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} engines: {node: '>= 8'} @@ -12300,7 +11329,7 @@ packages: resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} /array-ify/1.0.0: - resolution: {integrity: sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=} + resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} dev: true /array-includes/3.1.4: @@ -12358,11 +11387,6 @@ packages: engines: {node: '>=8'} dev: true - /array-union/3.0.1: - resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} - engines: {node: '>=12'} - dev: true - /array-uniq/1.0.3: resolution: {integrity: sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=} engines: {node: '>=0.10.0'} @@ -12425,7 +11449,7 @@ packages: dev: false /arrify/1.0.1: - resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} /arrify/2.0.1: @@ -12545,7 +11569,7 @@ packages: dev: true /async/1.5.2: - resolution: {integrity: sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=} + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} dev: false /async/2.6.3: @@ -12612,6 +11636,8 @@ packages: mkdirp: 0.5.6 source-map-support: 0.5.21 typescript: 2.9.2 + transitivePeerDependencies: + - supports-color dev: false /aws-sign2/0.7.0: @@ -12623,10 +11649,10 @@ packages: dev: false /axios/0.17.1: - resolution: {integrity: sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=} + resolution: {integrity: sha512-mZzWRyJeJ0rtK7e1/6iYBUzmeXjzei+1h1IvbedyU0sB52++tU5AU6r6TLXpwNVR0ebXIpvTVW+9CpWNyc1n8w==} deprecated: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410 dependencies: - follow-redirects: 1.14.9 + follow-redirects: 1.15.0 is-buffer: 1.1.6 transitivePeerDependencies: - debug @@ -12657,7 +11683,7 @@ packages: dev: false /babel-code-frame/6.26.0: - resolution: {integrity: sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=} + resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} dependencies: chalk: 1.1.3 esutils: 2.0.3 @@ -12686,6 +11712,8 @@ packages: private: 0.1.8 slash: 1.0.0 source-map: 0.5.7 + transitivePeerDependencies: + - supports-color dev: false /babel-generator/6.26.1: @@ -12702,72 +11730,82 @@ packages: dev: false /babel-helper-builder-binary-assignment-operator-visitor/6.24.1: - resolution: {integrity: sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=} + resolution: {integrity: sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==} dependencies: babel-helper-explode-assignable-expression: 6.24.1 babel-runtime: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-helper-call-delegate/6.24.1: - resolution: {integrity: sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=} + resolution: {integrity: sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==} dependencies: babel-helper-hoist-variables: 6.24.1 babel-runtime: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-helper-define-map/6.26.0: - resolution: {integrity: sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=} + resolution: {integrity: sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==} dependencies: babel-helper-function-name: 6.24.1 babel-runtime: 6.26.0 babel-types: 6.26.0 lodash: 4.17.21 + transitivePeerDependencies: + - supports-color dev: false /babel-helper-explode-assignable-expression/6.24.1: - resolution: {integrity: sha1-8luCz33BBDPFX3BZLVdGQArCLKo=} + resolution: {integrity: sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==} dependencies: babel-runtime: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-helper-function-name/6.24.1: - resolution: {integrity: sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=} + resolution: {integrity: sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==} dependencies: babel-helper-get-function-arity: 6.24.1 babel-runtime: 6.26.0 babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-helper-get-function-arity/6.24.1: - resolution: {integrity: sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=} + resolution: {integrity: sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==} dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 dev: false /babel-helper-hoist-variables/6.24.1: - resolution: {integrity: sha1-HssnaJydJVE+rbyZFKc/VAi+enY=} + resolution: {integrity: sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==} dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 dev: false /babel-helper-optimise-call-expression/6.24.1: - resolution: {integrity: sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=} + resolution: {integrity: sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==} dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 dev: false /babel-helper-regex/6.26.0: - resolution: {integrity: sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=} + resolution: {integrity: sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==} dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 @@ -12775,17 +11813,19 @@ packages: dev: false /babel-helper-remap-async-to-generator/6.24.1: - resolution: {integrity: sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=} + resolution: {integrity: sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==} dependencies: babel-helper-function-name: 6.24.1 babel-runtime: 6.26.0 babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-helper-replace-supers/6.24.1: - resolution: {integrity: sha1-v22/5Dk40XNpohPKiov3S2qQqxo=} + resolution: {integrity: sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==} dependencies: babel-helper-optimise-call-expression: 6.24.1 babel-messages: 6.23.0 @@ -12793,13 +11833,17 @@ packages: babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-helpers/6.24.1: - resolution: {integrity: sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=} + resolution: {integrity: sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==} dependencies: babel-runtime: 6.26.0 babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-jest/28.1.0_@babel+core@7.17.10: @@ -12823,7 +11867,7 @@ packages: - supports-color dev: true - /babel-loader/8.2.5_@babel+core@7.17.10: + /babel-loader/8.2.5_3qwzuvaup7d4ulskf4dijce23a: resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} engines: {node: '>= 8.9'} peerDependencies: @@ -12833,14 +11877,15 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 find-cache-dir: 3.3.2 loader-utils: 2.0.2 make-dir: 3.1.0 schema-utils: 2.7.1 + webpack: 5.72.0 dev: true - /babel-loader/8.2.5_lgfes7hlvohbl3uptzldef4omm: + /babel-loader/8.2.5_72ctybzk7ntig5kqkayinqycte: resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} engines: {node: '>= 8.9'} peerDependencies: @@ -12850,15 +11895,15 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 + '@babel/core': 7.17.12 find-cache-dir: 3.3.2 loader-utils: 2.0.2 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 4.46.0 + webpack: 5.72.1 dev: true - /babel-loader/8.2.5_rb5fcebzp6kx3hqg3ucus54t3m: + /babel-loader/8.2.5_@babel+core@7.17.12: resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} engines: {node: '>= 8.9'} peerDependencies: @@ -12868,15 +11913,14 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 find-cache-dir: 3.3.2 loader-utils: 2.0.2 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.72.0 dev: true - /babel-loader/8.2.5_usdhdj5awexcm2e5jtwd44bofa: + /babel-loader/8.2.5_lgfes7hlvohbl3uptzldef4omm: resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} engines: {node: '>= 8.9'} peerDependencies: @@ -12886,7 +11930,25 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.9 + find-cache-dir: 3.3.2 + loader-utils: 2.0.2 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 4.46.0 + dev: true + + /babel-loader/8.2.5_tlrwjfnbl7llelxqoonrmw2kde: + resolution: {integrity: sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + peerDependenciesMeta: + '@babel/core': + optional: true + dependencies: + '@babel/core': 7.17.12 find-cache-dir: 3.3.2 loader-utils: 2.0.2 make-dir: 3.1.0 @@ -12895,7 +11957,7 @@ packages: dev: true /babel-messages/6.23.0: - resolution: {integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=} + resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==} dependencies: babel-runtime: 6.26.0 dev: false @@ -12918,7 +11980,7 @@ packages: dev: true /babel-plugin-check-es2015-constants/6.22.0: - resolution: {integrity: sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=} + resolution: {integrity: sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==} dependencies: babel-runtime: 6.26.0 dev: false @@ -12998,7 +12060,7 @@ packages: optional: true dev: true - /babel-plugin-named-asset-import/0.3.8_@babel+core@7.17.10: + /babel-plugin-named-asset-import/0.3.8_@babel+core@7.17.12: resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==} peerDependencies: '@babel/core': ^7.1.0 @@ -13006,41 +12068,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.17.12 dev: true - /babel-plugin-polyfill-corejs2/0.2.3: - resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/compat-data': 7.16.8 - '@babel/helper-define-polyfill-provider': 0.2.4 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs2/0.2.3_@babel+core@7.17.10: - resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/compat-data': 7.16.8 - '@babel/core': 7.17.10 - '@babel/helper-define-polyfill-provider': 0.2.4_@babel+core@7.17.10 - semver: 6.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs2/0.3.1_@babel+core@7.17.10: + /babel-plugin-polyfill-corejs2/0.3.1: resolution: {integrity: sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -13049,14 +12080,13 @@ packages: optional: true dependencies: '@babel/compat-data': 7.17.7 - '@babel/core': 7.17.10 - '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.10 + '@babel/helper-define-polyfill-provider': 0.3.1 semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true + dev: false - /babel-plugin-polyfill-corejs2/0.3.1_@babel+core@7.17.9: + /babel-plugin-polyfill-corejs2/0.3.1_@babel+core@7.17.12: resolution: {integrity: sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -13065,29 +12095,13 @@ packages: optional: true dependencies: '@babel/compat-data': 7.17.7 - '@babel/core': 7.17.9 - '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.12 semver: 6.3.0 transitivePeerDependencies: - supports-color - dev: true - - /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.17.10: - resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.17.10 - core-js-compat: 3.22.4 - transitivePeerDependencies: - - supports-color - dev: true - /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.17.9: + /babel-plugin-polyfill-corejs3/0.1.7_@babel+core@7.17.12: resolution: {integrity: sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -13095,43 +12109,14 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-define-polyfill-provider': 0.1.5_@babel+core@7.17.12 core-js-compat: 3.22.4 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-polyfill-corejs3/0.2.4: - resolution: {integrity: sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/helper-define-polyfill-provider': 0.2.4 - core-js-compat: 3.20.1 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs3/0.2.4_@babel+core@7.17.10: - resolution: {integrity: sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-define-polyfill-provider': 0.2.4_@babel+core@7.17.10 - core-js-compat: 3.20.1 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-corejs3/0.5.2_@babel+core@7.17.10: + /babel-plugin-polyfill-corejs3/0.5.2: resolution: {integrity: sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -13139,14 +12124,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.10 + '@babel/helper-define-polyfill-provider': 0.3.1 core-js-compat: 3.22.2 transitivePeerDependencies: - supports-color - dev: true + dev: false - /babel-plugin-polyfill-corejs3/0.5.2_@babel+core@7.17.9: + /babel-plugin-polyfill-corejs3/0.5.2_@babel+core@7.17.12: resolution: {integrity: sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -13154,41 +12138,13 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.12 core-js-compat: 3.22.2 transitivePeerDependencies: - supports-color - dev: true - - /babel-plugin-polyfill-regenerator/0.2.3: - resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/helper-define-polyfill-provider': 0.2.4 - transitivePeerDependencies: - - supports-color - dev: false - - /babel-plugin-polyfill-regenerator/0.2.3_@babel+core@7.17.10: - resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - peerDependenciesMeta: - '@babel/core': - optional: true - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-define-polyfill-provider': 0.2.4_@babel+core@7.17.10 - transitivePeerDependencies: - - supports-color - dev: false - /babel-plugin-polyfill-regenerator/0.3.1_@babel+core@7.17.10: + /babel-plugin-polyfill-regenerator/0.3.1: resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -13196,13 +12152,12 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.10 + '@babel/helper-define-polyfill-provider': 0.3.1 transitivePeerDependencies: - supports-color - dev: true + dev: false - /babel-plugin-polyfill-regenerator/0.3.1_@babel+core@7.17.9: + /babel-plugin-polyfill-regenerator/0.3.1_@babel+core@7.17.12: resolution: {integrity: sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==} peerDependencies: '@babel/core': ^7.0.0-0 @@ -13210,11 +12165,10 @@ packages: '@babel/core': optional: true dependencies: - '@babel/core': 7.17.9 - '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.9 + '@babel/core': 7.17.12 + '@babel/helper-define-polyfill-provider': 0.3.1_@babel+core@7.17.12 transitivePeerDependencies: - supports-color - dev: true /babel-plugin-react-docgen/4.2.1: resolution: {integrity: sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ==} @@ -13227,11 +12181,11 @@ packages: dev: true /babel-plugin-syntax-async-functions/6.13.0: - resolution: {integrity: sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=} + resolution: {integrity: sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==} dev: false /babel-plugin-syntax-exponentiation-operator/6.13.0: - resolution: {integrity: sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=} + resolution: {integrity: sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==} dev: false /babel-plugin-syntax-jsx/6.18.0: @@ -13239,41 +12193,45 @@ packages: dev: true /babel-plugin-syntax-trailing-function-commas/6.22.0: - resolution: {integrity: sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=} + resolution: {integrity: sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==} dev: false /babel-plugin-transform-async-to-generator/6.24.1: - resolution: {integrity: sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=} + resolution: {integrity: sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==} dependencies: babel-helper-remap-async-to-generator: 6.24.1 babel-plugin-syntax-async-functions: 6.13.0 babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-arrow-functions/6.22.0: - resolution: {integrity: sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=} + resolution: {integrity: sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==} dependencies: babel-runtime: 6.26.0 dev: false /babel-plugin-transform-es2015-block-scoped-functions/6.22.0: - resolution: {integrity: sha1-u8UbSflk1wy42OC5ToICRs46YUE=} + resolution: {integrity: sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==} dependencies: babel-runtime: 6.26.0 dev: false /babel-plugin-transform-es2015-block-scoping/6.26.0: - resolution: {integrity: sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=} + resolution: {integrity: sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==} dependencies: babel-runtime: 6.26.0 babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 lodash: 4.17.21 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-classes/6.24.1: - resolution: {integrity: sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=} + resolution: {integrity: sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==} dependencies: babel-helper-define-map: 6.26.0 babel-helper-function-name: 6.24.1 @@ -13284,54 +12242,62 @@ packages: babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-computed-properties/6.24.1: - resolution: {integrity: sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=} + resolution: {integrity: sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==} dependencies: babel-runtime: 6.26.0 babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-destructuring/6.23.0: - resolution: {integrity: sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=} + resolution: {integrity: sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==} dependencies: babel-runtime: 6.26.0 dev: false /babel-plugin-transform-es2015-duplicate-keys/6.24.1: - resolution: {integrity: sha1-c+s9MQypaePvnskcU3QabxV2Qj4=} + resolution: {integrity: sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==} dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 dev: false /babel-plugin-transform-es2015-for-of/6.23.0: - resolution: {integrity: sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=} + resolution: {integrity: sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==} dependencies: babel-runtime: 6.26.0 dev: false /babel-plugin-transform-es2015-function-name/6.24.1: - resolution: {integrity: sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=} + resolution: {integrity: sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==} dependencies: babel-helper-function-name: 6.24.1 babel-runtime: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-literals/6.22.0: - resolution: {integrity: sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=} + resolution: {integrity: sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==} dependencies: babel-runtime: 6.26.0 dev: false /babel-plugin-transform-es2015-modules-amd/6.24.1: - resolution: {integrity: sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=} + resolution: {integrity: sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==} dependencies: babel-plugin-transform-es2015-modules-commonjs: 6.26.2 babel-runtime: 6.26.0 babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-modules-commonjs/6.26.2: @@ -13341,33 +12307,41 @@ packages: babel-runtime: 6.26.0 babel-template: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-modules-systemjs/6.24.1: - resolution: {integrity: sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=} + resolution: {integrity: sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==} dependencies: babel-helper-hoist-variables: 6.24.1 babel-runtime: 6.26.0 babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-modules-umd/6.24.1: - resolution: {integrity: sha1-rJl+YoXNGO1hdq22B9YCNErThGg=} + resolution: {integrity: sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==} dependencies: babel-plugin-transform-es2015-modules-amd: 6.24.1 babel-runtime: 6.26.0 babel-template: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-object-super/6.24.1: - resolution: {integrity: sha1-JM72muIcuDp/hgPa0CH1cusnj40=} + resolution: {integrity: sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==} dependencies: babel-helper-replace-supers: 6.24.1 babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-parameters/6.24.1: - resolution: {integrity: sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=} + resolution: {integrity: sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==} dependencies: babel-helper-call-delegate: 6.24.1 babel-helper-get-function-arity: 6.24.1 @@ -13375,23 +12349,25 @@ packages: babel-template: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-es2015-shorthand-properties/6.24.1: - resolution: {integrity: sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=} + resolution: {integrity: sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==} dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 dev: false /babel-plugin-transform-es2015-spread/6.22.0: - resolution: {integrity: sha1-1taKmfia7cRTbIGlQujdnxdG+NE=} + resolution: {integrity: sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==} dependencies: babel-runtime: 6.26.0 dev: false /babel-plugin-transform-es2015-sticky-regex/6.24.1: - resolution: {integrity: sha1-AMHNsaynERLN8M9hJsLta0V8zbw=} + resolution: {integrity: sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==} dependencies: babel-helper-regex: 6.26.0 babel-runtime: 6.26.0 @@ -13399,19 +12375,19 @@ packages: dev: false /babel-plugin-transform-es2015-template-literals/6.22.0: - resolution: {integrity: sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=} + resolution: {integrity: sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==} dependencies: babel-runtime: 6.26.0 dev: false /babel-plugin-transform-es2015-typeof-symbol/6.23.0: - resolution: {integrity: sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=} + resolution: {integrity: sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==} dependencies: babel-runtime: 6.26.0 dev: false /babel-plugin-transform-es2015-unicode-regex/6.24.1: - resolution: {integrity: sha1-04sS9C6nMj9yk4fxinxa4frrNek=} + resolution: {integrity: sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==} dependencies: babel-helper-regex: 6.26.0 babel-runtime: 6.26.0 @@ -13419,21 +12395,23 @@ packages: dev: false /babel-plugin-transform-exponentiation-operator/6.24.1: - resolution: {integrity: sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=} + resolution: {integrity: sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==} dependencies: babel-helper-builder-binary-assignment-operator-visitor: 6.24.1 babel-plugin-syntax-exponentiation-operator: 6.13.0 babel-runtime: 6.26.0 + transitivePeerDependencies: + - supports-color dev: false /babel-plugin-transform-regenerator/6.26.0: - resolution: {integrity: sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=} + resolution: {integrity: sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==} dependencies: regenerator-transform: 0.10.1 dev: false /babel-plugin-transform-strict-mode/6.24.1: - resolution: {integrity: sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=} + resolution: {integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==} dependencies: babel-runtime: 6.26.0 babel-types: 6.26.0 @@ -13495,6 +12473,8 @@ packages: browserslist: 3.2.8 invariant: 2.2.4 semver: 5.7.1 + transitivePeerDependencies: + - supports-color dev: false /babel-preset-jest/28.0.2_@babel+core@7.17.10: @@ -13512,7 +12492,7 @@ packages: dev: true /babel-register/6.26.0: - resolution: {integrity: sha1-btAhFz4vy0htestFxgCahW9kcHE=} + resolution: {integrity: sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==} dependencies: babel-core: 6.26.3 babel-runtime: 6.26.0 @@ -13521,27 +12501,31 @@ packages: lodash: 4.17.21 mkdirp: 0.5.6 source-map-support: 0.4.18 + transitivePeerDependencies: + - supports-color dev: false /babel-runtime/6.26.0: - resolution: {integrity: sha1-llxwWGaOgrVde/4E/yM3vItWR/4=} + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} dependencies: core-js: 2.6.12 regenerator-runtime: 0.11.1 dev: false /babel-template/6.26.0: - resolution: {integrity: sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=} + resolution: {integrity: sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==} dependencies: babel-runtime: 6.26.0 babel-traverse: 6.26.0 babel-types: 6.26.0 babylon: 6.18.0 lodash: 4.17.21 + transitivePeerDependencies: + - supports-color dev: false /babel-traverse/6.26.0: - resolution: {integrity: sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=} + resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==} dependencies: babel-code-frame: 6.26.0 babel-messages: 6.23.0 @@ -13552,10 +12536,12 @@ packages: globals: 9.18.0 invariant: 2.2.4 lodash: 4.17.21 + transitivePeerDependencies: + - supports-color dev: false /babel-types/6.26.0: - resolution: {integrity: sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=} + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} dependencies: babel-runtime: 6.26.0 esutils: 2.0.3 @@ -13564,10 +12550,12 @@ packages: dev: false /babelify/7.3.0: - resolution: {integrity: sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=} + resolution: {integrity: sha512-vID8Fz6pPN5pJMdlUnNFSfrlcx5MUule4k9aKs/zbZPyXxMTcRrB0M4Tarw22L8afr8eYSWxDPYCob3TdrqtlA==} dependencies: babel-core: 6.26.3 object-assign: 4.1.1 + transitivePeerDependencies: + - supports-color dev: false /babylon/6.18.0: @@ -13719,7 +12707,7 @@ packages: file-uri-to-path: 1.0.0 /bintrees/1.0.2: - resolution: {integrity: sha1-SfiW1uhYpKSZ34XDj7OZua/4QPg=} + resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} dev: false /bip32/2.0.6: @@ -13738,7 +12726,7 @@ packages: /bip39/3.0.4: resolution: {integrity: sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 create-hash: 1.2.0 pbkdf2: 3.1.2 randombytes: 2.1.0 @@ -13795,6 +12783,8 @@ packages: qs: 6.9.7 raw-body: 2.4.3 type-is: 1.6.18 + transitivePeerDependencies: + - supports-color /body-parser/1.20.0: resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==} @@ -13812,6 +12802,8 @@ packages: raw-body: 2.5.1 type-is: 1.6.18 unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color dev: false /bonjour-service/1.0.11: @@ -13923,6 +12915,25 @@ packages: transitivePeerDependencies: - supports-color + /braces/2.3.2_supports-color@4.5.0: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2_supports-color@4.5.0 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -13997,8 +13008,8 @@ packages: resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==} hasBin: true dependencies: - caniuse-lite: 1.0.30001337 - electron-to-chromium: 1.4.136 + caniuse-lite: 1.0.30001341 + electron-to-chromium: 1.4.137 dev: false /browserslist/4.20.2: @@ -14018,10 +13029,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001337 - electron-to-chromium: 1.4.136 + caniuse-lite: 1.0.30001341 + electron-to-chromium: 1.4.137 escalade: 3.1.1 - node-releases: 2.0.3 + node-releases: 2.0.4 picocolors: 1.0.0 /bs-logger/0.2.6: @@ -14115,7 +13126,7 @@ packages: node-gyp-build: 4.3.0 /builtin-modules/1.1.1: - resolution: {integrity: sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=} + resolution: {integrity: sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==} engines: {node: '>=0.10.0'} dev: false @@ -14160,7 +13171,7 @@ packages: bluebird: 3.7.2 chownr: 1.1.4 figgy-pudding: 3.5.2 - glob: 7.2.0 + glob: 7.2.3 graceful-fs: 4.2.10 infer-owner: 1.0.4 lru-cache: 5.1.1 @@ -14196,6 +13207,8 @@ packages: ssri: 8.0.1 tar: 6.1.11 unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird dev: true /cache-base/1.0.1: @@ -14298,8 +13311,8 @@ packages: resolution: {integrity: sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==} dev: true - /caniuse-lite/1.0.30001337: - resolution: {integrity: sha512-HZRbZ0QgO1wvrbbnzljfpQ05sQB1rUkr9LguxQGCk3sgbTgIw8BajHLUMFwLpPQogdqTIZcpn7i6Sf2HoOFEbA==} + /caniuse-lite/1.0.30001341: + resolution: {integrity: sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==} /canonicalize/1.0.8: resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==} @@ -14343,7 +13356,7 @@ packages: dev: false /chalk/1.1.3: - resolution: {integrity: sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=} + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} dependencies: ansi-styles: 2.2.1 @@ -14396,7 +13409,7 @@ packages: dev: false /checkpoint-store/1.1.0: - resolution: {integrity: sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=} + resolution: {integrity: sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==} dependencies: functional-red-black-tree: 1.0.1 dev: false @@ -14421,6 +13434,28 @@ packages: transitivePeerDependencies: - supports-color + /chokidar/2.1.8_supports-color@4.5.0: + resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} + deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies + dependencies: + anymatch: 2.0.0_supports-color@4.5.0 + async-each: 1.0.3 + braces: 2.3.2_supports-color@4.5.0 + glob-parent: 3.1.0 + inherits: 2.0.4 + is-binary-path: 1.0.1 + is-glob: 4.0.3 + normalize-path: 3.0.0 + path-is-absolute: 1.0.1 + readdirp: 2.2.1_supports-color@4.5.0 + upath: 1.2.0 + optionalDependencies: + fsevents: 1.2.13 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /chokidar/3.5.2: resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} engines: {node: '>= 8.10.0'} @@ -14471,6 +13506,10 @@ packages: resolution: {integrity: sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==} dev: true + /ci-info/3.3.1: + resolution: {integrity: sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==} + dev: true + /cids/0.7.5: resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} engines: {node: '>=4.0.0', npm: '>=3.0.0'} @@ -14876,6 +13915,8 @@ packages: on-headers: 1.0.2 safe-buffer: 5.1.2 vary: 1.1.2 + transitivePeerDependencies: + - supports-color /compute-scroll-into-view/1.0.17: resolution: {integrity: sha512-j4dx+Fb0URmzbwwMUrhqWM2BEWHdFGx+qZ9qqASHRPqvTYdqvWnHg0H1hIbcyLnvgnoNAVMlwkepyqM3DaIFUg==} @@ -15010,47 +14051,40 @@ packages: dependencies: toggle-selection: 1.0.6 - /copy-webpack-plugin/10.2.4_webpack@5.72.0: - resolution: {integrity: sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==} - engines: {node: '>= 12.20.0'} + /copy-webpack-plugin/11.0.0_webpack@5.72.1: + resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} + engines: {node: '>= 14.15.0'} peerDependencies: webpack: ^5.1.0 dependencies: fast-glob: 3.2.11 glob-parent: 6.0.2 - globby: 12.2.0 + globby: 13.1.1 normalize-path: 3.0.0 schema-utils: 4.0.0 serialize-javascript: 6.0.0 - webpack: 5.72.0_webpack-cli@4.9.2 + webpack: 5.72.1_webpack-cli@4.9.2 dev: true - /core-js-builder/3.22.4: - resolution: {integrity: sha512-1+67Uk5M/5i029saPw2wU3A3UOMVjkENoXYKTZ/zJSGvCVypRnCQsf7f3ZtibVdooyaD3ggqNCNshqGbckthBg==} + /core-js-builder/3.22.5: + resolution: {integrity: sha512-j67nGNL3h/OoHSgMgZabpOmOCbBK4Paa9OBjlKRkrhPXs5MBcBUYt2c4CUjrgTMTWvDFqGk6cPxEuPOKSWBR0A==} engines: {node: '>=8.9.0'} dependencies: - core-js: 3.22.4 - core-js-compat: 3.22.4 + core-js: 3.22.5 + core-js-compat: 3.22.5 mkdirp: 0.5.6 webpack: 4.46.0 transitivePeerDependencies: + - supports-color - webpack-cli - webpack-command dev: true - /core-js-compat/3.20.1: - resolution: {integrity: sha512-AVhKZNpqMV3Jz8hU0YEXXE06qoxtQGsAqU0u1neUngz5IusDJRX/ZJ6t3i7mS7QxNyEONbCo14GprkBrxPlTZA==} - dependencies: - browserslist: 4.20.3 - semver: 7.0.0 - dev: false - /core-js-compat/3.22.2: resolution: {integrity: sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==} dependencies: browserslist: 4.20.3 semver: 7.0.0 - dev: true /core-js-compat/3.22.4: resolution: {integrity: sha512-dIWcsszDezkFZrfm1cnB4f/J85gyhiCpxbgBdohWCDtSVuAaChTSpPV7ldOQf/Xds2U5xCIJZOK82G4ZPAIswA==} @@ -15059,6 +14093,13 @@ packages: semver: 7.0.0 dev: true + /core-js-compat/3.22.5: + resolution: {integrity: sha512-rEF75n3QtInrYICvJjrAgV03HwKiYvtKHdPtaba1KucG+cNZ4NJnH9isqt979e67KZlhpbCOTwnsvnIr+CVeOg==} + dependencies: + browserslist: 4.20.3 + semver: 7.0.0 + dev: true + /core-js-pure/3.21.1: resolution: {integrity: sha512-12VZfFIu+wyVbBebyHmRTuEE/tZrB4tJToWcwAMcsp3h4+sHR+fMJWbKpYiCRWlhFBq+KNyO8rIV9rTkeVmznQ==} dev: true @@ -15067,6 +14108,10 @@ packages: resolution: {integrity: sha512-Lb+/XT4WC4PaCWWtZpNPaXmjiNDUe5CJuUtbkMrIM1kb1T/jJoAIp+bkVP/r5lHzMr+ZAAF8XHp7+my6Ol0ysQ==} dev: true + /core-js-pure/3.22.5: + resolution: {integrity: sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA==} + dev: true + /core-js/1.2.7: resolution: {integrity: sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=} deprecated: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. @@ -15081,8 +14126,8 @@ packages: resolution: {integrity: sha512-Z5I2vzDnEIqO2YhELVMFcL1An2CIsFe9Q7byZhs8c/QxummxZlAHw33TUHbIte987LkisOgL0LwQ1P9D6VISnA==} dev: true - /core-js/3.22.4: - resolution: {integrity: sha512-1uLykR+iOfYja+6Jn/57743gc9n73EWiOnSJJ4ba3B4fOEYDBv25MagmEZBxTp5cWq4b/KPx/l77zgsp28ju4w==} + /core-js/3.22.5: + resolution: {integrity: sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==} /core-util-is/1.0.2: resolution: {integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=} @@ -15099,8 +14144,8 @@ packages: vary: 1.1.2 dev: false - /cosmiconfig-typescript-loader/1.0.9_ghcombcbpherolfxll753x4zfy: - resolution: {integrity: sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==} + /cosmiconfig-typescript-loader/2.0.0_irygwokje3xcg7hcy4cl5oqrma: + resolution: {integrity: sha512-2NlGul/E3vTQEANqPziqkA01vfiuUU8vT0jZAuUIjEW8u3eCcnCQWLggapCjhbF76s7KQF0fM0kXSKmzaDaG1g==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' @@ -15111,10 +14156,10 @@ packages: typescript: optional: true dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 cosmiconfig: 7.0.1 - ts-node: 10.7.0_ghcombcbpherolfxll753x4zfy - typescript: 4.6.3 + ts-node: 10.7.0_irygwokje3xcg7hcy4cl5oqrma + typescript: 4.6.4 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -15164,6 +14209,8 @@ packages: p-all: 2.1.0 p-filter: 2.1.0 p-map: 3.0.0 + transitivePeerDependencies: + - supports-color dev: true /crc-32/1.2.2: @@ -15308,41 +14355,41 @@ packages: deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. dev: false - /cspell-gitignore/5.20.0: - resolution: {integrity: sha512-oWzoHcaidX6jFON6vwiH3cA1HqkGmawD1DWt+fPWKrea9/SuTcvFxm+RbqO4DjwXEAMIczyPOWo+SCM0VbcCrA==} + /cspell-gitignore/5.21.0: + resolution: {integrity: sha512-r8Brb46X3b3z0P0+gEZiMRfAcJjzdyU+S0zszOgb/Cz1afawEctH+XNVkkoMIfezAMo1LMD70z709cN2gn/Nog==} engines: {node: '>=12.13.0'} hasBin: true dependencies: - cspell-glob: 5.20.0 + cspell-glob: 5.21.0 find-up: 5.0.0 dev: true - /cspell-glob/5.20.0: - resolution: {integrity: sha512-eyo8NYH4GapHxfilMarwvf1HIyGWT3gWuFlYkmQjYVx3KjzmfR1Y1x9S068wmwjp9kKCu9T6Vj71EGG+9R59Lw==} + /cspell-glob/5.21.0: + resolution: {integrity: sha512-5eivYmRhyRdRhsqmYqL71T36fLY0WJ5BkIzOlIgKLkZ+g9FHlmVn89u9og60QZduUtckBz9Xty62yhEyyAVr/A==} engines: {node: '>=12.13.0'} dependencies: micromatch: 4.0.5 dev: true - /cspell-io/5.20.0: - resolution: {integrity: sha512-wgqqpVIhtMh+/+3YfHt8cDfrD7OLF+xQlStlURj8AJwEJ0xu16zyI9S5zcig+83+0QyzuMdxfZiMgbdQxWEvOg==} + /cspell-io/5.21.0: + resolution: {integrity: sha512-zt/dZk5Yppg1+JQr7un4OrVSF+ODdcVRMYrqnZBY/QCBUkSFIYZ5X8cnKMZvR9ZkGRON0nid+dslDUCPaRNMcA==} engines: {node: '>=12.13.0'} dev: true - /cspell-lib/5.20.0: - resolution: {integrity: sha512-Fc7+3ExF2pNS8BsQTXSMkhR6ITbpyiMQf+y4ZH/aBml09+O6lrbj4j2tJx/oR4XvDEA8uQkV/5lMGdU+otC1KQ==} + /cspell-lib/5.21.0: + resolution: {integrity: sha512-mSeLF2/+2exvz979TJMYUA2Wh1Bw6TX1RVAOw1MT1nltpS3x0d7AE/hNufivHUXOFWrwf2mNVJZi4zXQ14GpkA==} engines: {node: '>=12.13.0'} dependencies: - '@cspell/cspell-bundled-dicts': 5.20.0 - '@cspell/cspell-pipe': 5.20.0 - '@cspell/cspell-types': 5.20.0 + '@cspell/cspell-bundled-dicts': 5.21.0 + '@cspell/cspell-pipe': 5.21.0 + '@cspell/cspell-types': 5.21.0 clear-module: 4.1.2 comment-json: 4.2.2 configstore: 5.0.1 cosmiconfig: 7.0.1 - cspell-glob: 5.20.0 - cspell-io: 5.20.0 - cspell-trie-lib: 5.20.0 + cspell-glob: 5.21.0 + cspell-io: 5.21.0 + cspell-trie-lib: 5.21.0 fast-equals: 3.0.2 find-up: 5.0.0 fs-extra: 10.1.0 @@ -15354,31 +14401,31 @@ packages: vscode-uri: 3.0.3 dev: true - /cspell-trie-lib/5.20.0: - resolution: {integrity: sha512-ET95dJh+OJ04PdLI9dKqAa+dDu47tXcUxCR6uKiZ+qZ18v1Zl986s8q89m9c+xpo7Leqh0rF6Zsw3M9Cjy6Jhw==} + /cspell-trie-lib/5.21.0: + resolution: {integrity: sha512-VjxoBKD+wXStn+PtTATACeQCwDIXQT2S6Thrlx9gNvIr90y08iaE9lfvs5BHn35kRR8FPFw1vVLQRullKMpT6g==} engines: {node: '>=12.13.0'} dependencies: - '@cspell/cspell-pipe': 5.20.0 + '@cspell/cspell-pipe': 5.21.0 fs-extra: 10.1.0 gensequence: 3.1.1 dev: true - /cspell/5.20.0: - resolution: {integrity: sha512-lXAS14ZlfJfOI3FgoAAfyl/AlTB8T+ayHmKrHxwuRRUvN4IBT4y8d7tdjWDj7/bsM4u5M5WrlAXg6vXH3Fg5bA==} + /cspell/5.21.0: + resolution: {integrity: sha512-MuEB6kKBgGaOAkG9Sp3Hen1zdctgLJ4sNms/m+djFl8unc+iK8p71qyYnOZ4aBAXtTXQNMF1xEXOt0L3JEj71g==} engines: {node: '>=12.13.0'} hasBin: true dependencies: - '@cspell/cspell-pipe': 5.20.0 + '@cspell/cspell-pipe': 5.21.0 chalk: 4.1.2 commander: 9.2.0 - cspell-gitignore: 5.20.0 - cspell-glob: 5.20.0 - cspell-lib: 5.20.0 + cspell-gitignore: 5.21.0 + cspell-glob: 5.21.0 + cspell-lib: 5.21.0 fast-json-stable-stringify: 2.1.0 file-entry-cache: 6.0.1 fs-extra: 10.1.0 get-stdin: 8.0.0 - glob: 8.0.1 + glob: 8.0.3 imurmurhash: 0.1.4 semver: 7.3.7 strip-ansi: 6.0.1 @@ -15499,6 +14546,10 @@ packages: /csstype/3.0.11: resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} + /csstype/3.1.0: + resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} + dev: false + /csv-parser/3.0.0: resolution: {integrity: sha512-s6OYSXAK3IdKqYO33y09jhypG/bSDHPuyCme/IdEHfWpLf/jKcpitVFyOC6UemgGk8v7Q5u2XE0vvwmanxhGlQ==} engines: {node: '>= 10'} @@ -15791,8 +14842,26 @@ packages: dependencies: ms: 2.0.0 + /debug/2.6.9_supports-color@4.5.0: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + supports-color: 4.5.0 + dev: false + optional: true + /debug/3.1.0: resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.0.0 dev: false @@ -16105,6 +15174,8 @@ packages: dependencies: address: 1.1.2 debug: 2.6.9 + transitivePeerDependencies: + - supports-color dev: true /did-jwt/5.12.3: @@ -16438,8 +15509,8 @@ packages: resolution: {integrity: sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==} dev: true - /electron-to-chromium/1.4.136: - resolution: {integrity: sha512-GnITX8rHnUrIVnTxU9UlsTnSemHUA2iF+6QrRqxFbp/mf0vfuSc/goEyyQhUX3TUUCE3mv/4BNuXOtaJ4ur0eA==} + /electron-to-chromium/1.4.137: + resolution: {integrity: sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==} /element-resize-detector/1.2.4: resolution: {integrity: sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==} @@ -16565,6 +15636,7 @@ packages: yeast: 0.1.2 transitivePeerDependencies: - bufferutil + - supports-color - utf-8-validate dev: false @@ -16615,6 +15687,14 @@ packages: tapable: 2.2.1 dev: true + /enhanced-resolve/5.9.3: + resolution: {integrity: sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.10 + tapable: 2.2.1 + dev: true + /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -16754,6 +15834,35 @@ packages: string.prototype.trimstart: 1.0.4 unbox-primitive: 1.0.1 + /es-abstract/1.20.1: + resolution: {integrity: sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + es-to-primitive: 1.2.1 + function-bind: 1.1.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.1.1 + get-symbol-description: 1.0.0 + has: 1.0.3 + has-property-descriptors: 1.0.0 + has-symbols: 1.0.3 + internal-slot: 1.0.3 + is-callable: 1.2.4 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-weakref: 1.0.2 + object-inspect: 1.12.0 + object-keys: 1.1.1 + object.assign: 4.1.2 + regexp.prototype.flags: 1.4.3 + string.prototype.trimend: 1.0.5 + string.prototype.trimstart: 1.0.5 + unbox-primitive: 1.0.2 + dev: false + /es-array-method-boxes-properly/1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true @@ -16927,7 +16036,7 @@ packages: - supports-color dev: true - /eslint-module-utils/2.7.3_wex3ustmkv4ospy3s77r6ihlwq: + /eslint-module-utils/2.7.3_mcjqbk7r2nrqjiufidliyvmmpu: resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} engines: {node: '>=4'} peerDependencies: @@ -16945,7 +16054,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.22.0_dx5yzralznart3ybdl432c3i44 + '@typescript-eslint/parser': 5.25.0_dx5yzralznart3ybdl432c3i44 debug: 3.2.7 eslint-import-resolver-node: 0.3.6 find-up: 2.1.0 @@ -16953,7 +16062,7 @@ packages: - supports-color dev: true - /eslint-plugin-import/2.26.0_6nacgdzqm4zbhelsxkmd2vkvxy: + /eslint-plugin-import/2.26.0_eor5fr4wgkua4fh2zz3r4cqkce: resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: @@ -16963,14 +16072,14 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.22.0_dx5yzralznart3ybdl432c3i44 + '@typescript-eslint/parser': 5.25.0_dx5yzralznart3ybdl432c3i44 array-includes: 3.1.4 array.prototype.flat: 1.2.5 debug: 2.6.9 doctrine: 2.1.0 eslint: 8.15.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3_wex3ustmkv4ospy3s77r6ihlwq + eslint-module-utils: 2.7.3_mcjqbk7r2nrqjiufidliyvmmpu has: 1.0.3 is-core-module: 2.8.1 is-glob: 4.0.3 @@ -17039,7 +16148,7 @@ packages: strip-indent: 3.0.0 dev: true - /eslint-plugin-unused-imports/2.0.0_4lhejcve573tk5ngahyfsatu2i: + /eslint-plugin-unused-imports/2.0.0_xcfg2fwnjcimwhunpire36ffsy: resolution: {integrity: sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -17049,7 +16158,7 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.22.0_dvfvfxjgp6zej7ga25lbfx7lze + '@typescript-eslint/eslint-plugin': 5.25.0_ba4jjn6kijvdzygv7x6qvskqee eslint: 8.15.0 eslint-rule-composer: 0.3.0 dev: true @@ -17225,6 +16334,8 @@ packages: json-rpc-engine: 3.8.0 pify: 2.3.0 tape: 4.15.1 + transitivePeerDependencies: + - supports-color dev: false /eth-ens-namehash/1.0.2: @@ -17250,6 +16361,10 @@ packages: servify: 0.1.12 ws: 3.3.3 xhr-request-promise: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate dev: false /eth-lib/0.2.8: @@ -17321,6 +16436,13 @@ packages: resolution: {integrity: sha512-5qwJ5n3YhjSpE6O/WEBXCAb2nagUgyagJ6C0lGUBWC4LjKp/rRzD+pwtDJ6KCiITFEAoX4eIrWOjRy0Sylq5Hg==} dev: false + /ethereumjs-abi/0.6.6: + resolution: {integrity: sha512-w8KubDsA/+OAuqtIR9RGsMcoZ5nhM8vxwjJAJvEIY+clhxA3BHoLG3+ClYQaQhD0n3mlDt3U5rBrmSVJvI3c8A==} + dependencies: + bn.js: 4.12.0 + ethereumjs-util: 5.2.1 + dev: false + /ethereumjs-abi/0.6.8: resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} dependencies: @@ -17696,6 +16818,22 @@ packages: transitivePeerDependencies: - supports-color + /expand-brackets/2.1.4_supports-color@4.5.0: + resolution: {integrity: sha1-t3c14xXOMPa27/D4OwQVGiJEliI=} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9_supports-color@4.5.0 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2_supports-color@4.5.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /expand-tilde/2.0.2: resolution: {integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=} engines: {node: '>=0.10.0'} @@ -17748,6 +16886,8 @@ packages: type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 + transitivePeerDependencies: + - supports-color /ext/1.4.0: resolution: {integrity: sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==} @@ -17799,6 +16939,23 @@ packages: transitivePeerDependencies: - supports-color + /extglob/2.0.4_supports-color@4.5.0: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4_supports-color@4.5.0 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2_supports-color@4.5.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /extract-files/9.0.0: resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} @@ -17855,6 +17012,8 @@ packages: is-glob: 4.0.3 merge2: 1.4.1 micromatch: 3.1.10 + transitivePeerDependencies: + - supports-color dev: true /fast-glob/3.2.11: @@ -18027,6 +17186,8 @@ packages: parseurl: 1.3.3 statuses: 1.5.0 unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color /find-cache-dir/2.1.0: resolution: {integrity: sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==} @@ -18209,6 +17370,7 @@ packages: peerDependenciesMeta: debug: optional: true + dev: true /follow-redirects/1.14.9_debug@4.3.4: resolution: {integrity: sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==} @@ -18222,6 +17384,16 @@ packages: debug: 4.3.4_supports-color@6.1.0 dev: false + /follow-redirects/1.15.0: + resolution: {integrity: sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: @@ -18254,9 +17426,21 @@ packages: resolution: {integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=} dev: false - /fork-ts-checker-webpack-plugin/4.1.6: + /fork-ts-checker-webpack-plugin/4.1.6_webpack@4.46.0: resolution: {integrity: sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==} engines: {node: '>=6.11.5', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: '>= 4' + peerDependenciesMeta: + eslint: + optional: true + typescript: + optional: true + vue-template-compiler: + optional: true dependencies: '@babel/code-frame': 7.16.7 chalk: 2.4.2 @@ -18264,7 +17448,10 @@ packages: minimatch: 3.1.2 semver: 5.7.1 tapable: 1.1.3 + webpack: 4.46.0 worker-rpc: 0.1.1 + transitivePeerDependencies: + - supports-color dev: true /fork-ts-checker-webpack-plugin/6.5.1_webpack@4.46.0: @@ -18502,7 +17689,6 @@ packages: define-properties: 1.1.4 es-abstract: 1.19.5 functions-have-names: 1.2.3 - dev: true /functional-red-black-tree/1.0.1: resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} @@ -18515,8 +17701,8 @@ packages: engines: {node: '>=6'} dev: true - /fuse.js/6.5.3: - resolution: {integrity: sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==} + /fuse.js/6.6.2: + resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==} engines: {node: '>=10'} dev: false @@ -18662,7 +17848,7 @@ packages: engines: {node: '>= 0.10'} dependencies: extend: 3.0.2 - glob: 7.2.0 + glob: 7.2.3 glob-parent: 3.1.0 is-negated-glob: 1.0.0 ordered-read-streams: 1.0.1 @@ -18728,16 +17914,25 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob/8.0.1: - resolution: {integrity: sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==} - engines: {node: '>=12'} + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.0.1 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + + /glob/8.0.3: + resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.0 + once: 1.4.0 dev: true /global-dirs/0.1.1: @@ -18808,11 +18003,10 @@ packages: slash: 3.0.0 dev: true - /globby/12.2.0: - resolution: {integrity: sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==} + /globby/13.1.1: + resolution: {integrity: sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - array-union: 3.0.1 dir-glob: 3.0.1 fast-glob: 3.2.11 ignore: 5.2.0 @@ -18843,6 +18037,8 @@ packages: ignore: 4.0.6 pify: 4.0.1 slash: 2.0.0 + transitivePeerDependencies: + - supports-color dev: true /glogg/1.0.2: @@ -19019,7 +18215,7 @@ packages: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.15.4 + uglify-js: 3.15.5 /har-schema/2.0.0: resolution: {integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=} @@ -19049,6 +18245,10 @@ packages: /has-bigints/1.0.1: resolution: {integrity: sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==} + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false + /has-binary2/1.0.3: resolution: {integrity: sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==} dependencies: @@ -19340,8 +18540,6 @@ packages: param-case: 3.0.4 relateurl: 0.2.7 terser: 5.10.0 - transitivePeerDependencies: - - acorn dev: true /html-parse-stringify/3.0.1: @@ -19403,9 +18601,21 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.72.0_webpack-cli@4.9.2 - transitivePeerDependencies: - - acorn + webpack: 5.72.0 + dev: true + + /html-webpack-plugin/5.5.0_webpack@5.72.1: + resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} + engines: {node: '>=10.13.0'} + peerDependencies: + webpack: ^5.20.0 + dependencies: + '@types/html-minifier-terser': 6.0.0 + html-minifier-terser: 6.0.2 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + webpack: 5.72.1_webpack-cli@4.9.2 dev: true /htmlparser2/6.1.0: @@ -19550,9 +18760,9 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - /husky/7.0.4: - resolution: {integrity: sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==} - engines: {node: '>=12'} + /husky/8.0.1: + resolution: {integrity: sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==} + engines: {node: '>=14'} hasBin: true dev: true @@ -19572,8 +18782,8 @@ packages: html-parse-stringify2: github.com/locize/html-parse-stringify2/d463109433b2c49c74a081044f54b2a6a1ccad7c dev: true - /i18next/21.7.1: - resolution: {integrity: sha512-uNt0BM+HV7wgWrrTE+Z4qinQFTONB21hK3I5V/LayhquPv78WchnO4hjF2PWY/OZocahHBDbzbe0/o1rp/RcWQ==} + /i18next/21.8.2: + resolution: {integrity: sha512-H/oQvA/OXcqurXHemlyDwdIzr9GHYg5/xBuDeFXTXJGMOJFH0ke1wgbsDjFFk2noD4cJfzicVPpUtp39Z+OzgQ==} dependencies: '@babel/runtime': 7.17.9 dev: false @@ -20035,6 +19245,12 @@ packages: dependencies: has: 1.0.3 + /is-core-module/2.9.0: + resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} + dependencies: + has: 1.0.3 + dev: true + /is-data-descriptor/0.1.4: resolution: {integrity: sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=} engines: {node: '>=0.10.0'} @@ -20512,8 +19728,8 @@ packages: resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.17.10 - '@babel/parser': 7.17.10 + '@babel/core': 7.17.12 + '@babel/parser': 7.17.12 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -20614,7 +19830,7 @@ packages: '@types/connect': 3.4.35 '@types/express-serve-static-core': 4.17.28 '@types/lodash': 4.14.181 - '@types/node': 17.0.31 + '@types/node': 17.0.34 '@types/ws': 7.4.7 commander: 2.20.3 delay: 5.0.0 @@ -20647,7 +19863,7 @@ packages: '@jest/expect': 28.1.0 '@jest/test-result': 28.1.0 '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -20687,14 +19903,14 @@ packages: jest-util: 28.1.0 jest-validate: 28.1.0 prompts: 2.4.2 - yargs: 17.4.1 + yargs: 17.5.1 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jest-config/28.1.0_6llz3imlg24hiqj7rrwntziuoi: + /jest-config/28.1.0_3sezc6gs5coetj25lugeybzyb4: resolution: {integrity: sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} peerDependencies: @@ -20709,12 +19925,12 @@ packages: '@babel/core': 7.17.10 '@jest/test-sequencer': 28.1.0 '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 babel-jest: 28.1.0_@babel+core@7.17.10 chalk: 4.1.2 ci-info: 3.3.0 deepmerge: 4.2.2 - glob: 7.2.0 + glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 28.1.0 jest-environment-node: 28.1.0 @@ -20753,7 +19969,7 @@ packages: chalk: 4.1.2 ci-info: 3.3.0 deepmerge: 4.2.2 - glob: 7.2.0 + glob: 7.2.3 graceful-fs: 4.2.10 jest-circus: 28.1.0 jest-environment-node: 28.1.0 @@ -20818,7 +20034,7 @@ packages: '@jest/environment': 28.1.0 '@jest/fake-timers': 28.1.0 '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 jest-mock: 28.1.0 jest-util: 28.1.0 dev: true @@ -20839,7 +20055,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.5 - '@types/node': 17.0.31 + '@types/node': 17.0.34 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.10 @@ -20852,6 +20068,8 @@ packages: walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 + transitivePeerDependencies: + - supports-color dev: true /jest-haste-map/28.1.0: @@ -20860,7 +20078,7 @@ packages: dependencies: '@jest/types': 28.1.0 '@types/graceful-fs': 4.1.5 - '@types/node': 17.0.31 + '@types/node': 17.0.34 anymatch: 3.1.2 fb-watchman: 2.0.1 graceful-fs: 4.2.10 @@ -20911,7 +20129,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 dev: true /jest-pnp-resolver/1.2.2_jest-resolve@28.1.0: @@ -20970,7 +20188,7 @@ packages: '@jest/test-result': 28.1.0 '@jest/transform': 28.1.0 '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 chalk: 4.1.2 emittery: 0.10.2 graceful-fs: 4.2.10 @@ -21005,7 +20223,7 @@ packages: cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 execa: 5.1.1 - glob: 7.2.0 + glob: 7.2.3 graceful-fs: 4.2.10 jest-haste-map: 28.1.0 jest-message-util: 28.1.0 @@ -21024,7 +20242,7 @@ packages: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 graceful-fs: 4.2.10 dev: true @@ -21064,33 +20282,21 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 17.0.31 + '@types/node': 17.0.34 chalk: 4.1.2 graceful-fs: 4.2.10 is-ci: 2.0.0 micromatch: 4.0.5 dev: true - /jest-util/28.0.2: - resolution: {integrity: sha512-EVdpIRCC8lzqhp9A0u0aAKlsFIzufK6xKxNK7awsnebTdOP4hpyQW5o6Ox2qPl8gbeUKYF+POLyItaND53kpGA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.0 - '@types/node': 17.0.31 - chalk: 4.1.2 - ci-info: 3.3.0 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - dev: true - /jest-util/28.1.0: resolution: {integrity: sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 chalk: 4.1.2 - ci-info: 3.3.0 + ci-info: 3.3.1 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true @@ -21113,7 +20319,7 @@ packages: dependencies: '@jest/test-result': 28.1.0 '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@types/node': 17.0.34 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 @@ -21132,7 +20338,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -21141,7 +20347,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -21150,7 +20356,7 @@ packages: resolution: {integrity: sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -21291,7 +20497,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 10.0.0 - ws: 8.5.0 + ws: 8.6.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -21337,6 +20543,8 @@ packages: json-rpc-error: 2.0.0 promise-to-callback: 1.0.0 safe-event-emitter: 1.0.1 + transitivePeerDependencies: + - supports-color dev: false /json-rpc-engine/6.1.0: @@ -21433,7 +20641,7 @@ packages: /jsonfile/4.0.0: resolution: {integrity: sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=} optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.8 /jsonfile/6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -21450,8 +20658,8 @@ packages: resolution: {integrity: sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=} engines: {'0': node >= 0.2.0} - /jsonschema/1.4.0: - resolution: {integrity: sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==} + /jsonschema/1.4.1: + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} dev: false /jsprim/1.4.2: @@ -21803,6 +21011,11 @@ packages: engines: {node: '>=6.11.5'} dev: true + /loader-runner/4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: true + /loader-utils/1.4.0: resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==} engines: {node: '>=4.0.0'} @@ -22006,9 +21219,14 @@ packages: dependencies: yallist: 4.0.0 + /lru-cache/7.10.1: + resolution: {integrity: sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==} + engines: {node: '>=12'} + /lru-cache/7.8.1: resolution: {integrity: sha512-E1v547OCgJvbvevfjgK9sNKIVXO96NnsTsFPBlg4ZxjhsJSODoH9lk8Bm0OxvHNm6Vm5Yqkl/1fErDxhYL8Skg==} engines: {node: '>=12'} + dev: true /lru_map/0.4.1: resolution: {integrity: sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==} @@ -22328,6 +21546,28 @@ packages: transitivePeerDependencies: - supports-color + /micromatch/3.1.10_supports-color@4.5.0: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2_supports-color@4.5.0 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4_supports-color@4.5.0 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13_supports-color@4.5.0 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2_supports-color@4.5.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /micromatch/4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} @@ -22433,8 +21673,8 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch/5.0.1: - resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + /minimatch/5.1.0: + resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 @@ -22798,6 +22038,26 @@ packages: transitivePeerDependencies: - supports-color + /nanomatch/1.2.13_supports-color@4.5.0: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2_supports-color@4.5.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /native-abort-controller/1.0.4_abort-controller@3.0.0: resolution: {integrity: sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==} peerDependencies: @@ -22977,8 +22237,8 @@ packages: resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} dev: true - /node-releases/2.0.3: - resolution: {integrity: sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==} + /node-releases/2.0.4: + resolution: {integrity: sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==} /normalize-package-data/2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -22993,7 +22253,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.8.1 + is-core-module: 2.9.0 semver: 7.3.7 validate-npm-package-license: 3.0.4 dev: true @@ -23018,8 +22278,8 @@ packages: engines: {node: '>=8'} dev: false - /notistack/2.0.4: - resolution: {integrity: sha512-kOJmKvTG91ElMzi4aHu82BDe1liQ0zMrBp+TnWJptgowDsTbeTKbZmsRqJNIj145BmlOtZsEE9xjcrN46zVo3w==} + /notistack/2.0.5: + resolution: {integrity: sha512-Ig2T1Muqkc1PaSQcEDrK7diKv6cBxw02Iq6uv074ySfgq524TV5lK41diAb6OSsaiWfp3aRt+T3+0MF8m2EcJQ==} peerDependencies: '@emotion/react': ^11.4.1 '@emotion/styled': ^11.3.0 @@ -23283,7 +22543,7 @@ packages: is-wsl: 2.2.0 dev: true - /opensea-js/1.2.7: + /opensea-js/1.2.7_webpack-cli@4.9.2: resolution: {integrity: sha512-s/ixGOIOpvqKiau3lSdUJF/osKVYh9yVZBpOslsk5bgRlbkJkBrfqCh0/2GH11EvX/wRYSaL70IYKvYew7g2pg==} dependencies: bignumber.js: 4.1.0 @@ -23295,11 +22555,14 @@ packages: lodash: 4.17.21 query-string: 6.13.5 web3: 0.20.7 - webpack: 3.12.0 - wyvern-js: github.com/ProjectOpenSea/wyvern-js/fabb7660f23f2252c141077e32193d281036299e + webpack: 3.12.0_webpack-cli@4.9.2 + wyvern-js: github.com/ProjectOpenSea/wyvern-js/fabb7660f23f2252c141077e32193d281036299e_webpack-cli@4.9.2 wyvern-schemas: github.com/ProjectOpenSea/wyvern-schemas/e1a08fcf8ce2b11a0fe9cbdc7c9f77c59fadef26 transitivePeerDependencies: - debug + - supports-color + - webpack-cli + - webpack-command dev: false /opn/5.5.0: @@ -24095,6 +23358,11 @@ packages: /promise-inflight/1.0.1: resolution: {integrity: sha1-mEcocL8igTL8vdhoEputEsPAKeM=} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true dev: true /promise-to-callback/1.0.0: @@ -24147,14 +23415,6 @@ packages: object-assign: 4.1.1 react-is: 16.13.1 - /prop-types/15.8.0: - resolution: {integrity: sha512-fDGekdaHh65eI3lMi5OnErU6a8Ighg2KjcjQxO7m8VHyWjcPyj5kiOgV1LQDOOOgVy3+5FgjXvdSSX7B8/5/4g==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: false - /prop-types/15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: @@ -24191,7 +23451,7 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.1 - '@types/node': 17.0.31 + '@types/node': 17.0.34 long: 4.0.0 dev: false @@ -24451,39 +23711,39 @@ packages: webpack: 4.46.0 dev: true - /react-avatar-editor/12.0.0: - resolution: {integrity: sha512-l7NrN8CXlUXbMhnbkuduAtR3+AlDz+DzYWlYBNr7q+rNeJMZlv26ap3Dk/D1WK/MPlnoS33iITlhLkuDsYQpug==} + /react-avatar-editor/13.0.0: + resolution: {integrity: sha512-0xw63MbRRQdDy7YI1IXU9+7tTFxYEFLV8CABvryYOGjZmXRTH2/UA0mafe57ns62uaEFX181kA4XlGlxCaeXKA==} peerDependencies: - react: ^0.14.0 || ^17.0.0 || 18 - react-dom: '>=0.14.0 || 18' + react: ^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || 18 + react-dom: ^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || 18 peerDependenciesMeta: react: optional: true react-dom: optional: true dependencies: - '@babel/plugin-transform-runtime': 7.15.0 - '@babel/runtime': 7.16.5 - prop-types: 15.8.0 + '@babel/plugin-transform-runtime': 7.17.12 + '@babel/runtime': 7.17.9 + prop-types: 15.8.1 transitivePeerDependencies: - '@babel/core' - supports-color dev: false - /react-avatar-editor/12.0.0_@babel+core@7.17.10: - resolution: {integrity: sha512-l7NrN8CXlUXbMhnbkuduAtR3+AlDz+DzYWlYBNr7q+rNeJMZlv26ap3Dk/D1WK/MPlnoS33iITlhLkuDsYQpug==} + /react-avatar-editor/13.0.0_@babel+core@7.17.12: + resolution: {integrity: sha512-0xw63MbRRQdDy7YI1IXU9+7tTFxYEFLV8CABvryYOGjZmXRTH2/UA0mafe57ns62uaEFX181kA4XlGlxCaeXKA==} peerDependencies: - react: ^0.14.0 || ^17.0.0 || 18 - react-dom: '>=0.14.0 || 18' + react: ^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || 18 + react-dom: ^0.14.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || 18 peerDependenciesMeta: react: optional: true react-dom: optional: true dependencies: - '@babel/plugin-transform-runtime': 7.15.0_@babel+core@7.17.10 - '@babel/runtime': 7.16.5 - prop-types: 15.8.0 + '@babel/plugin-transform-runtime': 7.17.12_@babel+core@7.17.12 + '@babel/runtime': 7.17.9 + prop-types: 15.8.1 transitivePeerDependencies: - '@babel/core' - supports-color @@ -24501,8 +23761,8 @@ packages: optional: true dev: true - /react-devtools-core/4.24.5: - resolution: {integrity: sha512-zr1LbHB5N5XjSNSCbxbfDNW8vryQdt2zYs8qnk5YacvFcwrMXGGXYoQ4gdu0rKe4mB/5MQYwgFse6IlyQiZwVw==} + /react-devtools-core/4.24.6: + resolution: {integrity: sha512-+6y6JAtAo1NUUxaCwCYTb13ViBpc7RjNTlj1HZRlDJmi7UYToj5+BNn8Duzz2YizzAzmRUWZkRM7OtqxnN6TnA==} dependencies: shell-quote: 1.7.3 ws: 7.5.7 @@ -24541,7 +23801,7 @@ packages: hoist-non-react-statics: 3.3.2 dev: false - /react-dnd/16.0.1_@types+node@17.0.31: + /react-dnd/16.0.1_@types+node@17.0.34: resolution: {integrity: sha512-QeoM/i73HHu2XF9aKksIUuamHPDvRglEwdHL4jsp784BgUuWcg6mzfxT0QDdQz8Wj0qyRKx2eMg8iZtWvU4E2Q==} peerDependencies: '@types/hoist-non-react-statics': '>= 3.3.1' @@ -24560,7 +23820,7 @@ packages: dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 - '@types/node': 17.0.31 + '@types/node': 17.0.34 dnd-core: 16.0.1 fast-deep-equal: 3.1.3 hoist-non-react-statics: 3.3.2 @@ -24620,6 +23880,22 @@ packages: dependencies: clsx: 1.1.1 prop-types: 15.7.2 + dev: true + + /react-draggable/4.4.5: + resolution: {integrity: sha512-OMHzJdyJbYTZo4uQE393fHcqqPYsEtkjfMgvCHr6rejT+Ezn4OZbNyGH50vv+SunC1RMvwOTSWkEODQLzw1M9g==} + peerDependencies: + react: '>= 16.3.0 || 18' + react-dom: '>= 16.3.0 || 18' + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + dependencies: + clsx: 1.1.1 + prop-types: 15.8.1 + dev: false /react-element-to-jsx-string/14.3.4: resolution: {integrity: sha512-t4ZwvV6vwNxzujDQ+37bspnLwA4JlgUPWhLjBJWsNIDceAf6ZKUTCjdm08cN6WeZ5pTMKiCJkmAYnpmR4Bm+dg==} @@ -24683,8 +23959,8 @@ packages: prop-types: 15.8.1 dev: false - /react-hook-form/7.30.0: - resolution: {integrity: sha512-DzjiM6o2vtDGNMB9I4yCqW8J21P314SboNG1O0obROkbg7KVS0I7bMtwSdKyapnCPjHgnxc3L7E5PEdISeEUcQ==} + /react-hook-form/7.31.1: + resolution: {integrity: sha512-QjtjZ8r8KtEBWWpcXLyQordCraTFxILtyQpaz5KLLxN2YzcC+FZ9LLtOnNGuOnzZo9gCoB+viK3ZHV9Mb2htmQ==} engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || 18 @@ -24693,7 +23969,7 @@ packages: optional: true dev: false - /react-i18next/11.16.9_2xmduy7g43rnjce2rgborrjowa: + /react-i18next/11.16.9_nlaekqjbpikw4agfyzvj2iejnm: resolution: {integrity: sha512-euXxWvcEAvsY7ZVkwx9ztCq4butqtsGHEkpkuo0RMj8Ru09IF9o2KxCyN+zyv51Nr0aBh/elaTIiR6fMb8YfVg==} peerDependencies: i18next: '>= 19.0.0' @@ -24711,7 +23987,7 @@ packages: '@babel/runtime': 7.17.9 html-escaper: 2.0.2 html-parse-stringify: 3.0.1 - i18next: 21.7.1 + i18next: 21.8.2 react: 18.1.0 react-dom: 18.1.0_react@18.1.0 dev: false @@ -24864,8 +24140,8 @@ packages: - '@types/react' dev: true - /react-to-print/2.14.6: - resolution: {integrity: sha512-LlhbfNAzPm6AOGmCcsVzgyDIBFs5lTXOMpRL+IUmZRZU04i79rujEj5nXKmbRTPTZV8ezLIHSY6ecj4y0lD5iA==} + /react-to-print/2.14.7: + resolution: {integrity: sha512-lWVVAs9Co25uyE0toxcWeFsmaZObwUozXrJD9WMpDPclpBgk+WIzxlt3Q3omL/BCBG/cpf0XNvhayUWa+99YGw==} peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || 18 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || 18 @@ -25076,6 +24352,18 @@ packages: transitivePeerDependencies: - supports-color + /readdirp/2.2.1_supports-color@4.5.0: + resolution: {integrity: sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==} + engines: {node: '>=0.10'} + dependencies: + graceful-fs: 4.2.10 + micromatch: 3.1.10_supports-color@4.5.0 + readable-stream: 2.3.7 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /readdirp/3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -25489,14 +24777,14 @@ packages: value-or-function: 3.0.0 dev: true - /resolve-typescript-plugin/1.2.0_webpack@5.72.0: + /resolve-typescript-plugin/1.2.0_webpack@5.72.1: resolution: {integrity: sha512-f0tu3fDdKcSmbgpLDNBKiMYPPG7D19tYCnph9B7GIlMMIWnbiLjAqqPXZVeO3POQSNF7ZYK4Ox+Gmvo116ERWQ==} engines: {node: ^12 || ^14 || >=16} peerDependencies: webpack: ^4.0.0 || ^5.0.0 dependencies: tslib: 2.3.1 - webpack: 5.72.0_webpack-cli@4.9.2 + webpack: 5.72.1_webpack-cli@4.9.2 dev: true /resolve-url/0.2.1: @@ -25617,7 +24905,7 @@ packages: dependencies: bn.js: 5.2.0 - /rollup-plugin-dts/4.2.1_rollup@2.72.0: + /rollup-plugin-dts/4.2.1_rollup@2.73.0: resolution: {integrity: sha512-eaxQZNUJ5iQcxNGlpJ1CUgG4OSVqWjDZ3nNSWBIoGrpcote2aNphSe1RJOaSYkb8dwn3o+rYm1vvld/5z3EGSQ==} engines: {node: '>=v12.22.11'} peerDependencies: @@ -25628,27 +24916,25 @@ packages: optional: true dependencies: magic-string: 0.26.1 - rollup: 2.72.0 + rollup: 2.73.0 optionalDependencies: '@babel/code-frame': 7.16.7 dev: true - /rollup-plugin-terser/7.0.2_rollup@2.72.0: + /rollup-plugin-terser/7.0.2_rollup@2.73.0: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} peerDependencies: rollup: ^2.0.0 dependencies: '@babel/code-frame': 7.16.0 jest-worker: 26.6.2 - rollup: 2.72.0 + rollup: 2.73.0 serialize-javascript: 4.0.0 terser: 5.10.0 - transitivePeerDependencies: - - acorn dev: true - /rollup/2.72.0: - resolution: {integrity: sha512-KqtR2YcO35/KKijg4nx4STO3569aqCUeGRkKWnJ6r+AvBBrVY9L4pmf4NHVrQr4mTOq6msbohflxr2kpihhaOA==} + /rollup/2.73.0: + resolution: {integrity: sha512-h/UngC3S4Zt28mB3g0+2YCMegT5yoftnQplwzPqGZcKvlld5e+kT/QRmJiL+qxGyZKOYpgirWGdLyEO1b0dpLQ==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: @@ -25804,6 +25090,8 @@ packages: micromatch: 3.1.10 minimist: 1.2.6 walker: 1.0.8 + transitivePeerDependencies: + - supports-color dev: true /saxes/5.0.1: @@ -25976,6 +25264,8 @@ packages: on-finished: 2.3.0 range-parser: 1.2.1 statuses: 1.5.0 + transitivePeerDependencies: + - supports-color /serialize-javascript/4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} @@ -26017,6 +25307,8 @@ packages: http-errors: 1.6.3 mime-types: 2.1.35 parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color /serve-static/1.14.2: resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==} @@ -26026,6 +25318,8 @@ packages: escape-html: 1.0.3 parseurl: 1.3.3 send: 0.17.2 + transitivePeerDependencies: + - supports-color /servify/0.1.12: resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} @@ -26036,6 +25330,8 @@ packages: express: 4.17.3 request: 2.88.2 xhr: 2.6.0 + transitivePeerDependencies: + - supports-color dev: false /ses/0.15.15: @@ -26242,6 +25538,23 @@ packages: transitivePeerDependencies: - supports-color + /snapdragon/0.8.2_supports-color@4.5.0: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9_supports-color@4.5.0 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /socket.io-client/2.4.0: resolution: {integrity: sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==} dependencies: @@ -26258,6 +25571,7 @@ packages: to-array: 0.1.4 transitivePeerDependencies: - bufferutil + - supports-color - utf-8-validate dev: false @@ -26267,6 +25581,8 @@ packages: component-emitter: 1.3.0 debug: 3.1.0 isarray: 2.0.1 + transitivePeerDependencies: + - supports-color dev: false /sockjs-client/1.6.0: @@ -26306,7 +25622,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /source-map-loader/3.0.1_webpack@5.72.0: + /source-map-loader/3.0.1_webpack@5.72.1: resolution: {integrity: sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -26315,7 +25631,7 @@ packages: abab: 2.0.5 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.72.0_webpack-cli@4.9.2 + webpack: 5.72.1_webpack-cli@4.9.2 dev: true /source-map-resolve/0.5.3: @@ -26765,7 +26081,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.19.5 + es-abstract: 1.20.1 dev: false /string.prototype.trimend/1.0.4: @@ -26774,12 +26090,28 @@ packages: call-bind: 1.0.2 define-properties: 1.1.4 + /string.prototype.trimend/1.0.5: + resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: false + /string.prototype.trimstart/1.0.4: resolution: {integrity: sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 + /string.prototype.trimstart/1.0.5: + resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.20.1 + dev: false + /string_decoder/0.10.31: resolution: {integrity: sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=} dev: false @@ -26992,25 +26324,29 @@ packages: setimmediate: 1.0.5 tar: 4.4.19 xhr-request: 1.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate dev: false - /swc-loader/0.2.0_bv6b5h5gpy5xmvv4nr5rsqz4y4: - resolution: {integrity: sha512-HefatIgiOaAekVcUPwT5hRNrWF3nULGv5nqGuXeHR7wz1HNN/VGlgmJE830yhIA7X3dHPln4yUTPnZ3ws7B5Fg==} + /swc-loader/0.2.1_webpack@5.72.1: + resolution: {integrity: sha512-opJG9R5Dl+Fa0QihOZO9v6vueB+JzRhJZw+c4ZRCqUHG2RZL10eHZRHMdQoDz6bvLp7XWe7XBIMUkuWtoGfMJw==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - '@swc/core': 1.2.177 - webpack: 5.72.0_@swc+core@1.2.177 + webpack: 5.72.1_webpack-cli@4.9.2 dev: true - /swc-loader/0.2.0_webpack@5.72.0: - resolution: {integrity: sha512-HefatIgiOaAekVcUPwT5hRNrWF3nULGv5nqGuXeHR7wz1HNN/VGlgmJE830yhIA7X3dHPln4yUTPnZ3ws7B5Fg==} + /swc-loader/0.2.1_x4y5r4zvu22k667e7z56zns5yi: + resolution: {integrity: sha512-opJG9R5Dl+Fa0QihOZO9v6vueB+JzRhJZw+c4ZRCqUHG2RZL10eHZRHMdQoDz6bvLp7XWe7XBIMUkuWtoGfMJw==} peerDependencies: '@swc/core': ^1.2.147 webpack: '>=2' dependencies: - webpack: 5.72.0_webpack-cli@4.9.2 + '@swc/core': 1.2.177 + webpack: 5.72.1_@swc+core@1.2.177 dev: true /symbol-tree/3.2.4: @@ -27059,7 +26395,7 @@ packages: defined: 1.0.0 dotignore: 0.1.2 for-each: 0.3.3 - glob: 7.2.0 + glob: 7.2.3 has: 1.0.3 inherits: 2.0.4 is-regex: 1.1.4 @@ -27155,9 +26491,11 @@ packages: terser: 5.12.1 webpack: 4.46.0 webpack-sources: 1.4.3 + transitivePeerDependencies: + - bluebird dev: true - /terser-webpack-plugin/5.3.1_bv6b5h5gpy5xmvv4nr5rsqz4y4: + /terser-webpack-plugin/5.3.1_webpack@5.72.0: resolution: {integrity: sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -27173,16 +26511,15 @@ packages: uglify-js: optional: true dependencies: - '@swc/core': 1.2.177 jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.0 source-map: 0.6.1 terser: 5.12.1 - webpack: 5.72.0_@swc+core@1.2.177 + webpack: 5.72.0 dev: true - /terser-webpack-plugin/5.3.1_webpack@5.72.0: + /terser-webpack-plugin/5.3.1_webpack@5.72.1: resolution: {integrity: sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -27203,7 +26540,32 @@ packages: serialize-javascript: 6.0.0 source-map: 0.6.1 terser: 5.12.1 - webpack: 5.72.0 + webpack: 5.72.1 + dev: true + + /terser-webpack-plugin/5.3.1_x4y5r4zvu22k667e7z56zns5yi: + resolution: {integrity: sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@swc/core': 1.2.177 + jest-worker: 27.5.1 + schema-utils: 3.1.1 + serialize-javascript: 6.0.0 + source-map: 0.6.1 + terser: 5.12.1 + webpack: 5.72.1_@swc+core@1.2.177 dev: true /terser/4.8.0: @@ -27221,8 +26583,6 @@ packages: resolution: {integrity: sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==} engines: {node: '>=10'} hasBin: true - peerDependencies: - acorn: ^8.5.0 peerDependenciesMeta: acorn: optional: true @@ -27566,8 +26926,8 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest/28.0.1_xactucw2klfireixld4575ducu: - resolution: {integrity: sha512-PbkbitaT/9ZYAqqzk3UYTvCq080Seo46T3m/AdwcZ0D8WH2uBhG6PvA8oOAWsZIknzPQU66fYobvFCL8IqIhmg==} + /ts-jest/28.0.2_xactucw2klfireixld4575ducu: + resolution: {integrity: sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} hasBin: true peerDependencies: @@ -27592,7 +26952,7 @@ packages: bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 jest: 28.1.0_ts-node@10.7.0 - jest-util: 28.0.2 + jest-util: 28.1.0 json5: 2.2.1 lodash.memoize: 4.1.2 make-error: 1.3.6 @@ -27669,7 +27029,7 @@ packages: yn: 3.1.1 dev: true - /ts-node/10.7.0_ghcombcbpherolfxll753x4zfy: + /ts-node/10.7.0_irygwokje3xcg7hcy4cl5oqrma: resolution: {integrity: sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==} hasBin: true peerDependencies: @@ -27693,14 +27053,14 @@ packages: '@tsconfig/node12': 1.0.9 '@tsconfig/node14': 1.0.1 '@tsconfig/node16': 1.0.2 - '@types/node': 17.0.31 + '@types/node': 17.0.34 acorn: 8.7.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.6.3 + typescript: 4.6.4 v8-compile-cache-lib: 3.0.0 yn: 3.1.1 dev: true @@ -27780,7 +27140,7 @@ packages: chalk: 2.4.2 commander: 2.20.3 diff: 4.0.2 - glob: 7.2.0 + glob: 7.2.3 js-yaml: 3.14.1 minimatch: 3.1.2 mkdirp: 0.5.6 @@ -28025,8 +27385,8 @@ packages: hasBin: true dev: false - /typescript/4.6.3: - resolution: {integrity: sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==} + /typescript/4.6.4: + resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} engines: {node: '>=4.2.0'} hasBin: true dev: true @@ -28074,8 +27434,8 @@ packages: uglify-to-browserify: 1.0.2 dev: false - /uglify-js/3.15.4: - resolution: {integrity: sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==} + /uglify-js/3.15.5: + resolution: {integrity: sha512-hNM5q5GbBRB5xB+PMqVRcgYe4c8jbyZ1pzZhS6jbq54/4F2gFK869ZheiE5A8/t+W5jtTNpWef/5Q9zk639FNQ==} engines: {node: '>=0.8.0'} hasBin: true optional: true @@ -28093,7 +27453,7 @@ packages: dependencies: source-map: 0.5.7 uglify-js: 2.8.29 - webpack: 3.12.0 + webpack: 3.12.0_webpack-cli@4.9.2 webpack-sources: 1.4.3 dev: false @@ -28126,6 +27486,15 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.2 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: false + /unc-path-regex/0.1.2: resolution: {integrity: sha1-5z3T17DXxe2G+6xrCufYxqadUPo=} engines: {node: '>=0.10.0'} @@ -28714,6 +28083,18 @@ packages: resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} dependencies: chokidar: 2.1.8 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /watchpack-chokidar2/2.0.1_supports-color@4.5.0: + resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==} + dependencies: + chokidar: 2.1.8_supports-color@4.5.0 + transitivePeerDependencies: + - supports-color + dev: false optional: true /watchpack/1.7.5: @@ -28724,6 +28105,21 @@ packages: optionalDependencies: chokidar: 3.5.3 watchpack-chokidar2: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /watchpack/1.7.5_supports-color@4.5.0: + resolution: {integrity: sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==} + dependencies: + graceful-fs: 4.2.10 + neo-async: 2.6.2 + optionalDependencies: + chokidar: 3.5.3 + watchpack-chokidar2: 2.0.1_supports-color@4.5.0 + transitivePeerDependencies: + - supports-color + dev: false /watchpack/2.3.1: resolution: {integrity: sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==} @@ -28754,9 +28150,13 @@ packages: resolution: {integrity: sha512-y2i2IW0MfSqFc1JBhBSQ59Ts9xE30hhxSmLS13jLKWzie24/An5dnoGarp2rFAy20tevJu1zJVPYrEl14jiL5w==} engines: {node: '>=8.0.0'} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 got: 9.6.0 swarm-js: 0.1.40 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate dev: false /web3-core-helpers/1.7.3: @@ -28806,7 +28206,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: '@types/bn.js': 4.11.6 - '@types/node': 17.0.31 + '@types/node': 17.0.34 bignumber.js: 9.0.2 web3-core-helpers: 1.7.3 web3-core-method: 1.7.3 @@ -28837,6 +28237,8 @@ packages: web3-core-helpers: 1.7.3 web3-core-method: 1.7.3 web3-utils: 1.7.3 + transitivePeerDependencies: + - supports-color dev: false /web3-eth-contract/1.7.3: @@ -28851,6 +28253,8 @@ packages: web3-core-subscriptions: 1.7.3 web3-eth-abi: 1.7.3 web3-utils: 1.7.3 + transitivePeerDependencies: + - supports-color /web3-eth-ens/1.7.3: resolution: {integrity: sha512-q7+hFGHIc0mBI3LwgRVcLCQmp6GItsWgUtEZ5bjwdjOnJdbjYddm7PO9RDcTDQ6LIr7hqYaY4WTRnDHZ6BEt5Q==} @@ -28864,6 +28268,8 @@ packages: web3-eth-abi: 1.7.3 web3-eth-contract: 1.7.3 web3-utils: 1.7.3 + transitivePeerDependencies: + - supports-color dev: false /web3-eth-iban/1.7.3: @@ -28877,12 +28283,14 @@ packages: resolution: {integrity: sha512-iTLz2OYzEsJj2qGE4iXC1Gw+KZN924fTAl0ESBFs2VmRhvVaM7GFqZz/wx7/XESl3GVxGxlRje3gNK0oGIoYYQ==} engines: {node: '>=8.0.0'} dependencies: - '@types/node': 17.0.31 + '@types/node': 17.0.34 web3-core: 1.7.3 web3-core-helpers: 1.7.3 web3-core-method: 1.7.3 web3-net: 1.7.3 web3-utils: 1.7.3 + transitivePeerDependencies: + - supports-color dev: false /web3-eth/1.7.3: @@ -28901,6 +28309,8 @@ packages: web3-eth-personal: 1.7.3 web3-net: 1.7.3 web3-utils: 1.7.3 + transitivePeerDependencies: + - supports-color dev: false /web3-net/1.7.3: @@ -28910,6 +28320,8 @@ packages: web3-core: 1.7.3 web3-core-method: 1.7.3 web3-utils: 1.7.3 + transitivePeerDependencies: + - supports-color dev: false /web3-provider-engine/13.8.0: @@ -28934,6 +28346,8 @@ packages: tape: 4.15.1 xhr: 2.6.0 xtend: 4.0.2 + transitivePeerDependencies: + - supports-color dev: false /web3-providers-http/1.7.3: @@ -28968,6 +28382,8 @@ packages: web3-core-method: 1.7.3 web3-core-subscriptions: 1.7.3 web3-net: 1.7.3 + transitivePeerDependencies: + - supports-color dev: false /web3-utils/1.7.3: @@ -29003,6 +28419,10 @@ packages: web3-net: 1.7.3 web3-shh: 1.7.3 web3-utils: 1.7.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate dev: false /webcrypto-core/1.4.0: @@ -29044,7 +28464,7 @@ packages: engines: {node: '>=12'} dev: false - /webpack-cli/4.9.2_4evrg3m2qioscfus6hwjof6pci: + /webpack-cli/4.9.2_cwh63z5eu3fmemh7flfnfpcp74: resolution: {integrity: sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -29065,7 +28485,7 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.6 - '@webpack-cli/configtest': 1.1.1_q7qo2wgeiyigo3znjsjh7f36ue + '@webpack-cli/configtest': 1.1.1_smhu6mcfcg7aivfsuosc335k3u '@webpack-cli/info': 1.4.1_webpack-cli@4.9.2 '@webpack-cli/serve': 1.6.1_efhxflzxrvzsrtpw5o3zelaodm colorette: 2.0.16 @@ -29075,8 +28495,8 @@ packages: import-local: 3.1.0 interpret: 2.2.0 rechoir: 0.7.1 - webpack: 5.72.0_webpack-cli@4.9.2 - webpack-dev-server: 4.9.0_q7qo2wgeiyigo3znjsjh7f36ue + webpack: 5.72.1_webpack-cli@4.9.2 + webpack-dev-server: 4.9.0_smhu6mcfcg7aivfsuosc335k3u webpack-merge: 5.8.0 dev: true @@ -29122,7 +28542,7 @@ packages: webpack: 5.72.0 dev: true - /webpack-dev-middleware/5.3.1_webpack@5.72.0: + /webpack-dev-middleware/5.3.1_webpack@5.72.1: resolution: {integrity: sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -29133,7 +28553,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.72.0_webpack-cli@4.9.2 + webpack: 5.72.1_webpack-cli@4.9.2 dev: true /webpack-dev-server/3.11.3: @@ -29182,7 +28602,7 @@ packages: yargs: 13.3.2 dev: false - /webpack-dev-server/4.9.0_q7qo2wgeiyigo3znjsjh7f36ue: + /webpack-dev-server/4.9.0_smhu6mcfcg7aivfsuosc335k3u: resolution: {integrity: sha512-+Nlb39iQSOSsFv0lWUuUTim3jDQO8nhK3E68f//J2r5rIcp4lULHXz2oZ0UVdEeWXEh5lSzYUlzarZhDAeAVQw==} engines: {node: '>= 12.13.0'} hasBin: true @@ -29219,9 +28639,9 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.72.0_webpack-cli@4.9.2 - webpack-cli: 4.9.2_4evrg3m2qioscfus6hwjof6pci - webpack-dev-middleware: 5.3.1_webpack@5.72.0 + webpack: 5.72.1_webpack-cli@4.9.2 + webpack-cli: 4.9.2_cwh63z5eu3fmemh7flfnfpcp74 + webpack-dev-middleware: 5.3.1_webpack@5.72.1 ws: 8.5.0 transitivePeerDependencies: - bufferutil @@ -29274,29 +28694,39 @@ packages: engines: {node: '>=10.13.0'} dev: true - /webpack-target-webextension/1.0.3_webpack@5.72.0: + /webpack-target-webextension/1.0.3_webpack@5.72.1: resolution: {integrity: sha512-IQCEIyRjjHqMtouIOO8v6OcwTi1xY0dCsmSd9XjEZ+ZG0Sy8GbtK3V9vit2YUdStiH5eUPUG0Uya6XKnA298yw==} engines: {node: '>=14.17.6'} peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.72.0_webpack-cli@4.9.2 + webpack: 5.72.1_webpack-cli@4.9.2 dev: true /webpack-virtual-modules/0.2.2: resolution: {integrity: sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==} dependencies: debug: 3.2.7 + transitivePeerDependencies: + - supports-color dev: true /webpack-virtual-modules/0.4.3: resolution: {integrity: sha512-5NUqC2JquIL2pBAAo/VfBP6KuGkHIZQXW/lNKupLPfhViwh8wNsu0BObtl09yuKZszeEUfbXz8xhrHvSG16Nqw==} dev: true - /webpack/3.12.0: + /webpack/3.12.0_webpack-cli@4.9.2: resolution: {integrity: sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} hasBin: true + peerDependencies: + webpack-cli: '*' + webpack-command: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + webpack-command: + optional: true dependencies: acorn: 5.7.4 acorn-dynamic-import: 2.0.2 @@ -29317,7 +28747,8 @@ packages: supports-color: 4.5.0 tapable: 0.2.9 uglifyjs-webpack-plugin: 0.4.6_webpack@3.12.0 - watchpack: 1.7.5 + watchpack: 1.7.5_supports-color@4.5.0 + webpack-cli: 4.9.2_cwh63z5eu3fmemh7flfnfpcp74 webpack-sources: 1.4.3 yargs: 8.0.2 dev: false @@ -29358,6 +28789,8 @@ packages: terser-webpack-plugin: 1.4.5_webpack@4.46.0 watchpack: 1.7.5 webpack-sources: 1.4.3 + transitivePeerDependencies: + - supports-color dev: true /webpack/5.72.0: @@ -29400,8 +28833,8 @@ packages: - uglify-js dev: true - /webpack/5.72.0_@swc+core@1.2.177: - resolution: {integrity: sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==} + /webpack/5.72.1: + resolution: {integrity: sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -29415,23 +28848,23 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.7.0 - acorn-import-assertions: 1.8.0_acorn@8.7.0 + acorn: 8.7.1 + acorn-import-assertions: 1.8.0_acorn@8.7.1 browserslist: 4.20.3 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.9.2 + enhanced-resolve: 5.9.3 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.10 - json-parse-better-errors: 1.0.2 - loader-runner: 4.2.0 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.1_bv6b5h5gpy5xmvv4nr5rsqz4y4 + terser-webpack-plugin: 5.3.1_webpack@5.72.1 watchpack: 2.3.1 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -29440,8 +28873,8 @@ packages: - uglify-js dev: true - /webpack/5.72.0_webpack-cli@4.9.2: - resolution: {integrity: sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==} + /webpack/5.72.1_@swc+core@1.2.177: + resolution: {integrity: sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -29455,25 +28888,65 @@ packages: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/wasm-edit': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - acorn: 8.7.0 - acorn-import-assertions: 1.8.0_acorn@8.7.0 + acorn: 8.7.1 + acorn-import-assertions: 1.8.0_acorn@8.7.1 browserslist: 4.20.3 chrome-trace-event: 1.0.3 - enhanced-resolve: 5.9.2 + enhanced-resolve: 5.9.3 es-module-lexer: 0.9.3 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.10 - json-parse-better-errors: 1.0.2 - loader-runner: 4.2.0 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.1_webpack@5.72.0 + terser-webpack-plugin: 5.3.1_x4y5r4zvu22k667e7z56zns5yi + watchpack: 2.3.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /webpack/5.72.1_webpack-cli@4.9.2: + resolution: {integrity: sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.3 + '@types/estree': 0.0.51 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.7.1 + acorn-import-assertions: 1.8.0_acorn@8.7.1 + browserslist: 4.20.3 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.9.3 + es-module-lexer: 0.9.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.10 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.1_webpack@5.72.1 watchpack: 2.3.1 - webpack-cli: 4.9.2_4evrg3m2qioscfus6hwjof6pci + webpack-cli: 4.9.2_cwh63z5eu3fmemh7flfnfpcp74 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -29706,6 +29179,14 @@ packages: /ws/3.3.3: resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true dependencies: async-limiter: 1.0.1 safe-buffer: 5.1.2 @@ -29796,6 +29277,7 @@ packages: optional: true utf-8-validate: optional: true + dev: true /ws/8.5.0_x777ijy3rhlcr2bth2wybu6y5a: resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} @@ -29813,6 +29295,19 @@ packages: utf-8-validate: 5.0.8 dev: false + /ws/8.6.0: + resolution: {integrity: sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xdg-basedir/4.0.0: resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} engines: {node: '>=8'} @@ -30050,8 +29545,8 @@ packages: yargs-parser: 21.0.0 dev: true - /yargs/17.4.1: - resolution: {integrity: sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==} + /yargs/17.5.1: + resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} engines: {node: '>=12'} dependencies: cliui: 7.0.4 @@ -30163,8 +29658,8 @@ packages: commander: 2.20.3 dev: false - /zod/3.14.4: - resolution: {integrity: sha512-U9BFLb2GO34Sfo9IUYp0w3wJLlmcyGoMd75qU9yf+DrdGA4kEx6e+l9KOkAlyUO0PSQzZCa3TR4qVlcmwqSDuw==} + /zod/3.16.0: + resolution: {integrity: sha512-szrIkryADbTM+xBt2a1KoS2CJQXec4f9xG78bj5MJeEH/XqmmHpnO+fG3IE115AKBJak+2HrbxLZkc9mhdbDKA==} dev: false /zwitch/1.0.5: @@ -30186,13 +29681,14 @@ packages: ethereumjs-abi: github.com/ProjectWyvern/ethereumjs-abi/3d2d89641a6ad5984929b6ca4b646452ec74f73d ethereumjs-util: 5.2.1 json-loader: 0.5.7 - jsonschema: 1.4.0 + jsonschema: 1.4.1 lodash: 4.17.21 web3: 0.20.7 dev: false - github.com/ProjectOpenSea/wyvern-js/fabb7660f23f2252c141077e32193d281036299e: + github.com/ProjectOpenSea/wyvern-js/fabb7660f23f2252c141077e32193d281036299e_webpack-cli@4.9.2: resolution: {tarball: https://codeload.github.com/ProjectOpenSea/wyvern-js/tar.gz/fabb7660f23f2252c141077e32193d281036299e} + id: github.com/ProjectOpenSea/wyvern-js/fabb7660f23f2252c141077e32193d281036299e name: wyvern-js version: 3.2.0 dependencies: @@ -30203,14 +29699,14 @@ packages: '@0xproject/utils': 0.1.3 '@0xproject/web3-wrapper': 0.1.14 '@types/lodash': 4.14.182 - '@types/node': 17.0.31 + '@types/node': 17.0.34 0x.js: 0.29.2 awesome-typescript-loader: 3.5.0_typescript@2.9.2 bn.js: 4.12.0 ethereumjs-abi: github.com/ProjectWyvern/ethereumjs-abi/3d2d89641a6ad5984929b6ca4b646452ec74f73d ethereumjs-util: 5.2.1 json-loader: 0.5.7 - jsonschema: 1.4.0 + jsonschema: 1.4.1 lodash: 4.17.21 ts-node: 6.2.0 tslint: 5.20.1_typescript@2.9.2 @@ -30220,7 +29716,11 @@ packages: typescript: 2.9.2 typescript-eslint-parser: 16.0.1_typescript@2.9.2 web3: 0.20.7 - webpack: 3.12.0 + webpack: 3.12.0_webpack-cli@4.9.2 + transitivePeerDependencies: + - supports-color + - webpack-cli + - webpack-command dev: false github.com/ProjectOpenSea/wyvern-schemas/e1a08fcf8ce2b11a0fe9cbdc7c9f77c59fadef26: @@ -30236,6 +29736,7 @@ packages: wyvern-js: github.com/ProjectOpenSea/wyvern-js/6f85f1b42f0962d2cc8e97b7e7f680865e3f26c1 transitivePeerDependencies: - debug + - supports-color dev: false github.com/ProjectWyvern/ethereumjs-abi/3d2d89641a6ad5984929b6ca4b646452ec74f73d: From 347358e946ba611a43d526ab2e6fc6a1064cde87 Mon Sep 17 00:00:00 2001 From: septs Date: Wed, 18 May 2022 13:30:36 +0800 Subject: [PATCH 11/29] fix: feature promotions (#6283) --- .../src/components/PageFrame/FeaturePromotions/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/dashboard/src/components/PageFrame/FeaturePromotions/index.tsx b/packages/dashboard/src/components/PageFrame/FeaturePromotions/index.tsx index 1dd049428263..a2533c89433e 100644 --- a/packages/dashboard/src/components/PageFrame/FeaturePromotions/index.tsx +++ b/packages/dashboard/src/components/PageFrame/FeaturePromotions/index.tsx @@ -70,7 +70,7 @@ export const FeaturePromotions = memo(() => {
openTwitter(PluginId.RedPacket)} src={new URL('./SendLuckyDrop.png', import.meta.url).toString()} /> Date: Wed, 18 May 2022 13:51:27 +0800 Subject: [PATCH 12/29] docs(i18n): sync i18n files from Crowdin (#6288) * New translations en-US.json (Japanese) docs(i18n): sync translation en-US.json for Japanese * New translations en-US.json (Korean) docs(i18n): sync translation en-US.json for Korean * New translations en-US.json (Chinese Simplified) docs(i18n): sync translation en-US.json for Chinese Simplified * New translations en-US.json (Chinese Traditional) docs(i18n): sync translation en-US.json for Chinese Traditional * New translations en-US.json (Quenya) docs(i18n): sync translation en-US.json for Quenya * New translations en-US.json (Chinese Traditional) docs(i18n): sync translation en-US.json for Chinese Traditional * New translations en-US.json (Chinese Simplified) docs(i18n): sync translation en-US.json for Chinese Simplified * New translations en-US.json (Korean) docs(i18n): sync translation en-US.json for Korean * New translations en-US.json (Japanese) docs(i18n): sync translation en-US.json for Japanese * New translations en-US.json (Quenya) docs(i18n): sync translation en-US.json for Quenya --- packages/mask/shared-ui/locales/ja-JP.json | 2 ++ packages/mask/shared-ui/locales/ko-KR.json | 6 +++-- packages/mask/shared-ui/locales/qya-AA.json | 22 ++++++++++----- packages/mask/shared-ui/locales/zh-CN.json | 9 +++---- packages/mask/shared-ui/locales/zh-TW.json | 2 ++ .../src/plugins/Avatar/locales/ja-JP.json | 1 + .../src/plugins/Avatar/locales/ko-KR.json | 1 + .../src/plugins/Avatar/locales/qya-AA.json | 27 +++++++++++++++++++ .../src/plugins/Avatar/locales/zh-CN.json | 1 + .../src/plugins/Avatar/locales/zh-TW.json | 1 + 10 files changed, 59 insertions(+), 13 deletions(-) create mode 100644 packages/mask/src/plugins/Avatar/locales/ja-JP.json create mode 100644 packages/mask/src/plugins/Avatar/locales/ko-KR.json create mode 100644 packages/mask/src/plugins/Avatar/locales/qya-AA.json create mode 100644 packages/mask/src/plugins/Avatar/locales/zh-CN.json create mode 100644 packages/mask/src/plugins/Avatar/locales/zh-TW.json diff --git a/packages/mask/shared-ui/locales/ja-JP.json b/packages/mask/shared-ui/locales/ja-JP.json index 22e985b3dab6..ee87c7b5e576 100644 --- a/packages/mask/shared-ui/locales/ja-JP.json +++ b/packages/mask/shared-ui/locales/ja-JP.json @@ -252,6 +252,8 @@ "plugin_ito_your_refund_amount": "{{amount}} {{symbol}} を戻す", "plugin_ito_unlock_in_advance": "事前にアンロックする", "plugin_ito_swapped_status": "{{remain}} / {{total}} {{token}} をスワップしました", + "plugin_ito_qualification_loading": "資格認証中…", + "plugin_ito_qualification_failed": "ウォレットアドレスがリストにありません。", "plugin_ito_congratulations": "おめでとうございます!", "plugin_ito_out_of_stock_hit": "次の幸運を祈っています", "plugin_ito_claim_success_share": ".@{{account}} を使って ${{symbol}} をスワップし、 @{{user}} の #ITO に参加しました。mask.io をインストールして Initial Twitter Offering を始めましょう! \n {{link}}", diff --git a/packages/mask/shared-ui/locales/ko-KR.json b/packages/mask/shared-ui/locales/ko-KR.json index 03f0790092aa..474321146d9c 100644 --- a/packages/mask/shared-ui/locales/ko-KR.json +++ b/packages/mask/shared-ui/locales/ko-KR.json @@ -440,6 +440,8 @@ "plugin_ito_your_refund_amount": "{{amount}} {{symbol}} 반환하기", "plugin_ito_unlock_in_advance": "미리 언락하기", "plugin_ito_swapped_status": "{{remain}} / {{total}} {{token}} 스왑됨", + "plugin_ito_qualification_loading": "자격 인증...", + "plugin_ito_qualification_failed": "이 월렛 주소는 리스트에 없습니다.", "plugin_ito_congratulations": "축하합니다!", "plugin_ito_out_of_stock_hit": "다음에 운이 더 좋으시길 바랍니다", "plugin_ito_claim_success_share": "제가 @{{account}} 로 @{{user}}'s #ITO에 참여하여 ${{symbol}} 스왑을 했습니다. Mask.io를 설치하고 자기만의 ITO를 시작하세요! \n {{link}}", @@ -684,7 +686,6 @@ "plugin_furucombo_rewards": "보상", "plugin_furucombo_invest": "투자", "plugin_furucombo_pool_not_found": "무효한 풀 주소.", - "plugin_furucombo_smt_wrong": "오류가 발생합니다!", "plugin_furucombo_head_pools": "풀(Pools)", "plugin_furucombo_head_action": "행동", "popups_welcome": "환영합니다", @@ -745,5 +746,6 @@ "popups_password_do_not_match": "잘못된 백업 비밀번호", "popups_backup_password": "백업 비밀번호", "popups_rename_error_tip": "최대 길이는 {{length}} 자입니다.", - "nft_button_set_avatar": "NFT 아바타 설정" + "nft_button_set_avatar": "NFT 아바타 설정", + "popups_wallet_unsupported_network": "지원되지 않는 네트워크" } diff --git a/packages/mask/shared-ui/locales/qya-AA.json b/packages/mask/shared-ui/locales/qya-AA.json index 2d3a312335e6..422e7b95a198 100644 --- a/packages/mask/shared-ui/locales/qya-AA.json +++ b/packages/mask/shared-ui/locales/qya-AA.json @@ -132,10 +132,6 @@ "user_guide_tip_2": "crwdns9061:0crwdne9061:0", "user_guide_tip_3": "crwdns13019:0crwdne13019:0", "user_guide_tip_4": "crwdns16572:0crwdne16572:0", - "create_persona": "crwdns10317:0crwdne10317:0", - "connect_persona": "crwdns10319:0crwdne10319:0", - "please_create_persona": "crwdns10807:0crwdne10807:0", - "please_connect_persona": "crwdns10809:0crwdne10809:0", "mask_network": "crwdns10321:0crwdne10321:0", "import": "crwdns4193:0crwdne4193:0", "no_search_result": "crwdns4217:0crwdne4217:0", @@ -332,12 +328,17 @@ "plugin_wallet_view_qr_code": "crwdns4685:0crwdne4685:0", "plugin_wallet_switch_network": "crwdns4687:0{{network}}crwdne4687:0", "plugin_wallet_switch_network_under_going": "crwdns4689:0{{network}}crwdne4689:0", + "plugin_wallet_connect_tips": "crwdns16620:0crwdne16620:0", + "plugin_wallet_connect_network": "crwdns16622:0{{network}}crwdne16622:0", + "plugin_wallet_connect_network_under_going": "crwdns16624:0{{network}}crwdne16624:0", "plugin_wallet_not_available_on": "crwdns7913:0{{network}}crwdne7913:0", "plugin_wallet_connect_wallet": "crwdns4693:0crwdne4693:0", "plugin_wallet_name_placeholder": "crwdns4705:0crwdne4705:0", "plugin_wallet_fail_to_sign": "crwdns4707:0crwdne4707:0", "plugin_wallet_cancel_sign": "crwdns4709:0crwdne4709:0", + "plugin_nft_avatar_recommend_feature_description": "crwdns16626:0crwdne16626:0", "plugin_red_packet_display_name": "crwdns4711:0crwdne4711:0", + "application_hint": "crwdns16628:0crwdne16628:0", "plugin_red_packet_claimed": "crwdns10205:0crwdne10205:0", "plugin_red_packet_erc20_tab_title": "crwdns8143:0crwdne8143:0", "plugin_red_packet_erc721_tab_title": "crwdns8145:0crwdne8145:0", @@ -611,6 +612,8 @@ "plugin_ito_your_refund_amount": "crwdns5147:0{{amount}}crwdnd5147:0{{symbol}}crwdne5147:0", "plugin_ito_unlock_in_advance": "crwdns5149:0crwdne5149:0", "plugin_ito_swapped_status": "crwdns5151:0{{remain}}crwdnd5151:0{{total}}crwdnd5151:0{{token}}crwdne5151:0", + "plugin_ito_qualification_loading": "crwdns5137:0crwdne5137:0", + "plugin_ito_qualification_failed": "crwdns5139:0crwdne5139:0", "plugin_ito_congratulations": "crwdns5153:0crwdne5153:0", "plugin_ito_out_of_stock_hit": "crwdns5155:0crwdne5155:0", "plugin_ito_claim_success_share": "crwdns5157:0{{user}}crwdnd5157:0{{account}}crwdnd5157:0{{symbol}}crwdnd5157:0{{link}}crwdne5157:0", @@ -910,7 +913,8 @@ "plugin_furucombo_rewards": "crwdns9121:0crwdne9121:0", "plugin_furucombo_invest": "crwdns9123:0crwdne9123:0", "plugin_furucombo_pool_not_found": "crwdns9125:0crwdne9125:0", - "plugin_furucombo_smt_wrong": "crwdns9127:0crwdne9127:0", + "plugin_furucombo_load_failed": "crwdns16630:0crwdne16630:0", + "plugin_furucombo_reload": "crwdns16632:0crwdne16632:0", "plugin_furucombo_head_pools": "crwdns9129:0crwdne9129:0", "plugin_furucombo_head_action": "crwdns9131:0crwdne9131:0", "plugin_pets_dialog_title": "crwdns13145:0crwdne13145:0", @@ -1014,6 +1018,7 @@ "popups_wallet_token_buy": "crwdns7819:0crwdne7819:0", "popups_wallet_token_send": "crwdns7821:0crwdne7821:0", "popups_wallet_token_swap": "crwdns7823:0crwdne7823:0", + "popups_wallet_disconnect_failed": "crwdns16336:0crwdne16336:0", "popups_wallet_view_on_explorer": "crwdns8057:0crwdne8057:0", "popups_wallet_gas_fee_settings": "crwdns7837:0crwdne7837:0", "popups_wallet_gas_fee_settings_description": "crwdns7839:0crwdne7839:0", @@ -1099,6 +1104,7 @@ "plugin_artblocks_blockchain_row": "crwdns14516:0crwdne14516:0", "plugin_artblocks_contract_row": "crwdns14518:0crwdne14518:0", "plugin_artblocks_smt_wrong": "crwdns14520:0crwdne14520:0", + "popups_wallet_disconnect_success": "crwdns16334:0crwdne16334:0", "plugin_artblocks_share": "crwdns14522:0{{name}}crwdnd14522:0{{price}}crwdnd14522:0{{symbol}}crwdne14522:0", "plugin_artblocks_share_no_official_account": "crwdns14524:0{{name}}crwdnd14524:0{{price}}crwdnd14524:0{{symbol}}crwdne14524:0", "plugin_tips_disconnect_introduction": "crwdns16410:0{{persona}}crwdnd16410:0{{address}}crwdne16410:0", @@ -1115,5 +1121,9 @@ "plugin_transak_name": "crwdns16280:0crwdne16280:0", "plugin_transak_description": "crwdns16282:0crwdne16282:0", "plugin_valuables_name": "crwdns16284:0crwdne16284:0", - "plugin_valuables_description": "crwdns16286:0crwdne16286:0" + "plugin_valuables_description": "crwdns16286:0crwdne16286:0", + "popups_wallet_unsupported_network": "crwdns8995:0crwdne8995:0", + "plugin_default_title": "crwdns16634:0crwdne16634:0", + "plugin_provider_by": "crwdns16636:0crwdne16636:0", + "plugin_enables": "crwdns16638:0crwdne16638:0" } diff --git a/packages/mask/shared-ui/locales/zh-CN.json b/packages/mask/shared-ui/locales/zh-CN.json index 74cde5626191..ec05be1dc0f7 100644 --- a/packages/mask/shared-ui/locales/zh-CN.json +++ b/packages/mask/shared-ui/locales/zh-CN.json @@ -108,10 +108,6 @@ "user_guide_tip_1": "点击这里快速访问主要功能。", "user_guide_tip_2": "点击这里连接您的钱包。您可以在此选择网络或更改您的钱包。", "user_guide_tip_3": "点击这里快速开始。", - "create_persona": "创建身份", - "connect_persona": "连接身份", - "please_create_persona": "请创建身份", - "please_connect_persona": "请连接身份", "mask_network": "Mask Network", "import": "导入", "no_search_result": "没有任何结果。", @@ -556,6 +552,8 @@ "plugin_ito_your_refund_amount": "退回 {{amount}} {{symbol}}.", "plugin_ito_unlock_in_advance": "提前解锁", "plugin_ito_swapped_status": "{{remain}} / {{total}} {{token}} 已兑换", + "plugin_ito_qualification_loading": "资格认证中…", + "plugin_ito_qualification_failed": "钱包地址不在列表内。", "plugin_ito_congratulations": "祝贺您!", "plugin_ito_out_of_stock_hit": "祝您下次好运", "plugin_ito_claim_success_share": "我刚刚用 @{{account}} 来交换${{symbol}},参加了 @{{user}}的 #ITO。 安装mask.io并开始您的初次推特优惠! \n {{link}}", @@ -884,5 +882,6 @@ "nft_button_add_collectible": "添加收藏品", "nft_avatar": "NFT 头像", "web3_tab_hint": "未发现任何地址。", - "nft_button_set_avatar": "设置 NFT 头像" + "nft_button_set_avatar": "设置 NFT 头像", + "popups_wallet_unsupported_network": "不支持的网络类型" } diff --git a/packages/mask/shared-ui/locales/zh-TW.json b/packages/mask/shared-ui/locales/zh-TW.json index 5377ab10b6a7..27ce02c58243 100644 --- a/packages/mask/shared-ui/locales/zh-TW.json +++ b/packages/mask/shared-ui/locales/zh-TW.json @@ -387,6 +387,8 @@ "plugin_ito_your_refund_amount": "返還 {{amount}} {{symbol}}。", "plugin_ito_unlock_in_advance": "預先解鎖", "plugin_ito_swapped_status": "{{remain}} / {{total}} {{token}} 已交換", + "plugin_ito_qualification_loading": "驗證資格…", + "plugin_ito_qualification_failed": "錢包地址不在清單上。", "plugin_ito_congratulations": "恭喜!", "plugin_ito_out_of_stock_hit": "祝你下次好運", "plugin_ito_claim_success_share": "我剛剛參與了 @{{user}} 在 @{{account}} 發起的 #ITO 以換取 ${{symbol}}。 安裝 mask.io 開始你自己的 Initial Twitter Offering! \n {{link}}", diff --git a/packages/mask/src/plugins/Avatar/locales/ja-JP.json b/packages/mask/src/plugins/Avatar/locales/ja-JP.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/mask/src/plugins/Avatar/locales/ja-JP.json @@ -0,0 +1 @@ +{} diff --git a/packages/mask/src/plugins/Avatar/locales/ko-KR.json b/packages/mask/src/plugins/Avatar/locales/ko-KR.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/mask/src/plugins/Avatar/locales/ko-KR.json @@ -0,0 +1 @@ +{} diff --git a/packages/mask/src/plugins/Avatar/locales/qya-AA.json b/packages/mask/src/plugins/Avatar/locales/qya-AA.json new file mode 100644 index 000000000000..2ba51b407b94 --- /dev/null +++ b/packages/mask/src/plugins/Avatar/locales/qya-AA.json @@ -0,0 +1,27 @@ +{ + "application_dialog_title": "crwdns16640:0crwdne16640:0", + "application_edit_profile_dialog_title": "crwdns16642:0crwdne16642:0", + "persona_set_nft": "crwdns16644:0crwdne16644:0", + "persona_verification_failed": "crwdns16646:0crwdne16646:0", + "cancel": "crwdns16648:0crwdne16648:0", + "save": "crwdns16650:0crwdne16650:0", + "change": "crwdns16652:0crwdne16652:0", + "connect_your_wallet": "crwdns16654:0crwdne16654:0", + "upload_avatar_failed_message": "crwdns16656:0crwdne16656:0", + "upload_avatar_success_message": "crwdns16658:0crwdne16658:0", + "collectible_not_found": "crwdns16660:0crwdne16660:0", + "add_collectible": "crwdns16662:0crwdne16662:0", + "set_avatar_title": "crwdns16664:0crwdne16664:0", + "set_PFP_title": "crwdns16666:0crwdne16666:0", + "wallet_settings": "crwdns16668:0crwdne16668:0", + "persona_hint": "crwdns16670:0crwdne16670:0", + "copy_success_of_wallet_address": "crwdns16672:0crwdne16672:0", + "copied": "crwdns16674:0crwdne16674:0", + "collectible_on_polygon": "crwdns16676:0crwdne16676:0", + "collectible_no_eth": "crwdns16678:0crwdne16678:0", + "no_collectible_found": "crwdns16680:0crwdne16680:0", + "retry": "crwdns16682:0crwdne16682:0", + "application_hint": "crwdns16684:0crwdne16684:0", + "provider_by": "crwdns16686:0crwdne16686:0", + "wallet_non_evm_warning": "crwdns16688:0crwdne16688:0" +} diff --git a/packages/mask/src/plugins/Avatar/locales/zh-CN.json b/packages/mask/src/plugins/Avatar/locales/zh-CN.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/mask/src/plugins/Avatar/locales/zh-CN.json @@ -0,0 +1 @@ +{} diff --git a/packages/mask/src/plugins/Avatar/locales/zh-TW.json b/packages/mask/src/plugins/Avatar/locales/zh-TW.json new file mode 100644 index 000000000000..0967ef424bce --- /dev/null +++ b/packages/mask/src/plugins/Avatar/locales/zh-TW.json @@ -0,0 +1 @@ +{} From 165be53b2ef193bce919a301a0aa08e9a6eebc9d Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 18 May 2022 14:45:08 +0800 Subject: [PATCH 13/29] chore: run npx gulp sync-languages --- .../src/plugins/Avatar/locales/languages.ts | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/packages/mask/src/plugins/Avatar/locales/languages.ts b/packages/mask/src/plugins/Avatar/locales/languages.ts index db91c03aa516..67e418468ef3 100644 --- a/packages/mask/src/plugins/Avatar/locales/languages.ts +++ b/packages/mask/src/plugins/Avatar/locales/languages.ts @@ -3,17 +3,32 @@ // Default fallback language in a family of languages are chosen by the alphabet order // To overwrite this, please overwrite packages/scripts/src/locale-kit-next/index.ts import en_US from './en-US.json' +import ja_JP from './ja-JP.json' +import ko_KR from './ko-KR.json' +import qya_AA from './qya-AA.json' +import zh_CN from './zh-CN.json' +import zh_TW from './zh-TW.json' export const languages = { en: en_US, + ja: ja_JP, + ko: ko_KR, + qy: qya_AA, + 'zh-CN': zh_CN, + zh: zh_TW, } // @ts-ignore if (import.meta.webpackHot) { // @ts-ignore - import.meta.webpackHot.accept(['./en-US.json'], () => - globalThis.dispatchEvent?.( - new CustomEvent('MASK_I18N_HMR', { - detail: ['com.maskbook.avatar', { en: en_US }], - }), - ), + import.meta.webpackHot.accept( + ['./en-US.json', './ja-JP.json', './ko-KR.json', './qya-AA.json', './zh-CN.json', './zh-TW.json'], + () => + globalThis.dispatchEvent?.( + new CustomEvent('MASK_I18N_HMR', { + detail: [ + 'com.maskbook.avatar', + { en: en_US, ja: ja_JP, ko: ko_KR, qy: qya_AA, 'zh-CN': zh_CN, zh: zh_TW }, + ], + }), + ), ) } From ff3f29e80b43582f601d42bc9d4b76ca25733c99 Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 18 May 2022 15:06:06 +0800 Subject: [PATCH 14/29] fix: persona sign length (#6277) --- packages/mask/background/services/identity/persona/sign.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/mask/background/services/identity/persona/sign.ts b/packages/mask/background/services/identity/persona/sign.ts index c9df9f86e9c2..0874941e056b 100644 --- a/packages/mask/background/services/identity/persona/sign.ts +++ b/packages/mask/background/services/identity/persona/sign.ts @@ -12,7 +12,7 @@ import { MaskMessages } from '../../../../shared' import { PersonaIdentifier, fromBase64URL, PopupRoutes, ECKeyIdentifier } from '@masknet/shared-base' import { queryPersonasWithPrivateKey } from '../../../../background/database/persona/db' import { openPopupWindow } from '../../../../background/services/helper' -import { delay } from '@dimensiondev/kit' +import { delay, encodeText } from '@dimensiondev/kit' export interface SignRequest { /** Use that who to sign this message. */ identifier?: PersonaIdentifier @@ -56,8 +56,7 @@ export async function generateSignResult(signer: ECKeyIdentifier, message: strin const persona = (await queryPersonasWithPrivateKey()).find((x) => x.identifier === signer) if (!persona) throw new Error('Persona not found') - // will have problem with UTF-8? - const length = message.length + const length = encodeText(message).length const messageHash = keccakFromString(`\x19Ethereum Signed Message:\n${length}${message}`, 256) const privateKey = Buffer.from(fromBase64URL(persona.privateKey.d!)) const signature = ecsign(messageHash, privateKey) From 5d8303f1525c0a2e74965d8cdb475b945427d77f Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 18 May 2022 15:06:15 +0800 Subject: [PATCH 15/29] fix: serializer bug (#6278) --- packages/shared-base/src/serializer/index.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/shared-base/src/serializer/index.ts b/packages/shared-base/src/serializer/index.ts index ce0800de0d53..291c57d4c345 100644 --- a/packages/shared-base/src/serializer/index.ts +++ b/packages/shared-base/src/serializer/index.ts @@ -12,7 +12,8 @@ const pendingRegister = new Set<() => void>() let typeson: Typeson | undefined function setup() { const { default: BigNumber } = BN - typeson = new Typeson({}) + // https://github.com/dfahlander/typeson-registry/issues/27 + typeson = new Typeson({ cyclic: false }) typeson.register(builtin) typeson.register(specialNumbers) typeson.register([blob, file, filelist, imagebitmap]) From 6fae78f5dab19bb23c3031abcb3f63b7c09872ff Mon Sep 17 00:00:00 2001 From: Hancheng Zhou Date: Wed, 18 May 2022 15:06:27 +0800 Subject: [PATCH 16/29] fix: twitter id selector (#6279) * fix: twitter id selector * fix: next id status * fix: no need use state --- packages/mask/src/components/DataSource/useNextID.ts | 5 ++--- .../twitter.com/collecting/identity.ts | 9 ++++++--- .../social-network-adaptor/twitter.com/utils/selector.ts | 2 +- packages/web3-providers/src/NextID/proof.ts | 6 +++--- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/mask/src/components/DataSource/useNextID.ts b/packages/mask/src/components/DataSource/useNextID.ts index 7988024e2b59..c68873a46e22 100644 --- a/packages/mask/src/components/DataSource/useNextID.ts +++ b/packages/mask/src/components/DataSource/useNextID.ts @@ -65,8 +65,7 @@ export function useNextIDConnectStatus() { const personaConnectStatus = usePersonaConnectStatus() const lastState = useSetupGuideStatusState() const lastRecognized = useLastRecognizedIdentity() - const [username] = useState(lastState.username || lastRecognized.identifier?.userId || '') - + const username = lastRecognized.identifier?.userId || lastState.username || '' const { value: VerificationStatus = NextIDVerificationStatus.Other, retry, @@ -117,7 +116,7 @@ export function useNextIDConnectStatus() { isOpenedVerifyDialog = true isOpenedFromButton = false return NextIDVerificationStatus.WaitingVerify - }, [username, enableNextID, isOpenedVerifyDialog, currentPersonaIdentifier.value]) + }, [username, enableNextID, isOpenedVerifyDialog, personaConnectStatus, currentPersonaIdentifier.value]) return { isVerified: VerificationStatus === NextIDVerificationStatus.Verified, diff --git a/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts b/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts index 3eca2d3fb5c0..d04e71b26bc5 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/collecting/identity.ts @@ -51,9 +51,12 @@ function resolveLastRecognizedIdentityInner( ) { const assign = async () => { await delay(5000) - const avatar = searchSelfAvatarSelector().evaluate()?.getAttribute('src') ?? '' - const handle = searchSelfHandleSelector().evaluate()?.textContent?.trim()?.replace(/^@/, '') - const nickname = searchSelfNicknameSelector().evaluate()?.textContent?.trim() ?? '' + const { collect } = recognizeDesktop() + const dataFromScript = collect() + const avatar = (searchSelfAvatarSelector().evaluate()?.getAttribute('src') || dataFromScript.avatar) ?? '' + const handle = + searchSelfHandleSelector().evaluate()?.textContent?.trim()?.replace(/^@/, '') || dataFromScript.handle + const nickname = (searchSelfNicknameSelector().evaluate()?.textContent?.trim() || dataFromScript.nickname) ?? '' if (handle) { ref.value = { diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts index 197b49efeb03..34847bbda5b6 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts @@ -217,7 +217,7 @@ export const postsContentSelector = () => export const postAvatarsContentSelector = () => querySelectorAll('[data-testid="tweet"] > div > div > div > :nth-child(2)') -const base = querySelector('#react-root + script') +const base = querySelector('#react-root ~ script') const handle = /"screen_name":"(.*?)"/ const name = /"name":"(.*?)"/ const bio = /"description":"(.*?)"/ diff --git a/packages/web3-providers/src/NextID/proof.ts b/packages/web3-providers/src/NextID/proof.ts index 7e3e156d09ef..af86f21422b3 100644 --- a/packages/web3-providers/src/NextID/proof.ts +++ b/packages/web3-providers/src/NextID/proof.ts @@ -38,7 +38,7 @@ const getPersonaQueryURL = (platform: string, identity: string) => identity, }) -const geyExistedBindingQueryURL = (platform: string, identity: string, personaPublicKey: string) => +const getExistedBindingQueryURL = (platform: string, identity: string, personaPublicKey: string) => urlcat(BASE_URL, '/v1/proof/exists', { platform, identity, @@ -81,7 +81,7 @@ export class NextIDProofAPI implements NextIDBaseAPI.Proof { // Should delete cache when proof status changed const cacheKeyOfQueryPersona = getPersonaQueryURL(NextIDPlatform.NextID, personaPublicKey) - const cacheKeyOfExistedBinding = geyExistedBindingQueryURL(platform, identity, personaPublicKey) + const cacheKeyOfExistedBinding = getExistedBindingQueryURL(platform, identity, personaPublicKey) deleteCache(cacheKeyOfQueryPersona) deleteCache(cacheKeyOfExistedBinding) @@ -107,7 +107,7 @@ export class NextIDProofAPI implements NextIDBaseAPI.Proof { async queryIsBound(personaPublicKey: string, platform: NextIDPlatform, identity: string, enableCache?: boolean) { if (!platform && !identity) return false - const url = geyExistedBindingQueryURL(platform, identity, personaPublicKey) + const url = getExistedBindingQueryURL(platform, identity, personaPublicKey) const result = await fetchJSON(url, {}, enableCache) return result.map(() => true).unwrapOr(false) From 87a9a7047d46082da9081f33ffc75ec3ecd2c82c Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 18 May 2022 15:12:14 +0800 Subject: [PATCH 17/29] fix: wrong call order of localeCompare (#6286) --- .../mask/src/plugins/ITO/SNSAdaptor/ExchangeTokenPanel.tsx | 4 ++-- packages/mask/src/plugins/ITO/SNSAdaptor/SwapDialog.tsx | 2 +- packages/shared/src/UI/components/ERC20TokenList/index.tsx | 2 +- .../evm/hooks/useERC20TokensDetailedFromTokenLists.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/ExchangeTokenPanel.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/ExchangeTokenPanel.tsx index f2755ef39927..130a27b8411c 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/ExchangeTokenPanel.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/ExchangeTokenPanel.tsx @@ -91,8 +91,8 @@ export function ExchangeTokenPanel(props: ExchangeTokenPanelProps) { isSell, dataIndex, exchangeToken?.address, - excludeTokensAddress.sort((a, b) => a.localeCompare('en-US', b)).join(), - selectedTokensAddress.sort((a, b) => a.localeCompare('en-US', b)).join(), + excludeTokensAddress.sort((a, b) => a.localeCompare(b, 'en-US')).join(), + selectedTokensAddress.sort((a, b) => a.localeCompare(b, 'en-US')).join(), ]) // #endregion diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/SwapDialog.tsx b/packages/mask/src/plugins/ITO/SNSAdaptor/SwapDialog.tsx index e9ce38bd599b..279a7d27f868 100644 --- a/packages/mask/src/plugins/ITO/SNSAdaptor/SwapDialog.tsx +++ b/packages/mask/src/plugins/ITO/SNSAdaptor/SwapDialog.tsx @@ -159,7 +159,7 @@ export function SwapDialog(props: SwapDialogProps) { pickToken, exchangeTokens .map((x) => x.address) - .sort((a, b) => a.localeCompare('en-US', b)) + .sort((a, b) => a.localeCompare(b, 'en-US')) .join(), ]) // #endregion diff --git a/packages/shared/src/UI/components/ERC20TokenList/index.tsx b/packages/shared/src/UI/components/ERC20TokenList/index.tsx index 6d216633cbc4..1e68efe335c7 100644 --- a/packages/shared/src/UI/components/ERC20TokenList/index.tsx +++ b/packages/shared/src/UI/components/ERC20TokenList/index.tsx @@ -115,7 +115,7 @@ export const ERC20TokenList = memo((props) => { assetsLoading, assets .map((x) => x.token.address) - .sort((a, b) => a.localeCompare('en-US', b)) + .sort((a, b) => a.localeCompare(b, 'en-US')) .join(), ]) diff --git a/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts b/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts index d9eaf14e3ca6..d3c38f381bfd 100644 --- a/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts +++ b/packages/web3-shared/evm/hooks/useERC20TokensDetailedFromTokenLists.ts @@ -21,7 +21,7 @@ export function useERC20TokensDetailedFromTokenLists( const { fetchERC20TokensFromTokenLists } = useWeb3Context() const { value: tokensFromList = EMPTY_LIST, ...asyncResult } = useAsyncRetry( async () => (!lists || lists.length === 0 ? [] : fetchERC20TokensFromTokenLists(lists, chainId)), - [chainId, lists?.sort((a, b) => a.localeCompare('en-US', b)).join()], + [chainId, lists?.sort((a, b) => a.localeCompare(b, 'en-US')).join()], ) // #endregion // #region fuse From 225afef02501a45fcd211775281ac0977676a3f4 Mon Sep 17 00:00:00 2001 From: BillyS Date: Wed, 18 May 2022 18:45:49 +0800 Subject: [PATCH 18/29] fix: support publicHex & rawPublickey in compose share search (#6273) * fix: support publicHex & rawPublickey * fix: fix * fix: close pop when to share --- .../CompositionDialog/EncryptionTargetSelector.tsx | 5 ++++- .../shared/SelectRecipients/ProfileInList.tsx | 8 ++++---- .../shared/SelectRecipients/SelectRecipients.tsx | 14 ++++++++++---- .../SelectRecipients/SelectRecipientsDialog.tsx | 8 +++++++- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx b/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx index 761a2bd490a4..50fba1981300 100644 --- a/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx +++ b/packages/mask/src/components/CompositionDialog/EncryptionTargetSelector.tsx @@ -147,7 +147,10 @@ export function EncryptionTargetSelector(props: EncryptionTargetSelectorProps) { {e2eDisabledMessage} {noLocalKeyMessage} props.onChange(EncryptionTargetType.E2E)} + onItemClick={() => { + props.onChange(EncryptionTargetType.E2E) + setAnchorEl(null) + }} itemTail={} disabled={!!props.e2eDisabled} value={EncryptionTargetType.E2E} diff --git a/packages/mask/src/components/shared/SelectRecipients/ProfileInList.tsx b/packages/mask/src/components/shared/SelectRecipients/ProfileInList.tsx index 8be4ab514fc4..1b57fde505a1 100644 --- a/packages/mask/src/components/shared/SelectRecipients/ProfileInList.tsx +++ b/packages/mask/src/components/shared/SelectRecipients/ProfileInList.tsx @@ -112,7 +112,7 @@ export function ProfileInList(props: ProfileInListProps) { (ev: React.MouseEvent) => props.onChange(ev, !props.selected), [props], ) - const textToHighlight = formatPersonaPublicKey(profile.linkedPersona?.publicKeyAsHex?.toUpperCase() ?? '', 4) + const textToHighlight = formatPersonaPublicKey(profile.linkedPersona?.rawPublicKey?.toUpperCase() ?? '', 4) return ( { - const publicHexKey = profile.linkedPersona?.publicKeyAsHex - if (!publicHexKey) return - copyToClipboard(publicHexKey.toUpperCase()) + const rawPublicKey = profile.linkedPersona?.rawPublicKey + if (!rawPublicKey) return + copyToClipboard(rawPublicKey.toUpperCase()) }} /> {profile.fromNextID &&
Next.ID
} diff --git a/packages/mask/src/components/shared/SelectRecipients/SelectRecipients.tsx b/packages/mask/src/components/shared/SelectRecipients/SelectRecipients.tsx index 1109596e0435..142868c4d93b 100644 --- a/packages/mask/src/components/shared/SelectRecipients/SelectRecipients.tsx +++ b/packages/mask/src/components/shared/SelectRecipients/SelectRecipients.tsx @@ -1,5 +1,5 @@ import { useEffect, useState } from 'react' -import { ProfileInformation as Profile, EMPTY_LIST, NextIDPlatform } from '@masknet/shared-base' +import { ProfileInformation as Profile, EMPTY_LIST, NextIDPlatform, ECKeyIdentifier } from '@masknet/shared-base' import type { LazyRecipients } from '../../CompositionDialog/CompositionUI' import { SelectRecipientsDialogUI } from './SelectRecipientsDialog' import { useCurrentIdentity } from '../../DataSource/useActivatedUI' @@ -23,7 +23,12 @@ const resolveNextIDPlatform = (value: string) => { if (isValidAddress(value)) return NextIDPlatform.Ethereum if (value.length >= 44) return NextIDPlatform.NextID if (/^\w{1,15}$/.test(value)) return NextIDPlatform.Twitter - return undefined + return +} + +const resolveValueToSearch = (value: string) => { + if (value.length === 44) return new ECKeyIdentifier('secp256k1', value).publicKeyAsHex ?? value + return value.toLowerCase() } export function SelectRecipientsUI(props: SelectRecipientsUIProps) { @@ -32,11 +37,12 @@ export function SelectRecipientsUI(props: SelectRecipientsUIProps) { const [valueToSearch, setValueToSearch] = useState('') const currentIdentity = useCurrentIdentity() const type = resolveNextIDPlatform(valueToSearch) + const value = resolveValueToSearch(valueToSearch) const { loading: searchLoading, value: NextIDResults } = useNextIDBoundByPlatform( type ?? NextIDPlatform.NextID, - valueToSearch.toLowerCase(), + value, ) - const NextIDItems = useTwitterIdByWalletSearch(NextIDResults, valueToSearch, type) + const NextIDItems = useTwitterIdByWalletSearch(NextIDResults, value, type) const profileItems = items.recipients?.filter((x) => x.identifier !== currentIdentity?.identifier) const searchedList = uniqBy( profileItems?.concat(NextIDItems) ?? [], diff --git a/packages/mask/src/components/shared/SelectRecipients/SelectRecipientsDialog.tsx b/packages/mask/src/components/shared/SelectRecipients/SelectRecipientsDialog.tsx index 2b18c7fa2ffd..291f14d9658d 100644 --- a/packages/mask/src/components/shared/SelectRecipients/SelectRecipientsDialog.tsx +++ b/packages/mask/src/components/shared/SelectRecipients/SelectRecipientsDialog.tsx @@ -100,7 +100,13 @@ export function SelectRecipientsDialogUI(props: SelectRecipientsDialogUIProps) { }, [props.open]) const itemsAfterSearch = useMemo(() => { const fuse = new Fuse(items, { - keys: ['identifier.userId', 'nickname', 'walletAddress', 'linkedPersona.publicKeyAsHex'], + keys: [ + 'identifier.userId', + 'nickname', + 'walletAddress', + 'linkedPersona.rawPublicKey', + 'linkedPersona.publicKeyAsHex', + ], isCaseSensitive: false, ignoreLocation: true, threshold: 0, From 92fd8dc0429eaa75bc6165bf138bb7ccbc9e2aaf Mon Sep 17 00:00:00 2001 From: Hancheng Zhou Date: Wed, 18 May 2022 19:54:16 +0800 Subject: [PATCH 19/29] fix: config for network tab (#6294) --- packages/mask/src/plugins/ITO/base.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/mask/src/plugins/ITO/base.ts b/packages/mask/src/plugins/ITO/base.ts index eddc066a64c6..2fc3c7dd2742 100644 --- a/packages/mask/src/plugins/ITO/base.ts +++ b/packages/mask/src/plugins/ITO/base.ts @@ -1,4 +1,6 @@ import type { Plugin } from '@masknet/plugin-infra' +import { NetworkPluginID } from '@masknet/plugin-infra/web3' +import { ChainId } from '@masknet/web3-shared-evm' import { ITO_MetaKey_1, ITO_MetaKey_2, ITO_PluginID } from './constants' export const base: Plugin.Shared.Definition = { @@ -15,6 +17,23 @@ export const base: Plugin.Shared.Definition = { networks: {}, }, target: 'stable', + web3: { + [NetworkPluginID.PLUGIN_EVM]: { + supportedChainIds: [ + ChainId.Mainnet, + ChainId.BSC, + ChainId.Matic, + ChainId.Arbitrum, + ChainId.xDai, + ChainId.Aurora, + ChainId.Avalanche, + ChainId.Fantom, + ChainId.Harmony, + ], + }, + [NetworkPluginID.PLUGIN_FLOW]: { supportedChainIds: [] }, + [NetworkPluginID.PLUGIN_SOLANA]: { supportedChainIds: [] }, + }, }, contribution: { metadataKeys: new Set([ITO_MetaKey_1, ITO_MetaKey_2]) }, } From 8c1a2001ec46a125cc8a8ab8d4f6dc76430b1008 Mon Sep 17 00:00:00 2001 From: septs Date: Wed, 18 May 2022 21:13:41 +0800 Subject: [PATCH 20/29] chore: cleanup comments (#6296) --- packages/dashboard/src/initialization/Dashboard.tsx | 3 +-- packages/injected-script/main/utils.ts | 1 - packages/mask/src/UIRoot.tsx | 3 +-- .../background-script/EthereumServices/provider.ts | 6 ++---- .../src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx | 3 +-- packages/mask/src/plugins/Trader/apis/trending/index.ts | 3 +-- packages/mask/src/plugins/Wallet/types/debank.ts | 3 +-- .../src/social-network-adaptor/twitter.com/utils/fetch.ts | 3 +-- 8 files changed, 8 insertions(+), 17 deletions(-) diff --git a/packages/dashboard/src/initialization/Dashboard.tsx b/packages/dashboard/src/initialization/Dashboard.tsx index 84236295ed53..c16bcb6cc643 100644 --- a/packages/dashboard/src/initialization/Dashboard.tsx +++ b/packages/dashboard/src/initialization/Dashboard.tsx @@ -30,8 +30,7 @@ export default function DashboardRoot() { const pluginID = usePluginID() const PluginsWeb3State = useAllPluginsWeb3State() - // TODO: - // migrate EVM plugin + // TODO: migrate EVM plugin fixWeb3State(PluginsWeb3State[NetworkPluginID.PLUGIN_EVM], Web3Context) // #region theme diff --git a/packages/injected-script/main/utils.ts b/packages/injected-script/main/utils.ts index 1b3ca165514b..d083e8ddb011 100644 --- a/packages/injected-script/main/utils.ts +++ b/packages/injected-script/main/utils.ts @@ -106,7 +106,6 @@ export async function handlePromise(id: number, promise: () => any) { const data = await promise() sendEvent('resolvePromise', id, data) } catch (error) { - // TODO: sendEvent('rejectPromise', id, getError(error)) } } diff --git a/packages/mask/src/UIRoot.tsx b/packages/mask/src/UIRoot.tsx index 8fc356a07313..9d7c5eefe82b 100644 --- a/packages/mask/src/UIRoot.tsx +++ b/packages/mask/src/UIRoot.tsx @@ -37,8 +37,7 @@ export function MaskUIRoot({ children, kind, useTheme }: MaskUIRootProps) { const pluginID = useValueRef(pluginIDSettings) const PluginsWeb3State = useAllPluginsWeb3State() - // TODO: - // migrate EVM plugin + // TODO: migrate EVM plugin fixWeb3State(PluginsWeb3State[NetworkPluginID.PLUGIN_EVM], Web3Context) return compose( diff --git a/packages/mask/src/extension/background-script/EthereumServices/provider.ts b/packages/mask/src/extension/background-script/EthereumServices/provider.ts index f564b08afa85..633c9c06999a 100644 --- a/packages/mask/src/extension/background-script/EthereumServices/provider.ts +++ b/packages/mask/src/extension/background-script/EthereumServices/provider.ts @@ -9,14 +9,12 @@ import * as Injected from './providers/Injected' import * as Fortmatic from './providers/Fortmatic' // #region connect WalletConnect -// step 1: -// Generate the connection URI and render a QRCode for scanning by the user +// Step 1: Generate the connection URI and render a QRCode for scanning by the user export async function createConnectionURI() { return (await WalletConnect.createConnector()).uri } -// step2: -// If user confirmed the request we will receive the 'connect' event +// Step 2: If user confirmed the request we will receive the 'connect' event type Account = { account?: string; chainId: ChainId } let deferredConnect: Promise | null = null let resolveConnect: ((result: Account) => void) | undefined diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx index ae666d666175..c94f0df53a3b 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx @@ -165,8 +165,7 @@ export default function RedPacketDialog(props: RedPacketDialogProps) { // the settings is not available if (!createSettings?.token) return - // TODO: - // early return happened + // TODO: early return happened // we should guide user to select the red packet in the existing list if (createState.type !== TransactionStateType.CONFIRMED) return diff --git a/packages/mask/src/plugins/Trader/apis/trending/index.ts b/packages/mask/src/plugins/Trader/apis/trending/index.ts index a8fa0cd65138..8949ef40297d 100644 --- a/packages/mask/src/plugins/Trader/apis/trending/index.ts +++ b/packages/mask/src/plugins/Trader/apis/trending/index.ts @@ -192,8 +192,7 @@ async function getCoinTrending(id: string, currency: Currency, dataProvider: Dat symbol: info.symbol.toUpperCase(), is_mirrored: isMirroredKeyword(info.symbol), - // TODO: - // use current language setting + // TODO: use current language setting description: info.description.en, market_cap_rank: info.market_cap_rank, image_url: info.image.small, diff --git a/packages/mask/src/plugins/Wallet/types/debank.ts b/packages/mask/src/plugins/Wallet/types/debank.ts index 2fb7972f7ecb..de4774be8edb 100644 --- a/packages/mask/src/plugins/Wallet/types/debank.ts +++ b/packages/mask/src/plugins/Wallet/types/debank.ts @@ -32,8 +32,7 @@ export interface TokenItem { export interface HistoryItem { cate_id: keyof HistoryResponse['data']['cate_dict'] - // TODO: - // implement debt_liquidated + // TODO: implement debt_liquidated debt_liquidated: null id: string other_addr: string diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts index aeb31bc81408..b280f9e62aeb 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/fetch.ts @@ -121,8 +121,7 @@ export const postParser = (node: HTMLElement) => { ...postNameParser(node), avatar: postAvatarParser(node), - // FIXME: - // we get wrong pid for nested tweet + // FIXME: we get wrong pid for nested tweet pid: postIdParser(node), messages: postContentMessageParser(node).filter((x) => !isTypedMessageEmpty(x)), From 5941a99012e55a55726cc18abc315f1b6aa3a5d1 Mon Sep 17 00:00:00 2001 From: Randolph314 <97870249+Randolph314@users.noreply.github.com> Date: Wed, 18 May 2022 21:32:54 +0800 Subject: [PATCH 21/29] fix: chain name of okex (#6298) * fix: chain name of okex chain * feat: change comment style * feat: change chain name Co-authored-by: Randolph <840094513@qq.com> --- cspell.json | 1 + packages/web3-shared/evm/assets/chains.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cspell.json b/cspell.json index b26de3d954c0..aad883a441e1 100644 --- a/cspell.json +++ b/cspell.json @@ -275,6 +275,7 @@ "nrge", "nrgt", "nyfi", + "okex", "openocean", "pausable", "pkts", diff --git a/packages/web3-shared/evm/assets/chains.json b/packages/web3-shared/evm/assets/chains.json index e870a59de6fc..4c8a00736ca8 100644 --- a/packages/web3-shared/evm/assets/chains.json +++ b/packages/web3-shared/evm/assets/chains.json @@ -814,7 +814,7 @@ }, { "name": "OKExChain Mainnet", - "chain": "okexchain", + "chain": "OKEx", "network": "mainnet", "features": [], "nativeCurrency": { From 469839cf439cd687de36c119d1d924f2b044eb5b Mon Sep 17 00:00:00 2001 From: Randolph314 <97870249+Randolph314@users.noreply.github.com> Date: Thu, 19 May 2022 11:51:02 +0800 Subject: [PATCH 22/29] feat: use Cross-chain in production environment (#6303) Co-authored-by: Randolph <840094513@qq.com> --- packages/plugins/CrossChainBridge/src/base.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/plugins/CrossChainBridge/src/base.ts b/packages/plugins/CrossChainBridge/src/base.ts index 7625b7388e5b..2c83e4ed8e50 100644 --- a/packages/plugins/CrossChainBridge/src/base.ts +++ b/packages/plugins/CrossChainBridge/src/base.ts @@ -10,8 +10,7 @@ export const base: Plugin.Shared.Definition = { enableRequirement: { architecture: { app: false, web: true }, networks: { type: 'opt-out', networks: {} }, - target: 'beta', + target: 'stable', }, - experimentalMark: true, i18n: languages, } From c97019dd438b8673c6d2d417198a53518cd8c33c Mon Sep 17 00:00:00 2001 From: nuanyang233 Date: Thu, 19 May 2022 12:47:46 +0800 Subject: [PATCH 23/29] fix: bugfix for theme (#6299) * fix: bugfix for test * fix: bugfix for change network * fix: ui style * chore: revert remove height * refactor: remove console.log * fix: ui style * fix: padding of dialog content * fix: dialog title color Co-authored-by: guanbinrui <52657989+guanbinrui@users.noreply.github.com> --- .../mask/src/plugins/MaskPluginWrapper.tsx | 9 ---- .../RedPacket/SNSAdaptor/RedPacketDialog.tsx | 2 +- .../SNSAdaptor/RedPacketERC721Form.tsx | 2 +- .../SNSAdaptor/SelectProviderDialog/index.tsx | 8 +++- .../twitter.com/ui-provider.ts | 5 +- .../src/utils/theme/useClassicMaskSNSTheme.ts | 9 +++- .../mask/src/utils/theme/useSwapPageTheme.ts | 1 + .../src/web3/UI/EthereumChainBoundary.tsx | 47 ++----------------- .../UI/EthereumWalletConnectedBoundary.tsx | 12 ----- .../src/SNSAdaptor/CheckSecurityDialog.tsx | 11 ++--- 10 files changed, 27 insertions(+), 79 deletions(-) diff --git a/packages/mask/src/plugins/MaskPluginWrapper.tsx b/packages/mask/src/plugins/MaskPluginWrapper.tsx index 82f6f215d111..ea2ba720a107 100644 --- a/packages/mask/src/plugins/MaskPluginWrapper.tsx +++ b/packages/mask/src/plugins/MaskPluginWrapper.tsx @@ -74,15 +74,6 @@ const useStyles = makeStyles<{ backgroundGradient?: string }>()((theme, props) = body: { padding: theme.spacing(0), }, - button: { - backgroundColor: theme.palette.maskColor.dark, - color: 'white', - width: 254, - '&,&:hover': { - background: theme.palette.maskColor.dark, - }, - borderRadius: 9999, - }, } }) diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx index c94f0df53a3b..bc864489a80f 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketDialog.tsx @@ -240,7 +240,7 @@ export default function RedPacketDialog(props: RedPacketDialogProps) { const tokenState = useState(RpTypeTabs.ERC20) - const dialogContentHeight = state[0] === DialogTabs.past ? 600 : tokenState[0] === RpTypeTabs.ERC20 ? 350 : 670 + const dialogContentHeight = state[0] === DialogTabs.past ? 600 : tokenState[0] === RpTypeTabs.ERC20 ? 350 : 690 const tabProps: AbstractTabProps = { tabs: [ diff --git a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketERC721Form.tsx b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketERC721Form.tsx index 04adabcfc0d4..63c55e2e534b 100644 --- a/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketERC721Form.tsx +++ b/packages/mask/src/plugins/RedPacket/SNSAdaptor/RedPacketERC721Form.tsx @@ -71,8 +71,8 @@ const useStyles = makeStyles()((theme) => { gridTemplateColumns: 'repeat(4, 1fr)', gap: 16, width: '100%', - height: 200, overflowY: 'auto', + height: 200, background: theme.palette.background.default, borderRadius: 12, padding: theme.spacing(1.5, 1.5, 1, 1), diff --git a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx index c55166e43d31..1b2614b87110 100644 --- a/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx +++ b/packages/mask/src/plugins/Wallet/SNSAdaptor/SelectProviderDialog/index.tsx @@ -19,6 +19,7 @@ import { WalletMessages, WalletRPC } from '../../messages' import { hasNativeAPI, nativeAPI } from '../../../../../shared/native-rpc' import { PluginProviderRender } from './PluginProviderRender' import { pluginIDSettings } from '../../../../settings/settings' +import { useUpdateEffect } from 'react-use' const useStyles = makeStyles()((theme) => ({ content: { @@ -70,7 +71,6 @@ export function SelectProviderDialog(props: SelectProviderDialogProps) { async (result?: Web3Plugin.ConnectionResult) => { if (result) await WalletRPC.updateAccount(result as Web3Plugin.ConnectionResult) - if (undeterminedNetwork?.type === networkType) { pluginIDSettings.value = undeterminedPluginID } @@ -80,6 +80,12 @@ export function SelectProviderDialog(props: SelectProviderDialogProps) { [networkType, undeterminedNetwork?.type, undeterminedPluginID, closeDialog, isDashboard], ) + useUpdateEffect(() => { + if (undeterminedNetwork?.type === networkType) { + pluginIDSettings.value = undeterminedPluginID + } + }, [undeterminedNetwork?.type, networkType]) + // not available for the native app if (hasNativeAPI) return null diff --git a/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts b/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts index a51c4e3bcb8a..a3e1c4fb8a7b 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/ui-provider.ts @@ -61,11 +61,11 @@ const useInjectedDialogClassesOverwriteTwitter = makeStyles()((theme) => { }, dialogTitle: { display: 'grid', - gridTemplateColumns: 'repeat(3, 1fr)', + gridTemplateColumns: '1fr auto 1fr', alignItems: 'center', padding: 16, position: 'relative', - background: theme.palette.background.modalTitle, + background: theme.palette.maskColor.modelTitleBg, borderBottom: 'none', '& > p': { fontSize: 18, @@ -84,7 +84,6 @@ const useInjectedDialogClassesOverwriteTwitter = makeStyles()((theme) => { }, }, dialogContent: { - padding: 16, [smallQuery]: { display: 'flex', flexDirection: 'column', diff --git a/packages/mask/src/utils/theme/useClassicMaskSNSTheme.ts b/packages/mask/src/utils/theme/useClassicMaskSNSTheme.ts index 1c083fb4ec90..5413c6bd916d 100644 --- a/packages/mask/src/utils/theme/useClassicMaskSNSTheme.ts +++ b/packages/mask/src/utils/theme/useClassicMaskSNSTheme.ts @@ -10,6 +10,8 @@ import { ValueRef } from '@dimensiondev/holoflows-kit' import { useValueRef } from '@masknet/shared-base-ui' import { languageSettings } from '../../settings/settings' import { cloneDeep, merge } from 'lodash-unified' +import twitterColorSchema from '../../social-network-adaptor/twitter.com/customization/twitter-color-schema.json' +import produce, { setAutoFreeze } from 'immer' const staticRef = createSubscriptionFromValueRef(new ValueRef('light')) const defaultUseTheme = (t: Theme) => t @@ -22,9 +24,14 @@ export function useClassicMaskSNSTheme() { const palette = useSubscription(provider) const baseTheme = palette === 'dark' ? MaskDarkTheme : MaskLightTheme + setAutoFreeze(false) + const maskTheme = produce(baseTheme, (theme) => { + const colorSchema = twitterColorSchema[theme.palette.mode] + theme.palette.maskColor = colorSchema.maskColor + }) // TODO: support RTL? const [localization, isRTL] = useThemeLanguage(useValueRef(languageSettings)) - const theme = unstable_createMuiStrictModeTheme(baseTheme, localization) + const theme = unstable_createMuiStrictModeTheme(maskTheme, localization) return usePostTheme(theme) } diff --git a/packages/mask/src/utils/theme/useSwapPageTheme.ts b/packages/mask/src/utils/theme/useSwapPageTheme.ts index 0b333937e75d..1377a6039aa1 100644 --- a/packages/mask/src/utils/theme/useSwapPageTheme.ts +++ b/packages/mask/src/utils/theme/useSwapPageTheme.ts @@ -26,6 +26,7 @@ export function useSwapPageTheme() { Object.assign(theme.palette[color], colorSchema[color]) } }) + theme.palette.maskColor = colorSchema.maskColor theme.palette.divider = colorSchema.divider theme.palette.secondaryDivider = colorSchema.secondaryDivider theme.components = theme.components || {} diff --git a/packages/mask/src/web3/UI/EthereumChainBoundary.tsx b/packages/mask/src/web3/UI/EthereumChainBoundary.tsx index 5eaaa17c574c..03596762dc52 100644 --- a/packages/mask/src/web3/UI/EthereumChainBoundary.tsx +++ b/packages/mask/src/web3/UI/EthereumChainBoundary.tsx @@ -35,14 +35,6 @@ import { WalletIcon } from '@masknet/shared' import { PluginWalletConnectIcon } from '@masknet/icons' const useStyles = makeStyles()((theme) => ({ - button: { - backgroundColor: theme.palette.maskColor.dark, - color: 'white', - width: 254, - '&,&:hover': { - background: theme.palette.maskColor.dark, - }, - }, action: { textAlign: 'center', margin: theme.spacing(1), @@ -193,18 +185,7 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { startIcon={} variant="contained" size={props.ActionButtonPromiseProps?.size} - sx={{ - backgroundColor: theme.palette.maskColor.dark, - width: '100%', - color: 'white', - '&:hover': { - backgroundColor: theme.palette.maskColor.dark, - }, - margin: 0, - lineHeight: 0, - paddingTop: 1.25, - paddingBottom: 1.25, - }} + sx={{ marginTop: 1.5 }} onClick={openSelectProviderDialog}> {t('plugin_wallet_connect_wallet')} @@ -246,18 +227,7 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { isBorderColorNotDefault /> } - sx={ - props.switchButtonStyle ?? { - backgroundColor: theme.palette.maskColor.dark, - width: '100%', - color: 'white', - '&:hover': { - backgroundColor: theme.palette.maskColor.dark, - }, - padding: 1, - margin: 0, - } - } + sx={props.switchButtonStyle} style={{ borderRadius: 10 }} init={ @@ -303,18 +273,7 @@ export function EthereumChainBoundary(props: EthereumChainBoundaryProps) { size={18} /> } - sx={ - props.switchButtonStyle ?? { - backgroundColor: theme.palette.maskColor.dark, - width: '100%', - color: 'white', - '&:hover': { - backgroundColor: theme.palette.maskColor.dark, - }, - padding: 1, - margin: 0, - } - } + sx={props.switchButtonStyle} style={{ borderRadius: 10, paddingTop: 11, paddingBottom: 11 }} init={ diff --git a/packages/mask/src/web3/UI/EthereumWalletConnectedBoundary.tsx b/packages/mask/src/web3/UI/EthereumWalletConnectedBoundary.tsx index 1f5a08c3e18d..63efefd2ba4f 100644 --- a/packages/mask/src/web3/UI/EthereumWalletConnectedBoundary.tsx +++ b/packages/mask/src/web3/UI/EthereumWalletConnectedBoundary.tsx @@ -10,20 +10,8 @@ import { useWalletRiskWarningDialog } from '../../plugins/Wallet/hooks/useWallet const useStyles = makeStyles()((theme) => ({ button: { - backgroundColor: theme.palette.maskColor.dark, - color: 'white', - fontSize: 14, - fontWeight: 700, - width: '100%', - '&:hover': { - backgroundColor: theme.palette.maskColor.dark, - }, margin: 0, }, - grid: { - justifyContent: 'center', - padding: 8, - }, })) export interface EthereumWalletConnectedBoundaryProps diff --git a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx index 799f7107b49a..b1de8cdd21ff 100644 --- a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx +++ b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx @@ -1,5 +1,5 @@ import { Box, DialogContent, Stack } from '@mui/material' -import { makeStyles, MaskDialog, useStylesExtends } from '@masknet/theme' +import { makeStyles, useStylesExtends } from '@masknet/theme' import { useI18N } from '../locales' import { SearchBox } from './components/SearchBox' import { useAsyncFn } from 'react-use' @@ -11,6 +11,7 @@ import { Center, TokenSecurity } from './components/Common' import { DefaultPlaceholder } from './components/DefaultPlaceholder' import { NotFound } from './components/NotFound' import type { ChainId } from '@masknet/web3-shared-evm' +import { InjectedDialog } from '@masknet/shared' const useStyles = makeStyles()((theme) => ({ root: { @@ -52,11 +53,7 @@ export function CheckSecurityDialog(props: BuyTokenDialogProps) { }, []) return ( - + @@ -81,6 +78,6 @@ export function CheckSecurityDialog(props: BuyTokenDialogProps) { - + ) } From 961b528bed98e0450c40cd043f760e18c31be032 Mon Sep 17 00:00:00 2001 From: BillyS Date: Thu, 19 May 2022 13:24:38 +0800 Subject: [PATCH 24/29] fix: 765 (#6304) --- .../src/pages/Wallets/components/Balance/index.tsx | 7 +++++-- .../src/components/CompositionDialog/CompositionUI.tsx | 7 ++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/dashboard/src/pages/Wallets/components/Balance/index.tsx b/packages/dashboard/src/pages/Wallets/components/Balance/index.tsx index d782c2df2c3c..88763228ff6d 100644 --- a/packages/dashboard/src/pages/Wallets/components/Balance/index.tsx +++ b/packages/dashboard/src/pages/Wallets/components/Balance/index.tsx @@ -122,10 +122,13 @@ export const Balance = memo( {showOperations && ( - -
From 7e5fe960c1fa484dbba97a2e0b122c3ea03f660b Mon Sep 17 00:00:00 2001 From: Hom Date: Thu, 19 May 2022 14:20:47 +0800 Subject: [PATCH 25/29] fix: profile selector (#6305) --- .../src/social-network-adaptor/twitter.com/utils/selector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts index 34847bbda5b6..9e6c1f22d6a7 100644 --- a/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts +++ b/packages/mask/src/social-network-adaptor/twitter.com/utils/selector.ts @@ -114,7 +114,7 @@ export const postEditorInPopupSelector: () => LiveSelector = () => export const toolBoxInSideBarSelector: () => LiveSelector = () => querySelector('[role="banner"] [role="navigation"] > div') export const sideBarProfileSelector: () => LiveSelector = () => - querySelector('[role="banner"] [role="navigation"] [aria-label="Profile"] > div') + querySelector('[role="banner"] [role="navigation"] [data-testid="AppTabBar_Profile_Link"] > div') export const postEditorInTimelineSelector: () => LiveSelector = () => querySelector('[role="main"] :not(aside) > [role="progressbar"] ~ div [role="button"][aria-label]:nth-child(6)') From 80ba786361b86d1a971e24a6c1a7ee8d9722fd96 Mon Sep 17 00:00:00 2001 From: nuanyang233 Date: Thu, 19 May 2022 15:07:51 +0800 Subject: [PATCH 26/29] fix: remove hard code width (#6306) --- .../GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx index b1de8cdd21ff..24175208b17d 100644 --- a/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx +++ b/packages/plugins/GoPlusSecurity/src/SNSAdaptor/CheckSecurityDialog.tsx @@ -27,7 +27,6 @@ const useStyles = makeStyles()((theme) => ({ }, }, content: { - width: 552, height: 510, maxHeight: 510, paddingBottom: theme.spacing(3), From 65050ec910ec70d4b797d0449eb090c67d91aa8a Mon Sep 17 00:00:00 2001 From: BillyS Date: Thu, 19 May 2022 18:48:00 +0800 Subject: [PATCH 27/29] fix: some 2.8.0 ui issues (#6308) --- packages/icons/general/Copy.tsx | 2 -- .../src/components/shared/SelectRecipients/ProfileInList.tsx | 4 ++-- packages/mask/src/plugins/NextID/SNSAdaptor/index.tsx | 2 +- packages/mask/src/plugins/NextID/components/BindingItem.tsx | 1 - 4 files changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/icons/general/Copy.tsx b/packages/icons/general/Copy.tsx index cfc5ae8e708c..71387634955f 100644 --- a/packages/icons/general/Copy.tsx +++ b/packages/icons/general/Copy.tsx @@ -7,13 +7,11 @@ export const CopyIcon = createIcon( fillRule="evenodd" clipRule="evenodd" d="M7.736 12.538c-.898 0-1.68-.267-2.244-.793-.566-.53-.858-1.273-.858-2.117V4.882c0-.84.29-1.58.852-2.109.558-.525 1.335-.795 2.226-.8h.003l4.383-.001c.898 0 1.68.267 2.244.793.566.53.858 1.273.858 2.117v4.746c0 .84-.29 1.58-.852 2.109-.558.525-1.335.794-2.226.8h-.003l-4.383.001v-.533.533Zm0-1.066c-.689 0-1.19-.203-1.516-.507-.32-.3-.52-.745-.52-1.337V4.882c0-.588.198-1.032.516-1.332.322-.303.82-.506 1.5-.51h.002l4.38-.002c.689 0 1.19.203 1.515.507.321.3.52.745.52 1.337v4.746c0 .588-.197 1.032-.516 1.332-.321.302-.818.506-1.5.51l-4.381.002Z" - fill="#767F8D" /> , '0 0 16 17', diff --git a/packages/mask/src/components/shared/SelectRecipients/ProfileInList.tsx b/packages/mask/src/components/shared/SelectRecipients/ProfileInList.tsx index 1b57fde505a1..3f2a3f62be39 100644 --- a/packages/mask/src/components/shared/SelectRecipients/ProfileInList.tsx +++ b/packages/mask/src/components/shared/SelectRecipients/ProfileInList.tsx @@ -2,7 +2,7 @@ import { useCallback } from 'react' import { ListItemText, Checkbox, ListItemAvatar, ListItem } from '@mui/material' import { makeStyles, ShadowRootTooltip } from '@masknet/theme' import Highlighter from 'react-highlight-words' -import { formatPersonaPublicKey, ProfileInformationFromNextID } from '@masknet/shared-base' +import { formatPersonaFingerprint, ProfileInformationFromNextID } from '@masknet/shared-base' import { Avatar } from '../../../utils/components/Avatar' import { CopyIcon } from '@masknet/icons' import { truncate } from 'lodash-unified' @@ -112,7 +112,7 @@ export function ProfileInList(props: ProfileInListProps) { (ev: React.MouseEvent) => props.onChange(ev, !props.selected), [props], ) - const textToHighlight = formatPersonaPublicKey(profile.linkedPersona?.rawPublicKey?.toUpperCase() ?? '', 4) + const textToHighlight = formatPersonaFingerprint(profile.linkedPersona?.rawPublicKey?.toUpperCase() ?? '', 3) return ( , diff --git a/packages/mask/src/plugins/NextID/components/BindingItem.tsx b/packages/mask/src/plugins/NextID/components/BindingItem.tsx index 3619ac2cd908..a16aaec72842 100644 --- a/packages/mask/src/plugins/NextID/components/BindingItem.tsx +++ b/packages/mask/src/plugins/NextID/components/BindingItem.tsx @@ -22,7 +22,6 @@ const useStyles = makeStyles()((theme) => ({ }, copy: { fontSize: 16, - stroke: theme.palette.text.primary, cursor: 'pointer', }, address: { From 6ea16e74e8ff0a0d1413d46252f402957187148a Mon Sep 17 00:00:00 2001 From: septs Date: Thu, 19 May 2022 22:13:02 +0800 Subject: [PATCH 28/29] fix: get by identity (#6284) --- packages/web3-providers/src/NextID/kv.ts | 26 +++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/packages/web3-providers/src/NextID/kv.ts b/packages/web3-providers/src/NextID/kv.ts index c38a8fbed289..2a4fd3dc4f74 100644 --- a/packages/web3-providers/src/NextID/kv.ts +++ b/packages/web3-providers/src/NextID/kv.ts @@ -35,20 +35,22 @@ export class NextIDStorageAPI implements NextIDBaseAPI.Storage { identity: string, pluginId: string, ): Promise> { - const response = await fetchJSON<{ + interface Proof { + platform: NextIDPlatform + identity: string + content: Record + } + interface Response { persona: string - proofs: Array<{ - platform: NextIDPlatform - identity: string - content: Record - }> - }>(urlcat(BASE_URL, '/v1/kv', { persona: personaPublicKey })) + proofs: Proof[] + } + const response = await fetchJSON(urlcat(BASE_URL, '/v1/kv', { persona: personaPublicKey })) if (!response.ok) return Err('User not found') - - const data = - response.val.proofs?.filter((x) => x.identity === identity.toLowerCase() && x.platform === platform) ?? [] - if (!data.length) return Err('Not found') - return Ok(data[0].content[pluginId]) + const proofs = (response.val.proofs ?? []) + .filter((x) => x.platform === platform) + .filter((x) => x.identity === identity.toLowerCase()) + if (!proofs.length) return Err('Not found') + return Ok(proofs[0].content[pluginId]) } async get(personaPublicKey: string): Promise> { return fetchJSON(urlcat(BASE_URL, '/v1/kv', { persona: personaPublicKey })) From 83a6130ef4aa68256de5511cdbcc24a6c8e7a430 Mon Sep 17 00:00:00 2001 From: BillyS Date: Fri, 20 May 2022 00:30:43 +0800 Subject: [PATCH 29/29] fix: fix compose bottom nav style (#6313) --- .../mask/src/components/CompositionDialog/CompositionUI.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mask/src/components/CompositionDialog/CompositionUI.tsx b/packages/mask/src/components/CompositionDialog/CompositionUI.tsx index 2c9bd36b0fa8..cb7f0962ef19 100644 --- a/packages/mask/src/components/CompositionDialog/CompositionUI.tsx +++ b/packages/mask/src/components/CompositionDialog/CompositionUI.tsx @@ -39,6 +39,8 @@ const useStyles = makeStyles()((theme) => ({ position: 'absolute', bottom: 0, width: '100%', + left: '50%', + transform: 'translateX(-50%)', display: 'flex', padding: '14px 16px', boxSizing: 'border-box', @@ -47,7 +49,6 @@ const useStyles = makeStyles()((theme) => ({ alignItems: 'center', background: theme.palette.background.paper, boxShadow: `0px 0px 20px 0px ${theme.palette.background.messageShadow}`, - transform: 'translateX(-16px)', }, between: { justifyContent: 'space-between',