From 0c6bca6ae5032352d618398f25827bcf1cbb0574 Mon Sep 17 00:00:00 2001 From: Andrey Kopylov Date: Mon, 28 Apr 2025 15:35:09 +0500 Subject: [PATCH 1/6] [custom-theme] set new UI base --- .../abstract.RewardSplitter.md | 2 +- .../abstract.OsTokenVaultEscrow.md | 2 +- .../contract.DepositDataRegistry.md | 2 +- .../contract.EthErc20Vault.md | 2 +- .../EthVault.sol/contract.EthVault.md | 2 +- .../EthFoxVault.sol/contract.EthFoxVault.md | 2 +- .../contract.GnoErc20Vault.md | 2 +- .../gnosis/GnoVault.sol/contract.GnoVault.md | 2 +- .../VaultToken.sol/abstract.VaultToken.md | 2 +- .../migrate-from-v2/01-ethereum.mdx | 4 +- .../migrate-from-v2/02-gnosis.mdx | 2 +- .../02-running-with-remote-signer.mdx | 4 +- .../03-running-with-hashicorp-vault.mdx | 2 +- .../04-running-as-api-service.mdx | 2 +- .../operator-services/05-monitoring.mdx | 2 +- docs/docs/guides/01-staking.mdx | 20 +- docs/docs/guides/02-running-a-vault.mdx | 2 +- docs/docs/guides/03-ostoken.mdx | 28 +- docs/docs/guides/defi/01-boost.mdx | 4 +- .../guides/defi/02-swise-eth-liquidity.mdx | 2 +- .../protocol-overview-in-depth/02-vaults.mdx | 12 +- .../03-os-token.mdx | 10 - docusaurus.config.ts | 194 ++--- package-lock.json | 817 +++++++++++++++++- package.json | 19 +- sidebars.ts | 37 +- src/components/BrandAssets/BrandAssets.tsx | 18 + .../BrandAssets/stakewise-brand-assets.zip | Bin 0 -> 6672 bytes .../Blocks/Block/Block.module.css | 16 + .../DocsSections/Blocks/Block/Block.tsx | 41 + src/components/DocsSections/Blocks/Blocks.tsx | 38 + src/components/DocsSections/DocsSections.tsx | 32 + src/components/FAQ/FAQ.module.css | 4 + src/components/FAQ/FAQ.tsx | 40 + src/components/FAQ/Question/Question.tsx | 80 ++ src/components/FAQ/questions.ts | 30 + src/components/GitHub/GitHub.tsx | 43 + src/components/GitHub/Item/Item.module.css | 11 + src/components/GitHub/Item/Item.tsx | 32 + src/components/HomepageFeatures/index.tsx | 71 -- .../HomepageFeatures/styles.module.css | 11 - src/components/Links/Block/Block.module.css | 17 + src/components/Links/Block/Block.tsx | 37 + src/components/Links/Links.tsx | 45 + src/components/index.ts | 5 + src/css/custom.css | 173 +++- src/css/tailwind/config.css | 6 + src/css/tailwind/layers/base.css | 153 ++++ src/css/tailwind/layers/components.css | 139 +++ src/css/tailwind/layers/destyle.css | 415 +++++++++ src/css/tailwind/layers/utilities.css | 49 ++ src/css/tailwind/theme.css | 29 + src/pages/index.module.css | 23 - src/pages/index.tsx | 71 +- src/pages/markdown-page.md | 7 - src/plugins/tailwind-config.js | 10 + static/icon/code.svg | 1 + static/icon/discord.svg | 1 + static/icon/file.svg | 1 + static/icon/forum.svg | 1 + static/icon/gears.svg | 1 + static/icon/link.svg | 1 + static/icon/telegram.svg | 1 + static/icon/twitter.svg | 1 + static/icon/vote.svg | 1 + static/img/docusaurus-social-card.jpg | Bin 55746 -> 0 bytes static/img/docusaurus.png | Bin 5142 -> 0 bytes static/img/favicon.ico | Bin 3626 -> 15086 bytes static/img/logo.svg | 173 +++- static/img/logo180.png | Bin 0 -> 13445 bytes static/img/logo192.png | Bin 0 -> 8815 bytes static/img/logo512.png | Bin 0 -> 30941 bytes static/img/og-image.png | Bin 0 -> 40612 bytes static/img/undraw_docusaurus_mountain.svg | 171 ---- static/img/undraw_docusaurus_react.svg | 170 ---- static/img/undraw_docusaurus_tree.svg | 40 - 76 files changed, 2601 insertions(+), 787 deletions(-) create mode 100644 src/components/BrandAssets/BrandAssets.tsx create mode 100644 src/components/BrandAssets/stakewise-brand-assets.zip create mode 100644 src/components/DocsSections/Blocks/Block/Block.module.css create mode 100644 src/components/DocsSections/Blocks/Block/Block.tsx create mode 100644 src/components/DocsSections/Blocks/Blocks.tsx create mode 100644 src/components/DocsSections/DocsSections.tsx create mode 100644 src/components/FAQ/FAQ.module.css create mode 100644 src/components/FAQ/FAQ.tsx create mode 100644 src/components/FAQ/Question/Question.tsx create mode 100644 src/components/FAQ/questions.ts create mode 100644 src/components/GitHub/GitHub.tsx create mode 100644 src/components/GitHub/Item/Item.module.css create mode 100644 src/components/GitHub/Item/Item.tsx delete mode 100644 src/components/HomepageFeatures/index.tsx delete mode 100644 src/components/HomepageFeatures/styles.module.css create mode 100644 src/components/Links/Block/Block.module.css create mode 100644 src/components/Links/Block/Block.tsx create mode 100644 src/components/Links/Links.tsx create mode 100644 src/components/index.ts create mode 100644 src/css/tailwind/config.css create mode 100644 src/css/tailwind/layers/base.css create mode 100644 src/css/tailwind/layers/components.css create mode 100644 src/css/tailwind/layers/destyle.css create mode 100644 src/css/tailwind/layers/utilities.css create mode 100644 src/css/tailwind/theme.css delete mode 100644 src/pages/index.module.css delete mode 100644 src/pages/markdown-page.md create mode 100644 src/plugins/tailwind-config.js create mode 100644 static/icon/code.svg create mode 100644 static/icon/discord.svg create mode 100644 static/icon/file.svg create mode 100644 static/icon/forum.svg create mode 100644 static/icon/gears.svg create mode 100644 static/icon/link.svg create mode 100644 static/icon/telegram.svg create mode 100644 static/icon/twitter.svg create mode 100644 static/icon/vote.svg delete mode 100644 static/img/docusaurus-social-card.jpg delete mode 100644 static/img/docusaurus.png create mode 100644 static/img/logo180.png create mode 100644 static/img/logo192.png create mode 100644 static/img/logo512.png create mode 100644 static/img/og-image.png delete mode 100644 static/img/undraw_docusaurus_mountain.svg delete mode 100644 static/img/undraw_docusaurus_react.svg delete mode 100644 static/img/undraw_docusaurus_tree.svg diff --git a/docs/contracts/misc/RewardSplitter.sol/abstract.RewardSplitter.md b/docs/contracts/misc/RewardSplitter.sol/abstract.RewardSplitter.md index c30fff9..92091c9 100644 --- a/docs/contracts/misc/RewardSplitter.sol/abstract.RewardSplitter.md +++ b/docs/contracts/misc/RewardSplitter.sol/abstract.RewardSplitter.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/misc/RewardSplitter.sol) **Inherits:** -[IRewardSplitter](/contracts/interfaces/IRewardSplitter.sol/interface.IRewardSplitter.md), Initializable, [Multicall](/contracts/base/Multicall.sol/abstract.Multicall.md) +[IRewardSplitter](/contracts/interfaces/IRewardSplitter.sol/interface.IRewardSplitter.md), Initializable, [Multicall](/contracts/base/multicall.md) **Author:** StakeWise diff --git a/docs/contracts/tokens/OsTokenVaultEscrow.sol/abstract.OsTokenVaultEscrow.md b/docs/contracts/tokens/OsTokenVaultEscrow.sol/abstract.OsTokenVaultEscrow.md index 2691aa3..990a4e2 100644 --- a/docs/contracts/tokens/OsTokenVaultEscrow.sol/abstract.OsTokenVaultEscrow.md +++ b/docs/contracts/tokens/OsTokenVaultEscrow.sol/abstract.OsTokenVaultEscrow.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/tokens/OsTokenVaultEscrow.sol) **Inherits:** -Ownable2Step, [Multicall](/contracts/base/Multicall.sol/abstract.Multicall.md), [IOsTokenVaultEscrow](/contracts/interfaces/IOsTokenVaultEscrow.sol/interface.IOsTokenVaultEscrow.md) +Ownable2Step, [Multicall](/contracts/base/multicall.md), [IOsTokenVaultEscrow](/contracts/interfaces/IOsTokenVaultEscrow.sol/interface.IOsTokenVaultEscrow.md) **Author:** StakeWise diff --git a/docs/contracts/validators/DepositDataRegistry.sol/contract.DepositDataRegistry.md b/docs/contracts/validators/DepositDataRegistry.sol/contract.DepositDataRegistry.md index 5a09fcc..3cc46f3 100644 --- a/docs/contracts/validators/DepositDataRegistry.sol/contract.DepositDataRegistry.md +++ b/docs/contracts/validators/DepositDataRegistry.sol/contract.DepositDataRegistry.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/validators/DepositDataRegistry.sol) **Inherits:** -[Multicall](/contracts/base/Multicall.sol/abstract.Multicall.md), [IDepositDataRegistry](/contracts/interfaces/IDepositDataRegistry.sol/interface.IDepositDataRegistry.md) +[Multicall](/contracts/base/multicall.md), [IDepositDataRegistry](/contracts/interfaces/IDepositDataRegistry.sol/interface.IDepositDataRegistry.md) **Author:** StakeWise diff --git a/docs/contracts/vaults/ethereum/EthErc20Vault.sol/contract.EthErc20Vault.md b/docs/contracts/vaults/ethereum/EthErc20Vault.sol/contract.EthErc20Vault.md index 1fbfe54..3283ab3 100644 --- a/docs/contracts/vaults/ethereum/EthErc20Vault.sol/contract.EthErc20Vault.md +++ b/docs/contracts/vaults/ethereum/EthErc20Vault.sol/contract.EthErc20Vault.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/vaults/ethereum/EthErc20Vault.sol) **Inherits:** -[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultOsToken](/contracts/vaults/modules/VaultOsToken.sol/abstract.VaultOsToken.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultToken](/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md), [VaultEthStaking](/contracts/vaults/modules/VaultEthStaking.sol/abstract.VaultEthStaking.md), [Multicall](/contracts/base/Multicall.sol/abstract.Multicall.md), [IEthErc20Vault](/contracts/interfaces/IEthErc20Vault.sol/interface.IEthErc20Vault.md) +[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultOsToken](/contracts/vaults/modules/VaultOsToken.sol/abstract.VaultOsToken.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultToken](/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md), [VaultEthStaking](/contracts/vaults/modules/VaultEthStaking.sol/abstract.VaultEthStaking.md), [Multicall](/contracts/base/multicall.md), [IEthErc20Vault](/contracts/interfaces/IEthErc20Vault.sol/interface.IEthErc20Vault.md) **Author:** StakeWise diff --git a/docs/contracts/vaults/ethereum/EthVault.sol/contract.EthVault.md b/docs/contracts/vaults/ethereum/EthVault.sol/contract.EthVault.md index 1ddcf47..c753b26 100644 --- a/docs/contracts/vaults/ethereum/EthVault.sol/contract.EthVault.md +++ b/docs/contracts/vaults/ethereum/EthVault.sol/contract.EthVault.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/vaults/ethereum/EthVault.sol) **Inherits:** -[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultOsToken](/contracts/vaults/modules/VaultOsToken.sol/abstract.VaultOsToken.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultEthStaking](/contracts/vaults/modules/VaultEthStaking.sol/abstract.VaultEthStaking.md), [Multicall](/contracts/base/Multicall.sol/abstract.Multicall.md), [IEthVault](/contracts/interfaces/IEthVault.sol/interface.IEthVault.md) +[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultOsToken](/contracts/vaults/modules/VaultOsToken.sol/abstract.VaultOsToken.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultEthStaking](/contracts/vaults/modules/VaultEthStaking.sol/abstract.VaultEthStaking.md), [Multicall](/contracts/base/multicall.md), [IEthVault](/contracts/interfaces/IEthVault.sol/interface.IEthVault.md) **Author:** StakeWise diff --git a/docs/contracts/vaults/ethereum/custom/EthFoxVault.sol/contract.EthFoxVault.md b/docs/contracts/vaults/ethereum/custom/EthFoxVault.sol/contract.EthFoxVault.md index 3515c4e..7b2a2af 100644 --- a/docs/contracts/vaults/ethereum/custom/EthFoxVault.sol/contract.EthFoxVault.md +++ b/docs/contracts/vaults/ethereum/custom/EthFoxVault.sol/contract.EthFoxVault.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/vaults/ethereum/custom/EthFoxVault.sol) **Inherits:** -[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultEthStaking](/contracts/vaults/modules/VaultEthStaking.sol/abstract.VaultEthStaking.md), [VaultBlocklist](/contracts/vaults/modules/VaultBlocklist.sol/abstract.VaultBlocklist.md), [Multicall](/contracts/base/Multicall.sol/abstract.Multicall.md), [IEthFoxVault](/contracts/interfaces/IEthFoxVault.sol/interface.IEthFoxVault.md) +[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultEthStaking](/contracts/vaults/modules/VaultEthStaking.sol/abstract.VaultEthStaking.md), [VaultBlocklist](/contracts/vaults/modules/VaultBlocklist.sol/abstract.VaultBlocklist.md), [Multicall](/contracts/base/multicall.md), [IEthFoxVault](/contracts/interfaces/IEthFoxVault.sol/interface.IEthFoxVault.md) **Author:** StakeWise diff --git a/docs/contracts/vaults/gnosis/GnoErc20Vault.sol/contract.GnoErc20Vault.md b/docs/contracts/vaults/gnosis/GnoErc20Vault.sol/contract.GnoErc20Vault.md index 6d6415e..4e5b46e 100644 --- a/docs/contracts/vaults/gnosis/GnoErc20Vault.sol/contract.GnoErc20Vault.md +++ b/docs/contracts/vaults/gnosis/GnoErc20Vault.sol/contract.GnoErc20Vault.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/vaults/gnosis/GnoErc20Vault.sol) **Inherits:** -[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultOsToken](/contracts/vaults/modules/VaultOsToken.sol/abstract.VaultOsToken.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultToken](/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md), [VaultGnoStaking](/contracts/vaults/modules/VaultGnoStaking.sol/abstract.VaultGnoStaking.md), [Multicall](/contracts/base/Multicall.sol/abstract.Multicall.md), [IGnoErc20Vault](/contracts/interfaces/IGnoErc20Vault.sol/interface.IGnoErc20Vault.md) +[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultOsToken](/contracts/vaults/modules/VaultOsToken.sol/abstract.VaultOsToken.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultToken](/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md), [VaultGnoStaking](/contracts/vaults/modules/VaultGnoStaking.sol/abstract.VaultGnoStaking.md), [Multicall](/contracts/base/multicall.md), [IGnoErc20Vault](/contracts/interfaces/IGnoErc20Vault.sol/interface.IGnoErc20Vault.md) **Author:** StakeWise diff --git a/docs/contracts/vaults/gnosis/GnoVault.sol/contract.GnoVault.md b/docs/contracts/vaults/gnosis/GnoVault.sol/contract.GnoVault.md index 714f693..1e14f46 100644 --- a/docs/contracts/vaults/gnosis/GnoVault.sol/contract.GnoVault.md +++ b/docs/contracts/vaults/gnosis/GnoVault.sol/contract.GnoVault.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/vaults/gnosis/GnoVault.sol) **Inherits:** -[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultOsToken](/contracts/vaults/modules/VaultOsToken.sol/abstract.VaultOsToken.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultGnoStaking](/contracts/vaults/modules/VaultGnoStaking.sol/abstract.VaultGnoStaking.md), [Multicall](/contracts/base/Multicall.sol/abstract.Multicall.md), [IGnoVault](/contracts/interfaces/IGnoVault.sol/interface.IGnoVault.md) +[VaultImmutables](/contracts/vaults/modules/VaultImmutables.sol/abstract.VaultImmutables.md), Initializable, [VaultAdmin](/contracts/vaults/modules/VaultAdmin.sol/abstract.VaultAdmin.md), [VaultVersion](/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md), [VaultFee](/contracts/vaults/modules/VaultFee.sol/abstract.VaultFee.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [VaultValidators](/contracts/vaults/modules/VaultValidators.sol/abstract.VaultValidators.md), [VaultEnterExit](/contracts/vaults/modules/VaultEnterExit.sol/abstract.VaultEnterExit.md), [VaultOsToken](/contracts/vaults/modules/VaultOsToken.sol/abstract.VaultOsToken.md), [VaultMev](/contracts/vaults/modules/VaultMev.sol/abstract.VaultMev.md), [VaultGnoStaking](/contracts/vaults/modules/VaultGnoStaking.sol/abstract.VaultGnoStaking.md), [Multicall](/contracts/base/multicall.md), [IGnoVault](/contracts/interfaces/IGnoVault.sol/interface.IGnoVault.md) **Author:** StakeWise diff --git a/docs/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md b/docs/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md index bf0e995..77361a0 100644 --- a/docs/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md +++ b/docs/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md @@ -2,7 +2,7 @@ [Git Source](https://github.com/stakewise/v3-core/blob/c4059a64871829ca60ea58f054baf8eb13d3572a/contracts/vaults/modules/VaultToken.sol) **Inherits:** -Initializable, [ERC20Upgradeable](/contracts/base/ERC20Upgradeable.sol/abstract.ERC20Upgradeable.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [IVaultToken](/contracts/interfaces/IVaultToken.sol/interface.IVaultToken.md) +Initializable, [ERC20Upgradeable](/contracts/base/erc20-upgradable.md), [VaultState](/contracts/vaults/modules/VaultState.sol/abstract.VaultState.md), [IVaultToken](/contracts/interfaces/IVaultToken.sol/interface.IVaultToken.md) **Author:** StakeWise diff --git a/docs/docs/for-operators/migrate-from-v2/01-ethereum.mdx b/docs/docs/for-operators/migrate-from-v2/01-ethereum.mdx index c1e649b..e16943d 100644 --- a/docs/docs/for-operators/migrate-from-v2/01-ethereum.mdx +++ b/docs/docs/for-operators/migrate-from-v2/01-ethereum.mdx @@ -37,8 +37,8 @@ import TabItem from '@theme/TabItem'; Further reading diff --git a/docs/docs/for-operators/migrate-from-v2/02-gnosis.mdx b/docs/docs/for-operators/migrate-from-v2/02-gnosis.mdx index f178749..6b7a37d 100644 --- a/docs/docs/for-operators/migrate-from-v2/02-gnosis.mdx +++ b/docs/docs/for-operators/migrate-from-v2/02-gnosis.mdx @@ -14,7 +14,7 @@ import TabItem from '@theme/TabItem'; This guide will walk you through the process of adding liquidity to the SWISE-ETH pool on Uniswap V3. Follow the simple steps below to proceed. :::info -If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](./intro.mdx). +If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](../../intro.mdx). ::: ## Add Liquidity to the new ETH-SWISE pool diff --git a/docs/docs/for-operators/operator-services/02-running-with-remote-signer.mdx b/docs/docs/for-operators/operator-services/02-running-with-remote-signer.mdx index 6253f6b..7a26db8 100644 --- a/docs/docs/for-operators/operator-services/02-running-with-remote-signer.mdx +++ b/docs/docs/for-operators/operator-services/02-running-with-remote-signer.mdx @@ -37,8 +37,8 @@ import TabItem from '@theme/TabItem'; Further reading diff --git a/docs/docs/for-operators/operator-services/03-running-with-hashicorp-vault.mdx b/docs/docs/for-operators/operator-services/03-running-with-hashicorp-vault.mdx index e486248..8172bcb 100644 --- a/docs/docs/for-operators/operator-services/03-running-with-hashicorp-vault.mdx +++ b/docs/docs/for-operators/operator-services/03-running-with-hashicorp-vault.mdx @@ -14,7 +14,7 @@ import TabItem from '@theme/TabItem'; This guide will walk you through the process of adding liquidity to the SWISE-ETH pool on Uniswap V3. Follow the simple steps below to proceed. :::info -If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](./intro.mdx). +If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](../../intro.mdx). ::: ## Add Liquidity to the new ETH-SWISE pool diff --git a/docs/docs/for-operators/operator-services/04-running-as-api-service.mdx b/docs/docs/for-operators/operator-services/04-running-as-api-service.mdx index 182bac9..8ee4b37 100644 --- a/docs/docs/for-operators/operator-services/04-running-as-api-service.mdx +++ b/docs/docs/for-operators/operator-services/04-running-as-api-service.mdx @@ -14,7 +14,7 @@ import TabItem from '@theme/TabItem'; This guide will walk you through the process of adding liquidity to the SWISE-ETH pool on Uniswap V3. Follow the simple steps below to proceed. :::info -If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](./intro.mdx). +If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](../../intro.mdx). ::: ## Add Liquidity to the new ETH-SWISE pool diff --git a/docs/docs/for-operators/operator-services/05-monitoring.mdx b/docs/docs/for-operators/operator-services/05-monitoring.mdx index 2ba976a..8f06f80 100644 --- a/docs/docs/for-operators/operator-services/05-monitoring.mdx +++ b/docs/docs/for-operators/operator-services/05-monitoring.mdx @@ -14,7 +14,7 @@ import TabItem from '@theme/TabItem'; This guide will walk you through the process of adding liquidity to the SWISE-ETH pool on Uniswap V3. Follow the simple steps below to proceed. :::info -If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](./intro.mdx). +If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](../../intro.mdx). ::: ## Add Liquidity to the new ETH-SWISE pool diff --git a/docs/docs/guides/01-staking.mdx b/docs/docs/guides/01-staking.mdx index a147655..8316c94 100644 --- a/docs/docs/guides/01-staking.mdx +++ b/docs/docs/guides/01-staking.mdx @@ -38,7 +38,7 @@ Explore our how-to guides to start staking with StakeWise. osETH can be converted back into ETH at any time to receive the deposit and accumulated rewards. - [Read more about osETH →](./intro.mdx) + [Read more about osETH →](../intro.mdx)

How to stake ETH with one click

    @@ -54,7 +54,7 @@ Explore our how-to guides to start staking with StakeWise. osGNO can be converted back into GNO at any time to receive the deposit and accumulated rewards. - [Read more about osGNO →](./intro.mdx) + [Read more about osGNO →](../intro.mdx)

    How to stake GNO with one click

      @@ -83,11 +83,11 @@ Explore our how-to guides to start staking with StakeWise. By staking in a particular Vault, you will earn ETH staking rewards only from that Vault's validators. You can unstake from a Vault at any time to receive the deposit and accumulated rewards. - [Read more about Vaults →](./intro.mdx) + [Read more about Vaults →](../intro.mdx) Your stake in any Vault can be made liquid by minting osETH, a liquid staking token. - [Read more about osETH →](./intro.mdx) + [Read more about osETH →](../intro.mdx)

      How to stake with Vaults

      @@ -116,11 +116,11 @@ Explore our how-to guides to start staking with StakeWise. By staking in a particular Vault, you will earn GNO staking rewards only from that Vault's validators. You can unstake from a Vault at any time to receive the deposit and accumulated rewards. - [Read more about Vaults →](./intro.mdx) + [Read more about Vaults →](../intro.mdx) Your stake in any Vault can be made liquid by minting osGNO, a liquid staking token. - [Read more about osGNO →](./intro.mdx) + [Read more about osGNO →](../intro.mdx)

      How to stake with Vaults

      @@ -162,11 +162,11 @@ Explore our how-to guides to start staking with StakeWise. By staking in your Vault, you will earn ETH staking rewards only from your solo validators. You can unstake from your Vault at any time to receive the deposit and accumulated rewards. - [Read more about Solo Vaults →](./intro.mdx) + [Read more about Solo Vaults →](../intro.mdx) Your stake in the Vault can be made liquid by minting osETH, a liquid staking token. - [Read more about osETH →](./intro.mdx) + [Read more about osETH →](../intro.mdx)

      How to liquid solo stake

      @@ -199,11 +199,11 @@ Explore our how-to guides to start staking with StakeWise. By staking in your Vault, you will earn GNO staking rewards only from your solo validators. You can unstake from your Vault at any time to receive the deposit and accumulated rewards. - [Read more about Solo Vaults →](./intro.mdx) + [Read more about Solo Vaults →](../intro.mdx) Your stake in the Vault can be made liquid by minting osGNO, a liquid staking token. - [Read more about osGNO →](./intro.mdx) + [Read more about osGNO →](../intro.mdx)

      How to liquid solo stake

      diff --git a/docs/docs/guides/02-running-a-vault.mdx b/docs/docs/guides/02-running-a-vault.mdx index 8862c14..0f5fec7 100644 --- a/docs/docs/guides/02-running-a-vault.mdx +++ b/docs/docs/guides/02-running-a-vault.mdx @@ -35,7 +35,7 @@ Each Vault is isolated from others and relies on its own set of validators to pr Staked ETH/GNO in any Vault can be made liquid by minting osETH/osGNO, a liquid staking token. -[Read more about Vaults →](./intro.mdx) +[Read more about Vaults →](../intro.mdx) ### How to create a Vault diff --git a/docs/docs/guides/03-ostoken.mdx b/docs/docs/guides/03-ostoken.mdx index b42bff2..a71dc2c 100644 --- a/docs/docs/guides/03-ostoken.mdx +++ b/docs/docs/guides/03-ostoken.mdx @@ -39,16 +39,16 @@ Explore the guides for osToken minting, burning, and DeFi use below. osETH can be converted back into ETH at any time to receive the initial deposit and accumulated rewards. - [Read more about osETH →](./intro.mdx) + [Read more about osETH →](../intro.mdx) Conversion of osETH back to ETH will utilize either exchanges where osETH is being traded or the osETH redemption mechanism, whichever has the more accurate value of osETH. - [Read more about the osETH redemption mechanism →](./intro.mdx) + [Read more about the osETH redemption mechanism →](../intro.mdx) ### How to convert ETH into osETH
        -
      1. Head to the [Stake](./intro.mdx) page in the StakeWise dApp and connect your wallet.
      2. +
      3. Head to the [Stake](../intro.mdx) page in the StakeWise dApp and connect your wallet.
      4. Enter the amount of ETH you would like to stake. The interface will show the amount of osETH tokens you will receive in return.
      5. Note that the conversion ratio between osETH and ETH is >1 because osETH continuously accumulates staking rewards.
      6. Press Stake and confirm the transaction in your wallet.
      7. @@ -60,16 +60,16 @@ Explore the guides for osToken minting, burning, and DeFi use below. osGNO can be converted back into GNO at any time to receive the initial deposit and accumulated rewards. - [Read more about osGNO →](./intro.mdx) + [Read more about osGNO →](../intro.mdx) Conversion of osGNO back to GNO will utilize either exchanges where osGNO is being traded or the osGNO redemption mechanism, whichever has the more accurate value of osGNO. - [Read more about the osGNO redemption mechanism →](./intro.mdx) + [Read more about the osGNO redemption mechanism →](../intro.mdx) ### How to convert GNO into osGNO
          -
        1. Head to the [Stake](./intro.mdx) page in the StakeWise dApp and connect your wallet.
        2. +
        3. Head to the [Stake](../intro.mdx) page in the StakeWise dApp and connect your wallet.
        4. Enter the amount of GNO you would like to stake. The interface will show the amount of osGNO tokens you will receive in return.
        5. Note that the conversion ratio between osGNO and GNO is >1 because osGNO continuously accumulates staking rewards.
        6. Press Stake and confirm the transaction in your wallet.
        7. @@ -94,7 +94,7 @@ Explore the guides for osToken minting, burning, and DeFi use below. No matter how much osETH you mint, you will continue to earn the full ETH rewards on your stake in the Vault. - [Learn more about osETH →](./intro.mdx) + [Learn more about osETH →](../intro.mdx) ### How to mint osETH for your stake @@ -112,7 +112,7 @@ Explore the guides for osToken minting, burning, and DeFi use below. No matter how much osGNO you mint, you will continue to earn the full GNO rewards on your stake in the Vault. - [Learn more about osGNO →](./intro.mdx) + [Learn more about osGNO →](../intro.mdx) ### How to mint osGNO for your stake @@ -157,7 +157,7 @@ Explore the guides for osToken minting, burning, and DeFi use below. In a 99.99% LTV Vault, you can mint osETH for up to 99.99% of your staked ETH. Your position is always considered healthy because osETH APY matches the APY of the lowest-yielding 99.99% LTV Vault. This ensures that your Vault's APY is never lower than osETH's APY. Thus, maintaining the stability of your position. - [Read more about osETH position health →](./intro.mdx) + [Read more about osETH position health →](../intro.mdx) Note that osETH not acquired by minting from a Vault does not require any maintenance and does not impact osETH position health. @@ -193,7 +193,7 @@ Explore the guides for osToken minting, burning, and DeFi use below. In a 99.99% LTV Vault, you can mint osGNO for up to 99.99% of your staked GNO. Your position is always considered healthy because osGNO APY matches the APY of the lowest-yielding 99.99% LTV Vault. This ensures that your Vault's APY is never lower than osGNO's APY. Thus, maintaining the stability of your position. - [Read more about osGNO position health →](./intro.mdx) + [Read more about osGNO position health →](../intro.mdx) Note that osGNO not acquired by minting from a Vault does not require any maintenance and does not impact osGNO position health. @@ -226,11 +226,11 @@ Explore the guides for osToken minting, burning, and DeFi use below. All your minted osETH must be burned before you can fully unstake ETH from a Vault. - [Learn more about burning osETH →](./intro.mdx) + [Learn more about burning osETH →](../intro.mdx) The StakeWise DAO staking fee is included in the balance of osETH that must be burned before you can unstake. - [Learn more about the osETH fee →](./intro.mdx) + [Learn more about the osETH fee →](../intro.mdx) ### How to burn osETH @@ -245,11 +245,11 @@ Explore the guides for osToken minting, burning, and DeFi use below. All your minted osGNO must be burned before you can fully unstake GNO from a Vault. - [Learn more about burning osGNO →](./intro.mdx) + [Learn more about burning osGNO →](../intro.mdx) The StakeWise DAO staking fee is included in the balance of osGNO that must be burned before you can unstake. - [Learn more about the osGNO fee →](./intro.mdx) + [Learn more about the osGNO fee →](../intro.mdx) ### How to burn osGNO diff --git a/docs/docs/guides/defi/01-boost.mdx b/docs/docs/guides/defi/01-boost.mdx index 363774c..0007cd0 100644 --- a/docs/docs/guides/defi/01-boost.mdx +++ b/docs/docs/guides/defi/01-boost.mdx @@ -37,8 +37,8 @@ import TabItem from '@theme/TabItem'; Further reading
            -
          • [Maximize Your Rewards With StakeWise Boost](./intro.mdx)
          • -
          • [How StakeWise Boost Keeps Your Rewards Juicy & Your Stake Safe](./intro.mdx)
          • +
          • [Maximize Your Rewards With StakeWise Boost](../../intro.mdx)
          • +
          • [How StakeWise Boost Keeps Your Rewards Juicy & Your Stake Safe](../../intro.mdx)
          diff --git a/docs/docs/guides/defi/02-swise-eth-liquidity.mdx b/docs/docs/guides/defi/02-swise-eth-liquidity.mdx index 5e84a57..e68400d 100644 --- a/docs/docs/guides/defi/02-swise-eth-liquidity.mdx +++ b/docs/docs/guides/defi/02-swise-eth-liquidity.mdx @@ -14,7 +14,7 @@ import TabItem from '@theme/TabItem'; This guide will walk you through the process of adding liquidity to the SWISE-ETH pool on Uniswap V3. Follow the simple steps below to proceed. :::info -If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](./intro.mdx). +If you are a liquidity provider in the SWISE-sETH2 pool and are looking to migrate liquidity to the SWISE-ETH pool, we have included the instructions for removing liquidity and swapping sETH2 for ETH [here](../../intro.mdx). ::: ## Add Liquidity to the new ETH-SWISE pool diff --git a/docs/docs/protocol-overview-in-depth/02-vaults.mdx b/docs/docs/protocol-overview-in-depth/02-vaults.mdx index 88eb6dd..0869c01 100644 --- a/docs/docs/protocol-overview-in-depth/02-vaults.mdx +++ b/docs/docs/protocol-overview-in-depth/02-vaults.mdx @@ -34,7 +34,7 @@ All deposits, rewards distribution, and withdrawals are handled by smart contrac Whenever users stake ETH into a particular Vault, that Vault contract accumulates all deposits and launches a new validator for every 32 ETH collected. - [Read our guide about staking in Vaults ->](../guides/staking.md#staking-with-vaults) + [Read our guide about staking in Vaults ->](../guides/01-staking.mdx#staking-with-vaults) Registering new validators in the Beacon Chain can take several weeks during times when many new staking deposits are being made. ETH staked in a Vault and used to create a validator will not start producing staking rewards until the validator passes the deposit queue and becomes active. This may cause a dilution in Vault's APY. @@ -57,15 +57,13 @@ All deposits, rewards distribution, and withdrawals are handled by smart contrac If there isn't enough unbonded ETH in the Vault, a sufficient number of Vault validators will be automatically exited to provide enough ETH for unstaking. Since exiting validators from the Beacon Chain takes time, users who requested to unstake their ETH are placed in the exit queue. Once the exit queue is over, users can claim their unstaked ETH whenever they want. Users who requested to unstake ETH from a Vault and were placed into the exit queue will continue earning staking rewards until their ETH has been exited from staking. - - [Read our guide about unstaking ETH from Vaults ->](vaults.md#staking-and-unstaking)
          **Staking and deposit queue** Whenever users stake GNO into a particular Vault, that Vault contract accumulates all deposits and launches a new validator for every 1 GNO collected. - [Read our guide about staking in Vaults ->](../guides/staking.md#staking-with-vaults) + [Read our guide about staking in Vaults ->](../guides/01-staking.mdx#staking-with-vaults) Registering new validators in the Gnosis Beacon Chain can take several weeks during times when many new staking deposits are being made. GNO staked in a Vault and used to create a validator will not start producing staking rewards until the validator passes the deposit queue and becomes active. This may cause a dilution in Vault's APY. @@ -88,8 +86,6 @@ All deposits, rewards distribution, and withdrawals are handled by smart contrac If there isn't enough unbonded GNO in the Vault, a sufficient number of Vault validators will be automatically exited to provide enough GNO for unstaking. Since exiting validators from the Gnosis Beacon Chain takes time, users who requested to unstake their GNO are placed in the exit queue. Once the exit queue is over, users can claim their unstaked GNO whenever they want. Note that users who requested to unstake GNO from a Vault and were placed into the exit queue stop earning staking rewards as soon as they are placed in the queue. - - [Read our guide about unstaking GNO from Vaults ->](vaults.md#staking-and-unstaking) ``` @@ -245,15 +241,11 @@ and a snapshot is taken every \~12 hours. Solo Vaults are Public or Private Vaults where the Vault Admin is both the node operator and the depositor of ETH in the Vault. Solo Vaults can be configured to a solo staker's liking, including setting the fee to the desired level, choosing between the Smoothing Pool and Own Escrow for handling of MEV, opting for a tokenless Vault to avoid potentially taxable token swaps on deposits / withdrawals, etc. - - [Read more about configuring a Vault ->](vaults.md#for-operators-of-vaults) Solo Vaults are Public or Private Vaults where the Vault Admin is both the node operator and the depositor of GNO in the Vault. Solo Vaults can be configured to a solo staker's liking, including setting the fee to the desired level, choosing between the Smoothing Pool and Own Escrow for handling of MEV, opting for a tokenless Vault to avoid potentially taxable token swaps on deposits / withdrawals, etc. - - [Read more about configuring a Vault ->](vaults.md#for-operators-of-vaults) ``` diff --git a/docs/docs/protocol-overview-in-depth/03-os-token.mdx b/docs/docs/protocol-overview-in-depth/03-os-token.mdx index 8468359..5e78488 100644 --- a/docs/docs/protocol-overview-in-depth/03-os-token.mdx +++ b/docs/docs/protocol-overview-in-depth/03-os-token.mdx @@ -101,8 +101,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru **Buying osETH on DEXs** Stakers who buy osETH on DEXs don't have exposure to any particular Vault and hence are fully insulated against any slashing losses and poor performance that may occur. - - [Read more about the excess backing of osETH ->](ostoken.md#overcollateralization) osGNO can be minted against any Gnosis node, including those that perform poorly. @@ -142,8 +140,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru Redemption of osETH for ETH always happens at the underlying exchange rate between the two tokens. The exchange rate is determined by StakeWise Oracles based on the performance of Vaults. Redemption of osETH for ETH is instant if there is enough unbonded ETH in the protocol. If the amount of unbonded ETH is not enough to meet the volume of redemption requests, the protocol will exit validators to withdraw a sufficient amount of ETH for full redemption. - - [Read more about the osETH redemption mechanism ->](ostoken.md#redemption-mechanism) osGNO is backed by staked GNO in Vaults, and is redeemable for GNO in their validators. @@ -151,8 +147,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru Redemption of osGNO for GNO always happens at the underlying exchange rate between the two tokens. The exchange rate is determined by StakeWise Oracles based on the performance of Vaults. Redemption of osGNO for GNO is instant if there is enough unbonded GNO in the protocol. If the amount of unbonded GNO is not enough to meet the volume of redemption requests, the protocol will exit validators to withdraw a sufficient amount of GNO for full redemption. - - [Read more about the osGNO redemption mechanism ->](ostoken.md#redemption-mechanism) ``` @@ -493,8 +487,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru The amount of osETH to be burned will equal the sum of the original amount minted plus the StakeWise DAO commission, which is set to 5% of the rewards osETH accumulated. - [Read more about the StakeWise DAO fee ->](ostoken.md#staking-fee) - Note that burning the full outstanding amount of osETH is necessary to fully unstake from the Vault. If less osETH is burned, user's ETH stake will be withdrawable only partially in order to maintain appropriate position health. The amount of ETH that can be unstaked immediately will be based on position health, where the osETH position must remain healthy (i.e. up to 90% of staked ETH in 90% LTV Vaults and up to 99.99% in 99.99% LTV Vaults) after some ETH has been unstaked. This is calculated by the following formula: @@ -535,8 +527,6 @@ Liquid staking in StakeWise V3 is powered by osTokens - staked tokens that accru The amount of osGNO to be burned will equal the sum of the original amount minted plus the StakeWise DAO commission, which is set to 5% of the rewards osGNO accumulated. - [Read more about the StakeWise DAO fee ->](ostoken.md#staking-fee) - Note that burning the full outstanding amount of osGNO is necessary to fully unstake from the Vault. If less osGNO is burned, user's GNO stake will be withdrawable only partially in order to maintain appropriate position health. The amount of GNO that can be unstaked immediately will be based on position health, where the osGNO position must remain healthy (i.e. up to 90% of staked GNO in 90% LTV Vaults and up to 99.95% in 99.95% LTV Vaults) after some GNO has been unstaked. This is calculated by the following formula: diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 01c3eb7..0939ec1 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,156 +1,130 @@ -import { themes as prismThemes } from "prism-react-renderer"; -import type { Config } from "@docusaurus/types"; -import type * as Preset from "@docusaurus/preset-classic"; +import { themes as prismThemes } from 'prism-react-renderer' +import type * as Preset from '@docusaurus/preset-classic' +import type { Config } from '@docusaurus/types' -// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) const config: Config = { - title: "StakeWise Docs", - tagline: "Dinosaurs are cool", - favicon: "img/favicon.ico", + title: 'Welcome to StakeWise Docs', + tagline: 'Documentation and Guides', + url: 'https://docs.stakewise.io', + favicon: 'img/favicon.ico', + baseUrl: '/', + projectName: 'docs', // Usually your repo name. + organizationName: 'stakewise', // Usually your GitHub org/user name. - // Set the production url of your site here - url: "https://docs.stakewise.io", - // Set the // pathname under which your site is served - // For GitHub pages deployment, it is often '//' - baseUrl: "/", + onBrokenLinks: 'throw', + onBrokenAnchors: 'throw', + onDuplicateRoutes: 'throw', + onBrokenMarkdownLinks: 'throw', - // GitHub pages deployment config. - // If you aren't using GitHub pages, you don't need these. - organizationName: "stakewise", // Usually your GitHub org/user name. - projectName: "docs", // Usually your repo name. - - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", - - // Even if you don't use internationalization, you can use this field to set - // useful metadata like html lang. For example, if your site is Chinese, you - // may want to replace "en" with "zh-Hans". i18n: { - defaultLocale: "en", - locales: ["en"], + defaultLocale: 'en', + locales: ['en'], }, presets: [ [ - "classic", + '@docusaurus/preset-classic', { docs: { - sidebarPath: "./sidebars.ts", - routeBasePath: "/", - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/", - }, - blog: { - showReadingTime: true, - feedOptions: { - type: ["rss", "atom"], - xslt: true, - }, - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: - "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/", - // Useful options to enforce blogging best practices - onInlineTags: "warn", - onInlineAuthors: "warn", - onUntruncatedBlogPosts: "warn", + sidebarPath: './sidebars.ts', + showLastUpdateTime: true, + routeBasePath: '/', + breadcrumbs: true, }, theme: { - customCss: "./src/css/custom.css", + customCss: require.resolve('./src/css/custom.css'), }, - } satisfies Preset.Options, + } ], ], + plugins: [ + './src/plugins/tailwind-config.js', + ], + themeConfig: { - // Replace with your project's social card - image: "img/docusaurus-social-card.jpg", - tableOfContents: { minHeadingLevel: 2, maxHeadingLevel: 5 }, + respectPrefersColorScheme: true, + image: 'img/og-image.png', + + docs: { + sidebar: { + autoCollapseCategories: true, + }, + }, + navbar: { - title: "StakeWise Docs", + title: 'StakeWise Docs', logo: { - alt: "My Site Logo", - src: "img/logo.svg", + alt: 'StakeWise Logo', + src: 'img/logo512.png', + height: 32, + width: 32, + style: { + marginRight: '12px', + }, }, items: [ { + label: 'Docs', + to: 'docs/intro', type: "docSidebar", - sidebarId: "docsSidebar", - position: "left", - label: "Docs", + activeBaseRegex: `/docs/`, + sidebarId: 'docsSidebar', }, { - label: "SDK", - position: "left", - sidebarId: "sdkSidebar", + label: 'SDK', + to: '/sdk/intro', activeBaseRegex: `/sdk/`, - to: "/sdk/intro", + sidebarId: 'sdkSidebar', }, { - label: "Contracs", - position: "left", - sidebarId: "contractsSidebar", + label: 'Contracs', + to: '/contracts/intro', activeBaseRegex: `/contracts/`, - to: "/contracts/intro", + sidebarId: 'contractsSidebar', }, - { to: "/blog", label: "Blog", position: "left" }, { - href: "https://github.com/stakewise/docs", - label: "GitHub", - position: "right", + label: 'Discord', + href: 'https://discord.com/invite/2BSdr2g', + position: 'right', }, - ], - }, - footer: { - style: "dark", - links: [ { - title: "Docs", - items: [ - { - label: "Docs", - to: "/docs/intro", - }, - ], + label: 'X', + href: 'https://x.com/stakewise_io', + position: 'right', }, { - title: "Community", - items: [ - { - label: "Stack Overflow", - href: "https://stackoverflow.com/questions/tagged/docusaurus", - }, - { - label: "Discord", - href: "https://discordapp.com/invite/docusaurus", - }, - { - label: "X", - href: "https://x.com/docusaurus", - }, - ], + label: 'Telegram', + href: 'https://t.me/stakewise_io', + position: 'right', }, { - title: "More", - items: [ - { - label: "Blog", - to: "/blog", - }, - { - label: "GitHub", - href: "https://github.com/facebook/docusaurus", - }, - ], - }, + type: 'html', + position: 'right', + value: ` + + `, + } ], - copyright: `Copyright © ${new Date().getFullYear()} StakeWise`, }, + + tableOfContents: { + minHeadingLevel: 2, + maxHeadingLevel: 5, + }, + footer: { + copyright: `Copyright © ${new Date().getFullYear()} StakeWise Labs`, + }, + prism: { theme: prismThemes.github, + defaultLanguage: 'typescript', darkTheme: prismThemes.dracula, }, } satisfies Preset.ThemeConfig, diff --git a/package-lock.json b/package-lock.json index 931c49f..934e866 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,20 +10,25 @@ "dependencies": { "@docusaurus/core": "3.7.0", "@docusaurus/preset-classic": "3.7.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "prism-react-renderer": "^2.3.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" + "@headlessui/react": "^2.2.2", + "@mdx-js/react": "3.0.0", + "classnames": "^2.5.1", + "clsx": "2.0.0", + "prism-react-renderer": "2.3.0", + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.7.0", "@docusaurus/tsconfig": "3.7.0", "@docusaurus/types": "3.7.0", - "typescript": "~5.6.2" + "@tailwindcss/postcss": "^4.1.4", + "postcss": "^8.5.3", + "tailwindcss": "^4.1.4", + "typescript": "5.6.2" }, "engines": { - "node": ">=18.0" + "node": ">=22.0" } }, "node_modules/@algolia/autocomplete-core": { @@ -257,6 +262,19 @@ "node": ">= 14.0.0" } }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", @@ -3795,6 +3813,59 @@ "node": ">=18.0" } }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -3810,6 +3881,26 @@ "@hapi/hoek": "^9.0.0" } }, + "node_modules/@headlessui/react": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.2.tgz", + "integrity": "sha512-zbniWOYBQ8GHSUIOPY7BbdIn6PzUOq0z41RFrF30HbjsxG6Rrfk+6QulR8Kgf2Vwj2a/rE6i62q5vo+2gI5dJA==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.17.1", + "@react-aria/interactions": "^3.21.3", + "@tanstack/react-virtual": "^3.13.6", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" + } + }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", @@ -3940,9 +4031,9 @@ } }, "node_modules/@mdx-js/react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.0.tgz", + "integrity": "sha512-nDctevR9KyYFyV+m+/+S4cpzCWHqj+iHDHq3QrsWezcC+B17uZdIWgCguESUkwFhM3n/56KxWVE3V6EokrmONQ==", "license": "MIT", "dependencies": { "@types/mdx": "^2.0.0" @@ -4038,6 +4129,103 @@ "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", "license": "MIT" }, + "node_modules/@react-aria/focus": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.20.2.tgz", + "integrity": "sha512-Q3rouk/rzoF/3TuH6FzoAIKrl+kzZi9LHmr8S5EqLAOyP9TXIKG34x2j42dZsAhrw7TbF9gA8tBKwnCNH4ZV+Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.25.0", + "@react-aria/utils": "^3.28.2", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.25.0.tgz", + "integrity": "sha512-GgIsDLlO8rDU/nFn6DfsbP9rfnzhm8QFjZkB9K9+r+MTSCn7bMntiWQgMM+5O6BiA8d7C7x4zuN4bZtc0RBdXQ==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.8", + "@react-aria/utils": "^3.28.2", + "@react-stately/flags": "^3.1.1", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/ssr": { + "version": "3.9.8", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.8.tgz", + "integrity": "sha512-lQDE/c9uTfBSDOjaZUJS8xP2jCKVk4zjQeIlCH90xaLhHDgbpCdns3xvFpJJujfj3nI4Ll9K7A+ONUBDCASOuw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/utils": { + "version": "3.28.2", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.28.2.tgz", + "integrity": "sha512-J8CcLbvnQgiBn54eeEvQQbIOfBF3A1QizxMw9P4cl9MkeR03ug7RnjTIdJY/n2p7t59kLeAB3tqiczhcj+Oi5w==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.8", + "@react-stately/flags": "^3.1.1", + "@react-stately/utils": "^3.10.6", + "@react-types/shared": "^3.29.0", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/flags": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.1.tgz", + "integrity": "sha512-XPR5gi5LfrPdhxZzdIlJDz/B5cBf63l4q6/AzNqVWFKgd0QqY5LvWJftXkklaIUpKSJkIKQb8dphuZXDtkWNqg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.10.6", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.10.6.tgz", + "integrity": "sha512-O76ip4InfTTzAJrg8OaZxKU4vvjMDOpfA/PGNOytiXwBbkct2ZeZwaimJ8Bt9W1bj5VsZ81/o/tW4BacbdDOMA==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.29.0.tgz", + "integrity": "sha512-IDQYu/AHgZimObzCFdNl1LpZvQW/xcfLt3v20sorl5qRucDVj4S9os98sVTZ4IRIBjmS+MkjqpR5E70xan7ooA==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, "node_modules/@sideway/address": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", @@ -4345,6 +4533,15 @@ "url": "https://github.com/sponsors/gregberge" } }, + "node_modules/@swc/helpers": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", + "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", @@ -4357,6 +4554,311 @@ "node": ">=14.16" } }, + "node_modules/@tailwindcss/node": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.4.tgz", + "integrity": "sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "lightningcss": "1.29.2", + "tailwindcss": "4.1.4" + } + }, + "node_modules/@tailwindcss/node/node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.4.tgz", + "integrity": "sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.4", + "@tailwindcss/oxide-darwin-arm64": "4.1.4", + "@tailwindcss/oxide-darwin-x64": "4.1.4", + "@tailwindcss/oxide-freebsd-x64": "4.1.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.4", + "@tailwindcss/oxide-linux-x64-musl": "4.1.4", + "@tailwindcss/oxide-wasm32-wasi": "4.1.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.4" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.4.tgz", + "integrity": "sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.4.tgz", + "integrity": "sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.4.tgz", + "integrity": "sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.4.tgz", + "integrity": "sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.4.tgz", + "integrity": "sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.4.tgz", + "integrity": "sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.4.tgz", + "integrity": "sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.4.tgz", + "integrity": "sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.4.tgz", + "integrity": "sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.4.tgz", + "integrity": "sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.0", + "@emnapi/runtime": "^1.4.0", + "@emnapi/wasi-threads": "^1.0.1", + "@napi-rs/wasm-runtime": "^0.2.8", + "@tybys/wasm-util": "^0.9.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.4.tgz", + "integrity": "sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.4.tgz", + "integrity": "sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.1.4.tgz", + "integrity": "sha512-bjV6sqycCEa+AQSt2Kr7wpGF1bOZJ5wsqnLEkqSbM/JEHxx/yhMH8wHmdkPyApF9xhHeMSwnnkDUUMMM/hYnXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.1.4", + "@tailwindcss/oxide": "4.1.4", + "postcss": "^8.4.41", + "tailwindcss": "4.1.4" + } + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.13.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.6.tgz", + "integrity": "sha512-WT7nWs8ximoQ0CDx/ngoFP7HbQF9Q2wQe4nh2NB+u2486eX3nZRE40P9g6ccCVq7ZfTSH5gFOuCoVH5DLNS/aA==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.6", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.6.tgz", + "integrity": "sha512-cnQUeWnhNP8tJ4WsGcYiX24Gjkc9ALstLbHcBj1t3E7EimN6n6kHH+DPV4PpDnuw00NApQp+ViojMj1GRdwYQg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -5865,6 +6367,12 @@ "node": ">=8" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", @@ -5957,9 +6465,9 @@ } }, "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", "license": "MIT", "engines": { "node": ">=6" @@ -6994,6 +7502,16 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", + "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -9831,6 +10349,245 @@ "node": ">=6" } }, + "node_modules/lightningcss": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.29.2", + "lightningcss-darwin-x64": "1.29.2", + "lightningcss-freebsd-x64": "1.29.2", + "lightningcss-linux-arm-gnueabihf": "1.29.2", + "lightningcss-linux-arm64-gnu": "1.29.2", + "lightningcss-linux-arm64-musl": "1.29.2", + "lightningcss-linux-x64-gnu": "1.29.2", + "lightningcss-linux-x64-musl": "1.29.2", + "lightningcss-win32-arm64-msvc": "1.29.2", + "lightningcss-win32-x64-msvc": "1.29.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", + "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", + "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", + "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", + "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", + "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", + "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", + "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", + "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", + "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", @@ -14560,9 +15317,9 @@ } }, "node_modules/prism-react-renderer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", - "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.0.tgz", + "integrity": "sha512-UYRg2TkVIaI6tRVHC5OJ4/BxqPUxJkJvq/odLT/ykpt1zGYXooNperUxQcCvi87LyRnR4nCh81ceOA+e7nrydg==", "license": "MIT", "dependencies": { "@types/prismjs": "^1.26.0", @@ -16614,6 +17371,19 @@ "node": ">= 10" } }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.4.tgz", + "integrity": "sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==", + "dev": true, + "license": "MIT" + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -16846,9 +17616,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -17256,6 +18026,15 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/use-sync-external-store": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz", + "integrity": "sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 32ddd41..91b62f5 100644 --- a/package.json +++ b/package.json @@ -17,17 +17,22 @@ "dependencies": { "@docusaurus/core": "3.7.0", "@docusaurus/preset-classic": "3.7.0", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "prism-react-renderer": "^2.3.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" + "@headlessui/react": "2.2.2", + "@mdx-js/react": "3.0.0", + "classnames": "2.5.1", + "clsx": "2.0.0", + "prism-react-renderer": "2.3.0", + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@docusaurus/module-type-aliases": "3.7.0", "@docusaurus/tsconfig": "3.7.0", "@docusaurus/types": "3.7.0", - "typescript": "~5.6.2" + "@tailwindcss/postcss": "4.1.4", + "postcss": "8.5.3", + "tailwindcss": "4.1.4", + "typescript": "5.6.2" }, "browserslist": { "production": [ @@ -42,6 +47,6 @@ ] }, "engines": { - "node": ">=18.0" + "node": ">=22.0" } } diff --git a/sidebars.ts b/sidebars.ts index 7d8fb39..b3880a9 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -1,21 +1,26 @@ -import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; +import type { SidebarsConfig } from '@docusaurus/plugin-content-docs' -// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ const sidebars: SidebarsConfig = { - docsSidebar: [{ type: "autogenerated", dirName: "docs" }], - sdkSidebar: [{ type: "autogenerated", dirName: "sdk" }], - contractsSidebar: [{ type: "autogenerated", dirName: "contracts" }], -}; + docsSidebar: [ + { + type: 'autogenerated', + dirName: 'docs' + }, + ], + sdkSidebar: [ + { + type: 'autogenerated', + dirName: 'sdk' + }, + ], + contractsSidebar: [ + { + type: 'autogenerated', + dirName: 'contracts' + }, + ], +} + export default sidebars; diff --git a/src/components/BrandAssets/BrandAssets.tsx b/src/components/BrandAssets/BrandAssets.tsx new file mode 100644 index 0000000..7096358 --- /dev/null +++ b/src/components/BrandAssets/BrandAssets.tsx @@ -0,0 +1,18 @@ +import React from 'react' + + +const BrandAssets: React.FC = () => ( + +) + + +export default React.memo(BrandAssets) diff --git a/src/components/BrandAssets/stakewise-brand-assets.zip b/src/components/BrandAssets/stakewise-brand-assets.zip new file mode 100644 index 0000000000000000000000000000000000000000..31271dc34e0b478bbba2e4cb9be14a3df2dedb8b GIT binary patch literal 6672 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 +} + +const LinkIcon = require("@site/static/icon/link.svg").default + +const Block: React.FC = (props) => { + const { title, text, href, Svg } = props + + + return ( + +
          + +
          + {title} +
          +
          +
          + {text} +
          + + + ) +} + + +export default React.memo(Block) diff --git a/src/components/DocsSections/Blocks/Blocks.tsx b/src/components/DocsSections/Blocks/Blocks.tsx new file mode 100644 index 0000000..d940e14 --- /dev/null +++ b/src/components/DocsSections/Blocks/Blocks.tsx @@ -0,0 +1,38 @@ +import React from 'react' + +import Block, { BlockProps } from './Block/Block' + + +const blocks: BlockProps[] = [ + { + title: 'Docs', + text: 'Everything you want to know about StakeWise at your fingertips', + Svg: require("@site/static/icon/file.svg").default, + href: '/docs/intro', + }, + { + title: 'SDK', + text: 'Our JS library for working with api and contracts', + Svg: require("@site/static/icon/code.svg").default, + href: '/sdk/intro', + }, + { + title: 'Contracts', + text: 'Details of all contracts that use the StakeWise protocol', + Svg: require("@site/static/icon/gears.svg").default, + href: '/contracts/intro', + } +] + +const Blocks: React.FC = () => ( +
          + { + blocks.map((item) => ( + + )) + } +
          +) + + +export default React.memo(Blocks) diff --git a/src/components/DocsSections/DocsSections.tsx b/src/components/DocsSections/DocsSections.tsx new file mode 100644 index 0000000..0293b8c --- /dev/null +++ b/src/components/DocsSections/DocsSections.tsx @@ -0,0 +1,32 @@ +import React, { useEffect } from 'react' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' + +import Blocks from './Blocks/Blocks' + + +const DocsSections: React.FC = () => { + const { siteConfig } = useDocusaurusContext() + + useEffect(() => { + // Something prevents adding a class, apparently a little later + // calls for another modification of the element + setTimeout(() => { + document.body.classList.add('bg-gradient') + }) + + return () => { + document.body.classList.remove('bg-gradient') + } + }, [ location ]) + + return ( +
          +

          {siteConfig.title}

          +

          {siteConfig.tagline}

          + +
          + ) +} + + +export default React.memo(DocsSections) diff --git a/src/components/FAQ/FAQ.module.css b/src/components/FAQ/FAQ.module.css new file mode 100644 index 0000000..096e7d6 --- /dev/null +++ b/src/components/FAQ/FAQ.module.css @@ -0,0 +1,4 @@ +.container { + width: 100%; + max-width: 966px; +} diff --git a/src/components/FAQ/FAQ.tsx b/src/components/FAQ/FAQ.tsx new file mode 100644 index 0000000..ba42319 --- /dev/null +++ b/src/components/FAQ/FAQ.tsx @@ -0,0 +1,40 @@ +import React, { useState } from 'react' +import cx from 'classnames' + +import data from './questions' +import Question from './Question/Question' + +import s from './FAQ.module.css' + + +type FAQProps = { + className?: string +} + +const FAQ: React.FC = (props) => { + const { className } = props + + const [ openIndex, setOpenIndex ] = useState(null) + + return ( +
          +

          FAQ

          +
          + { + data.map((question, index) => ( + setOpenIndex(openIndex === index ? null : index)} + /> + )) + } +
          +
          + ) +} + + +export default React.memo(FAQ) diff --git a/src/components/FAQ/Question/Question.tsx b/src/components/FAQ/Question/Question.tsx new file mode 100644 index 0000000..3763296 --- /dev/null +++ b/src/components/FAQ/Question/Question.tsx @@ -0,0 +1,80 @@ +import React, { + useRef, + useState, + useEffect, + useCallback, +} from 'react' +import { + Disclosure, + DisclosurePanel, + DisclosureButton, +} from '@headlessui/react' + + +type QuestionProps = { + text: string + title: string + isOpen: boolean + onToggle: () => void +} + +const Question: React.FC = (props) => { + const { title, text, isOpen, onToggle } = props + + const panelRef = useRef(null) + + const [ height, setHeight ] = useState(0) + + const updateHeight = useCallback(() => { + if (panelRef.current) { + setHeight(panelRef.current.scrollHeight + 16) + } + }, []) + + useEffect(() => { + updateHeight() + }, [ updateHeight, text, isOpen ]) + + useEffect(() => { + window.addEventListener('resize', updateHeight) + + return () => { + window.removeEventListener('resize', updateHeight) + } + }, [ updateHeight ]) + + return ( + + +
          + {title} +
          +
          +
          + +
          + {text} +
          +
          +
          +
          + ) +} + + +export default React.memo(Question) diff --git a/src/components/FAQ/questions.ts b/src/components/FAQ/questions.ts new file mode 100644 index 0000000..8d64284 --- /dev/null +++ b/src/components/FAQ/questions.ts @@ -0,0 +1,30 @@ +export default [ + { + question: 'How to stake with StakeWise?', + answer: `Simply head to the Stake page in the StakeWise dApp, enter the amount of ETH or GNO you want to stake, and press the Stake button. You will receive osETH or osGNO tokens in return to keep your stake liquid.`, + }, + { + question: 'What are the advantages of staking on StakeWise?', + answer: `StakeWise makes it very easy to earn rewards on your ETH or GNO and keep your assets safe. We serve a diverse group of customers, from ordinary stakers to whales, DAOs, solo stakers, wallets, professional node operators, and institutions. StakeWise has been offering its services from 2021, and has invested ~$1M into security since inception.`, + }, + { + question: 'What is StakeWise, and what does it offer to users?', + answer: `StakeWise is a liquid staking network that enables users to easily stake any amount of ETH or GNO. Users receive osTokens to represent their stake, which they can use to access liquidity or increase their yield. `, + }, + { + question: 'How does StakeWise Boost work?', + answer: `StakeWise Boost uses osETH (on Ethereum) or osGNO (on Gnosis Chain) tokens to borrow more ETH or GNO on Aave, stake it, mint osETH or osGNO, and repeat the process enough times to maximize your yield. The extra yield comes from the difference between the cost to borrow extra ETH or GNO, and the staking rewards earned from staking the borrowed amount. `, + }, + { + question: 'Is StakeWise Boost safe to use?', + answer: `StakeWise Boost is safe to use, and has been designed with safety in mind. The collateral supplied by Boost on Aave is near perfectly correlated with assets borrowed, allowing to maintain a stable Loan to Value in all circumstances. Boosted positions are not affected by osETH (on Ethereum) or osGNO (on Gnosis Chain) depegs, allowing to use leverage safely. Boost uses a sufficiently large buffer to the Liquidation Threshold to allow the strategy to remain deeply unprofitable (-10% to -25%) for over 1 year without triggering a liquidation. However, StakeWise doesn’t recommend using Boost when its APY is consistently negative, and will trigger forced exits for deeply unprofitable positions before they are liquidated.`, + }, + { + question: 'How does the redemption mechanism for osETH work?', + answer: `osETH can be redeemed for ETH at its fair exchange rate. If there is enough unbonded ETH in the protocol, redemption is instant; otherwise, validators will be exited to provide the ETH required for full redemption.`, + }, + { + question: 'What is the purpose of osTokens in the StakeWise ecosystem?', + answer: ` osTokens are liquid representations of assets staked in StakeWise - osETH on Ethereum, and osGNO on Gnosis Chain. osTokens allow users to keep their stake liquid and accrue staking rewards. osTokens can be converted back to ETH or GNO to access your initial deposit and the accumulated rewards.`, + }, +] as const diff --git a/src/components/GitHub/GitHub.tsx b/src/components/GitHub/GitHub.tsx new file mode 100644 index 0000000..6e2b714 --- /dev/null +++ b/src/components/GitHub/GitHub.tsx @@ -0,0 +1,43 @@ +import React from 'react' + +import Item from './Item/Item' + + +const items = [ + { + title: 'Vault interface', + href: 'https://github.com/stakewise/vault-interface', + }, + { + title: 'Subgraph', + href: 'https://github.com/stakewise/v3-subgraph', + }, + { + title: 'Operator', + href: 'https://github.com/stakewise/v3-operator', + }, + { + title: 'Core', + href: 'https://github.com/stakewise/v3-core', + }, + { + title: 'SDK', + href: 'https://github.com/stakewise/v3-sdk', + }, +] as const + +const GitHub: React.FC = () => ( +
          +
          Developer Links
          +
          + { + items.map((item) => ( + + )) + } +
          +
          +) + + +export default React.memo(GitHub) diff --git a/src/components/GitHub/Item/Item.module.css b/src/components/GitHub/Item/Item.module.css new file mode 100644 index 0000000..66a8b36 --- /dev/null +++ b/src/components/GitHub/Item/Item.module.css @@ -0,0 +1,11 @@ +.container { + flex: 1 1 auto; + transition: .2s; + cursor: pointer; +} + +.container:hover { + transform: scale(1.05); + text-decoration: none; + background-color: rgba(var(--moon-rgb), .1) !important; +} diff --git a/src/components/GitHub/Item/Item.tsx b/src/components/GitHub/Item/Item.tsx new file mode 100644 index 0000000..784de2f --- /dev/null +++ b/src/components/GitHub/Item/Item.tsx @@ -0,0 +1,32 @@ +import React from 'react' +import cx from 'classnames' + +import s from './Item.module.css' + + +type ItemProps = { + title: string + href: string +} + +const LinkIcon = require("@site/static/icon/link.svg").default + +const Item: React.FC = (props) => { + const { title, href } = props + + return ( + +
          + {title} +
          + +
          + ) +} + + +export default React.memo(Item) diff --git a/src/components/HomepageFeatures/index.tsx b/src/components/HomepageFeatures/index.tsx deleted file mode 100644 index 442a9d4..0000000 --- a/src/components/HomepageFeatures/index.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import type { ReactNode } from "react"; -import clsx from "clsx"; -import Heading from "@theme/Heading"; -import styles from "./styles.module.css"; - -type FeatureItem = { - title: string; - Svg: React.ComponentType>; - description: ReactNode; -}; - -const FeatureList: FeatureItem[] = [ - { - title: "Easy to Use", - Svg: require("@site/static/img/undraw_docusaurus_mountain.svg").default, - description: ( - <> - Docusaurus was designed from the ground up to be easily installed and - used to get your website up and running quickly. - - ), - }, - { - title: "Focus on What Matters", - Svg: require("@site/static/img/undraw_docusaurus_tree.svg").default, - description: ( - <> - Docusaurus lets you focus on your docs, and we'll do the chores. Go - ahead and move your docs into the docs directory. - - ), - }, - { - title: "Powered by React", - Svg: require("@site/static/img/undraw_docusaurus_react.svg").default, - description: ( - <> - Extend or customize your website layout by reusing React. Docusaurus can - be extended while reusing the same header and footer. - - ), - }, -]; - -function Feature({ title, Svg, description }: FeatureItem) { - return ( -
          -
          - -
          -
          - {title} -

          {description}

          -
          -
          - ); -} - -export default function HomepageFeatures(): ReactNode { - return ( -
          -
          -
          - {FeatureList.map((props, idx) => ( - - ))} -
          -
          -
          - ); -} diff --git a/src/components/HomepageFeatures/styles.module.css b/src/components/HomepageFeatures/styles.module.css deleted file mode 100644 index b248eb2..0000000 --- a/src/components/HomepageFeatures/styles.module.css +++ /dev/null @@ -1,11 +0,0 @@ -.features { - display: flex; - align-items: center; - padding: 2rem 0; - width: 100%; -} - -.featureSvg { - height: 200px; - width: 200px; -} diff --git a/src/components/Links/Block/Block.module.css b/src/components/Links/Block/Block.module.css new file mode 100644 index 0000000..77b6546 --- /dev/null +++ b/src/components/Links/Block/Block.module.css @@ -0,0 +1,17 @@ +.container { + min-width: 167px; + transition: .2s; + cursor: pointer; +} + +.container:hover { + transform: scale(1.05); + text-decoration: none; + background-color: rgba(var(--moon-rgb), .1) !important; +} + +.icon { + width: 24px; + height: 24px; + color: var(--moon); +} diff --git a/src/components/Links/Block/Block.tsx b/src/components/Links/Block/Block.tsx new file mode 100644 index 0000000..603ce3a --- /dev/null +++ b/src/components/Links/Block/Block.tsx @@ -0,0 +1,37 @@ +import React from 'react' +import cx from 'classnames' + +import s from './Block.module.css' + + +export type BlockProps = { + title: string + href: string + Svg: React.ComponentType> +} + +const LinkIcon = require("@site/static/icon/link.svg").default + +const Block: React.FC = (props) => { + const { title, href, Svg } = props + + + return ( + +
          + +
          + {title} +
          +
          + +
          + ) +} + + +export default React.memo(Block) diff --git a/src/components/Links/Links.tsx b/src/components/Links/Links.tsx new file mode 100644 index 0000000..1dbae54 --- /dev/null +++ b/src/components/Links/Links.tsx @@ -0,0 +1,45 @@ +import React from 'react' + +import Block, { BlockProps } from './Block/Block' + + +const links: BlockProps[] = [ + { + title: 'Discord', + Svg: require("@site/static/icon/discord.svg").default, + href: 'https://discord.com/invite/2BSdr2g', + }, + { + title: 'Telegram', + Svg: require("@site/static/icon/telegram.svg").default, + href: 'https://t.me/stakewise_io', + }, + { + title: 'Twitter', + Svg: require("@site/static/icon/twitter.svg").default, + href: 'https://x.com/stakewise_io', + }, + { + title: 'Forum', + Svg: require("@site/static/icon/forum.svg").default, + href: 'https://forum.stakewise.io/', + }, + { + title: 'Vote', + Svg: require("@site/static/icon/vote.svg").default, + href: 'https://vote.stakewise.io/', + } +] + +const Links: React.FC = () => ( +
          + { + links.map((item) => ( + + )) + } +
          +) + + +export default React.memo(Links) diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..4a5c55e --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,5 @@ +export { default as DocsSections } from './DocsSections/DocsSections' +export { default as BrandAssets } from './BrandAssets/BrandAssets' +export { default as GitHub } from './GitHub/GitHub' +export { default as Links } from './Links/Links' +export { default as FAQ } from './FAQ/FAQ' diff --git a/src/css/custom.css b/src/css/custom.css index ca86776..acecfd9 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1,36 +1,141 @@ -/** - * Any CSS included here will be global. The classic template - * bundles Infima by default. Infima is a CSS framework designed to - * work well for content-centric websites. - */ - - -/* You can override the default Infima variables here. */ -:root { - --ifm-color-primary: #4d2b70; - --ifm-color-primary-dark: #29784c; - --ifm-color-primary-darker: #277148; - --ifm-color-primary-darkest: #205d3b; - --ifm-color-primary-light: #33925d; - --ifm-color-primary-lighter: #359962; - --ifm-color-primary-lightest: #3cad6e; - --ifm-code-font-size: 95%; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); - font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600,700&display=swap'); + +.bg-gradient { + background-image: radial-gradient(50% 50% at 50% 40%, rgb(139 0 255 / 13%) 0%, rgb(255 255 255 / 0%) 100%); +} + +.footer__link-item svg, +.navbar__link svg { + display: none; +} + +::-moz-selection { + color: #47347e; + background: #c8bfe3; +} + +::selection { + color: #47347e; + background: #c8bfe3; +} + +html { + scroll-behavior: smooth; + font-family: 'Inter', system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, + BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol'; + font-size: 16px; + font-variant: none; + font-weight: 400; +} + +html[data-theme='dark'] { + --ifm-toc-border-color: #ffffff0d; + --ifm-footer-background-color: #ffffff0d; + --ifm-navbar-background-color: #ffffff0d; + --ifm-global-shadow-md: 0 5px 4px rgba(255, 255, 255, 0.448); + + background-color: #181618; +} + +html[data-theme='light'] { + --ifm-toc-border-color: #00060f0d; + --ifm-footer-background-color: #00060f0d; + --ifm-navbar-background-color: #00060f0d; + + background-color: #f1f2fd; +} + +.markdown a { + color: #3578e5; +} + +p { + line-height: 1.5rem; + font-weight: 400; +} + +hr { + border-bottom-width: 0px; + border-top-width: 1px; + border-color: var(--ifm-color-emphasis-200); +} + +h1, +h2, +h3, +h4, +h5 { font-weight: 500; - font-size: 1em; - font-feature-settings: 'liga' 1, 'calt' 1; - -webkit-font-smoothing: antialiased !important; -} - -/* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - --ifm-color-primary: #787887; - --ifm-color-primary-dark: #21af90; - --ifm-color-primary-darker: #1fa588; - --ifm-color-primary-darkest: #1a8870; - --ifm-color-primary-light: #29d5b0; - --ifm-color-primary-lighter: #32d8b4; - --ifm-color-primary-lightest: #4fddbf; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); +} + +h1 { + font-size: 40px !important; +} + +h2 { + font-size: 32px !important; +} + +h3 { + font-size: 24px !important; +} + +a { + color: var(--moon); +} + +a:hover { + color: var(--moon); +} + +.navbar { + padding: 0; + backdrop-filter: blur(6px); +} + +.breadcrumbs, +.breadcrumbs__item { + display: flex; + align-items: center; + justify-content: start; +} + +@media (max-width: 960px) { + .navbar__toggle { + margin-left: 16px; + } + + .navbar__brand { + margin-left: 16px; + } + + html[data-theme='light'] .navbar-sidebar{ + background-color: #f1f2fd; + } + + html[data-theme='dark'] .navbar-sidebar { + background-color: #00060f; + } + + /* .menu { + padding: initial !important; + } + + .container { + max-width: 100% !important; + padding: 1rem; + } + + .container.padding-top--md { + padding-top: initial; + } + + .navbar__item { + display: none !important; + } + + .footer { + display: none; + } */ } diff --git a/src/css/tailwind/config.css b/src/css/tailwind/config.css new file mode 100644 index 0000000..2688567 --- /dev/null +++ b/src/css/tailwind/config.css @@ -0,0 +1,6 @@ +@import 'tailwindcss'; + +@import './theme.css'; +@import './layers/base.css'; +@import './layers/utilities.css'; +@import './layers/components.css'; diff --git a/src/css/tailwind/layers/base.css b/src/css/tailwind/layers/base.css new file mode 100644 index 0000000..521cc34 --- /dev/null +++ b/src/css/tailwind/layers/base.css @@ -0,0 +1,153 @@ +@layer base { + + /* Reset base styles */ + @import './destyle.css'; + + /* Theme colors */ + :root { + color-scheme: light dark; + } + + :root[data-theme='light'] { + --moon: #00060f; + --moon-rgb: 0, 6, 15; + --lilac: #846ab2; + --lilac-rgb: 132, 106, 178; + } + + :root[data-theme='dark'] { + --moon: #ffffff; + --moon-rgb: 255, 255, 255; + --lilac: #b68dff; + --lilac-rgb: 182, 141, 255; + } + + ::-moz-selection { + color: #47347e; + background: #c8bfe3; + } + + ::selection { + color: #47347e; + background: #c8bfe3; + } + + /* Tags */ + html, + body { + width: 100%; + min-height: 100vh; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + } + + body { + position: relative; + background-color: var(--mirror); + -webkit-overflow-scrolling: touch; + } + + .body-light-theme input::placeholder, + .body-light-theme textarea::placeholder { + color: #9ca3af; + } + + .body-dark-theme input::placeholder, + .body-dark-theme textarea::placeholder { + color: #4b4f57; + } + + *:focus { + outline: none; + } + + input, + textarea, + button, + select { + background: none; + border: none; + border-radius: 0; + } + + legend, + fieldset { + display: block; + margin: 0; + padding: 0; + border: 0; + } + + button, + input[type='button'] { + text-align: center; + user-select: none; + } + + textarea { + resize: none; + } + + input::-webkit-contacts-auto-fill-button, + select::-webkit-contacts-auto-fill-button, + textarea::-webkit-contacts-auto-fill-button { + visibility: hidden; + } + + input:-webkit-autofill, + select:-webkit-autofill, + textarea:-webkit-autofill, + input:-webkit-autofill:focus, + select:-webkit-autofill:focus, + textarea:-webkit-autofill:focus { + background-color: #fff; + -webkit-box-shadow: inset 0 0 0 100rem #fff; + } + + select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #000; + -webkit-appearance: none; + -moz-appearance: radio-container; + appearance: normal; + } + + select::-ms-expand { + display: none; + } + + hr { + height: 1px; + border: none; + } + + b, + strong { + font-weight: 600; + } + + svg:not([fill]) { + fill: currentColor; + } + + svg:not(:root) { + overflow: hidden; + } + + :where([aria-busy='true' i]) { + cursor: progress; + } + + :where([aria-disabled='true' i], [disabled]) { + cursor: not-allowed; + } + + :where([aria-hidden='false' i][hidden]) { + display: initial; + } + + :where([aria-hidden='false' i][hidden]:not(:focus)) { + position: absolute; + clip: rect(0, 0, 0, 0); + } +} diff --git a/src/css/tailwind/layers/components.css b/src/css/tailwind/layers/components.css new file mode 100644 index 0000000..0d730d5 --- /dev/null +++ b/src/css/tailwind/layers/components.css @@ -0,0 +1,139 @@ +@layer components { + + /* Typography */ + .text-h100 { + font-weight: 700; + font-size: 100px; + line-height: 110px; + } + + .text-h90 { + font-weight: 700; + font-size: 90px; + line-height: 100px; + } + + .text-h60 { + font-weight: 700; + font-size: 60px; + line-height: 72px; + } + + .text-h48 { + font-weight: 700; + font-size: 48px; + line-height: 56px; + } + + .text-h40 { + font-weight: 700; + font-size: 40px; + line-height: 48px; + } + + .text-h32 { + font-weight: 700; + font-size: 32px; + line-height: 44px; + } + + .text-h24 { + font-weight: 700; + font-size: 24px; + line-height: 32px; + } + + .text-h22 { + font-weight: 700; + font-size: 22px; + line-height: 26px; + } + + .text-h20 { + font-weight: 700; + font-size: 20px; + line-height: 24px; + } + + .text-t40m { + font-weight: 500; + font-size: 40px; + line-height: 48px; + } + + .text-t20b { + font-weight: 700; + font-size: 20px; + line-height: 32px; + } + + .text-t18m { + font-weight: 500; + font-size: 18px; + line-height: 24px; + } + + .text-t18b { + font-weight: 700; + font-size: 18px; + line-height: 24px; + } + + .text-t16m { + font-weight: 500; + font-size: 16px; + line-height: 22px; + } + + .text-t16b { + font-weight: 700; + font-size: 16px; + line-height: 22px; + } + + .text-t14m { + font-weight: 500; + font-size: 14px; + line-height: 20px; + } + + .text-t14b { + font-weight: 700; + font-size: 14px; + line-height: 20px; + } + + .text-t14 { + font-weight: 400; + font-size: 14px; + line-height: 20px; + } + + .text-t12m { + font-weight: 500; + font-size: 12px; + line-height: 18px; + } + + .text-t12b { + font-weight: 700; + font-size: 12px; + line-height: 18px; + } + + .text-t12 { + font-weight: 400; + font-size: 12px; + line-height: 18px; + } + + .width-container { + width: 100%; + max-width: 1320px; + margin-right: auto; + margin-left: auto; + padding-right: 60px; + padding-bottom: 40px; + padding-left: 60px; + } +} diff --git a/src/css/tailwind/layers/destyle.css b/src/css/tailwind/layers/destyle.css new file mode 100644 index 0000000..3712dec --- /dev/null +++ b/src/css/tailwind/layers/destyle.css @@ -0,0 +1,415 @@ +/*! destyle.css v4.0.1 | MIT License | https://github.com/nicolas-cusan/destyle.css */ + +/* Reset box-model and set borders */ +/* ============================================ */ + +*, +::before, +::after { + box-sizing: border-box; + border-style: solid; + border-width: 0; + min-width: 0; +} + +/* Document */ +/* ============================================ */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + * 3. Remove gray overlay on links for iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ + -webkit-tap-highlight-color: transparent; /* 3*/ +} + +/* Sections */ +/* ============================================ */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/* Vertical rhythm */ +/* ============================================ */ + +p, +table, +blockquote, +address, +pre, +iframe, +form, +figure, +dl { + margin: 0; +} + +/* Headings */ +/* ============================================ */ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; + margin: 0; +} + +/* Lists (enumeration) */ +/* ============================================ */ + +ul, +ol { + margin: 0; + padding: 0; + list-style: none; +} + +/* Lists (definition) */ +/* ============================================ */ + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +/* Grouping content */ +/* ============================================ */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ + border-top-width: 1px; + margin: 0; + clear: both; + color: inherit; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: inherit; /* 2 */ +} + +address { + font-style: inherit; +} + +/* Text-level semantics */ +/* ============================================ */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; + text-decoration: none; + color: inherit; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: inherit; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Replaced content */ +/* ============================================ */ + +/** + * Prevent vertical alignment issues. + */ + +svg, +img, +embed, +object, +iframe { + vertical-align: bottom; +} + +/* Forms */ +/* ============================================ */ + +/** + * Reset form fields to make them styleable. + * 1. Make form elements stylable across systems iOS especially. + * 2. Inherit text-transform from parent. + */ + +button, +input, +optgroup, +select, +textarea { + margin: 0; + padding: 0; + color: inherit; + font: inherit; + text-align: inherit; + vertical-align: middle; + background: transparent; + -webkit-appearance: none; /* 1 */ + appearance: none; + text-transform: inherit; /* 2 */ + border-radius: 0; +} + +/** + * Correct cursors for clickable elements. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + cursor: pointer; +} + +button:disabled, +[type="button"]:disabled, +[type="reset"]:disabled, +[type="submit"]:disabled { + cursor: default; +} + +/** + * Improve outlines for Firefox and unify style with input elements & buttons. + */ + +:-moz-focusring { + outline: auto; +} + +select:disabled { + opacity: inherit; +} + +/** + * Remove padding + */ + +option { + padding: 0; +} + +/** + * Reset to invisible + */ + +fieldset { + margin: 0; + padding: 0; + min-width: 0; +} + +legend { + padding: 0; +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * Correct the outline style in Safari. + */ + +[type="search"] { + outline-offset: -2px; /* 1 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Fix font inheritance. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/** + * Fix appearance for Firefox + */ +[type="number"] { + -moz-appearance: textfield; +} + +/** + * Clickable labels + */ + +label[for] { + cursor: pointer; +} + +/* Interactive */ +/* ============================================ */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* + * Remove outline for editable content. + */ + +[contenteditable]:focus { + outline: auto; +} + +/* Tables */ +/* ============================================ */ + +/** +1. Correct table border color inheritance in all Chrome and Safari. +*/ + +table { + border-color: inherit; /* 1 */ + border-collapse: collapse; +} + +caption { + text-align: left; +} + +td, +th { + vertical-align: top; + padding: 0; +} + +th { + text-align: left; + font-weight: bold; +} diff --git a/src/css/tailwind/layers/utilities.css b/src/css/tailwind/layers/utilities.css new file mode 100644 index 0000000..d4ff973 --- /dev/null +++ b/src/css/tailwind/layers/utilities.css @@ -0,0 +1,49 @@ +@layer utilities { + + /* Borders */ + .border { + border-style: solid; + border-width: 1px; + } + + .border-top { + border-top-width: 1px; + border-top-style: solid; + } + + .border-bottom { + border-bottom-width: 1px; + border-bottom-style: solid; + } + + .border-left { + border-left-width: 1px; + border-left-style: solid; + } + + .border-right { + border-right-width: 1px; + border-right-style: solid; + } + + /* Radius */ + .rounded-full { + border-radius: 100%; + } + + .rounded-4 { + border-radius: var(--radius-4); + } + + .rounded-6 { + border-radius: var(--radius-6); + } + + .rounded-8 { + border-radius: var(--radius-8); + } + + .rounded-12 { + border-radius: var(--radius-12); + } +} diff --git a/src/css/tailwind/theme.css b/src/css/tailwind/theme.css new file mode 100644 index 0000000..03cfb38 --- /dev/null +++ b/src/css/tailwind/theme.css @@ -0,0 +1,29 @@ +@theme inline { + --*: initial; + + /* Colors */ + /* --color-sun: var(--sun); + --color-coal: var(--coal); + --color-snow: var(--snow); */ + --color-moon: var(--moon); + --color-lilac: var(--lilac); + /* --color-stone: var(--stone); + --color-smoke: var(--smoke); + --color-ocean: var(--ocean); + --color-autumn: var(--autumn); + --color-forest: var(--forest); + --color-jungle: var(--jungle); + --color-sunset: var(--sunset); + --color-mirror: var(--mirror); + --color-volcano: var(--volcano); + --color-titanium: var(--titanium); */ + + /* Border radius */ + --radius-4: 4px; + --radius-6: 6px; + --radius-8: 8px; + --radius-12: 12px; + + /* Other */ + --spacing: 1px; +} diff --git a/src/pages/index.module.css b/src/pages/index.module.css deleted file mode 100644 index 9f71a5d..0000000 --- a/src/pages/index.module.css +++ /dev/null @@ -1,23 +0,0 @@ -/** - * CSS files with the .module.css suffix will be treated as CSS modules - * and scoped locally. - */ - -.heroBanner { - padding: 4rem 0; - text-align: center; - position: relative; - overflow: hidden; -} - -@media screen and (max-width: 996px) { - .heroBanner { - padding: 2rem; - } -} - -.buttons { - display: flex; - align-items: center; - justify-content: center; -} diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 1b3061d..aae53c9 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,46 +1,33 @@ -import type { ReactNode } from "react"; -import clsx from "clsx"; -import Link from "@docusaurus/Link"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import Layout from "@theme/Layout"; -import HomepageFeatures from "@site/src/components/HomepageFeatures"; -import Heading from "@theme/Heading"; - -import styles from "./index.module.css"; - -function HomepageHeader() { - const { siteConfig } = useDocusaurusContext(); - return ( -
          -
          - - {siteConfig.title} - -

          {siteConfig.tagline}

          -
          - - Docusaurus Tutorial - 5min ⏱️ - -
          -
          -
          - ); -} +import React, { useEffect } from 'react' +import Layout from '@theme/Layout' +import { useLocation } from '@docusaurus/router' +import useDocusaurusContext from '@docusaurus/useDocusaurusContext' + +import { DocsSections, FAQ, GitHub, Links, BrandAssets } from '@site/src/components' + +import '@site/src/css/tailwind/config.css' + + +const Home: React.FC = () => { + const location = useLocation() + const { siteConfig } = useDocusaurusContext() + + useEffect(() => { + console.log('location.pathname', location.pathname) + }, [ location.pathname ]) -export default function Home(): ReactNode { - const { siteConfig } = useDocusaurusContext(); return ( - - -
          - -
          + +
          + + + + + +
          - ); + ) } + + +export default Home diff --git a/src/pages/markdown-page.md b/src/pages/markdown-page.md deleted file mode 100644 index 9756c5b..0000000 --- a/src/pages/markdown-page.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Markdown page example ---- - -# Markdown page example - -You don't need React to write simple standalone pages. diff --git a/src/plugins/tailwind-config.js b/src/plugins/tailwind-config.js new file mode 100644 index 0000000..8da6d7f --- /dev/null +++ b/src/plugins/tailwind-config.js @@ -0,0 +1,10 @@ +module.exports = function tailwindPlugin() { + return { + name: 'tailwind-plugin', + configurePostCss(postcssOptions) { + postcssOptions.plugins = [require('@tailwindcss/postcss')] + + return postcssOptions; + }, + }; +}; diff --git a/static/icon/code.svg b/static/icon/code.svg new file mode 100644 index 0000000..7c4b685 --- /dev/null +++ b/static/icon/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/discord.svg b/static/icon/discord.svg new file mode 100644 index 0000000..12ed677 --- /dev/null +++ b/static/icon/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/file.svg b/static/icon/file.svg new file mode 100644 index 0000000..5893bc4 --- /dev/null +++ b/static/icon/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/forum.svg b/static/icon/forum.svg new file mode 100644 index 0000000..711d8cf --- /dev/null +++ b/static/icon/forum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/gears.svg b/static/icon/gears.svg new file mode 100644 index 0000000..fd5c548 --- /dev/null +++ b/static/icon/gears.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/link.svg b/static/icon/link.svg new file mode 100644 index 0000000..5f144c9 --- /dev/null +++ b/static/icon/link.svg @@ -0,0 +1 @@ + diff --git a/static/icon/telegram.svg b/static/icon/telegram.svg new file mode 100644 index 0000000..c2f0b0b --- /dev/null +++ b/static/icon/telegram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/twitter.svg b/static/icon/twitter.svg new file mode 100644 index 0000000..7c049bb --- /dev/null +++ b/static/icon/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icon/vote.svg b/static/icon/vote.svg new file mode 100644 index 0000000..1782ecd --- /dev/null +++ b/static/icon/vote.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/docusaurus-social-card.jpg b/static/img/docusaurus-social-card.jpg deleted file mode 100644 index ffcb448210e1a456cb3588ae8b396a597501f187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55746 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 fgzs%Vr*-jYG(YMS<ttdtee# diff --git a/static/img/docusaurus.png b/static/img/docusaurus.png deleted file mode 100644 index f458149e3c8f53335f28fbc162ae67f55575c881..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5142 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 F{0H{b<4^zq diff --git a/static/img/favicon.ico b/static/img/favicon.ico index c01d54bcd39a5f853428f3cd5aa0f383d963c484..6e3075dd428e452ed4fe1815a8f53126035e7c4c 100644 GIT binary patch literal 15086 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 \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/logo180.png b/static/img/logo180.png new file mode 100644 index 0000000000000000000000000000000000000000..24274129c667f0d72a08c50b6bbe228da0c5ad08 GIT binary patch literal 13445 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 SD7PYTkd)-qz_l`FVgC!5WhMUr literal 0 HcmV?d00001 diff --git a/static/img/logo192.png b/static/img/logo192.png new file mode 100644 index 0000000000000000000000000000000000000000..c76e77b069d0ef1334736ff463c5eb987c12bbc6 GIT binary patch literal 8815 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 literal 0 HcmV?d00001 diff --git a/static/img/logo512.png b/static/img/logo512.png new file mode 100644 index 0000000000000000000000000000000000000000..896e2af3c3de7204f166300e0625d256eb867fea GIT binary patch literal 30941 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 P_2ZF4z6Z - Easy to Use - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_react.svg b/static/img/undraw_docusaurus_react.svg deleted file mode 100644 index 94b5cf0..0000000 --- a/static/img/undraw_docusaurus_react.svg +++ /dev/null @@ -1,170 +0,0 @@ - - Powered by React - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/undraw_docusaurus_tree.svg b/static/img/undraw_docusaurus_tree.svg deleted file mode 100644 index d9161d3..0000000 --- a/static/img/undraw_docusaurus_tree.svg +++ /dev/null @@ -1,40 +0,0 @@ - - Focus on What Matters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 6d0cec204334556cb44fffb69dba16966b3b5e9c Mon Sep 17 00:00:00 2001 From: Andrey Kopylov Date: Tue, 29 Apr 2025 13:50:43 +0500 Subject: [PATCH 2/6] [custom-theme] mobile version --- docusaurus.config.ts | 8 ++-- .../DocsSections/Blocks/Block/Block.tsx | 2 +- src/components/DocsSections/Blocks/Blocks.tsx | 2 +- src/components/DocsSections/DocsSections.tsx | 6 +-- src/components/GitHub/GitHub.tsx | 6 +-- src/components/Links/Block/Block.tsx | 7 ++- src/components/Links/Links.tsx | 2 +- src/css/custom.css | 44 ++++++++++++------- src/css/tailwind/layers/components.css | 10 ----- 9 files changed, 43 insertions(+), 44 deletions(-) diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 0939ec1..1e4e55f 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -85,13 +85,13 @@ const config: Config = { sidebarId: 'contractsSidebar', }, { - label: 'Discord', - href: 'https://discord.com/invite/2BSdr2g', + label: 'X', + href: 'https://x.com/stakewise_io', position: 'right', }, { - label: 'X', - href: 'https://x.com/stakewise_io', + label: 'Discord', + href: 'https://discord.com/invite/2BSdr2g', position: 'right', }, { diff --git a/src/components/DocsSections/Blocks/Block/Block.tsx b/src/components/DocsSections/Blocks/Block/Block.tsx index c96bfaa..6cbe7a7 100644 --- a/src/components/DocsSections/Blocks/Block/Block.tsx +++ b/src/components/DocsSections/Blocks/Block/Block.tsx @@ -20,7 +20,7 @@ const Block: React.FC = (props) => { return (
          diff --git a/src/components/DocsSections/Blocks/Blocks.tsx b/src/components/DocsSections/Blocks/Blocks.tsx index d940e14..d71a12f 100644 --- a/src/components/DocsSections/Blocks/Blocks.tsx +++ b/src/components/DocsSections/Blocks/Blocks.tsx @@ -25,7 +25,7 @@ const blocks: BlockProps[] = [ ] const Blocks: React.FC = () => ( -
          +
          { blocks.map((item) => ( diff --git a/src/components/DocsSections/DocsSections.tsx b/src/components/DocsSections/DocsSections.tsx index 0293b8c..88ff2db 100644 --- a/src/components/DocsSections/DocsSections.tsx +++ b/src/components/DocsSections/DocsSections.tsx @@ -20,9 +20,9 @@ const DocsSections: React.FC = () => { }, [ location ]) return ( -
          -

          {siteConfig.title}

          -

          {siteConfig.tagline}

          +
          +

          {siteConfig.title}

          +

          {siteConfig.tagline}

          ) diff --git a/src/components/GitHub/GitHub.tsx b/src/components/GitHub/GitHub.tsx index 6e2b714..f1847c8 100644 --- a/src/components/GitHub/GitHub.tsx +++ b/src/components/GitHub/GitHub.tsx @@ -27,9 +27,9 @@ const items = [ ] as const const GitHub: React.FC = () => ( -
          -
          Developer Links
          -
          +
          +
          Developer Links
          +
          { items.map((item) => ( diff --git a/src/components/Links/Block/Block.tsx b/src/components/Links/Block/Block.tsx index 603ce3a..93d313b 100644 --- a/src/components/Links/Block/Block.tsx +++ b/src/components/Links/Block/Block.tsx @@ -15,16 +15,15 @@ const LinkIcon = require("@site/static/icon/link.svg").default const Block: React.FC = (props) => { const { title, href, Svg } = props - return (
          - -
          + +
          {title}
          diff --git a/src/components/Links/Links.tsx b/src/components/Links/Links.tsx index 1dbae54..55254f7 100644 --- a/src/components/Links/Links.tsx +++ b/src/components/Links/Links.tsx @@ -32,7 +32,7 @@ const links: BlockProps[] = [ ] const Links: React.FC = () => ( -
          +
          { links.map((item) => ( diff --git a/src/css/custom.css b/src/css/custom.css index acecfd9..c515b0d 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -89,11 +89,6 @@ a:hover { color: var(--moon); } -.navbar { - padding: 0; - backdrop-filter: blur(6px); -} - .breadcrumbs, .breadcrumbs__item { display: flex; @@ -101,6 +96,12 @@ a:hover { justify-content: start; } +.width-container { + width: 100%; + margin-right: auto; + margin-left: auto; +} + @media (max-width: 960px) { .navbar__toggle { margin-left: 16px; @@ -118,24 +119,33 @@ a:hover { background-color: #00060f; } - /* .menu { - padding: initial !important; + .navbar-sidebar__items ul.menu__list { + padding-left: 24px; } - .container { - max-width: 100% !important; - padding: 1rem; + .navbar-sidebar { + box-shadow: none; + overflow: hidden; + max-height: 100vh; } - .container.padding-top--md { - padding-top: initial; + .width-container { + padding-right: 12px; + padding-bottom: 24px; + padding-left: 12px; } +} - .navbar__item { - display: none !important; +@media (min-width: 961px) { + .navbar { + padding: 0 24px; + backdrop-filter: blur(6px); } - .footer { - display: none; - } */ + .width-container { + max-width: 1320px; + padding-right: 60px; + padding-bottom: 40px; + padding-left: 60px; + } } diff --git a/src/css/tailwind/layers/components.css b/src/css/tailwind/layers/components.css index 0d730d5..3262e70 100644 --- a/src/css/tailwind/layers/components.css +++ b/src/css/tailwind/layers/components.css @@ -126,14 +126,4 @@ font-size: 12px; line-height: 18px; } - - .width-container { - width: 100%; - max-width: 1320px; - margin-right: auto; - margin-left: auto; - padding-right: 60px; - padding-bottom: 40px; - padding-left: 60px; - } } From 82234f13fcc6a9a668bc961d5ce73956907061ce Mon Sep 17 00:00:00 2001 From: Andrey Kopylov Date: Tue, 29 Apr 2025 13:58:56 +0500 Subject: [PATCH 3/6] [custom-theme] notes colors --- src/css/custom.css | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index c515b0d..deb5303 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -38,6 +38,19 @@ html[data-theme='dark'] { background-color: #181618; } +html[data-theme='dark'] .alert--success { + --ifm-tabs-color-active-border: #7fbc7f; + --ifm-alert-background-color: #65cd6533; +} + +html[data-theme='dark'] .alert--danger { + --ifm-alert-background-color: #94595b6b; +} + +html[data-theme='dark'] .alert--warning { + --ifm-alert-background-color: #9490596b; +} + html[data-theme='light'] { --ifm-toc-border-color: #00060f0d; --ifm-footer-background-color: #00060f0d; From 42e820f9af64ba037cddcade408cc5b312966db2 Mon Sep 17 00:00:00 2001 From: Andrey Kopylov Date: Tue, 29 Apr 2025 14:42:36 +0500 Subject: [PATCH 4/6] [custom-theme] fix build --- .../IEthPoolEscrow.sol/interface.IEthPoolEscrow.md | 2 +- .../IGnoPoolEscrow.sol/interface.IGnoPoolEscrow.md | 2 +- docs/contracts/tokens/OsToken.sol/contract.OsToken.md | 4 ++-- .../contract.EthBlocklistErc20Vault.md | 2 +- .../EthPrivErc20Vault.sol/contract.EthPrivErc20Vault.md | 2 +- .../contract.GnoBlocklistErc20Vault.md | 2 +- .../GnoPrivErc20Vault.sol/contract.GnoPrivErc20Vault.md | 2 +- .../vaults/modules/VaultToken.sol/abstract.VaultToken.md | 2 +- .../modules/VaultVersion.sol/abstract.VaultVersion.md | 8 ++++---- docusaurus.config.ts | 2 +- src/components/DocsSections/DocsSections.tsx | 2 +- src/pages/index.tsx | 8 +------- 12 files changed, 16 insertions(+), 22 deletions(-) diff --git a/docs/contracts/interfaces/IEthPoolEscrow.sol/interface.IEthPoolEscrow.md b/docs/contracts/interfaces/IEthPoolEscrow.sol/interface.IEthPoolEscrow.md index 1ee28d2..58701b9 100644 --- a/docs/contracts/interfaces/IEthPoolEscrow.sol/interface.IEthPoolEscrow.md +++ b/docs/contracts/interfaces/IEthPoolEscrow.sol/interface.IEthPoolEscrow.md @@ -71,7 +71,7 @@ recipient. Can only be called by the current owner. *WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities. Make sure you trust the recipient, or are either following the -checks-effects-interactions pattern or using {ReentrancyGuard}.* +checks-effects-interactions pattern or using ReentrancyGuard.* ```solidity diff --git a/docs/contracts/interfaces/IGnoPoolEscrow.sol/interface.IGnoPoolEscrow.md b/docs/contracts/interfaces/IGnoPoolEscrow.sol/interface.IGnoPoolEscrow.md index 8c9a92b..c7387dc 100644 --- a/docs/contracts/interfaces/IGnoPoolEscrow.sol/interface.IGnoPoolEscrow.md +++ b/docs/contracts/interfaces/IGnoPoolEscrow.sol/interface.IGnoPoolEscrow.md @@ -71,7 +71,7 @@ function withdrawTokens(address token, address payee, uint256 amount) external; recipient. Can only be called by the current owner. WARNING: Forwarding all gas opens the door to reentrancy vulnerabilities. Make sure you trust the recipient, or are either following the -checks-effects-interactions pattern or using {ReentrancyGuard}.* +checks-effects-interactions pattern or using ReentrancyGuard.* ```solidity diff --git a/docs/contracts/tokens/OsToken.sol/contract.OsToken.md b/docs/contracts/tokens/OsToken.sol/contract.OsToken.md index 026cf22..712194e 100644 --- a/docs/contracts/tokens/OsToken.sol/contract.OsToken.md +++ b/docs/contracts/tokens/OsToken.sol/contract.OsToken.md @@ -93,8 +93,8 @@ function burn(address account, uint256 value) external override onlyController; ### nonces *Returns the current nonce for `owner`. This value must be -included whenever a signature is generated for {permit}. -Every successful call to {permit} increases ``owner``'s nonce by one. This +included whenever a signature is generated for permit. +Every successful call to permit increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.* diff --git a/docs/contracts/vaults/ethereum/EthBlocklistErc20Vault.sol/contract.EthBlocklistErc20Vault.md b/docs/contracts/vaults/ethereum/EthBlocklistErc20Vault.sol/contract.EthBlocklistErc20Vault.md index e29c0ef..4c19a40 100644 --- a/docs/contracts/vaults/ethereum/EthBlocklistErc20Vault.sol/contract.EthBlocklistErc20Vault.md +++ b/docs/contracts/vaults/ethereum/EthBlocklistErc20Vault.sol/contract.EthBlocklistErc20Vault.md @@ -167,7 +167,7 @@ function version() public pure virtual override(IVaultVersion, EthErc20Vault) re ### _transfer *Moves `amount` of tokens from `from` to `to`. -Emits a {Transfer} event.* +Emits a Transfer event.* ```solidity diff --git a/docs/contracts/vaults/ethereum/EthPrivErc20Vault.sol/contract.EthPrivErc20Vault.md b/docs/contracts/vaults/ethereum/EthPrivErc20Vault.sol/contract.EthPrivErc20Vault.md index 3a7ddec..3ee9b86 100644 --- a/docs/contracts/vaults/ethereum/EthPrivErc20Vault.sol/contract.EthPrivErc20Vault.md +++ b/docs/contracts/vaults/ethereum/EthPrivErc20Vault.sol/contract.EthPrivErc20Vault.md @@ -167,7 +167,7 @@ function mintOsToken(address receiver, uint256 osTokenShares, address referrer) ### _transfer *Moves `amount` of tokens from `from` to `to`. -Emits a {Transfer} event.* +Emits a Transfer event.* ```solidity diff --git a/docs/contracts/vaults/gnosis/GnoBlocklistErc20Vault.sol/contract.GnoBlocklistErc20Vault.md b/docs/contracts/vaults/gnosis/GnoBlocklistErc20Vault.sol/contract.GnoBlocklistErc20Vault.md index a87bf9d..9804688 100644 --- a/docs/contracts/vaults/gnosis/GnoBlocklistErc20Vault.sol/contract.GnoBlocklistErc20Vault.md +++ b/docs/contracts/vaults/gnosis/GnoBlocklistErc20Vault.sol/contract.GnoBlocklistErc20Vault.md @@ -157,7 +157,7 @@ function version() public pure virtual override(IVaultVersion, GnoErc20Vault) re ### _transfer *Moves `amount` of tokens from `from` to `to`. -Emits a {Transfer} event.* +Emits a Transfer event.* ```solidity diff --git a/docs/contracts/vaults/gnosis/GnoPrivErc20Vault.sol/contract.GnoPrivErc20Vault.md b/docs/contracts/vaults/gnosis/GnoPrivErc20Vault.sol/contract.GnoPrivErc20Vault.md index ddf4938..31f7bce 100644 --- a/docs/contracts/vaults/gnosis/GnoPrivErc20Vault.sol/contract.GnoPrivErc20Vault.md +++ b/docs/contracts/vaults/gnosis/GnoPrivErc20Vault.sol/contract.GnoPrivErc20Vault.md @@ -157,7 +157,7 @@ function version() public pure virtual override(IVaultVersion, GnoErc20Vault) re ### _transfer *Moves `amount` of tokens from `from` to `to`. -Emits a {Transfer} event.* +Emits a Transfer event.* ```solidity diff --git a/docs/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md b/docs/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md index 77361a0..a5de24e 100644 --- a/docs/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md +++ b/docs/contracts/vaults/modules/VaultToken.sol/abstract.VaultToken.md @@ -91,7 +91,7 @@ function _updateExitQueue() internal virtual override returns (uint256 burnedSha ### _transfer *Moves `amount` of tokens from `from` to `to`. -Emits a {Transfer} event.* +Emits a Transfer event.* ```solidity diff --git a/docs/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md b/docs/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md index 9b13950..dbed7f9 100644 --- a/docs/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md +++ b/docs/contracts/vaults/modules/VaultVersion.sol/abstract.VaultVersion.md @@ -49,8 +49,8 @@ function implementation() external view override returns (address); *Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. -Calls {_authorizeUpgrade}. -Emits an {Upgraded} event.* +Calls _authorizeUpgrade. +Emits an Upgraded event.* **Note:** oz-upgrades-unsafe-allow-reachable: delegatecall @@ -63,8 +63,8 @@ function upgradeToAndCall(address newImplementation, bytes memory data) public p ### _authorizeUpgrade *Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by -{upgradeToAndCall}. -Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. +upgradeToAndCall. +Normally, this function will use an xref:access.adoc[access control] modifier such as Ownable-onlyOwner. ```solidity function _authorizeUpgrade(address) internal onlyOwner {} ```* diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 1e4e55f..70e964a 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -12,7 +12,7 @@ const config: Config = { projectName: 'docs', // Usually your repo name. organizationName: 'stakewise', // Usually your GitHub org/user name. - onBrokenLinks: 'throw', + onBrokenLinks: 'warn', onBrokenAnchors: 'throw', onDuplicateRoutes: 'throw', onBrokenMarkdownLinks: 'throw', diff --git a/src/components/DocsSections/DocsSections.tsx b/src/components/DocsSections/DocsSections.tsx index 88ff2db..313bf25 100644 --- a/src/components/DocsSections/DocsSections.tsx +++ b/src/components/DocsSections/DocsSections.tsx @@ -17,7 +17,7 @@ const DocsSections: React.FC = () => { return () => { document.body.classList.remove('bg-gradient') } - }, [ location ]) + }, []) return (
          diff --git a/src/pages/index.tsx b/src/pages/index.tsx index aae53c9..d80e021 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,6 +1,5 @@ -import React, { useEffect } from 'react' +import React from 'react' import Layout from '@theme/Layout' -import { useLocation } from '@docusaurus/router' import useDocusaurusContext from '@docusaurus/useDocusaurusContext' import { DocsSections, FAQ, GitHub, Links, BrandAssets } from '@site/src/components' @@ -9,13 +8,8 @@ import '@site/src/css/tailwind/config.css' const Home: React.FC = () => { - const location = useLocation() const { siteConfig } = useDocusaurusContext() - useEffect(() => { - console.log('location.pathname', location.pathname) - }, [ location.pathname ]) - return (
          From 7f09b4ca9acb9cf9a2fcb7c650b1464a3ffcd3b1 Mon Sep 17 00:00:00 2001 From: Andrey Kopylov Date: Tue, 29 Apr 2025 14:49:20 +0500 Subject: [PATCH 5/6] [custom-theme] fix download assets --- src/components/BrandAssets/BrandAssets.tsx | 2 +- .../stakewise-brand-assets.zip | Bin 2 files changed, 1 insertion(+), 1 deletion(-) rename {src/components/BrandAssets => static}/stakewise-brand-assets.zip (100%) diff --git a/src/components/BrandAssets/BrandAssets.tsx b/src/components/BrandAssets/BrandAssets.tsx index 7096358..dd26e0a 100644 --- a/src/components/BrandAssets/BrandAssets.tsx +++ b/src/components/BrandAssets/BrandAssets.tsx @@ -4,7 +4,7 @@ import React from 'react' const BrandAssets: React.FC = () => (
          diff --git a/src/components/BrandAssets/stakewise-brand-assets.zip b/static/stakewise-brand-assets.zip similarity index 100% rename from src/components/BrandAssets/stakewise-brand-assets.zip rename to static/stakewise-brand-assets.zip From 93a9b41c4dba94d0740c41a8e270b22cda061652 Mon Sep 17 00:00:00 2001 From: Andrey Kopylov Date: Tue, 29 Apr 2025 15:10:24 +0500 Subject: [PATCH 6/6] [custom-theme] fix build after merge --- docs/docs/for-operators/05-dvt.mdx | 2 +- src/components/DocsSections/Blocks/Block/Block.tsx | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/docs/for-operators/05-dvt.mdx b/docs/docs/for-operators/05-dvt.mdx index 99ad420..9a6c932 100644 --- a/docs/docs/for-operators/05-dvt.mdx +++ b/docs/docs/for-operators/05-dvt.mdx @@ -60,7 +60,7 @@ There are 2 ways to create validator keys: - create keys alone - create keys with a group using Distributed Key Generation (DKG) ceremony -Creating keys alone may be an option if you don't collaborate with anybody. In this case DVT may be used for additional robustness. When using SSV you can fully delegate validator duties to other entities (SSV operators) and do not mind running validators on your own. See [Obol page](obol-setup.md) and [SSV page](ssv-setup.md) for further instructions if you are creating keys alone. +Creating keys alone may be an option if you don't collaborate with anybody. In this case DVT may be used for additional robustness. When using SSV you can fully delegate validator duties to other entities (SSV operators) and do not mind running validators on your own. See [Obol page](../intro.mdx) and [SSV page](../intro.mdx) for further instructions if you are creating keys alone. DKG is more secure and decentralized way because nobody has full control over validator keys. The document below is dedicated to DKG way. diff --git a/src/components/DocsSections/Blocks/Block/Block.tsx b/src/components/DocsSections/Blocks/Block/Block.tsx index 6cbe7a7..6af83a3 100644 --- a/src/components/DocsSections/Blocks/Block/Block.tsx +++ b/src/components/DocsSections/Blocks/Block/Block.tsx @@ -17,7 +17,6 @@ const LinkIcon = require("@site/static/icon/link.svg").default const Block: React.FC = (props) => { const { title, text, href, Svg } = props - return (