From 02a5f25b4c84b092da9f7b34fd1c9b2794adc271 Mon Sep 17 00:00:00 2001 From: guanbinrui <52657989+guanbinrui@users.noreply.github.com> Date: Fri, 30 Aug 2024 14:14:22 +0800 Subject: [PATCH] [Release] Hotfix 2.26.7 => 2.26.8 (patch) (#11752) * chore: bump version to 2.26.8 * feat: mf-6093 migrate rss3 api (#11753) * feat: mf-6093 migrate rss3 api * fixup! feat: mf-6093 migrate rss3 api * feat: feeds filters * fixup! feat: mf-6093 migrate rss3 api * fix: feed details * fixup! fix: feed details * feat: address label * refactor: extra FeedActions * fix: liquid card * fixup! feat: mf-6093 migrate rss3 api (#11753) (#11755) * chore: flush ci cache (#11757) * fix: adjust color (#11756) * fix: adjust color * fix: rename translate key * chore: remove syncing remote translation (#11758) * feat: mf-6333 mf-6334 profile total value (#11759) * feat: mf-6333 mf-6334 profile total value * feat: mf-6104 adjust profile card size * fix: rss3 issues (#11760) * fix: mf-6337 update gate way * fix: mf-6338 always use blockie * fix: action height * fix: mf-6339 prefer platform handle * fix: mf-6342 text overflow * fix: fw-6343 chain name * fix: mf-6340 video in post * fix: mf-6346 reverse ens in tx details * fix: user label for note action * fix: mf-6347 translate * fix: mf-6350 FeedFilters absolute position * fix: mf-6351 tab actions state * fixup! fix: mf-6350 FeedFilters absolute position * fix: mf-6349 adjust tabs order * Update packages/web3-shared/base/tests/helpers/resolver.ts --------- Co-authored-by: guanbinrui <52657989+guanbinrui@users.noreply.github.com> * fix: return empty list if no chains selected (#11762) * fix: format usd value * fix: mf-6353 retun empty list if no chains selected * fix: mf-6344 mf-6345 user avatar * fix: mf-6339 shared post * fix: mf-6355 break word * fix: mf-6354 tab action color in dark mode on profile card * fix: mf-6348 remove link * fix: update translation (#11763) * fix: update translation * fix: mf-6357 loading feeds * fix: mf-6356 actions could be empty * fix: adjust font size * fix: collapse cards with more than 3 actions (#11764) * chore: flush ci cache (#11766) * fix: update powered by text (#11768) * fix: merge TokenApprovalCard into TokenOperationCard (#11769) * fix(Twitter): update query id for UserByScreenName (#11771) * chore(Twitter): remove unused api for user info (#11773) --------- Co-authored-by: Wukong Sun Co-authored-by: Jack Works <5390719+Jack-Works@users.noreply.github.com> --- .github/workflows/compile.yml | 8 - .gitignore | 1 + cspell.json | 6 + package.json | 2 +- packages/icons/brands/Curve.png | Bin 0 -> 35400 bytes packages/icons/brands/Highlight.svg | 11 ++ packages/icons/brands/Iqwiki.svg | 26 +++ packages/icons/brands/Lido.svg | 12 ++ packages/icons/brands/Linea.svg | 11 ++ packages/icons/brands/OneInch.png | Bin 0 -> 31130 bytes packages/icons/brands/RSS3.svg | 3 +- packages/icons/brands/Savm.svg | 14 ++ packages/icons/brands/Stargate.png | Bin 0 -> 12291 bytes packages/icons/brands/base.png | Bin 0 -> 3290 bytes packages/icons/general/ArrowUp2.svg | 3 + packages/icons/general/Blocks.svg | 3 + packages/icons/general/Filter.svg | 2 +- packages/icons/general/Gas.svg | 2 +- packages/icons/general/GasStation.svg | 4 - packages/icons/icon-generated-as-jsx.js | 114 +++++++++-- packages/icons/icon-generated-as-url.js | 12 +- .../ProfileCard/AvatarDecoration.tsx | 2 + .../InjectedComponents/ProfileCard/index.tsx | 47 +++-- .../InjectedComponents/ProfileTabContent.tsx | 49 +++-- .../SearchResultInspector.tsx | 19 +- .../content-script/site-adaptor-infra/ui.ts | 3 - .../twitter.com/collecting/identity.ts | 25 +-- .../injection/ProfileCard/constants.ts | 2 +- packages/mask/dashboard/Dashboard.tsx | 4 +- packages/plugin-infra/src/types.ts | 7 + .../Collectible/src/SiteAdaptor/index.tsx | 2 +- .../Handle/src/SiteAdaptor/PluginHeader.tsx | 43 ++-- .../src/SiteAdaptor/SearchResultInspector.tsx | 48 ++++- .../plugins/Handle/src/locales/en-US.json | 4 +- packages/plugins/RSS3/package.json | 1 + .../RSS3/src/SiteAdaptor/FeedFilters.tsx | 94 +++++++++ .../RSS3/src/SiteAdaptor/FeedsPage.tsx | 101 +++++++--- .../FeedActions/CollectibleAction.tsx | 172 ++++++++++++++++ .../FeedActions/CollectibleApprovalAction.tsx | 61 ++++++ .../components/FeedActions/CommentAction.tsx | 61 ++++++ .../components/FeedActions/DonationAction.tsx | 87 +++++++++ .../FeedActions/LiquidityAction.tsx | 78 ++++++++ .../components/FeedActions/NoteAction.tsx | 70 +++++++ .../components/FeedActions/ProfileAction.tsx | 58 ++++++ .../FeedActions/ProfileLinkAction.tsx | 79 ++++++++ .../components/FeedActions/ProfileProxy.tsx | 54 ++++++ .../components/FeedActions/ProposeAction.tsx | 46 +++++ .../components/FeedActions/StakingAction.tsx | 63 ++++++ .../FeedActions/TokenApprovalAction.tsx | 70 +++++++ .../FeedActions/TokenBridgeAction.tsx | 64 ++++++ .../FeedActions/TokenOperationAction.tsx | 152 +++++++++++++++ .../FeedActions/TokenSwapAction.tsx | 69 +++++++ .../components/FeedActions/UnknownAction.tsx | 41 ++++ .../components/FeedActions/VoteAction.tsx | 68 +++++++ .../components/FeedActions/index.tsx | 73 +++++++ .../FeedCard/CollectibleApprovalCard.tsx | 26 +-- .../components/FeedCard/CollectibleCard.tsx | 108 +---------- .../components/FeedCard/CommentCard.tsx | 154 +++++++++------ .../components/FeedCard/DonationCard.tsx | 35 +--- .../components/FeedCard/LiquidityCard.tsx | 127 +----------- .../components/FeedCard/NoteCard.tsx | 59 ++---- .../components/FeedCard/ProfileCard.tsx | 23 +-- .../components/FeedCard/ProfileLinkCard.tsx | 25 +-- .../components/FeedCard/ProfileProxy.tsx | 19 +- .../components/FeedCard/ProposeCard.tsx | 20 +- .../components/FeedCard/StakingCard.tsx | 76 +------- .../components/FeedCard/TokenApprovalCard.tsx | 87 +-------- .../components/FeedCard/TokenBridgeCard.tsx | 100 +--------- .../FeedCard/TokenOperationCard.tsx | 115 +---------- .../components/FeedCard/TokenSwapCard.tsx | 101 +--------- .../components/FeedCard/UnknownCard.tsx | 32 +-- .../components/FeedCard/VoteCard.tsx | 55 +----- .../SiteAdaptor/components/FeedCard/index.tsx | 14 +- .../components/FeedCard/useMarkdownStyles.ts | 9 + .../components/UserAvatar/index.tsx | 64 ++++++ .../RSS3/src/SiteAdaptor/components/base.tsx | 40 +--- .../components/{FeedCard => }/common.tsx | 46 +++-- .../RSS3/src/SiteAdaptor/components/share.ts | 49 ++--- .../plugins/RSS3/src/SiteAdaptor/emitter.ts | 46 +++++ .../plugins/RSS3/src/SiteAdaptor/filters.ts | 20 ++ .../src/SiteAdaptor/hooks/useAddressLabel.ts | 8 +- .../RSS3/src/SiteAdaptor/hooks/useFeeds.ts | 29 ++- .../plugins/RSS3/src/SiteAdaptor/index.tsx | 167 ++++++++++------ .../modals/DetailsModal/DetailDialog.tsx | 55 +----- .../modals/DetailsModal/TxDetails.tsx | 183 ++++++++++++++++++ .../SiteAdaptor/modals/DetailsModal/index.tsx | 12 +- packages/plugins/RSS3/src/constants.ts | 24 +++ packages/plugins/RSS3/src/locales/en-US.json | 80 +++++--- packages/plugins/RSS3/src/locales/ja-JP.json | 30 +-- packages/plugins/RSS3/src/locales/ko-KR.json | 57 ------ packages/plugins/RSS3/src/locales/zh-CN.json | 10 +- .../components/SmartPayContent.tsx | 4 +- .../UI/components/EthereumBlockie/index.tsx | 8 +- .../UI/components/ReversedAddress/index.tsx | 11 +- packages/shared/src/hooks/index.ts | 1 + .../shared/src/hooks/useUserTotalBalance.ts | 13 ++ .../base/src/useFireflyFarcasterAccounts.ts | 2 + .../web3-hooks/base/src/useReverseAddress.ts | 29 ++- .../src/DeBank/apis/FungibleTokenAPI.ts | 7 +- packages/web3-providers/src/DeBank/types.ts | 13 ++ .../web3-providers/src/RSS3/apis/RSS3API.ts | 105 +++++----- packages/web3-providers/src/RSS3/constants.ts | 26 +-- packages/web3-providers/src/RSS3/types.ts | 26 +-- .../src/Twitter/apis/getUserByScreenName.ts | 8 +- .../Twitter/apis/getUserByScreenNameShow.ts | 47 ----- .../Twitter/apis/getUserViaTwitterIdentity.ts | 43 ---- .../web3-providers/src/Twitter/apis/index.ts | 2 - packages/web3-providers/src/Twitter/index.ts | 29 +-- packages/web3-providers/src/types/RSS3.ts | 169 ++++++++++------ .../web3-shared/base/src/helpers/resolver.ts | 2 +- .../base/tests/helpers/resolver.ts | 27 ++- pnpm-lock.yaml | 10 +- setups/handlers/DSearch.ts | 145 +++++++------- 113 files changed, 3044 insertions(+), 1839 deletions(-) create mode 100644 packages/icons/brands/Curve.png create mode 100644 packages/icons/brands/Highlight.svg create mode 100644 packages/icons/brands/Iqwiki.svg create mode 100644 packages/icons/brands/Lido.svg create mode 100644 packages/icons/brands/Linea.svg create mode 100644 packages/icons/brands/OneInch.png create mode 100644 packages/icons/brands/Savm.svg create mode 100644 packages/icons/brands/Stargate.png create mode 100644 packages/icons/brands/base.png create mode 100644 packages/icons/general/ArrowUp2.svg create mode 100644 packages/icons/general/Blocks.svg delete mode 100644 packages/icons/general/GasStation.svg create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/FeedFilters.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/CollectibleAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/CollectibleApprovalAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/CommentAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/DonationAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/LiquidityAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/NoteAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/ProfileAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/ProfileLinkAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/ProfileProxy.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/ProposeAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/StakingAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/TokenApprovalAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/TokenBridgeAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/TokenOperationAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/TokenSwapAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/UnknownAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/VoteAction.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/index.tsx create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/components/UserAvatar/index.tsx rename packages/plugins/RSS3/src/SiteAdaptor/components/{FeedCard => }/common.tsx (64%) create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/emitter.ts create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/filters.ts create mode 100644 packages/plugins/RSS3/src/SiteAdaptor/modals/DetailsModal/TxDetails.tsx create mode 100644 packages/shared/src/hooks/useUserTotalBalance.ts delete mode 100644 packages/web3-providers/src/Twitter/apis/getUserByScreenNameShow.ts delete mode 100644 packages/web3-providers/src/Twitter/apis/getUserViaTwitterIdentity.ts diff --git a/.github/workflows/compile.yml b/.github/workflows/compile.yml index 7e3e67c3f9db..064d8f8dd582 100644 --- a/.github/workflows/compile.yml +++ b/.github/workflows/compile.yml @@ -45,14 +45,6 @@ jobs: uses: DimensionDev/github-token-action@latest with: registry: true - - name: Restore Webpack cache - uses: actions/cache@v4 - with: - path: packages/mask/node_modules/.cache/ - key: extension-v3-${{ hashFiles('pnpm-lock.yaml') }}-${{ steps.get-date.outputs.date }} - restore-keys: | - extension-v3-${{ hashFiles('pnpm-lock.yaml') }} - extension-v3- - run: git config --global url."https://github.com/".insteadOf git@github.com - run: pnpm install - run: npx gulp build-ci diff --git a/.gitignore b/.gitignore index c3d3f2b13373..7c68bc4670a5 100644 --- a/.gitignore +++ b/.gitignore @@ -121,3 +121,4 @@ common/autoinstallers/*/.npmrc # Disallow other package manager lock-file /package-lock.json /yarn.lock +quick-lint-js.config diff --git a/cspell.json b/cspell.json index 77e36629540a..f7b5b162d537 100644 --- a/cspell.json +++ b/cspell.json @@ -20,6 +20,7 @@ ], "words": [ "aave", + "aavegotchi", "adai", "addrs", "aeth", @@ -137,12 +138,14 @@ "iotx", "ipfs", "ipfshttp", + "iqwiki", "ittr", "jsonml", "juicebox", "kdfparams", "keccak", "keybase", + "kiwistand", "klay", "klaytn", "kred", @@ -155,6 +158,7 @@ "lenster", "lenstube", "lifi", + "linea", "linkify", "linkifyjs", "linkswap", @@ -262,6 +266,7 @@ "roninchain", "rpid", "sablier", + "savm", "sbch", "scamsniffer", "scenechange", @@ -282,6 +287,7 @@ "sollet", "solsea", "spaceid", + "stargate", "startable", "steganographic", "steganography", diff --git a/package.json b/package.json index d71712ce18d5..3b1a9bf901f4 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "yarn": ">=999.0.0", "npm": ">=999.0.0" }, - "version": "2.26.7", + "version": "2.26.8", "private": true, "license": "AGPL-3.0-or-later", "scripts": { diff --git a/packages/icons/brands/Curve.png b/packages/icons/brands/Curve.png new file mode 100644 index 0000000000000000000000000000000000000000..bee89bc219ed64568518b12fcb232785b34f4f4e GIT binary patch literal 35400 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 + + + + + + + + + + diff --git a/packages/icons/brands/Iqwiki.svg b/packages/icons/brands/Iqwiki.svg new file mode 100644 index 000000000000..327886969e87 --- /dev/null +++ b/packages/icons/brands/Iqwiki.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/icons/brands/Lido.svg b/packages/icons/brands/Lido.svg new file mode 100644 index 000000000000..590ad8f7b357 --- /dev/null +++ b/packages/icons/brands/Lido.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/icons/brands/Linea.svg b/packages/icons/brands/Linea.svg new file mode 100644 index 000000000000..97e0a0551c8f --- /dev/null +++ b/packages/icons/brands/Linea.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/icons/brands/OneInch.png b/packages/icons/brands/OneInch.png new file mode 100644 index 0000000000000000000000000000000000000000..53aa018b71ec8512d057cc1a39f551c6a8015378 GIT binary patch literal 31130 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�jGYwz))4s~Rx! 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 - - + diff --git a/packages/icons/brands/Savm.svg b/packages/icons/brands/Savm.svg new file mode 100644 index 000000000000..758efb1a5407 --- /dev/null +++ b/packages/icons/brands/Savm.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/icons/brands/Stargate.png b/packages/icons/brands/Stargate.png new file mode 100644 index 0000000000000000000000000000000000000000..644952fd6a7124a2cd3b95f2f162ecd49234139b GIT binary patch literal 12291 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 literal 0 HcmV?d00001 diff --git a/packages/icons/brands/base.png b/packages/icons/brands/base.png new file mode 100644 index 0000000000000000000000000000000000000000..d3547ad0bf6d18b0a22e16fddb617b12e7e379cb GIT binary patch literal 3290 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 + + diff --git a/packages/icons/general/Blocks.svg b/packages/icons/general/Blocks.svg new file mode 100644 index 000000000000..ba76357f32df --- /dev/null +++ b/packages/icons/general/Blocks.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/icons/general/Filter.svg b/packages/icons/general/Filter.svg index fa0f02391b50..1d96b39e3752 100644 --- a/packages/icons/general/Filter.svg +++ b/packages/icons/general/Filter.svg @@ -1,3 +1,3 @@ - + diff --git a/packages/icons/general/Gas.svg b/packages/icons/general/Gas.svg index d3cc424e1739..ff79bddadf1e 100644 --- a/packages/icons/general/Gas.svg +++ b/packages/icons/general/Gas.svg @@ -1,5 +1,5 @@ - + diff --git a/packages/icons/general/GasStation.svg b/packages/icons/general/GasStation.svg deleted file mode 100644 index 8bc87f78b4ca..000000000000 --- a/packages/icons/general/GasStation.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/icons/icon-generated-as-jsx.js b/packages/icons/icon-generated-as-jsx.js index f0c5ebd73b70..f1db6ea96c19 100644 --- a/packages/icons/icon-generated-as-jsx.js +++ b/packages/icons/icon-generated-as-jsx.js @@ -25,6 +25,11 @@ export const Avalanche = /*#__PURE__*/ __createIcon('Avalanche', [ u: () => new URL('./brands/Avalanche.svg', import.meta.url).href, }, ]) +export const Base = /*#__PURE__*/ __createIcon('base', [ + { + u: () => new URL('./brands/base.png', import.meta.url).href, + }, +]) export const BSC = /*#__PURE__*/ __createIcon('BSC', [ { u: () => new URL('./brands/BSC.svg', import.meta.url).href, @@ -65,6 +70,11 @@ export const CrossSync = /*#__PURE__*/ __createIcon('CrossSync', [ u: () => new URL('./brands/CrossSync.svg', import.meta.url).href, }, ]) +export const Curve = /*#__PURE__*/ __createIcon('Curve', [ + { + u: () => new URL('./brands/Curve.png', import.meta.url).href, + }, +]) export const CyberConnect = /*#__PURE__*/ __createIcon('CyberConnect', [ { u: () => new URL('./brands/CyberConnect.svg', import.meta.url).href, @@ -229,6 +239,11 @@ export const Gnosis = /*#__PURE__*/ __createIcon('Gnosis', [ u: () => new URL('./brands/Gnosis.svg', import.meta.url).href, }, ]) +export const Highlight = /*#__PURE__*/ __createIcon('Highlight', [ + { + u: () => new URL('./brands/Highlight.svg', import.meta.url).href, + }, +]) export const Instagram = /*#__PURE__*/ __createIcon('Instagram', [ { u: () => new URL('./brands/Instagram.svg', import.meta.url).href, @@ -254,6 +269,11 @@ export const IPFS = /*#__PURE__*/ __createIcon('IPFS', [ u: () => new URL('./brands/IPFS.svg', import.meta.url).href, }, ]) +export const Iqwiki = /*#__PURE__*/ __createIcon('Iqwiki', [ + { + u: () => new URL('./brands/Iqwiki.svg', import.meta.url).href, + }, +]) export const Keybase = /*#__PURE__*/ __createIcon('Keybase', [ { u: () => new URL('./brands/Keybase.svg', import.meta.url).href, @@ -274,6 +294,16 @@ export const Lens = /*#__PURE__*/ __createIcon('Lens', [ u: () => new URL('./brands/Lens.svg', import.meta.url).href, }, ]) +export const Lido = /*#__PURE__*/ __createIcon('Lido', [ + { + u: () => new URL('./brands/Lido.svg', import.meta.url).href, + }, +]) +export const Linea = /*#__PURE__*/ __createIcon('Linea', [ + { + u: () => new URL('./brands/Linea.svg', import.meta.url).href, + }, +]) export const Link3 = /*#__PURE__*/ __createIcon('Link3', [ { u: () => new URL('./brands/Link3.svg', import.meta.url).href, @@ -423,6 +453,11 @@ export const NFTScan = /*#__PURE__*/ __createIcon('NFTScan', [ u: () => new URL('./brands/NFTScan.svg', import.meta.url).href, }, ]) +export const OneInch = /*#__PURE__*/ __createIcon('OneInch', [ + { + u: () => new URL('./brands/OneInch.png', import.meta.url).href, + }, +]) export const OpenSea = /*#__PURE__*/ __createIcon('OpenSea', [ { u: () => new URL('./brands/OpenSea.svg', import.meta.url).href, @@ -493,6 +528,11 @@ export const RSS3 = /*#__PURE__*/ __createIcon('RSS3', [ u: () => new URL('./brands/RSS3.svg', import.meta.url).href, }, ]) +export const Savm = /*#__PURE__*/ __createIcon('Savm', [ + { + u: () => new URL('./brands/Savm.svg', import.meta.url).href, + }, +]) export const SimpleHash = /*#__PURE__*/ __createIcon('SimpleHash', [ { u: () => new URL('./brands/SimpleHash.png', import.meta.url).href, @@ -503,6 +543,11 @@ export const Solana = /*#__PURE__*/ __createIcon('Solana', [ u: () => new URL('./brands/Solana.svg', import.meta.url).href, }, ]) +export const Stargate = /*#__PURE__*/ __createIcon('Stargate', [ + { + u: () => new URL('./brands/Stargate.png', import.meta.url).href, + }, +]) export const SushiSwap = /*#__PURE__*/ __createIcon('SushiSwap', [ { u: () => new URL('./brands/SushiSwap.png', import.meta.url).href, @@ -873,6 +918,23 @@ export const ArrowUp = /*#__PURE__*/ __createIcon('ArrowUp', [ s: true, }, ]) +export const ArrowUp2 = /*#__PURE__*/ __createIcon('ArrowUp2', [ + { + j: () => + /*#__PURE__*/ _jsx('svg', { + xmlns: 'http://www.w3.org/2000/svg', + fill: 'none', + viewBox: '0 0 24 24', + children: /*#__PURE__*/ _jsx('path', { + fill: 'currentColor', + fillRule: 'evenodd', + d: 'M20.0655 16.0665C19.7531 16.3789 19.2465 16.3789 18.9341 16.0665L12.4998 9.63215L6.06549 16.0665C5.75307 16.3789 5.24654 16.3789 4.93412 16.0665C4.6217 15.754 4.6217 15.2475 4.93412 14.9351L11.9341 7.9351C12.2465 7.62268 12.7531 7.62268 13.0655 7.9351L20.0655 14.9351C20.3779 15.2475 20.3779 15.754 20.0655 16.0665Z', + clipRule: 'evenodd', + }), + }), + s: true, + }, +]) export const ArrowUpRound = /*#__PURE__*/ __createIcon('ArrowUpRound', [ { j: () => @@ -1000,6 +1062,23 @@ export const BestTrade = /*#__PURE__*/ __createIcon('BestTrade', [ u: () => new URL('./general/BestTrade.svg', import.meta.url).href, }, ]) +export const Blocks = /*#__PURE__*/ __createIcon('Blocks', [ + { + j: () => + /*#__PURE__*/ _jsx('svg', { + xmlns: 'http://www.w3.org/2000/svg', + fill: 'none', + viewBox: '0 0 16 16', + children: /*#__PURE__*/ _jsx('path', { + fill: 'currentColor', + fillRule: 'evenodd', + d: 'M9.014 1.267c.378-.336.904-.434 1.473-.434h2.693c.569 0 1.095.098 1.473.434.393.35.514.852.514 1.387V5.68c0 .534-.12 1.037-.515 1.386-.379.336-.905.43-1.473.428h-2.692c-.568 0-1.094-.096-1.473-.431-.394-.35-.514-.853-.514-1.39v-3.02c0-.534.12-1.036.514-1.386Zm.664.748c-.085.075-.178.233-.178.639v3.02c0 .41.093.566.177.64.1.088.317.18.81.18h2.696c.49.003.707-.089.806-.177.085-.074.178-.23.178-.637V2.654c0-.406-.093-.564-.178-.64-.1-.088-.318-.18-.809-.18h-2.693c-.491 0-.709.092-.81.18Zm-.686 6.977c.379-.378.915-.492 1.495-.492h2.693c.58 0 1.116.114 1.494.492.379.379.493.915.493 1.495v2.693c0 .58-.114 1.116-.493 1.494-.378.379-.914.493-1.494.493h-2.693c-.58 0-1.116-.114-1.495-.493-.378-.378-.492-.914-.492-1.494v-2.693c0-.58.114-1.116.492-1.495ZM9.7 9.7c-.1.1-.199.308-.199.788v2.693c0 .48.1.687.2.787.1.1.307.2.787.2h2.693c.48 0 .687-.1.787-.2.1-.1.2-.307.2-.787v-2.693c0-.48-.1-.688-.2-.788-.1-.1-.307-.199-.787-.199h-2.693c-.48 0-.688.1-.788.2ZM1.347 1.267C1.725.931 2.251.833 2.82.833h2.693c.57 0 1.095.098 1.473.434.394.35.514.852.514 1.387V5.68c0 .534-.12 1.037-.514 1.386-.38.336-.905.43-1.474.428H2.82c-.567 0-1.093-.096-1.472-.431-.394-.35-.515-.853-.515-1.39v-3.02c0-.534.121-1.036.514-1.386Zm.664.748c-.085.075-.178.233-.178.639v3.02c0 .41.094.566.178.64.1.088.316.18.81.18h2.696c.49.003.707-.089.806-.177.084-.074.177-.23.177-.637V2.654c0-.406-.093-.564-.178-.64-.1-.088-.318-.18-.809-.18H2.82c-.49 0-.708.092-.809.18Zm-.685 6.977c.378-.378.914-.492 1.494-.492h2.693c.58 0 1.116.114 1.495.492.378.379.492.915.492 1.495v2.693c0 .58-.114 1.116-.492 1.494-.379.379-.914.493-1.495.493H2.82c-.58 0-1.116-.114-1.494-.493-.379-.378-.493-.914-.493-1.494v-2.693c0-.58.114-1.116.493-1.495Zm.707.707c-.1.1-.2.308-.2.788v2.693c0 .48.1.687.2.787.1.1.307.2.787.2h2.693c.48 0 .688-.1.788-.2.1-.1.2-.307.2-.787v-2.693c0-.48-.1-.688-.2-.788-.1-.1-.308-.199-.788-.199H2.82c-.48 0-.687.1-.787.2Z', + clipRule: 'evenodd', + }), + }), + s: true, + }, +]) export const BluePin = /*#__PURE__*/ __createIcon('BluePin', [ { u: () => new URL('./general/BluePin.svg', import.meta.url).href, @@ -1946,7 +2025,6 @@ export const Filter = /*#__PURE__*/ __createIcon('Filter', [ j: () => /*#__PURE__*/ _jsx('svg', { xmlns: 'http://www.w3.org/2000/svg', - fill: 'none', viewBox: '0 0 24 24', children: /*#__PURE__*/ _jsx('path', { fill: 'currentColor', @@ -2034,31 +2112,25 @@ export const Folder = /*#__PURE__*/ __createIcon('Folder', [ }, ]) export const Gas = /*#__PURE__*/ __createIcon('Gas', [ - { - u: () => new URL('./general/Gas.svg', import.meta.url).href, - }, -]) -export const GasStation = /*#__PURE__*/ __createIcon('GasStation', [ { j: () => - /*#__PURE__*/ _jsxs('svg', { + /*#__PURE__*/ _jsx('svg', { xmlns: 'http://www.w3.org/2000/svg', fill: 'none', viewBox: '0 0 24 24', - children: [ - /*#__PURE__*/ _jsx('path', { - fill: 'currentColor', - fillRule: 'evenodd', - d: 'M4.92 3.338c-.354.327-.62.85-.62 1.662v16.2h12.4V5c0-.811-.265-1.335-.62-1.662-.364-.336-.906-.538-1.58-.538h-8c-.674 0-1.215.202-1.58.538ZM3.836 2.162C4.556 1.498 5.514 1.2 6.5 1.2h8c.986 0 1.945.298 2.665.962.73.674 1.135 1.65 1.135 2.838v17a.8.8 0 0 1-.8.8h-14a.8.8 0 0 1-.8-.8V5c0-1.188.405-2.164 1.136-2.838Z', - clipRule: 'evenodd', - }), - /*#__PURE__*/ _jsx('path', { - fill: 'currentColor', - fillRule: 'evenodd', - d: 'M1.2 22a.8.8 0 0 1 .8-.8h17a.8.8 0 0 1 0 1.6H2a.8.8 0 0 1-.8-.8ZM6.53 4.811c.538-.47 1.226-.62 1.86-.62h4.23c.635 0 1.323.15 1.861.62.558.487.83 1.205.83 2.07v1.23c0 .864-.272 1.582-.83 2.069-.538.47-1.226.62-1.86.62H8.39c-.635 0-1.323-.15-1.862-.62-.558-.487-.829-1.205-.829-2.07V6.88c0-.864.271-1.582.83-2.069Zm1.05 1.206c-.127.11-.28.338-.28.863v1.23c0 .526.153.753.28.864.147.128.404.226.81.226h4.23c.405 0 .662-.098.808-.226.127-.11.281-.338.281-.864V6.88c0-.525-.154-.752-.28-.863-.147-.128-.404-.227-.81-.227H8.39c-.405 0-.662.1-.809.227Zm4.258 6.187a.8.8 0 0 1 0 1.131l-1.741 1.741h2.738a.8.8 0 0 1 .584 1.346l-3.134 3.355a.8.8 0 1 1-1.169-1.092l1.876-2.009H8.165A.8.8 0 0 1 7.6 15.31l3.107-3.107a.8.8 0 0 1 1.131 0Zm7.447-3.561a.8.8 0 0 1 1.073-.358l2 1A.8.8 0 0 1 22.8 10v6a.8.8 0 0 1-.798.8l-4.5.01a.8.8 0 0 1-.004-1.6l3.702-.008v-4.707l-1.558-.78a.8.8 0 0 1-.357-1.072Z', - clipRule: 'evenodd', - }), - ], + children: /*#__PURE__*/ _jsxs('g', { + fill: 'currentColor', + fillRule: 'evenodd', + clipRule: 'evenodd', + children: [ + /*#__PURE__*/ _jsx('path', { + d: 'M4.92 3.338c-.354.327-.62.85-.62 1.662v16.2h12.4V5c0-.811-.265-1.335-.62-1.662-.364-.336-.906-.538-1.58-.538h-8c-.674 0-1.215.202-1.58.538zM3.836 2.162C4.556 1.498 5.514 1.2 6.5 1.2h8c.986 0 1.945.298 2.665.962.73.674 1.135 1.65 1.135 2.838v17a.8.8 0 0 1-.8.8h-14a.8.8 0 0 1-.8-.8V5c0-1.188.405-2.164 1.136-2.838z', + }), + /*#__PURE__*/ _jsx('path', { + d: 'M1.2 22a.8.8 0 0 1 .8-.8h17a.8.8 0 0 1 0 1.6H2a.8.8 0 0 1-.8-.8zM6.53 4.811c.538-.47 1.226-.62 1.86-.62h4.23c.635 0 1.323.15 1.861.62.558.487.83 1.205.83 2.07v1.23c0 .864-.272 1.582-.83 2.069-.538.47-1.226.62-1.86.62H8.39c-.635 0-1.323-.15-1.862-.62-.558-.487-.829-1.205-.829-2.07V6.88c0-.864.271-1.582.83-2.069zm1.05 1.206c-.127.11-.28.338-.28.863v1.23c0 .526.153.753.28.864.147.128.404.226.81.226h4.23c.405 0 .662-.098.808-.226.127-.11.281-.338.281-.864V6.88c0-.525-.154-.752-.28-.863-.147-.128-.404-.227-.81-.227H8.39c-.405 0-.662.1-.809.227zm4.258 6.187a.8.8 0 0 1 0 1.131l-1.741 1.741h2.738a.8.8 0 0 1 .584 1.346l-3.134 3.355a.8.8 0 1 1-1.169-1.092l1.876-2.009H8.165A.8.8 0 0 1 7.6 15.31l3.107-3.107a.8.8 0 0 1 1.131 0zm7.447-3.561a.8.8 0 0 1 1.073-.358l2 1A.8.8 0 0 1 22.8 10v6a.8.8 0 0 1-.798.8l-4.5.01a.8.8 0 0 1-.004-1.6l3.702-.008v-4.707l-1.558-.78a.8.8 0 0 1-.357-1.072z', + }), + ], + }), }), s: true, }, diff --git a/packages/icons/icon-generated-as-url.js b/packages/icons/icon-generated-as-url.js index eb9c1993e82e..6c299b90b5dd 100644 --- a/packages/icons/icon-generated-as-url.js +++ b/packages/icons/icon-generated-as-url.js @@ -3,6 +3,7 @@ export function algorand_url() { return new URL("./brands/Algorand.svg", import. export function arbitrum_url() { return new URL("./brands/Arbitrum.svg", import.meta.url).href } export function arweave_url() { return new URL("./brands/Arweave.png", import.meta.url).href } export function avalanche_url() { return new URL("./brands/Avalanche.svg", import.meta.url).href } +export function base_url() { return new URL("./brands/base.png", import.meta.url).href } export function bsc_url() { return new URL("./brands/BSC.svg", import.meta.url).href } export function celo_url() { return new URL("./brands/Celo.svg", import.meta.url).href } export function coin_carp_url() { return new URL("./brands/CoinCarp.svg", import.meta.url).href } @@ -11,6 +12,7 @@ export function coin_market_cap_url() { return new URL("./brands/CoinMarketCap.s export function cosmos_url() { return new URL("./brands/Cosmos.svg", import.meta.url).href } export function crossbell_url() { return new URL("./brands/Crossbell.svg", import.meta.url).href } export function cross_sync_url() { return new URL("./brands/CrossSync.svg", import.meta.url).href } +export function curve_url() { return new URL("./brands/Curve.png", import.meta.url).href } export function cyber_connect_url() { return new URL("./brands/CyberConnect.svg", import.meta.url).href } export function danger_url() { return new URL("./brands/Danger.svg", import.meta.url).href } export function danger_outline_url() { return new URL("./brands/DangerOutline.svg", import.meta.url).href } @@ -37,15 +39,19 @@ export function git_hub_url() { return new URL("./brands/GitHub.svg", import.met export function github_dark_url() { return new URL("./brands/GithubDark.svg", import.meta.url).href } export function git_hub_gray_url() { return new URL("./brands/GitHubGray.svg", import.meta.url).href } export function gnosis_url() { return new URL("./brands/Gnosis.svg", import.meta.url).href } +export function highlight_url() { return new URL("./brands/Highlight.svg", import.meta.url).href } export function instagram_url() { return new URL("./brands/Instagram.svg", import.meta.url).href } export function instagram_colored_url() { return new URL("./brands/InstagramColored.svg", import.meta.url).href } export function instagram_round_colored_url() { return new URL("./brands/InstagramRoundColored.svg", import.meta.url).href } export function instagram_round_gray_url() { return new URL("./brands/InstagramRoundGray.svg", import.meta.url).href } export function ipfs_url() { return new URL("./brands/IPFS.svg", import.meta.url).href } +export function iqwiki_url() { return new URL("./brands/Iqwiki.svg", import.meta.url).href } export function keybase_url() { return new URL("./brands/Keybase.svg", import.meta.url).href } export function kusama_url() { return new URL("./brands/Kusama.svg", import.meta.url).href } export function leaderboard_url() { return new URL("./brands/Leaderboard.png", import.meta.url).href } export function lens_url() { return new URL("./brands/Lens.svg", import.meta.url).href } +export function lido_url() { return new URL("./brands/Lido.svg", import.meta.url).href } +export function linea_url() { return new URL("./brands/Linea.svg", import.meta.url).href } export function link_3_url() { return new URL("./brands/Link3.svg", import.meta.url).href } export function looks_rare_url() { return new URL("./brands/LooksRare.svg", import.meta.url).href } export function mask_dark_url() { return new URL("./brands/Mask.dark.svg", import.meta.url).href } @@ -76,6 +82,7 @@ export function next_id_mini_dark_url() { return new URL("./brands/NextIDMini.da export function next_id_mini_light_url() { return new URL("./brands/NextIDMini.light.svg", import.meta.url).href } export function nft_go_url() { return new URL("./brands/NFTGo.svg", import.meta.url).href } export function nft_scan_url() { return new URL("./brands/NFTScan.svg", import.meta.url).href } +export function one_inch_url() { return new URL("./brands/OneInch.png", import.meta.url).href } export function open_sea_url() { return new URL("./brands/OpenSea.svg", import.meta.url).href } export function open_sea_colored_url() { return new URL("./brands/OpenSeaColored.svg", import.meta.url).href } export function optimism_url() { return new URL("./brands/Optimism.svg", import.meta.url).href } @@ -90,8 +97,10 @@ export function reddit_round_url() { return new URL("./brands/RedditRound.svg", export function reddit_round_gray_url() { return new URL("./brands/RedditRoundGray.svg", import.meta.url).href } export function rsk_url() { return new URL("./brands/Rsk.svg", import.meta.url).href } export function rss_3_url() { return new URL("./brands/RSS3.svg", import.meta.url).href } +export function savm_url() { return new URL("./brands/Savm.svg", import.meta.url).href } export function simple_hash_url() { return new URL("./brands/SimpleHash.png", import.meta.url).href } export function solana_url() { return new URL("./brands/Solana.svg", import.meta.url).href } +export function stargate_url() { return new URL("./brands/Stargate.png", import.meta.url).href } export function sushi_swap_url() { return new URL("./brands/SushiSwap.png", import.meta.url).href } export function sybil_url() { return new URL("./brands/Sybil.png", import.meta.url).href } export function telegram_round_url() { return new URL("./brands/TelegramRound.svg", import.meta.url).href } @@ -130,6 +139,7 @@ export function arrow_downward_url() { return new URL("./general/ArrowDownward.s export function arrow_drop_url() { return new URL("./general/ArrowDrop.svg", import.meta.url).href } export function arrow_right_url() { return new URL("./general/ArrowRight.svg", import.meta.url).href } export function arrow_up_url() { return new URL("./general/ArrowUp.svg", import.meta.url).href } +export function arrow_up_2_url() { return new URL("./general/ArrowUp2.svg", import.meta.url).href } export function arrow_up_round_url() { return new URL("./general/ArrowUpRound.svg", import.meta.url).href } export function back_up_url() { return new URL("./general/BackUp.svg", import.meta.url).href } export function base_close_dark_url() { return new URL("./general/BaseClose.dark.svg", import.meta.url).href } @@ -138,6 +148,7 @@ export function base_contacts_url() { return new URL("./general/BaseContacts.svg export function base_upload_url() { return new URL("./general/BaseUpload.svg", import.meta.url).href } export function base_user_url() { return new URL("./general/BaseUser.svg", import.meta.url).href } export function best_trade_url() { return new URL("./general/BestTrade.svg", import.meta.url).href } +export function blocks_url() { return new URL("./general/Blocks.svg", import.meta.url).href } export function blue_pin_url() { return new URL("./general/BluePin.svg", import.meta.url).href } export function bordered_success_url() { return new URL("./general/BorderedSuccess.svg", import.meta.url).href } export function busy_wallet_nav_url() { return new URL("./general/BusyWalletNav.svg", import.meta.url).href } @@ -209,7 +220,6 @@ export function firefly_nft_url() { return new URL("./general/FireflyNFT.svg", i export function flag_url() { return new URL("./general/Flag.svg", import.meta.url).href } export function folder_url() { return new URL("./general/Folder.svg", import.meta.url).href } export function gas_url() { return new URL("./general/Gas.svg", import.meta.url).href } -export function gas_station_url() { return new URL("./general/GasStation.svg", import.meta.url).href } export function gear_dark_url() { return new URL("./general/Gear.dark.svg", import.meta.url).href } export function gear_light_url() { return new URL("./general/Gear.light.svg", import.meta.url).href } export function gear_settings_url() { return new URL("./general/GearSettings.svg", import.meta.url).href } diff --git a/packages/mask/content-script/components/InjectedComponents/ProfileCard/AvatarDecoration.tsx b/packages/mask/content-script/components/InjectedComponents/ProfileCard/AvatarDecoration.tsx index cac55715c26a..a53015ef9a73 100644 --- a/packages/mask/content-script/components/InjectedComponents/ProfileCard/AvatarDecoration.tsx +++ b/packages/mask/content-script/components/InjectedComponents/ProfileCard/AvatarDecoration.tsx @@ -10,6 +10,8 @@ interface Props { export function AvatarDecoration({ userId, className, size }: Props) { const { data: user } = useQuery({ queryKey: ['twitter', 'profile', 'check-nft-avatar', userId], + staleTime: 60_000, + retry: 0, queryFn: () => { if (!userId) return null return Twitter.getUserByScreenName(userId, true) diff --git a/packages/mask/content-script/components/InjectedComponents/ProfileCard/index.tsx b/packages/mask/content-script/components/InjectedComponents/ProfileCard/index.tsx index f9bf004cca63..3f2a1d95a093 100644 --- a/packages/mask/content-script/components/InjectedComponents/ProfileCard/index.tsx +++ b/packages/mask/content-script/components/InjectedComponents/ProfileCard/index.tsx @@ -1,7 +1,7 @@ import { useEffect, useMemo, useState, memo } from 'react' import { Trans } from 'react-i18next' import { useUpdateEffect } from 'react-use' -import { first } from 'lodash-es' +import { compact, first } from 'lodash-es' import { TabContext } from '@mui/lab' import { Tab, Typography } from '@mui/material' import { Icons } from '@masknet/icons' @@ -14,7 +14,6 @@ import { addressSorter, useSocialAccountsBySettings } from '@masknet/shared' import { getAvailablePlugins } from '@masknet/plugin-infra' import { useLocationChange } from '@masknet/shared-base-ui' import { - EMPTY_LIST, PluginID, NetworkPluginID, type SocialIdentity, @@ -105,6 +104,12 @@ const useStyles = makeStyles()((theme) => { color: theme.palette.text.secondary, fontWeight: 700, }, + actions: { + marginLeft: 'auto', + display: 'inline-flex', + alignItems: 'center', + color: theme.palette.maskColor.main, + }, } }) @@ -154,20 +159,25 @@ export const ProfileCard = memo(({ identity, currentAddress, ...rest }: Props) = }, [retrySocialAddress]) const activatedPlugins = useActivatedPluginsSiteAdaptor('any') - const displayPlugins = getAvailablePlugins(activatedPlugins, (plugins) => { - return plugins - .flatMap((x) => x.ProfileCardTabs?.map((y) => ({ ...y, pluginID: x.ID })) ?? EMPTY_LIST) - .filter((x) => { - const isAllowed = x.pluginID === PluginID.RSS3 || x.pluginID === PluginID.Collectible - const shouldDisplay = x.Utils?.shouldDisplay?.(identity, selectedSocialAccount) ?? true - return isAllowed && shouldDisplay - }) - .sort((a, z) => a.priority - z.priority) + const tabs = useMemo(() => { + const displayProfileTabs = getAvailablePlugins(activatedPlugins, (plugins) => { + return plugins + .flatMap((x) => x.ProfileCardTabs?.map((y) => ({ ...y, pluginID: x.ID })) || []) + .filter((x) => { + const isAllowed = x.pluginID === PluginID.RSS3 || x.pluginID === PluginID.Collectible + const shouldDisplay = x.Utils?.shouldDisplay?.(identity, selectedSocialAccount) ?? true + return isAllowed && shouldDisplay + }) + .sort((a, z) => a.priority - z.priority) + }) + return displayProfileTabs.map((x) => ({ + id: x.ID, + label: typeof x.label === 'string' ? x.label : translate(x.pluginID, x.label), + })) + }, [activatedPlugins, translate]) + const tabActions = getAvailablePlugins(activatedPlugins, (plugins) => { + return compact(plugins.map((x) => x.ProfileTabActions)) }) - const tabs = displayPlugins.map((x) => ({ - id: x.ID, - label: typeof x.label === 'string' ? x.label : translate(x.pluginID, x.label), - })) const [currentTab, onChange] = useTabs(first(tabs)?.id ?? PluginID.Collectible, ...tabs.map((tab) => tab.id)) @@ -223,6 +233,13 @@ export const ProfileCard = memo(({ identity, currentAddress, ...rest }: Props) = classes={{ root: classes.tabRoot, textColorPrimary: classes.tabRoot }} /> ))} + {tabActions.length ? + + {tabActions.map((Action, i) => ( + + ))} + + : null} diff --git a/packages/mask/content-script/components/InjectedComponents/ProfileTabContent.tsx b/packages/mask/content-script/components/InjectedComponents/ProfileTabContent.tsx index 17b65a56229d..ac72ed086714 100644 --- a/packages/mask/content-script/components/InjectedComponents/ProfileTabContent.tsx +++ b/packages/mask/content-script/components/InjectedComponents/ProfileTabContent.tsx @@ -1,6 +1,6 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { useUpdateEffect } from 'react-use' -import { first } from 'lodash-es' +import { compact, first } from 'lodash-es' import { TabContext } from '@mui/lab' import { Link, Button, Stack, Tab, ThemeProvider, Typography } from '@mui/material' import { Icons } from '@masknet/icons' @@ -118,6 +118,12 @@ const useStyles = makeStyles()((theme) => ({ borderRadius: 20, minWidth: 254, }, + actions: { + marginLeft: 'auto', + display: 'inline-flex', + alignItems: 'center', + color: theme.palette.maskColor.publicMain, + }, })) interface ProfileTabContentProps extends withClasses<'text' | 'button' | 'root'> {} @@ -186,21 +192,27 @@ function Content(props: ProfileTabContentProps) { }, [retrySocialAccounts]) const activatedPlugins = useActivatedPluginsSiteAdaptor('any') - const displayPlugins = getAvailablePlugins(activatedPlugins, (plugins) => { - return plugins - .flatMap((x) => x.ProfileTabs?.map((y) => ({ ...y, pluginID: x.ID })) ?? EMPTY_LIST) - .filter((x) => { - const shouldDisplay = - x.Utils?.shouldDisplay?.(currentVisitingSocialIdentity, selectedSocialAccount) ?? true - return x.pluginID !== PluginID.NextID && shouldDisplay - }) - .sort((a, z) => a.priority - z.priority) - }) + const tabs = useMemo(() => { + const displayProfileTabs = getAvailablePlugins(activatedPlugins, (plugins) => { + return plugins + .flatMap((x) => x.ProfileTabs?.map((y) => ({ ...y, pluginID: x.ID })) || []) + .filter((x) => { + const shouldDisplay = + x.Utils?.shouldDisplay?.(currentVisitingSocialIdentity, selectedSocialAccount) ?? true + return x.pluginID !== PluginID.NextID && shouldDisplay + }) + .sort((a, z) => a.priority - z.priority) + }) + + return displayProfileTabs.map((x) => ({ + id: x.ID, + label: typeof x.label === 'string' ? x.label : translate(x.pluginID, x.label), + })) + }, [activatedPlugins, translate]) - const tabs = displayPlugins.map((x) => ({ - id: x.ID, - label: typeof x.label === 'string' ? x.label : translate(x.pluginID, x.label), - })) + const tabActions = getAvailablePlugins(activatedPlugins, (plugins) => { + return compact(plugins.map((x) => x.ProfileTabActions)) + }) const [currentTab, onChange] = useTabs(first(tabs)?.id ?? PluginID.Collectible, ...tabs.map((tab) => tab.id)) @@ -512,6 +524,13 @@ function Content(props: ProfileTabContentProps) { {tabs.map((tab) => ( ))} + {tabActions.length ? + + {tabActions.map((Action, i) => ( + + ))} + + : null} diff --git a/packages/mask/content-script/components/InjectedComponents/SearchResultInspector.tsx b/packages/mask/content-script/components/InjectedComponents/SearchResultInspector.tsx index 262bbefe1c26..5dfd02b6faa5 100644 --- a/packages/mask/content-script/components/InjectedComponents/SearchResultInspector.tsx +++ b/packages/mask/content-script/components/InjectedComponents/SearchResultInspector.tsx @@ -1,6 +1,6 @@ import { useEffect, useLayoutEffect, useMemo } from 'react' import { useAsyncRetry } from 'react-use' -import { first } from 'lodash-es' +import { compact, first } from 'lodash-es' import { TabContext } from '@mui/lab' import { Stack, Tab } from '@mui/material' import { @@ -11,6 +11,7 @@ import { useActivatedPluginsSiteAdaptor, usePluginTransField, useIsMinimalMode, + getAvailablePlugins, } from '@masknet/plugin-infra/content-script' import { EMPTY_LIST, PluginID, type SocialIdentity, type ProfileTabs } from '@masknet/shared-base' import { makeStyles, MaskTabList, useTabs } from '@masknet/theme' @@ -39,6 +40,12 @@ const useStyles = makeStyles<{ isProfilePage?: boolean; searchType?: SearchResul display: 'none', }, }, + actions: { + marginLeft: 'auto', + display: 'inline-flex', + alignItems: 'center', + color: theme.palette.maskColor.publicMain, + }, }), ) @@ -104,6 +111,9 @@ export function SearchResultInspector(props: SearchResultInspectorProps) { if (!currentResult) return EMPTY_LIST return getSearchResultTabs(activatedPlugins, currentResult, translate) }, [activatedPlugins, resultList.value, translate]) + const tabActions = getAvailablePlugins(activatedPlugins, (plugins) => { + return compact(plugins.map((x) => x.ProfileTabActions)) + }) const defaultTab = first(tabs)?.id ?? PluginID.Collectible const [currentTab, onChange, , setTab] = useTabs(defaultTab, ...tabs.map((tab) => tab.id)) @@ -133,6 +143,13 @@ export function SearchResultInspector(props: SearchResultInspectorProps) { {tabs.map((tab) => ( ))} + {tabActions.length ? + + {tabActions.map((Action, i) => ( + + ))} + + : null} diff --git a/packages/mask/content-script/site-adaptor-infra/ui.ts b/packages/mask/content-script/site-adaptor-infra/ui.ts index 7edae09a942c..7cf2e8ff9a59 100644 --- a/packages/mask/content-script/site-adaptor-infra/ui.ts +++ b/packages/mask/content-script/site-adaptor-infra/ui.ts @@ -12,7 +12,6 @@ import { DashboardRoutes, ECKeyIdentifier, i18NextInstance, - queryRemoteI18NBundle, type SetupGuideContext, SetupGuideStep, setDebugObject, @@ -126,8 +125,6 @@ export async function activateSiteAdaptorUIInner(ui_deferred: SiteAdaptorUI.Defe } }) - signal.addEventListener('abort', queryRemoteI18NBundle(Services.Helper.queryRemoteI18NBundle)) - const lastRecognizedSub = createSubscriptionFromValueRef(ui.collecting.identityProvider.recognized, signal) const currentVisitingSub = createSubscriptionFromValueRef( ui.collecting.currentVisitingIdentityProvider.recognized, diff --git a/packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts b/packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts index a85db7092677..70dd09657115 100644 --- a/packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts +++ b/packages/mask/content-script/site-adaptors/twitter.com/collecting/identity.ts @@ -88,29 +88,6 @@ function resolveLastRecognizedIdentityInner( createWatcher(searchWatcherAvatarSelector()) } -function resolveLastRecognizedIdentityMobileInner( - ref: SiteAdaptorUI.CollectingCapabilities.IdentityResolveProvider['recognized'], - cancel: AbortSignal, -) { - const onLocationChange = async () => { - const settings = await Twitter.getSettings() - const identifier = ProfileIdentifier.of(twitterBase.networkIdentifier, settings?.screen_name).unwrapOr( - undefined, - ) - - if (identifier && !ref.value.identifier) { - ref.value = { - ...ref.value, - identifier, - isOwner: true, - } - } - } - - onLocationChange() - window.addEventListener('locationchange', onLocationChange, { signal: cancel }) -} - function getFirstSlug() { const slugs: string[] = location.pathname.split('/').filter(Boolean) return first(slugs) @@ -123,6 +100,8 @@ function resolveCurrentVisitingIdentityInner( ) { const update = async (twitterId: string) => { const user = await queryClient.fetchQuery({ + retry: 0, + staleTime: 60_000, queryKey: ['twitter', 'profile', twitterId], queryFn: () => Twitter.getUserByScreenName(twitterId), }) diff --git a/packages/mask/content-script/site-adaptors/twitter.com/injection/ProfileCard/constants.ts b/packages/mask/content-script/site-adaptors/twitter.com/injection/ProfileCard/constants.ts index e03d2a757274..4185cb469e8b 100644 --- a/packages/mask/content-script/site-adaptors/twitter.com/injection/ProfileCard/constants.ts +++ b/packages/mask/content-script/site-adaptors/twitter.com/injection/ProfileCard/constants.ts @@ -1,2 +1,2 @@ -export const CARD_WIDTH = 450 +export const CARD_WIDTH = 500 export const CARD_HEIGHT = 500 diff --git a/packages/mask/dashboard/Dashboard.tsx b/packages/mask/dashboard/Dashboard.tsx index d9fdf40f00a7..8997e181c829 100644 --- a/packages/mask/dashboard/Dashboard.tsx +++ b/packages/mask/dashboard/Dashboard.tsx @@ -12,7 +12,7 @@ import { import { I18NextProviderHMR, PersonaContext, SharedContextProvider, Modals } from '@masknet/shared' import { ErrorBoundary } from '@masknet/shared-base-ui' import { RootWeb3ContextProvider } from '@masknet/web3-hooks-base' -import { DashboardRoutes, i18NextInstance, queryRemoteI18NBundle, compose } from '@masknet/shared-base' +import { DashboardRoutes, i18NextInstance, compose } from '@masknet/shared-base' import { Pages } from './pages/routes.js' import { UserContext, useAppearance } from '../shared-ui/index.js' @@ -37,8 +37,6 @@ const PersonaContextIO = { queryPersonaAvatar: Services.Identity.getPersonaAvatar, } export default function Dashboard() { - useEffect(() => queryRemoteI18NBundle(Services.Helper.queryRemoteI18NBundle), []) - // #region theme const appearance = useAppearance() const mode = useSystemPreferencePalette() diff --git a/packages/plugin-infra/src/types.ts b/packages/plugin-infra/src/types.ts index d9468e86a577..cdcab1773d3d 100644 --- a/packages/plugin-infra/src/types.ts +++ b/packages/plugin-infra/src/types.ts @@ -18,6 +18,7 @@ import type { TypedMessage } from '@masknet/typed-message' import type { Web3Helper } from '@masknet/web3-helpers' import type { SearchResult } from '@masknet/web3-shared-base' import type { CompositionType } from './entry-content-script.js' +import type { ComponentType } from 'react' export declare namespace Plugin { /** @@ -217,6 +218,7 @@ export namespace Plugin.Shared { export namespace Plugin.SiteAdaptor { export interface SiteAdaptorContext extends Shared.SharedUIContext {} + export type ProfileTabSlot = 'profile-page' | 'search' | 'profile-card' export interface Definition extends GeneralUI.Definition, Shared.DefinitionDeferred { /** This UI will be rendered for each post found. */ PostInspector?: InjectUI<{}> @@ -244,6 +246,11 @@ export namespace Plugin.SiteAdaptor { ProfileCardTabs?: ProfileTab[] /** This UI will be rendered as cover on the profile page */ ProfileCover?: ProfileCover[] + /** + * actions ui injected in profile tabs + * slot is used to distinguish among different slots. + */ + ProfileTabActions?: ComponentType<{ slot: ProfileTabSlot }> /** This UI will be rendered as tab on the setting dialog */ SettingTabs?: SettingTab[] /** This UI will be rendered components on the avatar realm */ diff --git a/packages/plugins/Collectible/src/SiteAdaptor/index.tsx b/packages/plugins/Collectible/src/SiteAdaptor/index.tsx index f435be9af1fe..e18a26694bda 100644 --- a/packages/plugins/Collectible/src/SiteAdaptor/index.tsx +++ b/packages/plugins/Collectible/src/SiteAdaptor/index.tsx @@ -157,7 +157,7 @@ const site: Plugin.SiteAdaptor.Definition = { { return { provider: { display: 'flex', alignItems: 'center', + gap: theme.spacing(0.5), '& > a': { lineHeight: 0, }, }, providerBy: { - marginRight: theme.spacing(0.5), color: theme.palette.mode === 'dark' ? theme.palette.grey[700] : theme.palette.text.secondary, }, - wrapper: { padding: theme.spacing(2), }, @@ -30,9 +29,13 @@ const useStyles = makeStyles()((theme, props) => { export function PluginHeader() { const t = useSharedTrans() + const handleTrans = useHandleTrans() const theme = useTheme() const { classes } = useStyles() + const plugin = useActivatedPluginSiteAdaptor(PluginID.RSS3, 'any') + const publisher = plugin?.publisher + return ( @@ -42,23 +45,21 @@ export function PluginHeader() { - - {t.plugin_provider_by()} + + {handleTrans.powered_by()} - {base.publisher ? - - - - : null} - {base.publisher?.link ? - - - + {publisher ? + <> + + + + + : null} diff --git a/packages/plugins/Handle/src/SiteAdaptor/SearchResultInspector.tsx b/packages/plugins/Handle/src/SiteAdaptor/SearchResultInspector.tsx index cec51e6882cc..34433f52157a 100644 --- a/packages/plugins/Handle/src/SiteAdaptor/SearchResultInspector.tsx +++ b/packages/plugins/Handle/src/SiteAdaptor/SearchResultInspector.tsx @@ -1,14 +1,15 @@ import { memo, useContext, useEffect } from 'react' import { Icons } from '@masknet/icons' import { Box, Link, Typography, type Theme } from '@mui/material' -import { CopyButton, SocialAccountList } from '@masknet/shared' +import { CopyButton, SocialAccountList, useUserTotalBalance } from '@masknet/shared' import { MaskLightTheme, MaskThemeProvider, makeStyles } from '@masknet/theme' import { ScopedDomainsContainer } from '@masknet/web3-hooks-base' -import { ChainId } from '@masknet/web3-shared-evm' +import { ChainId, formatEthereumAddress } from '@masknet/web3-shared-evm' import { EVMUtils } from '@masknet/web3-providers' import { PluginHeader } from './PluginHeader.js' import { SuffixToChainIconMap, SuffixToChainIdMap } from '../constants.js' import { ENSContext, ENSProvider, type SearchResultInspectorProps } from './context.js' +import { useHandleTrans } from '../locales/i18n_generated.js' const useStyles = makeStyles()((theme) => { return { @@ -44,18 +45,39 @@ const useStyles = makeStyles()((theme) => { }, reversedAddressIcon: { marginRight: 2, - marginBottom: 1, cursor: 'pointer', color: theme.palette.maskColor.secondaryDark, + lineHeight: 0, }, accounts: { marginLeft: 'auto', + display: 'flex', + gap: theme.spacing(2), + alignItems: 'center', + }, + walletValue: { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-end', + }, + label: { + color: theme.palette.maskColor.publicSecond, + fontSize: 14, + fontWeight: 400, + lineHeight: '18px', + }, + value: { + color: theme.palette.maskColor.publicMain, + fontSize: 16, + fontWeight: 700, + lineHeight: '20px', }, } }) export const SearchResultInspectorContent = memo(function SearchResultInspectorContent() { const { classes } = useStyles() + const t = useHandleTrans() const { reversedAddress, nextIdBindings, domain } = useContext(ENSContext) const suffix = domain ? domain.split('.').pop()! : undefined const ChainIcon = suffix ? SuffixToChainIconMap[suffix] ?? Icons.ETH : null @@ -66,6 +88,8 @@ export const SearchResultInspectorContent = memo(function SearchResultInspectorC setPair(reversedAddress, domain) }, [reversedAddress, domain]) + const { data: totalBalance } = useUserTotalBalance(reversedAddress) + return ( <> @@ -82,7 +106,7 @@ export const SearchResultInspectorContent = memo(function SearchResultInspectorC : null} {reversedAddress ? - {reversedAddress}{' '} + {formatEthereumAddress(reversedAddress, 4)}{' '} : null} - +
+ {totalBalance !== undefined ? +
+ {t.usd_value()} + + $ + {totalBalance.toLocaleString('en-US', { + minimumFractionDigits: 2, + maximumFractionDigits: 2, + })} + +
+ : null} + +
diff --git a/packages/plugins/Handle/src/locales/en-US.json b/packages/plugins/Handle/src/locales/en-US.json index e28e8f6c62c2..be444b5025af 100644 --- a/packages/plugins/Handle/src/locales/en-US.json +++ b/packages/plugins/Handle/src/locales/en-US.json @@ -5,5 +5,7 @@ "empty": "No search results found.", "wallets_address_copied": "Address successfully copied", "follow": "Follow", - "following": "Following" + "following": "Following", + "usd_value": "USD Value", + "powered_by": "Powered by" } diff --git a/packages/plugins/RSS3/package.json b/packages/plugins/RSS3/package.json index 13c2ffa7f347..f1e3ce4bd57e 100644 --- a/packages/plugins/RSS3/package.json +++ b/packages/plugins/RSS3/package.json @@ -30,6 +30,7 @@ "@types/uuid": "^9.0.3", "bignumber.js": "9.1.2", "date-fns": "^2.30.0", + "@servie/events": "^3.0.0", "linkify-react": "^4.1.1", "linkifyjs": "^4.1.1", "uuid": "^9.0.0" diff --git a/packages/plugins/RSS3/src/SiteAdaptor/FeedFilters.tsx b/packages/plugins/RSS3/src/SiteAdaptor/FeedFilters.tsx new file mode 100644 index 000000000000..d8df82388e4c --- /dev/null +++ b/packages/plugins/RSS3/src/SiteAdaptor/FeedFilters.tsx @@ -0,0 +1,94 @@ +import { Icons } from '@masknet/icons' +import { makeStyles } from '@masknet/theme' +import { Box, Typography, type BoxProps } from '@mui/material' +import { forwardRef, memo } from 'react' +import { NetworkOptions, Networks } from '../constants.js' +import { useRSS3Trans } from '../locales/i18n_generated.js' +import { useFilters } from './filters.js' + +const useStyles = makeStyles()((theme) => ({ + header: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'flex-start', + }, + button: { + flexShrink: 0, + display: 'flex', + alignItems: 'center', + padding: theme.spacing(0.5, 1), + height: 24, + boxSizing: 'border-box', + borderRadius: 8, + gap: theme.spacing(0.5), + border: `1px solid ${theme.palette.maskColor.secondaryLine}`, + cursor: 'pointer', + fontSize: 13, + fontFamily: 'Helvetica', + lineHeight: '18px', + }, + container: { + display: 'flex', + flexDirection: 'column', + gap: 10, + padding: theme.spacing(1.5), + boxShadow: '0px 0px 20px rgba(0, 0, 0, 0.05)', + backdropFilter: 'blur(8px)', + }, + networks: { + display: 'flex', + gap: theme.spacing(1, 1.5), + flexWrap: 'wrap', + }, +})) + +export const FeedFilters = memo( + forwardRef(function FeedFilters(props: BoxProps, ref) { + const t = useRSS3Trans() + const { classes, cx } = useStyles() + + const [filters, setFilters] = useFilters() + const { networks, isDirect } = filters + + return ( + + + + {t.networks({ count: networks.length as unknown as string })} + + { + setFilters((origin) => ({ ...origin, isDirect: !origin.isDirect })) + }}> + + {isDirect ? t.direct() : t.related()} + + + + {NetworkOptions.map((op) => { + const checked = networks.includes(op.network) + return ( + { + setFilters((origin) => ({ + ...origin, + networks: Networks.filter((x) => + op.network === x ? !checked : networks.includes(x), + ), + })) + }}> + {checked ? + + : } + {op.name} + + ) + })} + + + ) + }), +) diff --git a/packages/plugins/RSS3/src/SiteAdaptor/FeedsPage.tsx b/packages/plugins/RSS3/src/SiteAdaptor/FeedsPage.tsx index 1173ca3e294b..a039fc22d1e9 100644 --- a/packages/plugins/RSS3/src/SiteAdaptor/FeedsPage.tsx +++ b/packages/plugins/RSS3/src/SiteAdaptor/FeedsPage.tsx @@ -1,43 +1,70 @@ -import { memo, useMemo } from 'react' -import { range } from 'lodash-es' -import { ElementAnchor, EmptyStatus, RetryHint } from '@masknet/shared' +import type { Plugin } from '@masknet/plugin-infra' +import { ElementAnchor, EmptyStatus, ReloadStatus } from '@masknet/shared' import { LoadingBase, makeStyles } from '@masknet/theme' import { ScopedDomainsContainer, useReverseAddress, useWeb3Utils } from '@masknet/web3-hooks-base' import type { RSS3BaseAPI } from '@masknet/web3-providers/types' -import { Box, Skeleton } from '@mui/material' +import { Box, ClickAwayListener, Skeleton, Typography, type BoxProps } from '@mui/material' +import { range } from 'lodash-es' +import { memo, useMemo } from 'react' import { useRSS3Trans } from '../locales/index.js' import { FeedCard } from './components/index.js' import { FeedOwnerContext, type FeedOwnerOptions } from './contexts/index.js' +import { useIsFiltersOpen } from './emitter.js' +import { FeedFilters } from './FeedFilters.js' +import { useFilters } from './filters.js' import { useFeeds } from './hooks/useFeeds.js' +import { Networks } from '../constants.js' const useStyles = makeStyles()((theme) => ({ feedCard: { - padding: theme.spacing(2, 2, 1), + padding: theme.spacing(1.5), }, loading: { color: theme.palette.maskColor.main, }, + skeleton: { + borderRadius: theme.spacing(1), + }, })) -export interface FeedPageProps { +export interface FeedListProps { + listProps?: BoxProps address?: string - tag?: RSS3BaseAPI.Tag.Donation | RSS3BaseAPI.Tag.Social + tags?: RSS3BaseAPI.Tag[] } -export const FeedsPage = memo(function FeedsPage({ address, tag }: FeedPageProps) { +export const FeedList = memo(function FeedList({ address, tags, listProps }: FeedListProps) { const t = useRSS3Trans() const { classes } = useStyles() const Utils = useWeb3Utils() - const { data: feeds, isPending: loadingFeeds, error, fetchNextPage } = useFeeds(address, tag) + const [{ networks, isDirect }] = useFilters() + const { + data: feeds, + isPending: loadingFeeds, + isFetchingNextPage, + hasNextPage, + error, + fetchNextPage, + } = useFeeds(address, { + tag: tags, + network: + // passing all networks returns different results from omitting + // network parameter (it's strange indeed). so we need to omit it + // when all networks are selected + networks.length === 0 ? [] + : networks.length === Networks.length ? undefined + : networks, + direction: isDirect ? 'out' : undefined, + }) const { data: reversedName, isPending: loadingENS } = useReverseAddress(undefined, address) const { getDomain } = ScopedDomainsContainer.useContainer() - const loading = loadingFeeds || loadingENS + const loading = isFetchingNextPage || loadingFeeds || loadingENS const name = address ? getDomain(address) || reversedName : reversedName - const feedOwner = useMemo((): FeedOwnerOptions | undefined => { + const feedOwner: FeedOwnerOptions | undefined = useMemo(() => { if (!address) return return { address, @@ -50,7 +77,7 @@ export const FeedsPage = memo(function FeedsPage({ address, tag }: FeedPageProps return ( theme.palette.maskColor.main}> - + ) @@ -59,28 +86,58 @@ export const FeedsPage = memo(function FeedsPage({ address, tag }: FeedPageProps return ( {range(3).map((i) => ( - - + + ))} ) } if (!feeds?.length && !loading) { - return {t.no_data({ context: tag || 'activities' })} + return {t.no_data({ context: 'activities' })} } return ( {/* padding for profile card footer */} - - {feeds?.map((feed, index) => )} - fetchNextPage()}> - {loading ? - - : null} - + + {feeds.map((feed, index) => ( + + ))} + {hasNextPage ? + fetchNextPage()}> + {loading ? + + : null} + + : theme.palette.maskColor.second} textAlign="center" py={2}> + {t.no_more_data()} + + } ) }) + +export interface FeedsPageProps extends FeedListProps, BoxProps { + listProps?: BoxProps + slot: Plugin.SiteAdaptor.ProfileTabSlot +} + +export const FeedsPage = memo(function FeedsPage({ address, tags, listProps, slot, ...rest }) { + const [open, setOpen] = useIsFiltersOpen(slot) + + return ( + + {open ? + { + setOpen(false) + }}> + + + : null} + + + ) +}) diff --git a/packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/CollectibleAction.tsx b/packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/CollectibleAction.tsx new file mode 100644 index 000000000000..a6041552422d --- /dev/null +++ b/packages/plugins/RSS3/src/SiteAdaptor/components/FeedActions/CollectibleAction.tsx @@ -0,0 +1,172 @@ +import { makeStyles } from '@masknet/theme' +import { RSS3BaseAPI } from '@masknet/web3-providers/types' +import { isSameAddress } from '@masknet/web3-shared-base' +import { formatEthereumAddress } from '@masknet/web3-shared-evm' +import { Typography } from '@mui/material' +import { useMemo } from 'react' +import { RSS3Trans } from '../../../locales/i18n_generated.js' +import { useAddressLabel } from '../../hooks/index.js' +import { type FeedCardProps } from '../base.js' +import { getCost, getLastAction } from '../share.js' +import { AccountLabel, formatValue, Label, isRegisteringENS } from '../common.js' + +const useStyles = makeStyles()((theme) => ({ + summary: { + color: theme.palette.maskColor.main, + display: 'flex', + alignItems: 'center', + whiteSpace: 'pre', + overflow: 'auto', + scrollbarWidth: 'none', + '&::-webkit-scrollbar': { + display: 'none', + }, + }, +})) + +const { Type } = RSS3BaseAPI + +interface CollectibleActionProps extends Omit { + feed: RSS3BaseAPI.CollectibleFeed +} + +/** + * CollectibleAction + * Including: + * + * - CollectibleIn + * - CollectibleBurn + * - CollectibleIn + * - CollectibleMint + * - CollectibleOut + */ +export function CollectibleAction({ feed, ...rest }: CollectibleActionProps) { + const { verbose } = rest + const { classes } = useStyles() + + const user = useAddressLabel(feed.owner) + + const summary = useMemo(() => { + let action + let metadata + switch (feed.type) { + case Type.Mint: + // If only one action, it should be free minting + metadata = getLastAction(feed as RSS3BaseAPI.CollectibleMintFeed).metadata + return ( + , + cost: