From 061db6ffd0a6d599038e1d4b9adff35a376ff4d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 5 Mar 2026 00:21:26 +0000 Subject: [PATCH 01/12] chore(deps): bump svgo from 3.2.0 to 3.3.3 Bumps [svgo](https://github.com/svg/svgo) from 3.2.0 to 3.3.3. - [Release notes](https://github.com/svg/svgo/releases) - [Commits](https://github.com/svg/svgo/compare/v3.2.0...v3.3.3) --- updated-dependencies: - dependency-name: svgo dependency-version: 3.3.3 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 819054ce..f5c2253e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4051,11 +4051,6 @@ dependencies: "@tanstack/query-core" "5.81.5" -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== - "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" @@ -10704,6 +10699,11 @@ safe-stable-stringify@^2.3.1: resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.5.0.tgz#b5549b671069b7aa392df55ec7574cf411179eb8" + integrity sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA== + scheduler@^0.23.0: version "0.23.0" resolved "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" @@ -11286,17 +11286,17 @@ svg-parser@^2.0.4: integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== svgo@^3.0.2: - version "3.2.0" - resolved "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz" - integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== + version "3.3.3" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.3.3.tgz#8246aee0b08791fde3b0ed22b5661b471fadf58e" + integrity sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng== dependencies: - "@trysound/sax" "0.2.0" commander "^7.2.0" css-select "^5.1.0" css-tree "^2.3.1" css-what "^6.1.0" csso "^5.0.5" picocolors "^1.0.0" + sax "^1.5.0" tailwindcss@^3.3.1: version "3.4.10" From b85efb011e6f7d90843f55323af34afcc2f148bc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 14 Mar 2026 15:50:50 +0000 Subject: [PATCH 02/12] chore(deps): bump flatted from 3.2.9 to 3.4.1 Bumps [flatted](https://github.com/WebReflection/flatted) from 3.2.9 to 3.4.1. - [Commits](https://github.com/WebReflection/flatted/compare/v3.2.9...v3.4.1) --- updated-dependencies: - dependency-name: flatted dependency-version: 3.4.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 819054ce..29329d53 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7192,9 +7192,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.4.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.1.tgz#84ccd9579e76e9cc0d246c11d8be0beb019143e6" + integrity sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ== fn.name@1.x.x: version "1.1.0" From 0026cee45e402bee7793746dbf6ceab0bd29be05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Mar 2026 03:53:21 +0000 Subject: [PATCH 03/12] chore(deps): bump socket.io-parser from 4.2.5 to 4.2.6 Bumps [socket.io-parser](https://github.com/socketio/socket.io) from 4.2.5 to 4.2.6. - [Release notes](https://github.com/socketio/socket.io/releases) - [Changelog](https://github.com/socketio/socket.io/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/socket.io/compare/socket.io-parser@4.2.5...socket.io-parser@4.2.6) --- updated-dependencies: - dependency-name: socket.io-parser dependency-version: 4.2.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 29329d53..5a974e12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10897,9 +10897,9 @@ socket.io-client@^4.5.1: socket.io-parser "~4.2.4" socket.io-parser@~4.2.4: - version "4.2.5" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.5.tgz#3f41b8d369129a93268f2abecba94b5292850099" - integrity sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ== + version "4.2.6" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.6.tgz#19156bf179af3931abd05260cfb1491822578a6f" + integrity sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg== dependencies: "@socket.io/component-emitter" "~3.1.0" debug "~4.4.1" From 63e320591bfb2ed2848527af212a328f0721ed26 Mon Sep 17 00:00:00 2001 From: Dmitriy Evtifeev Date: Fri, 20 Mar 2026 15:22:04 +0300 Subject: [PATCH 04/12] refactor: update readme and delete unused wf --- .github/workflows/ci-dev-testnet-2.yml | 36 -------------------------- .github/workflows/ci-dev.yml | 2 +- README.md | 4 +-- 3 files changed, 3 insertions(+), 39 deletions(-) delete mode 100644 .github/workflows/ci-dev-testnet-2.yml diff --git a/.github/workflows/ci-dev-testnet-2.yml b/.github/workflows/ci-dev-testnet-2.yml deleted file mode 100644 index ecf5a9b1..00000000 --- a/.github/workflows/ci-dev-testnet-2.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: CI Dev Testnet-2 Hoodi - -on: - workflow_dispatch: - push: - branches: - - testnet-2 - paths-ignore: - - '.github/**' - - 'test/**' - -permissions: - contents: read - -jobs: - deploy: - runs-on: ubuntu-latest - # needs: test - name: Build and deploy - steps: - - name: Sepolia testnet deploy - uses: lidofinance/dispatch-workflow@v1 - env: - APP_ID: ${{ secrets.APP_ID }} - APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} - TARGET_REPO: 'lidofinance/infra-mainnet' - TARGET_WORKFLOW: 'deploy_hoodi_testnet_staking_vault_widget_devnet.yaml' - TARGET: 'testnet-2' - - tests: - needs: deploy - if: ${{ github.event.pull_request.draft == false }} - uses: ./.github/workflows/tests.yml - secrets: inherit - with: - stand_url: https://vaults.testnet.fi diff --git a/.github/workflows/ci-dev.yml b/.github/workflows/ci-dev.yml index cfe8f6a6..fcb2d013 100644 --- a/.github/workflows/ci-dev.yml +++ b/.github/workflows/ci-dev.yml @@ -18,7 +18,7 @@ jobs: # needs: test name: Build and deploy steps: - - name: Sepolia testnet deploy + - name: Hoodi testnet deploy uses: lidofinance/dispatch-workflow@v1 env: APP_ID: ${{ secrets.APP_ID }} diff --git a/README.md b/README.md index d560c8bc..1abb8ec6 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Liquid Staking Vault Widget +# stVaults Widget ### Prerequisites -- Node.js v20+ +- Node.js v24+ - Yarn package manager v1 This project requires an .env file which is distributed via private communication channels. A sample can be found in .env.example From cbf0ca42460e0a5fe9cb086b04b8fd5dffbb462f Mon Sep 17 00:00:00 2001 From: Dmitriy Evtifeev Date: Fri, 20 Mar 2026 19:53:52 +0300 Subject: [PATCH 05/12] feat: add OutdatedMetrics component --- features/overview/content/banners/banners.tsx | 2 ++ .../content/banners/outdated-metrics/index.ts | 1 + .../outdated-metrics/outdated-metrics.tsx | 22 +++++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 features/overview/content/banners/outdated-metrics/index.ts create mode 100644 features/overview/content/banners/outdated-metrics/outdated-metrics.tsx diff --git a/features/overview/content/banners/banners.tsx b/features/overview/content/banners/banners.tsx index 0c2fe8ee..a374141a 100644 --- a/features/overview/content/banners/banners.tsx +++ b/features/overview/content/banners/banners.tsx @@ -4,6 +4,7 @@ import { CapitalQuarantined } from './capital-quarantined'; import { CapacityExceeded } from './capacity-exceeded'; import { ThresholdExceeded } from './threshold-exceeded'; import { DepositsRestricted } from './deposits-restricted'; +import { OutdatedMetrics } from './outdated-metrics'; import { BannerContainer } from './styles'; @@ -16,6 +17,7 @@ export const Banners = () => { + ); }; diff --git a/features/overview/content/banners/outdated-metrics/index.ts b/features/overview/content/banners/outdated-metrics/index.ts new file mode 100644 index 00000000..0b8b84fb --- /dev/null +++ b/features/overview/content/banners/outdated-metrics/index.ts @@ -0,0 +1 @@ +export { OutdatedMetrics } from './outdated-metrics'; diff --git a/features/overview/content/banners/outdated-metrics/outdated-metrics.tsx b/features/overview/content/banners/outdated-metrics/outdated-metrics.tsx new file mode 100644 index 00000000..509f7af9 --- /dev/null +++ b/features/overview/content/banners/outdated-metrics/outdated-metrics.tsx @@ -0,0 +1,22 @@ +import { NoticeContainer } from 'features/overview/shared'; + +import { TextStyled } from '../styles'; + +export const OutdatedMetrics = () => { + const date = new Date().toDateString(); + const title = `Validator Balance Spike Detected — Metrics as of ${date}`; + + return ( + +
+ + A balance spike was detected on one or more validators, likely caused + by a side deposit or consolidation event. Due to current UI + limitations, today's metrics — Rewards, APR, Carry Spread, and + others — cannot be calculated accurately for this day. Data shown + reflects the last valid snapshot: {date}. + +
+
+ ); +}; From d3a90b0acd42b2beb905c41e7da1d29a9c67c207 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Mar 2026 18:18:29 +0000 Subject: [PATCH 06/12] chore(deps): bump flatted from 3.4.1 to 3.4.2 Bumps [flatted](https://github.com/WebReflection/flatted) from 3.4.1 to 3.4.2. - [Commits](https://github.com/WebReflection/flatted/compare/v3.4.1...v3.4.2) --- updated-dependencies: - dependency-name: flatted dependency-version: 3.4.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 29329d53..1e81a2a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7192,9 +7192,9 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.4.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.1.tgz#84ccd9579e76e9cc0d246c11d8be0beb019143e6" - integrity sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ== + version "3.4.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726" + integrity sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA== fn.name@1.x.x: version "1.1.0" From 968e3755e9fd96d7169eeffb3e9639343dbffd7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 21 Mar 2026 01:13:47 +0000 Subject: [PATCH 07/12] chore(deps): bump h3 from 1.15.5 to 1.15.9 Bumps [h3](https://github.com/h3js/h3) from 1.15.5 to 1.15.9. - [Release notes](https://github.com/h3js/h3/releases) - [Changelog](https://github.com/h3js/h3/blob/v1.15.9/CHANGELOG.md) - [Commits](https://github.com/h3js/h3/compare/v1.15.5...v1.15.9) --- updated-dependencies: - dependency-name: h3 dependency-version: 1.15.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 29329d53..af2ec74b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7524,9 +7524,9 @@ gzip-size@^6.0.0: duplexer "^0.1.2" h3@^1.15.5: - version "1.15.5" - resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.5.tgz#e2f28d4a66a249973bb050eaddb06b9ab55506f8" - integrity sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg== + version "1.15.9" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.15.9.tgz#ee3a480674b2e35106155544cc0a6de69a6dc14f" + integrity sha512-H7UPnyIupUOYUQu7f2x7ABVeMyF/IbJjqn20WSXpMdnQB260luADUkSgJU7QTWLutq8h3tUayMQ1DdbSYX5LkA== dependencies: cookie-es "^1.2.2" crossws "^0.3.5" From 47a0ed38260b7c0c08164de5856a9105ace1c0ec Mon Sep 17 00:00:00 2001 From: Dmitriy Evtifeev Date: Mon, 23 Mar 2026 19:36:31 +0300 Subject: [PATCH 08/12] feat: update OutdatedMetrics, update 7d API response structure --- .../outdated-metrics/outdated-metrics.tsx | 27 ++++++++++--------- .../overview/hooks/use-vault-overview-data.ts | 2 ++ modules/vaults/api/fetch-7d-apr.ts | 1 + modules/vaults/consts/texts.ts | 12 +++++++++ 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/features/overview/content/banners/outdated-metrics/outdated-metrics.tsx b/features/overview/content/banners/outdated-metrics/outdated-metrics.tsx index 509f7af9..180485c6 100644 --- a/features/overview/content/banners/outdated-metrics/outdated-metrics.tsx +++ b/features/overview/content/banners/outdated-metrics/outdated-metrics.tsx @@ -1,22 +1,25 @@ +import { formatCustomDate, isNumber } from 'utils'; +import { vaultTexts } from 'modules/vaults/consts'; + import { NoticeContainer } from 'features/overview/shared'; +import { useVaultOverview } from 'features/overview/vault-overview'; import { TextStyled } from '../styles'; +const { title, description } = vaultTexts.metrics.banners.outdatedMetrics; export const OutdatedMetrics = () => { - const date = new Date().toDateString(); - const title = `Validator Balance Spike Detected — Metrics as of ${date}`; + const { values } = useVaultOverview(); + const { outdatedReportData, dateOfLastReport } = values ?? {}; + + if (!outdatedReportData || !isNumber(dateOfLastReport)) { + return null; + } + + const date = formatCustomDate(dateOfLastReport); return ( - -
- - A balance spike was detected on one or more validators, likely caused - by a side deposit or consolidation event. Due to current UI - limitations, today's metrics — Rewards, APR, Carry Spread, and - others — cannot be calculated accurately for this day. Data shown - reflects the last valid snapshot: {date}. - -
+ + {description(date)} ); }; diff --git a/features/overview/hooks/use-vault-overview-data.ts b/features/overview/hooks/use-vault-overview-data.ts index c3533b89..2696dcf0 100644 --- a/features/overview/hooks/use-vault-overview-data.ts +++ b/features/overview/hooks/use-vault-overview-data.ts @@ -484,6 +484,8 @@ const selectOverviewData = ({ isSlashingHappened: minimalReserve > VAULTS_CONNECT_DEPOSIT, supplyETH: overview.supply, repayStETH: overview.repay, + outdatedReportData: vault7dApr?.outdated, + dateOfLastReport: vault7dApr?.range.toTimestamp, isReportFresh, }; }; diff --git a/modules/vaults/api/fetch-7d-apr.ts b/modules/vaults/api/fetch-7d-apr.ts index f5f112a6..0ae29a2b 100644 --- a/modules/vaults/api/fetch-7d-apr.ts +++ b/modules/vaults/api/fetch-7d-apr.ts @@ -20,6 +20,7 @@ export type Apr7dSeries = { }; export type Vault7DApr = { + outdated: boolean; days: number; count: number; range: TimestampRange; diff --git a/modules/vaults/consts/texts.ts b/modules/vaults/consts/texts.ts index 9c3b15f8..f826ce85 100644 --- a/modules/vaults/consts/texts.ts +++ b/modules/vaults/consts/texts.ts @@ -612,6 +612,18 @@ export const vaultTexts = { }, }, }, + banners: { + outdatedMetrics: { + title: (date: string) => + `Validator Balance Spike Detected — Metrics as of ${date}`, + description: (date: string) => + `A balance spike was detected on one or more validators, likely caused + by a side deposit or consolidation event. Due to current UI + limitations, today's metrics — Rewards, APR, Carry Spread, and + others — cannot be calculated accurately for this day. Data shown + reflects the last valid snapshot: ${date}.`, + }, + }, }, // configuration for vault roles roles: { From b185402c2e00f054fa0400fb90f725ed796bcc41 Mon Sep 17 00:00:00 2001 From: Dmitriy Evtifeev Date: Tue, 24 Mar 2026 19:06:36 +0300 Subject: [PATCH 09/12] fix: fix call getContractEvents for RoleMemberConfirmed for range of blocks --- utils/get-confirmations.ts | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/utils/get-confirmations.ts b/utils/get-confirmations.ts index 566a9c2f..bd721448 100644 --- a/utils/get-confirmations.ts +++ b/utils/get-confirmations.ts @@ -52,17 +52,37 @@ export const getConfirmationsInfo = async < contract.read.getConfirmExpiry(), publicClient.getBlockNumber(), ]); + const confirmExpireInBlocks = confirmExpiry / AVG_BLOCK_TIME_SEC; const fromBlock = currentBlock - confirmExpireInBlocks; - // get all logs without filtering by role, because Operator Grid uses addresses instead of roles - const logs = await publicClient.getContractEvents({ - address: contract.address, - abi: contract.abi, - eventName: 'RoleMemberConfirmed', - fromBlock, - strict: true, - }); + const safeBlockSize = 10_000n; // safe for rpc calls + const ranges: Array> = []; + + for (let start = fromBlock; start <= currentBlock; start += safeBlockSize) { + ranges.push({ + fromBlock: start, + toBlock: + start + safeBlockSize - 1n <= currentBlock + ? start + safeBlockSize - 1n + : currentBlock, + }); + } + + const logs = ( + await Promise.all( + ranges.map(({ fromBlock, toBlock }) => + publicClient.getContractEvents({ + address: contract.address, + abi: contract.abi, + eventName: 'RoleMemberConfirmed', + strict: true, + fromBlock, + toBlock, + }), + ), + ) + ).flat(); let confirmations = logs // filter out confirmations that are already expired From 1ee968166a1c6b8913e33be2e871c72994ec652c Mon Sep 17 00:00:00 2001 From: Dmitriy Evtifeev Date: Tue, 24 Mar 2026 19:10:34 +0300 Subject: [PATCH 10/12] refactor: return comment for RoleMemberConfirmed events logs --- utils/get-confirmations.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/utils/get-confirmations.ts b/utils/get-confirmations.ts index bd721448..429dcedd 100644 --- a/utils/get-confirmations.ts +++ b/utils/get-confirmations.ts @@ -69,6 +69,7 @@ export const getConfirmationsInfo = async < }); } + // get all logs without filtering by role, because Operator Grid uses addresses instead of roles const logs = ( await Promise.all( ranges.map(({ fromBlock, toBlock }) => From 6d7d6ef6e5384fc5914000181d9ccf940cb478e0 Mon Sep 17 00:00:00 2001 From: Dmitriy Evtifeev Date: Tue, 24 Mar 2026 21:50:49 +0300 Subject: [PATCH 11/12] fix: fix overview vault addresses, fix permission settings no roles --- .env.example | 2 +- .../address-with-tooltip/address-with-tooltip.tsx | 8 +++++--- .../components/address-with-tooltip/styles.ts | 6 ++++++ .../components/role-description/role-description.tsx | 6 ++++++ 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 features/overview/shared/contract-address/components/address-with-tooltip/styles.ts diff --git a/.env.example b/.env.example index 33a46ea9..bcee9b66 100644 --- a/.env.example +++ b/.env.example @@ -41,7 +41,7 @@ CSP_TRUSTED_HOSTS=https://*.lido.fi # put "true" enable report only mode for CSP CSP_REPORT_ONLY=true # api endpoint for reporting csp violations -CSP_REPORT_URI=https://vaults.lido.fi/api/csp-report +CSP_REPORT_URI=https://stvaults.lido.fi/api/csp-report # allow some state overrides from browser console for QA ENABLE_QA_HELPERS=false diff --git a/features/overview/shared/contract-address/components/address-with-tooltip/address-with-tooltip.tsx b/features/overview/shared/contract-address/components/address-with-tooltip/address-with-tooltip.tsx index d472255f..f778b19f 100644 --- a/features/overview/shared/contract-address/components/address-with-tooltip/address-with-tooltip.tsx +++ b/features/overview/shared/contract-address/components/address-with-tooltip/address-with-tooltip.tsx @@ -1,5 +1,7 @@ import type { FC } from 'react'; -import { Tooltip, Address } from '@lidofinance/lido-ui'; +import { Address } from '@lidofinance/lido-ui'; + +import { TooltipStyled } from './styles'; type AddressWithTooltipProps = { address: string; @@ -9,8 +11,8 @@ export const AddressWithTooltip: FC = ({ address, }) => { return ( - +
- + ); }; diff --git a/features/overview/shared/contract-address/components/address-with-tooltip/styles.ts b/features/overview/shared/contract-address/components/address-with-tooltip/styles.ts new file mode 100644 index 00000000..c015dc6b --- /dev/null +++ b/features/overview/shared/contract-address/components/address-with-tooltip/styles.ts @@ -0,0 +1,6 @@ +import styled from 'styled-components'; +import { Tooltip } from '@lidofinance/lido-ui'; + +export const TooltipStyled = styled(Tooltip)` + overflow: clip; +`; diff --git a/features/settings/permissions/components/role-description/role-description.tsx b/features/settings/permissions/components/role-description/role-description.tsx index ff63e972..cc1f0ef4 100644 --- a/features/settings/permissions/components/role-description/role-description.tsx +++ b/features/settings/permissions/components/role-description/role-description.tsx @@ -20,6 +20,12 @@ export type RoleDescriptionProps = { const splitDescription = (description: string) => { const words = description.split(' ').filter(Boolean); + if (words.length === 1) { + return { + descriptionText: words[0], + }; + } + return { descriptionText: words.toSpliced(0, -1).join(' '), lastWord: words.at(-1) ?? '', From c410c3e7f82271bea06d11649a2a62d7282af0ec Mon Sep 17 00:00:00 2001 From: Dmitriy Evtifeev Date: Wed, 25 Mar 2026 15:44:18 +0300 Subject: [PATCH 12/12] fix: fix duplication in RoleDescription --- .../components/role-description/role-description.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/features/settings/permissions/components/role-description/role-description.tsx b/features/settings/permissions/components/role-description/role-description.tsx index cc1f0ef4..278a3eb4 100644 --- a/features/settings/permissions/components/role-description/role-description.tsx +++ b/features/settings/permissions/components/role-description/role-description.tsx @@ -20,6 +20,7 @@ export type RoleDescriptionProps = { const splitDescription = (description: string) => { const words = description.split(' ').filter(Boolean); + if (words.length === 1) { return { descriptionText: words[0], @@ -27,8 +28,8 @@ const splitDescription = (description: string) => { } return { - descriptionText: words.toSpliced(0, -1).join(' '), - lastWord: words.at(-1) ?? '', + descriptionText: words.slice(0, -1).join(' '), + lastWord: words[words.length - 1] ?? '', }; };