v2.0.3 (#612)
* Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * 🐛 fix build --------- Co-authored-by: Linkie Link <linkielink.dev@gmail.com> * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * post update hotfixes (#580) * fix: fixed showing 0 on farm page if no desposited vaults * fix: chnage USDC’s name to Noble * v2.0.1 (#579) (#582) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Linkie Link <linkielink.dev@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * v2.0.1 (#579) (#583) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * Asset select overflow (#584) * v2.0.1 (#579) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * 🐛 fix build --------- Co-authored-by: Linkie Link <linkielink.dev@gmail.com> * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * 🐛 fix build --------- Co-authored-by: Linkie Link <linkielink.dev@gmail.com> * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * post update hotfixes (#580) * fix: fixed showing 0 on farm page if no desposited vaults * fix: chnage USDC’s name to Noble * v2.0.1 (#579) (#582) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Linkie Link <linkielink.dev@gmail.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * v2.0.1 (#579) (#583) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * fix: fixed the asset select overflow --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> * fix: fixed the AccountDetails position * fix: update * Hotfixes v2.0.1 (#581) (#585) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- * post update hotfixes (#580) * fix: fixed showing 0 on farm page if no desposited vaults * fix: chnage USDC’s name to Noble * v2.0.1 (#579) (#582) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- * v2.0.1 (#579) (#583) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- * Asset select overflow (#584) * v2.0.1 (#579) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * post update hotfixes (#580) * fix: fixed showing 0 on farm page if no desposited vaults * fix: chnage USDC’s name to Noble * v2.0.1 (#579) (#582) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- * v2.0.1 (#579) (#583) * Build(deps): bump @splinetool/runtime from 0.9.477 to 0.9.482 (#544) Bumps @splinetool/runtime from 0.9.477 to 0.9.482. --- updated-dependencies: - dependency-name: "@splinetool/runtime" dependency-type: direct:production update-type: version-update:semver-patch ... * Build(deps-dev): bump @types/node from 20.7.0 to 20.8.6 (#548) Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.7.0 to 20.8.6. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node) --- updated-dependencies: - dependency-name: "@types/node" dependency-type: direct:development update-type: version-update:semver-minor ... * Build(deps): bump @sentry/nextjs from 7.73.0 to 7.74.0 (#545) Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.73.0 to 7.74.0. - [Release notes](https://github.com/getsentry/sentry-javascript/releases) - [Changelog](https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-javascript/compare/7.73.0...7.74.0) --- updated-dependencies: - dependency-name: "@sentry/nextjs" dependency-type: direct:production update-type: version-update:semver-minor ... * Mp 3245 usehlsvaults hook (#541) * ✨ routing and pages for HLS * ✨ create hooks for fetching HLS vaults and Strategies * Share accounts (#539) * feat: do not redirect to wallet on portfolio page * fix: use connected wallet for AccountMenu * fix: fixed ghost AccountDetails * feat: created ShareBar and share functionality * fix: don’t show shareBar if no address is present * fix: stupid 'next/navigation' * tidy: format * fix: fixed tests * ✨ routing and pages for HLS (#538) * 🐛 use useAccountIds * fix: fixed the tests * fix: accountIds is now a suspense --------- * 🐛 fix build --------- * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * added hatched health masks (#552) * added hatched health masks * Mp 2837 pre commit hook (#549) * MP-2837: added husys and lint-staged * MP-2837: enabled lint-staged * MP-2837: setup .prettierignore * MP-2837: setup .prettierignore * MP-3483: all Depo. Caps are now % filled (#551) * MP-3487: changed the copy of the bridging intro screen (#553) * MP-3482: replaced Max LTV with Max. Leverage (#550) * sneak: change filled to used * fix: fixed the foregroundColor on increase and my ocd * ♻️ refactor table (Farm) (#555) * ♻️ refactor table (Farm) * 🧽 clean up PR * 🧽 clean up PR * Build(deps): bump @babel/traverse from 7.21.2 to 7.23.2 (#554) Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.2 to 7.23.2. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse) --- updated-dependencies: - dependency-name: "@babel/traverse" dependency-type: indirect ... * fix: rename withdraw to unlend (#557) * Full refactor tables (#556) * 📈 Improve structure generic Table component * ♻️ Update Borrow Table and overall structure of Table comp * ♻️ Update Lend table * ✨ add loading state for lend table * 🧪 Fix unit tests * ✨ Add available HLS Vaults page (#558) * Table updates (#559) * fix: adjusted table colors and hover interactions * fix: added actionButtons back and changed lend to APY * fix: build update * tidy: fixed the CircularProgress indicators on the loading modals * fix: relative import * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * Mp 3480 persist last trading pair (#578) * MP-3480: remove favourite asset and prepare localStore * env: updated shuttle, keplr and version (#566) * fix: fixed dust left when trying to buy max amount without leverage (#565) * feat: added squidrouter to the bridges (#561) * feat: added squidrouter to the bridges * fix: copy update * MP-3521: updated the APR calculation (#572) * Table fixes (#563) * fix: fixed the sorting of the tables * fix: added sorting functions * fix: farm sorting for deposit cap * fix: fixed Row types * Build(deps-dev): bump prettier-plugin-tailwindcss from 0.5.5 to 0.5.6 (#567) Bumps [prettier-plugin-tailwindcss](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) from 0.5.5 to 0.5.6. - [Release notes](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/prettier-plugin-tailwindcss/compare/v0.5.5...v0.5.6) --- updated-dependencies: - dependency-name: prettier-plugin-tailwindcss dependency-type: direct:development update-type: version-update:semver-patch ... * Build(deps): bump react-router-dom from 6.16.0 to 6.17.0 (#571) Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.16.0 to 6.17.0. - [Release notes](https://github.com/remix-run/react-router/releases) - [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md) - [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.17.0/packages/react-router-dom) --- updated-dependencies: - dependency-name: react-router-dom dependency-type: direct:production update-type: version-update:semver-minor ... * ✨ HLS: Add info modal (#573) * MP-3484: remember summaryAccount tabs and auto expand both (#574) * User feedback (#575) * feat: added debt indicator and adjusted the borrowModal * fix: wallet interaction fix * Add usdc noble (#576) * env: added USDC.n * env: updated usdc noble variables * fix: fixed the pool on USDC for devnet purposes * 🐛 Fix initial status of chart (#577) * MP-3480: persist trading pair * fix: updated according to feedback * fix: remove pair from Trading View header --------- --------- * fix: fixed the asset select overflow --------- * fix: fixed the AccountDetails position * fix: update --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: prevent permanent account updates by trade page (#587) * fix: keep the selected accountId if its present int the url (#588) * Link changelog (#589) * env: update RPC endpoint * feat: added changelog link to the footer version * Refactor balances table (#590) * env: update env.example after last sync * tidy: refactored AccountBalancesTable * fix: updated isCard to hideCard * fix: do update the health on sliding the margin back to 0 (#593) * fix: disable highlighting on non-expandable rows (#592) * Healthfactor adjustments (#594) * fix: do update the health on sliding the margin back to 0 * MP-3531: first updates on the health bars * fix: added exponential function for health percentage * fix: build fix * tidy: refactor * tidy: cleanup * feat: added new curve * fix: base set to 3.5 * env: version update * 🌟 Add HLS Vault Modal (#595) * 🌟 Add HLS Vault Modal * 🛠️ Fix failing build * fix: keep the selected accountId if its present int the url (#588) * Link changelog (#589) * env: update RPC endpoint * feat: added changelog link to the footer version * Refactor balances table (#590) * env: update env.example after last sync * tidy: refactored AccountBalancesTable * fix: updated isCard to hideCard * fix: do update the health on sliding the margin back to 0 (#593) * fix: disable highlighting on non-expandable rows (#592) * Healthfactor adjustments (#594) * fix: do update the health on sliding the margin back to 0 * MP-3531: first updates on the health bars * fix: added exponential function for health percentage * fix: build fix * tidy: refactor * tidy: cleanup * feat: added new curve * fix: base set to 3.5 * env: version update * 🌟 Add HLS Vault Modal * Use `DisplayCurrency` in subtitle header * 🔥Remove redundant component --------- Co-authored-by: Linkie Link <linkielink.dev@gmail.com> * fix: if HF > 1 and health === 0, return health 1 (#601) * MP-3540: added liquidity warning (#605) * Oracle update button (#606) * feat: added a resync button to the header * fix: updated the text * fix: remove pulsing * fix: fixed the checkbox not being clickable after select (#608) * Mp 3360 create vault position (#607) * 🔧 Small fixes * ✨ Deposit into HLS Vault + Groudnwork for HLS Staking * Adjusted according to feedback * Adjusted according to feedback * Build(deps-dev): bump eslint-config-next from 13.5.4 to 14.0.0 (#599) Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 13.5.4 to 14.0.0. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/commits/v14.0.0/packages/eslint-config-next) --- updated-dependencies: - dependency-name: eslint-config-next dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump recharts from 2.8.0 to 2.9.0 (#598) Bumps [recharts](https://github.com/recharts/recharts) from 2.8.0 to 2.9.0. - [Release notes](https://github.com/recharts/recharts/releases) - [Changelog](https://github.com/recharts/recharts/blob/master/CHANGELOG.md) - [Commits](https://github.com/recharts/recharts/compare/v2.8.0...v2.9.0) --- updated-dependencies: - dependency-name: recharts dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps-dev): bump @types/react from 18.2.28 to 18.2.33 (#596) Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.28 to 18.2.33. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react) --- updated-dependencies: - dependency-name: "@types/react" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps): bump crypto-js from 4.1.1 to 4.2.0 (#591) Bumps [crypto-js](https://github.com/brix/crypto-js) from 4.1.1 to 4.2.0. - [Commits](https://github.com/brix/crypto-js/compare/4.1.1...4.2.0) --- updated-dependencies: - dependency-name: crypto-js dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Build(deps-dev): bump @types/lodash.throttle from 4.1.7 to 4.1.8 (#569) Bumps [@types/lodash.throttle](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash.throttle) from 4.1.7 to 4.1.8. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash.throttle) --- updated-dependencies: - dependency-name: "@types/lodash.throttle" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * fix: waiting for script to be ready (#609) * fix: show a loading state of the trading chart (#610) * fix: show a loading state of the trading chart * tidy: refactor * Feedback implementation (#611) * env: update wallet volnurabilities * fix: always render TradingChart container * fix: amounts can be a fraction of MIN_AMOUNT * feat: added clickaway handler * tidy: refactor * fix: size below 0.00001 is possible for BTC and WETH * fix: fixed tests --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com>
This commit is contained in:
parent
fb10397e6f
commit
0daaaa73e9
@ -4,6 +4,12 @@ import AccountDetails from 'components/Account/AccountDetails'
|
||||
import useCurrentAccount from 'hooks/useCurrentAccount'
|
||||
import useStore from 'store'
|
||||
|
||||
jest.mock('react-router', () => ({
|
||||
...(jest.requireActual('react-router') as {}),
|
||||
useLocation: jest.fn().mockImplementation(() => {
|
||||
return { pathname: '/testroute' }
|
||||
}),
|
||||
}))
|
||||
jest.mock('hooks/useCurrentAccount', () => jest.fn(() => null))
|
||||
jest.mock('hooks/useHealthComputer', () =>
|
||||
jest.fn(() => ({
|
||||
@ -14,9 +20,9 @@ jest.mock('hooks/useHealthComputer', () =>
|
||||
jest.mock('components/Account/AccountBalancesTable', () => jest.fn(() => null))
|
||||
|
||||
const mockedUseCurrentAccount = useCurrentAccount as jest.Mock
|
||||
const mockedAccounts = [
|
||||
{ id: '1', deposits: [], lends: [], debts: [], vaults: [] },
|
||||
{ id: '2', deposits: [], lends: [], debts: [], vaults: [] },
|
||||
const mockedAccounts: Account[] = [
|
||||
{ id: '1', deposits: [], lends: [], debts: [], vaults: [], kind: 'default' },
|
||||
{ id: '2', deposits: [], lends: [], debts: [], vaults: [], kind: 'default' },
|
||||
]
|
||||
jest.mock('hooks/useAccountId', () => jest.fn(() => '1'))
|
||||
jest.mock('hooks/useAccounts', () =>
|
||||
|
14
package.json
14
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "mars-v2-frontend",
|
||||
"version": "2.0.2",
|
||||
"version": "2.0.3",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "yarn validate-env && next build",
|
||||
@ -23,8 +23,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@cosmjs/cosmwasm-stargate": "^0.31.1",
|
||||
"@delphi-labs/shuttle-react": "^3.9.1",
|
||||
"@keplr-wallet/cosmos": "^0.12.35",
|
||||
"@delphi-labs/shuttle-react": "^3.10.0",
|
||||
"@keplr-wallet/cosmos": "^0.12.39",
|
||||
"@sentry/nextjs": "^7.74.0",
|
||||
"@splinetool/react-spline": "^2.2.6",
|
||||
"@splinetool/runtime": "^0.9.482",
|
||||
@ -47,7 +47,7 @@
|
||||
"react-spring": "^9.7.3",
|
||||
"react-toastify": "^9.1.3",
|
||||
"react-use-clipboard": "^1.0.9",
|
||||
"recharts": "^2.8.0",
|
||||
"recharts": "^2.9.0",
|
||||
"swr": "^2.2.4",
|
||||
"tailwind-scrollbar-hide": "^1.1.7",
|
||||
"zustand": "^4.4.3"
|
||||
@ -58,9 +58,9 @@
|
||||
"@testing-library/react": "^14.0.0",
|
||||
"@types/debounce-promise": "^3.1.7",
|
||||
"@types/lodash.debounce": "^4.0.7",
|
||||
"@types/lodash.throttle": "^4.1.7",
|
||||
"@types/lodash.throttle": "^4.1.8",
|
||||
"@types/node": "^20.8.6",
|
||||
"@types/react": "18.2.28",
|
||||
"@types/react": "18.2.33",
|
||||
"@types/react-dom": "18.2.13",
|
||||
"@types/react-helmet": "^6.1.7",
|
||||
"autoprefixer": "^10.4.16",
|
||||
@ -68,7 +68,7 @@
|
||||
"dotenv": "^16.3.1",
|
||||
"dotenv-cli": "^7.3.0",
|
||||
"eslint": "^8.51.0",
|
||||
"eslint-config-next": "^13.5.4",
|
||||
"eslint-config-next": "^14.0.0",
|
||||
"eslint-plugin-import": "^2.28.1",
|
||||
"husky": "^8.0.3",
|
||||
"identity-obj-proxy": "^3.0.0",
|
||||
|
@ -4,15 +4,19 @@ import getDepositedVaults from 'api/vaults/getDepositedVaults'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
import { Positions } from 'types/generated/mars-credit-manager/MarsCreditManager.types'
|
||||
|
||||
export default async function getAccount(accountId: string): Promise<Account> {
|
||||
export default async function getAccount(accountId?: string): Promise<Account> {
|
||||
if (!accountId) return new Promise((_, reject) => reject('No account ID found'))
|
||||
|
||||
const creditManagerQueryClient = await getCreditManagerQueryClient()
|
||||
|
||||
const accountPosition: Positions = await cacheFn(
|
||||
() => creditManagerQueryClient.positions({ accountId }),
|
||||
() => creditManagerQueryClient.positions({ accountId: accountId }),
|
||||
positionsCache,
|
||||
`account/${accountId}`,
|
||||
)
|
||||
|
||||
const accountKind = await creditManagerQueryClient.accountKind({ accountId: accountId })
|
||||
|
||||
const depositedVaults = await getDepositedVaults(accountId, accountPosition)
|
||||
|
||||
if (accountPosition) {
|
||||
@ -22,6 +26,7 @@ export default async function getAccount(accountId: string): Promise<Account> {
|
||||
lends: accountPosition.lends.map((lend) => new BNCoin(lend)),
|
||||
deposits: accountPosition.deposits.map((deposit) => new BNCoin(deposit)),
|
||||
vaults: depositedVaults,
|
||||
kind: accountKind,
|
||||
}
|
||||
}
|
||||
|
||||
|
41
src/api/hls/getHLSStakingAccounts.ts
Normal file
41
src/api/hls/getHLSStakingAccounts.ts
Normal file
@ -0,0 +1,41 @@
|
||||
import getHLSStakingAssets from 'api/hls/getHLSStakingAssets'
|
||||
import getPrices from 'api/prices/getPrices'
|
||||
import getAccounts from 'api/wallets/getAccounts'
|
||||
import { calculateAccountLeverage, getAccountPositionValues, isAccountEmpty } from 'utils/accounts'
|
||||
|
||||
export default async function getHLSStakingAccounts(
|
||||
address?: string,
|
||||
): Promise<HLSAccountWithStrategy[]> {
|
||||
const accounts = await getAccounts('high_levered_strategy', address)
|
||||
const activeAccounts = accounts.filter((account) => !isAccountEmpty(account))
|
||||
const hlsStrategies = await getHLSStakingAssets()
|
||||
const prices = await getPrices()
|
||||
const hlsAccountsWithStrategy: HLSAccountWithStrategy[] = []
|
||||
|
||||
activeAccounts.forEach((account) => {
|
||||
if (account.deposits.length === 0 || account.debts.length === 0) return
|
||||
|
||||
const strategy = hlsStrategies.find(
|
||||
(strategy) =>
|
||||
strategy.denoms.deposit === account.deposits.at(0).denom &&
|
||||
strategy.denoms.borrow === account.debts.at(0).denom,
|
||||
)
|
||||
|
||||
if (!strategy) return
|
||||
|
||||
const [deposits, lends, debts, vaults] = getAccountPositionValues(account, prices)
|
||||
|
||||
hlsAccountsWithStrategy.push({
|
||||
...account,
|
||||
strategy,
|
||||
values: {
|
||||
net: deposits.minus(debts),
|
||||
debt: debts,
|
||||
total: deposits,
|
||||
},
|
||||
leverage: calculateAccountLeverage(account, prices).toNumber(),
|
||||
})
|
||||
})
|
||||
|
||||
return hlsAccountsWithStrategy
|
||||
}
|
@ -1,14 +1,18 @@
|
||||
import { getParamsQueryClient } from 'api/cosmwasm-client'
|
||||
import getAssetParams from 'api/params/getAssetParams'
|
||||
import { getStakingAssets } from 'utils/assets'
|
||||
import { BN } from 'utils/helpers'
|
||||
import { resolveHLSStrategies } from 'utils/resolvers'
|
||||
|
||||
export default async function getHLSStakingAssets() {
|
||||
const stakingAssetDenoms = getStakingAssets().map((asset) => asset.denom)
|
||||
const assetParams = await getAssetParams()
|
||||
const client = await getParamsQueryClient()
|
||||
const HLSAssets = assetParams.filter((asset) => asset.credit_manager.hls)
|
||||
const HLSAssets = assetParams
|
||||
.filter((asset) => stakingAssetDenoms.includes(asset.denom))
|
||||
.filter((asset) => asset.credit_manager.hls)
|
||||
const strategies = resolveHLSStrategies('coin', HLSAssets)
|
||||
|
||||
const client = await getParamsQueryClient()
|
||||
const depositCaps$ = strategies.map((strategy) =>
|
||||
client.totalDeposit({ denom: strategy.denoms.deposit }),
|
||||
)
|
||||
|
20
src/api/prices/getPriceData.ts
Normal file
20
src/api/prices/getPriceData.ts
Normal file
@ -0,0 +1,20 @@
|
||||
import fetchPythPriceData from 'api/prices/getPythPriceData'
|
||||
import { getPythAssets } from 'utils/assets'
|
||||
|
||||
export default async function getPricesData(): Promise<string[]> {
|
||||
try {
|
||||
const assetsWithPythPriceFeedId = getPythAssets()
|
||||
const pythAndOraclePriceData = await requestPythPriceData(assetsWithPythPriceFeedId)
|
||||
return pythAndOraclePriceData
|
||||
} catch (ex) {
|
||||
console.error(ex)
|
||||
throw ex
|
||||
}
|
||||
}
|
||||
|
||||
async function requestPythPriceData(assets: Asset[]): Promise<string[]> {
|
||||
if (!assets.length) return []
|
||||
|
||||
const priceFeedIds = assets.map((a) => a.pythPriceFeedId) as string[]
|
||||
return await fetchPythPriceData(...priceFeedIds)
|
||||
}
|
@ -2,6 +2,7 @@ import getOraclePrices from 'api/prices/getOraclePrices'
|
||||
import getPoolPrice from 'api/prices/getPoolPrice'
|
||||
import fetchPythPrices from 'api/prices/getPythPrices'
|
||||
import { ENV } from 'constants/env'
|
||||
import useStore from 'store'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
import { NETWORK } from 'types/enums/network'
|
||||
import { partition } from 'utils/array'
|
||||
@ -22,9 +23,16 @@ export default async function getPrices(): Promise<BNCoin[]> {
|
||||
).flat()
|
||||
const poolPrices = await requestPoolPrices(assetsWithPoolIds, pythAndOraclePrices)
|
||||
|
||||
useStore.setState({ isOracleStale: false })
|
||||
|
||||
return [...pythAndOraclePrices, ...poolPrices, usdPrice]
|
||||
} catch (ex) {
|
||||
console.error(ex)
|
||||
let message = 'Unknown Error'
|
||||
if (ex instanceof Error) message = ex.message
|
||||
if (message.includes('price publish time is too old'))
|
||||
useStore.setState({ isOracleStale: true })
|
||||
|
||||
throw ex
|
||||
}
|
||||
}
|
||||
|
19
src/api/prices/getPythPriceData.ts
Normal file
19
src/api/prices/getPythPriceData.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import { cacheFn, pythPriceCache } from 'api/cache'
|
||||
import { ENV } from 'constants/env'
|
||||
|
||||
export default async function fetchPythPriceData(...priceFeedIds: string[]) {
|
||||
try {
|
||||
const pricesUrl = new URL(`${ENV.PYTH_ENDPOINT}/latest_vaas`)
|
||||
priceFeedIds.forEach((id) => pricesUrl.searchParams.append('ids[]', id))
|
||||
|
||||
const pythDataResponse: string[] = await cacheFn(
|
||||
() => fetch(pricesUrl).then((res) => res.json()),
|
||||
pythPriceCache,
|
||||
`pythPricData/${priceFeedIds.flat().join('-')}`,
|
||||
30,
|
||||
)
|
||||
return pythDataResponse
|
||||
} catch (ex) {
|
||||
throw ex
|
||||
}
|
||||
}
|
@ -41,7 +41,7 @@ export default async function getVaults(): Promise<Vault[]> {
|
||||
),
|
||||
},
|
||||
apy: apr ? convertAprToApy(apr.apr, 365) : null,
|
||||
apr: apr ? apr.apr / 100 : null,
|
||||
apr: apr ? apr.apr : null,
|
||||
ltv: {
|
||||
max: Number(vaultConfig.max_loan_to_value),
|
||||
liq: Number(vaultConfig.liquidation_threshold),
|
||||
|
@ -1,25 +1,27 @@
|
||||
import { getAccountNftQueryClient } from 'api/cosmwasm-client'
|
||||
import { getCreditManagerQueryClient } from 'api/cosmwasm-client'
|
||||
import { ITEM_LIMIT_PER_QUERY } from 'constants/query'
|
||||
|
||||
export default async function getAccountIds(
|
||||
address?: string,
|
||||
previousResults?: string[],
|
||||
): Promise<string[]> {
|
||||
previousResults?: AccountIdAndKind[],
|
||||
): Promise<AccountIdAndKind[]> {
|
||||
if (!address) return []
|
||||
try {
|
||||
const accountNftQueryClient = await getAccountNftQueryClient()
|
||||
const client = await getCreditManagerQueryClient()
|
||||
|
||||
const lastItem = previousResults && previousResults.at(-1)
|
||||
const results = await accountNftQueryClient.tokens({
|
||||
limit: ITEM_LIMIT_PER_QUERY,
|
||||
startAfter: lastItem,
|
||||
owner: address,
|
||||
})
|
||||
const accounts = (
|
||||
await client.accounts({
|
||||
limit: ITEM_LIMIT_PER_QUERY,
|
||||
startAfter: lastItem?.id,
|
||||
owner: address,
|
||||
})
|
||||
).map((account) => ({ id: account.id, kind: account.kind }) as AccountIdAndKind)
|
||||
|
||||
const accumulated = (previousResults ?? []).concat(results.tokens)
|
||||
const accumulated = (previousResults ?? []).concat(accounts)
|
||||
|
||||
if (results.tokens.length < ITEM_LIMIT_PER_QUERY) {
|
||||
return accumulated.sort((a, b) => parseInt(a) - parseInt(b))
|
||||
if (accounts.length < ITEM_LIMIT_PER_QUERY) {
|
||||
return accumulated.sort((a, b) => parseInt(a.id) - parseInt(b.id))
|
||||
}
|
||||
|
||||
return await getAccountIds(address, accumulated)
|
||||
|
@ -1,11 +1,14 @@
|
||||
import getAccount from 'api/accounts/getAccount'
|
||||
import getWalletAccountIds from 'api/wallets/getAccountIds'
|
||||
import { AccountKind } from 'types/generated/mars-rover-health-computer/MarsRoverHealthComputer.types'
|
||||
|
||||
export default async function getAccounts(address?: string): Promise<Account[]> {
|
||||
if (!address) return []
|
||||
const accountIds: string[] = await getWalletAccountIds(address)
|
||||
export default async function getAccounts(kind: AccountKind, address?: string): Promise<Account[]> {
|
||||
if (!address) return new Promise((_, reject) => reject('No address'))
|
||||
const accountIdsAndKinds = await getWalletAccountIds(address)
|
||||
|
||||
const $accounts = accountIds.map((accountId) => getAccount(accountId))
|
||||
const $accounts = accountIdsAndKinds
|
||||
.filter((a) => a.kind === kind)
|
||||
.map((account) => getAccount(account.id))
|
||||
|
||||
const accounts = await Promise.all($accounts).then((accounts) => accounts)
|
||||
|
||||
|
@ -20,7 +20,10 @@ export default function AccordionContent(props: Props) {
|
||||
const { title, renderContent, isOpen, renderSubTitle, toggleOpen } = props.item
|
||||
|
||||
return (
|
||||
<div key={title} className='border-b border-collapse group border-white/20 last:border-b-0'>
|
||||
<div
|
||||
key={title}
|
||||
className='border-b border-collapse group/accordion border-white/20 last:border-b-0'
|
||||
>
|
||||
<div
|
||||
onClick={() => toggleOpen(props.index)}
|
||||
className={classNames(
|
||||
@ -33,7 +36,7 @@ export default function AccordionContent(props: Props) {
|
||||
<Text>{title}</Text>
|
||||
{renderSubTitle()}
|
||||
</div>
|
||||
<div className='block pr-1 group-[[open]]:hidden'>
|
||||
<div className='block pr-1 group-[[open]]/accordion:hidden'>
|
||||
{isOpen ? <ChevronDown className='h-1.5' /> : <ChevronRight className='w-1.5' />}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -44,11 +44,11 @@ export default function Size(props: Props) {
|
||||
)
|
||||
|
||||
const formattedAmount = formatAmountToPrecision(size, MAX_AMOUNT_DECIMALS)
|
||||
const lowAmount = formattedAmount === 0 ? 0 : Math.max(formattedAmount, MIN_AMOUNT)
|
||||
const lowAmount = formattedAmount === 0 ? MIN_AMOUNT : Math.max(formattedAmount, MIN_AMOUNT)
|
||||
return (
|
||||
<FormattedNumber
|
||||
className={className}
|
||||
smallerThanThreshold={formattedAmount !== 0 && formattedAmount < MIN_AMOUNT}
|
||||
smallerThanThreshold={formattedAmount < MIN_AMOUNT}
|
||||
amount={lowAmount}
|
||||
options={{
|
||||
maxDecimals: MAX_AMOUNT_DECIMALS,
|
||||
|
@ -29,5 +29,7 @@ export default function Value(props: Props) {
|
||||
amount: value,
|
||||
})
|
||||
|
||||
return <DisplayCurrency coin={coin} className={classNames('text-xs text-right', color)} />
|
||||
return (
|
||||
<DisplayCurrency coin={coin} className={classNames('text-xs text-right', color)} showZero />
|
||||
)
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ export default function useAccountBalanceData(props: Props) {
|
||||
const prevDebt = updatedAccount
|
||||
? account?.debts.find((position) => position.denom === debt.denom)
|
||||
: debt
|
||||
return getAssetAccountBalanceRow('borrowing', asset, prices, debt, apy * -100, prevDebt)
|
||||
return getAssetAccountBalanceRow('borrowing', asset, prices, debt, apy, prevDebt)
|
||||
})
|
||||
return [...deposits, ...lends, ...vaults, ...debts]
|
||||
}, [prices, account, updatedAccount, borrowingData, lendingData])
|
||||
|
@ -21,7 +21,7 @@ export default function AccountCreateFirst() {
|
||||
|
||||
const handleClick = useCallback(async () => {
|
||||
setIsCreating(true)
|
||||
const accountId = await createAccount()
|
||||
const accountId = await createAccount('default')
|
||||
setIsCreating(false)
|
||||
if (accountId) {
|
||||
navigate(getRoute(getPage(pathname), address, accountId))
|
||||
|
@ -5,7 +5,7 @@ import Text from 'components/Text'
|
||||
export default function Skeleton() {
|
||||
return (
|
||||
<div className='absolute flex items-start w-16 gap-4 right-4 top-6 opacity-90'>
|
||||
<div className='relative flex flex-wrap w-16 border min-w-16 group rounded-base border-white/20'>
|
||||
<div className='relative flex flex-wrap w-16 border min-w-16 rounded-base border-white/20'>
|
||||
<div className='flex flex-wrap justify-center w-full py-4'>
|
||||
<HealthGauge health={0} healthFactor={0} />
|
||||
<Text size='2xs' className='mb-0.5 mt-1 w-full text-center text-white/50'>
|
||||
|
@ -1,5 +1,6 @@
|
||||
import classNames from 'classnames'
|
||||
import { useCallback, useMemo } from 'react'
|
||||
import { useLocation } from 'react-router-dom'
|
||||
|
||||
import AccountBalancesTable from 'components/Account/AccountBalancesTable'
|
||||
import AccountComposition from 'components/Account/AccountComposition'
|
||||
@ -35,11 +36,10 @@ import {
|
||||
|
||||
export default function AccountDetailsController() {
|
||||
const address = useStore((s) => s.address)
|
||||
const { data: accounts, isLoading } = useAccounts(address)
|
||||
const { data: accounts, isLoading } = useAccounts('default', address)
|
||||
const { data: accountIds } = useAccountIds(address, false)
|
||||
const accountId = useAccountId()
|
||||
const account = useCurrentAccount()
|
||||
|
||||
const focusComponent = useStore((s) => s.focusComponent)
|
||||
const isOwnAccount = accountId && accountIds?.includes(accountId)
|
||||
|
||||
@ -56,6 +56,7 @@ interface Props {
|
||||
|
||||
function AccountDetails(props: Props) {
|
||||
const { account } = props
|
||||
const location = useLocation()
|
||||
const [reduceMotion] = useLocalStorage<boolean>(
|
||||
LocalStorageKeys.REDUCE_MOTION,
|
||||
DEFAULT_SETTINGS.reduceMotion,
|
||||
@ -96,6 +97,7 @@ function AccountDetails(props: Props) {
|
||||
calculateAccountApr(updatedAccount ?? account, borrowAssetsData, lendingAssetsData, prices),
|
||||
[account, borrowAssetsData, lendingAssetsData, prices, updatedAccount],
|
||||
)
|
||||
const isFullWidth = location.pathname.includes('trade') || location.pathname === '/'
|
||||
|
||||
function AccountDetailsHeader() {
|
||||
const onClose = useCallback(() => useStore.setState({ accountDetailsExpanded: false }), [])
|
||||
@ -111,86 +113,94 @@ function AccountDetails(props: Props) {
|
||||
}
|
||||
|
||||
return (
|
||||
<div
|
||||
data-testid='account-details'
|
||||
className={classNames(
|
||||
accountDetailsExpanded ? 'right-4' : '-right-90',
|
||||
'w-110 flex items-start gap-4 absolute top-6',
|
||||
!reduceMotion && 'transition-all duration-300',
|
||||
<>
|
||||
{!isFullWidth && accountDetailsExpanded && (
|
||||
<div
|
||||
className='absolute w-full h-full hover:cursor-pointer z-1'
|
||||
onClick={() => useStore.setState({ accountDetailsExpanded: false })}
|
||||
/>
|
||||
)}
|
||||
>
|
||||
<div
|
||||
data-testid='account-details'
|
||||
className={classNames(
|
||||
'flex flex-wrap min-w-16 w-16 group relative',
|
||||
'border rounded-base border-white/20',
|
||||
'bg-white/5 backdrop-blur-sticky',
|
||||
!reduceMotion && 'transition-colors duration-300',
|
||||
'hover:bg-white/10 hover:cursor-pointer ',
|
||||
accountDetailsExpanded ? 'right-4' : '-right-90',
|
||||
'w-110 flex items-start gap-4 absolute top-6',
|
||||
!reduceMotion && 'transition-all duration-300',
|
||||
)}
|
||||
onClick={() => useStore.setState({ accountDetailsExpanded: !accountDetailsExpanded })}
|
||||
>
|
||||
<div className='flex flex-wrap justify-center w-full py-4'>
|
||||
<HealthGauge
|
||||
health={health}
|
||||
updatedHealth={updatedHealth}
|
||||
healthFactor={healthFactor}
|
||||
updatedHealthFactor={updatedHealthFactor}
|
||||
/>
|
||||
<Text size='2xs' className='mb-0.5 mt-1 w-full text-center text-white/50'>
|
||||
Health
|
||||
</Text>
|
||||
</div>
|
||||
<div className='w-full py-4 border-t border-white/20'>
|
||||
<Text size='2xs' className='mb-0.5 w-full text-center text-white/50 whitespace-nowrap'>
|
||||
Net worth
|
||||
</Text>
|
||||
<DisplayCurrency coin={coin} className='w-full text-center truncate text-2xs ' />
|
||||
</div>
|
||||
<div className='w-full py-4 border-t border-white/20'>
|
||||
<Text size='2xs' className='mb-0.5 w-full text-center text-white/50'>
|
||||
Leverage
|
||||
</Text>
|
||||
<AccountDetailsLeverage
|
||||
leverage={leverage.toNumber() || 1}
|
||||
updatedLeverage={updatedLeverage?.toNumber() || null}
|
||||
/>
|
||||
</div>
|
||||
<div className='w-full py-4 border-t border-white/20'>
|
||||
<Text size='2xs' className='mb-0.5 w-full text-center text-white/50'>
|
||||
APR
|
||||
</Text>
|
||||
<FormattedNumber
|
||||
className={'w-full text-center text-2xs'}
|
||||
amount={apr.toNumber()}
|
||||
options={{ maxDecimals: 2, minDecimals: 2, suffix: '%' }}
|
||||
animate
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
className={classNames(
|
||||
'flex justify-center items-center w-full h-6 opacity-50',
|
||||
!reduceMotion && 'transition-[opacity] duration-300',
|
||||
'absolute -bottom-6',
|
||||
'group-hover:opacity-100',
|
||||
'flex flex-wrap min-w-16 w-16 group/accountdetail relative',
|
||||
'border rounded-base border-white/20',
|
||||
'bg-white/5 backdrop-blur-sticky z-2',
|
||||
!reduceMotion && 'transition-colors duration-300',
|
||||
'hover:bg-white/10 hover:cursor-pointer ',
|
||||
)}
|
||||
onClick={() => useStore.setState({ accountDetailsExpanded: !accountDetailsExpanded })}
|
||||
>
|
||||
{!accountDetailsExpanded && <ThreeDots className='h-1' />}
|
||||
</div>
|
||||
<div className='flex flex-wrap justify-center w-full py-4'>
|
||||
<HealthGauge
|
||||
health={health}
|
||||
updatedHealth={updatedHealth}
|
||||
healthFactor={healthFactor}
|
||||
updatedHealthFactor={updatedHealthFactor}
|
||||
/>
|
||||
<Text size='2xs' className='mb-0.5 mt-1 w-full text-center text-white/50'>
|
||||
Health
|
||||
</Text>
|
||||
</div>
|
||||
<div className='w-full py-4 border-t border-white/20'>
|
||||
<Text size='2xs' className='mb-0.5 w-full text-center text-white/50 whitespace-nowrap'>
|
||||
Net worth
|
||||
</Text>
|
||||
<DisplayCurrency coin={coin} className='w-full text-center truncate text-2xs ' />
|
||||
</div>
|
||||
<div className='w-full py-4 border-t border-white/20'>
|
||||
<Text size='2xs' className='mb-0.5 w-full text-center text-white/50'>
|
||||
Leverage
|
||||
</Text>
|
||||
<AccountDetailsLeverage
|
||||
leverage={leverage.toNumber() || 1}
|
||||
updatedLeverage={updatedLeverage?.toNumber() || null}
|
||||
/>
|
||||
</div>
|
||||
<div className='w-full py-4 border-t border-white/20'>
|
||||
<Text size='2xs' className='mb-0.5 w-full text-center text-white/50'>
|
||||
APR
|
||||
</Text>
|
||||
<FormattedNumber
|
||||
className={'w-full text-center text-2xs'}
|
||||
amount={apr.toNumber()}
|
||||
options={{ maxDecimals: 2, minDecimals: 2, suffix: '%' }}
|
||||
animate
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
className={classNames(
|
||||
'flex justify-center items-center w-full h-6 opacity-50',
|
||||
!reduceMotion && 'transition-[opacity] duration-300',
|
||||
'absolute -bottom-6',
|
||||
'group-hover/accountdetail:opacity-100',
|
||||
)}
|
||||
>
|
||||
{!accountDetailsExpanded && <ThreeDots className='h-1' />}
|
||||
</div>
|
||||
|
||||
{glowElement(!reduceMotion)}
|
||||
{glowElement(!reduceMotion)}
|
||||
</div>
|
||||
<div className='flex w-90 backdrop-blur-sticky z-2'>
|
||||
<Card className='w-90 bg-white/5' title={<AccountDetailsHeader />}>
|
||||
<AccountComposition account={account} />
|
||||
<Text className='w-full px-4 py-2 text-white bg-white/10'>Balances</Text>
|
||||
<AccountBalancesTable
|
||||
account={account}
|
||||
borrowingData={borrowAssetsData}
|
||||
lendingData={lendingAssetsData}
|
||||
hideCard
|
||||
/>
|
||||
</Card>
|
||||
</div>
|
||||
</div>
|
||||
<div className='flex w-90 backdrop-blur-sticky'>
|
||||
<Card className='w-90 bg-white/5' title={<AccountDetailsHeader />}>
|
||||
<AccountComposition account={account} />
|
||||
<Text className='w-full px-4 py-2 text-white bg-white/10'>Balances</Text>
|
||||
<AccountBalancesTable
|
||||
account={account}
|
||||
borrowingData={borrowAssetsData}
|
||||
lendingData={lendingAssetsData}
|
||||
hideCard
|
||||
/>
|
||||
</Card>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ export default function AccountFundFullPage() {
|
||||
const address = useStore((s) => s.address)
|
||||
const accountId = useAccountId()
|
||||
|
||||
const { data: accounts, isLoading } = useAccounts(address)
|
||||
const { data: accounts, isLoading } = useAccounts('default', address)
|
||||
const currentAccount = useCurrentAccount()
|
||||
const [selectedAccountId, setSelectedAccountId] = useState<null | string>(null)
|
||||
|
||||
|
@ -59,7 +59,7 @@ export default function AccountMenuContent() {
|
||||
const performCreateAccount = useCallback(async () => {
|
||||
setShowMenu(false)
|
||||
setIsCreating(true)
|
||||
const accountId = await createAccount()
|
||||
const accountId = await createAccount('default')
|
||||
setIsCreating(false)
|
||||
|
||||
if (accountId) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
import classNames from 'classnames'
|
||||
import { useMemo } from 'react'
|
||||
|
||||
import HealthIcon from 'components/Account/Health/HealthIcon'
|
||||
import HealthTooltip from 'components/Account/Health/HealthTooltip'
|
||||
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
|
||||
import { LocalStorageKeys } from 'constants/localStorageKeys'
|
||||
@ -9,12 +10,15 @@ import useLocalStorage from 'hooks/useLocalStorage'
|
||||
import { getHealthIndicatorColors } from 'utils/healthIndicator'
|
||||
|
||||
interface Props {
|
||||
className?: string
|
||||
hasLabel?: boolean
|
||||
health: number
|
||||
healthFactor: number
|
||||
height?: string
|
||||
iconClassName?: string
|
||||
updatedHealth?: number
|
||||
updatedHealthFactor?: number
|
||||
hasLabel?: boolean
|
||||
className?: string
|
||||
showIcon?: boolean
|
||||
}
|
||||
|
||||
function calculateHealth(health: number): number {
|
||||
@ -36,6 +40,9 @@ export default function HealthBar({
|
||||
healthFactor = 0,
|
||||
updatedHealthFactor = 0,
|
||||
className,
|
||||
height = '4',
|
||||
iconClassName = 'w-5',
|
||||
showIcon = false,
|
||||
}: Props) {
|
||||
const [reduceMotion] = useLocalStorage<boolean>(
|
||||
LocalStorageKeys.REDUCE_MOTION,
|
||||
@ -57,74 +64,97 @@ export default function HealthBar({
|
||||
health={isUpdated ? updatedHealth : health}
|
||||
healthFactor={isUpdated ? updatedHealthFactor : healthFactor}
|
||||
>
|
||||
<div className={classNames('flex w-full', className)}>
|
||||
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' x='0px' y='0px' viewBox='0 0 184 4'>
|
||||
<mask id='healthBarMask'>
|
||||
<path fill='#FFFFFF' d='M0,2c0-1.1,0.9-2,2-2h41.6v4H2C0.9,4,0,3.1,0,2z' />
|
||||
<rect x='46' fill='#FFFFFF' width='47' height='4' />
|
||||
<path fill='#FFFFFF' d='M95.5,0H182c1.1,0,2,0.9,2,2s-0.9,2-2,2H95.5V0z' />
|
||||
</mask>
|
||||
<mask id='backgroundHealthBarMask'>
|
||||
<rect x='62.1' fill='white' width='2.4' height='4' />
|
||||
<rect x='48' fill='white' width='2' height='4' />
|
||||
<rect x='57.3' fill='white' width='2.4' height='4' />
|
||||
<rect x='52.5' fill='white' width='2.4' height='4' />
|
||||
<rect x='66.9' fill='white' width='2.4' height='4' />
|
||||
<rect x='86.1' fill='white' width='2.4' height='4' />
|
||||
<rect x='81.3' fill='white' width='2.4' height='4' />
|
||||
<rect x='71.7' fill='white' width='2.4' height='4' />
|
||||
<rect x='90.9' fill='white' width='2.1' height='4' />
|
||||
<rect x='76.5' fill='white' width='2.4' height='4' />
|
||||
<rect x='119.2' fill='white' width='2.4' height='4' />
|
||||
<rect x='143.2' fill='white' width='2.4' height='4' />
|
||||
<rect x='138.4' fill='white' width='2.4' height='4' />
|
||||
<rect x='133.6' fill='white' width='2.4' height='4' />
|
||||
<rect x='124' fill='white' width='2.4' height='4' />
|
||||
<rect x='100' fill='white' width='2.4' height='4' />
|
||||
<rect x='104.8' fill='white' width='2.4' height='4' />
|
||||
<rect x='109.6' fill='white' width='2.4' height='4' />
|
||||
<rect x='114.4' fill='white' width='2.4' height='4' />
|
||||
<rect x='128.8' fill='white' width='2.4' height='4' />
|
||||
<rect x='172' fill='white' width='2.4' height='4' />
|
||||
<rect x='176.8' fill='white' width='2.4' height='4' />
|
||||
<rect x='95.5' fill='white' width='2.1' height='4' />
|
||||
<path fill='white' d='M182,0h-0.4v4h0.4c1.1,0,2-0.9,2-2S183.1,0,182,0z' />
|
||||
<rect x='162.4' fill='white' width='2.4' height='4' />
|
||||
<rect x='152.8' fill='white' width='2.4' height='4' />
|
||||
<rect x='157.6' fill='white' width='2.4' height='4' />
|
||||
<rect x='167.2' fill='white' width='2.4' height='4' />
|
||||
<rect x='148' fill='white' width='2.4' height='4' />
|
||||
<rect x='17.2' fill='white' width='2.4' height='4' />
|
||||
<rect x='12.4' fill='white' width='2.4' height='4' />
|
||||
<rect x='3.1' fill='white' width='2.1' height='4' />
|
||||
<rect x='7.6' fill='white' width='2.4' height='4' />
|
||||
<rect x='22' fill='white' width='2.4' height='4' />
|
||||
<rect x='41.2' fill='white' width='2.4' height='4' />
|
||||
<rect x='36.4' fill='white' width='2.4' height='4' />
|
||||
<rect x='26.8' fill='white' width='2.4' height='4' />
|
||||
<path fill='white' d='M0.7,0.5C0.3,0.9,0,1.4,0,2s0.3,1.1,0.7,1.5V0.5z' />
|
||||
<rect x='31.6' fill='white' width='2.4' height='4' />
|
||||
</mask>
|
||||
<rect className='fill-white/10' width='184' height='4' mask='url(#healthBarMask)' />
|
||||
<rect
|
||||
className={classNames(backgroundColor, !reduceMotion && 'transition-all duration-500')}
|
||||
width={isUpdated && isIncrease ? updatedWidth : width}
|
||||
height='4'
|
||||
mask={isUpdated ? 'url(#backgroundHealthBarMask)' : 'url(#healthBarMask)'}
|
||||
<>
|
||||
{showIcon && (
|
||||
<HealthIcon
|
||||
health={health}
|
||||
isLoading={healthFactor === 0}
|
||||
className={classNames('mr-2', iconClassName)}
|
||||
colorClass='text-white'
|
||||
/>
|
||||
{isUpdated && (
|
||||
)}
|
||||
<div className={classNames('flex w-full', 'rounded-full overflow-hidden', className)}>
|
||||
<svg
|
||||
version='1.1'
|
||||
xmlns='http://www.w3.org/2000/svg'
|
||||
x='0px'
|
||||
y='0px'
|
||||
viewBox={`0 0 184 ${height}`}
|
||||
>
|
||||
<mask id='healthBarMask'>
|
||||
<rect fill='#FFFFFF' x='46' width='47' height={height} />
|
||||
<rect fill='#FFFFFF' width='43.6' height={height} />
|
||||
<rect fill='#FFFFFF' x='95.5' width='88.5' height={height} />
|
||||
</mask>
|
||||
<mask id='backgroundHealthBarMask'>
|
||||
<rect fill='#FFFFFF' x='0' y='0' width='6.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='8.9' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='13.7' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='18.5' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='23.3' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='28.1' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='32.9' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='37.7' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='42.5' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='47.3' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='52.1' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='56.9' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='61.7' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='66.5' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='71.3' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='76.1' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='80.9' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='85.7' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='90.5' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='95.3' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='100.1' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='104.9' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='109.7' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='114.5' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='119.2' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='124' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='128.8' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='133.6' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='138.4' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='143.2' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='148' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='152.8' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='157.6' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='162.4' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='167.2' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='172' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='176.8' y='0' width='2.4' height='{height}' />
|
||||
<rect fill='#FFFFFF' x='181.6' y='0' width='2.4' height='{height}' />
|
||||
</mask>
|
||||
<rect
|
||||
className={classNames(
|
||||
foreGroundColor,
|
||||
!reduceMotion && 'transition-all duration-500',
|
||||
)}
|
||||
width={isUpdated && !isIncrease ? updatedWidth : width}
|
||||
height='4'
|
||||
className='fill-white/10'
|
||||
width='184'
|
||||
height={height}
|
||||
mask='url(#healthBarMask)'
|
||||
/>
|
||||
)}
|
||||
</svg>
|
||||
</div>
|
||||
<rect
|
||||
className={classNames(
|
||||
backgroundColor,
|
||||
!reduceMotion && 'transition-all duration-500',
|
||||
)}
|
||||
width={isUpdated && isIncrease ? updatedWidth : width}
|
||||
height={height}
|
||||
mask={isUpdated ? 'url(#backgroundHealthBarMask)' : 'url(#healthBarMask)'}
|
||||
/>
|
||||
{isUpdated && (
|
||||
<rect
|
||||
className={classNames(
|
||||
foreGroundColor,
|
||||
!reduceMotion && 'transition-all duration-500',
|
||||
)}
|
||||
width={isUpdated && !isIncrease ? updatedWidth : width}
|
||||
height={height}
|
||||
mask='url(#healthBarMask)'
|
||||
/>
|
||||
)}
|
||||
</svg>
|
||||
</div>
|
||||
</>
|
||||
</HealthTooltip>
|
||||
)
|
||||
}
|
||||
|
@ -16,7 +16,7 @@ export default function HealthIcon(props: Props) {
|
||||
return (
|
||||
<>
|
||||
{!isLoading && health === 0 ? (
|
||||
<ExclamationMarkCircled className='w-5 text-loss animate-pulse' />
|
||||
<ExclamationMarkCircled className={classNames('w-5 text-loss animate-pulse', className)} />
|
||||
) : (
|
||||
<Heart
|
||||
className={classNames(
|
||||
|
@ -7,6 +7,7 @@ import { demagnify } from 'utils/formatters'
|
||||
interface Props {
|
||||
asset: Asset
|
||||
amount: BigNumber
|
||||
isApproximation?: boolean
|
||||
}
|
||||
|
||||
export default function AmountAndValue(props: Props) {
|
||||
@ -15,7 +16,7 @@ export default function AmountAndValue(props: Props) {
|
||||
const isBelowMinAmount = amount < MIN_AMOUNT
|
||||
const displayAmount = isBelowMinAmount ? MIN_AMOUNT : amount
|
||||
return (
|
||||
<div className='flex flex-col gap-[0.5] text-xs'>
|
||||
<div className='flex flex-col gap-[0.5] text-xs text-right'>
|
||||
<FormattedNumber
|
||||
amount={isZero ? 0 : displayAmount}
|
||||
smallerThanThreshold={!isZero && isBelowMinAmount}
|
||||
@ -25,6 +26,7 @@ export default function AmountAndValue(props: Props) {
|
||||
<DisplayCurrency
|
||||
className='justify-end text-xs text-white/50'
|
||||
coin={BNCoin.fromDenomAndBigNumber(props.asset.denom, props.amount)}
|
||||
isApproximation={props.isApproximation}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
34
src/components/AvailableLiquidityMessage.tsx
Normal file
34
src/components/AvailableLiquidityMessage.tsx
Normal file
@ -0,0 +1,34 @@
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import Text from 'components/Text'
|
||||
|
||||
interface Props {
|
||||
availableLiquidity: BigNumber
|
||||
asset: BorrowAsset
|
||||
}
|
||||
|
||||
export default function AvailableLiquidityMessage(props: Props) {
|
||||
const { availableLiquidity, asset } = props
|
||||
return (
|
||||
<div className='flex items-start p-4 bg-white/5'>
|
||||
<div className='flex flex-col gap-2'>
|
||||
<Text size='sm'>Not enough Liquidty!</Text>
|
||||
<Text size='xs' className='text-white/40'>
|
||||
{`This transaction would exceed the amount of ${asset.symbol} currently available for borrowing on Mars.`}
|
||||
</Text>
|
||||
|
||||
<div className='flex gap-1'>
|
||||
<Text size='xs'>Available Liquidity:</Text>
|
||||
<FormattedNumber
|
||||
amount={availableLiquidity.toNumber()}
|
||||
options={{
|
||||
abbreviated: true,
|
||||
decimals: asset.decimals,
|
||||
suffix: ` ${asset.symbol}`,
|
||||
}}
|
||||
className='text-xs text-white/60'
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
@ -17,7 +17,7 @@ export default function BorrowRate(props: Props) {
|
||||
return (
|
||||
<FormattedNumber
|
||||
className='justify-end text-xs'
|
||||
amount={props.borrowRate * 100}
|
||||
amount={props.borrowRate}
|
||||
options={{ minDecimals: 2, maxDecimals: 2, suffix: '%' }}
|
||||
animate
|
||||
/>
|
||||
|
@ -2,7 +2,6 @@ import { useCallback, useEffect } from 'react'
|
||||
|
||||
import Button from 'components/Button'
|
||||
import { Cross } from 'components/Icons'
|
||||
import Text from 'components/Text'
|
||||
|
||||
interface Props {
|
||||
enableKeyPress?: boolean
|
||||
@ -33,13 +32,11 @@ export default function EscButton(props: Props) {
|
||||
return (
|
||||
<Button
|
||||
onClick={props.onClick}
|
||||
leftIcon={<Cross />}
|
||||
leftIcon={<Cross size={16} />}
|
||||
iconClassName='w-3'
|
||||
color='tertiary'
|
||||
className={props.className ? props.className : 'h-3 w-13'}
|
||||
className={props.className ? props.className : 'h-8 w-8'}
|
||||
size='xs'
|
||||
>
|
||||
{!props.hideText && <Text size='2xs'>ESC</Text>}
|
||||
</Button>
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
@ -6,34 +6,42 @@ import Text from 'components/Text'
|
||||
interface Props {
|
||||
checked: boolean
|
||||
onChange: (checked: boolean) => void
|
||||
name: string
|
||||
text?: string
|
||||
}
|
||||
|
||||
export default function Checkbox(props: Props) {
|
||||
return (
|
||||
<label className='flex gap-2 items-center cursor-pointer'>
|
||||
<input
|
||||
onChange={() => props.onChange(props.checked)}
|
||||
checked={props.checked}
|
||||
type='checkbox'
|
||||
className='opacity-0 absolute'
|
||||
/>
|
||||
<div
|
||||
className={classNames(
|
||||
'h-5 w-5 rounded-sm p-0.5',
|
||||
props.checked && 'relative isolate overflow-hidden rounded-sm',
|
||||
props.checked &&
|
||||
'before:content-[" "] before:absolute before:inset-0 before:-z-1 before:rounded-sm before:p-[1px] before:border-glas',
|
||||
props.checked ? 'bg-white/20' : 'border border-white/60',
|
||||
)}
|
||||
<>
|
||||
<label
|
||||
className='flex items-center gap-2 border-white cursor-pointer'
|
||||
htmlFor={`${props.name}-id}`}
|
||||
>
|
||||
{props.checked && <Check />}
|
||||
</div>
|
||||
{props.text && (
|
||||
<Text size='xs' className='text-white/60'>
|
||||
{props.text}
|
||||
</Text>
|
||||
)}
|
||||
</label>
|
||||
<input
|
||||
onChange={() => props.onChange(props.checked)}
|
||||
id={`${props.name}-id`}
|
||||
name={props.name}
|
||||
checked={props.checked}
|
||||
type='checkbox'
|
||||
className='absolute w-0 h-0 opacity-0'
|
||||
/>
|
||||
<div
|
||||
className={classNames(
|
||||
'h-5 w-5 rounded-sm p-0.5',
|
||||
props.checked && 'relative isolate overflow-hidden rounded-sm',
|
||||
props.checked &&
|
||||
'before:content-[" "] before:absolute before:inset-0 before:-z-1 before:rounded-sm before:p-[1px] before:border-glas',
|
||||
props.checked ? 'bg-white/20' : 'border border-white/60',
|
||||
)}
|
||||
>
|
||||
{props.checked && <Check />}
|
||||
</div>
|
||||
{props.text && (
|
||||
<Text size='xs' className='text-white/60'>
|
||||
{props.text}
|
||||
</Text>
|
||||
)}
|
||||
</label>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
38
src/components/DepositCapCell.tsx
Normal file
38
src/components/DepositCapCell.tsx
Normal file
@ -0,0 +1,38 @@
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
import { VAULT_DEPOSIT_BUFFER } from 'constants/vaults'
|
||||
import { getAssetByDenom } from 'utils/assets'
|
||||
|
||||
interface Props {
|
||||
depositCap: DepositCap
|
||||
}
|
||||
|
||||
export default function DepositCapCell(props: Props) {
|
||||
const percent = props.depositCap.used
|
||||
.dividedBy(props.depositCap.max.multipliedBy(VAULT_DEPOSIT_BUFFER))
|
||||
.multipliedBy(100)
|
||||
.integerValue()
|
||||
|
||||
const decimals = getAssetByDenom(props.depositCap.denom)?.decimals ?? 6
|
||||
|
||||
return (
|
||||
<TitleAndSubCell
|
||||
title={
|
||||
<FormattedNumber
|
||||
amount={props.depositCap.max.toNumber()}
|
||||
options={{ minDecimals: 2, abbreviated: true, decimals }}
|
||||
className='text-xs'
|
||||
animate
|
||||
/>
|
||||
}
|
||||
sub={
|
||||
<FormattedNumber
|
||||
amount={percent.toNumber()}
|
||||
options={{ minDecimals: 2, maxDecimals: 2, suffix: '% Filled' }}
|
||||
className='text-xs'
|
||||
animate
|
||||
/>
|
||||
}
|
||||
/>
|
||||
)
|
||||
}
|
@ -19,8 +19,8 @@ export default function DepositCapMessage(props: Props) {
|
||||
return (
|
||||
<div className={classNames('flex items-start', props.className)}>
|
||||
{props.showIcon && <InfoCircle width={26} className='mr-5' />}
|
||||
<div className='flex-col gap-2 flex'>
|
||||
<Text size='sm'>Deposit Cap Reached</Text>
|
||||
<div className='flex flex-col gap-2'>
|
||||
<Text size='sm'>Deposit Cap Reached!</Text>
|
||||
<Text size='xs' className='text-white/40'>{`Unfortunately you're not able to ${
|
||||
props.action
|
||||
} more than the following amount${props.coins.length > 1 ? 's' : ''}:`}</Text>
|
||||
@ -39,7 +39,7 @@ export default function DepositCapMessage(props: Props) {
|
||||
decimals: asset.decimals,
|
||||
suffix: ` ${asset.symbol}`,
|
||||
}}
|
||||
className='text-white/60 text-xs'
|
||||
className='text-xs text-white/60'
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
@ -17,6 +17,7 @@ interface Props {
|
||||
className?: string
|
||||
isApproximation?: boolean
|
||||
parentheses?: boolean
|
||||
showZero?: boolean
|
||||
}
|
||||
|
||||
export default function DisplayCurrency(props: Props) {
|
||||
@ -49,7 +50,7 @@ export default function DisplayCurrency(props: Props) {
|
||||
return coinValue.div(displayPrice).toNumber()
|
||||
}, [displayCurrency, displayCurrencyAsset.decimals, prices, props.coin])
|
||||
|
||||
const isLessThanACent = isUSD && amount < 0.01 && amount > 0
|
||||
const isLessThanACent = (isUSD && amount < 0.01 && amount > 0) || (amount === 0 && props.showZero)
|
||||
const smallerThanPrefix = isLessThanACent ? '< ' : ''
|
||||
|
||||
const prefix = isUSD
|
||||
|
@ -1,3 +1,5 @@
|
||||
import classNames from 'classnames'
|
||||
|
||||
import { ExternalLink } from 'components/Icons'
|
||||
import Text from 'components/Text'
|
||||
import { TextLink } from 'components/TextLink'
|
||||
@ -5,6 +7,7 @@ import { DocURL } from 'types/enums/docURL'
|
||||
|
||||
interface Props {
|
||||
type: DocLinkType
|
||||
className?: string
|
||||
}
|
||||
|
||||
function getData(type: string) {
|
||||
@ -18,12 +21,15 @@ export default function DocsLink(props: Props) {
|
||||
const [intro, linkText, url] = getData(props.type)
|
||||
|
||||
return (
|
||||
<Text size='sm' className='w-full pt-3 text-center text-white/60'>
|
||||
<Text
|
||||
size='sm'
|
||||
className={classNames('w-full pt-3 text-center text-white/60', props.className)}
|
||||
>
|
||||
{`${intro} `}
|
||||
<TextLink
|
||||
href={url}
|
||||
target='_blank'
|
||||
className='ml-1 leading-4 text-white hover:underline'
|
||||
className={classNames('ml-1 leading-4 text-white hover:underline', props.className)}
|
||||
title={linkText}
|
||||
>
|
||||
{linkText}
|
||||
|
@ -2,12 +2,13 @@ import AssetImage from 'components/Asset/AssetImage'
|
||||
import { getAssetByDenom } from 'utils/assets'
|
||||
|
||||
interface Props {
|
||||
vault: VaultMetaData
|
||||
primaryDenom: string
|
||||
secondaryDenom: string
|
||||
}
|
||||
|
||||
export default function VaultLogo(props: Props) {
|
||||
const primaryAsset = getAssetByDenom(props.vault.denoms.primary)
|
||||
const secondaryAsset = getAssetByDenom(props.vault.denoms.secondary)
|
||||
export default function DoubleLogo(props: Props) {
|
||||
const primaryAsset = getAssetByDenom(props.primaryDenom)
|
||||
const secondaryAsset = getAssetByDenom(props.secondaryDenom)
|
||||
|
||||
if (!primaryAsset || !secondaryAsset) return null
|
||||
|
@ -1,10 +1,7 @@
|
||||
import { Row } from '@tanstack/react-table'
|
||||
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import DepositCapCell from 'components/DepositCapCell'
|
||||
import Loading from 'components/Loading'
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
import { VAULT_DEPOSIT_BUFFER } from 'constants/vaults'
|
||||
import { getAssetByDenom } from 'utils/assets'
|
||||
|
||||
export const DEPOSIT_CAP_META = { accessorKey: 'cap', header: 'Deposit Cap' }
|
||||
|
||||
@ -27,31 +24,5 @@ export default function DepositCap(props: Props) {
|
||||
|
||||
if (props.isLoading) return <Loading />
|
||||
|
||||
const percent = vault.cap.used
|
||||
.dividedBy(vault.cap.max.multipliedBy(VAULT_DEPOSIT_BUFFER))
|
||||
.multipliedBy(100)
|
||||
.integerValue()
|
||||
|
||||
const decimals = getAssetByDenom(vault.cap.denom)?.decimals ?? 6
|
||||
|
||||
return (
|
||||
<TitleAndSubCell
|
||||
title={
|
||||
<FormattedNumber
|
||||
amount={vault.cap.max.toNumber()}
|
||||
options={{ minDecimals: 2, abbreviated: true, decimals }}
|
||||
className='text-xs'
|
||||
animate
|
||||
/>
|
||||
}
|
||||
sub={
|
||||
<FormattedNumber
|
||||
amount={percent.toNumber()}
|
||||
options={{ minDecimals: 2, maxDecimals: 2, suffix: '% Filled' }}
|
||||
className='text-xs'
|
||||
animate
|
||||
/>
|
||||
}
|
||||
/>
|
||||
)
|
||||
return <DepositCapCell depositCap={vault.cap} />
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import VaultLogo from 'components/Earn/Farm/VaultLogo'
|
||||
import DoubleLogo from 'components/DoubleLogo'
|
||||
import Text from 'components/Text'
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
import { VaultStatus } from 'types/enums/vault'
|
||||
@ -28,7 +28,7 @@ export default function Name(props: Props) {
|
||||
|
||||
return (
|
||||
<div className='flex'>
|
||||
<VaultLogo vault={vault} />
|
||||
<DoubleLogo primaryDenom={vault.denoms.primary} secondaryDenom={vault.denoms.secondary} />
|
||||
<TitleAndSubCell
|
||||
className='ml-2 mr-2 text-left'
|
||||
title={`${vault.name}${unlockDuration}`}
|
||||
|
@ -1,5 +1,5 @@
|
||||
import ActionButton from 'components/Button/ActionButton'
|
||||
import VaultLogo from 'components/Earn/Farm/VaultLogo'
|
||||
import DoubleLogo from 'components/DoubleLogo'
|
||||
import Text from 'components/Text'
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
import useCurrentAccount from 'hooks/useCurrentAccount'
|
||||
@ -44,7 +44,10 @@ export default function VaultCard(props: Props) {
|
||||
)}
|
||||
</span>
|
||||
</div>
|
||||
<VaultLogo vault={props.vault} />
|
||||
<DoubleLogo
|
||||
primaryDenom={props.vault.denoms.primary}
|
||||
secondaryDenom={props.vault.denoms.secondary}
|
||||
/>
|
||||
</div>
|
||||
<div className='flex justify-between mb-6'>
|
||||
<TitleAndSubCell
|
||||
@ -71,7 +74,7 @@ export default function VaultCard(props: Props) {
|
||||
abbreviated: true,
|
||||
decimals: getAssetByDenom(props.vault.cap.denom)?.decimals,
|
||||
})}
|
||||
sub={'Depo. Cap'}
|
||||
sub={'Deposit Cap'}
|
||||
/>
|
||||
</div>
|
||||
<ActionButton onClick={openVaultModal} color='secondary' text='Deposit' className='w-full' />
|
||||
|
@ -14,7 +14,7 @@ export default function Apr(props: Props) {
|
||||
|
||||
return (
|
||||
<AssetRate
|
||||
rate={convertAprToApy((props.marketLiquidityRate ?? 0) * 100, 365)}
|
||||
rate={convertAprToApy(props.marketLiquidityRate ?? 0, 365)}
|
||||
isEnabled={props.borrowEnabled}
|
||||
className='justify-end text-xs'
|
||||
type='apy'
|
||||
|
@ -7,7 +7,7 @@ import { demagnify } from 'utils/formatters'
|
||||
|
||||
export const DEPOSIT_CAP_META = {
|
||||
accessorKey: 'marketDepositCap',
|
||||
header: 'Depo. Cap',
|
||||
header: 'Deposit Cap',
|
||||
id: 'marketDepositCap',
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Suspense, useMemo } from 'react'
|
||||
|
||||
import { NAME_META } from 'components/Earn/Farm/Table/Columns/Name'
|
||||
import useAvailableColumns from 'components/Earn/Farm/Table/Columns/useAvailableColumns'
|
||||
import { NAME_META } from 'components/HLS/Farm/Table/Columns/Name'
|
||||
import useAvailableColumns from 'components/HLS/Farm/Table/Columns/useAvailableColumns'
|
||||
import Table from 'components/Table'
|
||||
import { ENV } from 'constants/env'
|
||||
import { BN_ZERO } from 'constants/math'
|
||||
@ -38,20 +38,22 @@ function Fallback() {
|
||||
const columns = useAvailableColumns({ isLoading: true })
|
||||
|
||||
const vaults = ENV.NETWORK === NETWORK.TESTNET ? TESTNET_VAULTS_META_DATA : VAULTS_META_DATA
|
||||
const mockVaults: Vault[] = vaults.map((vault) => ({
|
||||
...vault,
|
||||
apy: null,
|
||||
apr: null,
|
||||
ltv: {
|
||||
max: 0,
|
||||
liq: 0,
|
||||
},
|
||||
cap: {
|
||||
denom: 'denom',
|
||||
used: BN_ZERO,
|
||||
max: BN_ZERO,
|
||||
},
|
||||
}))
|
||||
const mockVaults: Vault[] = vaults
|
||||
.filter((v) => v.isHls)
|
||||
.map((vault) => ({
|
||||
...vault,
|
||||
apy: null,
|
||||
apr: null,
|
||||
ltv: {
|
||||
max: 0,
|
||||
liq: 0,
|
||||
},
|
||||
cap: {
|
||||
denom: 'denom',
|
||||
used: BN_ZERO,
|
||||
max: BN_ZERO,
|
||||
},
|
||||
}))
|
||||
return (
|
||||
<Table
|
||||
title={title}
|
||||
|
@ -8,16 +8,18 @@ import Text from 'components/Text'
|
||||
import { LocalStorageKeys } from 'constants/localStorageKeys'
|
||||
import useAlertDialog from 'hooks/useAlertDialog'
|
||||
import useLocalStorage from 'hooks/useLocalStorage'
|
||||
import useStore from 'store'
|
||||
|
||||
export const DEPOSIT_META = { accessorKey: 'deposit', header: 'Deposit' }
|
||||
|
||||
interface Props {
|
||||
vault: Vault
|
||||
isLoading: boolean
|
||||
strategy?: HLSStrategy
|
||||
vault?: Vault
|
||||
}
|
||||
|
||||
export default function Deposit(props: Props) {
|
||||
const { vault } = props
|
||||
const { strategy, vault } = props
|
||||
|
||||
const [showHlsInfo, setShowHlsInfo] = useLocalStorage<boolean>(
|
||||
LocalStorageKeys.HLS_INFORMATION,
|
||||
@ -26,8 +28,17 @@ export default function Deposit(props: Props) {
|
||||
|
||||
const { open: openAlertDialog, close } = useAlertDialog()
|
||||
|
||||
const showHlsInfoModal = useCallback(() => {
|
||||
if (!showHlsInfo) return
|
||||
const openHlsModal = useCallback(
|
||||
() => useStore.setState({ hlsModal: { strategy, vault } }),
|
||||
[strategy, vault],
|
||||
)
|
||||
|
||||
const handleOnClick = useCallback(() => {
|
||||
if (!showHlsInfo) {
|
||||
openHlsModal()
|
||||
return
|
||||
}
|
||||
|
||||
openAlertDialog({
|
||||
title: 'Understanding HLS Positions',
|
||||
content: (
|
||||
@ -53,7 +64,7 @@ export default function Deposit(props: Props) {
|
||||
positiveButton: {
|
||||
text: 'Continue',
|
||||
icon: <Enter />,
|
||||
onClick: enterVaultHandler,
|
||||
onClick: openHlsModal,
|
||||
},
|
||||
negativeButton: {
|
||||
text: 'Cancel',
|
||||
@ -67,18 +78,13 @@ export default function Deposit(props: Props) {
|
||||
onClick: (isChecked: boolean) => setShowHlsInfo(!isChecked),
|
||||
},
|
||||
})
|
||||
}, [close, enterVaultHandler, openAlertDialog, setShowHlsInfo, showHlsInfo])
|
||||
|
||||
function enterVaultHandler() {
|
||||
showHlsInfoModal()
|
||||
return
|
||||
}
|
||||
}, [close, openAlertDialog, openHlsModal, setShowHlsInfo, showHlsInfo])
|
||||
|
||||
if (props.isLoading) return <Loading />
|
||||
|
||||
return (
|
||||
<div className='flex items-center justify-end'>
|
||||
<ActionButton onClick={enterVaultHandler} color='tertiary' text='Deposit' />
|
||||
<ActionButton onClick={handleOnClick} color='tertiary' text='Deposit' />
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ import React from 'react'
|
||||
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
|
||||
export const NAME_META = { id: 'name', accessorKey: 'denoms.primary', header: 'Name' }
|
||||
|
||||
interface Props {
|
||||
strategy: HLSStrategy
|
||||
}
|
||||
|
11
src/components/HLS/HLSTag.tsx
Normal file
11
src/components/HLS/HLSTag.tsx
Normal file
@ -0,0 +1,11 @@
|
||||
import React from 'react'
|
||||
|
||||
import Text from 'components/Text'
|
||||
|
||||
export default function HLSTag() {
|
||||
return (
|
||||
<Text tag='span' className='rounded-sm gradient-hls px-2 font-bold py-0.5 ml-2' size='xs'>
|
||||
HLS
|
||||
</Text>
|
||||
)
|
||||
}
|
24
src/components/HLS/Staking/ActiveStakingAccounts.tsx
Normal file
24
src/components/HLS/Staking/ActiveStakingAccounts.tsx
Normal file
@ -0,0 +1,24 @@
|
||||
import { NAME_META } from 'components/HLS/Farm/Table/Columns/Name'
|
||||
import useDepositedColumns from 'components/HLS/Staking/Table/Columns/useDepositedColumns'
|
||||
import Table from 'components/Table'
|
||||
import useHLSStakingAccounts from 'hooks/useHLSStakingAccounts'
|
||||
import useStore from 'store'
|
||||
|
||||
const title = 'Active Strategies'
|
||||
|
||||
export default function ActiveStakingAccounts() {
|
||||
const address = useStore((s) => s.address)
|
||||
const columns = useDepositedColumns({ isLoading: false })
|
||||
const { data: hlsStakingAccounts } = useHLSStakingAccounts(address)
|
||||
|
||||
if (!hlsStakingAccounts.length) return null
|
||||
|
||||
return (
|
||||
<Table
|
||||
title={title}
|
||||
columns={columns}
|
||||
data={hlsStakingAccounts}
|
||||
initialSorting={[{ id: NAME_META.id, desc: true }]}
|
||||
/>
|
||||
)
|
||||
}
|
@ -1,3 +1,45 @@
|
||||
export default function AvailableHlsStakingAssets() {
|
||||
return null
|
||||
import { Suspense } from 'react'
|
||||
|
||||
import { NAME_META } from 'components/HLS/Farm/Table/Columns/Name'
|
||||
import useAvailableColumns from 'components/HLS/Staking/Table/Columns/useAvailableColumns'
|
||||
import Table from 'components/Table'
|
||||
import useHLSStakingAssets from 'hooks/useHLSStakingAssets'
|
||||
import { getEnabledMarketAssets } from 'utils/assets'
|
||||
|
||||
const title = 'Available Strategies'
|
||||
|
||||
function Content() {
|
||||
const assets = getEnabledMarketAssets()
|
||||
const { data: hlsStrategies } = useHLSStakingAssets()
|
||||
const columns = useAvailableColumns({ isLoading: false })
|
||||
|
||||
return (
|
||||
<Table
|
||||
title={title}
|
||||
columns={columns}
|
||||
data={hlsStrategies}
|
||||
initialSorting={[{ id: NAME_META.id, desc: true }]}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export default function AvailableHlsVaults() {
|
||||
return (
|
||||
<Suspense fallback={<Fallback />}>
|
||||
<Content />
|
||||
</Suspense>
|
||||
)
|
||||
}
|
||||
|
||||
function Fallback() {
|
||||
const columns = useAvailableColumns({ isLoading: true })
|
||||
|
||||
return (
|
||||
<Table
|
||||
title={title}
|
||||
columns={columns}
|
||||
data={[]}
|
||||
initialSorting={[{ id: NAME_META.id, desc: true }]}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
30
src/components/HLS/Staking/Table/Columns/Account.tsx
Normal file
30
src/components/HLS/Staking/Table/Columns/Account.tsx
Normal file
@ -0,0 +1,30 @@
|
||||
import React from 'react'
|
||||
|
||||
import HealthBar from 'components/Account/Health/HealthBar'
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
import useHealthComputer from 'hooks/useHealthComputer'
|
||||
|
||||
export const ACCOUNT_META = { id: 'account', header: 'Account', accessorKey: 'id' }
|
||||
interface Props {
|
||||
account: HLSAccountWithStrategy
|
||||
}
|
||||
|
||||
export default function Name(props: Props) {
|
||||
const { health, healthFactor } = useHealthComputer(props.account)
|
||||
return (
|
||||
<TitleAndSubCell
|
||||
className=''
|
||||
title={`Account ${props.account.id}`}
|
||||
sub={
|
||||
<HealthBar
|
||||
health={health}
|
||||
healthFactor={healthFactor}
|
||||
className=''
|
||||
showIcon
|
||||
height='10'
|
||||
iconClassName='mr-0.5 w-3'
|
||||
/>
|
||||
}
|
||||
/>
|
||||
)
|
||||
}
|
22
src/components/HLS/Staking/Table/Columns/ActiveApy.tsx
Normal file
22
src/components/HLS/Staking/Table/Columns/ActiveApy.tsx
Normal file
@ -0,0 +1,22 @@
|
||||
import { Row } from '@tanstack/react-table'
|
||||
import React from 'react'
|
||||
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
|
||||
export const ACTIVE_APY_META = { header: 'APY', accessorKey: 'strategy' }
|
||||
|
||||
export const activeApySortingFn = (
|
||||
a: Row<HLSAccountWithStrategy>,
|
||||
b: Row<HLSAccountWithStrategy>,
|
||||
): number => {
|
||||
// TODO: Properly implement this
|
||||
return 0
|
||||
}
|
||||
|
||||
interface Props {
|
||||
account: HLSAccountWithStrategy
|
||||
}
|
||||
|
||||
export default function ActiveAPY(props: Props) {
|
||||
return <TitleAndSubCell title={'-'} sub={'-%/day'} />
|
||||
}
|
25
src/components/HLS/Staking/Table/Columns/DebtValue.tsx
Normal file
25
src/components/HLS/Staking/Table/Columns/DebtValue.tsx
Normal file
@ -0,0 +1,25 @@
|
||||
import { Row } from '@tanstack/react-table'
|
||||
|
||||
import DisplayCurrency from 'components/DisplayCurrency'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
|
||||
export const DEBT_VAL_META = { header: 'Debt Value', accessorKey: 'values.debt' }
|
||||
interface Props {
|
||||
account: HLSAccountWithStrategy
|
||||
}
|
||||
|
||||
export function debtValueSorting(
|
||||
a: Row<HLSAccountWithStrategy>,
|
||||
b: Row<HLSAccountWithStrategy>,
|
||||
): number {
|
||||
return a.original.values.debt.minus(b.original.values.debt).toNumber()
|
||||
}
|
||||
|
||||
export default function DebtValue(props: Props) {
|
||||
return (
|
||||
<DisplayCurrency
|
||||
coin={BNCoin.fromDenomAndBigNumber('usd', props.account.values.debt)}
|
||||
className='text-xs'
|
||||
/>
|
||||
)
|
||||
}
|
23
src/components/HLS/Staking/Table/Columns/DepositCap.tsx
Normal file
23
src/components/HLS/Staking/Table/Columns/DepositCap.tsx
Normal file
@ -0,0 +1,23 @@
|
||||
import { Row } from '@tanstack/react-table'
|
||||
import React from 'react'
|
||||
|
||||
import DepositCapCell from 'components/DepositCapCell'
|
||||
|
||||
export const CAP_META = { header: 'Cap', accessorKey: 'strategy.depositCap' }
|
||||
|
||||
export const depositCapSortingFn = (
|
||||
a: Row<HLSAccountWithStrategy>,
|
||||
b: Row<HLSAccountWithStrategy>,
|
||||
): number => {
|
||||
const depositCapA = a.original.strategy.depositCap.max
|
||||
const depositCapB = b.original.strategy.depositCap.max
|
||||
return depositCapA.minus(depositCapB).toNumber()
|
||||
}
|
||||
|
||||
interface Props {
|
||||
account: HLSAccountWithStrategy
|
||||
}
|
||||
|
||||
export default function Name(props: Props) {
|
||||
return <DepositCapCell depositCap={props.account.strategy.depositCap} />
|
||||
}
|
25
src/components/HLS/Staking/Table/Columns/Leverage.tsx
Normal file
25
src/components/HLS/Staking/Table/Columns/Leverage.tsx
Normal file
@ -0,0 +1,25 @@
|
||||
import { Row } from '@tanstack/react-table'
|
||||
import React from 'react'
|
||||
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
|
||||
export const LEV_META = { accessorKey: 'leverage ', header: 'Leverage' }
|
||||
|
||||
interface Props {
|
||||
account: HLSAccountWithStrategy
|
||||
}
|
||||
|
||||
export function leverageSortingFn(a: Row<HLSAccountWithStrategy>, b: Row<HLSAccountWithStrategy>) {
|
||||
return a.original.leverage - b.original.leverage
|
||||
}
|
||||
|
||||
export default function MaxLeverage(props: Props) {
|
||||
return (
|
||||
<FormattedNumber
|
||||
amount={props.account.leverage}
|
||||
options={{ minDecimals: 2, maxDecimals: 2, suffix: 'x' }}
|
||||
className='text-xs'
|
||||
animate
|
||||
/>
|
||||
)
|
||||
}
|
14
src/components/HLS/Staking/Table/Columns/Manage.tsx
Normal file
14
src/components/HLS/Staking/Table/Columns/Manage.tsx
Normal file
@ -0,0 +1,14 @@
|
||||
import React from 'react'
|
||||
|
||||
import Button from 'components/Button'
|
||||
|
||||
export const MANAGE_META = { id: 'manage' }
|
||||
|
||||
interface Props {
|
||||
account: HLSAccountWithStrategy
|
||||
}
|
||||
|
||||
export default function Manage(props: Props) {
|
||||
// TODO: Impelement dropdown
|
||||
return <Button text='Manage' color='tertiary' />
|
||||
}
|
23
src/components/HLS/Staking/Table/Columns/MaxLTV.tsx
Normal file
23
src/components/HLS/Staking/Table/Columns/MaxLTV.tsx
Normal file
@ -0,0 +1,23 @@
|
||||
import React from 'react'
|
||||
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import Loading from 'components/Loading'
|
||||
|
||||
export const LTV_MAX_META = { accessorKey: 'maxLTV', header: 'Max LTV' }
|
||||
|
||||
interface Props {
|
||||
strategy: HLSStrategy
|
||||
isLoading: boolean
|
||||
}
|
||||
export default function MaxLtv(props: Props) {
|
||||
const { strategy } = props
|
||||
if (props.isLoading) return <Loading />
|
||||
return (
|
||||
<FormattedNumber
|
||||
amount={strategy.maxLTV * 100}
|
||||
options={{ minDecimals: 0, maxDecimals: 0, suffix: '%' }}
|
||||
className='text-xs'
|
||||
animate
|
||||
/>
|
||||
)
|
||||
}
|
20
src/components/HLS/Staking/Table/Columns/MaxLeverage.tsx
Normal file
20
src/components/HLS/Staking/Table/Columns/MaxLeverage.tsx
Normal file
@ -0,0 +1,20 @@
|
||||
import React from 'react'
|
||||
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
|
||||
export const MAX_LEV_META = { accessorKey: 'maxLeverage', header: 'Max Leverage' }
|
||||
|
||||
interface Props {
|
||||
strategy: HLSStrategy
|
||||
}
|
||||
|
||||
export default function MaxLeverage(props: Props) {
|
||||
return (
|
||||
<FormattedNumber
|
||||
amount={props.strategy.maxLeverage}
|
||||
options={{ minDecimals: 2, maxDecimals: 2, suffix: 'x' }}
|
||||
className='text-xs'
|
||||
animate
|
||||
/>
|
||||
)
|
||||
}
|
32
src/components/HLS/Staking/Table/Columns/Name.tsx
Normal file
32
src/components/HLS/Staking/Table/Columns/Name.tsx
Normal file
@ -0,0 +1,32 @@
|
||||
import React from 'react'
|
||||
|
||||
import DoubleLogo from 'components/DoubleLogo'
|
||||
import Loading from 'components/Loading'
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
import { getAssetByDenom } from 'utils/assets'
|
||||
|
||||
export const NAME_META = { id: 'name', header: 'Strategy', accessorKey: 'strategy.denoms.deposit' }
|
||||
interface Props {
|
||||
strategy: HLSStrategy
|
||||
}
|
||||
|
||||
export default function Name(props: Props) {
|
||||
const { strategy } = props
|
||||
const depositAsset = getAssetByDenom(props.strategy.denoms.deposit)
|
||||
const borrowAsset = getAssetByDenom(props.strategy.denoms.borrow)
|
||||
|
||||
return (
|
||||
<div className='flex'>
|
||||
<DoubleLogo primaryDenom={strategy.denoms.deposit} secondaryDenom={strategy.denoms.borrow} />
|
||||
{depositAsset && borrowAsset ? (
|
||||
<TitleAndSubCell
|
||||
className='ml-2 mr-2 text-left'
|
||||
title={`${depositAsset.symbol} - ${borrowAsset.symbol}`}
|
||||
sub='Via MARS'
|
||||
/>
|
||||
) : (
|
||||
<Loading />
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
}
|
25
src/components/HLS/Staking/Table/Columns/NetValue.tsx
Normal file
25
src/components/HLS/Staking/Table/Columns/NetValue.tsx
Normal file
@ -0,0 +1,25 @@
|
||||
import { Row } from '@tanstack/react-table'
|
||||
|
||||
import DisplayCurrency from 'components/DisplayCurrency'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
|
||||
export const NET_VAL_META = { header: 'Net Value', accessorKey: 'values.net' }
|
||||
interface Props {
|
||||
account: HLSAccountWithStrategy
|
||||
}
|
||||
|
||||
export function netValueSorting(
|
||||
a: Row<HLSAccountWithStrategy>,
|
||||
b: Row<HLSAccountWithStrategy>,
|
||||
): number {
|
||||
return a.original.values.net.minus(b.original.values.net).toNumber()
|
||||
}
|
||||
|
||||
export default function NetValue(props: Props) {
|
||||
return (
|
||||
<DisplayCurrency
|
||||
coin={BNCoin.fromDenomAndBigNumber('usd', props.account.values.net)}
|
||||
className='text-xs'
|
||||
/>
|
||||
)
|
||||
}
|
25
src/components/HLS/Staking/Table/Columns/PositionValue.tsx
Normal file
25
src/components/HLS/Staking/Table/Columns/PositionValue.tsx
Normal file
@ -0,0 +1,25 @@
|
||||
import { Row } from '@tanstack/react-table'
|
||||
|
||||
import DisplayCurrency from 'components/DisplayCurrency'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
|
||||
export const POS_VAL_META = { header: 'Pos. Value', accessorKey: 'values.total' }
|
||||
interface Props {
|
||||
account: HLSAccountWithStrategy
|
||||
}
|
||||
|
||||
export function positionValueSorting(
|
||||
a: Row<HLSAccountWithStrategy>,
|
||||
b: Row<HLSAccountWithStrategy>,
|
||||
): number {
|
||||
return a.original.values.total.minus(b.original.values.total).toNumber()
|
||||
}
|
||||
|
||||
export default function PositionValue(props: Props) {
|
||||
return (
|
||||
<DisplayCurrency
|
||||
coin={BNCoin.fromDenomAndBigNumber('usd', props.account.values.total)}
|
||||
className='text-xs'
|
||||
/>
|
||||
)
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
import { ColumnDef } from '@tanstack/react-table'
|
||||
import React, { useMemo } from 'react'
|
||||
|
||||
import Deposit, { DEPOSIT_META } from 'components/HLS/Farm/Table/Columns/Deposit'
|
||||
import MaxLeverage, { MAX_LEV_META } from 'components/HLS/Staking/Table/Columns/MaxLeverage'
|
||||
import MaxLTV, { LTV_MAX_META } from 'components/HLS/Staking/Table/Columns/MaxLTV'
|
||||
import Name, { NAME_META } from 'components/HLS/Staking/Table/Columns/Name'
|
||||
|
||||
interface Props {
|
||||
isLoading: boolean
|
||||
}
|
||||
|
||||
export default function useAvailableColumns(props: Props) {
|
||||
return useMemo<ColumnDef<HLSStrategy>[]>(
|
||||
() => [
|
||||
{
|
||||
...NAME_META,
|
||||
cell: ({ row }) => <Name strategy={row.original as HLSStrategy} />,
|
||||
},
|
||||
{
|
||||
...MAX_LEV_META,
|
||||
cell: ({ row }) => <MaxLeverage strategy={row.original} />,
|
||||
},
|
||||
{
|
||||
...LTV_MAX_META,
|
||||
cell: ({ row }) => (
|
||||
<MaxLTV strategy={row.original as HLSStrategy} isLoading={props.isLoading} />
|
||||
),
|
||||
},
|
||||
{
|
||||
...DEPOSIT_META,
|
||||
cell: ({ row }) => (
|
||||
<Deposit strategy={row.original as HLSStrategy} isLoading={props.isLoading} />
|
||||
),
|
||||
},
|
||||
],
|
||||
[props.isLoading],
|
||||
)
|
||||
}
|
@ -0,0 +1,84 @@
|
||||
import { ColumnDef } from '@tanstack/react-table'
|
||||
import React, { useMemo } from 'react'
|
||||
|
||||
import Account, { ACCOUNT_META } from 'components/HLS/Staking/Table/Columns/Account'
|
||||
import ActiveApy, {
|
||||
ACTIVE_APY_META,
|
||||
activeApySortingFn,
|
||||
} from 'components/HLS/Staking/Table/Columns/ActiveApy'
|
||||
import DebtValue, {
|
||||
DEBT_VAL_META,
|
||||
debtValueSorting,
|
||||
} from 'components/HLS/Staking/Table/Columns/DebtValue'
|
||||
import DepositCap, {
|
||||
CAP_META,
|
||||
depositCapSortingFn,
|
||||
} from 'components/HLS/Staking/Table/Columns/DepositCap'
|
||||
import Leverage, {
|
||||
LEV_META,
|
||||
leverageSortingFn,
|
||||
} from 'components/HLS/Staking/Table/Columns/Leverage'
|
||||
import Manage, { MANAGE_META } from 'components/HLS/Staking/Table/Columns/Manage'
|
||||
import Name, { NAME_META } from 'components/HLS/Staking/Table/Columns/Name'
|
||||
import NetValue, {
|
||||
NET_VAL_META,
|
||||
netValueSorting,
|
||||
} from 'components/HLS/Staking/Table/Columns/NetValue'
|
||||
import PositionValue, {
|
||||
POS_VAL_META,
|
||||
positionValueSorting,
|
||||
} from 'components/HLS/Staking/Table/Columns/PositionValue'
|
||||
|
||||
interface Props {
|
||||
isLoading: boolean
|
||||
}
|
||||
|
||||
export default function useDepositedColumns(props: Props) {
|
||||
return useMemo<ColumnDef<HLSAccountWithStrategy>[]>(
|
||||
() => [
|
||||
{
|
||||
...NAME_META,
|
||||
cell: ({ row }) => <Name strategy={row.original.strategy} />,
|
||||
},
|
||||
{
|
||||
...ACCOUNT_META,
|
||||
cell: ({ row }) => <Account account={row.original} />,
|
||||
},
|
||||
{
|
||||
...LEV_META,
|
||||
cell: ({ row }) => <Leverage account={row.original} />,
|
||||
sortingFn: leverageSortingFn,
|
||||
},
|
||||
{
|
||||
...POS_VAL_META,
|
||||
cell: ({ row }) => <PositionValue account={row.original} />,
|
||||
sortingFn: positionValueSorting,
|
||||
},
|
||||
{
|
||||
...NET_VAL_META,
|
||||
cell: ({ row }) => <NetValue account={row.original} />,
|
||||
sortingFn: netValueSorting,
|
||||
},
|
||||
{
|
||||
...DEBT_VAL_META,
|
||||
cell: ({ row }) => <DebtValue account={row.original} />,
|
||||
sortingFn: debtValueSorting,
|
||||
},
|
||||
{
|
||||
...CAP_META,
|
||||
cell: ({ row }) => <DepositCap account={row.original} />,
|
||||
sortingFn: depositCapSortingFn,
|
||||
},
|
||||
{
|
||||
...ACTIVE_APY_META,
|
||||
cell: ({ row }) => <ActiveApy account={row.original} />,
|
||||
sortingFn: activeApySortingFn,
|
||||
},
|
||||
{
|
||||
...MANAGE_META,
|
||||
cell: ({ row }) => <Manage account={row.original} />,
|
||||
},
|
||||
],
|
||||
[],
|
||||
)
|
||||
}
|
@ -3,6 +3,7 @@ import { isDesktop } from 'react-device-detect'
|
||||
|
||||
import AccountMenu from 'components/Account/AccountMenu'
|
||||
import EscButton from 'components/Button/EscButton'
|
||||
import OracleResyncButton from 'components/Header/OracleResyncButton'
|
||||
import DesktopNavigation from 'components/Navigation/DesktopNavigation'
|
||||
import RewardsCenter from 'components/RewardsCenter'
|
||||
import Settings from 'components/Settings'
|
||||
@ -22,6 +23,7 @@ export const menuTree: { pages: Page[]; label: string }[] = [
|
||||
export default function DesktopHeader() {
|
||||
const address = useStore((s) => s.address)
|
||||
const focusComponent = useStore((s) => s.focusComponent)
|
||||
const isOracleStale = useStore((s) => s.isOracleStale)
|
||||
const accountId = useAccountId()
|
||||
|
||||
function handleCloseFocusMode() {
|
||||
@ -46,6 +48,7 @@ export default function DesktopHeader() {
|
||||
)}
|
||||
>
|
||||
<DesktopNavigation />
|
||||
|
||||
{focusComponent ? (
|
||||
<div className='flex justify-between w-full'>
|
||||
<div className='flex h-5 w-13' />
|
||||
@ -54,6 +57,7 @@ export default function DesktopHeader() {
|
||||
</div>
|
||||
) : (
|
||||
<div className='flex gap-4'>
|
||||
{isOracleStale && <OracleResyncButton />}
|
||||
{accountId && <RewardsCenter />}
|
||||
{address && <AccountMenu />}
|
||||
<Wallet />
|
||||
|
30
src/components/Header/OracleResyncButton.tsx
Normal file
30
src/components/Header/OracleResyncButton.tsx
Normal file
@ -0,0 +1,30 @@
|
||||
import { useCallback } from 'react'
|
||||
|
||||
import Button from 'components/Button'
|
||||
import { ExclamationMarkCircled } from 'components/Icons'
|
||||
import { Tooltip } from 'components/Tooltip'
|
||||
import usePricesData from 'hooks/usePriceData'
|
||||
import useStore from 'store'
|
||||
|
||||
export default function OracleResyncButton() {
|
||||
const { data: pricesData } = usePricesData()
|
||||
const updateOracle = useStore((s) => s.updateOracle)
|
||||
|
||||
const updatePythOracle = useCallback(() => updateOracle(pricesData), [pricesData, updateOracle])
|
||||
|
||||
return (
|
||||
<Tooltip
|
||||
type='warning'
|
||||
content='The on-chain Pyth oracle prices are too old/stale. Update them by executing a resync transaction.'
|
||||
hideArrow={true}
|
||||
>
|
||||
<Button
|
||||
leftIcon={<ExclamationMarkCircled className='w-4' />}
|
||||
text='Resync Oracle'
|
||||
className='!text-warning !border-warning hover:bg-warning/20 active:bg-warning/20 focus:bg-warning/20'
|
||||
color='secondary'
|
||||
onClick={updatePythOracle}
|
||||
/>
|
||||
</Tooltip>
|
||||
)
|
||||
}
|
@ -3,7 +3,6 @@ import { ReactNode, useEffect, useRef } from 'react'
|
||||
|
||||
import EscButton from 'components/Button/EscButton'
|
||||
import Card from 'components/Card'
|
||||
import useStore from 'store'
|
||||
|
||||
interface Props {
|
||||
header: string | ReactNode
|
||||
|
@ -43,7 +43,7 @@ function AlertDialog(props: Props) {
|
||||
header={
|
||||
<div className='flex flex-col'>
|
||||
{icon && (
|
||||
<div className='grid w-12 h-12 rounded-sm place-items-center bg-white/5 mb-4'>
|
||||
<div className='grid w-12 h-12 mb-4 rounded-sm place-items-center bg-white/5'>
|
||||
{icon}
|
||||
</div>
|
||||
)}
|
||||
@ -74,7 +74,12 @@ function AlertDialog(props: Props) {
|
||||
/>
|
||||
)}
|
||||
{checkbox && (
|
||||
<Checkbox checked={toggle} onChange={handleCheckboxClick} text={checkbox.text} />
|
||||
<Checkbox
|
||||
name='aleart-toggle'
|
||||
checked={toggle}
|
||||
onChange={handleCheckboxClick}
|
||||
text={checkbox.text}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<Button
|
||||
|
@ -30,11 +30,15 @@ export default function useAssetTableColumns(isBorrow: boolean) {
|
||||
const borrowAsset = row.original.asset as BorrowAsset
|
||||
const showRate = !borrowAsset?.borrowRate
|
||||
const rate = isBorrow ? market?.borrowRate : market?.liquidityRate
|
||||
const apy = convertAprToApy((rate ?? 0) * 100, 365)
|
||||
const apy = convertAprToApy(rate ?? 0, 365)
|
||||
|
||||
return (
|
||||
<div className='flex items-center'>
|
||||
<Checkbox checked={row.getIsSelected()} onChange={row.getToggleSelectedHandler()} />
|
||||
<Checkbox
|
||||
name={`asset-${asset.id.toLowerCase()}`}
|
||||
checked={row.getIsSelected()}
|
||||
onChange={row.getToggleSelectedHandler()}
|
||||
/>
|
||||
<AssetImage asset={asset} size={24} className='ml-4' />
|
||||
<div className='ml-2 text-left'>
|
||||
<Text size='sm' className='mb-0.5 text-white'>
|
||||
|
168
src/components/Modals/HLS/Content/index.tsx
Normal file
168
src/components/Modals/HLS/Content/index.tsx
Normal file
@ -0,0 +1,168 @@
|
||||
import React, { useMemo, useState } from 'react'
|
||||
|
||||
import Accordion from 'components/Accordion'
|
||||
import useStakingController from 'components/Modals/HLS/Content//useStakingController'
|
||||
import useVaultController from 'components/Modals/HLS/Content//useVaultController'
|
||||
import useAccordionItems from 'components/Modals/HLS/Content/useAccordionItems'
|
||||
import { EMPTY_ACCOUNT_HLS } from 'constants/accounts'
|
||||
import useAccounts from 'hooks/useAccounts'
|
||||
import useCurrentWalletBalance from 'hooks/useCurrentWalletBalance'
|
||||
import useIsOpenArray from 'hooks/useIsOpenArray'
|
||||
import useVault from 'hooks/useVault'
|
||||
import useStore from 'store'
|
||||
import { isAccountEmpty } from 'utils/accounts'
|
||||
import { getAssetByDenom } from 'utils/assets'
|
||||
|
||||
interface Props {
|
||||
borrowDenom: string
|
||||
collateralDenom: string
|
||||
vaultAddress: string | null
|
||||
}
|
||||
|
||||
export default function Controller(props: Props) {
|
||||
const collateralAsset = getAssetByDenom(props.collateralDenom)
|
||||
const borrowAsset = getAssetByDenom(props.borrowDenom)
|
||||
const [selectedAccount, setSelectedAccount] = useState<Account>(EMPTY_ACCOUNT_HLS)
|
||||
const [isOpen, toggleIsOpen] = useIsOpenArray(4, false)
|
||||
const address = useStore((s) => s.address)
|
||||
const { data: hlsAccounts } = useAccounts('high_levered_strategy', address)
|
||||
const emptyHlsAccounts = useMemo(
|
||||
() => hlsAccounts.filter((account) => isAccountEmpty(account)),
|
||||
[hlsAccounts],
|
||||
)
|
||||
const walletCollateralAsset = useCurrentWalletBalance(props.collateralDenom)
|
||||
const vault = useVault(props.vaultAddress || '')
|
||||
|
||||
if (!collateralAsset || !borrowAsset) return null
|
||||
|
||||
if (vault)
|
||||
return (
|
||||
<Vault
|
||||
walletCollateralAsset={walletCollateralAsset}
|
||||
vault={vault}
|
||||
collateralAsset={collateralAsset}
|
||||
borrowAsset={borrowAsset}
|
||||
emptyHlsAccounts={emptyHlsAccounts}
|
||||
hlsAccounts={hlsAccounts}
|
||||
isOpen={isOpen}
|
||||
selectedAccount={selectedAccount}
|
||||
setSelectedAccount={setSelectedAccount}
|
||||
toggleIsOpen={toggleIsOpen}
|
||||
/>
|
||||
)
|
||||
|
||||
return (
|
||||
<StakingContent
|
||||
walletCollateralAsset={walletCollateralAsset}
|
||||
collateralAsset={collateralAsset}
|
||||
borrowAsset={borrowAsset}
|
||||
emptyHlsAccounts={emptyHlsAccounts}
|
||||
hlsAccounts={hlsAccounts}
|
||||
isOpen={isOpen}
|
||||
selectedAccount={selectedAccount}
|
||||
setSelectedAccount={setSelectedAccount}
|
||||
toggleIsOpen={toggleIsOpen}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
interface ContentProps {
|
||||
borrowAsset: Asset
|
||||
collateralAsset: Asset
|
||||
emptyHlsAccounts: Account[]
|
||||
hlsAccounts: Account[]
|
||||
isOpen: boolean[]
|
||||
selectedAccount: Account
|
||||
setSelectedAccount: (account: Account) => void
|
||||
toggleIsOpen: (index: number) => void
|
||||
walletCollateralAsset: Coin | undefined
|
||||
}
|
||||
|
||||
interface VaultContentProps extends ContentProps {
|
||||
vault: Vault
|
||||
}
|
||||
|
||||
function Vault(props: VaultContentProps) {
|
||||
const {
|
||||
borrowAmount,
|
||||
depositAmount,
|
||||
execute,
|
||||
leverage,
|
||||
maxBorrowAmount,
|
||||
onChangeCollateral,
|
||||
onChangeDebt,
|
||||
positionValue,
|
||||
updatedAccount,
|
||||
} = useVaultController({
|
||||
vault: props.vault,
|
||||
collateralAsset: props.collateralAsset,
|
||||
borrowAsset: props.borrowAsset,
|
||||
selectedAccount: props.selectedAccount,
|
||||
})
|
||||
|
||||
const items = useAccordionItems({
|
||||
apy: props.vault.apy || 0,
|
||||
borrowAmount,
|
||||
borrowAsset: props.borrowAsset,
|
||||
collateralAsset: props.collateralAsset,
|
||||
depositAmount,
|
||||
emptyHlsAccounts: props.emptyHlsAccounts,
|
||||
execute,
|
||||
hlsAccounts: props.hlsAccounts,
|
||||
isOpen: props.isOpen,
|
||||
leverage,
|
||||
maxBorrowAmount,
|
||||
onChangeCollateral,
|
||||
onChangeDebt,
|
||||
positionValue,
|
||||
selectedAccount: props.selectedAccount,
|
||||
setSelectedAccount: props.setSelectedAccount,
|
||||
toggleIsOpen: props.toggleIsOpen,
|
||||
updatedAccount,
|
||||
walletCollateralAsset: props.walletCollateralAsset,
|
||||
})
|
||||
|
||||
return <Accordion className='h-[546px] overflow-y-scroll scrollbar-hide' items={items} />
|
||||
}
|
||||
|
||||
function StakingContent(props: ContentProps) {
|
||||
const {
|
||||
depositAmount,
|
||||
onChangeCollateral,
|
||||
updatedAccount,
|
||||
borrowAmount,
|
||||
onChangeDebt,
|
||||
leverage,
|
||||
maxBorrowAmount,
|
||||
positionValue,
|
||||
execute,
|
||||
} = useStakingController({
|
||||
collateralAsset: props.collateralAsset,
|
||||
borrowAsset: props.borrowAsset,
|
||||
selectedAccount: props.selectedAccount,
|
||||
})
|
||||
|
||||
const items = useAccordionItems({
|
||||
borrowAmount,
|
||||
borrowAsset: props.borrowAsset,
|
||||
collateralAsset: props.collateralAsset,
|
||||
depositAmount,
|
||||
emptyHlsAccounts: props.emptyHlsAccounts,
|
||||
execute,
|
||||
hlsAccounts: props.hlsAccounts,
|
||||
isOpen: props.isOpen,
|
||||
leverage,
|
||||
onChangeCollateral,
|
||||
onChangeDebt,
|
||||
positionValue,
|
||||
selectedAccount: props.selectedAccount,
|
||||
setSelectedAccount: props.setSelectedAccount,
|
||||
toggleIsOpen: props.toggleIsOpen,
|
||||
updatedAccount,
|
||||
maxBorrowAmount,
|
||||
apy: 0, // TODO: Implement APY
|
||||
walletCollateralAsset: props.walletCollateralAsset,
|
||||
})
|
||||
|
||||
return <Accordion className='h-[546px] overflow-y-scroll scrollbar-hide' items={items} />
|
||||
}
|
128
src/components/Modals/HLS/Content/useAccordionItems.tsx
Normal file
128
src/components/Modals/HLS/Content/useAccordionItems.tsx
Normal file
@ -0,0 +1,128 @@
|
||||
import React, { useMemo } from 'react'
|
||||
|
||||
import CreateAccount from 'components/Modals/HLS/CreateAccount'
|
||||
import Leverage from 'components/Modals/HLS/Leverage'
|
||||
import ProvideCollateral from 'components/Modals/HLS/ProvideCollateral'
|
||||
import SelectAccount from 'components/Modals/HLS/SelectAccount'
|
||||
import { CollateralSubTitle, LeverageSubTitle, SubTitle } from 'components/Modals/HLS/SubTitles'
|
||||
import Summary from 'components/Modals/HLS/Summary'
|
||||
import { BN } from 'utils/helpers'
|
||||
|
||||
interface Props {
|
||||
apy: number
|
||||
borrowAmount: BigNumber
|
||||
borrowAsset: Asset
|
||||
collateralAsset: Asset
|
||||
depositAmount: BigNumber
|
||||
emptyHlsAccounts: Account[]
|
||||
execute: () => void
|
||||
hlsAccounts: Account[]
|
||||
isOpen: boolean[]
|
||||
leverage: number
|
||||
maxBorrowAmount: BigNumber
|
||||
onChangeCollateral: (amount: BigNumber) => void
|
||||
onChangeDebt: (amount: BigNumber) => void
|
||||
positionValue: BigNumber
|
||||
selectedAccount: Account | null
|
||||
setSelectedAccount: (account: Account) => void
|
||||
toggleIsOpen: (index: number) => void
|
||||
updatedAccount: Account | undefined
|
||||
walletCollateralAsset: Coin | undefined
|
||||
}
|
||||
|
||||
export default function useAccordionItems(props: Props) {
|
||||
return useMemo(() => {
|
||||
return [
|
||||
{
|
||||
title: 'Provide Collateral',
|
||||
renderContent: () => (
|
||||
<ProvideCollateral
|
||||
amount={props.depositAmount}
|
||||
onChangeAmount={props.onChangeCollateral}
|
||||
asset={props.collateralAsset}
|
||||
onClickBtn={() => props.toggleIsOpen(1)}
|
||||
// TODO: Add check for deposit cap
|
||||
max={BN(props.walletCollateralAsset?.amount || 0)}
|
||||
/>
|
||||
),
|
||||
renderSubTitle: () => (
|
||||
<CollateralSubTitle
|
||||
isOpen={props.isOpen[0]}
|
||||
amount={props.depositAmount}
|
||||
denom={props.collateralAsset.denom}
|
||||
/>
|
||||
),
|
||||
isOpen: props.isOpen[0],
|
||||
|
||||
toggleOpen: props.toggleIsOpen,
|
||||
},
|
||||
{
|
||||
title: 'Leverage',
|
||||
renderContent: () => (
|
||||
<Leverage
|
||||
amount={props.borrowAmount}
|
||||
asset={props.borrowAsset}
|
||||
onChangeAmount={props.onChangeDebt}
|
||||
onClickBtn={() => props.toggleIsOpen(2)}
|
||||
max={props.maxBorrowAmount}
|
||||
positionValue={props.positionValue}
|
||||
/>
|
||||
),
|
||||
renderSubTitle: () => (
|
||||
<LeverageSubTitle
|
||||
leverage={props.leverage}
|
||||
isOpen={props.isOpen[1]}
|
||||
positionValue={props.positionValue}
|
||||
/>
|
||||
),
|
||||
isOpen: props.isOpen[1],
|
||||
toggleOpen: props.toggleIsOpen,
|
||||
},
|
||||
...[
|
||||
props.emptyHlsAccounts.length > 0
|
||||
? {
|
||||
title: 'Select HLS Account',
|
||||
renderContent: () => (
|
||||
<SelectAccount
|
||||
selectedAccount={props.selectedAccount}
|
||||
onChangeSelected={props.setSelectedAccount}
|
||||
hlsAccounts={props.emptyHlsAccounts}
|
||||
onClickBtn={() => props.toggleIsOpen(3)}
|
||||
/>
|
||||
),
|
||||
renderSubTitle: () =>
|
||||
props.selectedAccount && !props.isOpen[2] ? (
|
||||
<SubTitle text={`Account ${props.selectedAccount.id}`} />
|
||||
) : null,
|
||||
isOpen: props.isOpen[2],
|
||||
toggleOpen: props.toggleIsOpen,
|
||||
}
|
||||
: {
|
||||
title: 'Create HLS Account',
|
||||
renderContent: () => <CreateAccount />,
|
||||
renderSubTitle: () => null,
|
||||
isOpen: props.isOpen[2],
|
||||
toggleOpen: props.toggleIsOpen,
|
||||
},
|
||||
],
|
||||
{
|
||||
title: 'Summary',
|
||||
renderContent: () => (
|
||||
<Summary
|
||||
depositAmount={props.depositAmount}
|
||||
borrowAmount={props.borrowAmount}
|
||||
leverage={props.leverage}
|
||||
positionValue={props.positionValue}
|
||||
collateralAsset={props.collateralAsset}
|
||||
borrowAsset={props.borrowAsset}
|
||||
apy={props.apy}
|
||||
onClickBtn={props.execute}
|
||||
/>
|
||||
),
|
||||
renderSubTitle: () => null,
|
||||
isOpen: props.isOpen[3],
|
||||
toggleOpen: props.toggleIsOpen,
|
||||
},
|
||||
]
|
||||
}, [props])
|
||||
}
|
116
src/components/Modals/HLS/Content/useStakingController.tsx
Normal file
116
src/components/Modals/HLS/Content/useStakingController.tsx
Normal file
@ -0,0 +1,116 @@
|
||||
import { useCallback, useMemo } from 'react'
|
||||
|
||||
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
|
||||
import { LocalStorageKeys } from 'constants/localStorageKeys'
|
||||
import useDepositHlsVault from 'hooks/useDepositHlsVault'
|
||||
import useHealthComputer from 'hooks/useHealthComputer'
|
||||
import useLocalStorage from 'hooks/useLocalStorage'
|
||||
import { useUpdatedAccount } from 'hooks/useUpdatedAccount'
|
||||
import useStore from 'store'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
import { Action } from 'types/generated/mars-credit-manager/MarsCreditManager.types'
|
||||
|
||||
interface Props {
|
||||
borrowAsset: Asset
|
||||
collateralAsset: Asset
|
||||
selectedAccount: Account
|
||||
}
|
||||
|
||||
export default function useVaultController(props: Props) {
|
||||
const { collateralAsset, borrowAsset, selectedAccount } = props
|
||||
const [slippage] = useLocalStorage<number>(LocalStorageKeys.SLIPPAGE, DEFAULT_SETTINGS.slippage)
|
||||
const addToStakingStrategy = useStore((s) => s.addToStakingStrategy)
|
||||
|
||||
const {
|
||||
leverage,
|
||||
setDepositAmount,
|
||||
depositAmount,
|
||||
setBorrowAmount,
|
||||
borrowAmount,
|
||||
positionValue,
|
||||
} = useDepositHlsVault({
|
||||
collateralDenom: collateralAsset.denom,
|
||||
borrowDenom: borrowAsset.denom,
|
||||
})
|
||||
|
||||
const depositCoin = useMemo(
|
||||
() => BNCoin.fromDenomAndBigNumber(collateralAsset.denom, depositAmount),
|
||||
[collateralAsset.denom, depositAmount],
|
||||
)
|
||||
|
||||
const borrowCoin = useMemo(
|
||||
() => BNCoin.fromDenomAndBigNumber(borrowAsset.denom, borrowAmount),
|
||||
[borrowAsset.denom, borrowAmount],
|
||||
)
|
||||
|
||||
const actions: Action[] = useMemo(
|
||||
() => [
|
||||
{
|
||||
deposit: depositCoin.toCoin(),
|
||||
},
|
||||
{
|
||||
borrow: borrowCoin.toCoin(),
|
||||
},
|
||||
{
|
||||
swap_exact_in: {
|
||||
denom_out: collateralAsset.denom,
|
||||
slippage: slippage.toString(),
|
||||
coin_in: BNCoin.fromDenomAndBigNumber(borrowAsset.denom, borrowAmount).toActionCoin(),
|
||||
},
|
||||
},
|
||||
],
|
||||
[borrowAmount, borrowAsset.denom, borrowCoin, collateralAsset.denom, depositCoin, slippage],
|
||||
)
|
||||
|
||||
const { updatedAccount, addDeposits } = useUpdatedAccount(selectedAccount)
|
||||
const { computeMaxBorrowAmount } = useHealthComputer(updatedAccount)
|
||||
|
||||
const maxBorrowAmount = useMemo(() => {
|
||||
// TODO: Perhaps we need a specific target for this -> target = swap
|
||||
return computeMaxBorrowAmount(props.borrowAsset.denom, 'deposit')
|
||||
}, [computeMaxBorrowAmount, props.borrowAsset.denom])
|
||||
|
||||
const execute = useCallback(() => {
|
||||
addToStakingStrategy({
|
||||
actions,
|
||||
accountId: selectedAccount.id,
|
||||
borrowCoin: BNCoin.fromDenomAndBigNumber(borrowAsset.denom, borrowAmount),
|
||||
depositCoin: BNCoin.fromDenomAndBigNumber(collateralAsset.denom, depositAmount),
|
||||
})
|
||||
}, [
|
||||
actions,
|
||||
addToStakingStrategy,
|
||||
borrowAmount,
|
||||
borrowAsset.denom,
|
||||
collateralAsset.denom,
|
||||
depositAmount,
|
||||
selectedAccount.id,
|
||||
])
|
||||
|
||||
const onChangeCollateral = useCallback(
|
||||
(amount: BigNumber) => {
|
||||
setDepositAmount(amount)
|
||||
addDeposits([BNCoin.fromDenomAndBigNumber(collateralAsset.denom, amount)])
|
||||
},
|
||||
[addDeposits, collateralAsset.denom, setDepositAmount],
|
||||
)
|
||||
|
||||
const onChangeDebt = useCallback(
|
||||
(amount: BigNumber) => {
|
||||
setBorrowAmount(amount)
|
||||
},
|
||||
[setBorrowAmount],
|
||||
)
|
||||
|
||||
return {
|
||||
borrowAmount,
|
||||
depositAmount,
|
||||
execute,
|
||||
leverage,
|
||||
maxBorrowAmount,
|
||||
onChangeCollateral,
|
||||
onChangeDebt,
|
||||
positionValue,
|
||||
updatedAccount,
|
||||
}
|
||||
}
|
128
src/components/Modals/HLS/Content/useVaultController.tsx
Normal file
128
src/components/Modals/HLS/Content/useVaultController.tsx
Normal file
@ -0,0 +1,128 @@
|
||||
import { useCallback, useMemo } from 'react'
|
||||
|
||||
import useDepositVault from 'hooks/broadcast/useDepositVault'
|
||||
import useDepositHlsVault from 'hooks/useDepositHlsVault'
|
||||
import useHealthComputer from 'hooks/useHealthComputer'
|
||||
import { useUpdatedAccount } from 'hooks/useUpdatedAccount'
|
||||
import useStore from 'store'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
|
||||
interface Props {
|
||||
borrowAsset: Asset
|
||||
collateralAsset: Asset
|
||||
selectedAccount: Account
|
||||
vault: Vault
|
||||
}
|
||||
|
||||
export default function useVaultController(props: Props) {
|
||||
const { vault, collateralAsset, borrowAsset, selectedAccount } = props
|
||||
|
||||
const depositIntoVault = useStore((s) => s.depositIntoVault)
|
||||
|
||||
const {
|
||||
leverage,
|
||||
setDepositAmount,
|
||||
depositAmount,
|
||||
setBorrowAmount,
|
||||
borrowAmount,
|
||||
positionValue,
|
||||
} = useDepositHlsVault({
|
||||
collateralDenom: collateralAsset.denom,
|
||||
borrowDenom: borrowAsset.denom,
|
||||
})
|
||||
|
||||
const { actions } = useDepositVault({
|
||||
vault,
|
||||
reclaims: [],
|
||||
deposits: [BNCoin.fromDenomAndBigNumber(collateralAsset.denom, depositAmount)],
|
||||
borrowings: [BNCoin.fromDenomAndBigNumber(borrowAsset.denom, borrowAmount)],
|
||||
kind: 'high_levered_strategy',
|
||||
})
|
||||
|
||||
const { updatedAccount, simulateVaultDeposit } = useUpdatedAccount(selectedAccount)
|
||||
const { computeMaxBorrowAmount } = useHealthComputer(updatedAccount)
|
||||
|
||||
const maxBorrowAmount = useMemo(
|
||||
// TODO: Check that the amount is actually the HLS amount
|
||||
// TODO: Add check for market liquidity
|
||||
// TODO: Add check for deposit cap
|
||||
() => {
|
||||
return computeMaxBorrowAmount(props.borrowAsset.denom, {
|
||||
vault: { address: props.vault?.address },
|
||||
}).plus(borrowAmount)
|
||||
},
|
||||
[borrowAmount, computeMaxBorrowAmount, props.borrowAsset.denom, props.vault?.address],
|
||||
)
|
||||
|
||||
const execute = useCallback(() => {
|
||||
depositIntoVault({
|
||||
accountId: selectedAccount.id,
|
||||
actions,
|
||||
deposits: [BNCoin.fromDenomAndBigNumber(collateralAsset.denom, depositAmount)],
|
||||
borrowings: [BNCoin.fromDenomAndBigNumber(borrowAsset.denom, borrowAmount)],
|
||||
isCreate: true,
|
||||
kind: 'high_levered_strategy',
|
||||
})
|
||||
useStore.setState({ hlsModal: null })
|
||||
}, [
|
||||
actions,
|
||||
borrowAmount,
|
||||
depositAmount,
|
||||
depositIntoVault,
|
||||
borrowAsset.denom,
|
||||
collateralAsset.denom,
|
||||
selectedAccount.id,
|
||||
])
|
||||
|
||||
const onChangeCollateral = useCallback(
|
||||
(amount: BigNumber) => {
|
||||
setDepositAmount(amount)
|
||||
|
||||
simulateVaultDeposit(
|
||||
vault.address,
|
||||
[BNCoin.fromDenomAndBigNumber(collateralAsset.denom, amount)],
|
||||
[BNCoin.fromDenomAndBigNumber(borrowAsset.denom, borrowAmount)],
|
||||
)
|
||||
},
|
||||
[
|
||||
borrowAmount,
|
||||
borrowAsset,
|
||||
collateralAsset,
|
||||
vault.address,
|
||||
setDepositAmount,
|
||||
simulateVaultDeposit,
|
||||
],
|
||||
)
|
||||
|
||||
const onChangeDebt = useCallback(
|
||||
(amount: BigNumber) => {
|
||||
setBorrowAmount(amount)
|
||||
|
||||
simulateVaultDeposit(
|
||||
vault.address,
|
||||
[BNCoin.fromDenomAndBigNumber(collateralAsset.denom, depositAmount)],
|
||||
[BNCoin.fromDenomAndBigNumber(borrowAsset.denom, amount)],
|
||||
)
|
||||
},
|
||||
[
|
||||
borrowAsset,
|
||||
collateralAsset,
|
||||
depositAmount,
|
||||
vault.address,
|
||||
setBorrowAmount,
|
||||
simulateVaultDeposit,
|
||||
],
|
||||
)
|
||||
|
||||
return {
|
||||
borrowAmount,
|
||||
depositAmount,
|
||||
execute,
|
||||
leverage,
|
||||
maxBorrowAmount,
|
||||
onChangeCollateral,
|
||||
onChangeDebt,
|
||||
positionValue,
|
||||
updatedAccount,
|
||||
}
|
||||
}
|
43
src/components/Modals/HLS/CreateAccount.tsx
Normal file
43
src/components/Modals/HLS/CreateAccount.tsx
Normal file
@ -0,0 +1,43 @@
|
||||
import React, { useState } from 'react'
|
||||
import { mutate } from 'swr'
|
||||
|
||||
import Button from 'components/Button'
|
||||
import DocsLink from 'components/DocsLink'
|
||||
import { ArrowRight } from 'components/Icons'
|
||||
import Text from 'components/Text'
|
||||
import useStore from 'store'
|
||||
|
||||
export default function CreateAccount() {
|
||||
const createAccount = useStore((s) => s.createAccount)
|
||||
|
||||
const [isTxPending, setIsTxPending] = useState(false)
|
||||
|
||||
async function handleBtnClick() {
|
||||
setIsTxPending(true)
|
||||
const response = await createAccount('high_levered_strategy')
|
||||
|
||||
if (response === null) {
|
||||
setIsTxPending(false)
|
||||
return
|
||||
}
|
||||
await mutate('accounts/high_levered_strategy')
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='p-4 flex-col flex'>
|
||||
<Text size='sm' className='text-white/50 mb-4 mt-2'>
|
||||
Creating a HLS position mandates the creation of a, single-use HLS account. This account is
|
||||
deleted once you close your position.
|
||||
</Text>
|
||||
<Button
|
||||
onClick={handleBtnClick}
|
||||
text='Approve Transaction'
|
||||
rightIcon={<ArrowRight />}
|
||||
showProgressIndicator={isTxPending}
|
||||
disabled={isTxPending}
|
||||
className='mb-2'
|
||||
/>
|
||||
<DocsLink className='text-xs' type='account' />
|
||||
</div>
|
||||
)
|
||||
}
|
26
src/components/Modals/HLS/Header.tsx
Normal file
26
src/components/Modals/HLS/Header.tsx
Normal file
@ -0,0 +1,26 @@
|
||||
import React from 'react'
|
||||
|
||||
import DoubleLogo from 'components/DoubleLogo'
|
||||
import HLSTag from 'components/HLS/HLSTag'
|
||||
import Text from 'components/Text'
|
||||
import { getAssetByDenom } from 'utils/assets'
|
||||
|
||||
interface Props {
|
||||
primaryDenom: string
|
||||
secondaryDenom: string
|
||||
}
|
||||
|
||||
export default function Header(props: Props) {
|
||||
const primaryAsset = getAssetByDenom(props.primaryDenom)
|
||||
const secondaryAsset = getAssetByDenom(props.secondaryDenom)
|
||||
|
||||
if (!primaryAsset || !secondaryAsset) return null
|
||||
|
||||
return (
|
||||
<div className='flex items-center gap-2'>
|
||||
<DoubleLogo primaryDenom={props.primaryDenom} secondaryDenom={props.secondaryDenom} />
|
||||
<Text>{`${primaryAsset.symbol} - ${secondaryAsset.symbol}`}</Text>
|
||||
<HLSTag />
|
||||
</div>
|
||||
)
|
||||
}
|
31
src/components/Modals/HLS/Leverage.tsx
Normal file
31
src/components/Modals/HLS/Leverage.tsx
Normal file
@ -0,0 +1,31 @@
|
||||
import React from 'react'
|
||||
|
||||
import Button from 'components/Button'
|
||||
import { ArrowRight } from 'components/Icons'
|
||||
import LeverageSummary from 'components/Modals/HLS/LeverageSummary'
|
||||
import TokenInputWithSlider from 'components/TokenInput/TokenInputWithSlider'
|
||||
|
||||
interface Props {
|
||||
amount: BigNumber
|
||||
asset: Asset
|
||||
max: BigNumber
|
||||
onChangeAmount: (amount: BigNumber) => void
|
||||
onClickBtn: () => void
|
||||
positionValue: BigNumber
|
||||
}
|
||||
|
||||
export default function Leverage(props: Props) {
|
||||
return (
|
||||
<div className='p-4 flex-col gap-6 flex'>
|
||||
<TokenInputWithSlider
|
||||
amount={props.amount}
|
||||
asset={props.asset}
|
||||
max={props.max}
|
||||
onChange={props.onChangeAmount}
|
||||
maxText='Max borrow'
|
||||
/>
|
||||
<LeverageSummary asset={props.asset} positionValue={props.positionValue} />
|
||||
<Button onClick={props.onClickBtn} text='Continue' rightIcon={<ArrowRight />} />
|
||||
</div>
|
||||
)
|
||||
}
|
50
src/components/Modals/HLS/LeverageSummary.tsx
Normal file
50
src/components/Modals/HLS/LeverageSummary.tsx
Normal file
@ -0,0 +1,50 @@
|
||||
import React, { useMemo } from 'react'
|
||||
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import Text from 'components/Text'
|
||||
import useBorrowAsset from 'hooks/useBorrowAsset'
|
||||
|
||||
interface Props {
|
||||
asset: Asset
|
||||
positionValue: BigNumber
|
||||
}
|
||||
|
||||
export default function LeverageSummary(props: Props) {
|
||||
const borrowAsset = useBorrowAsset(props.asset.denom)
|
||||
|
||||
const items: { title: string; amount: number; options: FormatOptions }[] = useMemo(() => {
|
||||
return [
|
||||
// TODO: Get APY numbers
|
||||
{
|
||||
title: 'APY',
|
||||
amount: 0,
|
||||
options: { suffix: '%', minDecimals: 1, maxDecimals: 1 },
|
||||
},
|
||||
{
|
||||
title: `Borrow APR ${props.asset.symbol}`,
|
||||
amount: borrowAsset?.borrowRate || 0,
|
||||
options: { suffix: '%', minDecimals: 2, maxDecimals: 2 },
|
||||
},
|
||||
{
|
||||
title: 'Total Position Size',
|
||||
amount: props.positionValue.toNumber(),
|
||||
options: { prefix: '$' },
|
||||
},
|
||||
]
|
||||
}, [borrowAsset?.borrowRate, props.asset.symbol, props.positionValue])
|
||||
|
||||
return (
|
||||
<div className='grid grid-cols-2 gap-2'>
|
||||
{items.map((item) => (
|
||||
<React.Fragment key={item.title}>
|
||||
<Text className='text-white/60 text-xs'>{item.title}</Text>
|
||||
<FormattedNumber
|
||||
className='place-self-end text-xs'
|
||||
amount={item.amount}
|
||||
options={item.options}
|
||||
/>
|
||||
</React.Fragment>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
28
src/components/Modals/HLS/ProvideCollateral.tsx
Normal file
28
src/components/Modals/HLS/ProvideCollateral.tsx
Normal file
@ -0,0 +1,28 @@
|
||||
import React from 'react'
|
||||
|
||||
import Button from 'components/Button'
|
||||
import { ArrowRight } from 'components/Icons'
|
||||
import TokenInputWithSlider from 'components/TokenInput/TokenInputWithSlider'
|
||||
|
||||
interface Props {
|
||||
amount: BigNumber
|
||||
asset: Asset
|
||||
max: BigNumber
|
||||
onChangeAmount: (amount: BigNumber) => void
|
||||
onClickBtn: () => void
|
||||
}
|
||||
|
||||
export default function ProvideCollateral(props: Props) {
|
||||
return (
|
||||
<div className='p-4 flex-col gap-6 flex'>
|
||||
<TokenInputWithSlider
|
||||
maxText='In wallet'
|
||||
amount={props.amount}
|
||||
asset={props.asset}
|
||||
max={props.max}
|
||||
onChange={props.onChangeAmount}
|
||||
/>
|
||||
<Button onClick={props.onClickBtn} text='Continue' rightIcon={<ArrowRight />} />
|
||||
</div>
|
||||
)
|
||||
}
|
47
src/components/Modals/HLS/SelectAccount.tsx
Normal file
47
src/components/Modals/HLS/SelectAccount.tsx
Normal file
@ -0,0 +1,47 @@
|
||||
import classNames from 'classnames'
|
||||
import React from 'react'
|
||||
|
||||
import Button from 'components/Button'
|
||||
import { ArrowRight } from 'components/Icons'
|
||||
import Radio from 'components/Radio'
|
||||
|
||||
interface Props {
|
||||
hlsAccounts: Account[]
|
||||
onChangeSelected: (account: Account) => void
|
||||
onClickBtn: () => void
|
||||
selectedAccount: Account | null
|
||||
}
|
||||
|
||||
export default function CreateAccount(props: Props) {
|
||||
async function handleBtnClick() {
|
||||
props.onClickBtn()
|
||||
}
|
||||
|
||||
return (
|
||||
<div className='flex-col flex'>
|
||||
{props.hlsAccounts.map((account, index) => (
|
||||
<div
|
||||
key={account.id}
|
||||
onClick={() => props.onChangeSelected(account)}
|
||||
className={classNames(
|
||||
`group/hls relative flex gap-2 items-center px-4 py-5 cursor-pointer`,
|
||||
index !== props.hlsAccounts.length - 1 && 'border-b border-white/10',
|
||||
)}
|
||||
>
|
||||
<Radio
|
||||
active={account.id === props.selectedAccount?.id}
|
||||
className={classNames(`group-hover/hls:opacity-100`)}
|
||||
/>
|
||||
{`HLS Account ${account.id}`}
|
||||
</div>
|
||||
))}
|
||||
<Button
|
||||
onClick={handleBtnClick}
|
||||
text='Continue'
|
||||
rightIcon={<ArrowRight />}
|
||||
showProgressIndicator={false}
|
||||
className='mb-2 mx-4 mb-5'
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
56
src/components/Modals/HLS/SubTitles.tsx
Normal file
56
src/components/Modals/HLS/SubTitles.tsx
Normal file
@ -0,0 +1,56 @@
|
||||
import React from 'react'
|
||||
|
||||
import DisplayCurrency from 'components/DisplayCurrency'
|
||||
import Text from 'components/Text'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
import { formatAmountWithSymbol, formatLeverage } from 'utils/formatters'
|
||||
|
||||
interface SubTitleProps {
|
||||
text: string
|
||||
}
|
||||
|
||||
export function SubTitle(props: SubTitleProps) {
|
||||
return (
|
||||
<Text className='text-white/60 mt-1' size='xs' tag='span'>
|
||||
{props.text}
|
||||
</Text>
|
||||
)
|
||||
}
|
||||
|
||||
interface CollateralSubTitleProps {
|
||||
amount: BigNumber
|
||||
denom: string
|
||||
isOpen: boolean
|
||||
}
|
||||
|
||||
export function CollateralSubTitle(props: CollateralSubTitleProps) {
|
||||
if (props.isOpen || props.amount.isZero()) return null
|
||||
|
||||
return (
|
||||
<SubTitle
|
||||
text={formatAmountWithSymbol({
|
||||
denom: props.denom,
|
||||
amount: props.amount.toString(),
|
||||
})}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
interface LeveragedSubTitleProps {
|
||||
isOpen: boolean
|
||||
leverage: number
|
||||
positionValue: BigNumber
|
||||
}
|
||||
export function LeverageSubTitle(props: LeveragedSubTitleProps) {
|
||||
if (props.isOpen || props.leverage <= 1) return null
|
||||
|
||||
return (
|
||||
<>
|
||||
<SubTitle text={`${formatLeverage(props.leverage)} • Total Position Value `} />
|
||||
<DisplayCurrency
|
||||
coin={BNCoin.fromDenomAndBigNumber('usd', props.positionValue)}
|
||||
className='text-white/60 text-xs inline'
|
||||
/>
|
||||
</>
|
||||
)
|
||||
}
|
25
src/components/Modals/HLS/Summary/ApyBreakdown.tsx
Normal file
25
src/components/Modals/HLS/Summary/ApyBreakdown.tsx
Normal file
@ -0,0 +1,25 @@
|
||||
import React from 'react'
|
||||
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import Text from 'components/Text'
|
||||
|
||||
interface Props {
|
||||
items: { title: string; amount: number }[]
|
||||
}
|
||||
|
||||
export default function AprBreakdown(props: Props) {
|
||||
return (
|
||||
<div className='flex flex-col gap-2 w-[242px] p-3'>
|
||||
{props.items.map((item) => (
|
||||
<div key={item.title} className='flex justify-between'>
|
||||
<Text className='text-white/60 text-sm'>{item.title}</Text>
|
||||
<FormattedNumber
|
||||
amount={item.amount}
|
||||
className='text-sm'
|
||||
options={{ suffix: '%', maxDecimals: 2, minDecimals: 2 }}
|
||||
/>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
)
|
||||
}
|
37
src/components/Modals/HLS/Summary/AssetSummary.tsx
Normal file
37
src/components/Modals/HLS/Summary/AssetSummary.tsx
Normal file
@ -0,0 +1,37 @@
|
||||
import React from 'react'
|
||||
|
||||
import AmountAndValue from 'components/AmountAndValue'
|
||||
import AssetImage from 'components/Asset/AssetImage'
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import Container from 'components/Modals/HLS/Summary/Container'
|
||||
import Text from 'components/Text'
|
||||
|
||||
interface Props {
|
||||
amount: BigNumber
|
||||
asset: Asset | BorrowAsset
|
||||
isBorrow?: boolean
|
||||
}
|
||||
export default function AssetSummary(props: Props) {
|
||||
return (
|
||||
<Container title={props.isBorrow ? 'Leverage' : 'Supplying'}>
|
||||
<div className='flex justify-between'>
|
||||
<span className='flex items-center gap-2'>
|
||||
<AssetImage asset={props.asset} size={32} />
|
||||
<Text size='xs' className='font-bold'>
|
||||
{props.asset.symbol}
|
||||
</Text>
|
||||
</span>
|
||||
<AmountAndValue asset={props.asset} amount={props.amount} isApproximation />
|
||||
</div>
|
||||
{props.isBorrow && (
|
||||
<div className='rounded-sm bg-white/5 grid place-items-center py-2 mt-3'>
|
||||
<FormattedNumber
|
||||
amount={(props.asset as BorrowAsset).borrowRate ?? 0}
|
||||
options={{ suffix: '% Borrow Rate', maxDecimals: 2, minDecimals: 0 }}
|
||||
className='text-white/70 text-xs'
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</Container>
|
||||
)
|
||||
}
|
18
src/components/Modals/HLS/Summary/Container.tsx
Normal file
18
src/components/Modals/HLS/Summary/Container.tsx
Normal file
@ -0,0 +1,18 @@
|
||||
import React from 'react'
|
||||
|
||||
import Text from 'components/Text'
|
||||
|
||||
interface Props {
|
||||
children: React.ReactNode
|
||||
title: string
|
||||
}
|
||||
export default function Container(props: Props) {
|
||||
return (
|
||||
<div>
|
||||
<Text size='xs' className='text-white/60 mb-2 uppercase'>
|
||||
{props.title}
|
||||
</Text>
|
||||
<div className='p-3 rounded-sm bg-black/20'>{props.children}</div>
|
||||
</div>
|
||||
)
|
||||
}
|
78
src/components/Modals/HLS/Summary/YourPosition.tsx
Normal file
78
src/components/Modals/HLS/Summary/YourPosition.tsx
Normal file
@ -0,0 +1,78 @@
|
||||
import React, { useMemo } from 'react'
|
||||
|
||||
import DisplayCurrency from 'components/DisplayCurrency'
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import { InfoCircle } from 'components/Icons'
|
||||
import AprBreakdown from 'components/Modals/HLS/Summary/ApyBreakdown'
|
||||
import Container from 'components/Modals/HLS/Summary/Container'
|
||||
import Text from 'components/Text'
|
||||
import { Tooltip } from 'components/Tooltip'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
|
||||
interface Props {
|
||||
baseApy: number
|
||||
borrowRate: number
|
||||
leverage: number
|
||||
positionValue: BNCoin
|
||||
}
|
||||
|
||||
export default function YourPosition(props: Props) {
|
||||
const netApy = useMemo(
|
||||
() => props.baseApy * props.leverage - props.borrowRate,
|
||||
[props.baseApy, props.borrowRate, props.leverage],
|
||||
)
|
||||
const apyItems = useMemo(
|
||||
() => [
|
||||
{
|
||||
title: 'Base APY',
|
||||
amount: props.baseApy,
|
||||
},
|
||||
{
|
||||
title: 'Levered APY',
|
||||
amount: props.baseApy * props.leverage,
|
||||
},
|
||||
{
|
||||
title: 'Borrow Rate',
|
||||
amount: props.borrowRate,
|
||||
},
|
||||
],
|
||||
[props.baseApy, props.borrowRate, props.leverage],
|
||||
)
|
||||
|
||||
return (
|
||||
<Container title='Your Position'>
|
||||
<div className='flex justify-between mb-2'>
|
||||
<Text className='text-white/60 text-xs'>Total Position Value</Text>
|
||||
<DisplayCurrency
|
||||
coin={props.positionValue}
|
||||
className='text-white/60 place-self-end text-xs'
|
||||
/>
|
||||
</div>
|
||||
<div className='flex justify-between mb-2'>
|
||||
<Text className='text-white/60 text-xs'>Leverage</Text>
|
||||
<FormattedNumber
|
||||
amount={props.leverage}
|
||||
options={{ suffix: 'x' }}
|
||||
className='text-white/60 place-self-end text-xs'
|
||||
/>
|
||||
</div>
|
||||
<div className='flex justify-between'>
|
||||
<Text className='text-xs group/apytooltip' tag='span'>
|
||||
<Tooltip
|
||||
content={<AprBreakdown items={apyItems} />}
|
||||
type='info'
|
||||
className='items-center flex gap-2 group-hover/apytooltip:text-white text-white/60 cursor-pointer'
|
||||
>
|
||||
<span className='mt-0.5'>Net APY</span>{' '}
|
||||
<InfoCircle className='w-4 h-4 text-white/40 inline group-hover/apytooltip:text-white transition-all' />
|
||||
</Tooltip>
|
||||
</Text>
|
||||
<FormattedNumber
|
||||
className='text-white/60 place-self-end text-xs'
|
||||
amount={netApy}
|
||||
options={{ suffix: '%', minDecimals: 0, maxDecimals: 2 }}
|
||||
/>
|
||||
</div>
|
||||
</Container>
|
||||
)
|
||||
}
|
44
src/components/Modals/HLS/Summary/index.tsx
Normal file
44
src/components/Modals/HLS/Summary/index.tsx
Normal file
@ -0,0 +1,44 @@
|
||||
import React from 'react'
|
||||
|
||||
import Button from 'components/Button'
|
||||
import { ArrowRight } from 'components/Icons'
|
||||
import AssetSummary from 'components/Modals/HLS/Summary/AssetSummary'
|
||||
import YourPosition from 'components/Modals/HLS/Summary/YourPosition'
|
||||
import useBorrowAsset from 'hooks/useBorrowAsset'
|
||||
import { BNCoin } from 'types/classes/BNCoin'
|
||||
|
||||
interface Props {
|
||||
apy: number
|
||||
borrowAmount: BigNumber
|
||||
borrowAsset: Asset
|
||||
collateralAsset: Asset
|
||||
depositAmount: BigNumber
|
||||
leverage: number
|
||||
onClickBtn: () => void
|
||||
positionValue: BigNumber
|
||||
}
|
||||
|
||||
export default function Summary(props: Props) {
|
||||
const borrowAsset = useBorrowAsset(props.borrowAsset.denom)
|
||||
|
||||
if (!borrowAsset) return null
|
||||
|
||||
return (
|
||||
<div className='p-4 flex flex-col gap-4'>
|
||||
<AssetSummary asset={props.collateralAsset} amount={props.depositAmount} />
|
||||
<AssetSummary asset={borrowAsset} amount={props.borrowAmount} isBorrow />
|
||||
<YourPosition
|
||||
positionValue={BNCoin.fromDenomAndBigNumber('usd', props.positionValue)}
|
||||
baseApy={props.apy || 0}
|
||||
borrowRate={borrowAsset.borrowRate || 0}
|
||||
leverage={props.leverage}
|
||||
/>
|
||||
<Button
|
||||
onClick={props.onClickBtn}
|
||||
text='Approve Funding Transaction'
|
||||
rightIcon={<ArrowRight />}
|
||||
className='mt-1'
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
}
|
57
src/components/Modals/HLS/index.tsx
Normal file
57
src/components/Modals/HLS/index.tsx
Normal file
@ -0,0 +1,57 @@
|
||||
import React from 'react'
|
||||
|
||||
import Modal from 'components/Modal'
|
||||
import Content from 'components/Modals/HLS/Content'
|
||||
import Header from 'components/Modals/HLS/Header'
|
||||
import useStore from 'store'
|
||||
|
||||
export default function HlsModalController() {
|
||||
const modal = useStore((s) => s.hlsModal)
|
||||
|
||||
if (modal?.vault)
|
||||
return (
|
||||
<HlsModal
|
||||
collateralDenom={modal.vault.denoms.primary}
|
||||
borrowDenom={modal.vault.denoms.secondary}
|
||||
vaultAddress={modal.vault.address}
|
||||
/>
|
||||
)
|
||||
if (modal?.strategy)
|
||||
return (
|
||||
<HlsModal
|
||||
collateralDenom={modal.strategy.denoms.deposit}
|
||||
borrowDenom={modal.strategy.denoms.borrow}
|
||||
vaultAddress={null}
|
||||
/>
|
||||
)
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
interface Props {
|
||||
borrowDenom: string
|
||||
collateralDenom: string
|
||||
vaultAddress: string | null
|
||||
}
|
||||
|
||||
function HlsModal(props: Props) {
|
||||
function handleClose() {
|
||||
useStore.setState({ hlsModal: null })
|
||||
}
|
||||
|
||||
return (
|
||||
<Modal
|
||||
header={<Header primaryDenom={props.collateralDenom} secondaryDenom={props.borrowDenom} />}
|
||||
headerClassName='gradient-header pl-2 pr-2.5 py-3 border-b-white/5 border-b'
|
||||
contentClassName='flex flex-col p-6'
|
||||
modalClassName='max-w-modal-md'
|
||||
onClose={handleClose}
|
||||
>
|
||||
<Content
|
||||
collateralDenom={props.collateralDenom}
|
||||
borrowDenom={props.borrowDenom}
|
||||
vaultAddress={props.vaultAddress}
|
||||
/>
|
||||
</Modal>
|
||||
)
|
||||
}
|
@ -5,6 +5,7 @@ import {
|
||||
BorrowModal,
|
||||
FundAndWithdrawModal,
|
||||
GetStartedModal,
|
||||
HlsModal,
|
||||
LendAndReclaimModalController,
|
||||
SettingsModal,
|
||||
UnlockModal,
|
||||
@ -28,6 +29,7 @@ export default function ModalsContainer() {
|
||||
<WithdrawFromVaultsModal />
|
||||
<WalletAssets />
|
||||
<AlertDialogController />
|
||||
<HlsModal />
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
@ -168,6 +168,7 @@ export default function VaultBorrowings(props: VaultBorrowingsProps) {
|
||||
deposits: props.deposits,
|
||||
borrowings: props.borrowings,
|
||||
isCreate: vaultModal.isCreate,
|
||||
kind: 'default',
|
||||
})
|
||||
useStore.setState({ vaultModal: null })
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ export default function VaultModalContent(props: Props) {
|
||||
reclaims: removedLends,
|
||||
deposits: removedDeposits,
|
||||
borrowings: addedDebts,
|
||||
kind: 'default',
|
||||
})
|
||||
|
||||
const depositCapReachedCoins = useMemo(() => {
|
||||
|
@ -1,16 +1,16 @@
|
||||
import { useCallback, useMemo } from 'react'
|
||||
import moment from 'moment'
|
||||
import { useCallback, useMemo } from 'react'
|
||||
|
||||
import VaultLogo from 'components/Earn/Farm/VaultLogo'
|
||||
import DoubleLogo from 'components/DoubleLogo'
|
||||
import { InfoCircle } from 'components/Icons'
|
||||
import Modal from 'components/Modal'
|
||||
import VaultModalContent from 'components/Modals/Vault/VaultModalContent'
|
||||
import VaultModalContentHeader from 'components/Modals/Vault/VaultModalContentHeader'
|
||||
import Text from 'components/Text'
|
||||
import { Tooltip } from 'components/Tooltip'
|
||||
import { ASSETS } from 'constants/assets'
|
||||
import useCurrentAccount from 'hooks/useCurrentAccount'
|
||||
import useStore from 'store'
|
||||
import VaultModalContentHeader from 'components/Modals/Vault/VaultModalContentHeader'
|
||||
import { InfoCircle } from 'components/Icons'
|
||||
import { Tooltip } from 'components/Tooltip'
|
||||
|
||||
export default function VaultModalController() {
|
||||
const currentAccount = useCurrentAccount()
|
||||
@ -60,7 +60,7 @@ function VaultModal(props: Props) {
|
||||
onClose={onClose}
|
||||
header={
|
||||
<span className='flex items-center pr-4 py-1'>
|
||||
<VaultLogo vault={vault} />
|
||||
<DoubleLogo primaryDenom={vault.denoms.primary} secondaryDenom={vault.denoms.secondary} />
|
||||
<Text className='pl-3 pr-2'>{vault.name}</Text>
|
||||
{unlockTime && (
|
||||
<Tooltip
|
||||
|
@ -1,7 +1,7 @@
|
||||
import Button from 'components/Button'
|
||||
import { CircularProgress } from 'components/CircularProgress'
|
||||
import DisplayCurrency from 'components/DisplayCurrency'
|
||||
import VaultLogo from 'components/Earn/Farm/VaultLogo'
|
||||
import DoubleLogo from 'components/DoubleLogo'
|
||||
import { FormattedNumber } from 'components/FormattedNumber'
|
||||
import Modal from 'components/Modal'
|
||||
import Text from 'components/Text'
|
||||
@ -60,7 +60,10 @@ export default function WithdrawFromVaultsModal() {
|
||||
if (!primaryAsset || !secondaryAsset) return null
|
||||
return (
|
||||
<div className='flex items-center gap-4' key={vault.unlockId}>
|
||||
<VaultLogo vault={vault} />
|
||||
<DoubleLogo
|
||||
primaryDenom={vault.denoms.primary}
|
||||
secondaryDenom={vault.denoms.secondary}
|
||||
/>
|
||||
<div className='flex flex-wrap flex-1'>
|
||||
<Text className='w-full'>{vault.name}</Text>
|
||||
<Text size='sm' className='w-full text-white/50'>
|
||||
|
@ -10,3 +10,4 @@ export { default as UnlockModal } from 'components/Modals/Unlock'
|
||||
export { default as VaultModal } from 'components/Modals/Vault'
|
||||
export { default as WalletAssets } from 'components/Modals/WalletAssets'
|
||||
export { default as WithdrawFromVaultsModal } from 'components/Modals/WithdrawFromVaultsModal'
|
||||
export { default as HlsModal } from 'components/Modals/HLS'
|
||||
|
@ -80,6 +80,7 @@ function Content(props: Props) {
|
||||
health={health}
|
||||
healthFactor={healthFactor}
|
||||
title={`Credit Account ${props.accountId}`}
|
||||
accountId={props.accountId}
|
||||
/>
|
||||
)
|
||||
}
|
||||
@ -88,7 +89,12 @@ export default function Summary(props: Props) {
|
||||
return (
|
||||
<Suspense
|
||||
fallback={
|
||||
<Skeleton health={0} healthFactor={0} title={`Credit Account ${props.accountId}`} />
|
||||
<Skeleton
|
||||
health={0}
|
||||
healthFactor={0}
|
||||
title={`Credit Account ${props.accountId}`}
|
||||
accountId={props.accountId}
|
||||
/>
|
||||
}
|
||||
>
|
||||
<Content {...props} />
|
||||
|
@ -1,8 +1,8 @@
|
||||
import React from 'react'
|
||||
|
||||
import HealthBar from 'components/Account/Health/HealthBar'
|
||||
import HealthIcon from 'components/Account/Health/HealthIcon'
|
||||
import Card from 'components/Card'
|
||||
import HLSTag from 'components/HLS/HLSTag'
|
||||
import Text from 'components/Text'
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
|
||||
@ -12,6 +12,7 @@ interface Props {
|
||||
healthFactor: number
|
||||
accountId: string
|
||||
isCurrent?: boolean
|
||||
isHls?: boolean
|
||||
}
|
||||
|
||||
export default function Skeleton(props: Props) {
|
||||
@ -19,7 +20,10 @@ export default function Skeleton(props: Props) {
|
||||
return (
|
||||
<Card className='p-4 bg-white/5'>
|
||||
<div className='flex items-center justify-between'>
|
||||
<Text>Credit Account {accountId}</Text>
|
||||
<Text>
|
||||
Credit Account {accountId}
|
||||
{props.isHls && <HLSTag />}
|
||||
</Text>
|
||||
<Text size='xs' className='text-white/60'>
|
||||
{isCurrent && '(current)'}
|
||||
</Text>
|
||||
@ -30,13 +34,7 @@ export default function Skeleton(props: Props) {
|
||||
))}
|
||||
</div>
|
||||
<div className='flex gap-1 mt-6'>
|
||||
<HealthIcon
|
||||
isLoading={healthFactor === 0}
|
||||
health={health}
|
||||
className='w-5'
|
||||
colorClass='text-white/60'
|
||||
/>
|
||||
<HealthBar health={health} healthFactor={healthFactor} />
|
||||
<HealthBar health={health} healthFactor={healthFactor} showIcon />
|
||||
</div>
|
||||
</Card>
|
||||
)
|
||||
|
@ -110,6 +110,7 @@ export default function PortfolioCard(props: Props) {
|
||||
healthFactor={healthFactor}
|
||||
accountId={props.accountId}
|
||||
isCurrent={props.accountId === currentAccountId}
|
||||
isHls={account.kind === 'high_levered_strategy'}
|
||||
/>
|
||||
</NavLink>
|
||||
)
|
||||
|
@ -20,7 +20,7 @@ export default function PortfolioSummary() {
|
||||
const { data } = useBorrowMarketAssetsTableData(false)
|
||||
const borrowAssets = useMemo(() => data?.allAssets || [], [data])
|
||||
const { allAssets: lendingAssets } = useLendingMarketAssetsTableData()
|
||||
const { data: accounts } = useAccounts(urlAddress || walletAddress)
|
||||
const { data: accounts } = useAccounts('default', urlAddress || walletAddress)
|
||||
|
||||
const stats = useMemo(() => {
|
||||
if (!accounts?.length) return
|
||||
@ -38,6 +38,7 @@ export default function PortfolioSummary() {
|
||||
lends: [],
|
||||
debts: [],
|
||||
vaults: [],
|
||||
kind: 'default',
|
||||
} as Account,
|
||||
)
|
||||
|
||||
@ -90,5 +91,5 @@ export default function PortfolioSummary() {
|
||||
|
||||
if (!walletAddress && !urlAddress) return null
|
||||
|
||||
return <SummarySkeleton title='Portfolio Summary' stats={stats} />
|
||||
return <SummarySkeleton title='Portfolio Summary' stats={stats} accountId='' />
|
||||
}
|
||||
|
@ -3,9 +3,11 @@ import React from 'react'
|
||||
import HealthBar from 'components/Account/Health/HealthBar'
|
||||
import HealthIcon from 'components/Account/Health/HealthIcon'
|
||||
import Card from 'components/Card'
|
||||
import HLSTag from 'components/HLS/HLSTag'
|
||||
import Loading from 'components/Loading'
|
||||
import Text from 'components/Text'
|
||||
import TitleAndSubCell from 'components/TitleAndSubCell'
|
||||
import useAccount from 'hooks/useAccount'
|
||||
import { DEFAULT_PORTFOLIO_STATS } from 'utils/constants'
|
||||
|
||||
interface Props {
|
||||
@ -13,16 +15,21 @@ interface Props {
|
||||
health?: number
|
||||
healthFactor?: number
|
||||
title: string
|
||||
accountId: string
|
||||
}
|
||||
|
||||
export default function SummarySkeleton(props: Props) {
|
||||
const { health, healthFactor, title } = props
|
||||
const stats = props.stats || DEFAULT_PORTFOLIO_STATS
|
||||
const { data: account } = useAccount(props.accountId, false)
|
||||
|
||||
return (
|
||||
<div className='flex flex-col w-full gap-8'>
|
||||
<div className='flex justify-between'>
|
||||
<Text size='2xl'>{title}</Text>
|
||||
<div className='flex items-center'>
|
||||
<Text size='2xl'>{title}</Text>
|
||||
{account?.kind === 'high_levered_strategy' && <HLSTag />}
|
||||
</div>
|
||||
{health !== undefined && healthFactor !== undefined && (
|
||||
<div className='flex gap-1 max-w-[300px] flex-grow'>
|
||||
<HealthIcon isLoading={healthFactor === 0} health={health} className='w-5' />
|
||||
|
@ -9,16 +9,14 @@ export default function Radio(props: Props) {
|
||||
return (
|
||||
<div
|
||||
className={classNames(
|
||||
'group flex h-5 w-5 items-center justify-center rounded-full border',
|
||||
'flex h-5 w-5 items-center justify-center rounded-full border',
|
||||
props.active && 'border-primary',
|
||||
)}
|
||||
>
|
||||
<span
|
||||
className={classNames(
|
||||
'h-3 w-3 rounded-full',
|
||||
props.active
|
||||
? 'bg-primary'
|
||||
: 'bg-white opacity-0 transition-opacity group-hover:opacity-100',
|
||||
props.active ? 'bg-primary' : 'bg-white opacity-0 transition-opacity',
|
||||
props.className,
|
||||
)}
|
||||
/>
|
||||
|
@ -80,7 +80,7 @@ export default function Option(props: Props) {
|
||||
})}
|
||||
</Text>
|
||||
<AssetRate
|
||||
rate={convertAprToApy((marketAsset?.borrowRate ?? 0) * 100, 365)}
|
||||
rate={convertAprToApy(marketAsset?.borrowRate ?? 0, 365)}
|
||||
isEnabled={marketAsset?.borrowEnabled ?? false}
|
||||
className='col-span-2 text-white/50'
|
||||
type='apy'
|
||||
|
@ -45,7 +45,7 @@ export default function Row<T>(props: Props<T>) {
|
||||
key={cell.id}
|
||||
className={classNames(
|
||||
isSymbolOrName ? 'text-left' : 'text-right',
|
||||
props.spacingClassName ?? 'p-4',
|
||||
props.spacingClassName ?? 'px-3 py-4',
|
||||
borderClasses,
|
||||
)}
|
||||
>
|
||||
|
@ -79,10 +79,10 @@ export default function Table<T>(props: Props<T>) {
|
||||
'align-center',
|
||||
)}
|
||||
>
|
||||
<span className='w-6 h-6 text-white'>
|
||||
<span className='w-5 h-5 text-white'>
|
||||
{header.column.getCanSort()
|
||||
? {
|
||||
asc: <SortAsc />,
|
||||
asc: <SortAsc size={16} />,
|
||||
desc: <SortDesc />,
|
||||
false: <SortNone />,
|
||||
}[header.column.getIsSorted() as string] ?? null
|
||||
@ -90,8 +90,8 @@ export default function Table<T>(props: Props<T>) {
|
||||
</span>
|
||||
<Text
|
||||
tag='span'
|
||||
size='sm'
|
||||
className='flex items-center font-normal text-white/70'
|
||||
size='xs'
|
||||
className='flex items-center font-normal text-white/60'
|
||||
>
|
||||
{flexRender(header.column.columnDef.header, header.getContext())}
|
||||
</Text>
|
||||
|
@ -89,7 +89,7 @@ export default function Toaster() {
|
||||
|
||||
const handleResponse = (toast: ToastResponse, details?: boolean) => {
|
||||
const isError = toast?.isError
|
||||
if (!isError) addTransaction(toast)
|
||||
if (!isError && toast.accountId) addTransaction(toast)
|
||||
const generalMessage = isError ? 'Transaction failed!' : 'Transaction completed successfully!'
|
||||
const showDetailElement = !!(!details && toast.hash)
|
||||
const Msg = () => (
|
||||
|
@ -106,7 +106,7 @@ export const TVChartContainer = (props: Props) => {
|
||||
|
||||
return (
|
||||
<Card title='Trading Chart' contentClassName='px-0.5 pb-0.5 h-full'>
|
||||
<div ref={chartContainerRef} className='h-full' />
|
||||
<div ref={chartContainerRef} className='h-full overflow-hidden rounded-b-base' />
|
||||
</Card>
|
||||
)
|
||||
}
|
||||
|
@ -2,6 +2,9 @@ import dynamic from 'next/dynamic'
|
||||
import Script from 'next/script'
|
||||
import { useState } from 'react'
|
||||
|
||||
import { CircularProgress } from 'components/CircularProgress'
|
||||
import Card from 'components/Card'
|
||||
|
||||
const TVChartContainer = dynamic(
|
||||
() => import('components/Trade/TradeChart/TVChartContainer').then((mod) => mod.TVChartContainer),
|
||||
{ ssr: false },
|
||||
@ -13,7 +16,8 @@ interface Props {
|
||||
}
|
||||
|
||||
export default function TradeChart(props: Props) {
|
||||
const [isScriptReady, setIsScriptReady] = useState(true)
|
||||
const [isScriptReady, setIsScriptReady] = useState(false)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Script
|
||||
@ -23,7 +27,15 @@ export default function TradeChart(props: Props) {
|
||||
setIsScriptReady(true)
|
||||
}}
|
||||
/>
|
||||
{isScriptReady && <TVChartContainer buyAsset={props.buyAsset} sellAsset={props.sellAsset} />}
|
||||
{isScriptReady ? (
|
||||
<TVChartContainer buyAsset={props.buyAsset} sellAsset={props.sellAsset} />
|
||||
) : (
|
||||
<Card title='Trading Chart' contentClassName='px-0.5 pb-0.5 h-full'>
|
||||
<div className='flex items-center justify-center w-full h-full rounded-b-base bg-chart'>
|
||||
<CircularProgress size={60} className='opacity-50' />
|
||||
</div>
|
||||
</Card>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ import debounce from 'lodash.debounce'
|
||||
import { useCallback, useEffect, useMemo, useState } from 'react'
|
||||
|
||||
import estimateExactIn from 'api/swap/estimateExactIn'
|
||||
import AvailableLiquidityMessage from 'components/AvailableLiquidityMessage'
|
||||
import DepositCapMessage from 'components/DepositCapMessage'
|
||||
import Divider from 'components/Divider'
|
||||
import RangeInput from 'components/RangeInput'
|
||||
@ -251,6 +252,19 @@ export default function SwapForm(props: Props) {
|
||||
if (buyAssetAmount.isEqualTo(maxBuyableAmountEstimation)) setSellAssetAmount(maxSellAmount)
|
||||
}, [sellAssetAmount, maxSellAmount, buyAssetAmount, maxBuyableAmountEstimation])
|
||||
|
||||
const borrowAmount = useMemo(
|
||||
() =>
|
||||
sellAssetAmount.isGreaterThan(sellSideMarginThreshold)
|
||||
? sellAssetAmount.minus(sellSideMarginThreshold)
|
||||
: BN_ZERO,
|
||||
[sellAssetAmount, sellSideMarginThreshold],
|
||||
)
|
||||
|
||||
const availableLiquidity = useMemo(
|
||||
() => borrowAsset?.liquidity?.amount ?? BN_ZERO,
|
||||
[borrowAsset?.liquidity?.amount],
|
||||
)
|
||||
|
||||
return (
|
||||
<>
|
||||
<Divider />
|
||||
@ -287,6 +301,13 @@ export default function SwapForm(props: Props) {
|
||||
|
||||
<DepositCapMessage action='buy' coins={depositCapReachedCoins} className='p-4 bg-white/5' />
|
||||
|
||||
{borrowAsset && borrowAmount.isGreaterThanOrEqualTo(availableLiquidity) && (
|
||||
<AvailableLiquidityMessage
|
||||
availableLiquidity={borrowAsset?.liquidity?.amount ?? BN_ZERO}
|
||||
asset={borrowAsset}
|
||||
/>
|
||||
)}
|
||||
|
||||
<AssetAmountInput
|
||||
label='Sell'
|
||||
max={maxSellAmount}
|
||||
@ -302,14 +323,14 @@ export default function SwapForm(props: Props) {
|
||||
sellAsset={sellAsset}
|
||||
borrowRate={borrowAsset?.borrowRate}
|
||||
buyAction={handleBuyClick}
|
||||
buyButtonDisabled={sellAssetAmount.isZero() || depositCapReachedCoins.length > 0}
|
||||
buyButtonDisabled={
|
||||
sellAssetAmount.isZero() ||
|
||||
depositCapReachedCoins.length > 0 ||
|
||||
borrowAmount.isGreaterThanOrEqualTo(availableLiquidity)
|
||||
}
|
||||
showProgressIndicator={isConfirming}
|
||||
isMargin={isMarginChecked}
|
||||
borrowAmount={
|
||||
sellAssetAmount.isGreaterThan(sellSideMarginThreshold)
|
||||
? sellAssetAmount.minus(sellSideMarginThreshold)
|
||||
: BN_ZERO
|
||||
}
|
||||
borrowAmount={borrowAmount}
|
||||
estimatedFee={estimatedFee}
|
||||
/>
|
||||
</div>
|
||||
|
13
src/constants/accounts.ts
Normal file
13
src/constants/accounts.ts
Normal file
@ -0,0 +1,13 @@
|
||||
export const EMPTY_ACCOUNT: Account = {
|
||||
id: '',
|
||||
kind: 'default',
|
||||
debts: [],
|
||||
deposits: [],
|
||||
lends: [],
|
||||
vaults: [],
|
||||
}
|
||||
|
||||
export const EMPTY_ACCOUNT_HLS: Account = {
|
||||
...EMPTY_ACCOUNT,
|
||||
kind: 'high_levered_strategy',
|
||||
}
|
@ -58,6 +58,7 @@ export const ASSETS: Asset[] = [
|
||||
isDisplayCurrency: ENV.NETWORK !== NETWORK.TESTNET,
|
||||
isAutoLendEnabled: false,
|
||||
poolId: 803,
|
||||
isStaking: true,
|
||||
},
|
||||
{
|
||||
symbol: 'WBTC.axl',
|
||||
|
@ -4,6 +4,7 @@ interface EnvironmentVariables {
|
||||
ADDRESS_INCENTIVES: string
|
||||
ADDRESS_ORACLE: string
|
||||
ADDRESS_PARAMS: string
|
||||
ADDRESS_PYTH: string
|
||||
ADDRESS_RED_BANK: string
|
||||
ADDRESS_SWAPPER: string
|
||||
ADDRESS_ZAPPER: string
|
||||
@ -26,6 +27,7 @@ export const ENV: EnvironmentVariables = {
|
||||
ADDRESS_INCENTIVES: process.env.NEXT_PUBLIC_INCENTIVES || '',
|
||||
ADDRESS_ORACLE: process.env.NEXT_PUBLIC_ORACLE || '',
|
||||
ADDRESS_PARAMS: process.env.NEXT_PUBLIC_PARAMS || '',
|
||||
ADDRESS_PYTH: process.env.NEXT_PUBLIC_PYTH || '',
|
||||
ADDRESS_RED_BANK: process.env.NEXT_PUBLIC_RED_BANK || '',
|
||||
ADDRESS_SWAPPER: process.env.NEXT_PUBLIC_SWAPPER || '',
|
||||
ADDRESS_ZAPPER: process.env.NEXT_PUBLIC_ZAPPER || '',
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user