* 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

* Mp 3367 staking interactions (#613)

* ♻️ Refactor borrowRate to be in full numbers

* Enter into HLS Staking strategy

* HLS Staking deposited table + Portfolio pages

* tidy: refactored the masks for HealthBar

---------

Co-authored-by: Linkie Link <linkielink.dev@gmail.com>

* Added dropdown button (#614)

* Add basic modal for HLS staking (#615)

* Hls staking manage actions (#622)

* Add basic modal for HLS staking

* UI components for Manage

* All Manage actions (except change lev)

* 🐛hls intro icons + checkbox, hide repay when no debt, clickable dropdown

* fix build

* Pyth history feed (#623)

* MP-3556: first PythDataFeed class

* fix: fixed the timestamp

* fix: fixed the chart data

* fix: fixed the prices

* fix: fixed the math and decimal scale

* tidy: refactor

* fix: update the pythFeedId

* fix: updated OsmosisTheGraphDataFeed

* fix: add a fallback for non pyth data

* tidy: refactor

* fix: adjusted to feedback

* Tia and stosmo (#627)

* feat: listed TIA and stOSMO

* fix: fixed USDC

* tidy: refactor the token logos

* Hls leverage (#628)

* Add basic modal for HLS staking

* UI components for Manage

* All Manage actions (except change lev)

* 🐛hls intro icons + checkbox, hide repay when no debt, clickable dropdown

* fix build

* finish all actiosn for HLS staking

* 🐛clean up tooltip props

* tidy: updated the token logos (#629)

* tidy: updated the token logos

* feat: added dydx

* hotfix: quickfix for Trade

* fix: inverted the charts

* fix: fixed the chart description

* fix: assets

* Build(deps): bump @keplr-wallet/cosmos from 0.12.39 to 0.12.42 (#634)

Bumps @keplr-wallet/cosmos from 0.12.39 to 0.12.42.

---
updated-dependencies:
- dependency-name: "@keplr-wallet/cosmos"
  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>

* Borrow Rate to APY (#632)

* fix: changed Borrow Rate to Borrow Rate APY

* fix: regarding feedback

* Auto repay on trade (#631)

* fix: fixed the trading chart load

* fix: prevent wrapped checkboxes to be double clicked

* fix: refactored funding account modal

* fix: fixed modal classes

* fix: adjusted width classes

* fix: fixed updating states

* tidy: format

* fix: fixed the slider masks

* fix: fixed the slider masks

* listed: TIA and USDT

* fix: fixed the slider initial position

* env: version update

* fix: fixed priceFeedIds

* Hls latest (#637)

* env: enable HLS

* feat: added background and orb fading

* tidy: updated the token logos (#629)

* tidy: updated the token logos

* feat: added dydx

* fix: increase load spead of trading charts

* feat: first version of the UI shift

* Deployment for HLS testing

*  add APY to HLS staking

*  add APY account overview and summary

* fix: fixed the intro component visibility

*  add warning messages HLS

* fix: menu order

*  implement live APRs

* auto-select first account, add no balance message

* enable tabs for hls, fix net APY for deposit

* fix button for hls, sorting apy and console warnings

* disable feature flag HLS

* fix slider

* update routing

---------

Co-authored-by: Linkie Link <linkielink.dev@gmail.com>

* Build(deps): bump postcss from 8.4.23 to 8.4.31 (#624)

Bumps [postcss](https://github.com/postcss/postcss) from 8.4.23 to 8.4.31.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.4.23...8.4.31)

---
updated-dependencies:
- dependency-name: postcss
  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): bump zustand from 4.4.3 to 4.4.6 (#621)

Bumps [zustand](https://github.com/pmndrs/zustand) from 4.4.3 to 4.4.6.
- [Release notes](https://github.com/pmndrs/zustand/releases)
- [Commits](https://github.com/pmndrs/zustand/compare/v4.4.3...v4.4.6)

---
updated-dependencies:
- dependency-name: zustand
  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): bump @sentry/nextjs from 7.74.0 to 7.77.0 (#625)

Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.74.0 to 7.77.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.74.0...7.77.0)

---
updated-dependencies:
- dependency-name: "@sentry/nextjs"
  dependency-type: direct:production
...

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-dom from 18.2.13 to 18.2.15 (#633)

Bumps [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom) from 18.2.13 to 18.2.15.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-dom)

---
updated-dependencies:
- dependency-name: "@types/react-dom"
  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-dev): bump eslint from 8.51.0 to 8.53.0 (#620)

Bumps [eslint](https://github.com/eslint/eslint) from 8.51.0 to 8.53.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.51.0...v8.53.0)

---
updated-dependencies:
- dependency-name: eslint
  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-dev): bump eslint-plugin-import from 2.28.1 to 2.29.0 (#617)

Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.28.1 to 2.29.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.28.1...v2.29.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  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>

* MP-3564: added navigation dropdown and Governance NavLink (#639)

* MP-2887: added ICNS and ICP support (#638)

* MP-2887: added ICNS and ICP support

:

* fix: removed unessecary package

* Build(deps): bump recharts from 2.9.0 to 2.10.1 (#640)

Bumps [recharts](https://github.com/recharts/recharts) from 2.9.0 to 2.10.1.
- [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.9.0...v2.10.1)

---
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 eslint from 8.53.0 to 8.54.0 (#641)

Bumps [eslint](https://github.com/eslint/eslint) from 8.53.0 to 8.54.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.53.0...v8.54.0)

---
updated-dependencies:
- dependency-name: eslint
  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-dev): bump @types/react-helmet from 6.1.7 to 6.1.9 (#642)

Bumps [@types/react-helmet](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-helmet) from 6.1.7 to 6.1.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-helmet)

---
updated-dependencies:
- dependency-name: "@types/react-helmet"
  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-dev): bump @types/lodash.debounce from 4.0.7 to 4.0.9 (#643)

Bumps [@types/lodash.debounce](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash.debounce) from 4.0.7 to 4.0.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash.debounce)

---
updated-dependencies:
- dependency-name: "@types/lodash.debounce"
  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>

* Update HC for Margin trade and HLS (#645)

* Update HC for Margin trade and HLS

* fix relative imports

* fix: added clickaway handler and fixed z-index issues (#646)

* v2.0.6 and use feature flag for auto repay (#650)

* 🐛incorrect deposit cap utilization (#647)

* Initialize perps (#648)

* setup routing

* add basic perps interface

* small fix

* feat: listed dydx and AKT (#652)

* Deposit Cap and Utilization Fix (#654)

* fix: fixed the deposit cap and total supplied / utilization rate

* fix: fixed build

* fix: fixed build

* fix: avoid deposit cap usage over 100%

* refactor market data apy/ltv

* fix: fixed the withdraw from vaults modal

* tidy: refactor

---------

Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com>

* stATOM and stOSMO TradingView support (#653)

* feat: listed dydx and AKT

* fix: removed theGraph support for now

* finish adding liquidation price (#649)

* finish adding liquidation price

* fix minor issues

* v2.0.6 and use feature flag for auto repay (#650)

* 🐛incorrect deposit cap utilization (#647)

* Initialize perps (#648)

* setup routing

* add basic perps interface

* small fix

* feat: listed dydx and AKT (#652)

* Deposit Cap and Utilization Fix (#654)

* fix: fixed the deposit cap and total supplied / utilization rate

* fix: fixed build

* fix: fixed build

* fix: avoid deposit cap usage over 100%

* refactor market data apy/ltv

* fix: fixed the withdraw from vaults modal

* tidy: refactor

---------

Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com>

* stATOM and stOSMO TradingView support (#653)

* feat: listed dydx and AKT

* fix: removed theGraph support for now

* adjust liq price loading and null/0 values

---------

Co-authored-by: Linkie Link <linkielink.dev@gmail.com>

* Auto Lend Switch (#660)

* refactor: moved the autolend logic to the switch

* tidy: update default value

* adjust logic of auto-lend for switch component

---------

Co-authored-by: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com>

* temp: remove liquidation price (#661)

* Revert "temp: remove liquidation price (#661)" (#663)

This reverts commit 0cba668c82.

* 🐛 fix liquidation price (#664)

* Hls text fixes (#667)

* 🐛 incorrect vault values calc

* 🐛 incorrect message for no balance in wallet hls

* 🐛 hls message on keep leverage

* update to correct wasm files

* update to correct wasm files

* v2.1.0 (#669)

* Repay from Wallet (#673)

* feat: added repay from wallet

* tidy: refactor

* UX/UI finetuning (#672)

* feat: added Buy/Sell token ratio to the TradingView header

* fix: changed the order in the trading view description

* feat: added minute timeframe to the chart

* fix: changed WBTC to WBTC/USD pyth price feed

* fix: adjusted HLS health curve

* fix: made HLS accounts unselectable

* copy: changed the APY range and Strategy text

* tidy: fix the tables layout to be more readable

* fix: change the precision of the Trading chart header

* feat: added summary collapsable

* fix: removed Debt Column for active HLS positions

* fix: added Memo to TVChart

* fix: adjust Trade page layout

* tidy: refactor table meta

* fix: DisplayCurrency is able to take options now

* tidy: remove unneeded typesafety

* fix: adjusted according feedback

* env: enabled autoRepay and updated version

* fix: auto-repay

* fix: disable lend on auto repay on trade

* tidy: refactor

* feat: make USDC the standard secondary asset (for trade) (#681)

* Add usePerpsMarket hook and adjust routing (#680)

* Add usePerpsMarket hook and adjust routing

* fix: enable 7 links in the header

---------

Co-authored-by: Linkie Link <linkielink.dev@gmail.com>

* Liq price in balances (#679)

* add liquidation price to balances table trade

* add depositcap to HLS

* fix: add width classes to the balances table, remove abbreviation, remove flicker

* fix: fixed the account selection and added a tooltip

* fix wasm file for debt liquidation price

---------

Co-authored-by: Linkie Link <linkielink.dev@gmail.com>

* added sharp (#682)

* env: added sharp

* fix: use dvh over vh

* add cache for asset params (#683)

* Build(deps): bump @sentry/nextjs from 7.77.0 to 7.84.0 (#677)

Bumps [@sentry/nextjs](https://github.com/getsentry/sentry-javascript) from 7.77.0 to 7.84.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.77.0...7.84.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>

* Build(deps): bump @splinetool/runtime from 0.9.482 to 0.9.516 (#676)

Bumps @splinetool/runtime from 0.9.482 to 0.9.516.

---
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/react from 18.2.33 to 18.2.41 (#675)

Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.2.33 to 18.2.41.
- [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 react-helmet-async from 1.3.0 to 2.0.3 (#674)

Bumps [react-helmet-async](https://github.com/staylor/react-helmet-async) from 1.3.0 to 2.0.3.
- [Release notes](https://github.com/staylor/react-helmet-async/releases)
- [Commits](https://github.com/staylor/react-helmet-async/commits)

---
updated-dependencies:
- dependency-name: react-helmet-async
  dependency-type: direct:production
  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 @adobe/css-tools from 4.3.1 to 4.3.2 (#671)

Bumps [@adobe/css-tools](https://github.com/adobe/css-tools) from 4.3.1 to 4.3.2.
- [Changelog](https://github.com/adobe/css-tools/blob/main/History.md)
- [Commits](https://github.com/adobe/css-tools/commits)

---
updated-dependencies:
- dependency-name: "@adobe/css-tools"
  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/debounce-promise from 3.1.7 to 3.1.9 (#659)

Bumps [@types/debounce-promise](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/debounce-promise) from 3.1.7 to 3.1.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/debounce-promise)

---
updated-dependencies:
- dependency-name: "@types/debounce-promise"
  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>

* Simple spot trading (#684)

* env: added sharp

* fix: use dvh over vh

* feat: prepared the trade view for perps and spot

* fix: adjusted heights for Trade

* feat: added Navigation submenu

* feat: added first interface itteration

* feat: added logic

* feat: added pairsList

* feat: finished Trade Spot Simple

* fix: fixed Sell button

* fix: adjusted capLeft logic and added sorting util

* fix: order of values

* fix: fixed the autoLend switch to be deselectable

* env: bump version

* fix: changes according to feedback

* fix: fixed naming

* tidy: refactor

* fix: set default stable to USDC.axl

* Build(deps): bump @splinetool/runtime from 0.9.516 to 0.9.521 (#690)

Bumps @splinetool/runtime from 0.9.516 to 0.9.521.

---
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 eslint-config-next from 14.0.0 to 14.0.4 (#687)

Bumps [eslint-config-next](https://github.com/vercel/next.js/tree/HEAD/packages/eslint-config-next) from 14.0.0 to 14.0.4.
- [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.4/packages/eslint-config-next)

---
updated-dependencies:
- dependency-name: eslint-config-next
  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-dev): bump @types/react-helmet from 6.1.9 to 6.1.11 (#688)

Bumps [@types/react-helmet](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-helmet) from 6.1.9 to 6.1.11.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react-helmet)

---
updated-dependencies:
- dependency-name: "@types/react-helmet"
  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-dev): bump lint-staged from 15.0.1 to 15.2.0 (#689)

Bumps [lint-staged](https://github.com/okonet/lint-staged) from 15.0.1 to 15.2.0.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Changelog](https://github.com/lint-staged/lint-staged/blob/master/CHANGELOG.md)
- [Commits](https://github.com/okonet/lint-staged/compare/v15.0.1...v15.2.0)

---
updated-dependencies:
- dependency-name: lint-staged
  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>

---------

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:
Linkie Link 2023-12-12 14:02:01 +01:00 committed by GitHub
parent dc6a2a6b16
commit 423731f65e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
79 changed files with 1899 additions and 718 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "mars-v2-frontend", "name": "mars-v2-frontend",
"version": "2.1.1", "version": "2.1.2",
"private": true, "private": true,
"scripts": { "scripts": {
"build": "yarn validate-env && next build", "build": "yarn validate-env && next build",
@ -25,9 +25,9 @@
"@cosmjs/cosmwasm-stargate": "^0.31.1", "@cosmjs/cosmwasm-stargate": "^0.31.1",
"@delphi-labs/shuttle-react": "^3.10.0", "@delphi-labs/shuttle-react": "^3.10.0",
"@keplr-wallet/cosmos": "^0.12.42", "@keplr-wallet/cosmos": "^0.12.42",
"@sentry/nextjs": "^7.77.0", "@sentry/nextjs": "^7.84.0",
"@splinetool/react-spline": "^2.2.6", "@splinetool/react-spline": "^2.2.6",
"@splinetool/runtime": "^0.9.482", "@splinetool/runtime": "^0.9.521",
"@tailwindcss/container-queries": "^0.1.1", "@tailwindcss/container-queries": "^0.1.1",
"@tanstack/react-table": "^8.10.6", "@tanstack/react-table": "^8.10.6",
"@tippyjs/react": "^4.2.6", "@tippyjs/react": "^4.2.6",
@ -43,13 +43,14 @@
"react-device-detect": "^2.2.3", "react-device-detect": "^2.2.3",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-draggable": "^4.4.6", "react-draggable": "^4.4.6",
"react-helmet-async": "^1.3.0", "react-helmet-async": "^2.0.3",
"react-qr-code": "^2.0.12", "react-qr-code": "^2.0.12",
"react-router-dom": "^6.17.0", "react-router-dom": "^6.17.0",
"react-spring": "^9.7.3", "react-spring": "^9.7.3",
"react-toastify": "^9.1.3", "react-toastify": "^9.1.3",
"react-use-clipboard": "^1.0.9", "react-use-clipboard": "^1.0.9",
"recharts": "^2.10.1", "recharts": "^2.10.1",
"sharp": "^0.33.0",
"swr": "^2.2.4", "swr": "^2.2.4",
"tailwind-scrollbar-hide": "^1.1.7", "tailwind-scrollbar-hide": "^1.1.7",
"zustand": "^4.4.6" "zustand": "^4.4.6"
@ -58,25 +59,25 @@
"@svgr/webpack": "^8.1.0", "@svgr/webpack": "^8.1.0",
"@testing-library/jest-dom": "^5.17.0", "@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^14.0.0", "@testing-library/react": "^14.0.0",
"@types/debounce-promise": "^3.1.7", "@types/debounce-promise": "^3.1.9",
"@types/lodash.debounce": "^4.0.9", "@types/lodash.debounce": "^4.0.9",
"@types/lodash.throttle": "^4.1.8", "@types/lodash.throttle": "^4.1.8",
"@types/node": "^20.8.6", "@types/node": "^20.8.6",
"@types/react": "18.2.33", "@types/react": "18.2.41",
"@types/react-dom": "18.2.15", "@types/react-dom": "18.2.15",
"@types/react-helmet": "^6.1.9", "@types/react-helmet": "^6.1.11",
"autoprefixer": "^10.4.16", "autoprefixer": "^10.4.16",
"babel-jest": "^29.7.0", "babel-jest": "^29.7.0",
"dotenv": "^16.3.1", "dotenv": "^16.3.1",
"dotenv-cli": "^7.3.0", "dotenv-cli": "^7.3.0",
"eslint": "^8.54.0", "eslint": "^8.54.0",
"eslint-config-next": "^14.0.0", "eslint-config-next": "^14.0.4",
"eslint-plugin-import": "^2.29.0", "eslint-plugin-import": "^2.29.0",
"husky": "^8.0.3", "husky": "^8.0.3",
"identity-obj-proxy": "^3.0.0", "identity-obj-proxy": "^3.0.0",
"jest": "^29.7.0", "jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0", "jest-environment-jsdom": "^29.7.0",
"lint-staged": "^15.0.1", "lint-staged": "^15.2.0",
"prettier": "^3.0.3", "prettier": "^3.0.3",
"prettier-plugin-tailwindcss": "^0.5.6", "prettier-plugin-tailwindcss": "^0.5.6",
"shelljs": "^0.8.5", "shelljs": "^0.8.5",

View File

@ -61,3 +61,4 @@ export const allParamsCache: Cache<AssetParamsBaseForAddr[]> = new Map()
export const underlyingDebtCache: Cache<string> = new Map() export const underlyingDebtCache: Cache<string> = new Map()
export const previewDepositCache: Cache<{ vaultAddress: string; amount: string }> = new Map() export const previewDepositCache: Cache<{ vaultAddress: string; amount: string }> = new Map()
export const stakingAprCache: Cache<StakingApr[]> = new Map() export const stakingAprCache: Cache<StakingApr[]> = new Map()
export const assetParamsCache: Cache<AssetParamsBaseForAddr[]> = new Map()

View File

@ -1,11 +1,19 @@
import { assetParamsCache, cacheFn } from 'api/cache'
import { getParamsQueryClient } from 'api/cosmwasm-client' import { getParamsQueryClient } from 'api/cosmwasm-client'
import { AssetParamsBaseForAddr } from 'types/generated/mars-params/MarsParams.types' import { AssetParamsBaseForAddr } from 'types/generated/mars-params/MarsParams.types'
import iterateContractQuery from 'utils/iterateContractQuery' import iterateContractQuery from 'utils/iterateContractQuery'
export default async function getAssetParams(): Promise<AssetParamsBaseForAddr[]> { export default async function getAssetParams(): Promise<AssetParamsBaseForAddr[]> {
try { try {
const paramsQueryClient = await getParamsQueryClient() return await cacheFn(
return iterateContractQuery(paramsQueryClient.allAssetParams) async () => {
const paramsQueryClient = await getParamsQueryClient()
return iterateContractQuery(paramsQueryClient.allAssetParams)
},
assetParamsCache,
'assetParams',
600,
)
} catch (ex) { } catch (ex) {
throw ex throw ex
} }

View File

@ -62,7 +62,7 @@ async function getVaultPositionStatusAndUnlockIdAndUnlockTime(
} }
} }
function flatVaultPositionAmount( export function flatVaultPositionAmount(
vaultPositionAmount: VaultPositionAmount, vaultPositionAmount: VaultPositionAmount,
): VaultPositionFlatAmounts { ): VaultPositionFlatAmounts {
const amounts = { const amounts = {
@ -82,7 +82,7 @@ function flatVaultPositionAmount(
return amounts return amounts
} }
async function getLpTokensForVaultPosition( export async function getLpTokensForVaultPosition(
vault: Vault, vault: Vault,
vaultPosition: VaultPosition, vaultPosition: VaultPosition,
): Promise<Coin[]> { ): Promise<Coin[]> {

View File

@ -1,7 +1,7 @@
import AssetRate from 'components/Asset/AssetRate' import AssetRate from 'components/Asset/AssetRate'
import { byDenom } from 'utils/array' import { byDenom } from 'utils/array'
export const APY_META = { accessorKey: 'apy', header: 'APY' } export const APY_META = { accessorKey: 'apy', header: 'APY', meta: { className: 'w-30' } }
interface Props { interface Props {
apy: number apy: number

View File

@ -0,0 +1,67 @@
import { useEffect, useMemo, useState } from 'react'
import DisplayCurrency from 'components/DisplayCurrency'
import { InfoCircle } from 'components/Icons'
import Text from 'components/Text'
import { Tooltip } from 'components/Tooltip'
import useLiquidationPrice from 'hooks/useLiquidationPrice'
import { BNCoin } from 'types/classes/BNCoin'
import { LiquidationPriceKind } from 'utils/health_computer'
import { BN } from 'utils/helpers'
export const LIQ_META = {
accessorKey: 'symbol',
header: 'Liquidation Price',
id: 'liqPrice',
meta: { className: 'w-40' },
}
interface Props {
amount: number
computeLiquidationPrice: (denom: string, kind: LiquidationPriceKind) => number | null
denom: string
type: 'deposits' | 'borrowing' | 'lending' | 'vault'
account: Account
}
export default function LiqPrice(props: Props) {
const { denom, type, amount, account, computeLiquidationPrice } = props
const [lastLiquidationPrice, setLastLiquidationPrice] = useState<number | null>(null)
const hasDebt = account.debts.length > 0
const liqPrice = useMemo(() => {
if (type === 'vault' || amount === 0) return 0
return computeLiquidationPrice(denom, type === 'borrowing' ? 'debt' : 'asset')
}, [amount, computeLiquidationPrice, denom, type])
const { liquidationPrice } = useLiquidationPrice(liqPrice)
useEffect(() => {
if (lastLiquidationPrice !== liqPrice && liqPrice !== null) setLastLiquidationPrice(liqPrice)
}, [liqPrice, lastLiquidationPrice])
const tooltipText = useMemo(() => {
if (type === 'vault')
return 'Liquidation prices cannot be calculated for farm positions. But it a drop in price of the underlying assets can still cause a liquidation.'
if (!hasDebt) return 'Your position cannot be liquidated as you currently have no debt.'
return 'The position size is too small to liquidate the account, even if the price goes to $0.00.'
}, [type, hasDebt])
if (!lastLiquidationPrice || (liquidationPrice === 0 && lastLiquidationPrice === 0))
return (
<Text size='xs' className='flex items-center justify-end number'>
N/A
<Tooltip content={tooltipText} type='info' className='ml-1'>
<InfoCircle className='w-3.5 h-3.5 text-white/40 hover:text-inherit' />
</Tooltip>
</Text>
)
return (
<DisplayCurrency
className='text-xs text-right number'
coin={BNCoin.fromDenomAndBigNumber('usd', BN(lastLiquidationPrice))}
options={{ abbreviated: false }}
/>
)
}

View File

@ -0,0 +1,26 @@
import DisplayCurrency from 'components/DisplayCurrency'
import usePrice from 'hooks/usePrice'
import { BNCoin } from 'types/classes/BNCoin'
import { BN } from 'utils/helpers'
export const PRICE_META = { id: 'price', header: 'Price', meta: { className: 'w-30' } }
interface Props {
amount: number
denom: string
type: 'deposits' | 'borrowing' | 'lending' | 'vault'
}
export default function Price(props: Props) {
const price = usePrice(props.denom)
if (props.amount === 0 || props.type === 'vault') return null
return (
<DisplayCurrency
className='text-xs text-right number'
coin={BNCoin.fromDenomAndBigNumber('usd', BN(price))}
options={{ abbreviated: false }}
/>
)
}

View File

@ -6,7 +6,7 @@ import { FormattedNumber } from 'components/FormattedNumber'
import { MAX_AMOUNT_DECIMALS, MIN_AMOUNT } from 'constants/math' import { MAX_AMOUNT_DECIMALS, MIN_AMOUNT } from 'constants/math'
import { formatAmountToPrecision } from 'utils/formatters' import { formatAmountToPrecision } from 'utils/formatters'
export const SIZE_META = { accessorKey: 'size', header: 'Size' } export const SIZE_META = { accessorKey: 'size', header: 'Size', meta: { className: 'w-40' } }
interface Props { interface Props {
size: number size: number

View File

@ -1,8 +1,10 @@
import { ColumnDef } from '@tanstack/react-table' import { ColumnDef, Row } from '@tanstack/react-table'
import { useMemo } from 'react' import { useMemo } from 'react'
import Apy, { APY_META } from 'components/Account/AccountBalancesTable/Columns/Apy' import Apy, { APY_META } from 'components/Account/AccountBalancesTable/Columns/Apy'
import Asset, { ASSET_META } from 'components/Account/AccountBalancesTable/Columns/Asset' import Asset, { ASSET_META } from 'components/Account/AccountBalancesTable/Columns/Asset'
import LiqPrice, { LIQ_META } from 'components/Account/AccountBalancesTable/Columns/LiqPrice'
import Price, { PRICE_META } from 'components/Account/AccountBalancesTable/Columns/Price'
import Size, { import Size, {
SIZE_META, SIZE_META,
sizeSortingFn, sizeSortingFn,
@ -11,10 +13,18 @@ import Value, {
VALUE_META, VALUE_META,
valueSortingFn, valueSortingFn,
} from 'components/Account/AccountBalancesTable/Columns/Value' } from 'components/Account/AccountBalancesTable/Columns/Value'
import useHealthComputer from 'hooks/useHealthComputer'
import useMarketAssets from 'hooks/useMarketAssets' import useMarketAssets from 'hooks/useMarketAssets'
import useStore from 'store'
export default function useAccountBalancesColumns() { export default function useAccountBalancesColumns(
account: Account,
showLiquidationPrice?: boolean,
) {
const { data: markets } = useMarketAssets() const { data: markets } = useMarketAssets()
const updatedAccount = useStore((s) => s.updatedAccount)
const { computeLiquidationPrice } = useHealthComputer(updatedAccount ?? account)
return useMemo<ColumnDef<AccountBalanceRow>[]>(() => { return useMemo<ColumnDef<AccountBalanceRow>[]>(() => {
return [ return [
@ -46,6 +56,37 @@ export default function useAccountBalancesColumns() {
), ),
sortingFn: sizeSortingFn, sortingFn: sizeSortingFn,
}, },
...(showLiquidationPrice
? [
{
...PRICE_META,
cell: ({ row }: { row: Row<AccountBalanceRow> }) => (
<Price
type={row.original.type}
amount={row.original.amount.toNumber()}
denom={row.original.denom}
/>
),
},
]
: []),
...(showLiquidationPrice
? [
{
...LIQ_META,
enableSorting: false,
cell: ({ row }: { row: Row<AccountBalanceRow> }) => (
<LiqPrice
denom={row.original.denom}
computeLiquidationPrice={computeLiquidationPrice}
type={row.original.type}
amount={row.original.amount.toNumber()}
account={updatedAccount ?? account}
/>
),
},
]
: []),
{ {
...APY_META, ...APY_META,
cell: ({ row }) => ( cell: ({ row }) => (
@ -58,5 +99,5 @@ export default function useAccountBalancesColumns() {
), ),
}, },
] ]
}, [markets]) }, [computeLiquidationPrice, markets, showLiquidationPrice, account, updatedAccount])
} }

View File

@ -1,5 +1,5 @@
import classNames from 'classnames' import classNames from 'classnames'
import { useLocation, useNavigate } from 'react-router-dom' import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import useAccountBalancesColumns from 'components/Account/AccountBalancesTable/Columns/useAccountBalancesColumns' import useAccountBalancesColumns from 'components/Account/AccountBalancesTable/Columns/useAccountBalancesColumns'
import useAccountBalanceData from 'components/Account/AccountBalancesTable/useAccountBalanceData' import useAccountBalanceData from 'components/Account/AccountBalancesTable/useAccountBalanceData'
@ -19,10 +19,19 @@ interface Props {
borrowingData: BorrowMarketTableData[] borrowingData: BorrowMarketTableData[]
hideCard?: boolean hideCard?: boolean
tableBodyClassName?: string tableBodyClassName?: string
showLiquidationPrice?: boolean
} }
export default function AccountBalancesTable(props: Props) { export default function AccountBalancesTable(props: Props) {
const { account, lendingData, borrowingData, tableBodyClassName, hideCard } = props const [searchParams] = useSearchParams()
const {
account,
lendingData,
borrowingData,
tableBodyClassName,
hideCard,
showLiquidationPrice,
} = props
const currentAccount = useCurrentAccount() const currentAccount = useCurrentAccount()
const navigate = useNavigate() const navigate = useNavigate()
const { pathname } = useLocation() const { pathname } = useLocation()
@ -36,7 +45,7 @@ export default function AccountBalancesTable(props: Props) {
isHls: props.isHls, isHls: props.isHls,
}) })
const columns = useAccountBalancesColumns() const columns = useAccountBalancesColumns(account, showLiquidationPrice)
if (accountBalanceData.length === 0) if (accountBalanceData.length === 0)
return ( return (
@ -55,7 +64,7 @@ export default function AccountBalancesTable(props: Props) {
color='tertiary' color='tertiary'
onClick={() => { onClick={() => {
if (currentAccount?.id !== account.id) { if (currentAccount?.id !== account.id) {
navigate(getRoute(getPage(pathname), address, account.id)) navigate(getRoute(getPage(pathname), searchParams, address, account.id))
} }
useStore.setState({ useStore.setState({
focusComponent: { focusComponent: {

View File

@ -1,5 +1,5 @@
import { useCallback, useEffect } from 'react' import { useCallback, useEffect } from 'react'
import { useLocation, useNavigate } from 'react-router-dom' import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import AccountFundFullPage from 'components/Account/AccountFund/AccountFundFullPage' import AccountFundFullPage from 'components/Account/AccountFund/AccountFundFullPage'
import FullOverlayContent from 'components/FullOverlayContent' import FullOverlayContent from 'components/FullOverlayContent'
@ -14,6 +14,7 @@ export default function AccountCreateFirst() {
const address = useStore((s) => s.address) const address = useStore((s) => s.address)
const createAccount = useStore((s) => s.createAccount) const createAccount = useStore((s) => s.createAccount)
const [isCreating, setIsCreating] = useToggle(false) const [isCreating, setIsCreating] = useToggle(false)
const [searchParams] = useSearchParams()
useEffect(() => { useEffect(() => {
if (!address) useStore.setState({ focusComponent: { component: <WalletSelect /> } }) if (!address) useStore.setState({ focusComponent: { component: <WalletSelect /> } })
@ -24,7 +25,7 @@ export default function AccountCreateFirst() {
const accountId = await createAccount('default') const accountId = await createAccount('default')
setIsCreating(false) setIsCreating(false)
if (accountId) { if (accountId) {
navigate(getRoute(getPage(pathname), address, accountId)) navigate(getRoute(getPage(pathname), searchParams, address, accountId))
useStore.setState({ useStore.setState({
focusComponent: { focusComponent: {
component: <AccountFundFullPage />, component: <AccountFundFullPage />,
@ -34,7 +35,7 @@ export default function AccountCreateFirst() {
}, },
}) })
} }
}, [createAccount, navigate, pathname, address, setIsCreating]) }, [setIsCreating, createAccount, navigate, pathname, searchParams, address])
return ( return (
<FullOverlayContent <FullOverlayContent

View File

@ -1,6 +1,6 @@
import classNames from 'classnames' import classNames from 'classnames'
import { useEffect } from 'react' import { useEffect } from 'react'
import { useLocation, useNavigate } from 'react-router-dom' import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import AccountStats from 'components/Account/AccountList/AccountStats' import AccountStats from 'components/Account/AccountList/AccountStats'
import Card from 'components/Card' import Card from 'components/Card'
@ -28,6 +28,7 @@ export default function AccountList(props: Props) {
const currentAccountId = useAccountId() const currentAccountId = useAccountId()
const address = useStore((s) => s.address) const address = useStore((s) => s.address)
const { data: accountIds } = useAccountIds(address, true, true) const { data: accountIds } = useAccountIds(address, true, true)
const [searchParams] = useSearchParams()
useEffect(() => { useEffect(() => {
if (!currentAccountId) return if (!currentAccountId) return
@ -54,7 +55,7 @@ export default function AccountList(props: Props) {
onClick={() => { onClick={() => {
if (isActive) return if (isActive) return
useStore.setState({ accountDeleteModal: null }) useStore.setState({ accountDeleteModal: null })
navigate(getRoute(getPage(pathname), address, accountId)) navigate(getRoute(getPage(pathname), searchParams, address, accountId))
}} }}
title={ title={
<div className={accountCardHeaderClasses} role={!isActive ? 'button' : undefined}> <div className={accountCardHeaderClasses} role={!isActive ? 'button' : undefined}>

View File

@ -1,6 +1,6 @@
import classNames from 'classnames' import classNames from 'classnames'
import { useCallback } from 'react' import { useCallback } from 'react'
import { useLocation, useNavigate } from 'react-router-dom' import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import AccountCreateFirst from 'components/Account/AccountCreateFirst' import AccountCreateFirst from 'components/Account/AccountCreateFirst'
import AccountFund from 'components/Account/AccountFund/AccountFundFullPage' import AccountFund from 'components/Account/AccountFund/AccountFundFullPage'
@ -33,6 +33,7 @@ export default function AccountMenuContent() {
const address = useStore((s) => s.address) const address = useStore((s) => s.address)
const { data: accountIds } = useAccountIds(address, true, true) const { data: accountIds } = useAccountIds(address, true, true)
const accountId = useAccountId() const accountId = useAccountId()
const [searchParams] = useSearchParams()
const createAccount = useStore((s) => s.createAccount) const createAccount = useStore((s) => s.createAccount)
const baseCurrency = useStore((s) => s.baseCurrency) const baseCurrency = useStore((s) => s.baseCurrency)
@ -63,7 +64,7 @@ export default function AccountMenuContent() {
setIsCreating(false) setIsCreating(false)
if (accountId) { if (accountId) {
navigate(getRoute(getPage(pathname), address, accountId)) navigate(getRoute(getPage(pathname), searchParams, address, accountId))
if (lendAssets) enableAutoLendAccountId(accountId) if (lendAssets) enableAutoLendAccountId(accountId)
useStore.setState({ useStore.setState({
focusComponent: { focusComponent: {
@ -80,6 +81,7 @@ export default function AccountMenuContent() {
createAccount, createAccount,
navigate, navigate,
pathname, pathname,
searchParams,
address, address,
lendAssets, lendAssets,
enableAutoLendAccountId, enableAutoLendAccountId,

View File

@ -0,0 +1,16 @@
import Text from 'components/Text'
interface Props {
symbol: string
}
export default function AssetSymbol(props: Props) {
return (
<Text
size='xs'
tag='span'
className='rounded-sm bg-white/10 text-white/50 px-[6px] py-[2px] h-5'
>
{props.symbol}
</Text>
)
}

View File

@ -0,0 +1,59 @@
import classNames from 'classnames'
import Text from 'components/Text'
interface Props {
direction: OrderDirection
onChangeDirection: (direction: OrderDirection) => void
asset?: Asset
}
export function DirectionSelect(props: Props) {
const hasAsset = props.asset
const directions: OrderDirection[] = hasAsset ? ['buy', 'sell'] : ['long', 'short']
return (
<div className='flex rounded-sm bg-black/20'>
<Direction
onClick={() => props.onChangeDirection(directions[0])}
direction={directions[0]}
isActive={props.direction === directions[0]}
asset={props.asset}
/>
<Direction
onClick={() => props.onChangeDirection(directions[1])}
direction={directions[1]}
isActive={props.direction === directions[1]}
asset={props.asset}
/>
</div>
)
}
interface DirectionProps {
direction: 'long' | 'short' | 'buy' | 'sell'
isActive: boolean
onClick: () => void
asset?: Asset
}
function Direction(props: DirectionProps) {
const classString = props.direction === 'long' || props.direction === 'buy' ? 'success' : 'error'
return (
<button
className={classNames(
'px-4 py-3 rounded-sm flex-1',
props.isActive && 'border bg-white/10',
`border-${classString}`,
)}
onClick={props.onClick}
>
<Text
className={classNames(
'text-center first-letter:uppercase',
props.isActive ? `text-${classString}` : 'text-white/20',
)}
>
{props.asset ? `${props.direction} ${props.asset.symbol}` : props.direction}
</Text>
</button>
)
}

View File

@ -6,8 +6,13 @@ interface Props {
} }
export default function Divider(props: Props) { export default function Divider(props: Props) {
if (props.orientation === 'vertical') { return (
return <div className={classNames(props.className, 'h-full w-[1px] bg-white/10')}></div> <div
} className={classNames(
return <div className={classNames('h-[1px] w-full bg-white/10', props.className)}></div> props.orientation === 'vertical' ? 'h-full w-[1px]' : 'h-[1px] w-full',
props.className,
'bg-white/10',
)}
></div>
)
} }

View File

@ -1,5 +1,5 @@
import classNames from 'classnames' import classNames from 'classnames'
import { NavLink, useParams } from 'react-router-dom' import { NavLink, useParams, useSearchParams } from 'react-router-dom'
import useAccountId from 'hooks/useAccountId' import useAccountId from 'hooks/useAccountId'
import { getRoute } from 'utils/route' import { getRoute } from 'utils/route'
@ -15,13 +15,14 @@ interface Props {
export default function Tab(props: Props) { export default function Tab(props: Props) {
const accountId = useAccountId() const accountId = useAccountId()
const { address } = useParams() const { address } = useParams()
const [searchParams] = useSearchParams()
return ( return (
<div className='relative w-full'> <div className='relative w-full'>
{props.tabs.map((tab, index) => ( {props.tabs.map((tab, index) => (
<NavLink <NavLink
key={tab.page} key={tab.page}
to={getRoute(tab.page, address, accountId)} to={getRoute(tab.page, searchParams, address, accountId)}
className={classNames( className={classNames(
props.activeTabIdx === index ? underlineClasses : 'text-white/40', props.activeTabIdx === index ? underlineClasses : 'text-white/40',
'relative mr-8 text-xl ', 'relative mr-8 text-xl ',

View File

@ -15,9 +15,9 @@ export const depositCapSortingFn = (
} }
interface Props { interface Props {
account: HLSAccountWithStrategy depositCap: DepositCap
} }
export default function Name(props: Props) { export default function DepositCap(props: Props) {
return <DepositCapCell depositCap={props.account.strategy.depositCap} /> return <DepositCapCell depositCap={props.depositCap} />
} }

View File

@ -6,6 +6,7 @@ import ApyRange, {
APY_RANGE_META, APY_RANGE_META,
apyRangeSortingFn, apyRangeSortingFn,
} from 'components/HLS/Staking/Table/Columns/ApyRange' } from 'components/HLS/Staking/Table/Columns/ApyRange'
import DepositCap, { CAP_META } from 'components/HLS/Staking/Table/Columns/DepositCap'
import MaxLeverage, { MAX_LEV_META } from 'components/HLS/Staking/Table/Columns/MaxLeverage' 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 MaxLTV, { LTV_MAX_META } from 'components/HLS/Staking/Table/Columns/MaxLTV'
import Name, { NAME_META } from 'components/HLS/Staking/Table/Columns/Name' import Name, { NAME_META } from 'components/HLS/Staking/Table/Columns/Name'
@ -31,6 +32,10 @@ export default function useAvailableColumns(props: Props) {
<MaxLTV strategy={row.original as HLSStrategy} isLoading={props.isLoading} /> <MaxLTV strategy={row.original as HLSStrategy} isLoading={props.isLoading} />
), ),
}, },
{
...CAP_META,
cell: ({ row }) => <DepositCap depositCap={row.original.depositCap} />,
},
{ {
...APY_RANGE_META, ...APY_RANGE_META,
cell: ({ row }) => ( cell: ({ row }) => (

View File

@ -57,7 +57,7 @@ export default function useDepositedColumns(props: Props) {
}, },
{ {
...CAP_META, ...CAP_META,
cell: ({ row }) => <DepositCap account={row.original} />, cell: ({ row }) => <DepositCap depositCap={row.original.strategy.depositCap} />,
sortingFn: depositCapSortingFn, sortingFn: depositCapSortingFn,
}, },
{ {

View File

@ -4,18 +4,36 @@ import { isDesktop } from 'react-device-detect'
import AccountMenu from 'components/Account/AccountMenu' import AccountMenu from 'components/Account/AccountMenu'
import EscButton from 'components/Button/EscButton' import EscButton from 'components/Button/EscButton'
import OracleResyncButton from 'components/Header/OracleResyncButton' import OracleResyncButton from 'components/Header/OracleResyncButton'
import { Coins, CoinsSwap } from 'components/Icons'
import DesktopNavigation from 'components/Navigation/DesktopNavigation' import DesktopNavigation from 'components/Navigation/DesktopNavigation'
import RewardsCenter from 'components/RewardsCenter' import RewardsCenter from 'components/RewardsCenter'
import Settings from 'components/Settings' import Settings from 'components/Settings'
import Wallet from 'components/Wallet' import Wallet from 'components/Wallet'
import useAccountId from 'hooks/useAccountId' import useAccountId from 'hooks/useAccountId'
import useStore from 'store' import useStore from 'store'
import { ENABLE_HLS, ENABLE_PERPS } from 'utils/constants'
import { WalletID } from 'types/enums/wallet' import { WalletID } from 'types/enums/wallet'
import { ENABLE_HLS, ENABLE_PERPS } from 'utils/constants'
import { getGovernanceUrl } from 'utils/helpers' import { getGovernanceUrl } from 'utils/helpers'
export const menuTree = (walletId: WalletID): MenuTreeEntry[] => [ export const menuTree = (walletId: WalletID): MenuTreeEntry[] => [
{ pages: ['trade'], label: 'Trade' }, {
pages: ['trade', 'trade-advanced'],
label: 'Trade',
submenu: [
{
page: 'trade',
label: 'Spot',
subtitle: 'Trade assets against stables',
icon: <Coins className='w-6 h-6' />,
},
{
page: 'trade-advanced',
label: 'Spot Advanced',
subtitle: 'Trade any assets',
icon: <CoinsSwap className='w-6 h-6' />,
},
],
},
...(ENABLE_PERPS ? [{ pages: ['perps'] as Page[], label: 'Perps' }] : []), ...(ENABLE_PERPS ? [{ pages: ['perps'] as Page[], label: 'Perps' }] : []),
{ pages: ['lend', 'farm'], label: 'Earn' }, { pages: ['lend', 'farm'], label: 'Earn' },
{ pages: ['borrow'], label: 'Borrow' }, { pages: ['borrow'], label: 'Borrow' },

View File

@ -0,0 +1,6 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M15.9377 15.9377C19.3603 15.4795 22 12.548 22 9C22 5.13401 18.866 2 15 2C11.452 2 8.52049 4.63967 8.06227 8.06227M16 15C16 18.866 12.866 22 9 22C5.13401 22 2 18.866 2 15C2 11.134 5.13401 8 9 8C12.866 8 16 11.134 16 15Z"
stroke="currentColor"
/>
</svg>

After

Width:  |  Height:  |  Size: 346 B

View File

@ -0,0 +1,8 @@
<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M6 6L8 4M8 4L6 2M8 4H6C3.79086 4 2 5.79086 2 8M18 18L16 20M16 20L18 22M16 20H18C20.2091 20 22 18.2091 22 16M10.189 6.5C10.8551 3.91216 13.2042 2 16 2C19.3137 2 22 4.68629 22 8C22 10.7957 20.0879 13.1449 17.5001 13.811M14 16C14 19.3137 11.3137 22 8 22C4.68629 22 2 19.3137 2 16C2 12.6863 4.68629 10 8 10C11.3137 10 14 12.6863 14 16Z"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>

After

Width:  |  Height:  |  Size: 514 B

View File

@ -15,6 +15,8 @@ export { default as ChevronLeft } from 'components/Icons/ChevronLeft.svg'
export { default as ChevronRight } from 'components/Icons/ChevronRight.svg' export { default as ChevronRight } from 'components/Icons/ChevronRight.svg'
export { default as ChevronUp } from 'components/Icons/ChevronUp.svg' export { default as ChevronUp } from 'components/Icons/ChevronUp.svg'
export { default as Circle } from 'components/Icons/Circle.svg' export { default as Circle } from 'components/Icons/Circle.svg'
export { default as Coins } from 'components/Icons/Coins.svg'
export { default as CoinsSwap } from 'components/Icons/CoinsSwap.svg'
export { default as Compass } from 'components/Icons/Compass.svg' export { default as Compass } from 'components/Icons/Compass.svg'
export { default as Copy } from 'components/Icons/Copy.svg' export { default as Copy } from 'components/Icons/Copy.svg'
export { default as Cross } from 'components/Icons/Cross.svg' export { default as Cross } from 'components/Icons/Cross.svg'

View File

@ -1,5 +1,5 @@
import { useCallback, useMemo } from 'react' import { useCallback, useMemo } from 'react'
import { useLocation, useNavigate, useParams } from 'react-router-dom' import { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'
import AssetBalanceRow from 'components/Asset/AssetBalanceRow' import AssetBalanceRow from 'components/Asset/AssetBalanceRow'
import { ArrowRight, ExclamationMarkCircled } from 'components/Icons' import { ArrowRight, ExclamationMarkCircled } from 'components/Icons'
@ -30,6 +30,7 @@ function AccountDeleteModal(props: Props) {
const { pathname } = useLocation() const { pathname } = useLocation()
const { address } = useParams() const { address } = useParams()
const { debts, vaults, id: accountId } = modal || {} const { debts, vaults, id: accountId } = modal || {}
const [searchParams] = useSearchParams()
const closeDeleteAccountModal = useCallback(() => { const closeDeleteAccountModal = useCallback(() => {
useStore.setState({ accountDeleteModal: null }) useStore.setState({ accountDeleteModal: null })
@ -38,9 +39,18 @@ function AccountDeleteModal(props: Props) {
const deleteAccountHandler = useCallback(() => { const deleteAccountHandler = useCallback(() => {
const options = { accountId: modal.id, lends: modal.lends } const options = { accountId: modal.id, lends: modal.lends }
deleteAccount(options) deleteAccount(options)
navigate(getRoute(getPage(pathname), address)) navigate(getRoute(getPage(pathname), searchParams, address))
closeDeleteAccountModal() closeDeleteAccountModal()
}, [modal, deleteAccount, navigate, pathname, address, closeDeleteAccountModal]) }, [
modal.id,
modal.lends,
deleteAccount,
navigate,
pathname,
searchParams,
address,
closeDeleteAccountModal,
])
const depositsAndLends = useMemo( const depositsAndLends = useMemo(
() => combineBNCoins([...modal.deposits, ...modal.lends]), () => combineBNCoins([...modal.deposits, ...modal.lends]),
@ -58,7 +68,7 @@ function AccountDeleteModal(props: Props) {
text: 'Repay Debts', text: 'Repay Debts',
icon: <ArrowRight />, icon: <ArrowRight />,
onClick: () => { onClick: () => {
navigate(getRoute('borrow', address, accountId)) navigate(getRoute('borrow', searchParams, address, accountId))
closeDeleteAccountModal() closeDeleteAccountModal()
}, },
}} }}
@ -75,7 +85,7 @@ function AccountDeleteModal(props: Props) {
text: 'Close Positions', text: 'Close Positions',
icon: <ArrowRight />, icon: <ArrowRight />,
onClick: () => { onClick: () => {
navigate(getRoute('farm', address, accountId)) navigate(getRoute('farm', searchParams, address, accountId))
closeDeleteAccountModal() closeDeleteAccountModal()
}, },
}} }}

View File

@ -6,28 +6,24 @@ import Button from 'components/Button'
import { menuTree } from 'components/Header/DesktopHeader' import { menuTree } from 'components/Header/DesktopHeader'
import { ChevronDown, Logo } from 'components/Icons' import { ChevronDown, Logo } from 'components/Icons'
import { NavLink } from 'components/Navigation/NavLink' import { NavLink } from 'components/Navigation/NavLink'
import useAccountId from 'hooks/useAccountId' import { NavMenu } from 'components/Navigation/NavMenu'
import useToggle from 'hooks/useToggle' import useToggle from 'hooks/useToggle'
import useStore from 'store' import useStore from 'store'
import { WalletID } from 'types/enums/wallet' import { WalletID } from 'types/enums/wallet'
import { getRoute } from 'utils/route'
export function getIsActive(pages: string[]) {
const segments = location.pathname.split('/')
return pages.some((page) => segments.includes(page))
}
export default function DesktopNavigation() { export default function DesktopNavigation() {
const [showMenu, setShowMenu] = useToggle() const [showMenu, setShowMenu] = useToggle()
const { recentWallet } = useShuttle() const { recentWallet } = useShuttle()
const walletId = (recentWallet?.providerId as WalletID) ?? WalletID.Keplr const walletId = (recentWallet?.providerId as WalletID) ?? WalletID.Keplr
const address = useStore((s) => s.address)
const accountId = useAccountId()
const focusComponent = useStore((s) => s.focusComponent) const focusComponent = useStore((s) => s.focusComponent)
const menu = useMemo(() => menuTree(walletId), [walletId]) const menu = useMemo(() => menuTree(walletId), [walletId])
function getIsActive(pages: string[]) {
const segments = location.pathname.split('/')
return pages.some((page) => segments.includes(page))
}
return ( return (
<div <div
className={classNames( className={classNames(
@ -36,29 +32,29 @@ export default function DesktopNavigation() {
: 'flex flex-1 items-center relative z-50', : 'flex flex-1 items-center relative z-50',
)} )}
> >
<NavLink href={getRoute('trade', address, accountId)}> <NavLink isHome item={menu[0]}>
<span className='block w-10 h-10'> <span className='block w-10 h-10'>
<Logo className='text-white' /> <Logo className='text-white' />
</span> </span>
</NavLink> </NavLink>
{!focusComponent && ( {!focusComponent && (
<div className='flex gap-8 px-6 @container/navigation relative flex-1'> <div className='flex gap-8 px-6 h-6 @container/navigation relative flex-1'>
{menu.map((item, index) => ( {menu.map((item, index) =>
<NavLink item.submenu ? (
key={index} <NavMenu key={index} item={item} />
href={ ) : (
item.externalUrl ? item.externalUrl : getRoute(item.pages[0], address, accountId) <NavLink
} key={index}
isActive={getIsActive(item.pages)} item={item}
className={`@nav-${index}/navigation:inline-block hidden whitespace-nowrap`} className={`@nav-${index}/navigation:inline-block hidden whitespace-nowrap`}
target={item.externalUrl ? '_blank' : undefined} >
> {item.label}
{item.label} </NavLink>
</NavLink> ),
))} )}
<div className={`@nav-${menu.length - 1}/navigation:hidden flex items-center relative`}> <div className={`@nav-${menu.length - 1}/navigation:hidden flex items-center relative`}>
<Button <Button
leftIcon={<ChevronDown />} leftIcon={<ChevronDown className='w-3' />}
color='quaternary' color='quaternary'
variant='transparent' variant='transparent'
onClick={() => setShowMenu(!showMenu)} onClick={() => setShowMenu(!showMenu)}
@ -81,15 +77,9 @@ export default function DesktopNavigation() {
key={index} key={index}
> >
<NavLink <NavLink
href={ item={item}
item.externalUrl
? item.externalUrl
: getRoute(item.pages[0], address, accountId)
}
onClick={() => setShowMenu(false)} onClick={() => setShowMenu(false)}
isActive={getIsActive(item.pages)}
className='w-full px-4 whitespace-nowrap' className='w-full px-4 whitespace-nowrap'
target={item.externalUrl ? '_blank' : undefined}
> >
{item.label} {item.label}
</NavLink> </NavLink>

View File

@ -1,27 +1,41 @@
import classNames from 'classnames' import classNames from 'classnames'
import { ReactNode } from 'react' import { ReactNode } from 'react'
import { NavLink as Link } from 'react-router-dom' import { NavLink as Link, useSearchParams } from 'react-router-dom'
import { getIsActive } from 'components/Navigation/DesktopNavigation'
import useAccountId from 'hooks/useAccountId'
import useStore from 'store'
import { getRoute } from 'utils/route'
interface Props { interface Props {
href: string
children: string | ReactNode children: string | ReactNode
isActive?: boolean item: MenuTreeEntry
isHome?: boolean
className?: string className?: string
onClick?: () => void onClick?: () => void
target?: string
} }
export const NavLink = (props: Props) => { export const NavLink = (props: Props) => {
const [searchParams] = useSearchParams()
const address = useStore((s) => s.address)
const { isHome, item, className, onClick } = props
const accountId = useAccountId()
const itemLink = item.externalUrl
? item.externalUrl
: getRoute(item.pages[0], searchParams, address, accountId)
const link = isHome ? getRoute('trade', searchParams, address, accountId) : itemLink
return ( return (
<Link <Link
to={props.href} to={link}
onClick={props.onClick ? props.onClick : undefined} onClick={onClick ? onClick : undefined}
className={classNames( className={classNames(
props.className, className,
'font-semibold hover:text-white active:text-white', 'font-semibold hover:text-white active:text-white',
props.isActive ? 'pointer-events-none text-white' : 'text-white/60', getIsActive(item.pages) ? 'pointer-events-none text-white' : 'text-white/60',
)} )}
target={props.target} target={item.externalUrl ? '_blank' : undefined}
> >
{props.children} {props.children}
</Link> </Link>

View File

@ -0,0 +1,80 @@
import classNames from 'classnames'
import Button from 'components/Button'
import Divider from 'components/Divider'
import { ChevronDown } from 'components/Icons'
import { NavLink } from 'components/Navigation//NavLink'
import { getIsActive } from 'components/Navigation/DesktopNavigation'
import Text from 'components/Text'
import useToggle from 'hooks/useToggle'
interface Props {
item: MenuTreeEntry
}
export const NavMenu = (props: Props) => {
const { item } = props
const [showMenu, setShowMenu] = useToggle()
if (!item.submenu) return null
return (
<div className='relative flex items-center'>
<Button
rightIcon={<ChevronDown className='w-3' />}
color='quaternary'
variant='transparent'
onClick={() => setShowMenu(!showMenu)}
text={item.label}
className={classNames(
'!text-base !p-0 !min-h-0',
(getIsActive(item.pages) || showMenu) && '!text-white',
)}
/>
{showMenu && (
<>
<div className='absolute left-0 top-[calc(100%+4px)] z-50'>
<ul
className={classNames(
'py-4 list-none flex flex-wrap gap-2 bg-white/10 backdrop-blur-lg',
'relative isolate max-w-full overflow-hidden rounded-sm',
'before:content-[" "] before:absolute before:inset-0 before:-z-1 before:rounded-sm before:p-[1px] before:border-glas',
)}
>
{item.submenu.map((submenuitem, index) => (
<li className='w-full m-0 group/submenuitem' key={index}>
{index !== 0 && <Divider className='mb-2' />}
<NavLink
item={{ pages: [submenuitem.page], label: submenuitem.label }}
onClick={() => setShowMenu(false)}
className='flex items-center w-full gap-4 px-4 whitespace-nowrap'
>
{submenuitem.icon && <div className='w-6'>{submenuitem.icon}</div>}
<Text className='flex flex-wrap'>
{submenuitem.label}
{submenuitem.subtitle && (
<span
className={classNames(
'w-full text-sm group-hover/submenuitem:text-white',
getIsActive([submenuitem.page]) ? 'text-white' : 'text-white/40',
)}
>
{submenuitem.subtitle}
</span>
)}
</Text>
</NavLink>
</li>
))}
</ul>
</div>
<div
className='fixed -top-6 -left-[55px] z-40 w-screen h-screen hover:cursor-pointer'
onClick={() => setShowMenu(false)}
role='button'
/>
</>
)}
</div>
)
}

View File

@ -2,10 +2,10 @@ import { useState } from 'react'
import Button from 'components/Button' import Button from 'components/Button'
import Card from 'components/Card' import Card from 'components/Card'
import { DirectionSelect } from 'components/DirectionSelect'
import { ChevronDown } from 'components/Icons' import { ChevronDown } from 'components/Icons'
import { LeverageButtons } from 'components/Perps/Module/LeverageButtons' import { LeverageButtons } from 'components/Perps/Module/LeverageButtons'
import { Or } from 'components/Perps/Module/Or' import { Or } from 'components/Perps/Module/Or'
import { SelectLongShort } from 'components/Perps/Module/SelectLongShort'
import RangeInput from 'components/RangeInput' import RangeInput from 'components/RangeInput'
import { Spacer } from 'components/Spacer' import { Spacer } from 'components/Spacer'
import Text from 'components/Text' import Text from 'components/Text'
@ -23,7 +23,7 @@ export function PerpsModule() {
<Card <Card
contentClassName='px-4 gap-5 flex flex-col' contentClassName='px-4 gap-5 flex flex-col'
title={ title={
<div className='flex justify-between bg-white/10 py-4 pl-4 pr-2 items-center'> <div className='flex items-center justify-between py-4 pl-4 pr-2 bg-white/10'>
<Text> <Text>
ETH<span className='text-white/60'>/USD</span> ETH<span className='text-white/60'>/USD</span>
</Text> </Text>
@ -35,7 +35,7 @@ export function PerpsModule() {
className='mb-4' className='mb-4'
> >
<OrderTypeSelector selected={selectedOrderType} onChange={setSelectedOrderType} /> <OrderTypeSelector selected={selectedOrderType} onChange={setSelectedOrderType} />
<SelectLongShort <DirectionSelect
direction={selectedOrderDirection} direction={selectedOrderDirection}
onChangeDirection={setSelectedOrderDirection} onChangeDirection={setSelectedOrderDirection}
/> />

View File

@ -1,62 +0,0 @@
import classNames from 'classnames'
import Text from 'components/Text'
interface Props {
direction: OrderDirection
onChangeDirection: (direction: OrderDirection) => void
}
export function SelectLongShort(props: Props) {
return (
<div className='flex bg-black/20 rounded-sm'>
<Direction
onClick={() => props.onChangeDirection('long')}
direction='long'
isActive={props.direction === 'long'}
/>
<Direction
onClick={() => props.onChangeDirection('short')}
direction='short'
isActive={props.direction === 'short'}
/>
</div>
)
}
interface DirectionProps {
direction: 'long' | 'short'
isActive: boolean
onClick: () => void
}
function Direction(props: DirectionProps) {
return (
<button
className={classNames(
'px-4 py-3 rounded-sm flex-1',
borderColors[props.direction],
props.isActive && 'border bg-white/10',
)}
onClick={props.onClick}
>
<Text
className={classNames(
'text-center capitalize',
props.isActive ? directionColors[props.direction] : 'text-white/20',
)}
>
{props.direction}
</Text>
</button>
)
}
const directionColors = {
long: 'text-success',
short: 'text-error',
}
const borderColors = {
long: 'border-success',
short: 'border-error',
}

View File

@ -1,19 +1,52 @@
import React, { useMemo } from 'react' import React, { useMemo } from 'react'
import AssetSymbol from 'components/Asset/AssetSymbol'
import Card from 'components/Card' import Card from 'components/Card'
import DisplayCurrency from 'components/DisplayCurrency'
import Divider from 'components/Divider' import Divider from 'components/Divider'
import { FormattedNumber } from 'components/FormattedNumber'
import Loading from 'components/Loading'
import Text from 'components/Text' import Text from 'components/Text'
import usePerpsMarket from 'hooks/perps/usePerpsMarket'
import usePrice from 'hooks/usePrice'
import { BNCoin } from 'types/classes/BNCoin'
export function PerpsInfo() { export function PerpsInfo() {
const { data: market } = usePerpsMarket()
const assetPrice = usePrice(market?.asset.denom || '')
const items = useMemo( const items = useMemo(
() => [ () => [
<Text key='item1'>$6,735</Text>, ...(!assetPrice.isZero()
<InfoItem key='item2' label='Label' item={<Text size='sm'>Value</Text>} />, ? [<DisplayCurrency key='price' coin={BNCoin.fromDenomAndBigNumber('usd', assetPrice)} />]
<InfoItem key='item3' label='Label' item={<Text size='sm'>Value</Text>} />, : [<Loading key='price' className='w-14 h-4' />]),
<InfoItem key='item4' label='Label' item={<Text size='sm'>Value</Text>} />, <InfoItem
<InfoItem key='item5' label='Label' item={<Text size='sm'>Value</Text>} />, key='openInterestLong'
label='Open Interest (L)'
item={<InterestItem market={market} type='long' />}
/>,
<InfoItem
key='openInterestShort'
label='Open Interest (S)'
item={<InterestItem market={market} type='short' />}
/>,
<InfoItem
key='fundingRate'
label='Funding rate'
item={
market ? (
<FormattedNumber
className='text-sm inline'
amount={market.fundingRate.toNumber()}
options={{ minDecimals: 6, maxDecimals: 6, suffix: '%' }}
/>
) : (
<Loading />
)
}
/>,
], ],
[], [assetPrice, market],
) )
return ( return (
@ -45,3 +78,22 @@ function InfoItem(props: InfoItemProps) {
</div> </div>
) )
} }
interface InterestItemProps {
market: PerpsMarket | null
type: 'long' | 'short'
}
function InterestItem(props: InterestItemProps) {
if (!props.market) return <Loading />
return (
<div className='flex gap-1 items-center'>
<FormattedNumber
className='text-sm inline'
amount={props.market.openInterest[props.type].toNumber()}
options={{ decimals: props.market.asset.decimals }}
/>
<AssetSymbol symbol={props.market.asset.symbol} />
</div>
)
}

View File

@ -29,6 +29,7 @@ function Content(props: Props) {
account={account} account={account}
borrowingData={borrowAssets} borrowingData={borrowAssets}
lendingData={lendingAssets} lendingData={lendingAssets}
showLiquidationPrice
hideCard hideCard
/> />
</Skeleton> </Skeleton>
@ -55,7 +56,10 @@ function Skeleton(props: SkeletonProps) {
{props.children ? ( {props.children ? (
props.children props.children
) : ( ) : (
<TableSkeleton labels={['Asset', 'Value', 'Size', 'APY']} rowCount={3} /> <TableSkeleton
labels={['Asset', 'Value', 'Size', 'Price', 'Liquidation Price', 'APY']}
rowCount={3}
/>
)} )}
</Card> </Card>
</div> </div>

View File

@ -1,4 +1,4 @@
import { NavLink, useParams } from 'react-router-dom' import { NavLink, useParams, useSearchParams } from 'react-router-dom'
import { ArrowRight } from 'components/Icons' import { ArrowRight } from 'components/Icons'
import Text from 'components/Text' import Text from 'components/Text'
@ -12,10 +12,11 @@ interface Props {
export default function PortfolioAccountPageHeader(props: Props) { export default function PortfolioAccountPageHeader(props: Props) {
const { address } = useParams() const { address } = useParams()
const selectedAccountId = useAccountId() const selectedAccountId = useAccountId()
const [searchParams] = useSearchParams()
return ( return (
<div className='flex items-center w-full gap-2 pt-2 pb-6 border-b border-white/20'> <div className='flex items-center w-full gap-2 pt-2 pb-6 border-b border-white/20'>
<NavLink to={getRoute('portfolio', address, selectedAccountId)}> <NavLink to={getRoute('portfolio', searchParams, address, selectedAccountId)}>
<Text className='text-white/40'>Portfolio</Text> <Text className='text-white/40'>Portfolio</Text>
</NavLink> </NavLink>
<ArrowRight className='h-3 text-white/60 ' /> <ArrowRight className='h-3 text-white/60 ' />

View File

@ -1,6 +1,6 @@
import classNames from 'classnames' import classNames from 'classnames'
import { ReactNode, useMemo } from 'react' import { ReactNode, useMemo } from 'react'
import { NavLink, useParams } from 'react-router-dom' import { NavLink, useParams, useSearchParams } from 'react-router-dom'
import { FormattedNumber } from 'components/FormattedNumber' import { FormattedNumber } from 'components/FormattedNumber'
import Loading from 'components/Loading' import Loading from 'components/Loading'
@ -36,6 +36,7 @@ export default function PortfolioCard(props: Props) {
const { allAssets: lendingAssets } = useLendingMarketAssetsTableData() const { allAssets: lendingAssets } = useLendingMarketAssetsTableData()
const { data } = useBorrowMarketAssetsTableData(false) const { data } = useBorrowMarketAssetsTableData(false)
const { data: hlsStrategies } = useHLSStakingAssets() const { data: hlsStrategies } = useHLSStakingAssets()
const [searchParams] = useSearchParams()
const borrowAssets = useMemo(() => data?.allAssets || [], [data]) const borrowAssets = useMemo(() => data?.allAssets || [], [data])
const [reduceMotion] = useLocalStorage<boolean>( const [reduceMotion] = useLocalStorage<boolean>(
@ -111,7 +112,12 @@ export default function PortfolioCard(props: Props) {
return ( return (
<NavLink <NavLink
to={getRoute(`portfolio/${props.accountId}` as Page, urlAddress, currentAccountId)} to={getRoute(
`portfolio/${props.accountId}` as Page,
searchParams,
urlAddress,
currentAccountId,
)}
className={classNames('w-full hover:bg-white/5', !reduceMotion && 'transition-all')} className={classNames('w-full hover:bg-white/5', !reduceMotion && 'transition-all')}
> >
<Skeleton <Skeleton

View File

@ -11,8 +11,7 @@ import PerpsPage from 'pages/PerpsPage'
import PortfolioAccountPage from 'pages/PortfolioAccountPage' import PortfolioAccountPage from 'pages/PortfolioAccountPage'
import PortfolioPage from 'pages/PortfolioPage' import PortfolioPage from 'pages/PortfolioPage'
import TradePage from 'pages/TradePage' import TradePage from 'pages/TradePage'
import { ENABLE_PERPS } from 'utils/constants' import { ENABLE_HLS, ENABLE_PERPS } from 'utils/constants'
import { ENABLE_HLS } from 'utils/constants'
export default function Routes() { export default function Routes() {
return ( return (
@ -25,6 +24,7 @@ export default function Routes() {
} }
> >
<Route path='/trade' element={<TradePage />} /> <Route path='/trade' element={<TradePage />} />
<Route path='/trade-advanced' element={<TradePage />} />
{ENABLE_PERPS && <Route path='/perps' element={<PerpsPage />} />} {ENABLE_PERPS && <Route path='/perps' element={<PerpsPage />} />}
<Route path='/farm' element={<FarmPage />} /> <Route path='/farm' element={<FarmPage />} />
<Route path='/lend' element={<LendPage />} /> <Route path='/lend' element={<LendPage />} />
@ -36,6 +36,7 @@ export default function Routes() {
<Route path='/' element={<TradePage />} /> <Route path='/' element={<TradePage />} />
<Route path='/wallets/:address'> <Route path='/wallets/:address'>
<Route path='trade' element={<TradePage />} /> <Route path='trade' element={<TradePage />} />
<Route path='trade-advanced' element={<TradePage />} />
{ENABLE_PERPS && <Route path='perps' element={<PerpsPage />} />} {ENABLE_PERPS && <Route path='perps' element={<PerpsPage />} />}
<Route path='farm' element={<FarmPage />} /> <Route path='farm' element={<FarmPage />} />
<Route path='lend' element={<LendPage />} /> <Route path='lend' element={<LendPage />} />

View File

@ -27,15 +27,12 @@ export default function SwitchAutoLend(props: Props) {
return return
} }
if (isAutoLendEnabled) { setIsAutoLendEnabled(false)
setIsAutoLendEnabled(false) disableAutoLend(accountId)
disableAutoLend(accountId)
}
}, [ }, [
accountId, accountId,
disableAutoLend, disableAutoLend,
enableAutoLend, enableAutoLend,
isAutoLendEnabled,
isAutoLendEnabledForAccount, isAutoLendEnabledForAccount,
setIsAutoLendEnabled, setIsAutoLendEnabled,
]) ])

View File

@ -18,11 +18,14 @@ export default function AccountDetailsCard() {
if (account) if (account)
return ( return (
<AccountBalancesTable <div className='w-full'>
account={account} <AccountBalancesTable
borrowingData={borrowAssetsData} account={account}
lendingData={lendingAssetsData} borrowingData={borrowAssetsData}
tableBodyClassName='gradient-card-content' lendingData={lendingAssetsData}
/> tableBodyClassName='gradient-card-content'
showLiquidationPrice
/>
</div>
) )
} }

View File

@ -5,8 +5,8 @@ import DisplayCurrency from 'components/DisplayCurrency'
import { FormattedNumber } from 'components/FormattedNumber' import { FormattedNumber } from 'components/FormattedNumber'
import Loading from 'components/Loading' import Loading from 'components/Loading'
import Text from 'components/Text' import Text from 'components/Text'
import { DataFeed, PAIR_SEPARATOR } from 'components/Trade/TradeChart/DataFeed'
import { disabledFeatures, enabledFeatures, overrides } from 'components/Trade/TradeChart/constants' import { disabledFeatures, enabledFeatures, overrides } from 'components/Trade/TradeChart/constants'
import { DataFeed, PAIR_SEPARATOR } from 'components/Trade/TradeChart/DataFeed'
import { BN_ZERO } from 'constants/math' import { BN_ZERO } from 'constants/math'
import usePrices from 'hooks/usePrices' import usePrices from 'hooks/usePrices'
import useStore from 'store' import useStore from 'store'
@ -156,7 +156,7 @@ export const TVChartContainer = (props: Props) => {
</div> </div>
} }
contentClassName='px-0.5 pb-0.5 h-full' contentClassName='px-0.5 pb-0.5 h-full'
className='min-h-[55vh]' className='h-[70dvh] max-h-[980px] min-h-[560px]'
> >
<div ref={chartContainerRef} className='h-full overflow-hidden rounded-b-base' /> <div ref={chartContainerRef} className='h-full overflow-hidden rounded-b-base' />
</Card> </Card>

View File

@ -45,7 +45,7 @@ export default function TradeChart(props: Props) {
</div> </div>
} }
contentClassName='px-0.5 pb-0.5 h-full' contentClassName='px-0.5 pb-0.5 h-full'
className='min-h-[55vh]' className='h-[70dvh] max-h-[980px] min-h-[560px]'
> >
<div className='flex items-center justify-center w-full h-full rounded-b-base bg-chart'> <div className='flex items-center justify-center w-full h-full rounded-b-base bg-chart'>
<CircularProgress size={60} className='opacity-50' /> <CircularProgress size={60} className='opacity-50' />

View File

@ -1,4 +1,7 @@
import { useMemo } from 'react'
import AssetImage from 'components/Asset/AssetImage' import AssetImage from 'components/Asset/AssetImage'
import AssetSymbol from 'components/Asset/AssetSymbol'
import DisplayCurrency from 'components/DisplayCurrency' import DisplayCurrency from 'components/DisplayCurrency'
import { FormattedNumber } from 'components/FormattedNumber' import { FormattedNumber } from 'components/FormattedNumber'
import { StarFilled, StarOutlined } from 'components/Icons' import { StarFilled, StarOutlined } from 'components/Icons'
@ -37,6 +40,13 @@ export default function AssetItem(props: Props) {
setFavoriteAssetsDenoms(favoriteAssetsDenoms.filter((item: string) => item !== asset.denom)) setFavoriteAssetsDenoms(favoriteAssetsDenoms.filter((item: string) => item !== asset.denom))
} }
const capLeft = useMemo(() => {
if (!props.depositCap) return 0
const percent = props.depositCap.used.dividedBy(props.depositCap.max).multipliedBy(100)
const depositCapLeft = 100 - Math.min(percent.toNumber(), 100)
return depositCapLeft
}, [props.depositCap])
return ( return (
<li className='border-b border-white/10 hover:bg-black/10'> <li className='border-b border-white/10 hover:bg-black/10'>
<button <button
@ -53,9 +63,7 @@ export default function AssetItem(props: Props) {
<Text size='sm' className='h-5 leading-5 text-left truncate '> <Text size='sm' className='h-5 leading-5 text-left truncate '>
{asset.name} {asset.name}
</Text> </Text>
<div className='rounded-sm bg-white/20 px-[6px] py-[2px] h-5 leading-5 '> <AssetSymbol symbol={asset.symbol} />
<Text size='xs'>{asset.symbol}</Text>
</div>
</div> </div>
{props.balances.length > 0 && ( {props.balances.length > 0 && (
<div className='flex gap-1'> <div className='flex gap-1'>
@ -81,12 +89,16 @@ export default function AssetItem(props: Props) {
)} )}
</div> </div>
)} )}
{props.depositCap && ( {props.depositCap && capLeft <= 15 && (
<div className='flex gap-1'> <div className='flex gap-1'>
<span className='text-xs text-left text-white/60'>Cap Left: </span> <span className='text-xs text-left text-white/60'>Cap Left: </span>
<DisplayCurrency <DisplayCurrency
className='text-xs text-left text-white/60' className='text-xs text-left text-info/60'
coin={BNCoin.fromDenomAndBigNumber(props.depositCap.denom, props.depositCap.max)} coin={BNCoin.fromDenomAndBigNumber(
props.depositCap.denom,
props.depositCap.max.minus(props.depositCap.used),
)}
options={{ suffix: ` (${capLeft.toFixed(2)}%)` }}
/> />
</div> </div>
)} )}

View File

@ -3,54 +3,67 @@ import { useMemo } from 'react'
import { ChevronDown } from 'components/Icons' import { ChevronDown } from 'components/Icons'
import Text from 'components/Text' import Text from 'components/Text'
import AssetItem from 'components/Trade/TradeModule/AssetSelector/AssetItem' import { ASSETS } from 'constants/assets'
import useCurrentAccount from 'hooks/useCurrentAccount' import useCurrentAccount from 'hooks/useCurrentAccount'
import useMarketAssets from 'hooks/useMarketAssets' import useMarketAssets from 'hooks/useMarketAssets'
import useMarketDeposits from 'hooks/useMarketDeposits'
import usePrices from 'hooks/usePrices'
import { getMergedBalancesForAsset } from 'utils/accounts' import { getMergedBalancesForAsset } from 'utils/accounts'
import { byDenom } from 'utils/array' import { byDenom } from 'utils/array'
import { getEnabledMarketAssets } from 'utils/assets' import { getEnabledMarketAssets, sortAssetsOrPairs } from 'utils/assets'
import AssetSelectorItem from 'components/Trade/TradeModule/AssetSelector/AssetSelectorItem'
interface Props { interface Props {
type: 'buy' | 'sell' type: 'buy' | 'sell'
assets: Asset[] assets: Asset[]
isOpen: boolean isOpen: boolean
toggleOpen: () => void toggleOpen: () => void
onChangeAsset: (asset: Asset) => void onChangeAsset: (asset: Asset | AssetPair) => void
} }
const baseDenom = ASSETS[0].denom
export default function AssetList(props: Props) { export default function AssetList(props: Props) {
const { assets, type, isOpen, toggleOpen, onChangeAsset } = props
const account = useCurrentAccount() const account = useCurrentAccount()
const { data: marketAssets } = useMarketAssets() const { data: marketAssets } = useMarketAssets()
const { data: marketDeposits } = useMarketDeposits()
const { data: prices } = usePrices()
const balances = useMemo(() => { const balances = useMemo(() => {
if (!account) return [] if (!account) return []
return getMergedBalancesForAsset(account, getEnabledMarketAssets()) return getMergedBalancesForAsset(account, getEnabledMarketAssets())
}, [account]) }, [account])
const sortedAssets = useMemo(
() => sortAssetsOrPairs(assets, prices, marketDeposits, balances, baseDenom) as Asset[],
[balances, prices, assets, marketDeposits],
)
return ( return (
<section> <section>
<button <button
className='flex items-center justify-between w-full p-4 bg-black/20' className='flex items-center justify-between w-full p-4 bg-black/20'
onClick={props.toggleOpen} onClick={toggleOpen}
> >
<Text>{props.type === 'buy' ? 'Buy asset' : 'Sell asset'}</Text> <Text>{type === 'buy' ? 'Buy asset' : 'Sell asset'}</Text>
<ChevronDown className={classNames(props.isOpen && '-rotate-180', 'w-4')} /> <ChevronDown className={classNames(isOpen && '-rotate-180', 'w-4')} />
</button> </button>
{props.isOpen && {isOpen &&
(props.assets.length === 0 ? ( (sortedAssets.length === 0 ? (
<Text size='xs' className='p-4'> <Text size='xs' className='p-4'>
No available assets found No available assets found
</Text> </Text>
) : ( ) : (
<ul> <ul>
{props.assets.map((asset) => ( {sortedAssets.map((asset) => (
<AssetItem <AssetSelectorItem
balances={balances} balances={balances}
key={`${props.type}-${asset.symbol}`} key={`${type}-${asset.symbol}`}
asset={asset} onSelect={props.onChangeAsset}
onSelectAsset={props.onChangeAsset}
depositCap={ depositCap={
props.type === 'buy' ? marketAssets?.find(byDenom(asset.denom))?.cap : undefined type === 'buy' ? marketAssets?.find(byDenom(asset.denom))?.cap : undefined
} }
asset={asset}
/> />
))} ))}
</ul> </ul>

View File

@ -1,34 +1,77 @@
import { useCallback, useMemo } from 'react' import { useCallback, useMemo, useState } from 'react'
import Button from 'components/Button'
import EscButton from 'components/Button/EscButton' import EscButton from 'components/Button/EscButton'
import Divider from 'components/Divider' import Divider from 'components/Divider'
import Overlay from 'components/Overlay' import Overlay from 'components/Overlay'
import SearchBar from 'components/SearchBar' import SearchBar from 'components/SearchBar'
import Text from 'components/Text' import Text from 'components/Text'
import AssetList from 'components/Trade/TradeModule/AssetSelector/AssetList' import AssetList from 'components/Trade/TradeModule/AssetSelector/AssetList'
import PairsList from 'components/Trade/TradeModule/AssetSelector/PairsList'
import useFilteredAssets from 'hooks/useFilteredAssets' import useFilteredAssets from 'hooks/useFilteredAssets'
import { getAllAssets } from 'utils/assets'
interface Props { interface Props {
state: OverlayState state: OverlayState
buyAsset: Asset buyAsset: Asset
sellAsset: Asset sellAsset: Asset
onChangeBuyAsset: (asset: Asset) => void onChangeBuyAsset?: (asset: Asset) => void
onChangeSellAsset: (asset: Asset) => void onChangeSellAsset?: (asset: Asset) => void
onChangeTradingPair?: (tradingPair: TradingPair) => void
onChangeState: (state: OverlayState) => void onChangeState: (state: OverlayState) => void
} }
export default function AssetOverlay(props: Props) { interface StablesFilterProps {
const { assets, searchString, onChangeSearch } = useFilteredAssets() stables: Asset[]
const handleClose = useCallback(() => props.onChangeState('closed'), [props]) selectedStables: Asset[]
onFilter: (stables: Asset[]) => void
}
const handleToggle = useCallback( function StablesFilter(props: StablesFilterProps) {
() => props.onChangeState(props.state === 'buy' ? 'sell' : 'buy'), const { stables, selectedStables, onFilter } = props
[props], const isAllSelected = selectedStables.length > 1
return (
<>
<Divider />
<div className='flex items-center w-full py-2 justify-evenly'>
<Button
onClick={() => onFilter(stables)}
text='All'
color={isAllSelected ? 'secondary' : 'quaternary'}
variant='transparent'
className={isAllSelected ? '!text-white !bg-white/10 border-white' : ''}
/>
{stables.map((stable) => {
const isCurrent = !isAllSelected && selectedStables[0].denom === stable.denom
return (
<Button
key={stable.symbol}
onClick={() => onFilter([stable])}
text={stable.symbol}
color={isCurrent ? 'secondary' : 'quaternary'}
variant='transparent'
className={isCurrent ? '!text-white !bg-white/10 border-white' : ''}
/>
)
})}
</div>
</>
) )
}
export default function AssetOverlay(props: Props) {
const isPairSelector = !!props.onChangeTradingPair
const { assets, searchString, onChangeSearch } = useFilteredAssets()
const allAssets = getAllAssets()
const stableAssets = useMemo(() => allAssets.filter((asset) => asset.isStable), [allAssets])
const handleClose = useCallback(() => props.onChangeState('closed'), [props])
const handleToggle = useCallback(() => props.onChangeState(props.state), [props])
const [selectedStables, setSelectedStables] = useState<Asset[]>([stableAssets[0]])
const buyAssets = useMemo( const buyAssets = useMemo(
() => assets.filter((asset) => asset.denom !== props.sellAsset.denom), () =>
[assets, props.sellAsset], isPairSelector ? assets : assets.filter((asset) => asset.denom !== props.sellAsset.denom),
[assets, props.sellAsset, isPairSelector],
) )
const sellAssets = useMemo( const sellAssets = useMemo(
@ -36,14 +79,26 @@ export default function AssetOverlay(props: Props) {
[assets, props.buyAsset], [assets, props.buyAsset],
) )
function onChangeBuyAsset(asset: Asset) { function onChangeBuyAsset(asset: AssetPair | Asset) {
props.onChangeBuyAsset(asset) const selectedAsset = asset as Asset
if (!props.onChangeBuyAsset) return
props.onChangeBuyAsset(selectedAsset)
props.onChangeState('sell') props.onChangeState('sell')
onChangeSearch('') onChangeSearch('')
} }
function onChangeSellAsset(asset: Asset) { function onChangeSellAsset(asset: AssetPair | Asset) {
props.onChangeSellAsset(asset) const selectedAsset = asset as Asset
if (!props.onChangeSellAsset) return
props.onChangeSellAsset(selectedAsset)
onChangeSearch('')
}
function onChangeAssetPair(assetPair: AssetPair | Asset) {
const selectedPair = assetPair as AssetPair
if (!props.onChangeTradingPair) return
props.onChangeTradingPair({ buy: selectedPair.buy.denom, sell: selectedPair.sell.denom })
props.onChangeState('closed')
onChangeSearch('') onChangeSearch('')
} }
@ -54,9 +109,16 @@ export default function AssetOverlay(props: Props) {
setShow={handleClose} setShow={handleClose}
> >
<div className='flex justify-between p-4 overflow-hidden'> <div className='flex justify-between p-4 overflow-hidden'>
<Text>Select asset</Text> <Text>{isPairSelector ? 'Select a market' : 'Select asset'}</Text>
<EscButton onClick={handleClose} enableKeyPress /> <EscButton onClick={handleClose} enableKeyPress />
</div> </div>
{isPairSelector && (
<StablesFilter
stables={stableAssets}
selectedStables={selectedStables}
onFilter={setSelectedStables}
/>
)}
<Divider /> <Divider />
<div className='p-4'> <div className='p-4'>
<SearchBar <SearchBar
@ -68,20 +130,32 @@ export default function AssetOverlay(props: Props) {
/> />
</div> </div>
<Divider /> <Divider />
<AssetList {isPairSelector ? (
type='buy' <PairsList
assets={buyAssets} assets={buyAssets}
isOpen={props.state === 'buy'} stables={selectedStables}
toggleOpen={handleToggle} isOpen={props.state === 'pair'}
onChangeAsset={onChangeBuyAsset} toggleOpen={handleToggle}
/> onChangeAssetPair={onChangeAssetPair}
<AssetList />
type='sell' ) : (
assets={sellAssets} <>
isOpen={props.state === 'sell'} <AssetList
toggleOpen={handleToggle} type='buy'
onChangeAsset={onChangeSellAsset} assets={buyAssets}
/> isOpen={props.state === 'buy'}
toggleOpen={handleToggle}
onChangeAsset={onChangeBuyAsset}
/>
<AssetList
type='sell'
assets={sellAssets}
isOpen={props.state === 'sell'}
toggleOpen={handleToggle}
onChangeAsset={onChangeSellAsset}
/>
</>
)}
</Overlay> </Overlay>
) )
} }

View File

@ -0,0 +1,129 @@
import { useMemo } from 'react'
import AssetImage from 'components/Asset/AssetImage'
import AssetSymbol from 'components/Asset/AssetSymbol'
import DisplayCurrency from 'components/DisplayCurrency'
import { FormattedNumber } from 'components/FormattedNumber'
import { StarFilled, StarOutlined } from 'components/Icons'
import Text from 'components/Text'
import { LocalStorageKeys } from 'constants/localStorageKeys'
import { BN_ONE, BN_ZERO, MAX_AMOUNT_DECIMALS, MIN_AMOUNT } from 'constants/math'
import useLocalStorage from 'hooks/useLocalStorage'
import { BNCoin } from 'types/classes/BNCoin'
import { byDenom } from 'utils/array'
import { demagnify, formatAmountToPrecision } from 'utils/formatters'
interface Props {
asset: Asset
sellAsset?: Asset
balances: BNCoin[]
onSelect: (selected: Asset | AssetPair) => void
depositCap?: DepositCap
}
export default function AssetSelectorItem(props: Props) {
const { asset, sellAsset, balances, onSelect, depositCap } = props
const amount = demagnify(props.balances.find(byDenom(asset.denom))?.amount ?? BN_ZERO, asset)
const [favoriteAssetsDenoms, setFavoriteAssetsDenoms] = useLocalStorage<string[]>(
LocalStorageKeys.FAVORITE_ASSETS,
[],
)
function handleToggleFavorite(event: React.MouseEvent<HTMLDivElement, MouseEvent>) {
event.stopPropagation()
if (!favoriteAssetsDenoms.includes(asset.denom)) {
setFavoriteAssetsDenoms([...favoriteAssetsDenoms, asset.denom])
return
}
setFavoriteAssetsDenoms(favoriteAssetsDenoms.filter((item: string) => item !== asset.denom))
}
const formattedAmount = formatAmountToPrecision(amount, MAX_AMOUNT_DECIMALS)
const lowAmount = formattedAmount === 0 ? 0 : Math.max(formattedAmount, MIN_AMOUNT)
const capLeft = useMemo(() => {
if (!props.depositCap) return 0
const percent = props.depositCap.used.dividedBy(props.depositCap.max).multipliedBy(100)
const depositCapLeft = 100 - Math.min(percent.toNumber(), 100)
return depositCapLeft
}, [props.depositCap])
return (
<li className='border-b border-white/10 hover:bg-black/10'>
<button
onClick={() => onSelect(sellAsset ? { buy: asset, sell: sellAsset } : asset)}
className='flex items-center justify-between w-full gap-2 p-4'
>
<div className='flex items-center gap-2'>
<div onClick={handleToggleFavorite}>
{asset.isFavorite ? <StarFilled width={16} /> : <StarOutlined width={16} />}
</div>
<AssetImage asset={asset} size={24} />
<div className='flex-col'>
<div className='flex gap-1 flex-nowrap max-w-[185px]'>
{sellAsset ? (
<Text size='sm' className='h-5 leading-5 text-left text-white/60'>
<span className='text-white'>{asset.symbol}</span>/{sellAsset.symbol}
</Text>
) : (
<>
<Text size='sm' className='h-5 leading-5 text-left truncate '>
{asset.name}
</Text>
<AssetSymbol symbol={asset.symbol} />
</>
)}
</div>
{balances.length > 0 && (
<div className='flex gap-1'>
<span className='text-xs text-left text-white/80'>Balance: </span>
{amount >= 1 ? (
<FormattedNumber
className='text-xs text-left text-white/80'
amount={amount}
options={{ abbreviated: true, maxDecimals: MAX_AMOUNT_DECIMALS }}
animate
/>
) : (
<FormattedNumber
className='text-xs text-left text-white/80'
smallerThanThreshold={formattedAmount !== 0 && formattedAmount < MIN_AMOUNT}
amount={lowAmount}
options={{
maxDecimals: MAX_AMOUNT_DECIMALS,
minDecimals: 0,
}}
animate
/>
)}
</div>
)}
{depositCap && capLeft <= 15 && (
<div className='flex gap-1'>
<span className='text-xs text-left text-white/60'>Cap Left: </span>
<DisplayCurrency
className='text-xs text-left text-info/60'
coin={BNCoin.fromDenomAndBigNumber(
depositCap.denom,
depositCap.max.minus(depositCap.used),
)}
options={{ suffix: ` (${capLeft.toFixed(2)}%)` }}
/>
</div>
)}
</div>
</div>
<DisplayCurrency
className='text-sm'
coin={
new BNCoin({
denom: asset.denom,
amount: BN_ONE.shiftedBy(asset.decimals).toString(),
})
}
/>
</button>
</li>
)
}

View File

@ -0,0 +1,59 @@
import { useCallback } from 'react'
import Button from 'components/Button'
import { ChevronDown } from 'components/Icons'
import Text from 'components/Text'
import AssetOverlay from 'components/Trade/TradeModule/AssetSelector/AssetOverlay'
import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
import { LocalStorageKeys } from 'constants/localStorageKeys'
import useLocalStorage from 'hooks/useLocalStorage'
import useStore from 'store'
interface Props {
buyAsset: Asset
sellAsset: Asset
}
export default function AssetSelectorPair(props: Props) {
const [tradingPairSimple, setTradingPairSimple] = useLocalStorage<Settings['tradingPairSimple']>(
LocalStorageKeys.TRADING_PAIR_SIMPLE,
DEFAULT_SETTINGS.tradingPairSimple,
)
const { buyAsset, sellAsset } = props
const assetOverlayState = useStore((s) => s.assetOverlayState)
const onChangeTradingPair = useCallback(
(tradingPair: TradingPair) => {
console.log(tradingPair.buy, tradingPair.sell)
setTradingPairSimple(tradingPair)
},
[setTradingPairSimple],
)
const handleChangeState = useCallback((state: OverlayState) => {
useStore.setState({ assetOverlayState: state })
}, [])
return (
<div className='flex items-center justify-between w-full p-3 bg-white/5'>
<Text size='sm' className='text-white/60'>
<span className='text-white'>{buyAsset.symbol}</span>/{sellAsset.symbol}
</Text>
<Button
onClick={() => useStore.setState({ assetOverlayState: 'pair' })}
text='all markets'
color='quaternary'
variant='transparent'
className='pr-0'
rightIcon={<ChevronDown className='w-3 h-3' />}
/>
<AssetOverlay
state={assetOverlayState}
onChangeState={handleChangeState}
buyAsset={buyAsset}
sellAsset={sellAsset}
onChangeTradingPair={onChangeTradingPair}
/>
</div>
)
}

View File

@ -14,32 +14,31 @@ interface Props {
sellAsset: Asset sellAsset: Asset
} }
export default function AssetSelector(props: Props) { export default function AssetSelectorSingle(props: Props) {
const [tradingPair, setTradingPair] = useLocalStorage<Settings['tradingPair']>( const [tradingPairAdvanced, settradingPairAdvanced] = useLocalStorage<
LocalStorageKeys.TRADING_PAIR, Settings['tradingPairAdvanced']
DEFAULT_SETTINGS.tradingPair, >(LocalStorageKeys.TRADING_PAIR_ADVANCED, DEFAULT_SETTINGS.tradingPairAdvanced)
)
const { buyAsset, sellAsset } = props const { buyAsset, sellAsset } = props
const assetOverlayState = useStore((s) => s.assetOverlayState) const assetOverlayState = useStore((s) => s.assetOverlayState)
const handleSwapAssets = useCallback(() => { const handleSwapAssets = useCallback(() => {
setTradingPair({ buy: sellAsset.denom, sell: buyAsset.denom }) settradingPairAdvanced({ buy: sellAsset.denom, sell: buyAsset.denom })
}, [setTradingPair, sellAsset, buyAsset]) }, [settradingPairAdvanced, sellAsset, buyAsset])
const handleChangeBuyAsset = useCallback( const handleChangeBuyAsset = useCallback(
(asset: Asset) => { (asset: Asset) => {
setTradingPair({ buy: asset.denom, sell: sellAsset.denom }) settradingPairAdvanced({ buy: asset.denom, sell: sellAsset.denom })
useStore.setState({ assetOverlayState: 'sell' }) useStore.setState({ assetOverlayState: 'sell' })
}, },
[setTradingPair, sellAsset], [settradingPairAdvanced, sellAsset],
) )
const handleChangeSellAsset = useCallback( const handleChangeSellAsset = useCallback(
(asset: Asset) => { (asset: Asset) => {
setTradingPair({ buy: buyAsset.denom, sell: asset.denom }) settradingPairAdvanced({ buy: buyAsset.denom, sell: asset.denom })
useStore.setState({ assetOverlayState: 'closed' }) useStore.setState({ assetOverlayState: 'closed' })
}, },
[setTradingPair, buyAsset], [settradingPairAdvanced, buyAsset],
) )
const handleChangeState = useCallback((state: OverlayState) => { const handleChangeState = useCallback((state: OverlayState) => {
@ -47,7 +46,7 @@ export default function AssetSelector(props: Props) {
}, []) }, [])
return ( return (
<div className='grid-rows-auto grid grid-cols-[1fr_min-content_1fr] gap-y-2 bg-white/5 p-3'> <div className='grid-rows-auto grid grid-cols-[1fr_min-content_1fr] gap-y-2 bg-white/5 p-3 w-full'>
<Text size='sm'>Buy</Text> <Text size='sm'>Buy</Text>
<Text size='sm' className='col-start-3'> <Text size='sm' className='col-start-3'>
Sell Sell

View File

@ -0,0 +1,73 @@
import { useMemo } from 'react'
import Text from 'components/Text'
import AssetSelectorItem from 'components/Trade/TradeModule/AssetSelector/AssetSelectorItem'
import { ASSETS } from 'constants/assets'
import useCurrentAccount from 'hooks/useCurrentAccount'
import useMarketAssets from 'hooks/useMarketAssets'
import useMarketDeposits from 'hooks/useMarketDeposits'
import usePrices from 'hooks/usePrices'
import { getMergedBalancesForAsset } from 'utils/accounts'
import { byDenom } from 'utils/array'
import { getEnabledMarketAssets, sortAssetsOrPairs } from 'utils/assets'
interface Props {
assets: Asset[]
stables: Asset[]
isOpen: boolean
toggleOpen: () => void
onChangeAssetPair: (assetPair: AssetPair | Asset) => void
}
const baseDenom = ASSETS[0].denom
export default function PairsList(props: Props) {
const account = useCurrentAccount()
const { data: marketAssets } = useMarketAssets()
const { data: marketDeposits } = useMarketDeposits()
const { data: prices } = usePrices()
const balances = useMemo(() => {
if (!account) return []
return getMergedBalancesForAsset(account, getEnabledMarketAssets())
}, [account])
const pairs = useMemo(() => {
const tradingPairs: AssetPair[] = []
props.stables.forEach((stable) => {
props.assets.forEach((buyAsset) => {
if (buyAsset.denom === stable.denom) return
tradingPairs.push({ buy: buyAsset, sell: stable })
})
})
return tradingPairs
}, [props.stables, props.assets])
const sortedPairs = useMemo(
() => sortAssetsOrPairs(pairs, prices, marketDeposits, balances, baseDenom) as AssetPair[],
[balances, prices, pairs, marketDeposits],
)
return (
<section>
{props.isOpen &&
(props.assets.length === 0 ? (
<Text size='xs' className='p-4'>
No available assets found
</Text>
) : (
<ul>
{sortedPairs.map((assetPair) => (
<AssetSelectorItem
balances={balances}
key={`${assetPair.buy.symbol}-${assetPair.sell.symbol}`}
onSelect={props.onChangeAssetPair}
depositCap={marketAssets?.find(byDenom(assetPair.buy.denom))?.cap}
asset={assetPair.buy}
sellAsset={assetPair.sell}
/>
))}
</ul>
))}
</section>
)
}

View File

@ -12,7 +12,7 @@ interface Props {
export default function MarginToggle(props: Props) { export default function MarginToggle(props: Props) {
return ( return (
<div className='flex flex-row justify-between flex-1 px-4 py-2 bg-white/5'> <div className='flex justify-between w-full px-4 py-2 bg-white/5'>
<Text size='sm'>Margin</Text> <Text size='sm'>Margin</Text>
<ConditionalWrapper <ConditionalWrapper

View File

@ -1,6 +1,5 @@
import classNames from 'classnames' import classNames from 'classnames'
import debounce from 'lodash.debounce' import React, { useMemo } from 'react'
import React, { useEffect, useMemo, useState } from 'react'
import ActionButton from 'components/Button/ActionButton' import ActionButton from 'components/Button/ActionButton'
import { CircularProgress } from 'components/CircularProgress' import { CircularProgress } from 'components/CircularProgress'
@ -11,6 +10,7 @@ import { ChevronDown } from 'components/Icons'
import Text from 'components/Text' import Text from 'components/Text'
import { DEFAULT_SETTINGS } from 'constants/defaultSettings' import { DEFAULT_SETTINGS } from 'constants/defaultSettings'
import { LocalStorageKeys } from 'constants/localStorageKeys' import { LocalStorageKeys } from 'constants/localStorageKeys'
import useLiquidationPrice from 'hooks/useLiquidationPrice'
import useLocalStorage from 'hooks/useLocalStorage' import useLocalStorage from 'hooks/useLocalStorage'
import usePrice from 'hooks/usePrice' import usePrice from 'hooks/usePrice'
import useSwapFee from 'hooks/useSwapFee' import useSwapFee from 'hooks/useSwapFee'
@ -34,6 +34,8 @@ interface Props {
sellAmount: BigNumber sellAmount: BigNumber
sellAsset: Asset sellAsset: Asset
showProgressIndicator: boolean showProgressIndicator: boolean
isAdvanced?: boolean
direction?: OrderDirection
} }
const infoLineClasses = 'flex flex-row justify-between flex-1 mb-1 text-xs text-white' const infoLineClasses = 'flex flex-row justify-between flex-1 mb-1 text-xs text-white'
@ -53,30 +55,22 @@ export default function TradeSummary(props: Props) {
route, route,
sellAmount, sellAmount,
buyAmount, buyAmount,
isAdvanced,
direction,
} = props } = props
const [slippage] = useLocalStorage<number>(LocalStorageKeys.SLIPPAGE, DEFAULT_SETTINGS.slippage) const [slippage] = useLocalStorage<number>(LocalStorageKeys.SLIPPAGE, DEFAULT_SETTINGS.slippage)
const sellAssetPrice = usePrice(sellAsset.denom) const sellAssetPrice = usePrice(sellAsset.denom)
const swapFee = useSwapFee(route.map((r) => r.pool_id)) const swapFee = useSwapFee(route.map((r) => r.pool_id))
const [showSummary, setShowSummary] = useToggle() const [showSummary, setShowSummary] = useToggle()
const [liquidationPrice, setLiquidationPrice] = useState<number | null>(null) const { liquidationPrice, isUpdatingLiquidationPrice } = useLiquidationPrice(
const [isUpdatingLiquidationPrice, setIsUpdatingLiquidationPrice] = useState(false) props.liquidationPrice,
const debouncedSetLiqPrice = useMemo(
() => debounce(setLiquidationPrice, 1000, { leading: false }),
[],
) )
const minReceive = useMemo(() => { const minReceive = useMemo(() => {
return buyAmount.times(1 - swapFee).times(1 - slippage) return buyAmount.times(1 - swapFee).times(1 - slippage)
}, [buyAmount, slippage, swapFee]) }, [buyAmount, slippage, swapFee])
useEffect(() => {
setIsUpdatingLiquidationPrice(true)
debouncedSetLiqPrice(props.liquidationPrice)
}, [debouncedSetLiqPrice, props.liquidationPrice])
useEffect(() => setIsUpdatingLiquidationPrice(false), [liquidationPrice])
const swapFeeValue = useMemo(() => { const swapFeeValue = useMemo(() => {
return sellAssetPrice.times(swapFee).times(sellAmount) return sellAssetPrice.times(swapFee).times(sellAmount)
}, [sellAmount, sellAssetPrice, swapFee]) }, [sellAmount, sellAssetPrice, swapFee])
@ -90,10 +84,10 @@ export default function TradeSummary(props: Props) {
return routeSymbols.join(' -> ') return routeSymbols.join(' -> ')
}, [route, sellAsset.symbol]) }, [route, sellAsset.symbol])
const buttonText = useMemo( const buttonText = useMemo(() => {
() => (route.length ? `Buy ${buyAsset.symbol}` : 'No route found'), if (!isAdvanced && direction === 'sell') return `Sell ${sellAsset.symbol}`
[buyAsset.symbol, route], return route.length ? `Buy ${buyAsset.symbol}` : 'No route found'
) }, [buyAsset.symbol, route, sellAsset.symbol, isAdvanced, direction])
return ( return (
<div <div

View File

@ -4,8 +4,12 @@ import { useCallback, useEffect, useMemo, useState } from 'react'
import estimateExactIn from 'api/swap/estimateExactIn' import estimateExactIn from 'api/swap/estimateExactIn'
import AvailableLiquidityMessage from 'components/AvailableLiquidityMessage' import AvailableLiquidityMessage from 'components/AvailableLiquidityMessage'
import DepositCapMessage from 'components/DepositCapMessage' import DepositCapMessage from 'components/DepositCapMessage'
import { DirectionSelect } from 'components/DirectionSelect'
import Divider from 'components/Divider' import Divider from 'components/Divider'
import RangeInput from 'components/RangeInput' import RangeInput from 'components/RangeInput'
import Text from 'components/Text'
import AssetSelectorPair from 'components/Trade/TradeModule/AssetSelector/AssetSelectorPair'
import AssetSelectorSingle from 'components/Trade/TradeModule/AssetSelector/AssetSelectorSingle'
import AssetAmountInput from 'components/Trade/TradeModule/SwapForm/AssetAmountInput' import AssetAmountInput from 'components/Trade/TradeModule/SwapForm/AssetAmountInput'
import AutoRepayToggle from 'components/Trade/TradeModule/SwapForm/AutoRepayToggle' import AutoRepayToggle from 'components/Trade/TradeModule/SwapForm/AutoRepayToggle'
import MarginToggle from 'components/Trade/TradeModule/SwapForm/MarginToggle' import MarginToggle from 'components/Trade/TradeModule/SwapForm/MarginToggle'
@ -28,34 +32,45 @@ import useStore from 'store'
import { BNCoin } from 'types/classes/BNCoin' import { BNCoin } from 'types/classes/BNCoin'
import { byDenom } from 'utils/array' import { byDenom } from 'utils/array'
import { defaultFee, ENABLE_AUTO_REPAY } from 'utils/constants' import { defaultFee, ENABLE_AUTO_REPAY } from 'utils/constants'
import { formatValue } from 'utils/formatters'
import { getCapLeftWithBuffer } from 'utils/generic' import { getCapLeftWithBuffer } from 'utils/generic'
import { asyncThrottle, BN } from 'utils/helpers' import { asyncThrottle, BN } from 'utils/helpers'
interface Props { interface Props {
buyAsset: Asset buyAsset: Asset
sellAsset: Asset sellAsset: Asset
isAdvanced: boolean
} }
export default function SwapForm(props: Props) { export default function SwapForm(props: Props) {
const { buyAsset, sellAsset } = props const { buyAsset, sellAsset, isAdvanced } = props
const useMargin = useStore((s) => s.useMargin) const useMargin = useStore((s) => s.useMargin)
const useAutoRepay = useStore((s) => s.useAutoRepay) const useAutoRepay = useStore((s) => s.useAutoRepay)
const account = useCurrentAccount() const account = useCurrentAccount()
const swap = useStore((s) => s.swap) const swap = useStore((s) => s.swap)
const [slippage] = useLocalStorage(LocalStorageKeys.SLIPPAGE, DEFAULT_SETTINGS.slippage) const [slippage] = useLocalStorage(LocalStorageKeys.SLIPPAGE, DEFAULT_SETTINGS.slippage)
const { computeMaxSwapAmount } = useHealthComputer(account) const { computeMaxSwapAmount } = useHealthComputer(account)
const [orderDirection, setOrderDirection] = useState<OrderDirection>('buy')
const { data: borrowAssets } = useMarketBorrowings() const { data: borrowAssets } = useMarketBorrowings()
const { data: marketAssets } = useMarketAssets() const { data: marketAssets } = useMarketAssets()
const { data: route, isLoading: isRouteLoading } = useSwapRoute(sellAsset.denom, buyAsset.denom) const [inputAsset, outputAsset] = useMemo(() => {
const isBorrowEnabled = !!marketAssets.find(byDenom(sellAsset.denom))?.borrowEnabled if (isAdvanced) return [sellAsset, buyAsset]
const isRepayable = !!account?.debts.find(byDenom(buyAsset.denom)) if (orderDirection === 'buy') return [sellAsset, buyAsset]
return [buyAsset, sellAsset]
}, [buyAsset, sellAsset, orderDirection, isAdvanced])
const { data: route, isLoading: isRouteLoading } = useSwapRoute(
inputAsset.denom,
outputAsset.denom,
)
const isBorrowEnabled = !!marketAssets.find(byDenom(inputAsset.denom))?.borrowEnabled
const isRepayable = !!account?.debts.find(byDenom(outputAsset.denom))
const [isMarginChecked, setMarginChecked] = useToggle(isBorrowEnabled ? useMargin : false) const [isMarginChecked, setMarginChecked] = useToggle(isBorrowEnabled ? useMargin : false)
const [isAutoRepayChecked, setAutoRepayChecked] = useToggle( const [isAutoRepayChecked, setAutoRepayChecked] = useToggle(
isRepayable && ENABLE_AUTO_REPAY ? useAutoRepay : false, isRepayable && ENABLE_AUTO_REPAY ? useAutoRepay : false,
) )
const [buyAssetAmount, setBuyAssetAmount] = useState(BN_ZERO) const [outputAssetAmount, setOutputAssetAmount] = useState(BN_ZERO)
const [sellAssetAmount, setSellAssetAmount] = useState(BN_ZERO) const [inputAssetAmount, setInputAssetAmount] = useState(BN_ZERO)
const [maxBuyableAmountEstimation, setMaxBuyableAmountEstimation] = useState(BN_ZERO) const [maxOutputAmountEstimation, setMaxBuyableAmountEstimation] = useState(BN_ZERO)
const [selectedOrderType, setSelectedOrderType] = useState<AvailableOrderType>('Market') const [selectedOrderType, setSelectedOrderType] = useState<AvailableOrderType>('Market')
const [isConfirming, setIsConfirming] = useToggle() const [isConfirming, setIsConfirming] = useToggle()
const [estimatedFee, setEstimatedFee] = useState(defaultFee) const [estimatedFee, setEstimatedFee] = useState(defaultFee)
@ -66,117 +81,107 @@ export default function SwapForm(props: Props) {
const throttledEstimateExactIn = useMemo(() => asyncThrottle(estimateExactIn, 250), []) const throttledEstimateExactIn = useMemo(() => asyncThrottle(estimateExactIn, 250), [])
const { computeLiquidationPrice } = useHealthComputer(updatedAccount) const { computeLiquidationPrice } = useHealthComputer(updatedAccount)
const borrowAsset = useMemo(
() => borrowAssets.find(byDenom(sellAsset.denom)),
[borrowAssets, sellAsset.denom],
)
const depositCapReachedCoins: BNCoin[] = useMemo(() => { const depositCapReachedCoins: BNCoin[] = useMemo(() => {
const buyMarketAsset = marketAssets.find(byDenom(buyAsset.denom)) const outputMarketAsset = marketAssets.find(byDenom(outputAsset.denom))
if (!buyMarketAsset) return [] if (!outputMarketAsset) return []
const depositCapLeft = getCapLeftWithBuffer(buyMarketAsset.cap) const depositCapLeft = getCapLeftWithBuffer(outputMarketAsset.cap)
if (buyAssetAmount.isGreaterThan(depositCapLeft)) { if (outputAssetAmount.isGreaterThan(depositCapLeft)) {
return [BNCoin.fromDenomAndBigNumber(buyAsset.denom, depositCapLeft)] return [BNCoin.fromDenomAndBigNumber(outputAsset.denom, depositCapLeft)]
} }
return [] return []
}, [marketAssets, buyAsset.denom, buyAssetAmount]) }, [marketAssets, outputAsset.denom, outputAssetAmount])
const onChangeSellAmount = useCallback( const onChangeInputAmount = useCallback(
(amount: BigNumber) => { (amount: BigNumber) => {
setSellAssetAmount(amount) setInputAssetAmount(amount)
throttledEstimateExactIn( const swapTo = { denom: inputAsset.denom, amount: amount.toString() }
{ denom: sellAsset.denom, amount: amount.toString() }, throttledEstimateExactIn(swapTo, outputAsset.denom).then(setOutputAssetAmount)
buyAsset.denom,
).then(setBuyAssetAmount)
}, },
[sellAsset.denom, throttledEstimateExactIn, buyAsset.denom], [inputAsset.denom, throttledEstimateExactIn, outputAsset.denom],
) )
const onChangeBuyAmount = useCallback( const onChangeOutputAmount = useCallback(
(amount: BigNumber) => { (amount: BigNumber) => {
setBuyAssetAmount(amount) setOutputAssetAmount(amount)
const swapFrom = { const swapFrom = {
denom: buyAsset.denom, denom: outputAsset.denom,
amount: amount.toString(), amount: amount.toString(),
} }
throttledEstimateExactIn(swapFrom, sellAsset.denom).then(setSellAssetAmount) throttledEstimateExactIn(swapFrom, inputAsset.denom).then(setInputAssetAmount)
}, },
[buyAsset.denom, throttledEstimateExactIn, sellAsset.denom], [outputAsset.denom, throttledEstimateExactIn, inputAsset.denom],
) )
const handleRangeInputChange = useCallback( const handleRangeInputChange = useCallback(
(value: number) => { (value: number) => {
onChangeBuyAmount(BN(value).shiftedBy(buyAsset.decimals).integerValue()) onChangeOutputAmount(BN(value).shiftedBy(outputAsset.decimals).integerValue())
}, },
[onChangeBuyAmount, buyAsset.decimals], [onChangeOutputAmount, outputAsset.decimals],
) )
const [maxSellAmount, sellSideMarginThreshold, marginRatio] = useMemo(() => { const [maxInputAmount, imputMarginThreshold, marginRatio] = useMemo(() => {
const maxAmount = computeMaxSwapAmount(sellAsset.denom, buyAsset.denom, 'default') const maxAmount = computeMaxSwapAmount(inputAsset.denom, outputAsset.denom, 'default')
const maxAmountOnMargin = computeMaxSwapAmount( const maxAmountOnMargin = computeMaxSwapAmount(
sellAsset.denom, inputAsset.denom,
buyAsset.denom, outputAsset.denom,
'margin', 'margin',
).integerValue() ).integerValue()
const marginRatio = maxAmount.dividedBy(maxAmountOnMargin) const marginRatio = maxAmount.dividedBy(maxAmountOnMargin)
estimateExactIn( estimateExactIn(
{ {
denom: sellAsset.denom, denom: inputAsset.denom,
amount: (isMarginChecked ? maxAmountOnMargin : maxAmount).toString(), amount: (isMarginChecked ? maxAmountOnMargin : maxAmount).toString(),
}, },
buyAsset.denom, outputAsset.denom,
).then(setMaxBuyableAmountEstimation) ).then(setMaxBuyableAmountEstimation)
if (isMarginChecked) return [maxAmountOnMargin, maxAmount, marginRatio] if (isMarginChecked) return [maxAmountOnMargin, maxAmount, marginRatio]
if (sellAssetAmount.isGreaterThan(maxAmount)) onChangeSellAmount(maxAmount) if (inputAssetAmount.isGreaterThan(maxAmount)) onChangeInputAmount(maxAmount)
return [maxAmount, maxAmount, marginRatio] return [maxAmount, maxAmount, marginRatio]
}, [ }, [
computeMaxSwapAmount, computeMaxSwapAmount,
sellAsset.denom, inputAsset.denom,
buyAsset.denom, outputAsset.denom,
isMarginChecked, isMarginChecked,
onChangeSellAmount, onChangeInputAmount,
sellAssetAmount, inputAssetAmount,
]) ])
const buySideMarginThreshold = useMemo(() => { const outputSideMarginThreshold = useMemo(() => {
return maxBuyableAmountEstimation.multipliedBy(marginRatio) return maxOutputAmountEstimation.multipliedBy(marginRatio)
}, [marginRatio, maxBuyableAmountEstimation]) }, [marginRatio, maxOutputAmountEstimation])
const swapTx = useMemo(() => { const swapTx = useMemo(() => {
const borrowCoin = sellAssetAmount.isGreaterThan(sellSideMarginThreshold) const borrowCoin = inputAssetAmount.isGreaterThan(imputMarginThreshold)
? BNCoin.fromDenomAndBigNumber( ? BNCoin.fromDenomAndBigNumber(inputAsset.denom, inputAssetAmount.minus(imputMarginThreshold))
sellAsset.denom,
sellAssetAmount.minus(sellSideMarginThreshold),
)
: undefined : undefined
return swap({ return swap({
accountId: account?.id || '', accountId: account?.id || '',
coinIn: BNCoin.fromDenomAndBigNumber(sellAsset.denom, sellAssetAmount.integerValue()), coinIn: BNCoin.fromDenomAndBigNumber(inputAsset.denom, inputAssetAmount.integerValue()),
reclaim: removedLends[0], reclaim: removedLends[0],
borrow: borrowCoin, borrow: borrowCoin,
denomOut: buyAsset.denom, denomOut: outputAsset.denom,
slippage, slippage,
isMax: sellAssetAmount.isEqualTo(maxSellAmount), isMax: inputAssetAmount.isEqualTo(maxInputAmount),
repay: isAutoRepayChecked, repay: isAutoRepayChecked,
}) })
}, [ }, [
removedLends, removedLends,
account?.id, account?.id,
buyAsset.denom, outputAsset.denom,
sellSideMarginThreshold, imputMarginThreshold,
sellAsset.denom, inputAsset.denom,
sellAssetAmount, inputAssetAmount,
slippage, slippage,
swap, swap,
maxSellAmount, maxInputAmount,
isAutoRepayChecked, isAutoRepayChecked,
]) ])
@ -210,61 +215,10 @@ export default function SwapForm(props: Props) {
) )
const liquidationPrice = useMemo( const liquidationPrice = useMemo(
() => computeLiquidationPrice(props.buyAsset.denom), () => computeLiquidationPrice(outputAsset.denom, 'asset'),
[computeLiquidationPrice, props.buyAsset.denom], [computeLiquidationPrice, outputAsset.denom],
) )
useEffect(() => {
setBuyAssetAmount(BN_ZERO)
setSellAssetAmount(BN_ZERO)
setMarginChecked(isBorrowEnabled ? useMargin : false)
setAutoRepayChecked(isRepayable ? useAutoRepay : false)
simulateTrade(
BNCoin.fromDenomAndBigNumber(buyAsset.denom, BN_ZERO),
BNCoin.fromDenomAndBigNumber(sellAsset.denom, BN_ZERO),
BNCoin.fromDenomAndBigNumber(sellAsset.denom, BN_ZERO),
isAutoLendEnabled && !isAutoRepayChecked ? 'lend' : 'deposit',
isAutoRepayChecked,
)
}, [
isBorrowEnabled,
isRepayable,
useMargin,
useAutoRepay,
buyAsset.denom,
sellAsset.denom,
isAutoLendEnabled,
isAutoRepayChecked,
simulateTrade,
setMarginChecked,
setAutoRepayChecked,
])
useEffect(() => {
const removeDepositAmount = sellAssetAmount.isGreaterThanOrEqualTo(sellSideMarginThreshold)
? sellSideMarginThreshold
: sellAssetAmount
const addDebtAmount = sellAssetAmount.isGreaterThan(sellSideMarginThreshold)
? sellAssetAmount.minus(sellSideMarginThreshold)
: BN_ZERO
if (removeDepositAmount.isZero() && addDebtAmount.isZero() && buyAssetAmount.isZero() && modal)
return
const removeCoin = BNCoin.fromDenomAndBigNumber(sellAsset.denom, removeDepositAmount)
const debtCoin = BNCoin.fromDenomAndBigNumber(sellAsset.denom, addDebtAmount)
const addCoin = BNCoin.fromDenomAndBigNumber(buyAsset.denom, buyAssetAmount)
debouncedUpdateAccount(removeCoin, addCoin, debtCoin)
}, [
sellAssetAmount,
buyAssetAmount,
sellSideMarginThreshold,
buyAsset.denom,
sellAsset.denom,
debouncedUpdateAccount,
modal,
])
useEffect(() => { useEffect(() => {
swapTx.estimateFee().then(setEstimatedFee) swapTx.estimateFee().then(setEstimatedFee)
}, [swapTx]) }, [swapTx])
@ -276,24 +230,90 @@ export default function SwapForm(props: Props) {
const isSucceeded = await swapTx.execute() const isSucceeded = await swapTx.execute()
if (isSucceeded) { if (isSucceeded) {
setSellAssetAmount(BN_ZERO) setInputAssetAmount(BN_ZERO)
setBuyAssetAmount(BN_ZERO) setOutputAssetAmount(BN_ZERO)
} }
setIsConfirming(false) setIsConfirming(false)
} }
}, [account?.id, swapTx, setIsConfirming]) }, [account?.id, swapTx, setIsConfirming])
useEffect(() => { useEffect(() => {
if (sellAssetAmount.isEqualTo(maxSellAmount) || buyAssetAmount.isZero()) return onChangeOutputAmount(BN_ZERO)
if (buyAssetAmount.isEqualTo(maxBuyableAmountEstimation)) setSellAssetAmount(maxSellAmount) onChangeInputAmount(BN_ZERO)
}, [sellAssetAmount, maxSellAmount, buyAssetAmount, maxBuyableAmountEstimation]) }, [orderDirection, onChangeOutputAmount, onChangeInputAmount])
useEffect(() => {
setOutputAssetAmount(BN_ZERO)
setInputAssetAmount(BN_ZERO)
setMarginChecked(isBorrowEnabled ? useMargin : false)
setAutoRepayChecked(isRepayable ? useAutoRepay : false)
simulateTrade(
BNCoin.fromDenomAndBigNumber(inputAsset.denom, BN_ZERO),
BNCoin.fromDenomAndBigNumber(outputAsset.denom, BN_ZERO),
BNCoin.fromDenomAndBigNumber(inputAsset.denom, BN_ZERO),
isAutoLendEnabled && !isAutoRepayChecked ? 'lend' : 'deposit',
isAutoRepayChecked,
)
}, [
isBorrowEnabled,
isRepayable,
useMargin,
useAutoRepay,
outputAsset.denom,
inputAsset.denom,
isAutoLendEnabled,
isAutoRepayChecked,
simulateTrade,
setMarginChecked,
setAutoRepayChecked,
])
useEffect(() => {
const removeDepositAmount = inputAssetAmount.isGreaterThanOrEqualTo(imputMarginThreshold)
? imputMarginThreshold
: inputAssetAmount
const addDebtAmount = inputAssetAmount.isGreaterThan(imputMarginThreshold)
? inputAssetAmount.minus(imputMarginThreshold)
: BN_ZERO
if (
removeDepositAmount.isZero() &&
addDebtAmount.isZero() &&
outputAssetAmount.isZero() &&
modal
)
return
const removeCoin = BNCoin.fromDenomAndBigNumber(inputAsset.denom, removeDepositAmount)
const addCoin = BNCoin.fromDenomAndBigNumber(outputAsset.denom, outputAssetAmount)
const debtCoin = BNCoin.fromDenomAndBigNumber(inputAsset.denom, addDebtAmount)
debouncedUpdateAccount(removeCoin, addCoin, debtCoin)
}, [
inputAssetAmount,
outputAssetAmount,
imputMarginThreshold,
outputAsset.denom,
inputAsset.denom,
debouncedUpdateAccount,
modal,
])
const borrowAsset = useMemo(
() => borrowAssets.find(byDenom(inputAsset.denom)),
[borrowAssets, inputAsset.denom],
)
useEffect(() => {
if (inputAssetAmount.isEqualTo(maxInputAmount) || outputAssetAmount.isZero()) return
if (outputAssetAmount.isEqualTo(maxOutputAmountEstimation)) setInputAssetAmount(maxInputAmount)
}, [inputAssetAmount, maxInputAmount, outputAssetAmount, maxOutputAmountEstimation])
const borrowAmount = useMemo( const borrowAmount = useMemo(
() => () =>
sellAssetAmount.isGreaterThan(sellSideMarginThreshold) inputAssetAmount.isGreaterThan(imputMarginThreshold)
? sellAssetAmount.minus(sellSideMarginThreshold) ? inputAssetAmount.minus(imputMarginThreshold)
: BN_ZERO, : BN_ZERO,
[sellAssetAmount, sellSideMarginThreshold], [inputAssetAmount, imputMarginThreshold],
) )
const availableLiquidity = useMemo( const availableLiquidity = useMemo(
@ -303,79 +323,125 @@ export default function SwapForm(props: Props) {
const isSwapDisabled = useMemo( const isSwapDisabled = useMemo(
() => () =>
sellAssetAmount.isZero() || inputAssetAmount.isZero() ||
depositCapReachedCoins.length > 0 || depositCapReachedCoins.length > 0 ||
borrowAmount.isGreaterThan(availableLiquidity) || borrowAmount.isGreaterThan(availableLiquidity) ||
route.length === 0, route.length === 0,
[sellAssetAmount, depositCapReachedCoins, borrowAmount, availableLiquidity, route], [inputAssetAmount, depositCapReachedCoins, borrowAmount, availableLiquidity, route],
) )
return ( return (
<> <>
<Divider /> <div className='flex flex-wrap w-full'>
<MarginToggle {isAdvanced ? (
checked={isMarginChecked} <AssetSelectorSingle buyAsset={outputAsset} sellAsset={inputAsset} />
onChange={handleMarginToggleChange} ) : (
disabled={!borrowAsset?.isMarket} <AssetSelectorPair buyAsset={buyAsset} sellAsset={sellAsset} />
borrowAssetSymbol={sellAsset.symbol} )}
/> <Divider />
<Divider /> <MarginToggle
checked={isMarginChecked}
{isRepayable && ENABLE_AUTO_REPAY && ( onChange={handleMarginToggleChange}
<AutoRepayToggle disabled={!borrowAsset?.isMarket}
checked={isAutoRepayChecked} borrowAssetSymbol={inputAsset.symbol}
onChange={handleAutoRepayToggleChange}
buyAssetSymbol={buyAsset.symbol}
/> />
)} <Divider />
<Divider /> {isRepayable && ENABLE_AUTO_REPAY && (
<div className='px-3'> <AutoRepayToggle
<OrderTypeSelector selected={selectedOrderType} onChange={setSelectedOrderType} /> checked={isAutoRepayChecked}
</div> onChange={handleAutoRepayToggleChange}
<div className='flex flex-col gap-6 px-3 mt-6'> buyAssetSymbol={outputAsset.symbol}
<AssetAmountInput
label='Buy'
max={maxBuyableAmountEstimation}
amount={buyAssetAmount}
setAmount={onChangeBuyAmount}
asset={buyAsset}
maxButtonLabel='Max Amount:'
disabled={isConfirming}
/>
<RangeInput
disabled={isConfirming || maxBuyableAmountEstimation.isZero()}
onChange={handleRangeInputChange}
value={buyAssetAmount.shiftedBy(-buyAsset.decimals).toNumber()}
max={maxBuyableAmountEstimation.shiftedBy(-buyAsset.decimals).toNumber()}
marginThreshold={
isMarginChecked
? buySideMarginThreshold.shiftedBy(-buyAsset.decimals).toNumber()
: undefined
}
/>
<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 <div className='px-3'>
label='Sell' <OrderTypeSelector selected={selectedOrderType} onChange={setSelectedOrderType} />
max={maxSellAmount} </div>
amount={sellAssetAmount} <div className='flex flex-col w-full gap-6 px-3 mt-6'>
setAmount={onChangeSellAmount} {isAdvanced ? (
asset={sellAsset} <AssetAmountInput
maxButtonLabel='Balance:' label='Buy'
disabled={isConfirming} max={maxOutputAmountEstimation}
/> amount={outputAssetAmount}
setAmount={onChangeOutputAmount}
asset={outputAsset}
maxButtonLabel='Max Amount:'
disabled={isConfirming}
/>
) : (
<>
<DirectionSelect
direction={orderDirection}
onChangeDirection={setOrderDirection}
asset={buyAsset}
/>
<AssetAmountInput
max={maxInputAmount}
amount={inputAssetAmount}
setAmount={onChangeInputAmount}
asset={inputAsset}
maxButtonLabel='Balance:'
disabled={isConfirming}
/>
</>
)}
{!isAdvanced && <Divider />}
<RangeInput
disabled={isConfirming || maxOutputAmountEstimation.isZero()}
onChange={handleRangeInputChange}
value={outputAssetAmount.shiftedBy(-outputAsset.decimals).toNumber()}
max={maxOutputAmountEstimation.shiftedBy(-outputAsset.decimals).toNumber()}
marginThreshold={
isMarginChecked
? outputSideMarginThreshold.shiftedBy(-outputAsset.decimals).toNumber()
: undefined
}
/>
<DepositCapMessage
action='buy'
coins={depositCapReachedCoins}
className='p-4 bg-white/5'
/>
{borrowAsset && borrowAmount.isGreaterThanOrEqualTo(availableLiquidity) && (
<AvailableLiquidityMessage
availableLiquidity={borrowAsset?.liquidity?.amount ?? BN_ZERO}
asset={borrowAsset}
/>
)}
{isAdvanced ? (
<AssetAmountInput
label='Sell'
max={maxInputAmount}
amount={inputAssetAmount}
setAmount={onChangeInputAmount}
asset={inputAsset}
maxButtonLabel='Balance:'
disabled={isConfirming}
/>
) : (
<>
<Divider />
<div className='flex justify-between w-full'>
<Text size='sm'>You receive</Text>
<Text size='sm'>
{formatValue(outputAssetAmount.toNumber(), {
decimals: outputAsset.decimals,
abbreviated: false,
suffix: ` ${outputAsset.symbol}`,
minDecimals: 0,
maxDecimals: outputAsset.decimals,
})}
</Text>
</div>
</>
)}
</div>
</div>
<div className='flex w-full px-3 pt-6'>
<TradeSummary <TradeSummary
buyAsset={buyAsset} sellAsset={inputAsset}
sellAsset={sellAsset} buyAsset={outputAsset}
borrowRate={borrowAsset?.borrowRate} borrowRate={borrowAsset?.borrowRate}
buyAction={handleBuyClick} buyAction={handleBuyClick}
buyButtonDisabled={isSwapDisabled} buyButtonDisabled={isSwapDisabled}
@ -385,8 +451,10 @@ export default function SwapForm(props: Props) {
estimatedFee={estimatedFee} estimatedFee={estimatedFee}
route={route} route={route}
liquidationPrice={liquidationPrice} liquidationPrice={liquidationPrice}
sellAmount={sellAssetAmount} sellAmount={inputAssetAmount}
buyAmount={buyAssetAmount} buyAmount={outputAssetAmount}
isAdvanced={isAdvanced}
direction={orderDirection}
/> />
</div> </div>
</> </>

View File

@ -1,26 +1,25 @@
import classNames from 'classnames' import classNames from 'classnames'
import AssetSelector from 'components/Trade/TradeModule/AssetSelector'
import SwapForm from 'components/Trade/TradeModule/SwapForm' import SwapForm from 'components/Trade/TradeModule/SwapForm'
interface Props { interface Props {
buyAsset: Asset buyAsset: Asset
sellAsset: Asset sellAsset: Asset
isAdvanced: boolean
} }
export default function TradeModule(props: Props) { export default function TradeModule(props: Props) {
const { buyAsset, sellAsset } = props const { buyAsset, sellAsset, isAdvanced } = props
return ( return (
<div className='row-span-2'> <div className='row-span-2'>
<div <div
className={classNames( className={classNames(
'relative isolate max-w-full overflow-hidden rounded-base pb-4 z-30', 'max-h-[calc(100dvh-98px)] h-[980px] min-h-[830px]',
'relative isolate max-w-full overflow-hidden rounded-base pb-4 z-30 flex flex-wrap flex-col justify-between',
'before:content-[" "] before:absolute before:inset-0 before:-z-1 before:rounded-base before:p-[1px] before:border-glas', 'before:content-[" "] before:absolute before:inset-0 before:-z-1 before:rounded-base before:p-[1px] before:border-glas',
)} )}
> >
<AssetSelector buyAsset={buyAsset} sellAsset={sellAsset} /> <SwapForm buyAsset={buyAsset} sellAsset={sellAsset} isAdvanced={isAdvanced} />
<SwapForm buyAsset={buyAsset} sellAsset={sellAsset} />
</div> </div>
</div> </div>
) )

View File

@ -1,10 +1,10 @@
import { useShuttle } from '@delphi-labs/shuttle-react' import { useShuttle } from '@delphi-labs/shuttle-react'
import BigNumber from 'bignumber.js' import BigNumber from 'bignumber.js'
import classNames from 'classnames' import classNames from 'classnames'
import { useCallback, useEffect, useState } from 'react'
import { useLocation, useNavigate } from 'react-router-dom'
import useClipboard from 'react-use-clipboard'
import { resolvePrimaryDomainByAddress } from 'ibc-domains-sdk' import { resolvePrimaryDomainByAddress } from 'ibc-domains-sdk'
import { useCallback, useEffect, useState } from 'react'
import { useLocation, useNavigate, useSearchParams } from 'react-router-dom'
import useClipboard from 'react-use-clipboard'
import Button from 'components/Button' import Button from 'components/Button'
import { CircularProgress } from 'components/CircularProgress' import { CircularProgress } from 'components/CircularProgress'
@ -44,6 +44,7 @@ export default function WalletConnectedButton() {
const { data: icnsData, isLoading: isLoadingICNS } = useICNSDomain(address) const { data: icnsData, isLoading: isLoadingICNS } = useICNSDomain(address)
const navigate = useNavigate() const navigate = useNavigate()
const { pathname } = useLocation() const { pathname } = useLocation()
const [searchParams] = useSearchParams()
// --------------- // ---------------
// LOCAL STATE // LOCAL STATE
@ -87,7 +88,7 @@ export default function WalletConnectedButton() {
}) })
} }
navigate(getRoute(getPage(pathname))) navigate(getRoute(getPage(pathname), searchParams))
} }
useEffect(() => { useEffect(() => {

View File

@ -1,5 +1,5 @@
import { Suspense, useEffect, useMemo } from 'react' import { Suspense, useEffect, useMemo } from 'react'
import { useLocation, useNavigate, useParams } from 'react-router-dom' import { useLocation, useNavigate, useParams, useSearchParams } from 'react-router-dom'
import AccountCreateFirst from 'components/Account/AccountCreateFirst' import AccountCreateFirst from 'components/Account/AccountCreateFirst'
import { CircularProgress } from 'components/CircularProgress' import { CircularProgress } from 'components/CircularProgress'
@ -28,6 +28,8 @@ function FetchLoading() {
function Content() { function Content() {
const address = useStore((s) => s.address) const address = useStore((s) => s.address)
const [searchParams] = useSearchParams()
const { address: urlAddress } = useParams() const { address: urlAddress } = useParams()
const urlAccountId = useAccountId() const urlAccountId = useAccountId()
const navigate = useNavigate() const navigate = useNavigate()
@ -48,7 +50,7 @@ function Content() {
useEffect(() => { useEffect(() => {
const page = getPage(pathname) const page = getPage(pathname)
if (page === 'portfolio' && urlAddress && urlAddress !== address) { if (page === 'portfolio' && urlAddress && urlAddress !== address) {
navigate(getRoute(page, urlAddress as string)) navigate(getRoute(page, searchParams, urlAddress as string))
useStore.setState({ balances: walletBalances, focusComponent: null }) useStore.setState({ balances: walletBalances, focusComponent: null })
return return
} }
@ -60,7 +62,7 @@ function Content() {
) { ) {
const currentAccountIsHLS = urlAccountId && !accountIds.includes(urlAccountId) const currentAccountIsHLS = urlAccountId && !accountIds.includes(urlAccountId)
const currentAccount = currentAccountIsHLS || !urlAccountId ? accountIds[0] : urlAccountId const currentAccount = currentAccountIsHLS || !urlAccountId ? accountIds[0] : urlAccountId
navigate(getRoute(page, address, currentAccount)) navigate(getRoute(page, searchParams, address, currentAccount))
useStore.setState({ balances: walletBalances, focusComponent: null }) useStore.setState({ balances: walletBalances, focusComponent: null })
} }
}, [ }, [
@ -72,6 +74,7 @@ function Content() {
walletBalances, walletBalances,
urlAddress, urlAddress,
urlAccountId, urlAccountId,
searchParams,
]) ])
if (isLoadingAccounts || isLoadingBalances) return <FetchLoading /> if (isLoadingAccounts || isLoadingBalances) return <FetchLoading />

View File

@ -19,6 +19,44 @@ export const ASSETS: Asset[] = [
pythPriceFeedId: '5867f5683c757393a0670ef0f701490950fe93fdb006d181c8265a831ac0c5c6', pythPriceFeedId: '5867f5683c757393a0670ef0f701490950fe93fdb006d181c8265a831ac0c5c6',
pythHistoryFeedId: 'Crypto.OSMO/USD', pythHistoryFeedId: 'Crypto.OSMO/USD',
}, },
{
symbol: 'USDC.axl',
name: 'Axelar USDC',
id: 'axlUSDC',
denom: 'ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858',
color: '#478edc',
logo: '/images/tokens/axlusdc.svg',
decimals: 6,
hasOraclePrice: true,
isEnabled: true,
isMarket: true,
isDisplayCurrency: true,
isStable: true,
isBorrowEnabled: true,
isAutoLendEnabled: true,
pythPriceFeedId: 'eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a',
pythHistoryFeedId: 'Crypto.USDC/USD',
poolId: 678,
},
{
symbol: 'USDC',
name: 'Noble',
id: 'USDC',
denom: 'ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4',
color: '#478edc',
logo: '/images/tokens/usdc.svg',
decimals: 6,
hasOraclePrice: true,
isEnabled: true,
isMarket: true,
isDisplayCurrency: true,
isStable: true,
isBorrowEnabled: true,
isAutoLendEnabled: true,
pythPriceFeedId: 'eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a',
pythHistoryFeedId: 'Crypto.USDC/USD',
poolId: ENV.NETWORK === NETWORK.DEVNET ? 678 : 1221,
},
{ {
symbol: 'ATOM', symbol: 'ATOM',
name: 'Atom', name: 'Atom',
@ -119,44 +157,6 @@ export const ASSETS: Asset[] = [
isEnabled: true, isEnabled: true,
forceFetchPrice: true, forceFetchPrice: true,
}, },
{
symbol: 'USDC.axl',
name: 'Axelar USDC',
id: 'axlUSDC',
denom: 'ibc/D189335C6E4A68B513C10AB227BF1C1D38C746766278BA3EEB4FB14124F1D858',
color: '#478edc',
logo: '/images/tokens/axlusdc.svg',
decimals: 6,
hasOraclePrice: true,
isEnabled: true,
isMarket: true,
isDisplayCurrency: true,
isStable: true,
isBorrowEnabled: true,
isAutoLendEnabled: true,
pythPriceFeedId: 'eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a',
pythHistoryFeedId: 'Crypto.USDC/USD',
poolId: 678,
},
{
symbol: 'USDC',
name: 'Noble',
id: 'USDC',
denom: 'ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4',
color: '#478edc',
logo: '/images/tokens/usdc.svg',
decimals: 6,
hasOraclePrice: true,
isEnabled: true,
isMarket: true,
isDisplayCurrency: true,
isStable: true,
isBorrowEnabled: true,
isAutoLendEnabled: true,
pythPriceFeedId: 'eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a',
pythHistoryFeedId: 'Crypto.USDC/USD',
poolId: ENV.NETWORK === NETWORK.DEVNET ? 678 : 1221,
},
{ {
symbol: 'USDT', symbol: 'USDT',
id: 'USDT', id: 'USDT',

View File

@ -7,7 +7,8 @@ export const DEFAULT_SETTINGS: Settings = {
accountSummaryTabs: [true, true], accountSummaryTabs: [true, true],
reduceMotion: false, reduceMotion: false,
lendAssets: true, lendAssets: true,
tradingPair: { buy: enabledMarketAssets[0].denom, sell: enabledMarketAssets[1].denom }, tradingPairSimple: { buy: enabledMarketAssets[0].denom, sell: enabledMarketAssets[1].denom },
tradingPairAdvanced: { buy: enabledMarketAssets[0].denom, sell: enabledMarketAssets[1].denom },
displayCurrency: ORACLE_DENOM, displayCurrency: ORACLE_DENOM,
slippage: 0.02, slippage: 0.02,
tutorial: true, tutorial: true,

View File

@ -1,5 +1,6 @@
export enum LocalStorageKeys { export enum LocalStorageKeys {
TRADING_PAIR = 'tradingPair', TRADING_PAIR_SIMPLE = 'tradingPairSimple',
TRADING_PAIR_ADVANCED = 'tradingPairAdvanced',
ACCOUNT_SUMMARY_TABS = 'accountSummaryTabs', ACCOUNT_SUMMARY_TABS = 'accountSummaryTabs',
DISPLAY_CURRENCY = 'displayCurrency', DISPLAY_CURRENCY = 'displayCurrency',
REDUCE_MOTION = 'reduceMotion', REDUCE_MOTION = 'reduceMotion',

View File

@ -0,0 +1,36 @@
import { useSearchParams } from 'react-router-dom'
import useSWR from 'swr'
import { ASSETS } from 'constants/assets'
import { getAssetBySymbol } from 'utils/assets'
import { BN } from 'utils/helpers'
export default function usePerpsMarket() {
const [searchParams] = useSearchParams()
const perpsMarket = searchParams.get('perpsMarket') || ASSETS[0].symbol
const asset = getAssetBySymbol(perpsMarket)
return useSWR(
`perpsMarket/${perpsMarket}`,
async () => {
await delay(3000)
if (!asset) return null
return {
asset,
fundingRate: BN(0.001432),
openInterest: {
long: BN(92901203),
short: BN(129891203),
},
} as PerpsMarket
},
{
fallbackData: null,
},
)
}
function delay(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms))
}

View File

@ -24,6 +24,7 @@ import {
BorrowTarget, BorrowTarget,
compute_health_js, compute_health_js,
liquidation_price_js, liquidation_price_js,
LiquidationPriceKind,
max_borrow_estimate_js, max_borrow_estimate_js,
max_swap_estimate_js, max_swap_estimate_js,
max_withdraw_estimate_js, max_withdraw_estimate_js,
@ -198,13 +199,13 @@ export default function useHealthComputer(account?: Account) {
) )
const computeLiquidationPrice = useCallback( const computeLiquidationPrice = useCallback(
(denom: string) => { (denom: string, kind: LiquidationPriceKind) => {
if (!healthComputer) return null if (!healthComputer) return null
try { try {
const asset = getAssetByDenom(denom) const asset = getAssetByDenom(denom)
if (!asset) return null if (!asset) return null
const decimalDiff = asset.decimals - PRICE_ORACLE_DECIMALS const decimalDiff = asset.decimals - PRICE_ORACLE_DECIMALS
return BN(liquidation_price_js(healthComputer, denom)) return BN(liquidation_price_js(healthComputer, denom, kind))
.shiftedBy(-VALUE_SCALE_FACTOR) .shiftedBy(-VALUE_SCALE_FACTOR)
.shiftedBy(decimalDiff) .shiftedBy(decimalDiff)
.toNumber() .toNumber()

View File

@ -0,0 +1,22 @@
import debounce from 'lodash.debounce'
import { useEffect, useMemo, useState } from 'react'
export default function useLiquidationPrice(liqPrice: number | null) {
const [liquidationPrice, setLiquidationPrice] = useState<number | null>(null)
const [isUpdatingLiquidationPrice, setIsUpdatingLiquidationPrice] = useState(false)
const debouncedSetLiqPrice = useMemo(
() => debounce(setLiquidationPrice, 1000, { leading: false }),
[],
)
useEffect(() => {
setIsUpdatingLiquidationPrice(true)
debouncedSetLiqPrice(liqPrice)
}, [debouncedSetLiqPrice, liqPrice])
useEffect(() => {
setIsUpdatingLiquidationPrice(false)
}, [liquidationPrice])
return { liquidationPrice, isUpdatingLiquidationPrice }
}

View File

@ -7,7 +7,7 @@ export default function PerpsPage() {
return ( return (
<div className='flex flex-col w-full h-full gap-4'> <div className='flex flex-col w-full h-full gap-4'>
<div className='grid w-full grid-cols-[auto_346px] gap-4 pb-4'> <div className='grid w-full grid-cols-[auto_346px] gap-4 pb-4'>
<div className='grid grid-cols-1 grid-rows-[min-content_auto_min-content] gap-4 h-[calc(100vh-93px)] pb-4'> <div className='grid grid-cols-1 grid-rows-[min-content_auto_min-content] gap-4 h-[calc(100dvh-93px)] pb-4'>
<PerpsInfo /> <PerpsInfo />
<PerpsChart /> <PerpsChart />
<PerpsPositions /> <PerpsPositions />

View File

@ -1,4 +1,4 @@
import { useNavigate, useParams } from 'react-router-dom' import { useNavigate, useParams, useSearchParams } from 'react-router-dom'
import MigrationBanner from 'components/MigrationBanner' import MigrationBanner from 'components/MigrationBanner'
import Balances from 'components/Portfolio/Account/Balances' import Balances from 'components/Portfolio/Account/Balances'
@ -12,9 +12,10 @@ export default function PortfolioAccountPage() {
const selectedAccountId = useAccountId() const selectedAccountId = useAccountId()
const { address, accountId } = useParams() const { address, accountId } = useParams()
const navigate = useNavigate() const navigate = useNavigate()
const [searchParams] = useSearchParams()
if (!accountId) { if (!accountId) {
navigate(getRoute('portfolio', address, selectedAccountId)) navigate(getRoute('portfolio', searchParams, address, selectedAccountId))
return null return null
} }

View File

@ -1,4 +1,5 @@
import { useMemo } from 'react' import { useMemo } from 'react'
import { useLocation } from 'react-router-dom'
import MigrationBanner from 'components/MigrationBanner' import MigrationBanner from 'components/MigrationBanner'
import AccountDetailsCard from 'components/Trade/AccountDetailsCard' import AccountDetailsCard from 'components/Trade/AccountDetailsCard'
@ -10,30 +11,45 @@ import useLocalStorage from 'hooks/useLocalStorage'
import useStore from 'store' import useStore from 'store'
import { byDenom } from 'utils/array' import { byDenom } from 'utils/array'
import { getEnabledMarketAssets } from 'utils/assets' import { getEnabledMarketAssets } from 'utils/assets'
import { getPage } from 'utils/route'
export default function TradePage() { export default function TradePage() {
const [tradingPair] = useLocalStorage<Settings['tradingPair']>( const { pathname } = useLocation()
LocalStorageKeys.TRADING_PAIR, const page = getPage(pathname)
DEFAULT_SETTINGS.tradingPair, const isAdvanced = useMemo(() => page === 'trade-advanced', [page])
const [tradingPairAdvanced] = useLocalStorage<Settings['tradingPairAdvanced']>(
LocalStorageKeys.TRADING_PAIR_ADVANCED,
DEFAULT_SETTINGS.tradingPairAdvanced,
) )
const [tradingPairSimple] = useLocalStorage<Settings['tradingPairSimple']>(
LocalStorageKeys.TRADING_PAIR_SIMPLE,
DEFAULT_SETTINGS.tradingPairSimple,
)
const enabledMarketAssets = getEnabledMarketAssets() const enabledMarketAssets = getEnabledMarketAssets()
const assetOverlayState = useStore((s) => s.assetOverlayState) const assetOverlayState = useStore((s) => s.assetOverlayState)
const buyAsset = useMemo( const buyAsset = useMemo(
() => enabledMarketAssets.find(byDenom(tradingPair.buy)) ?? enabledMarketAssets[0], () =>
[tradingPair, enabledMarketAssets], enabledMarketAssets.find(
byDenom(isAdvanced ? tradingPairAdvanced.buy : tradingPairSimple.buy),
) ?? enabledMarketAssets[0],
[tradingPairAdvanced, tradingPairSimple, enabledMarketAssets, isAdvanced],
) )
const sellAsset = useMemo( const sellAsset = useMemo(
() => enabledMarketAssets.find(byDenom(tradingPair.sell)) ?? enabledMarketAssets[1], () =>
[tradingPair, enabledMarketAssets], enabledMarketAssets.find(
byDenom(isAdvanced ? tradingPairAdvanced.sell : tradingPairSimple.sell),
) ?? enabledMarketAssets[1],
[tradingPairAdvanced, tradingPairSimple, enabledMarketAssets, isAdvanced],
) )
return ( return (
<div className='flex flex-col w-full h-full gap-4'> <div className='flex flex-col w-full h-full gap-4'>
<MigrationBanner /> <MigrationBanner />
<div className='grid h-full w-full grid-cols-[346px_auto] gap-4'> <div className='grid w-full grid-cols-[auto_346px] gap-4'>
<TradeModule buyAsset={buyAsset} sellAsset={sellAsset} />
<TradeChart buyAsset={buyAsset} sellAsset={sellAsset} /> <TradeChart buyAsset={buyAsset} sellAsset={sellAsset} />
<TradeModule buyAsset={buyAsset} sellAsset={sellAsset} isAdvanced={isAdvanced} />
<AccountDetailsCard /> <AccountDetailsCard />
</div> </div>
{assetOverlayState !== 'closed' && ( {assetOverlayState !== 'closed' && (

View File

@ -27,7 +27,12 @@ function PageContainer(props: Props) {
if (!props.focusComponent) if (!props.focusComponent)
return ( return (
<div className={classNames('mx-auto h-full w-full', !props.fullWidth && 'max-w-content')}> <div
className={classNames(
'mx-auto flex items-start w-full',
!props.fullWidth && 'max-w-content',
)}
>
{props.children} {props.children}
</div> </div>
) )
@ -42,6 +47,7 @@ function PageContainer(props: Props) {
export default function Layout({ children }: { children: React.ReactNode }) { export default function Layout({ children }: { children: React.ReactNode }) {
const location = useLocation() const location = useLocation()
const focusComponent = useStore((s) => s.focusComponent) const focusComponent = useStore((s) => s.focusComponent)
const address = useStore((s) => s.address)
const [reduceMotion] = useLocalStorage<boolean>( const [reduceMotion] = useLocalStorage<boolean>(
LocalStorageKeys.REDUCE_MOTION, LocalStorageKeys.REDUCE_MOTION,
DEFAULT_SETTINGS.reduceMotion, DEFAULT_SETTINGS.reduceMotion,
@ -61,11 +67,12 @@ export default function Layout({ children }: { children: React.ReactNode }) {
<DesktopHeader /> <DesktopHeader />
<main <main
className={classNames( className={classNames(
'lg:min-h-[calc(100vh-73px)]', 'lg:min-h-[calc(100dvh-73px)]',
'lg:mt-[73px]', 'lg:mt-[73px]',
'flex', 'flex',
'min-h-screen gap-6 px-4 py-6 w-full relative', 'min-h-screen gap-6 px-4 py-6 w-full relative',
!focusComponent && !focusComponent &&
address &&
isFullWidth && isFullWidth &&
accountId && accountId &&
(accountDetailsExpanded ? 'pr-118' : 'pr-24'), (accountDetailsExpanded ? 'pr-118' : 'pr-24'),

View File

@ -69,6 +69,11 @@ interface Asset {
isStaking?: boolean isStaking?: boolean
} }
interface AssetPair {
buy: Asset
sell: Asset
}
interface PseudoAsset { interface PseudoAsset {
decimals: number decimals: number
symbol: string symbol: string
@ -144,3 +149,12 @@ interface StakingApr {
unbondingDelay: number unbondingDelay: number
unbondingPeriod: number unbondingPeriod: number
} }
interface PerpsMarket {
asset: Asset
fundingRate: BigNumber
openInterest: {
long: BigNumber
short: BigNumber
}
}

View File

@ -1 +1 @@
type OverlayState = 'buy' | 'sell' | 'closed' type OverlayState = 'buy' | 'sell' | 'pair' | 'closed'

View File

@ -2,4 +2,12 @@ interface MenuTreeEntry {
pages: Page[] pages: Page[]
label: string label: string
externalUrl?: string externalUrl?: string
submenu?: MenuTreeSubmenuEntry[]
}
interface MenuTreeSubmenuEntry {
page: Page
label: string
subtitle?: string
icon?: React.ReactNode
} }

View File

@ -0,0 +1,4 @@
interface TradingPair {
buy: string
sell: string
}

View File

@ -1 +1 @@
type OrderDirection = 'long' | 'short' type OrderDirection = 'long' | 'short' | 'buy' | 'sell'

View File

@ -1,5 +1,6 @@
type Page = type Page =
| 'trade' | 'trade'
| 'trade-advanced'
| 'perps' | 'perps'
| 'borrow' | 'borrow'
| 'farm' | 'farm'

View File

@ -2,7 +2,8 @@ interface Settings {
accountSummaryTabs: boolean[] accountSummaryTabs: boolean[]
displayCurrency: string displayCurrency: string
reduceMotion: boolean reduceMotion: boolean
tradingPair: { buy: string; sell: string } tradingPairSimple: TradingPair
tradingPairAdvanced: TradingPair
lendAssets: boolean lendAssets: boolean
slippage: number slippage: number
tutorial: boolean tutorial: boolean

View File

@ -1,4 +1,8 @@
import { ASSETS } from 'constants/assets' import { ASSETS } from 'constants/assets'
import { BN_ZERO } from 'constants/math'
import { BNCoin } from 'types/classes/BNCoin'
import { byDenom } from 'utils/array'
import { demagnify } from 'utils/formatters'
export function getAssetByDenom(denom: string): Asset | undefined { export function getAssetByDenom(denom: string): Asset | undefined {
return ASSETS.find((asset) => asset.denom === denom) return ASSETS.find((asset) => asset.denom === denom)
@ -47,3 +51,42 @@ export function getBorrowEnabledAssets() {
export function getStakingAssets() { export function getStakingAssets() {
return ASSETS.filter((asset) => asset.isStaking) return ASSETS.filter((asset) => asset.isStaking)
} }
function isAssetPair(assetPair: Asset | AssetPair): assetPair is AssetPair {
return (<AssetPair>assetPair).buy !== undefined
}
export function sortAssetsOrPairs(
assets: Asset[] | AssetPair[],
prices: BNCoin[],
marketDeposits: BNCoin[],
balances: BNCoin[],
baseDenom: string,
): Asset[] | AssetPair[] {
if (prices.length === 0 || marketDeposits.length === 0) return assets
return assets.sort((a, b) => {
const assetA = isAssetPair(a) ? a.buy : a
const assetB = isAssetPair(b) ? b.buy : b
const aDenom = assetA.denom
const bDenom = assetB.denom
const aBalance = balances?.find(byDenom(aDenom))?.amount ?? BN_ZERO
const aPrice = prices?.find(byDenom(aDenom))?.amount ?? BN_ZERO
const bBalance = balances?.find(byDenom(bDenom))?.amount ?? BN_ZERO
const bPrice = prices?.find(byDenom(bDenom))?.amount ?? BN_ZERO
const aValue = demagnify(aBalance, assetA) * aPrice.toNumber()
const bValue = demagnify(bBalance, assetB) * bPrice.toNumber()
if (aValue > 0 || bValue > 0) return bValue - aValue
if (aDenom === baseDenom) return -1
if (bDenom === baseDenom) return 1
const aMarketDeposit = marketDeposits?.find(byDenom(aDenom))?.amount ?? BN_ZERO
const bMarketDeposit = marketDeposits?.find(byDenom(bDenom))?.amount ?? BN_ZERO
const aMarketValue = demagnify(aMarketDeposit, assetA) * aPrice.toNumber()
const bMarketValue = demagnify(bMarketDeposit, assetB) * bPrice.toNumber()
return bMarketValue - aMarketValue
})
}

View File

@ -40,9 +40,14 @@ export function max_swap_estimate_js(
/** /**
* @param {HealthComputer} c * @param {HealthComputer} c
* @param {string} denom * @param {string} denom
* @param {LiquidationPriceKind} kind
* @returns {string} * @returns {string}
*/ */
export function liquidation_price_js(c: HealthComputer, denom: string): string export function liquidation_price_js(
c: HealthComputer,
denom: string,
kind: LiquidationPriceKind,
): string
export interface HealthComputer { export interface HealthComputer {
kind: AccountKind kind: AccountKind
positions: Positions positions: Positions
@ -61,6 +66,8 @@ export interface HealthValuesResponse {
above_max_ltv: boolean above_max_ltv: boolean
} }
export type LiquidationPriceKind = 'asset' | 'debt'
export type Slippage = Decimal export type Slippage = Decimal
export type SwapKind = 'default' | 'margin' export type SwapKind = 'default' | 'margin'
@ -88,7 +95,7 @@ export interface InitOutput {
g: number, g: number,
h: number, h: number,
) => void ) => void
readonly liquidation_price_js: (a: number, b: number, c: number, d: number) => void readonly liquidation_price_js: (a: number, b: number, c: number, d: number, e: number) => void
readonly allocate: (a: number) => number readonly allocate: (a: number) => number
readonly deallocate: (a: number) => void readonly deallocate: (a: number) => void
readonly requires_iterator: () => void readonly requires_iterator: () => void

View File

@ -233,16 +233,17 @@ export function max_swap_estimate_js(c, from_denom, to_denom, kind, slippage) {
/** /**
* @param {HealthComputer} c * @param {HealthComputer} c
* @param {string} denom * @param {string} denom
* @param {LiquidationPriceKind} kind
* @returns {string} * @returns {string}
*/ */
export function liquidation_price_js(c, denom) { export function liquidation_price_js(c, denom, kind) {
let deferred2_0 let deferred2_0
let deferred2_1 let deferred2_1
try { try {
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16) const retptr = wasm.__wbindgen_add_to_stack_pointer(-16)
const ptr0 = passStringToWasm0(denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc) const ptr0 = passStringToWasm0(denom, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc)
const len0 = WASM_VECTOR_LEN const len0 = WASM_VECTOR_LEN
wasm.liquidation_price_js(retptr, addHeapObject(c), ptr0, len0) wasm.liquidation_price_js(retptr, addHeapObject(c), ptr0, len0, addHeapObject(kind))
var r0 = getInt32Memory0()[retptr / 4 + 0] var r0 = getInt32Memory0()[retptr / 4 + 0]
var r1 = getInt32Memory0()[retptr / 4 + 1] var r1 = getInt32Memory0()[retptr / 4 + 1]
deferred2_0 = r0 deferred2_0 = r0

View File

@ -14,7 +14,7 @@ export function max_swap_estimate_js(
g: number, g: number,
h: number, h: number,
): void ): void
export function liquidation_price_js(a: number, b: number, c: number, d: number): void export function liquidation_price_js(a: number, b: number, c: number, d: number, e: number): void
export function allocate(a: number): number export function allocate(a: number): number
export function deallocate(a: number): void export function deallocate(a: number): void
export function requires_iterator(): void export function requires_iterator(): void

View File

@ -1,4 +1,4 @@
import { BN } from './helpers' import { BN } from 'utils/helpers'
export const devideByPotentiallyZero = (numerator: number, denominator: number): number => { export const devideByPotentiallyZero = (numerator: number, denominator: number): number => {
if (denominator === 0) return 0 if (denominator === 0) return 0

View File

@ -1,4 +1,4 @@
import { formatAmountWithSymbol } from './formatters' import { formatAmountWithSymbol } from 'utils/formatters'
export function getNoBalanceMessage(symbol: string) { export function getNoBalanceMessage(symbol: string) {
return `You don't have an ${symbol} balance in your account.` return `You don't have an ${symbol} balance in your account.`

View File

@ -1,4 +1,9 @@
export function getRoute(page: Page, address?: string, accountId?: string | null) { export function getRoute(
page: Page,
searchParams: URLSearchParams,
address?: string,
accountId?: string | null,
) {
let nextUrl = '' let nextUrl = ''
if (address) { if (address) {
@ -9,10 +14,13 @@ export function getRoute(page: Page, address?: string, accountId?: string | null
let url = new URL(nextUrl, 'https://app.marsprotocol.io') let url = new URL(nextUrl, 'https://app.marsprotocol.io')
Array.from(searchParams?.entries() || []).map(([key, value]) =>
url.searchParams.append(key, value),
)
if (accountId) { if (accountId) {
url.searchParams.append('accountId', accountId)
} else {
url.searchParams.delete('accountId') url.searchParams.delete('accountId')
url.searchParams.append('accountId', accountId)
} }
return url.pathname + url.search return url.pathname + url.search
@ -21,6 +29,7 @@ export function getRoute(page: Page, address?: string, accountId?: string | null
export function getPage(pathname: string): Page { export function getPage(pathname: string): Page {
const pages: Page[] = [ const pages: Page[] = [
'trade', 'trade',
'trade-advanced',
'perps', 'perps',
'borrow', 'borrow',
'farm', 'farm',

View File

@ -4,6 +4,8 @@ const plugin = require('tailwindcss/plugin')
module.exports = { module.exports = {
content: ['./src/pages/**/*.{js,ts,jsx,tsx}', './src/components/**/*.{js,ts,jsx,tsx}'], content: ['./src/pages/**/*.{js,ts,jsx,tsx}', './src/components/**/*.{js,ts,jsx,tsx}'],
safelist: [ safelist: [
'border-error',
'border-success',
'h-2', 'h-2',
'text-3xs', 'text-3xs',
'text-3xs-caps', 'text-3xs-caps',
@ -41,12 +43,14 @@ module.exports = {
'@nav-3/navigation:inline-block', '@nav-3/navigation:inline-block',
'@nav-4/navigation:inline-block', '@nav-4/navigation:inline-block',
'@nav-5/navigation:inline-block', '@nav-5/navigation:inline-block',
'@nav-6/navigation:inline-block',
'@nav-0/navigation:hidden', '@nav-0/navigation:hidden',
'@nav-1/navigation:hidden', '@nav-1/navigation:hidden',
'@nav-2/navigation:hidden', '@nav-2/navigation:hidden',
'@nav-3/navigation:hidden', '@nav-3/navigation:hidden',
'@nav-4/navigation:hidden', '@nav-4/navigation:hidden',
'@nav-5/navigation:hidden', '@nav-5/navigation:hidden',
'@nav-6/navigation:hidden',
], ],
theme: { theme: {
extend: { extend: {
@ -141,6 +145,7 @@ module.exports = {
'nav-3': '400px', 'nav-3': '400px',
'nav-4': '500px', 'nav-4': '500px',
'nav-5': '600px', 'nav-5': '600px',
'nav-6': '650px',
}, },
fontFamily: { fontFamily: {
sans: ['Inter', 'sans-serif'], sans: ['Inter', 'sans-serif'],

588
yarn.lock
View File

@ -8,9 +8,9 @@
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
"@adobe/css-tools@^4.0.1": "@adobe/css-tools@^4.0.1":
version "4.3.1" version "4.3.2"
resolved "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.1.tgz" resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.3.2.tgz#a6abc715fb6884851fca9dad37fc34739a04fd11"
integrity sha512-/62yikz7NLScCGAAST5SHdnjaDJQBDq0M2muyRTpf2VQhw6StBg2ALiu73zSJQ4fMVLA+0uBhBHAle7Wg+2kSg== integrity sha512-DA5a1C0gD/pLOvhv33YMrbf2FK3oUzwNl9oOJqE4XVjuEtt6XIakRcsd7eLiOSPkp1kTRQGICTA8cKra/vFbjw==
"@alloc/quick-lru@^5.2.0": "@alloc/quick-lru@^5.2.0":
version "5.2.0" version "5.2.0"
@ -1608,6 +1608,13 @@
tslib "^2.6.0" tslib "^2.6.0"
tsup "^7.1.0" tsup "^7.1.0"
"@emnapi/runtime@^0.44.0":
version "0.44.0"
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-0.44.0.tgz#1ef702f846cfcd559d28eb7673919087ba5b63e3"
integrity sha512-ZX/etZEZw8DR7zAB1eVQT40lNo0jeqpb6dCgOvctB6FIQ5PoXfMuNY8+ayQfu8tNQbAB8gQWSSJupR8NxeiZXw==
dependencies:
tslib "^2.4.0"
"@esbuild/android-arm64@0.18.14": "@esbuild/android-arm64@0.18.14":
version "0.18.14" version "0.18.14"
resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.14.tgz#d86197e6ff965a187b2ea2704915f596a040ed4b" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.14.tgz#d86197e6ff965a187b2ea2704915f596a040ed4b"
@ -2146,6 +2153,119 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
"@img/sharp-darwin-arm64@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.0.tgz#b3e4ed1887f53faca5e95e3fd9f25181432353ed"
integrity sha512-070tEheekI1LJWTGPC9WlQEa5UoKTXzzlORBHMX4TbfUxMiL336YHR8vBEUNsjse0RJCX8dZ4ZXwT595aEF1ug==
optionalDependencies:
"@img/sharp-libvips-darwin-arm64" "1.0.0"
"@img/sharp-darwin-x64@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.0.tgz#277714bff6e6d468162146019933a416467f3082"
integrity sha512-pu/nvn152F3qbPeUkr+4e9zVvEhD3jhwzF473veQfMPkOYo9aoWXSfdZH/E6F+nYC3qvFjbxbvdDbUtEbghLqw==
optionalDependencies:
"@img/sharp-libvips-darwin-x64" "1.0.0"
"@img/sharp-libvips-darwin-arm64@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.0.tgz#8baf27b01dabba524e885c30287e1916ab978de7"
integrity sha512-VzYd6OwnUR81sInf3alj1wiokY50DjsHz5bvfnsFpxs5tqQxESoHtJO6xyksDs3RIkyhMWq2FufXo6GNSU9BMw==
"@img/sharp-libvips-darwin-x64@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.0.tgz#509113f649d3ea0e99b76d41437fc0049d8ba2f9"
integrity sha512-dD9OznTlHD6aovRswaPNEy8dKtSAmNo4++tO7uuR4o5VxbVAOoEQ1uSmN4iFAdQneTHws1lkTZeiXPrcCkh6IA==
"@img/sharp-libvips-linux-arm64@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.0.tgz#9e131cc95f9f8aa36da9addee89efead21ad9993"
integrity sha512-xTYThiqEZEZc0PRU90yVtM3KE7lw1bKdnDQ9kCTHWbqWyHOe4NpPOtMGy27YnN51q0J5dqRrvicfPbALIOeAZA==
"@img/sharp-libvips-linux-arm@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.0.tgz#a529f68a28ab1d219907071c41ace029121d1c4f"
integrity sha512-VwgD2eEikDJUk09Mn9Dzi1OW2OJFRQK+XlBTkUNmAWPrtj8Ly0yq05DFgu1VCMx2/DqCGQVi5A1dM9hTmxf3uw==
"@img/sharp-libvips-linux-s390x@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.0.tgz#c26aaa9ee58b47ff901bb5f93f29c4ab3f03caf7"
integrity sha512-o9E46WWBC6JsBlwU4QyU9578G77HBDT1NInd+aERfxeOPbk0qBZHgoDsQmA2v9TbqJRWzoBPx1aLOhprBMgPjw==
"@img/sharp-libvips-linux-x64@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.0.tgz#7a04795fbf2668b9dd7c74bf8326cb779131d809"
integrity sha512-naldaJy4hSVhWBgEjfdBY85CAa4UO+W1nx6a1sWStHZ7EUfNiuBTTN2KUYT5dH1+p/xij1t2QSXfCiFJoC5S/Q==
"@img/sharp-libvips-linuxmusl-arm64@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.0.tgz#600e7322faa5ce124d3ae2cbf63808ea47678591"
integrity sha512-OdorplCyvmSAPsoJLldtLh3nLxRrkAAAOHsGWGDYfN0kh730gifK+UZb3dWORRa6EusNqCTjfXV4GxvgJ/nPDQ==
"@img/sharp-libvips-linuxmusl-x64@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.0.tgz#af33a04e75f192c5396c6a41df8b7b7bf15a8006"
integrity sha512-FW8iK6rJrg+X2jKD0Ajhjv6y74lToIBEvkZhl42nZt563FfxkCYacrXZtd+q/sRQDypQLzY5WdLkVTbJoPyqNg==
"@img/sharp-linux-arm64@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.0.tgz#d9a361c1d5344754f6038cc9d74e1dd4d217f52f"
integrity sha512-dcomVSrtgF70SyOr8RCOCQ8XGVThXwe71A1d8MGA+mXEVRJ/J6/TrCbBEJh9ddcEIIsrnrkolaEvYSHqVhswQw==
optionalDependencies:
"@img/sharp-libvips-linux-arm64" "1.0.0"
"@img/sharp-linux-arm@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.0.tgz#e0f804033d99ce2af73c78d47eeb118e28b4af41"
integrity sha512-4horD3wMFd5a0ddbDY8/dXU9CaOgHjEHALAddXgafoR5oWq5s8X61PDgsSeh4Qupsdo6ycfPPSSNBrfVQnwwrg==
optionalDependencies:
"@img/sharp-libvips-linux-arm" "1.0.0"
"@img/sharp-linux-s390x@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.0.tgz#4b6d49f87364c60ae015825746f365385f1c3b54"
integrity sha512-TiVJbx38J2rNVfA309ffSOB+3/7wOsZYQEOlKqOUdWD/nqkjNGrX+YQGz7nzcf5oy2lC+d37+w183iNXRZNngQ==
optionalDependencies:
"@img/sharp-libvips-linux-s390x" "1.0.0"
"@img/sharp-linux-x64@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.0.tgz#a4fb262f143f468aec974aad6e53d1859a75ec90"
integrity sha512-PaZM4Zi7/Ek71WgTdvR+KzTZpBqrQOFcPe7/8ZoPRlTYYRe43k6TWsf4GVH6XKRLMYeSp8J89RfAhBrSP4itNA==
optionalDependencies:
"@img/sharp-libvips-linux-x64" "1.0.0"
"@img/sharp-linuxmusl-arm64@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.0.tgz#423a9e5e3ec1e6476dbdfd78dda91c6f062bfd67"
integrity sha512-1QLbbN0zt+32eVrg7bb1lwtvEaZwlhEsY1OrijroMkwAqlHqFj6R33Y47s2XUv7P6Ie1PwCxK/uFnNqMnkd5kg==
optionalDependencies:
"@img/sharp-libvips-linuxmusl-arm64" "1.0.0"
"@img/sharp-linuxmusl-x64@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.0.tgz#9d0beac9a71cd7d3bc41eef63521e60edc3820f5"
integrity sha512-CecqgB/CnkvCWFhmfN9ZhPGMLXaEBXl4o7WtA6U3Ztrlh/s7FUKX4vNxpMSYLIrWuuzjiaYdfU3+Tdqh1xaHfw==
optionalDependencies:
"@img/sharp-libvips-linuxmusl-x64" "1.0.0"
"@img/sharp-wasm32@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-wasm32/-/sharp-wasm32-0.33.0.tgz#5b085509f04256c43f201552fce5144fe0bd66b9"
integrity sha512-Hn4js32gUX9qkISlemZBUPuMs0k/xNJebUNl/L6djnU07B/HAA2KaxRVb3HvbU5fL242hLOcp0+tR+M8dvJUFw==
dependencies:
"@emnapi/runtime" "^0.44.0"
"@img/sharp-win32-ia32@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.0.tgz#a89bc502a70e5547cbff9451d06f9962425e7b39"
integrity sha512-5HfcsCZi3l5nPRF2q3bllMVMDXBqEWI3Q8KQONfzl0TferFE5lnsIG0A1YrntMAGqvkzdW6y1Ci1A2uTvxhfzg==
"@img/sharp-win32-x64@0.33.0":
version "0.33.0"
resolved "https://registry.yarnpkg.com/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.0.tgz#bfae1b82608a0d420e4b0b836ddb7dd58eaffa8e"
integrity sha512-i3DtP/2ce1yKFj4OzOnOYltOEL/+dp4dc4dJXJBv6god1AFTcmkaA99H/7SwOmkCOBQkbVvA3lCGm3/5nDtf9Q==
"@improbable-eng/grpc-web@^0.14.1": "@improbable-eng/grpc-web@^0.14.1":
version "0.14.1" version "0.14.1"
resolved "https://registry.npmjs.org/@improbable-eng/grpc-web/-/grpc-web-0.14.1.tgz" resolved "https://registry.npmjs.org/@improbable-eng/grpc-web/-/grpc-web-0.14.1.tgz"
@ -2682,10 +2802,10 @@
resolved "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz" resolved "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz"
integrity sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ== integrity sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==
"@next/eslint-plugin-next@14.0.0": "@next/eslint-plugin-next@14.0.4":
version "14.0.0" version "14.0.4"
resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.0.tgz#b299e61292b8abede7ecb37499feb817385801e6" resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-14.0.4.tgz#474fd88d92209270021186043513fbdc4203f5ec"
integrity sha512-Ye37nNI09V3yt7pzuzSQtwlvuJ2CGzFszHXkcTHHZgNr7EhTMFLipn3VSJChy+e5+ahTdNApPphc3qCPUsn10A== integrity sha512-U3qMNHmEZoVmHA0j/57nRfi3AscXNvkOnxDmle/69Jz/G0o/gWjXTDdlgILZdrxQ0Lw/jv2mPW8PGy0EGIHXhQ==
dependencies: dependencies:
glob "7.1.7" glob "7.1.7"
@ -2974,30 +3094,30 @@
"@noble/hashes" "~1.3.0" "@noble/hashes" "~1.3.0"
"@scure/base" "~1.1.0" "@scure/base" "~1.1.0"
"@sentry-internal/tracing@7.77.0": "@sentry-internal/tracing@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.77.0.tgz#f3d82486f8934a955b3dd2aa54c8d29586e42a37" resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.84.0.tgz#430da253ee5b075be4ef57f20ea842c0208bc6b0"
integrity sha512-8HRF1rdqWwtINqGEdx8Iqs9UOP/n8E0vXUu3Nmbqj4p5sQPA7vvCfq+4Y4rTqZFc7sNdFpDsRION5iQEh8zfZw== integrity sha512-y9bGYA0OM6PEREfd+nk4UURZy29tpIw+7vQwpxWfEVs2fqq0/5TBFX/tKFb8AKUI9lVM8v0bcF0bNSCnuPQZHQ==
dependencies: dependencies:
"@sentry/core" "7.77.0" "@sentry/core" "7.84.0"
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/utils" "7.84.0"
"@sentry/browser@7.77.0": "@sentry/browser@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.77.0.tgz#155440f1a0d3a1bbd5d564c28d6b0c9853a51d72" resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.84.0.tgz#7c82470f0afbb6178f26127894e40e9ce2b1e6d6"
integrity sha512-nJ2KDZD90H8jcPx9BysQLiQW+w7k7kISCWeRjrEMJzjtge32dmHA8G4stlUTRIQugy5F+73cOayWShceFP7QJQ== integrity sha512-X50TlTKY9WzAnHsYc4FYrCWgm+CdVo0h02ggmodVBUpRLUBjj+cs5Q1plov/v/XeorSwmorNEMUu/n+XZNSsrA==
dependencies: dependencies:
"@sentry-internal/tracing" "7.77.0" "@sentry-internal/tracing" "7.84.0"
"@sentry/core" "7.77.0" "@sentry/core" "7.84.0"
"@sentry/replay" "7.77.0" "@sentry/replay" "7.84.0"
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/utils" "7.84.0"
"@sentry/cli@^1.74.6": "@sentry/cli@^1.77.1":
version "1.75.0" version "1.77.1"
resolved "https://registry.npmjs.org/@sentry/cli/-/cli-1.75.0.tgz" resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.77.1.tgz#ebcf884712ef6c3c75443f491ec16f6a22148aec"
integrity sha512-vT8NurHy00GcN8dNqur4CMIYvFH3PaKdkX3qllVvi4syybKqjwoz+aWRCvprbYv0knweneFkLt1SmBWqazUMfA== integrity sha512-OtJ7U9LeuPUAY/xow9wwcjM9w42IJIpDtClTKI/RliE685vd/OJUIpiAvebHNthDYpQynvwb/0iuF4fonh+CKw==
dependencies: dependencies:
https-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0"
mkdirp "^0.5.5" mkdirp "^0.5.5"
@ -3006,101 +3126,102 @@
proxy-from-env "^1.1.0" proxy-from-env "^1.1.0"
which "^2.0.2" which "^2.0.2"
"@sentry/core@7.77.0": "@sentry/core@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.77.0.tgz#21100843132beeeff42296c8370cdcc7aa1d8510" resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.84.0.tgz#01d33fc452044ffd8ea57b20f60304b9cfa2b9e1"
integrity sha512-Tj8oTYFZ/ZD+xW8IGIsU6gcFXD/gfE+FUxUaeSosd9KHwBQNOLhZSsYo/tTVf/rnQI/dQnsd4onPZLiL+27aTg== integrity sha512-tbuwunbBx2kSex15IHCqHDnrMfIlqPc6w/76fwkGqokz3oh9GSEGlLICwmBWL8AypWimUg13IDtFpD0TJTriWA==
dependencies: dependencies:
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/utils" "7.84.0"
"@sentry/integrations@7.77.0": "@sentry/integrations@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.77.0.tgz#f2717e05cb7c69363316ccd34096b2ea07ae4c59" resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.84.0.tgz#3b016903e08f0dade74bbc152ea5605e231e39cd"
integrity sha512-P055qXgBHeZNKnnVEs5eZYLdy6P49Zr77A1aWJuNih/EenzMy922GOeGy2mF6XYrn1YJSjEwsNMNsQkcvMTK8Q== integrity sha512-aUu95BhnHSf/W/F4BvsFnf4x+piHiah5a180YTMqWcHMkJr7MnCWNIad9RJuHlcINSfyHtUr5+Z4Bajzqg60lw==
dependencies: dependencies:
"@sentry/core" "7.77.0" "@sentry/core" "7.84.0"
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/utils" "7.84.0"
localforage "^1.8.1" localforage "^1.8.1"
"@sentry/nextjs@^7.77.0": "@sentry/nextjs@^7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.77.0.tgz#036b1c45dd106e01d44967c97985464e108922be" resolved "https://registry.yarnpkg.com/@sentry/nextjs/-/nextjs-7.84.0.tgz#f6ff11049c1934c378863a80d69ff8777fd8f853"
integrity sha512-8tYPBt5luFjrng1sAMJqNjM9sq80q0jbt6yariADU9hEr7Zk8YqFaOI2/Q6yn9dZ6XyytIRtLEo54kk2AO94xw== integrity sha512-MjOGR3AZDVYfBQX2jZaxBMl7JaDSbu6uoiycdT+cMCYq722aB9Wv8vUzsCTzzV4/JmCjJFbfSis7S2Vkw7/9FA==
dependencies: dependencies:
"@rollup/plugin-commonjs" "24.0.0" "@rollup/plugin-commonjs" "24.0.0"
"@sentry/core" "7.77.0" "@sentry/core" "7.84.0"
"@sentry/integrations" "7.77.0" "@sentry/integrations" "7.84.0"
"@sentry/node" "7.77.0" "@sentry/node" "7.84.0"
"@sentry/react" "7.77.0" "@sentry/react" "7.84.0"
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/utils" "7.84.0"
"@sentry/vercel-edge" "7.77.0" "@sentry/vercel-edge" "7.84.0"
"@sentry/webpack-plugin" "1.20.0" "@sentry/webpack-plugin" "1.21.0"
chalk "3.0.0" chalk "3.0.0"
resolve "1.22.8" resolve "1.22.8"
rollup "2.78.0" rollup "2.78.0"
stacktrace-parser "^0.1.10" stacktrace-parser "^0.1.10"
"@sentry/node@7.77.0": "@sentry/node@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.77.0.tgz#a247452779a5bcb55724457707286e3e4a29dbbe" resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.84.0.tgz#c06167106796b2b83c0a9b52fa56f8ca820034ca"
integrity sha512-Ob5tgaJOj0OYMwnocc6G/CDLWC7hXfVvKX/ofkF98+BbN/tQa5poL+OwgFn9BA8ud8xKzyGPxGU6LdZ8Oh3z/g== integrity sha512-Xm3fIXT3TZOQi+6uQBavI8iOehD3PkY7v0y3hog0d4lQTH88vQK9BBsI+jZEq81Em+RG/u7vZNiFo6YMTnWF7Q==
dependencies: dependencies:
"@sentry-internal/tracing" "7.77.0" "@sentry-internal/tracing" "7.84.0"
"@sentry/core" "7.77.0" "@sentry/core" "7.84.0"
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/utils" "7.84.0"
https-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0"
"@sentry/react@7.77.0": "@sentry/react@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.77.0.tgz#9da14e4b21eae4b5a6306d39bb7c42ef0827d2c2" resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.84.0.tgz#2cb3192f7fb67b7696e8ece08d67229b193ddaa4"
integrity sha512-Q+htKzib5em0MdaQZMmPomaswaU3xhcVqmLi2CxqQypSjbYgBPPd+DuhrXKoWYLDDkkbY2uyfe4Lp3yLRWeXYw== integrity sha512-VQZrEHwPKCYTSbRYXD2ohXcQg99G1Hgs8eevRUuRpdChmA2e3z/RvT00NlaSNNZrS86wPyKpAK6kickB/eSYrw==
dependencies: dependencies:
"@sentry/browser" "7.77.0" "@sentry/browser" "7.84.0"
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/utils" "7.84.0"
hoist-non-react-statics "^3.3.2" hoist-non-react-statics "^3.3.2"
"@sentry/replay@7.77.0": "@sentry/replay@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.77.0.tgz#21d242c9cd70a7235237216174873fd140b6eb80" resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.84.0.tgz#7e17876d9a1802ee33800e2b2cbda4e026c0a2af"
integrity sha512-M9Ik2J5ekl+C1Och3wzLRZVaRGK33BlnBwfwf3qKjgLDwfKW+1YkwDfTHbc2b74RowkJbOVNcp4m8ptlehlSaQ== integrity sha512-c4PxT0ZpvkR9zXNfmAk3ojkm6eZ9+NlDze09RFBOCNo69QwIN90hnvbjXFC1+vRIJsfgo78Zr0ya/Wzb3Rog7Q==
dependencies: dependencies:
"@sentry-internal/tracing" "7.77.0" "@sentry-internal/tracing" "7.84.0"
"@sentry/core" "7.77.0" "@sentry/core" "7.84.0"
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/utils" "7.84.0"
"@sentry/types@7.77.0": "@sentry/types@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.77.0.tgz#c5d00fe547b89ccde59cdea59143bf145cee3144" resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.84.0.tgz#e8db86c36c61659c3b2558f0aa8b6a073a756117"
integrity sha512-nfb00XRJVi0QpDHg+JkqrmEBHsqBnxJu191Ded+Cs1OJ5oPXEW6F59LVcBScGvMqe+WEk1a73eH8XezwfgrTsA== integrity sha512-VqGLIF3JOUrk7yIXjLXJvAORkZL1e3dDX0Q1okRehwyt/5CRE+mdUTeJZkBo9P9mBwgMyvtwklzOGGrzjb4eMA==
"@sentry/utils@7.77.0": "@sentry/utils@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.77.0.tgz#1f88501f0b8777de31b371cf859d13c82ebe1379" resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.84.0.tgz#32861d922fa31e86dd2863a1d9dfc5a369e98952"
integrity sha512-NmM2kDOqVchrey3N5WSzdQoCsyDkQkiRxExPaNI2oKQ/jMWHs9yt0tSy7otPBcXs0AP59ihl75Bvm1tDRcsp5g== integrity sha512-qdUVuxnRBvaf05AU+28R+xYtZmi/Ymf8os3Njq9g4XuA+QEkZLbzmIpRK5W9Ja7vUtjOeg29Xgg43A8znde9LQ==
dependencies: dependencies:
"@sentry/types" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/vercel-edge@7.77.0": "@sentry/vercel-edge@7.84.0":
version "7.77.0" version "7.84.0"
resolved "https://registry.yarnpkg.com/@sentry/vercel-edge/-/vercel-edge-7.77.0.tgz#6a90a869878e4e78803c4331c30aea841fcc6a73" resolved "https://registry.yarnpkg.com/@sentry/vercel-edge/-/vercel-edge-7.84.0.tgz#8e8d13ae0d0ca2334daba97d688b4e12c1ca905f"
integrity sha512-ffddPCgxVeAccPYuH5sooZeHBqDuJ9OIhIRYKoDi4TvmwAzWo58zzZWhRpkHqHgIQdQvhLVZ5F+FSQVWnYSOkw== integrity sha512-vabN7aUYdTFTbufoPBnp8DdD3PaaWmlSuGnFQWmAl8AXaR+tB/3wQPfNqcVDdVoyoe8MADHtmU4KHJdMJYgzhg==
dependencies: dependencies:
"@sentry/core" "7.77.0" "@sentry-internal/tracing" "7.84.0"
"@sentry/types" "7.77.0" "@sentry/core" "7.84.0"
"@sentry/utils" "7.77.0" "@sentry/types" "7.84.0"
"@sentry/utils" "7.84.0"
"@sentry/webpack-plugin@1.20.0": "@sentry/webpack-plugin@1.21.0":
version "1.20.0" version "1.21.0"
resolved "https://registry.npmjs.org/@sentry/webpack-plugin/-/webpack-plugin-1.20.0.tgz" resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-1.21.0.tgz#bbe7cb293751f80246a4a56f9a7dd6de00f14b58"
integrity sha512-Ssj1mJVFsfU6vMCOM2d+h+KQR7QHSfeIP16t4l20Uq/neqWXZUQ2yvQfe4S3BjdbJXz/X4Rw8Hfy1Sd0ocunYw== integrity sha512-x0PYIMWcsTauqxgl7vWUY6sANl+XGKtx7DCVnnY7aOIIlIna0jChTAPANTfA2QrK+VK+4I/4JxatCEZBnXh3Og==
dependencies: dependencies:
"@sentry/cli" "^1.74.6" "@sentry/cli" "^1.77.1"
webpack-sources "^2.0.0 || ^3.0.0" webpack-sources "^2.0.0 || ^3.0.0"
"@sinclair/typebox@^0.27.8": "@sinclair/typebox@^0.27.8":
@ -3130,10 +3251,10 @@
lodash.debounce "^4.0.8" lodash.debounce "^4.0.8"
react-merge-refs "^2.0.1" react-merge-refs "^2.0.1"
"@splinetool/runtime@^0.9.482": "@splinetool/runtime@^0.9.521":
version "0.9.482" version "0.9.521"
resolved "https://registry.npmjs.org/@splinetool/runtime/-/runtime-0.9.482.tgz" resolved "https://registry.yarnpkg.com/@splinetool/runtime/-/runtime-0.9.521.tgz#e55b0cda37a29456642229006a5cabbc4d9faada"
integrity sha512-AqLBmaACtF0gi1Xdt4ts+BMZKlnpgytoLUpa30dzer1s15Fy0Q1sU5v0BEpG29JN0DLEEdCTG3LCfNAg/jWtiQ== integrity sha512-MJvC5ZDD6RYtOFEGiKkFw8q2X5CLc+T81lHymM/wCxAVeJ8MatYpCUtWQuOF/Loai2duYPadOGzZSqth/P9Mdw==
dependencies: dependencies:
on-change "^4.0.0" on-change "^4.0.0"
semver-compare "^1.0.0" semver-compare "^1.0.0"
@ -3570,10 +3691,10 @@
resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz" resolved "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz"
integrity sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g== integrity sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==
"@types/debounce-promise@^3.1.7": "@types/debounce-promise@^3.1.9":
version "3.1.7" version "3.1.9"
resolved "https://registry.npmjs.org/@types/debounce-promise/-/debounce-promise-3.1.7.tgz" resolved "https://registry.yarnpkg.com/@types/debounce-promise/-/debounce-promise-3.1.9.tgz#b59346fe5c24636ebe0fb88f2f7e41b888b1cd7c"
integrity sha512-XzqG8zCd9n33gmusdQo0d4p9iRKg/mZbG52wfHxnuZZyeO68ryOT5xyv9Fk3vLAvQBUsHmSL14Cqpsx4jjzz1Q== integrity sha512-awNxydYSU+E2vL7EiOAMtiSOfL5gUM5X4YSE2A92qpxDJQ/rXz6oMPYBFDcDywlUmvIDI6zsqgq17cGm5CITQw==
"@types/estree@*", "@types/estree@^1.0.0": "@types/estree@*", "@types/estree@^1.0.0":
version "1.0.0" version "1.0.0"
@ -3690,17 +3811,17 @@
dependencies: dependencies:
"@types/react" "*" "@types/react" "*"
"@types/react-helmet@^6.1.9": "@types/react-helmet@^6.1.11":
version "6.1.9" version "6.1.11"
resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.9.tgz#e79e0def2ad4047cb67e83c5be7cfb3d2121615a" resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.11.tgz#8cafcafff38f75361f451563ba7b406b0c5d3907"
integrity sha512-nuOeTefP4yPTWHvjGksCBKb/4hsgJxSX7aSTjTIDFXJIkZ6Wo2Y4/cmE1FO9OlYBrHjKOer/0zLwY7s4qiQBtw== integrity sha512-0QcdGLddTERotCXo3VFlUSWO3ztraw8nZ6e3zJSgG7apwV5xt+pJUS8ewPBqT4NYB1optGLprNQzFleIY84u/g==
dependencies: dependencies:
"@types/react" "*" "@types/react" "*"
"@types/react@*", "@types/react@18.2.33": "@types/react@*", "@types/react@18.2.41":
version "18.2.33" version "18.2.41"
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.33.tgz#055356243dc4350a9ee6c6a2c07c5cae12e38877" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.41.tgz#9eea044246bdb10510df89ef7f8422a8b6ad8fb9"
integrity sha512-v+I7S+hu3PIBoVkKGpSYYpiBT1ijqEzWpzQD62/jm4K74hPpSP7FF9BnKG6+fg2+62weJYkkBWDJlZt5JO/9hg== integrity sha512-CwOGr/PiLiNBxEBqpJ7fO3kocP/2SSuC9fpH5K7tusrg4xPSRT/193rzolYwQnTN02We/ATXKnb6GqA5w4fRxw==
dependencies: dependencies:
"@types/prop-types" "*" "@types/prop-types" "*"
"@types/scheduler" "*" "@types/scheduler" "*"
@ -4088,12 +4209,12 @@ ansi-escapes@^4.2.1:
dependencies: dependencies:
type-fest "^0.21.3" type-fest "^0.21.3"
ansi-escapes@^5.0.0: ansi-escapes@^6.2.0:
version "5.0.0" version "6.2.0"
resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947"
integrity sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA== integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==
dependencies: dependencies:
type-fest "^1.0.2" type-fest "^3.0.0"
ansi-regex@^5.0.1: ansi-regex@^5.0.1:
version "5.0.1" version "5.0.1"
@ -4124,7 +4245,7 @@ ansi-styles@^5.0.0:
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
ansi-styles@^6.0.0, ansi-styles@^6.1.0: ansi-styles@^6.0.0, ansi-styles@^6.2.1:
version "6.2.1" version "6.2.1"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz"
integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
@ -4723,13 +4844,13 @@ cli-cursor@^4.0.0:
dependencies: dependencies:
restore-cursor "^4.0.0" restore-cursor "^4.0.0"
cli-truncate@^3.1.0: cli-truncate@^4.0.0:
version "3.1.0" version "4.0.0"
resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-4.0.0.tgz#6cc28a2924fee9e25ce91e973db56c7066e6172a"
integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==
dependencies: dependencies:
slice-ansi "^5.0.0" slice-ansi "^5.0.0"
string-width "^5.0.0" string-width "^7.0.0"
client-only@0.0.1, client-only@^0.0.1: client-only@0.0.1, client-only@^0.0.1:
version "0.0.1" version "0.0.1"
@ -4793,11 +4914,27 @@ color-name@1.1.3:
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
color-name@~1.1.4: color-name@^1.0.0, color-name@~1.1.4:
version "1.1.4" version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^1.9.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4"
integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==
dependencies:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
color@^4.2.3:
version "4.2.3"
resolved "https://registry.yarnpkg.com/color/-/color-4.2.3.tgz#d781ecb5e57224ee43ea9627560107c0e0c6463a"
integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==
dependencies:
color-convert "^2.0.1"
color-string "^1.9.0"
colorette@^2.0.20: colorette@^2.0.20:
version "2.0.20" version "2.0.20"
resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz"
@ -5240,6 +5377,11 @@ detect-browser@5.3.0:
resolved "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz" resolved "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz"
integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==
detect-libc@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d"
integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
detect-newline@^3.0.0: detect-newline@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz"
@ -5377,11 +5519,6 @@ duplexify@^4.1.2:
readable-stream "^3.1.1" readable-stream "^3.1.1"
stream-shift "^1.0.0" stream-shift "^1.0.0"
eastasianwidth@^0.2.0:
version "0.2.0"
resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz"
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
eccrypto@1.1.6: eccrypto@1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.6.tgz" resolved "https://registry.npmjs.org/eccrypto/-/eccrypto-1.1.6.tgz"
@ -5417,6 +5554,11 @@ emittery@^0.13.1:
resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz"
integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==
emoji-regex@^10.3.0:
version "10.3.0"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23"
integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==
emoji-regex@^8.0.0: emoji-regex@^8.0.0:
version "8.0.0" version "8.0.0"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
@ -5663,12 +5805,12 @@ escodegen@^2.0.0:
optionalDependencies: optionalDependencies:
source-map "~0.6.1" source-map "~0.6.1"
eslint-config-next@^14.0.0: eslint-config-next@^14.0.4:
version "14.0.0" version "14.0.4"
resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.0.tgz#c896867c8f08dab65205fb3b4bcc5d9ab8646d08" resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-14.0.4.tgz#7cd2c0a3b310203d41cf0dbf9d31f9b0a6235b4a"
integrity sha512-jtXeE+/pGQ3h9n11QyyuPN50kO13GO5XvjU5ZRq6W+XTpOMjyobWmK2s7aowy0FtzA49krJzYzEU9s1RMwoJ6g== integrity sha512-9/xbOHEQOmQtqvQ1UsTQZpnA7SlDMBtuKJ//S4JnoyK3oGLhILKXdBgu/UO7lQo/2xOykQULS1qQ6p2+EpHgAQ==
dependencies: dependencies:
"@next/eslint-plugin-next" "14.0.0" "@next/eslint-plugin-next" "14.0.4"
"@rushstack/eslint-patch" "^1.3.3" "@rushstack/eslint-patch" "^1.3.3"
"@typescript-eslint/parser" "^5.4.2 || ^6.0.0" "@typescript-eslint/parser" "^5.4.2 || ^6.0.0"
eslint-import-resolver-node "^0.3.6" eslint-import-resolver-node "^0.3.6"
@ -6267,6 +6409,11 @@ get-caller-file@^2.0.5:
resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
get-east-asian-width@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz#5e6ebd9baee6fb8b7b6bd505221065f0cd91f64e"
integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==
get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0:
version "1.2.0" version "1.2.0"
resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz" resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz"
@ -6732,6 +6879,11 @@ is-arrayish@^0.2.1:
resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz"
integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
is-arrayish@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
is-async-function@^2.0.0: is-async-function@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz" resolved "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz"
@ -6807,6 +6959,13 @@ is-fullwidth-code-point@^4.0.0:
resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz"
integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
is-fullwidth-code-point@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz#9609efced7c2f97da7b60145ef481c787c7ba704"
integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==
dependencies:
get-east-asian-width "^1.0.0"
is-generator-fn@^2.0.0: is-generator-fn@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz"
@ -7634,7 +7793,12 @@ lie@3.1.1:
dependencies: dependencies:
immediate "~3.0.5" immediate "~3.0.5"
lilconfig@2.1.0, lilconfig@^2.0.5, lilconfig@^2.1.0: lilconfig@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc"
integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==
lilconfig@^2.0.5, lilconfig@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz" resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz"
integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==
@ -7651,33 +7815,33 @@ link-module-alias@^1.2.0:
dependencies: dependencies:
chalk "^2.4.1" chalk "^2.4.1"
lint-staged@^15.0.1: lint-staged@^15.2.0:
version "15.0.1" version "15.2.0"
resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-15.0.1.tgz" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.0.tgz#3111534ca58096a3c8f70b044b6e7fe21b36f859"
integrity sha512-2IU5OWmCaxch0X0+IBF4/v7sutpB+F3qoXbro43pYjQTOo5wumckjxoxn47pQBqqBsCWrD5HnI2uG/zJA7isew== integrity sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==
dependencies: dependencies:
chalk "5.3.0" chalk "5.3.0"
commander "11.1.0" commander "11.1.0"
debug "4.3.4" debug "4.3.4"
execa "8.0.1" execa "8.0.1"
lilconfig "2.1.0" lilconfig "3.0.0"
listr2 "7.0.1" listr2 "8.0.0"
micromatch "4.0.5" micromatch "4.0.5"
pidtree "0.6.0" pidtree "0.6.0"
string-argv "0.3.2" string-argv "0.3.2"
yaml "2.3.2" yaml "2.3.4"
listr2@7.0.1: listr2@8.0.0:
version "7.0.1" version "8.0.0"
resolved "https://registry.npmjs.org/listr2/-/listr2-7.0.1.tgz" resolved "https://registry.yarnpkg.com/listr2/-/listr2-8.0.0.tgz#aa7c230995f8ce378585f7c96c0c6d1cefa4700d"
integrity sha512-nz+7hwgbDp8eWNoDgzdl4hA/xDSLrNRzPu1TLgOYs6l5Y+Ma6zVWWy9Oyt9TQFONwKoSPoka3H50D3vD5EuNwg== integrity sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==
dependencies: dependencies:
cli-truncate "^3.1.0" cli-truncate "^4.0.0"
colorette "^2.0.20" colorette "^2.0.20"
eventemitter3 "^5.0.1" eventemitter3 "^5.0.1"
log-update "^5.0.1" log-update "^6.0.0"
rfdc "^1.3.0" rfdc "^1.3.0"
wrap-ansi "^8.1.0" wrap-ansi "^9.0.0"
load-tsconfig@^0.2.3: load-tsconfig@^0.2.3:
version "0.2.5" version "0.2.5"
@ -7740,16 +7904,16 @@ lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21:
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
log-update@^5.0.1: log-update@^6.0.0:
version "5.0.1" version "6.0.0"
resolved "https://registry.npmjs.org/log-update/-/log-update-5.0.1.tgz" resolved "https://registry.yarnpkg.com/log-update/-/log-update-6.0.0.tgz#0ddeb7ac6ad658c944c1de902993fce7c33f5e59"
integrity sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw== integrity sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==
dependencies: dependencies:
ansi-escapes "^5.0.0" ansi-escapes "^6.2.0"
cli-cursor "^4.0.0" cli-cursor "^4.0.0"
slice-ansi "^5.0.0" slice-ansi "^7.0.0"
strip-ansi "^7.0.1" strip-ansi "^7.1.0"
wrap-ansi "^8.0.1" wrap-ansi "^9.0.0"
long@^4.0.0: long@^4.0.0:
version "4.0.0" version "4.0.0"
@ -8664,20 +8828,18 @@ react-draggable@^4.4.6:
clsx "^1.1.1" clsx "^1.1.1"
prop-types "^15.8.1" prop-types "^15.8.1"
react-fast-compare@^3.2.0: react-fast-compare@^3.2.2:
version "3.2.2" version "3.2.2"
resolved "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49"
integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==
react-helmet-async@^1.3.0: react-helmet-async@^2.0.3:
version "1.3.0" version "2.0.3"
resolved "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz" resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-2.0.3.tgz#904f79d906f91da6728dab6a062c3b8354930881"
integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== integrity sha512-7/X3ehSCbjCaIljWa39Bb7F1Y2JWM23FN80kLozx2TdgzUmxKDSLN6qu06NG0Srzm8ljGOjgk7r7CXeEOx4MPw==
dependencies: dependencies:
"@babel/runtime" "^7.12.5"
invariant "^2.2.4" invariant "^2.2.4"
prop-types "^15.7.2" react-fast-compare "^3.2.2"
react-fast-compare "^3.2.0"
shallowequal "^1.1.0" shallowequal "^1.1.0"
react-is@^16.10.2, react-is@^16.13.1, react-is@^16.7.0: react-is@^16.10.2, react-is@^16.13.1, react-is@^16.7.0:
@ -9215,6 +9377,35 @@ shallowequal@^1.1.0:
resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz"
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==
sharp@^0.33.0:
version "0.33.0"
resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.33.0.tgz#95f77cda3684522e210ab55a167dad6cb5fbfe4f"
integrity sha512-99DZKudjm/Rmz+M0/26t4DKpXyywAOJaayGS9boEn7FvgtG0RYBi46uPE2c+obcJRtA3AZa0QwJot63gJQ1F0Q==
dependencies:
color "^4.2.3"
detect-libc "^2.0.2"
semver "^7.5.4"
optionalDependencies:
"@img/sharp-darwin-arm64" "0.33.0"
"@img/sharp-darwin-x64" "0.33.0"
"@img/sharp-libvips-darwin-arm64" "1.0.0"
"@img/sharp-libvips-darwin-x64" "1.0.0"
"@img/sharp-libvips-linux-arm" "1.0.0"
"@img/sharp-libvips-linux-arm64" "1.0.0"
"@img/sharp-libvips-linux-s390x" "1.0.0"
"@img/sharp-libvips-linux-x64" "1.0.0"
"@img/sharp-libvips-linuxmusl-arm64" "1.0.0"
"@img/sharp-libvips-linuxmusl-x64" "1.0.0"
"@img/sharp-linux-arm" "0.33.0"
"@img/sharp-linux-arm64" "0.33.0"
"@img/sharp-linux-s390x" "0.33.0"
"@img/sharp-linux-x64" "0.33.0"
"@img/sharp-linuxmusl-arm64" "0.33.0"
"@img/sharp-linuxmusl-x64" "0.33.0"
"@img/sharp-wasm32" "0.33.0"
"@img/sharp-win32-ia32" "0.33.0"
"@img/sharp-win32-x64" "0.33.0"
shebang-command@^2.0.0: shebang-command@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
@ -9263,6 +9454,13 @@ signal-exit@^4.1.0:
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
simple-swizzle@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==
dependencies:
is-arrayish "^0.3.1"
sisteransi@^1.0.5: sisteransi@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz"
@ -9286,6 +9484,14 @@ slice-ansi@^5.0.0:
ansi-styles "^6.0.0" ansi-styles "^6.0.0"
is-fullwidth-code-point "^4.0.0" is-fullwidth-code-point "^4.0.0"
slice-ansi@^7.0.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-7.1.0.tgz#cd6b4655e298a8d1bdeb04250a433094b347b9a9"
integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==
dependencies:
ansi-styles "^6.2.1"
is-fullwidth-code-point "^5.0.0"
snake-case@^3.0.4: snake-case@^3.0.4:
version "3.0.4" version "3.0.4"
resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz" resolved "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz"
@ -9413,14 +9619,14 @@ string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
is-fullwidth-code-point "^3.0.0" is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1" strip-ansi "^6.0.1"
string-width@^5.0.0, string-width@^5.0.1: string-width@^7.0.0:
version "5.1.2" version "7.0.0"
resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.0.0.tgz#14aa1b7aaa126d5b64fa79d3c894da8a9650ba06"
integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== integrity sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==
dependencies: dependencies:
eastasianwidth "^0.2.0" emoji-regex "^10.3.0"
emoji-regex "^9.2.2" get-east-asian-width "^1.0.0"
strip-ansi "^7.0.1" strip-ansi "^7.1.0"
string.prototype.matchall@^4.0.8: string.prototype.matchall@^4.0.8:
version "4.0.8" version "4.0.8"
@ -9507,9 +9713,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies: dependencies:
ansi-regex "^5.0.1" ansi-regex "^5.0.1"
strip-ansi@^7.0.1: strip-ansi@^7.1.0:
version "7.1.0" version "7.1.0"
resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
dependencies: dependencies:
ansi-regex "^6.0.1" ansi-regex "^6.0.1"
@ -9929,16 +10135,16 @@ type-fest@^0.7.1:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz" resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz"
integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
type-fest@^1.0.2:
version "1.4.0"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz"
integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==
type-fest@^2.5.2: type-fest@^2.5.2:
version "2.19.0" version "2.19.0"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz"
integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
type-fest@^3.0.0:
version "3.13.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.13.1.tgz#bb744c1f0678bea7543a2d1ec24e83e68e8c8706"
integrity sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==
typed-array-buffer@^1.0.0: typed-array-buffer@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz" resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz"
@ -10308,14 +10514,14 @@ wrap-ansi@^7.0.0:
string-width "^4.1.0" string-width "^4.1.0"
strip-ansi "^6.0.0" strip-ansi "^6.0.0"
wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: wrap-ansi@^9.0.0:
version "8.1.0" version "9.0.0"
resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-9.0.0.tgz#1a3dc8b70d85eeb8398ddfb1e4a02cd186e58b3e"
integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==
dependencies: dependencies:
ansi-styles "^6.1.0" ansi-styles "^6.2.1"
string-width "^5.0.1" string-width "^7.0.0"
strip-ansi "^7.0.1" strip-ansi "^7.1.0"
wrappy@1: wrappy@1:
version "1.0.2" version "1.0.2"
@ -10383,10 +10589,10 @@ yallist@^4.0.0:
resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yaml@2.3.2, yaml@^2.1.1: yaml@2.3.4, yaml@^2.1.1:
version "2.3.2" version "2.3.4"
resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz" resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2"
integrity sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg== integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==
yargs-parser@^20.2.2: yargs-parser@^20.2.2:
version "20.2.9" version "20.2.9"