diff --git a/app/HomePage.tsx b/app/HomePage.tsx index 5090c3fa..7fff24a0 100644 --- a/app/HomePage.tsx +++ b/app/HomePage.tsx @@ -6,7 +6,7 @@ import Link from 'next/link'; import { useTheme } from 'next-themes'; import { RiBookLine, RiDiscordFill, RiGithubFill, RiArrowDownLine, RiExternalLinkLine } from 'react-icons/ri'; import RebalanceAnimation from '@/components/animations/RebalanceAnimation'; -import { Badge } from '@/components/common/Badge'; +import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import Header from '@/components/layout/header/Header'; import { EXTERNAL_LINKS } from '@/utils/external'; diff --git a/app/admin/stats/page.tsx b/app/admin/stats/page.tsx index 40d40cbb..aedad56c 100644 --- a/app/admin/stats/page.tsx +++ b/app/admin/stats/page.tsx @@ -4,18 +4,18 @@ import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Dropdown, DropdownTrigger, DropdownMenu, DropdownItem } from '@heroui/react'; import Image from 'next/image'; -import ButtonGroup from '@/components/ButtonGroup'; -import { Spinner } from '@/components/common/Spinner'; -import { TokenIcon } from '@/components/TokenIcon'; +import ButtonGroup from '@/components/ui/button-group'; +import { Spinner } from '@/components/ui/spinner'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMarkets } from '@/contexts/MarketsContext'; import { fetchAllStatistics } from '@/services/statsService'; import { SupportedNetworks, getNetworkImg, getNetworkName, getViemChain } from '@/utils/networks'; import type { PlatformStats, TimeFrame, AssetVolumeData, Transaction } from '@/utils/statsUtils'; import type { ERC20Token, UnknownERC20Token, TokenSource } from '@/utils/tokens'; import { findToken as findTokenStatic } from '@/utils/tokens'; -import { AssetMetricsTable } from './components/AssetMetricsTable'; -import { StatsOverviewCards } from './components/StatsOverviewCards'; -import { TransactionsTable } from './components/TransactionsTable'; +import { AssetMetricsTable } from '@/features/admin/components/asset-metrics-table'; +import { StatsOverviewCards } from '@/features/admin/components/stats-overview-cards'; +import { TransactionsTable } from '@/features/admin/components/transactions-table'; const getAPIEndpoint = (network: SupportedNetworks) => { switch (network) { diff --git a/app/autovault/[chainId]/[vaultAddress]/page.tsx b/app/autovault/[chainId]/[vaultAddress]/page.tsx index 5259a851..8f888d0d 100644 --- a/app/autovault/[chainId]/[vaultAddress]/page.tsx +++ b/app/autovault/[chainId]/[vaultAddress]/page.tsx @@ -1,6 +1,6 @@ import { generateMetadata as buildMetadata } from '@/utils/generateMetadata'; -import VaultContent from './content'; +import VaultContent from '../../../../src/features/autovault/vault-view'; export async function generateMetadata({ params }: { params: Promise<{ chainId: string; vaultAddress: string }> }) { const { chainId, vaultAddress } = await params; diff --git a/app/autovault/page.tsx b/app/autovault/page.tsx index 8e4dc7d2..0403a1ed 100644 --- a/app/autovault/page.tsx +++ b/app/autovault/page.tsx @@ -1,6 +1,6 @@ import { generateMetadata } from '@/utils/generateMetadata'; -import AutovaultContent from './components/AutovaultContent'; +import AutovaultContent from '@/features/autovault/vault-list-view'; export const metadata = generateMetadata({ title: 'Autovault | Monarch', diff --git a/app/history/[account]/page.tsx b/app/history/[account]/page.tsx index 102db11a..95c48eb0 100644 --- a/app/history/[account]/page.tsx +++ b/app/history/[account]/page.tsx @@ -1,5 +1,5 @@ import type { Metadata } from 'next'; -import HistoryContent from '../components/HistoryContent'; +import HistoryContent from '@/features/history/history-view'; export const metadata: Metadata = { title: 'Transaction History | Monarch', diff --git a/app/layout.tsx b/app/layout.tsx index 53de578d..ff8d9c19 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -3,7 +3,7 @@ import './global.css'; import GoogleAnalytics from '@/components/GoogleAnalytics/GoogleAnalytics'; import { ClientProviders } from '@/components/providers/ClientProviders'; import { QueryProvider } from '@/components/providers/QueryProvider'; -import RiskNotificationModal from '@/components/RiskNotificationModal'; +import RiskNotificationModal from '@/modals/risk-notification-modal'; import { VaultRegistryProvider } from '@/contexts/VaultRegistryContext'; import OnchainProviders from '@/OnchainProviders'; diff --git a/app/market/[chainId]/[marketid]/page.tsx b/app/market/[chainId]/[marketid]/page.tsx index 569ea18d..bb8bf247 100644 --- a/app/market/[chainId]/[marketid]/page.tsx +++ b/app/market/[chainId]/[marketid]/page.tsx @@ -1,5 +1,5 @@ import type { Metadata } from 'next'; -import MarketContent from './content'; +import MarketContent from '../../../../src/features/market-detail/market-view'; export const metadata: Metadata = { title: 'Market Details | Morpho Blue', diff --git a/app/markets/page.tsx b/app/markets/page.tsx index 97a39fa9..f0663ff4 100644 --- a/app/markets/page.tsx +++ b/app/markets/page.tsx @@ -1,6 +1,6 @@ import { generateMetadata } from '@/utils/generateMetadata'; import { SupportedNetworks } from '@/utils/networks'; -import MarketContent from './components/markets'; +import MarketContent from '@/features/markets/markets-view'; export const metadata = generateMetadata({ title: 'Markets | Monarch', diff --git a/app/positions/[account]/page.tsx b/app/positions/[account]/page.tsx index fba346b5..7981e373 100644 --- a/app/positions/[account]/page.tsx +++ b/app/positions/[account]/page.tsx @@ -1,6 +1,6 @@ import { generateMetadata } from '@/utils/generateMetadata'; -import Content from '../components/PositionsContent'; +import Content from '@/features/positions/positions-view'; export const metadata = generateMetadata({ title: 'Portfolio | Monarch', @@ -9,6 +9,6 @@ export const metadata = generateMetadata({ pathname: '', }); -export default function MarketPage() { +export default function PositionPage() { return ; } diff --git a/app/positions/report/[account]/page.tsx b/app/positions/report/[account]/page.tsx index aab2e37c..f1b48728 100644 --- a/app/positions/report/[account]/page.tsx +++ b/app/positions/report/[account]/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from 'next'; import type { Address } from 'viem'; -import ReportContent from '../components/ReportContent'; +import ReportContent from '@/features/positions-report/positions-report-view'; export const metadata: Metadata = { title: 'Position Report | Monarch', diff --git a/app/rewards/[account]/page.tsx b/app/rewards/[account]/page.tsx index 9bcf256e..a83ab7ba 100644 --- a/app/rewards/[account]/page.tsx +++ b/app/rewards/[account]/page.tsx @@ -1,6 +1,6 @@ import { generateMetadata } from '@/utils/generateMetadata'; -import Content from '../components/RewardContent'; +import Content from '@/features/rewards/rewards-view'; export const metadata = generateMetadata({ title: 'Rewards | Monarch', diff --git a/app/settings/page.tsx b/app/settings/page.tsx index 7cb12a21..c38d39d6 100644 --- a/app/settings/page.tsx +++ b/app/settings/page.tsx @@ -3,12 +3,12 @@ import React from 'react'; import { GoShield, GoShieldCheck } from 'react-icons/go'; import { Button } from '@/components/ui/button'; -import { IconSwitch } from '@/components/common/IconSwitch'; +import { IconSwitch } from '@/components/ui/icon-switch'; import Header from '@/components/layout/header/Header'; -import { BlacklistedMarketsModal } from '@/components/settings/BlacklistedMarketsModal'; -import { AdvancedRpcSettings } from '@/components/settings/CustomRpcSettings'; -import TrustedVaultsModal from '@/components/settings/TrustedVaultsModal'; -import { VaultIdentity } from '@/components/vaults/VaultIdentity'; +import { BlacklistedMarketsModal } from '@/modals/settings/blacklisted-markets-modal'; +import { AdvancedRpcSettings } from '@/modals/settings/custom-rpc-settings'; +import TrustedVaultsModal from '@/modals/settings/trusted-vaults-modal'; +import { VaultIdentity } from '@/features/autovault/components/vault-identity'; import { defaultTrustedVaults, type TrustedVault } from '@/constants/vaults/known_vaults'; import { useLocalStorage } from '@/hooks/useLocalStorage'; import { useMarkets } from '@/hooks/useMarkets'; diff --git a/app/tools/page.tsx b/app/tools/page.tsx index 4995771a..d9d8e68b 100644 --- a/app/tools/page.tsx +++ b/app/tools/page.tsx @@ -8,7 +8,7 @@ import Header from '@/components/layout/header/Header'; import { useMorphoAuthorization } from '@/hooks/useMorphoAuthorization'; import { useStyledToast } from '@/hooks/useStyledToast'; import { getNetworkName, type SupportedNetworks } from '@/utils/networks'; -import NetworkFilter from 'app/markets/components/NetworkFilter'; +import NetworkFilter from '@/features/markets/components/filters/network-filter'; export default function ToolsPage() { const currentChainId = useChainId(); diff --git a/biome.jsonc b/biome.jsonc index 2afa738e..75c0d69c 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -196,7 +196,8 @@ "biome.jsonc", "tsconfig.json", "src/constants/oracle/**/*.json", - "public/manifest.json" + "public/manifest.json", + "src/components/ui/*.tsx" ], "formatter": { "enabled": false diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 5ebf92fa..83d91caf 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -245,29 +245,210 @@ const getButtonText = () => { --- +## Component Architecture + +Monarch follows a **feature-based architecture** optimized for Next.js 15 App Router best practices. + +### Core Principles + +**1. `app/` is for Routing, `src/` is for Logic** + +The `app/` directory is a thin routing layer. Each `page.tsx` file: +- Exports metadata for SEO +- Handles URL parameters (server-side) +- Renders a single "View" component from `src/features/` + +**Example** (`app/markets/page.tsx`): +```typescript +import { MarketsView } from '@/features/markets/markets-view'; + +export const metadata = { title: 'Markets' }; + +export default function Page() { + return ; +} +``` + +**2. Features Group Related Logic** + +Each feature in `src/features/` contains: +- Main view component (`{feature}-view.tsx`) +- Supporting components (`components/`) +- Feature-specific hooks (`hooks/`) +- Feature-specific utilities (`utils/`) + +**3. Clear Component Hierarchy** + +``` +src/components/ +├── ui/ # Design system primitives (Button, Badge, Spinner) +├── shared/ # Cross-feature, business-agnostic components +├── layout/ # Layout wrappers (Header, Footer) +└── providers/ # Context providers +``` + +### Feature Structure + +Each feature follows this pattern: + +``` +src/features/{feature-name}/ +├── {feature-name}-view.tsx # Main orchestrator (replaces old "Content") +├── components/ # Feature-specific components +│ ├── filters/ # Grouped by responsibility +│ ├── table/ +│ └── {component}.tsx +├── hooks/ # Feature-specific hooks (optional) +└── utils/ # Feature-specific utilities (optional) +``` + +**Current Features**: +- `markets/` - Market listing, filtering, settings +- `market-detail/` - Individual market pages (borrowers, suppliers, transactions) +- `positions/` - User positions, rebalancing, onboarding +- `positions-report/` - Position reporting +- `autovault/` - Vault listing, deployment, vault detail pages +- `rewards/` - Rewards tracking +- `history/` - Transaction history +- `admin/` - Admin dashboard + +### Global Modals + +Modals triggered from multiple places live in `src/modals/`: + +``` +src/modals/ +├── supply/ # Supply & withdraw flow +├── borrow/ # Borrow & repay flow +├── settings/ # Settings modals +├── wrap-process-modal.tsx +└── risk-notification-modal.tsx +``` + +### Component Guidelines + +**When to use `src/components/ui/`**: +- Zero business logic +- Purely presentational (Button, Badge, Table) +- Shadcn/Radix primitives + +**When to use `src/components/shared/`**: +- Reusable across multiple features +- Business-agnostic (TokenIcon, AccountIdentity, TablePagination) +- No domain-specific logic + +**When to use `src/features/{feature}/components/`**: +- Feature-specific component +- Contains domain logic for that feature +- Used only within that feature's pages + +**When to use `src/modals/`**: +- Modal triggered from multiple locations +- Global state-managed modals +- Complex multi-step flows (supply, borrow) + +--- + ## Key Directories ``` -/app # Next.js pages (App Router) +/app # Next.js App Router (Routing Layer) + /markets + page.tsx # Metadata + renders MarketsView + /positions + page.tsx + [account]/page.tsx + /autovault + page.tsx + [chainId]/[vaultAddress] + page.tsx + /src - /components # React components - /providers # Context providers - /config # Configuration - dataSources.ts # Network → data source mapping - /constants # Static data - /oracle # Cached oracle feeds (JSON) - /contexts # React contexts (global state) - /data-sources # Data fetching logic - /morpho-api # Primary source - /subgraph # Fallback source - /graphql # GraphQL queries - /hooks # Custom React hooks - /utils # Utilities - tokens.ts # Token whitelist/blacklist - merklApi.ts # Merkl rewards integration - networks.ts # Supported networks + default RPCs - subgraph-urls.ts # Subgraph endpoints -/scripts # Build scripts + /components # Reusable UI components + /ui/ # Design system primitives + button.tsx + table.tsx + badge.tsx + spinner.tsx + ... + /shared/ # Business-agnostic patterns + token-icon.tsx + account-identity.tsx + table-pagination.tsx + ... + /layout/ # Layout components + header/ + /providers/ # Context providers + ClientProviders.tsx + TokenProvider.tsx + + /features/ # Domain-specific logic (Feature-Based) + /markets/ + markets-view.tsx # Main view component + /components/ + /filters/ # Asset, Network, Oracle filters + /table/ # Table components + /oracle/ # Oracle-related components + market-identity.tsx + market-settings-modal.tsx + ... + /positions/ + positions-view.tsx + /components/ + /rebalance/ + /preview/ + /onboarding/ + positions-summary-table.tsx + ... + /autovault/ + autovault-view.tsx + /components/ + /deployment/ + /vault-detail/ + /allocations/ + /modals/ + /settings/ + vault-identity.tsx + ... + /market-detail/ # Individual market pages + /positions-report/ + /rewards/ + /history/ + /admin/ + + /modals/ # Global modals + /supply/ + supply-modal.tsx + supply-process-modal.tsx + withdraw-modal-content.tsx + /borrow/ + borrow-modal.tsx + borrow-process-modal.tsx + /components/ + /settings/ + blacklisted-markets-modal.tsx + trusted-vaults-modal.tsx + custom-rpc-settings.tsx + wrap-process-modal.tsx + risk-notification-modal.tsx + + /config/ # Configuration + dataSources.ts # Network → data source mapping + /constants/ # Static data + /oracle/ # Cached oracle feeds (JSON) + /contexts/ # React contexts (global state) + /data-sources/ # Data fetching logic + /morpho-api/ # Primary source + /subgraph/ # Fallback source + /graphql/ # GraphQL queries + /hooks/ # Custom React hooks (60+ files) + /utils/ # Utilities + tokens.ts # Token whitelist/blacklist + merklApi.ts # Merkl rewards integration + networks.ts # Supported networks + default RPCs + subgraph-urls.ts # Subgraph endpoints + +/scripts/ # Build scripts generate-oracle-cache.ts generate-chainlink-data.ts generate-redstone-data.ts @@ -277,6 +458,56 @@ const getButtonText = () => { ## Common Tasks +### Adding a New Page/Feature + +1. **Create the page route** in `app/{feature}/page.tsx`: + ```typescript + import { FeatureView } from '@/features/{feature}/{feature}-view'; + + export const metadata = { title: 'Feature Name' }; + + export default function Page() { + return ; + } + ``` + +2. **Create the feature directory** in `src/features/{feature}/`: + ``` + src/features/{feature}/ + ├── {feature}-view.tsx # Main view component + └── components/ # Feature-specific components + ``` + +3. **Build the view component** (`{feature}-view.tsx`): + - Add `'use client'` if using hooks/state + - Import shared components from `@/components/shared/` + - Import UI primitives from `@/components/ui/` + - Keep feature logic self-contained + +### Adding a New Component + +**Ask yourself**: Where does this component belong? + +1. **Is it a pure UI primitive?** → `src/components/ui/` + - No business logic + - Highly reusable (Button, Input, Card) + - Example: `button.tsx`, `badge.tsx` + +2. **Is it reusable across features but not a primitive?** → `src/components/shared/` + - Business-agnostic + - Used in 2+ features + - Example: `token-icon.tsx`, `account-identity.tsx` + +3. **Is it specific to one feature?** → `src/features/{feature}/components/` + - Contains domain logic + - Only used in one feature + - Example: `markets/components/market-identity.tsx` + +4. **Is it a global modal?** → `src/modals/` + - Triggered from multiple places + - Multi-step flows + - Example: `supply/supply-modal.tsx` + ### Adding a New Token 1. Add token to `src/utils/tokens.ts` in the `supportedTokens` array @@ -296,7 +527,7 @@ const getButtonText = () => { ```bash pnpm generate:oracle # Refresh all oracles pnpm generate:chainlink # Refresh Chainlink feeds -pnpm generate:redstone # Refresh Redstone feeds +pnpm generate:redstone # Redstone feeds ``` Commit updated JSON files in `src/constants/oracle/` diff --git a/src/components/NextImage/NextImage.tsx b/src/components/NextImage/NextImage.tsx deleted file mode 100644 index 032bb13c..00000000 --- a/src/components/NextImage/NextImage.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import Image from 'next/image'; - -type NextImageProps = { - src: string; - altText: string; - className?: string; -}; - -export default function NextImage({ src, altText, className }: NextImageProps) { - return ( - {altText} - ); -} diff --git a/src/components/common/index.ts b/src/components/common/index.ts deleted file mode 100644 index 719afc52..00000000 --- a/src/components/common/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './TransactionIdentity'; -export * from './AccountIdentity'; -export * from './AccountActionsPopover'; diff --git a/src/components/index.ts b/src/components/index.ts deleted file mode 100644 index b3900790..00000000 --- a/src/components/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -export { SupplyModalV2 } from './SupplyModalV2'; -export { SupplyModalContent } from './SupplyModalContent'; -export { WithdrawModalContent } from './WithdrawModalContent'; -export { BorrowModal } from './BorrowModal'; diff --git a/src/components/layout/header/AccountDropdown.tsx b/src/components/layout/header/AccountDropdown.tsx index 29ef77c3..29ec3d02 100644 --- a/src/components/layout/header/AccountDropdown.tsx +++ b/src/components/layout/header/AccountDropdown.tsx @@ -7,7 +7,7 @@ import { clsx } from 'clsx'; import { useConnection, useDisconnect } from 'wagmi'; import { useAppKit } from '@reown/appkit/react'; import { Avatar } from '@/components/Avatar/Avatar'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; +import { AccountIdentity } from '@/components/shared/account-identity'; import { useStyledToast } from '@/hooks/useStyledToast'; import { getExplorerURL } from '@/utils/external'; diff --git a/src/components/providers/ClientProviders.tsx b/src/components/providers/ClientProviders.tsx index a232a40f..b982aea3 100644 --- a/src/components/providers/ClientProviders.tsx +++ b/src/components/providers/ClientProviders.tsx @@ -6,7 +6,7 @@ import { LiquidationsProvider } from '@/contexts/LiquidationsContext'; import { MarketsProvider } from '@/contexts/MarketsContext'; import { MerklCampaignsProvider } from '@/contexts/MerklCampaignsContext'; import { OracleDataProvider } from '@/contexts/OracleDataContext'; -import { OnboardingProvider } from 'app/positions/components/onboarding/OnboardingContext'; +import { OnboardingProvider } from '@/features/positions/components/onboarding/onboarding-context'; import { TokenProvider } from './TokenProvider'; type ClientProvidersProps = { diff --git a/src/components/common/AccountActionsPopover.tsx b/src/components/shared/account-actions-popover.tsx similarity index 100% rename from src/components/common/AccountActionsPopover.tsx rename to src/components/shared/account-actions-popover.tsx diff --git a/src/components/common/AccountIdentity.tsx b/src/components/shared/account-identity.tsx similarity index 98% rename from src/components/common/AccountIdentity.tsx rename to src/components/shared/account-identity.tsx index 036cc36f..e25906e4 100644 --- a/src/components/common/AccountIdentity.tsx +++ b/src/components/shared/account-identity.tsx @@ -8,8 +8,8 @@ import { FaCircle } from 'react-icons/fa'; import { LuExternalLink, LuCopy } from 'react-icons/lu'; import { useConnection, useEnsName } from 'wagmi'; import { Avatar } from '@/components/Avatar/Avatar'; -import { AccountActionsPopover } from '@/components/common/AccountActionsPopover'; -import { Name } from '@/components/common/Name'; +import { AccountActionsPopover } from '@/components/shared/account-actions-popover'; +import { Name } from '@/components/shared/name'; import { useAddressLabel } from '@/hooks/useAddressLabel'; import { useStyledToast } from '@/hooks/useStyledToast'; import { getExplorerURL } from '@/utils/external'; diff --git a/src/components/AgentIcon.tsx b/src/components/shared/agent-icon.tsx similarity index 97% rename from src/components/AgentIcon.tsx rename to src/components/shared/agent-icon.tsx index e7116bf1..4ad667be 100644 --- a/src/components/AgentIcon.tsx +++ b/src/components/shared/agent-icon.tsx @@ -3,7 +3,7 @@ import Image from 'next/image'; import { HiQuestionMarkCircle } from 'react-icons/hi'; import type { Address } from 'viem'; import { findAgent } from '@/utils/monarch-agent'; -import { TooltipContent } from './TooltipContent'; +import { TooltipContent } from './tooltip-content'; type AgentIconProps = { address: Address; diff --git a/src/components/common/AllocatorCard.tsx b/src/components/shared/allocator-card.tsx similarity index 97% rename from src/components/common/AllocatorCard.tsx rename to src/components/shared/allocator-card.tsx index beece32f..e41add68 100644 --- a/src/components/common/AllocatorCard.tsx +++ b/src/components/shared/allocator-card.tsx @@ -1,5 +1,5 @@ import type { Address } from 'viem'; -import { AccountIdentity } from './AccountIdentity'; +import { AccountIdentity } from './account-identity'; type AllocatorCardProps = { name: string; diff --git a/src/components/common/DatePicker.tsx b/src/components/shared/date-picker.tsx similarity index 100% rename from src/components/common/DatePicker.tsx rename to src/components/shared/date-picker.tsx diff --git a/src/components/common/LTVWarning.tsx b/src/components/shared/ltv-warning.tsx similarity index 100% rename from src/components/common/LTVWarning.tsx rename to src/components/shared/ltv-warning.tsx diff --git a/src/components/common/Name.tsx b/src/components/shared/name.tsx similarity index 100% rename from src/components/common/Name.tsx rename to src/components/shared/name.tsx diff --git a/src/components/common/NetworkIcon.tsx b/src/components/shared/network-icon.tsx similarity index 100% rename from src/components/common/NetworkIcon.tsx rename to src/components/shared/network-icon.tsx diff --git a/src/components/common/RateFormatted.tsx b/src/components/shared/rate-formatted.tsx similarity index 100% rename from src/components/common/RateFormatted.tsx rename to src/components/shared/rate-formatted.tsx diff --git a/src/components/common/TablePagination.tsx b/src/components/shared/table-pagination.tsx similarity index 99% rename from src/components/common/TablePagination.tsx rename to src/components/shared/table-pagination.tsx index c72f4962..d9548e41 100644 --- a/src/components/common/TablePagination.tsx +++ b/src/components/shared/table-pagination.tsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { Input, Popover, PopoverTrigger, PopoverContent, Tooltip } from '@heroui/react'; import { ChevronLeftIcon, ChevronRightIcon, MagnifyingGlassIcon } from '@radix-ui/react-icons'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { Button } from '@/components/ui/button'; import { cn } from '@/lib/utils'; diff --git a/src/components/TokenIcon.tsx b/src/components/shared/token-icon.tsx similarity index 97% rename from src/components/TokenIcon.tsx rename to src/components/shared/token-icon.tsx index 3a1bfdc4..fde67ac5 100644 --- a/src/components/TokenIcon.tsx +++ b/src/components/shared/token-icon.tsx @@ -3,7 +3,7 @@ import { Tooltip } from '@heroui/react'; import Image from 'next/image'; import { FiExternalLink } from 'react-icons/fi'; import { useTokens } from '@/components/providers/TokenProvider'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { getExplorerUrl } from '@/utils/networks'; type TokenIconProps = { diff --git a/src/components/TooltipContent.tsx b/src/components/shared/tooltip-content.tsx similarity index 100% rename from src/components/TooltipContent.tsx rename to src/components/shared/tooltip-content.tsx diff --git a/src/components/common/TransactionIdentity.tsx b/src/components/shared/transaction-identity.tsx similarity index 100% rename from src/components/common/TransactionIdentity.tsx rename to src/components/shared/transaction-identity.tsx diff --git a/src/components/TxHashDisplay.tsx b/src/components/shared/tx-hash-display.tsx similarity index 100% rename from src/components/TxHashDisplay.tsx rename to src/components/shared/tx-hash-display.tsx diff --git a/src/components/Status/EmptyScreen.tsx b/src/components/status/empty-screen.tsx similarity index 100% rename from src/components/Status/EmptyScreen.tsx rename to src/components/status/empty-screen.tsx diff --git a/src/components/Status/LoadingScreen.tsx b/src/components/status/loading-screen.tsx similarity index 100% rename from src/components/Status/LoadingScreen.tsx rename to src/components/status/loading-screen.tsx diff --git a/src/components/ui/ExecuteTransactionButton.tsx b/src/components/ui/ExecuteTransactionButton.tsx index 99fc1d84..5aafeabd 100644 --- a/src/components/ui/ExecuteTransactionButton.tsx +++ b/src/components/ui/ExecuteTransactionButton.tsx @@ -2,7 +2,7 @@ import { useCallback, useState } from 'react'; import { useAppKit } from '@reown/appkit/react'; import { useConnection } from 'wagmi'; import { Button, type ButtonProps } from '@/components/ui/button'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useMarketNetwork } from '@/hooks/useMarketNetwork'; import { getNetworkName } from '@/utils/networks'; diff --git a/src/components/common/Badge.tsx b/src/components/ui/badge.tsx similarity index 100% rename from src/components/common/Badge.tsx rename to src/components/ui/badge.tsx diff --git a/src/components/ButtonGroup.tsx b/src/components/ui/button-group.tsx similarity index 100% rename from src/components/ButtonGroup.tsx rename to src/components/ui/button-group.tsx diff --git a/src/components/common/FilterComponents.tsx b/src/components/ui/filter-components.tsx similarity index 100% rename from src/components/common/FilterComponents.tsx rename to src/components/ui/filter-components.tsx diff --git a/src/components/common/IconSwitch.tsx b/src/components/ui/icon-switch.tsx similarity index 100% rename from src/components/common/IconSwitch.tsx rename to src/components/ui/icon-switch.tsx diff --git a/src/components/common/Spinner.tsx b/src/components/ui/spinner.tsx similarity index 100% rename from src/components/common/Spinner.tsx rename to src/components/ui/spinner.tsx diff --git a/src/components/common/StyledToast.tsx b/src/components/ui/styled-toast.tsx similarity index 89% rename from src/components/common/StyledToast.tsx rename to src/components/ui/styled-toast.tsx index 6dbf5cc1..de906dcd 100644 --- a/src/components/common/StyledToast.tsx +++ b/src/components/ui/styled-toast.tsx @@ -1,4 +1,4 @@ -import { TxHashDisplay } from '../TxHashDisplay'; +import { TxHashDisplay } from '@/components/shared/tx-hash-display'; export function StyledToast({ title, message }: { title: string; message?: string }) { return ( diff --git a/app/admin/stats/components/AssetMetricsTable.tsx b/src/features/admin/components/asset-metrics-table.tsx similarity index 99% rename from app/admin/stats/components/AssetMetricsTable.tsx rename to src/features/admin/components/asset-metrics-table.tsx index 0225ed05..3802c4a9 100644 --- a/app/admin/stats/components/AssetMetricsTable.tsx +++ b/src/features/admin/components/asset-metrics-table.tsx @@ -1,7 +1,7 @@ import { useState, useMemo } from 'react'; import { FiChevronUp, FiChevronDown } from 'react-icons/fi'; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import { formatReadable } from '@/utils/balance'; import { calculateHumanReadableVolumes } from '@/utils/statsDataProcessing'; import type { AssetVolumeData } from '@/utils/statsUtils'; diff --git a/app/admin/stats/components/StatsOverviewCards.tsx b/src/features/admin/components/stats-overview-cards.tsx similarity index 100% rename from app/admin/stats/components/StatsOverviewCards.tsx rename to src/features/admin/components/stats-overview-cards.tsx diff --git a/app/admin/stats/components/TransactionTableBody.tsx b/src/features/admin/components/transaction-table-body.tsx similarity index 94% rename from app/admin/stats/components/TransactionTableBody.tsx rename to src/features/admin/components/transaction-table-body.tsx index 63ee7be9..1a6eb252 100644 --- a/app/admin/stats/components/TransactionTableBody.tsx +++ b/src/features/admin/components/transaction-table-body.tsx @@ -1,11 +1,11 @@ import Link from 'next/link'; import { formatUnits } from 'viem'; import { TableBody, TableRow, TableCell } from '@/components/ui/table'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; -import { TransactionIdentity } from '@/components/common/TransactionIdentity'; -import { MarketIdBadge } from '@/components/MarketIdBadge'; -import { MarketIdentity, MarketIdentityFocus, MarketIdentityMode } from '@/components/MarketIdentity'; -import { TokenIcon } from '@/components/TokenIcon'; +import { AccountIdentity } from '@/components/shared/account-identity'; +import { TransactionIdentity } from '@/components/shared/transaction-identity'; +import { MarketIdBadge } from '@/features/markets/components/market-id-badge'; +import { MarketIdentity, MarketIdentityFocus, MarketIdentityMode } from '@/features/markets/components/market-identity'; +import { TokenIcon } from '@/components/shared/token-icon'; import { formatReadable } from '@/utils/balance'; import type { SupportedNetworks } from '@/utils/networks'; import { getTruncatedAssetName } from '@/utils/oracle'; diff --git a/app/admin/stats/components/TransactionsTable.tsx b/src/features/admin/components/transactions-table.tsx similarity index 98% rename from app/admin/stats/components/TransactionsTable.tsx rename to src/features/admin/components/transactions-table.tsx index 8af052d9..bcb89278 100644 --- a/app/admin/stats/components/TransactionsTable.tsx +++ b/src/features/admin/components/transactions-table.tsx @@ -1,12 +1,12 @@ import { useState, useMemo } from 'react'; import { FiChevronUp, FiChevronDown } from 'react-icons/fi'; import { Table, TableHeader, TableRow, TableHead } from '@/components/ui/table'; -import { TablePagination } from '@/components/common/TablePagination'; +import { TablePagination } from '@/components/shared/table-pagination'; import type { SupportedNetworks } from '@/utils/networks'; import type { Transaction } from '@/utils/statsUtils'; import { findToken } from '@/utils/tokens'; import type { Market } from '@/utils/types'; -import { TransactionTableBody } from './TransactionTableBody'; +import { TransactionTableBody } from './transaction-table-body'; type TransactionsTableProps = { data: Transaction[]; diff --git a/app/autovault/components/deployment/DeploymentContext.tsx b/src/features/autovault/components/deployment/deployment-context.tsx similarity index 100% rename from app/autovault/components/deployment/DeploymentContext.tsx rename to src/features/autovault/components/deployment/deployment-context.tsx diff --git a/app/autovault/components/deployment/DeploymentModal.tsx b/src/features/autovault/components/deployment/deployment-modal.tsx similarity index 96% rename from app/autovault/components/deployment/DeploymentModal.tsx rename to src/features/autovault/components/deployment/deployment-modal.tsx index 5bc1169c..843ff54c 100644 --- a/app/autovault/components/deployment/DeploymentModal.tsx +++ b/src/features/autovault/components/deployment/deployment-modal.tsx @@ -9,8 +9,8 @@ import { useMarkets } from '@/contexts/MarketsContext'; import type { UserVaultV2 } from '@/data-sources/subgraph/v2-vaults'; import { useUserBalances } from '@/hooks/useUserBalances'; import { getNetworkName, ALL_SUPPORTED_NETWORKS, isAgentAvailable, type SupportedNetworks } from '@/utils/networks'; -import { DeploymentProvider, useDeployment } from './DeploymentContext'; -import { TokenSelection } from './TokenSelection'; +import { DeploymentProvider, useDeployment } from '@/features/autovault/components/deployment/deployment-context'; +import { TokenSelection } from './token-selection'; const VAULT_SUPPORTED_NETWORKS: SupportedNetworks[] = ALL_SUPPORTED_NETWORKS.filter((network) => isAgentAvailable(network)); diff --git a/app/autovault/components/deployment/TokenSelection.tsx b/src/features/autovault/components/deployment/token-selection.tsx similarity index 96% rename from app/autovault/components/deployment/TokenSelection.tsx rename to src/features/autovault/components/deployment/token-selection.tsx index 01214089..63885b3e 100644 --- a/app/autovault/components/deployment/TokenSelection.tsx +++ b/src/features/autovault/components/deployment/token-selection.tsx @@ -3,16 +3,16 @@ import { Tooltip } from '@heroui/react'; import Image from 'next/image'; import { LuVault } from 'react-icons/lu'; import { type Address, formatUnits } from 'viem'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useTokens } from '@/components/providers/TokenProvider'; -import { TokenIcon } from '@/components/TokenIcon'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import type { UserVaultV2 } from '@/data-sources/subgraph/v2-vaults'; import type { TokenBalance } from '@/hooks/useUserBalances'; import { formatReadable } from '@/utils/balance'; import { getNetworkImg, getNetworkName, type SupportedNetworks } from '@/utils/networks'; import type { Market } from '@/utils/types'; -import { useDeployment, type SelectedToken } from './DeploymentContext'; +import { useDeployment, type SelectedToken } from '@/features/autovault/components/deployment/deployment-context'; type TokenNetwork = { symbol: string; diff --git a/src/components/vaults/TrustedVaultBadges.tsx b/src/features/autovault/components/trusted-vault-badges.tsx similarity index 94% rename from src/components/vaults/TrustedVaultBadges.tsx rename to src/features/autovault/components/trusted-vault-badges.tsx index 525c2d6a..022d14d1 100644 --- a/src/components/vaults/TrustedVaultBadges.tsx +++ b/src/features/autovault/components/trusted-vault-badges.tsx @@ -1,8 +1,8 @@ 'use client'; import { Tooltip } from '@heroui/react'; -import { TooltipContent } from '@/components/TooltipContent'; -import { VaultIdentity } from '@/components/vaults/VaultIdentity'; +import { TooltipContent } from '@/components/shared/tooltip-content'; +import { VaultIdentity } from '@/features/autovault/components/vault-identity'; import type { TrustedVault } from '@/constants/vaults/known_vaults'; type MoreVaultsBadgeProps = { diff --git a/app/autovault/[chainId]/[vaultAddress]/components/allocations/AllocationPieChart.tsx b/src/features/autovault/components/vault-detail/allocations/allocations/allocation-pie-chart.tsx similarity index 100% rename from app/autovault/[chainId]/[vaultAddress]/components/allocations/AllocationPieChart.tsx rename to src/features/autovault/components/vault-detail/allocations/allocations/allocation-pie-chart.tsx diff --git a/app/autovault/[chainId]/[vaultAddress]/components/allocations/CollateralView.tsx b/src/features/autovault/components/vault-detail/allocations/allocations/collateral-view.tsx similarity index 96% rename from app/autovault/[chainId]/[vaultAddress]/components/allocations/CollateralView.tsx rename to src/features/autovault/components/vault-detail/allocations/allocations/collateral-view.tsx index 803df043..ed85918b 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/allocations/CollateralView.tsx +++ b/src/features/autovault/components/vault-detail/allocations/allocations/collateral-view.tsx @@ -1,9 +1,9 @@ import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import type { CollateralAllocation } from '@/types/vaultAllocations'; import type { SupportedNetworks } from '@/utils/networks'; import { formatAllocationAmount, calculateAllocationPercent } from '@/utils/vaultAllocation'; -import { AllocationPieChart } from './AllocationPieChart'; +import { AllocationPieChart } from './allocation-pie-chart'; type CollateralViewProps = { allocations: CollateralAllocation[]; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/allocations/MarketView.tsx b/src/features/autovault/components/vault-detail/allocations/allocations/market-view.tsx similarity index 96% rename from app/autovault/[chainId]/[vaultAddress]/components/allocations/MarketView.tsx rename to src/features/autovault/components/vault-detail/allocations/allocations/market-view.tsx index 3cf86c33..69c63d03 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/allocations/MarketView.tsx +++ b/src/features/autovault/components/vault-detail/allocations/allocations/market-view.tsx @@ -1,5 +1,5 @@ import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'; -import { MarketIdentity, MarketIdentityFocus } from '@/components/MarketIdentity'; +import { MarketIdentity, MarketIdentityFocus } from '@/features/markets/components/market-identity'; import { useMarkets } from '@/hooks/useMarkets'; import { useRateLabel } from '@/hooks/useRateLabel'; import type { MarketAllocation } from '@/types/vaultAllocations'; @@ -7,7 +7,7 @@ import { formatBalance, formatReadable } from '@/utils/balance'; import type { SupportedNetworks } from '@/utils/networks'; import { convertApyToApr } from '@/utils/rateMath'; import { formatAllocationAmount, calculateAllocationPercent } from '@/utils/vaultAllocation'; -import { AllocationPieChart } from './AllocationPieChart'; +import { AllocationPieChart } from './allocation-pie-chart'; type MarketViewProps = { allocations: MarketAllocation[]; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/DepositToVaultModal.tsx b/src/features/autovault/components/vault-detail/modals/deposit-to-vault-modal.tsx similarity index 96% rename from app/autovault/[chainId]/[vaultAddress]/components/DepositToVaultModal.tsx rename to src/features/autovault/components/vault-detail/modals/deposit-to-vault-modal.tsx index 79f8bf75..88bda90d 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/DepositToVaultModal.tsx +++ b/src/features/autovault/components/vault-detail/modals/deposit-to-vault-modal.tsx @@ -5,11 +5,11 @@ import type { Address } from 'viem'; import { Modal, ModalBody, ModalHeader } from '@/components/common/Modal'; import Input from '@/components/Input/Input'; import { ExecuteTransactionButton } from '@/components/ui/ExecuteTransactionButton'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useLocalStorage } from '@/hooks/useLocalStorage'; import { useVaultV2Deposit } from '@/hooks/useVaultV2Deposit'; import { formatBalance } from '@/utils/balance'; -import { VaultDepositProcessModal } from './VaultDepositProcessModal'; +import { VaultDepositProcessModal } from './vault-deposit-process-modal'; type DepositToVaultModalProps = { vaultAddress: Address; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/VaultDepositProcessModal.tsx b/src/features/autovault/components/vault-detail/modals/vault-deposit-process-modal.tsx similarity index 100% rename from app/autovault/[chainId]/[vaultAddress]/components/VaultDepositProcessModal.tsx rename to src/features/autovault/components/vault-detail/modals/vault-deposit-process-modal.tsx diff --git a/app/autovault/[chainId]/[vaultAddress]/components/VaultInitializationModal.tsx b/src/features/autovault/components/vault-detail/modals/vault-initialization-modal.tsx similarity index 98% rename from app/autovault/[chainId]/[vaultAddress]/components/VaultInitializationModal.tsx rename to src/features/autovault/components/vault-detail/modals/vault-initialization-modal.tsx index e65fe302..d5196bf2 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/VaultInitializationModal.tsx +++ b/src/features/autovault/components/vault-detail/modals/vault-initialization-modal.tsx @@ -4,10 +4,10 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { FiZap } from 'react-icons/fi'; import { type Address, zeroAddress } from 'viem'; import { Button } from '@/components/ui/button'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; -import { AllocatorCard } from '@/components/common/AllocatorCard'; +import { AccountIdentity } from '@/components/shared/account-identity'; +import { AllocatorCard } from '@/components/shared/allocator-card'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '@/components/common/Modal'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useDeployMorphoMarketV1Adapter } from '@/hooks/useDeployMorphoMarketV1Adapter'; import { useVaultV2 } from '@/hooks/useVaultV2'; import { v2AgentsBase } from '@/utils/monarch-agent'; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/VaultSettingsModal.tsx b/src/features/autovault/components/vault-detail/modals/vault-settings-modal.tsx similarity index 99% rename from app/autovault/[chainId]/[vaultAddress]/components/VaultSettingsModal.tsx rename to src/features/autovault/components/vault-detail/modals/vault-settings-modal.tsx index 1ba00ae8..694069bf 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/VaultSettingsModal.tsx +++ b/src/features/autovault/components/vault-detail/modals/vault-settings-modal.tsx @@ -8,7 +8,7 @@ import { Modal, ModalBody, ModalHeader } from '@/components/common/Modal'; import type { VaultV2Cap } from '@/data-sources/morpho-api/v2-vaults'; import type { CapData } from '@/hooks/useVaultV2Data'; import type { SupportedNetworks } from '@/utils/networks'; -import { GeneralTab, AgentsTab, CapsTab, type SettingsTab } from './settings'; +import { GeneralTab, AgentsTab, CapsTab, type SettingsTab } from '../settings'; const TABS: { id: SettingsTab; label: string }[] = [ { id: 'general', label: 'General' }, diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/AddMarketCapModal.tsx b/src/features/autovault/components/vault-detail/settings/AddMarketCapModal.tsx similarity index 91% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/AddMarketCapModal.tsx rename to src/features/autovault/components/vault-detail/settings/AddMarketCapModal.tsx index fd5d15b5..8adac889 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/AddMarketCapModal.tsx +++ b/src/features/autovault/components/vault-detail/settings/AddMarketCapModal.tsx @@ -2,7 +2,7 @@ import type { Address } from 'viem'; -import { MarketSelectionModal } from '@/components/common/MarketSelectionModal'; +import { MarketSelectionModal } from '@/features/markets/components/market-selection-modal'; import type { SupportedNetworks } from '@/utils/networks'; import type { Market } from '@/utils/types'; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/AgentListItem.tsx b/src/features/autovault/components/vault-detail/settings/AgentListItem.tsx similarity index 81% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/AgentListItem.tsx rename to src/features/autovault/components/vault-detail/settings/AgentListItem.tsx index 54d0953a..2e13993e 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/AgentListItem.tsx +++ b/src/features/autovault/components/vault-detail/settings/AgentListItem.tsx @@ -1,6 +1,6 @@ import type { Address } from 'viem'; -import { AgentIcon } from '@/components/AgentIcon'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; +import { AgentIcon } from '@/components/shared/agent-icon'; +import { AccountIdentity } from '@/components/shared/account-identity'; import { findAgent } from '@/utils/monarch-agent'; type AgentListItemProps = { diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/AgentsTab.tsx b/src/features/autovault/components/vault-detail/settings/AgentsTab.tsx similarity index 98% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/AgentsTab.tsx rename to src/features/autovault/components/vault-detail/settings/AgentsTab.tsx index 7db2058e..a23ed95e 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/AgentsTab.tsx +++ b/src/features/autovault/components/vault-detail/settings/AgentsTab.tsx @@ -1,8 +1,8 @@ import { useCallback, useState } from 'react'; import type { Address } from 'viem'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; +import { AccountIdentity } from '@/components/shared/account-identity'; import { Button } from '@/components/ui/button'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useMarketNetwork } from '@/hooks/useMarketNetwork'; import { v2AgentsBase } from '@/utils/monarch-agent'; import { AgentListItem } from './AgentListItem'; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/CapsTab.tsx b/src/features/autovault/components/vault-detail/settings/CapsTab.tsx similarity index 100% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/CapsTab.tsx rename to src/features/autovault/components/vault-detail/settings/CapsTab.tsx diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/CurrentCaps.tsx b/src/features/autovault/components/vault-detail/settings/CurrentCaps.tsx similarity index 98% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/CurrentCaps.tsx rename to src/features/autovault/components/vault-detail/settings/CurrentCaps.tsx index 1acc1294..e76f9f60 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/CurrentCaps.tsx +++ b/src/features/autovault/components/vault-detail/settings/CurrentCaps.tsx @@ -2,9 +2,9 @@ import { useMemo, useState } from 'react'; import { ChevronDownIcon, ChevronUpIcon } from '@radix-ui/react-icons'; import { type Address, maxUint128 } from 'viem'; import { Button } from '@/components/ui/button'; -import { MarketDetailsBlock } from '@/components/common/MarketDetailsBlock'; -import { Spinner } from '@/components/common/Spinner'; -import { TokenIcon } from '@/components/TokenIcon'; +import { MarketDetailsBlock } from '@/features/markets/components/market-details-block'; +import { Spinner } from '@/components/ui/spinner'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMarkets } from '@/hooks/useMarkets'; import type { CapData } from '@/hooks/useVaultV2Data'; import { parseCapIdParams } from '@/utils/morpho'; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/EditCaps.tsx b/src/features/autovault/components/vault-detail/settings/EditCaps.tsx similarity index 99% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/EditCaps.tsx rename to src/features/autovault/components/vault-detail/settings/EditCaps.tsx index cec8a9ca..08a6c37f 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/EditCaps.tsx +++ b/src/features/autovault/components/vault-detail/settings/EditCaps.tsx @@ -1,11 +1,11 @@ import { useCallback, useEffect, useMemo, useState } from 'react'; import { PlusIcon } from '@radix-ui/react-icons'; import { type Address, parseUnits, maxUint128 } from 'viem'; -import { Badge } from '@/components/common/Badge'; +import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useTokens } from '@/components/providers/TokenProvider'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import type { VaultV2Cap } from '@/data-sources/morpho-api/v2-vaults'; import { useMarketNetwork } from '@/hooks/useMarketNetwork'; import { useMarkets } from '@/hooks/useMarkets'; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/GeneralTab.tsx b/src/features/autovault/components/vault-detail/settings/GeneralTab.tsx similarity index 98% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/GeneralTab.tsx rename to src/features/autovault/components/vault-detail/settings/GeneralTab.tsx index 62e83fc0..143c65ab 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/GeneralTab.tsx +++ b/src/features/autovault/components/vault-detail/settings/GeneralTab.tsx @@ -1,7 +1,7 @@ import { useCallback, useEffect, useId, useMemo, useState } from 'react'; import { Input } from '@heroui/react'; import { Button } from '@/components/ui/button'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useMarketNetwork } from '@/hooks/useMarketNetwork'; import type { GeneralTabProps } from './types'; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/MarketCapsTable.tsx b/src/features/autovault/components/vault-detail/settings/MarketCapsTable.tsx similarity index 97% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/MarketCapsTable.tsx rename to src/features/autovault/components/vault-detail/settings/MarketCapsTable.tsx index 2041be01..c2cef715 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/MarketCapsTable.tsx +++ b/src/features/autovault/components/vault-detail/settings/MarketCapsTable.tsx @@ -1,7 +1,7 @@ import { maxUint128 } from 'viem'; import type { Address } from 'viem'; -import { Badge } from '@/components/common/Badge'; -import { MarketIdentity, MarketIdentityFocus } from '@/components/MarketIdentity'; +import { Badge } from '@/components/ui/badge'; +import { MarketIdentity, MarketIdentityFocus } from '@/features/markets/components/market-identity'; import { findToken } from '@/utils/tokens'; import type { Market } from '@/utils/types'; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/Tooltips.tsx b/src/features/autovault/components/vault-detail/settings/Tooltips.tsx similarity index 94% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/Tooltips.tsx rename to src/features/autovault/components/vault-detail/settings/Tooltips.tsx index 8161bc3c..697cb241 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/settings/Tooltips.tsx +++ b/src/features/autovault/components/vault-detail/settings/Tooltips.tsx @@ -1,6 +1,6 @@ import { Tooltip } from '@heroui/react'; import { InfoCircledIcon } from '@radix-ui/react-icons'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TooltipContent } from '@/components/shared/tooltip-content'; export function CollateralCapTooltip() { return ( diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/index.ts b/src/features/autovault/components/vault-detail/settings/index.ts similarity index 100% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/index.ts rename to src/features/autovault/components/vault-detail/settings/index.ts diff --git a/app/autovault/[chainId]/[vaultAddress]/components/settings/types.ts b/src/features/autovault/components/vault-detail/settings/types.ts similarity index 100% rename from app/autovault/[chainId]/[vaultAddress]/components/settings/types.ts rename to src/features/autovault/components/vault-detail/settings/types.ts diff --git a/app/autovault/[chainId]/[vaultAddress]/components/TotalSupplyCard.tsx b/src/features/autovault/components/vault-detail/total-supply-card.tsx similarity index 96% rename from app/autovault/[chainId]/[vaultAddress]/components/TotalSupplyCard.tsx rename to src/features/autovault/components/vault-detail/total-supply-card.tsx index 554957f6..4d2121cf 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/TotalSupplyCard.tsx +++ b/src/features/autovault/components/vault-detail/total-supply-card.tsx @@ -3,9 +3,9 @@ import { Card, CardBody, CardHeader, Tooltip } from '@heroui/react'; import { PlusIcon } from '@radix-ui/react-icons'; import { TbTrendingUp } from 'react-icons/tb'; import type { Address } from 'viem'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import { formatBalance } from '@/utils/balance'; -import { DepositToVaultModal } from './DepositToVaultModal'; +import { DepositToVaultModal } from './modals/deposit-to-vault-modal'; type VaultTotalAssetsCardProps = { totalAssets?: bigint; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/VaultAllocatorCard.tsx b/src/features/autovault/components/vault-detail/vault-allocator-card.tsx similarity index 93% rename from app/autovault/[chainId]/[vaultAddress]/components/VaultAllocatorCard.tsx rename to src/features/autovault/components/vault-detail/vault-allocator-card.tsx index ecd07c99..a2ee6313 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/VaultAllocatorCard.tsx +++ b/src/features/autovault/components/vault-detail/vault-allocator-card.tsx @@ -3,9 +3,9 @@ import { GearIcon } from '@radix-ui/react-icons'; import { BsQuestionCircle } from 'react-icons/bs'; import { GrStatusGood } from 'react-icons/gr'; import type { Address } from 'viem'; -import { AgentIcon } from '@/components/AgentIcon'; -import { Spinner } from '@/components/common/Spinner'; -import { TooltipContent } from '@/components/TooltipContent'; +import { AgentIcon } from '@/components/shared/agent-icon'; +import { Spinner } from '@/components/ui/spinner'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { findAgent } from '@/utils/monarch-agent'; type VaultAllocatorCardProps = { diff --git a/app/autovault/[chainId]/[vaultAddress]/components/VaultCollateralsCard.tsx b/src/features/autovault/components/vault-detail/vault-collaterals-card.tsx similarity index 95% rename from app/autovault/[chainId]/[vaultAddress]/components/VaultCollateralsCard.tsx rename to src/features/autovault/components/vault-detail/vault-collaterals-card.tsx index a13e1a8d..e502196d 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/VaultCollateralsCard.tsx +++ b/src/features/autovault/components/vault-detail/vault-collaterals-card.tsx @@ -1,8 +1,8 @@ import { Card, CardBody, CardHeader } from '@heroui/react'; import { GearIcon } from '@radix-ui/react-icons'; import type { Address } from 'viem'; -import { Spinner } from '@/components/common/Spinner'; -import { TokenIcon } from '@/components/TokenIcon'; +import { Spinner } from '@/components/ui/spinner'; +import { TokenIcon } from '@/components/shared/token-icon'; import type { VaultV2Cap } from '@/data-sources/morpho-api/v2-vaults'; import { parseCapIdParams } from '@/utils/morpho'; import type { SupportedNetworks } from '@/utils/networks'; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/VaultMarketAllocations.tsx b/src/features/autovault/components/vault-detail/vault-market-allocations.tsx similarity index 95% rename from app/autovault/[chainId]/[vaultAddress]/components/VaultMarketAllocations.tsx rename to src/features/autovault/components/vault-detail/vault-market-allocations.tsx index 1bebc763..4f828648 100644 --- a/app/autovault/[chainId]/[vaultAddress]/components/VaultMarketAllocations.tsx +++ b/src/features/autovault/components/vault-detail/vault-market-allocations.tsx @@ -2,11 +2,11 @@ import { useMemo, useState } from 'react'; import { Switch } from '@heroui/react'; import { HiOutlineCube } from 'react-icons/hi'; import { MdOutlineAccountBalance } from 'react-icons/md'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import type { CollateralAllocation, MarketAllocation } from '@/types/vaultAllocations'; import type { SupportedNetworks } from '@/utils/networks'; -import { CollateralView } from './allocations/CollateralView'; -import { MarketView } from './allocations/MarketView'; +import { CollateralView } from './allocations/allocations/collateral-view'; +import { MarketView } from './allocations/allocations/market-view'; type VaultMarketAllocationsProps = { totalAssets?: bigint; diff --git a/app/autovault/[chainId]/[vaultAddress]/components/VaultSummaryMetrics.tsx b/src/features/autovault/components/vault-detail/vault-summary-metrics.tsx similarity index 100% rename from app/autovault/[chainId]/[vaultAddress]/components/VaultSummaryMetrics.tsx rename to src/features/autovault/components/vault-detail/vault-summary-metrics.tsx diff --git a/src/components/vaults/VaultIcon.tsx b/src/features/autovault/components/vault-icon.tsx similarity index 100% rename from src/components/vaults/VaultIcon.tsx rename to src/features/autovault/components/vault-icon.tsx diff --git a/src/components/vaults/VaultIdentity.tsx b/src/features/autovault/components/vault-identity.tsx similarity index 96% rename from src/components/vaults/VaultIdentity.tsx rename to src/features/autovault/components/vault-identity.tsx index 34109b24..9ef00b2d 100644 --- a/src/components/vaults/VaultIdentity.tsx +++ b/src/features/autovault/components/vault-identity.tsx @@ -4,11 +4,11 @@ import { useMemo, type ReactNode } from 'react'; import { Tooltip } from '@heroui/react'; import Link from 'next/link'; import { FiExternalLink } from 'react-icons/fi'; -import { TokenIcon } from '@/components/TokenIcon'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import type { VaultCurator } from '@/constants/vaults/known_vaults'; import { getVaultURL } from '@/utils/external'; -import { VaultIcon } from './VaultIcon'; +import { VaultIcon } from './vault-icon'; type VaultIdentityVariant = 'chip' | 'inline' | 'icon'; diff --git a/app/autovault/components/VaultListV2.tsx b/src/features/autovault/components/vault-list.tsx similarity index 98% rename from app/autovault/components/VaultListV2.tsx rename to src/features/autovault/components/vault-list.tsx index f615a745..b30c547f 100644 --- a/app/autovault/components/VaultListV2.tsx +++ b/src/features/autovault/components/vault-list.tsx @@ -3,9 +3,9 @@ import Link from 'next/link'; import { formatUnits } from 'viem'; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'; import { Button } from '@/components/ui/button'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useTokens } from '@/components/providers/TokenProvider'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import type { UserVaultV2 } from '@/data-sources/subgraph/v2-vaults'; import { useMarkets } from '@/hooks/useMarkets'; import { useRateLabel } from '@/hooks/useRateLabel'; diff --git a/app/autovault/components/AutovaultContent.tsx b/src/features/autovault/vault-list-view.tsx similarity index 94% rename from app/autovault/components/AutovaultContent.tsx rename to src/features/autovault/vault-list-view.tsx index 877fa4e6..123b5998 100644 --- a/app/autovault/components/AutovaultContent.tsx +++ b/src/features/autovault/vault-list-view.tsx @@ -7,10 +7,10 @@ import { Button } from '@/components/ui/button'; import AccountConnect from '@/components/layout/header/AccountConnect'; import Header from '@/components/layout/header/Header'; import { useUserVaultsV2 } from '@/hooks/useUserVaultsV2'; -import { DeploymentModal } from './deployment/DeploymentModal'; -import { VaultListV2 } from './VaultListV2'; +import { DeploymentModal } from './components/deployment/deployment-modal'; +import { VaultListV2 } from './components/vault-list'; -export default function AutovaultContent() { +export default function AutovaultListContent() { const { isConnected } = useConnection(); const [showDeploymentModal, setShowDeploymentModal] = useState(false); diff --git a/app/autovault/[chainId]/[vaultAddress]/content.tsx b/src/features/autovault/vault-view.tsx similarity index 93% rename from app/autovault/[chainId]/[vaultAddress]/content.tsx rename to src/features/autovault/vault-view.tsx index 24f7e9c1..1d283768 100644 --- a/app/autovault/[chainId]/[vaultAddress]/content.tsx +++ b/src/features/autovault/vault-view.tsx @@ -9,18 +9,18 @@ import { IoRefreshOutline } from 'react-icons/io5'; import type { Address } from 'viem'; import { useConnection } from 'wagmi'; import { Button } from '@/components/ui/button'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; +import { AccountIdentity } from '@/components/shared/account-identity'; import Header from '@/components/layout/header/Header'; import { useVaultPage } from '@/hooks/useVaultPage'; import { getSlicedAddress } from '@/utils/address'; import { ALL_SUPPORTED_NETWORKS, SupportedNetworks, getNetworkConfig } from '@/utils/networks'; -import { TotalSupplyCard } from './components/TotalSupplyCard'; -import { VaultAllocatorCard } from './components/VaultAllocatorCard'; -import { VaultCollateralsCard } from './components/VaultCollateralsCard'; -import { VaultInitializationModal } from './components/VaultInitializationModal'; -import { VaultMarketAllocations } from './components/VaultMarketAllocations'; -import { VaultSettingsModal } from './components/VaultSettingsModal'; -import { VaultSummaryMetrics } from './components/VaultSummaryMetrics'; +import { TotalSupplyCard } from '@/features/autovault/components/vault-detail/total-supply-card'; +import { VaultAllocatorCard } from '@/features/autovault/components/vault-detail/vault-allocator-card'; +import { VaultCollateralsCard } from '@/features/autovault/components/vault-detail/vault-collaterals-card'; +import { VaultInitializationModal } from '@/features/autovault/components/vault-detail/modals/vault-initialization-modal'; +import { VaultMarketAllocations } from '@/features/autovault/components/vault-detail/vault-market-allocations'; +import { VaultSettingsModal } from '@/features/autovault/components/vault-detail/modals/vault-settings-modal'; +import { VaultSummaryMetrics } from '@/features/autovault/components/vault-detail/vault-summary-metrics'; export default function VaultContent() { const { chainId: chainIdParam, vaultAddress } = useParams<{ diff --git a/app/history/components/HistoryTable.tsx b/src/features/history/components/history-table.tsx similarity index 98% rename from app/history/components/HistoryTable.tsx rename to src/features/history/components/history-table.tsx index 8a3c3b6e..8ae25958 100644 --- a/app/history/components/HistoryTable.tsx +++ b/src/features/history/components/history-table.tsx @@ -7,11 +7,11 @@ import moment from 'moment'; import Image from 'next/image'; import { RiRobot2Line } from 'react-icons/ri'; import { formatUnits } from 'viem'; -import { Badge } from '@/components/common/Badge'; -import { TablePagination } from '@/components/common/TablePagination'; -import { TransactionIdentity } from '@/components/common/TransactionIdentity'; -import LoadingScreen from '@/components/Status/LoadingScreen'; -import { TokenIcon } from '@/components/TokenIcon'; +import { Badge } from '@/components/ui/badge'; +import { TablePagination } from '@/components/shared/table-pagination'; +import { TransactionIdentity } from '@/components/shared/transaction-identity'; +import LoadingScreen from '@/components/status/loading-screen'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMarkets } from '@/contexts/MarketsContext'; import useUserTransactions from '@/hooks/useUserTransactions'; import { formatReadable } from '@/utils/balance'; diff --git a/app/history/components/HistoryContent.tsx b/src/features/history/history-view.tsx similarity index 93% rename from app/history/components/HistoryContent.tsx rename to src/features/history/history-view.tsx index d840e7e3..55c8e1a5 100644 --- a/app/history/components/HistoryContent.tsx +++ b/src/features/history/history-view.tsx @@ -3,7 +3,7 @@ import Header from '@/components/layout/header/Header'; import useUserPositions from '@/hooks/useUserPositions'; import { useUserRebalancerInfo } from '@/hooks/useUserRebalancerInfo'; -import { HistoryTable } from './HistoryTable'; +import { HistoryTable } from './components/history-table'; export default function HistoryContent({ account }: { account: string }) { const { data: positions } = useUserPositions(account, true); diff --git a/app/market/[chainId]/[marketid]/components/BorrowersTable.tsx b/src/features/market-detail/components/borrowers-table.tsx similarity index 95% rename from app/market/[chainId]/[marketid]/components/BorrowersTable.tsx rename to src/features/market-detail/components/borrowers-table.tsx index d170542c..d3e71848 100644 --- a/app/market/[chainId]/[marketid]/components/BorrowersTable.tsx +++ b/src/features/market-detail/components/borrowers-table.tsx @@ -5,11 +5,11 @@ import { FiFilter } from 'react-icons/fi'; import type { Address } from 'viem'; import { formatUnits } from 'viem'; import { Button } from '@/components/ui/button'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; -import { Spinner } from '@/components/common/Spinner'; -import { TablePagination } from '@/components/common/TablePagination'; -import { TokenIcon } from '@/components/TokenIcon'; -import { TooltipContent } from '@/components/TooltipContent'; +import { AccountIdentity } from '@/components/shared/account-identity'; +import { Spinner } from '@/components/ui/spinner'; +import { TablePagination } from '@/components/shared/table-pagination'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { MONARCH_PRIMARY } from '@/constants/chartColors'; import { useMarketBorrowers } from '@/hooks/useMarketBorrowers'; import { formatSimple } from '@/utils/balance'; diff --git a/app/market/[chainId]/[marketid]/components/BorrowsTable.tsx b/src/features/market-detail/components/borrows-table.tsx similarity index 93% rename from app/market/[chainId]/[marketid]/components/BorrowsTable.tsx rename to src/features/market-detail/components/borrows-table.tsx index 6ea60051..ecf8dac1 100644 --- a/app/market/[chainId]/[marketid]/components/BorrowsTable.tsx +++ b/src/features/market-detail/components/borrows-table.tsx @@ -6,13 +6,13 @@ import { FiFilter } from 'react-icons/fi'; import type { Address } from 'viem'; import { formatUnits } from 'viem'; import { Button } from '@/components/ui/button'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; -import { Badge } from '@/components/common/Badge'; -import { Spinner } from '@/components/common/Spinner'; -import { TablePagination } from '@/components/common/TablePagination'; -import { TransactionIdentity } from '@/components/common/TransactionIdentity'; -import { TokenIcon } from '@/components/TokenIcon'; -import { TooltipContent } from '@/components/TooltipContent'; +import { AccountIdentity } from '@/components/shared/account-identity'; +import { Badge } from '@/components/ui/badge'; +import { Spinner } from '@/components/ui/spinner'; +import { TablePagination } from '@/components/shared/table-pagination'; +import { TransactionIdentity } from '@/components/shared/transaction-identity'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { MONARCH_PRIMARY } from '@/constants/chartColors'; import { useMarketBorrows } from '@/hooks/useMarketBorrows'; import { formatSimple } from '@/utils/balance'; diff --git a/app/market/[chainId]/[marketid]/components/CampaignBadge.tsx b/src/features/market-detail/components/campaign-badge.tsx similarity index 93% rename from app/market/[chainId]/[marketid]/components/CampaignBadge.tsx rename to src/features/market-detail/components/campaign-badge.tsx index 781d517d..81f85d79 100644 --- a/app/market/[chainId]/[marketid]/components/CampaignBadge.tsx +++ b/src/features/market-detail/components/campaign-badge.tsx @@ -2,9 +2,9 @@ import { useState } from 'react'; import { FaGift } from 'react-icons/fa'; -import { Badge } from '@/components/common/Badge'; +import { Badge } from '@/components/ui/badge'; import { useMarketCampaigns } from '@/hooks/useMarketCampaigns'; -import { CampaignModal } from './CampaignModal'; +import { CampaignModal } from './campaign-modal'; type CampaignBadgeProps = { marketId: string; diff --git a/app/market/[chainId]/[marketid]/components/CampaignModal.tsx b/src/features/market-detail/components/campaign-modal.tsx similarity index 100% rename from app/market/[chainId]/[marketid]/components/CampaignModal.tsx rename to src/features/market-detail/components/campaign-modal.tsx diff --git a/app/market/[chainId]/[marketid]/RateChart.tsx b/src/features/market-detail/components/charts/rate-chart.tsx similarity index 99% rename from app/market/[chainId]/[marketid]/RateChart.tsx rename to src/features/market-detail/components/charts/rate-chart.tsx index 9bcd2ec5..5295adf1 100644 --- a/app/market/[chainId]/[marketid]/RateChart.tsx +++ b/src/features/market-detail/components/charts/rate-chart.tsx @@ -4,8 +4,8 @@ import { useState, useMemo } from 'react'; import { Card, CardHeader, CardBody } from '@heroui/react'; import { Progress } from '@heroui/react'; import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts'; -import ButtonGroup from '@/components/ButtonGroup'; -import { Spinner } from '@/components/common/Spinner'; +import ButtonGroup from '@/components/ui/button-group'; +import { Spinner } from '@/components/ui/spinner'; import { CHART_COLORS } from '@/constants/chartColors'; import { useMarkets } from '@/hooks/useMarkets'; import { useRateLabel } from '@/hooks/useRateLabel'; diff --git a/app/market/[chainId]/[marketid]/VolumeChart.tsx b/src/features/market-detail/components/charts/volume-chart.tsx similarity index 99% rename from app/market/[chainId]/[marketid]/VolumeChart.tsx rename to src/features/market-detail/components/charts/volume-chart.tsx index 9ad7e832..f4da7a9d 100644 --- a/app/market/[chainId]/[marketid]/VolumeChart.tsx +++ b/src/features/market-detail/components/charts/volume-chart.tsx @@ -4,8 +4,8 @@ import { useState } from 'react'; import { Card, CardHeader, CardBody } from '@heroui/react'; import { AreaChart, Area, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts'; import { formatUnits } from 'viem'; -import ButtonGroup from '@/components/ButtonGroup'; -import { Spinner } from '@/components/common/Spinner'; +import ButtonGroup from '@/components/ui/button-group'; +import { Spinner } from '@/components/ui/spinner'; import { CHART_COLORS } from '@/constants/chartColors'; import { formatReadable } from '@/utils/balance'; import type { MarketVolumes } from '@/utils/types'; diff --git a/app/market/[chainId]/[marketid]/components/BorrowerFiltersModal.tsx b/src/features/market-detail/components/filters/borrower-filters-modal.tsx similarity index 100% rename from app/market/[chainId]/[marketid]/components/BorrowerFiltersModal.tsx rename to src/features/market-detail/components/filters/borrower-filters-modal.tsx diff --git a/app/market/[chainId]/[marketid]/components/shared-filter-utils.tsx b/src/features/market-detail/components/filters/shared-filter-utils.tsx similarity index 100% rename from app/market/[chainId]/[marketid]/components/shared-filter-utils.tsx rename to src/features/market-detail/components/filters/shared-filter-utils.tsx diff --git a/app/market/[chainId]/[marketid]/components/SupplierFiltersModal.tsx b/src/features/market-detail/components/filters/supplier-filters-modal.tsx similarity index 100% rename from app/market/[chainId]/[marketid]/components/SupplierFiltersModal.tsx rename to src/features/market-detail/components/filters/supplier-filters-modal.tsx diff --git a/app/market/[chainId]/[marketid]/components/TransactionFiltersModal.tsx b/src/features/market-detail/components/filters/transaction-filters-modal.tsx similarity index 100% rename from app/market/[chainId]/[marketid]/components/TransactionFiltersModal.tsx rename to src/features/market-detail/components/filters/transaction-filters-modal.tsx diff --git a/app/market/[chainId]/[marketid]/components/LiquidationsTable.tsx b/src/features/market-detail/components/liquidations-table.tsx similarity index 95% rename from app/market/[chainId]/[marketid]/components/LiquidationsTable.tsx rename to src/features/market-detail/components/liquidations-table.tsx index ca43bdc9..1dfd7949 100644 --- a/app/market/[chainId]/[marketid]/components/LiquidationsTable.tsx +++ b/src/features/market-detail/components/liquidations-table.tsx @@ -2,11 +2,11 @@ import { useMemo, useState } from 'react'; import { Table, TableHeader, TableBody, TableRow, TableCell, TableHead } from '@/components/ui/table'; import moment from 'moment'; import { type Address, formatUnits } from 'viem'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; -import { Spinner } from '@/components/common/Spinner'; -import { TablePagination } from '@/components/common/TablePagination'; -import { TransactionIdentity } from '@/components/common/TransactionIdentity'; -import { TokenIcon } from '@/components/TokenIcon'; +import { AccountIdentity } from '@/components/shared/account-identity'; +import { Spinner } from '@/components/ui/spinner'; +import { TablePagination } from '@/components/shared/table-pagination'; +import { TransactionIdentity } from '@/components/shared/transaction-identity'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMarketLiquidations } from '@/hooks/useMarketLiquidations'; import { formatSimple } from '@/utils/balance'; import type { Market, MarketLiquidationTransaction } from '@/utils/types'; diff --git a/app/market/[chainId]/[marketid]/components/PositionStats.tsx b/src/features/market-detail/components/position-stats.tsx similarity index 97% rename from app/market/[chainId]/[marketid]/components/PositionStats.tsx rename to src/features/market-detail/components/position-stats.tsx index 8e12a684..769f1349 100644 --- a/app/market/[chainId]/[marketid]/components/PositionStats.tsx +++ b/src/features/market-detail/components/position-stats.tsx @@ -4,8 +4,8 @@ import { Switch } from '@heroui/react'; import { ReloadIcon } from '@radix-ui/react-icons'; import { FiUser } from 'react-icons/fi'; import { HiOutlineGlobeAsiaAustralia } from 'react-icons/hi2'; -import { Spinner } from '@/components/common/Spinner'; -import { TokenIcon } from '@/components/TokenIcon'; +import { Spinner } from '@/components/ui/spinner'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMarketCampaigns } from '@/hooks/useMarketCampaigns'; import { useMarkets } from '@/hooks/useMarkets'; import { useRateLabel } from '@/hooks/useRateLabel'; @@ -13,7 +13,7 @@ import { formatBalance, formatReadable } from '@/utils/balance'; import { getTruncatedAssetName } from '@/utils/oracle'; import { convertApyToApr } from '@/utils/rateMath'; import type { Market, MarketPosition } from '@/utils/types'; -import { APYBreakdownTooltip } from 'app/markets/components/APYBreakdownTooltip'; +import { APYBreakdownTooltip } from '@/features/markets/components/apy-breakdown-tooltip'; type PositionStatsProps = { market: Market; diff --git a/app/market/[chainId]/[marketid]/components/SuppliersTable.tsx b/src/features/market-detail/components/suppliers-table.tsx similarity index 95% rename from app/market/[chainId]/[marketid]/components/SuppliersTable.tsx rename to src/features/market-detail/components/suppliers-table.tsx index bb12d7ee..95569516 100644 --- a/app/market/[chainId]/[marketid]/components/SuppliersTable.tsx +++ b/src/features/market-detail/components/suppliers-table.tsx @@ -5,11 +5,11 @@ import { FiFilter } from 'react-icons/fi'; import type { Address } from 'viem'; import { formatUnits } from 'viem'; import { Button } from '@/components/ui/button'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; -import { Spinner } from '@/components/common/Spinner'; -import { TablePagination } from '@/components/common/TablePagination'; -import { TokenIcon } from '@/components/TokenIcon'; -import { TooltipContent } from '@/components/TooltipContent'; +import { AccountIdentity } from '@/components/shared/account-identity'; +import { Spinner } from '@/components/ui/spinner'; +import { TablePagination } from '@/components/shared/table-pagination'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { MONARCH_PRIMARY } from '@/constants/chartColors'; import { useMarketSuppliers } from '@/hooks/useMarketSuppliers'; import { formatSimple } from '@/utils/balance'; diff --git a/app/market/[chainId]/[marketid]/components/SuppliesTable.tsx b/src/features/market-detail/components/supplies-table.tsx similarity index 93% rename from app/market/[chainId]/[marketid]/components/SuppliesTable.tsx rename to src/features/market-detail/components/supplies-table.tsx index 2f8090a7..908ed401 100644 --- a/app/market/[chainId]/[marketid]/components/SuppliesTable.tsx +++ b/src/features/market-detail/components/supplies-table.tsx @@ -6,13 +6,13 @@ import { FiFilter } from 'react-icons/fi'; import type { Address } from 'viem'; import { formatUnits } from 'viem'; import { Button } from '@/components/ui/button'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; -import { Badge } from '@/components/common/Badge'; -import { Spinner } from '@/components/common/Spinner'; -import { TablePagination } from '@/components/common/TablePagination'; -import { TransactionIdentity } from '@/components/common/TransactionIdentity'; -import { TokenIcon } from '@/components/TokenIcon'; -import { TooltipContent } from '@/components/TooltipContent'; +import { AccountIdentity } from '@/components/shared/account-identity'; +import { Badge } from '@/components/ui/badge'; +import { Spinner } from '@/components/ui/spinner'; +import { TablePagination } from '@/components/shared/table-pagination'; +import { TransactionIdentity } from '@/components/shared/transaction-identity'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { MONARCH_PRIMARY } from '@/constants/chartColors'; import useMarketSupplies from '@/hooks/useMarketSupplies'; import { formatSimple } from '@/utils/balance'; diff --git a/app/market/[chainId]/[marketid]/content.tsx b/src/features/market-detail/market-view.tsx similarity index 93% rename from app/market/[chainId]/[marketid]/content.tsx rename to src/features/market-detail/market-view.tsx index bca0e93d..20027a1f 100644 --- a/app/market/[chainId]/[marketid]/content.tsx +++ b/src/features/market-detail/market-view.tsx @@ -10,14 +10,14 @@ import Link from 'next/link'; import { useParams } from 'next/navigation'; import { formatUnits, parseUnits } from 'viem'; import { useConnection } from 'wagmi'; -import { BorrowModal } from '@/components/BorrowModal'; +import { BorrowModal } from '@/modals/borrow/borrow-modal'; import { Button } from '@/components/ui/button'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import Header from '@/components/layout/header/Header'; -import { OracleTypeInfo } from '@/components/MarketOracle'; -import { SupplyModalV2 } from '@/components/SupplyModalV2'; -import { TokenIcon } from '@/components/TokenIcon'; +import { OracleTypeInfo } from '@/features/markets/components/oracle'; +import { SupplyModalV2 } from '@/modals/supply/supply-modal'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMarketData } from '@/hooks/useMarketData'; import { useMarketHistoricalData } from '@/hooks/useMarketHistoricalData'; import { useOraclePrice } from '@/hooks/useOraclePrice'; @@ -29,18 +29,18 @@ import { getIRMTitle } from '@/utils/morpho'; import { getNetworkImg, getNetworkName, type SupportedNetworks } from '@/utils/networks'; import { getTruncatedAssetName } from '@/utils/oracle'; import type { TimeseriesOptions } from '@/utils/types'; -import { BorrowersTable } from './components/BorrowersTable'; -import { BorrowsTable } from './components/BorrowsTable'; -import BorrowerFiltersModal from './components/BorrowerFiltersModal'; -import { CampaignBadge } from './components/CampaignBadge'; -import { LiquidationsTable } from './components/LiquidationsTable'; -import { PositionStats } from './components/PositionStats'; -import { SuppliesTable } from './components/SuppliesTable'; -import { SuppliersTable } from './components/SuppliersTable'; -import SupplierFiltersModal from './components/SupplierFiltersModal'; -import TransactionFiltersModal from './components/TransactionFiltersModal'; -import RateChart from './RateChart'; -import VolumeChart from './VolumeChart'; +import { BorrowersTable } from '@/features/market-detail/components/borrowers-table'; +import { BorrowsTable } from '@/features/market-detail/components/borrows-table'; +import BorrowerFiltersModal from '@/features/market-detail/components/filters/borrower-filters-modal'; +import { CampaignBadge } from '@/features/market-detail/components/campaign-badge'; +import { LiquidationsTable } from '@/features/market-detail/components/liquidations-table'; +import { PositionStats } from '@/features/market-detail/components/position-stats'; +import { SuppliesTable } from '@/features/market-detail/components/supplies-table'; +import { SuppliersTable } from '@/features/market-detail/components/suppliers-table'; +import SupplierFiltersModal from '@/features/market-detail/components/filters/supplier-filters-modal'; +import TransactionFiltersModal from '@/features/market-detail/components/filters/transaction-filters-modal'; +import RateChart from './components/charts/rate-chart'; +import VolumeChart from './components/charts/volume-chart'; const NOW = Math.floor(Date.now() / 1000); const DAY_IN_SECONDS = 24 * 60 * 60; diff --git a/app/markets/components/AdvancedSearchBar.tsx b/src/features/markets/components/advanced-search-bar.tsx similarity index 100% rename from app/markets/components/AdvancedSearchBar.tsx rename to src/features/markets/components/advanced-search-bar.tsx diff --git a/app/markets/components/APYBreakdownTooltip.tsx b/src/features/markets/components/apy-breakdown-tooltip.tsx similarity index 98% rename from app/markets/components/APYBreakdownTooltip.tsx rename to src/features/markets/components/apy-breakdown-tooltip.tsx index b3becd84..d55d334f 100644 --- a/app/markets/components/APYBreakdownTooltip.tsx +++ b/src/features/markets/components/apy-breakdown-tooltip.tsx @@ -1,6 +1,6 @@ import type React from 'react'; import { Tooltip } from '@heroui/react'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMarketCampaigns } from '@/hooks/useMarketCampaigns'; import { useMarkets } from '@/hooks/useMarkets'; import { useRateLabel } from '@/hooks/useRateLabel'; diff --git a/app/markets/components/BlacklistConfirmationModal.tsx b/src/features/markets/components/blacklist-confirmation-modal.tsx similarity index 96% rename from app/markets/components/BlacklistConfirmationModal.tsx rename to src/features/markets/components/blacklist-confirmation-modal.tsx index 413ebdcd..da37259c 100644 --- a/app/markets/components/BlacklistConfirmationModal.tsx +++ b/src/features/markets/components/blacklist-confirmation-modal.tsx @@ -3,7 +3,7 @@ import { IoWarningOutline } from 'react-icons/io5'; import { Button } from '@/components/ui/button'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '@/components/common/Modal'; -import { MarketIdentity } from '@/components/MarketIdentity'; +import { MarketIdentity } from '@/features/markets/components/market-identity'; import type { Market } from '@/utils/types'; type BlacklistConfirmationModalProps = { diff --git a/app/markets/components/columnVisibility.ts b/src/features/markets/components/column-visibility.ts similarity index 100% rename from app/markets/components/columnVisibility.ts rename to src/features/markets/components/column-visibility.ts diff --git a/app/markets/components/constants.ts b/src/features/markets/components/constants.ts similarity index 100% rename from app/markets/components/constants.ts rename to src/features/markets/components/constants.ts diff --git a/app/markets/components/AssetFilter.tsx b/src/features/markets/components/filters/asset-filter.tsx similarity index 100% rename from app/markets/components/AssetFilter.tsx rename to src/features/markets/components/filters/asset-filter.tsx diff --git a/app/markets/components/NetworkFilter.tsx b/src/features/markets/components/filters/network-filter.tsx similarity index 100% rename from app/markets/components/NetworkFilter.tsx rename to src/features/markets/components/filters/network-filter.tsx diff --git a/app/markets/components/OracleFilter.tsx b/src/features/markets/components/filters/oracle-filter.tsx similarity index 100% rename from app/markets/components/OracleFilter.tsx rename to src/features/markets/components/filters/oracle-filter.tsx diff --git a/app/markets/components/MarketActionsDropdown.tsx b/src/features/markets/components/market-actions-dropdown.tsx similarity index 98% rename from app/markets/components/MarketActionsDropdown.tsx rename to src/features/markets/components/market-actions-dropdown.tsx index 7316bb66..b5f1273f 100644 --- a/app/markets/components/MarketActionsDropdown.tsx +++ b/src/features/markets/components/market-actions-dropdown.tsx @@ -9,7 +9,7 @@ import { IoEllipsisVertical } from 'react-icons/io5'; import { TbArrowUp } from 'react-icons/tb'; import { Button } from '@/components/ui/button'; import type { Market } from '@/utils/types'; -import { BlacklistConfirmationModal } from './BlacklistConfirmationModal'; +import { BlacklistConfirmationModal } from './blacklist-confirmation-modal'; type MarketActionsDropdownProps = { market: Market; diff --git a/src/components/common/MarketDetailsBlock.tsx b/src/features/markets/components/market-details-block.tsx similarity index 99% rename from src/components/common/MarketDetailsBlock.tsx rename to src/features/markets/components/market-details-block.tsx index b6d4f421..c13efa7b 100644 --- a/src/components/common/MarketDetailsBlock.tsx +++ b/src/features/markets/components/market-details-block.tsx @@ -10,8 +10,8 @@ import { getIRMTitle, previewMarketState } from '@/utils/morpho'; import { getTruncatedAssetName } from '@/utils/oracle'; import { convertApyToApr } from '@/utils/rateMath'; import type { Market } from '@/utils/types'; -import OracleVendorBadge from '../OracleVendorBadge'; -import { TokenIcon } from '../TokenIcon'; +import OracleVendorBadge from './oracle-vendor-badge'; +import { TokenIcon } from '@/components/shared/token-icon'; type MarketDetailsBlockProps = { market: Market; diff --git a/src/components/MarketIdBadge.tsx b/src/features/markets/components/market-id-badge.tsx similarity index 100% rename from src/components/MarketIdBadge.tsx rename to src/features/markets/components/market-id-badge.tsx diff --git a/src/components/MarketIdentity.tsx b/src/features/markets/components/market-identity.tsx similarity index 98% rename from src/components/MarketIdentity.tsx rename to src/features/markets/components/market-identity.tsx index b97ee82f..fac09364 100644 --- a/src/components/MarketIdentity.tsx +++ b/src/features/markets/components/market-identity.tsx @@ -1,6 +1,6 @@ -import { MarketIdBadge } from '@/components/MarketIdBadge'; -import OracleVendorBadge from '@/components/OracleVendorBadge'; -import { TokenIcon } from '@/components/TokenIcon'; +import { MarketIdBadge } from '@/features/markets/components/market-id-badge'; +import OracleVendorBadge from '@/features/markets/components/oracle-vendor-badge'; +import { TokenIcon } from '@/components/shared/token-icon'; import { getTruncatedAssetName } from '@/utils/oracle'; import type { Market, TokenInfo } from '@/utils/types'; diff --git a/src/components/MarketIndicators.tsx b/src/features/markets/components/market-indicators.tsx similarity index 97% rename from src/components/MarketIndicators.tsx rename to src/features/markets/components/market-indicators.tsx index e44bf8fb..37dcae30 100644 --- a/src/components/MarketIndicators.tsx +++ b/src/features/markets/components/market-indicators.tsx @@ -1,11 +1,11 @@ import { Tooltip } from '@heroui/react'; import { FaShieldAlt, FaStar, FaUser } from 'react-icons/fa'; import { FiAlertCircle } from 'react-icons/fi'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { useLiquidationsContext } from '@/contexts/LiquidationsContext'; import { computeMarketWarnings } from '@/hooks/useMarketWarnings'; import type { Market } from '@/utils/types'; -import { RewardsIndicator } from 'app/markets/components/RewardsIndicator'; +import { RewardsIndicator } from '@/features/markets/components/rewards-indicator'; const ICON_SIZE = 14; diff --git a/src/components/common/MarketInfoBlock.tsx b/src/features/markets/components/market-info-block.tsx similarity index 97% rename from src/components/common/MarketInfoBlock.tsx rename to src/features/markets/components/market-info-block.tsx index 481fc5c0..e8f1e26c 100644 --- a/src/components/common/MarketInfoBlock.tsx +++ b/src/features/markets/components/market-info-block.tsx @@ -3,8 +3,8 @@ import { MdOutlineWaterDrop } from 'react-icons/md'; import { formatUnits, maxUint256 } from 'viem'; import { formatBalance, formatReadable } from '@/utils/balance'; import type { Market } from '@/utils/types'; -import OracleVendorBadge from '../OracleVendorBadge'; -import { TokenIcon } from '../TokenIcon'; +import OracleVendorBadge from './oracle-vendor-badge'; +import { TokenIcon } from '@/components/shared/token-icon'; type MarketInfoBlockProps = { market: Market; diff --git a/src/components/common/MarketSelectionModal.tsx b/src/features/markets/components/market-selection-modal.tsx similarity index 97% rename from src/components/common/MarketSelectionModal.tsx rename to src/features/markets/components/market-selection-modal.tsx index 6e3bf5a2..2af3993a 100644 --- a/src/components/common/MarketSelectionModal.tsx +++ b/src/features/markets/components/market-selection-modal.tsx @@ -2,9 +2,9 @@ import { useState, useMemo } from 'react'; import { FiSearch } from 'react-icons/fi'; import type { Address } from 'viem'; import { Button } from '@/components/ui/button'; -import { MarketsTableWithSameLoanAsset } from '@/components/common/MarketsTableWithSameLoanAsset'; +import { MarketsTableWithSameLoanAsset } from '@/features/markets/components/markets-table-same-loan'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '@/components/common/Modal'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useMarkets } from '@/hooks/useMarkets'; import type { SupportedNetworks } from '@/utils/networks'; import type { Market } from '@/utils/types'; diff --git a/src/components/common/MarketSelector.tsx b/src/features/markets/components/market-selector.tsx similarity index 95% rename from src/components/common/MarketSelector.tsx rename to src/features/markets/components/market-selector.tsx index 6ca73f40..7dd6b25f 100644 --- a/src/components/common/MarketSelector.tsx +++ b/src/features/markets/components/market-selector.tsx @@ -1,8 +1,8 @@ import { formatUnits } from 'viem'; import { getTruncatedAssetName } from '@/utils/oracle'; import type { Market } from '@/utils/types'; -import OracleVendorBadge from '../OracleVendorBadge'; -import { TokenIcon } from '../TokenIcon'; +import OracleVendorBadge from './oracle-vendor-badge'; +import { TokenIcon } from '@/components/shared/token-icon'; type MarketSelectorProps = { market: Market; diff --git a/app/markets/components/MarketSettingsModal.tsx b/src/features/markets/components/market-settings-modal.tsx similarity index 98% rename from app/markets/components/MarketSettingsModal.tsx rename to src/features/markets/components/market-settings-modal.tsx index 0486b19c..3499dc68 100644 --- a/app/markets/components/MarketSettingsModal.tsx +++ b/src/features/markets/components/market-settings-modal.tsx @@ -2,12 +2,12 @@ import React from 'react'; import { Input, Divider } from '@heroui/react'; import { FiSliders } from 'react-icons/fi'; import { Button } from '@/components/ui/button'; -import { IconSwitch } from '@/components/common/IconSwitch'; +import { IconSwitch } from '@/components/ui/icon-switch'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '@/components/common/Modal'; -import { TrustedByCell } from '@/components/vaults/TrustedVaultBadges'; +import { TrustedByCell } from '@/features/autovault/components/trusted-vault-badges'; import { defaultTrustedVaults, type TrustedVault } from '@/constants/vaults/known_vaults'; import { useMarkets } from '@/hooks/useMarkets'; -import { type ColumnVisibility, COLUMN_LABELS, COLUMN_DESCRIPTIONS, DEFAULT_COLUMN_VISIBILITY } from './columnVisibility'; +import { type ColumnVisibility, COLUMN_LABELS, COLUMN_DESCRIPTIONS, DEFAULT_COLUMN_VISIBILITY } from './column-visibility'; type MarketSettingsModalProps = { isOpen: boolean; diff --git a/src/components/common/MarketsTableWithSameLoanAsset.tsx b/src/features/markets/components/markets-table-same-loan.tsx similarity index 98% rename from src/components/common/MarketsTableWithSameLoanAsset.tsx rename to src/features/markets/components/markets-table-same-loan.tsx index 43c51956..347abae6 100644 --- a/src/components/common/MarketsTableWithSameLoanAsset.tsx +++ b/src/features/markets/components/markets-table-same-loan.tsx @@ -7,11 +7,11 @@ import { FaSearch } from 'react-icons/fa'; import { IoHelpCircleOutline } from 'react-icons/io5'; import { LuX } from 'react-icons/lu'; import { Button } from '@/components/ui/button'; -import { SuppliedAssetFilterCompactSwitch } from '@/components/common/SuppliedAssetFilterCompactSwitch'; -import { TablePagination } from '@/components/common/TablePagination'; +import { SuppliedAssetFilterCompactSwitch } from '@/features/positions/components/supplied-asset-filter-compact-switch'; +import { TablePagination } from '@/components/shared/table-pagination'; import { useTokens } from '@/components/providers/TokenProvider'; -import TrustedVaultsModal from '@/components/settings/TrustedVaultsModal'; -import { TrustedByCell } from '@/components/vaults/TrustedVaultBadges'; +import TrustedVaultsModal from '@/modals/settings/trusted-vaults-modal'; +import { TrustedByCell } from '@/features/autovault/components/trusted-vault-badges'; import { DEFAULT_MIN_SUPPLY_USD, DEFAULT_MIN_LIQUIDITY_USD } from '@/constants/markets'; import { defaultTrustedVaults, getVaultKey, type TrustedVault } from '@/constants/vaults/known_vaults'; import { useFreshMarketsState } from '@/hooks/useFreshMarketsState'; @@ -28,11 +28,11 @@ import { storageKeys } from '@/utils/storageKeys'; import { type ERC20Token, type UnknownERC20Token, infoToKey } from '@/utils/tokens'; import type { Market } from '@/utils/types'; import { buildTrustedVaultMap } from '@/utils/vaults'; -import { DEFAULT_COLUMN_VISIBILITY, type ColumnVisibility } from 'app/markets/components/columnVisibility'; -import MarketSettingsModal from 'app/markets/components/MarketSettingsModal'; -import { MarketIdBadge } from '../MarketIdBadge'; -import { MarketIdentity, MarketIdentityMode, MarketIdentityFocus } from '../MarketIdentity'; -import { MarketIndicators } from '../MarketIndicators'; +import { DEFAULT_COLUMN_VISIBILITY, type ColumnVisibility } from '@/features/markets/components/column-visibility'; +import MarketSettingsModal from '@/features/markets/components/market-settings-modal'; +import { MarketIdBadge } from './market-id-badge'; +import { MarketIdentity, MarketIdentityMode, MarketIdentityFocus } from './market-identity'; +import { MarketIndicators } from './market-indicators'; const ZERO_DISPLAY_THRESHOLD = 1e-6; diff --git a/src/components/OracleVendorBadge.tsx b/src/features/markets/components/oracle-vendor-badge.tsx similarity index 100% rename from src/components/OracleVendorBadge.tsx rename to src/features/markets/components/oracle-vendor-badge.tsx diff --git a/src/components/MarketOracle/ChainlinkFeedTooltip.tsx b/src/features/markets/components/oracle/MarketOracle/ChainlinkFeedTooltip.tsx similarity index 99% rename from src/components/MarketOracle/ChainlinkFeedTooltip.tsx rename to src/features/markets/components/oracle/MarketOracle/ChainlinkFeedTooltip.tsx index 71f058cb..61b40967 100644 --- a/src/components/MarketOracle/ChainlinkFeedTooltip.tsx +++ b/src/features/markets/components/oracle/MarketOracle/ChainlinkFeedTooltip.tsx @@ -2,7 +2,7 @@ import Image from 'next/image'; import Link from 'next/link'; import { IoHelpCircleOutline } from 'react-icons/io5'; import type { Address } from 'viem'; -import { Badge } from '@/components/common/Badge'; +import { Badge } from '@/components/ui/badge'; import { type ChainlinkOracleEntry, getChainlinkFeedUrl } from '@/constants/oracle/chainlink-data'; import { useGlobalModal } from '@/contexts/GlobalModalContext'; import etherscanLogo from '@/imgs/etherscan.png'; diff --git a/src/components/MarketOracle/ChainlinkRiskTiersModal.tsx b/src/features/markets/components/oracle/MarketOracle/ChainlinkRiskTiersModal.tsx similarity index 98% rename from src/components/MarketOracle/ChainlinkRiskTiersModal.tsx rename to src/features/markets/components/oracle/MarketOracle/ChainlinkRiskTiersModal.tsx index e2fb0ae4..0aff12a5 100644 --- a/src/components/MarketOracle/ChainlinkRiskTiersModal.tsx +++ b/src/features/markets/components/oracle/MarketOracle/ChainlinkRiskTiersModal.tsx @@ -1,5 +1,5 @@ import Image from 'next/image'; -import { Badge } from '@/components/common/Badge'; +import { Badge } from '@/components/ui/badge'; import { Modal, ModalHeader, ModalBody } from '@/components/common/Modal'; import { PriceFeedVendors, OracleVendorIcons } from '@/utils/oracle'; diff --git a/src/components/MarketOracle/CompoundFeedTooltip.tsx b/src/features/markets/components/oracle/MarketOracle/CompoundFeedTooltip.tsx similarity index 99% rename from src/components/MarketOracle/CompoundFeedTooltip.tsx rename to src/features/markets/components/oracle/MarketOracle/CompoundFeedTooltip.tsx index 13d4eb46..1c866c6d 100644 --- a/src/components/MarketOracle/CompoundFeedTooltip.tsx +++ b/src/features/markets/components/oracle/MarketOracle/CompoundFeedTooltip.tsx @@ -3,7 +3,7 @@ import Image from 'next/image'; import Link from 'next/link'; import { IoHelpCircleOutline } from 'react-icons/io5'; import type { Address } from 'viem'; -import { Badge } from '@/components/common/Badge'; +import { Badge } from '@/components/ui/badge'; import { getChainlinkFeedUrl, getChainlinkOracle } from '@/constants/oracle/chainlink-data'; import type { CompoundFeedEntry } from '@/constants/oracle/compound'; import { useGlobalModal } from '@/contexts/GlobalModalContext'; diff --git a/src/components/MarketOracle/FeedEntry.tsx b/src/features/markets/components/oracle/MarketOracle/FeedEntry.tsx similarity index 100% rename from src/components/MarketOracle/FeedEntry.tsx rename to src/features/markets/components/oracle/MarketOracle/FeedEntry.tsx diff --git a/src/components/MarketOracle/GeneralFeedTooltip.tsx b/src/features/markets/components/oracle/MarketOracle/GeneralFeedTooltip.tsx similarity index 100% rename from src/components/MarketOracle/GeneralFeedTooltip.tsx rename to src/features/markets/components/oracle/MarketOracle/GeneralFeedTooltip.tsx diff --git a/src/components/MarketOracle/MarketOracleFeedInfo.tsx b/src/features/markets/components/oracle/MarketOracle/MarketOracleFeedInfo.tsx similarity index 100% rename from src/components/MarketOracle/MarketOracleFeedInfo.tsx rename to src/features/markets/components/oracle/MarketOracle/MarketOracleFeedInfo.tsx diff --git a/src/components/MarketOracle/OracleTypeInfo.tsx b/src/features/markets/components/oracle/MarketOracle/OracleTypeInfo.tsx similarity index 96% rename from src/components/MarketOracle/OracleTypeInfo.tsx rename to src/features/markets/components/oracle/MarketOracle/OracleTypeInfo.tsx index 3d3a74c8..d9f9863c 100644 --- a/src/components/MarketOracle/OracleTypeInfo.tsx +++ b/src/features/markets/components/oracle/MarketOracle/OracleTypeInfo.tsx @@ -1,6 +1,6 @@ import Link from 'next/link'; import { FiExternalLink } from 'react-icons/fi'; -import { MarketOracleFeedInfo } from '@/components/MarketOracle'; +import { MarketOracleFeedInfo } from '@/features/markets/components/oracle'; import { getExplorerURL } from '@/utils/external'; import { getOracleType, getOracleTypeDescription, OracleType } from '@/utils/oracle'; import type { MorphoChainlinkOracleData } from '@/utils/types'; diff --git a/src/components/MarketOracle/RedstoneFeedTooltip.tsx b/src/features/markets/components/oracle/MarketOracle/RedstoneFeedTooltip.tsx similarity index 100% rename from src/components/MarketOracle/RedstoneFeedTooltip.tsx rename to src/features/markets/components/oracle/MarketOracle/RedstoneFeedTooltip.tsx diff --git a/src/components/MarketOracle/RedstoneTypesModal.tsx b/src/features/markets/components/oracle/MarketOracle/RedstoneTypesModal.tsx similarity index 100% rename from src/components/MarketOracle/RedstoneTypesModal.tsx rename to src/features/markets/components/oracle/MarketOracle/RedstoneTypesModal.tsx diff --git a/src/components/MarketOracle/UnknownFeedTooltip.tsx b/src/features/markets/components/oracle/MarketOracle/UnknownFeedTooltip.tsx similarity index 100% rename from src/components/MarketOracle/UnknownFeedTooltip.tsx rename to src/features/markets/components/oracle/MarketOracle/UnknownFeedTooltip.tsx diff --git a/src/components/MarketOracle/index.ts b/src/features/markets/components/oracle/MarketOracle/index.ts similarity index 100% rename from src/components/MarketOracle/index.ts rename to src/features/markets/components/oracle/MarketOracle/index.ts diff --git a/src/features/markets/components/oracle/index.ts b/src/features/markets/components/oracle/index.ts new file mode 100644 index 00000000..1028a5e2 --- /dev/null +++ b/src/features/markets/components/oracle/index.ts @@ -0,0 +1 @@ +export * from './MarketOracle'; diff --git a/src/components/common/PendingMarketCap.tsx b/src/features/markets/components/pending-market-cap.tsx similarity index 97% rename from src/components/common/PendingMarketCap.tsx rename to src/features/markets/components/pending-market-cap.tsx index 9fb6f75e..623a8130 100644 --- a/src/components/common/PendingMarketCap.tsx +++ b/src/features/markets/components/pending-market-cap.tsx @@ -4,8 +4,8 @@ import { LuX } from 'react-icons/lu'; import { formatUnits } from 'viem'; import { getTruncatedAssetName } from '@/utils/oracle'; import type { Market } from '@/utils/types'; -import OracleVendorBadge from '../OracleVendorBadge'; -import { TokenIcon } from '../TokenIcon'; +import OracleVendorBadge from './oracle-vendor-badge'; +import { TokenIcon } from '@/components/shared/token-icon'; type PendingMarketCapProps = { market: Market; diff --git a/app/markets/components/RewardsIndicator.tsx b/src/features/markets/components/rewards-indicator.tsx similarity index 95% rename from app/markets/components/RewardsIndicator.tsx rename to src/features/markets/components/rewards-indicator.tsx index 84106d95..294fec08 100644 --- a/app/markets/components/RewardsIndicator.tsx +++ b/src/features/markets/components/rewards-indicator.tsx @@ -1,7 +1,7 @@ import { Tooltip } from '@heroui/react'; import Image from 'next/image'; import { FiGift } from 'react-icons/fi'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { useMarketCampaigns } from '@/hooks/useMarketCampaigns'; import merklLogo from '@/imgs/merkl.jpg'; diff --git a/app/markets/components/RiskIndicator.tsx b/src/features/markets/components/risk-indicator.tsx similarity index 98% rename from app/markets/components/RiskIndicator.tsx rename to src/features/markets/components/risk-indicator.tsx index 43b0c705..d19d08d2 100644 --- a/app/markets/components/RiskIndicator.tsx +++ b/src/features/markets/components/risk-indicator.tsx @@ -1,7 +1,7 @@ import { Tooltip } from '@heroui/react'; import { GrStatusGood } from 'react-icons/gr'; import { MdWarning, MdError } from 'react-icons/md'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { useMarketWarnings } from '@/hooks/useMarketWarnings'; import type { WarningWithDetail, Market } from '@/utils/types'; import { WarningCategory } from '@/utils/types'; diff --git a/app/markets/components/MarketRowDetail.tsx b/src/features/markets/components/table/market-row-detail.tsx similarity index 97% rename from app/markets/components/MarketRowDetail.tsx rename to src/features/markets/components/table/market-row-detail.tsx index 3d90e959..f7fa1bfa 100644 --- a/app/markets/components/MarketRowDetail.tsx +++ b/src/features/markets/components/table/market-row-detail.tsx @@ -1,5 +1,5 @@ import { Info } from '@/components/Info/info'; -import { OracleTypeInfo } from '@/components/MarketOracle'; +import { OracleTypeInfo } from '@/features/markets/components/oracle'; import { useMarketWarnings } from '@/hooks/useMarketWarnings'; import { formatReadable } from '@/utils/balance'; import type { Market } from '@/utils/types'; diff --git a/app/markets/components/MarketTableBody.tsx b/src/features/markets/components/table/market-table-body.tsx similarity index 93% rename from app/markets/components/MarketTableBody.tsx rename to src/features/markets/components/table/market-table-body.tsx index ba7d7c4a..9cd6a3f5 100644 --- a/app/markets/components/MarketTableBody.tsx +++ b/src/features/markets/components/table/market-table-body.tsx @@ -2,20 +2,20 @@ import React from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { GoStarFill, GoStar } from 'react-icons/go'; import { TableBody, TableRow, TableCell } from '@/components/ui/table'; -import { RateFormatted } from '@/components/common/RateFormatted'; -import { MarketIdBadge } from '@/components/MarketIdBadge'; -import { MarketIndicators } from '@/components/MarketIndicators'; -import OracleVendorBadge from '@/components/OracleVendorBadge'; -import { TrustedByCell } from '@/components/vaults/TrustedVaultBadges'; +import { RateFormatted } from '@/components/shared/rate-formatted'; +import { MarketIdBadge } from '@/features/markets/components/market-id-badge'; +import { MarketIndicators } from '@/features/markets/components/market-indicators'; +import OracleVendorBadge from '@/features/markets/components/oracle-vendor-badge'; +import { TrustedByCell } from '@/features/autovault/components/trusted-vault-badges'; import { getVaultKey, type TrustedVault } from '@/constants/vaults/known_vaults'; import { useRateLabel } from '@/hooks/useRateLabel'; import type { Market } from '@/utils/types'; -import { APYCell } from './APYBreakdownTooltip'; -import type { ColumnVisibility } from './columnVisibility'; -import { MarketActionsDropdown } from './MarketActionsDropdown'; -import { ExpandedMarketDetail } from './MarketRowDetail'; -import { TDAsset, TDTotalSupplyOrBorrow } from './MarketTableUtils'; -import { MarketAssetIndicator, MarketOracleIndicator, MarketDebtIndicator } from './RiskIndicator'; +import { APYCell } from '../apy-breakdown-tooltip'; +import type { ColumnVisibility } from '../column-visibility'; +import { MarketActionsDropdown } from '../market-actions-dropdown'; +import { ExpandedMarketDetail } from './market-row-detail'; +import { TDAsset, TDTotalSupplyOrBorrow } from './market-table-utils'; +import { MarketAssetIndicator, MarketOracleIndicator, MarketDebtIndicator } from '../risk-indicator'; type MarketTableBodyProps = { currentEntries: Market[]; diff --git a/app/markets/components/MarketTableUtils.tsx b/src/features/markets/components/table/market-table-utils.tsx similarity index 96% rename from app/markets/components/MarketTableUtils.tsx rename to src/features/markets/components/table/market-table-utils.tsx index 7df7f300..51e090c1 100644 --- a/app/markets/components/MarketTableUtils.tsx +++ b/src/features/markets/components/table/market-table-utils.tsx @@ -1,9 +1,9 @@ import { ArrowDownIcon, ArrowUpIcon, ExternalLinkIcon } from '@radix-ui/react-icons'; import { TableHead, TableCell } from '@/components/ui/table'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import { formatBalance, formatReadable } from '@/utils/balance'; import { getAssetURL } from '@/utils/external'; -import type { SortColumn } from './constants'; +import type { SortColumn } from '../constants'; type HTSortableProps = { label: string | React.ReactNode; diff --git a/app/markets/components/marketsTable.tsx b/src/features/markets/components/table/markets-table.tsx similarity index 96% rename from app/markets/components/marketsTable.tsx rename to src/features/markets/components/table/markets-table.tsx index 33538880..9ab62c05 100644 --- a/app/markets/components/marketsTable.tsx +++ b/src/features/markets/components/table/markets-table.tsx @@ -1,15 +1,15 @@ import { useMemo, useState } from 'react'; import { FaRegStar, FaStar } from 'react-icons/fa'; import { Table, TableHeader, TableRow, TableHead } from '@/components/ui/table'; -import { TablePagination } from '@/components/common/TablePagination'; +import { TablePagination } from '@/components/shared/table-pagination'; import type { TrustedVault } from '@/constants/vaults/known_vaults'; import { useRateLabel } from '@/hooks/useRateLabel'; import type { Market } from '@/utils/types'; import { buildTrustedVaultMap } from '@/utils/vaults'; -import type { ColumnVisibility } from './columnVisibility'; -import { SortColumn } from './constants'; -import { MarketTableBody } from './MarketTableBody'; -import { HTSortable } from './MarketTableUtils'; +import type { ColumnVisibility } from '../column-visibility'; +import { SortColumn } from '../constants'; +import { MarketTableBody } from './market-table-body'; +import { HTSortable } from './market-table-utils'; type MarketsTableProps = { sortColumn: number; diff --git a/app/markets/components/markets.tsx b/src/features/markets/markets-view.tsx similarity index 96% rename from app/markets/components/markets.tsx rename to src/features/markets/markets-view.tsx index c08ca21f..d7dcefff 100644 --- a/app/markets/components/markets.tsx +++ b/src/features/markets/markets-view.tsx @@ -9,14 +9,14 @@ import { FiSettings } from 'react-icons/fi'; import { RiExpandHorizontalLine } from 'react-icons/ri'; import { Button } from '@/components/ui/button'; -import { SuppliedAssetFilterCompactSwitch } from '@/components/common/SuppliedAssetFilterCompactSwitch'; +import { SuppliedAssetFilterCompactSwitch } from '@/features/positions/components/supplied-asset-filter-compact-switch'; import Header from '@/components/layout/header/Header'; import { useTokens } from '@/components/providers/TokenProvider'; -import TrustedVaultsModal from '@/components/settings/TrustedVaultsModal'; -import EmptyScreen from '@/components/Status/EmptyScreen'; -import LoadingScreen from '@/components/Status/LoadingScreen'; -import { SupplyModalV2 } from '@/components/SupplyModalV2'; -import { TooltipContent } from '@/components/TooltipContent'; +import TrustedVaultsModal from '@/modals/settings/trusted-vaults-modal'; +import EmptyScreen from '@/components/status/empty-screen'; +import LoadingScreen from '@/components/status/loading-screen'; +import { SupplyModalV2 } from '@/modals/supply/supply-modal'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { DEFAULT_MIN_SUPPLY_USD, DEFAULT_MIN_LIQUIDITY_USD } from '@/constants/markets'; import { defaultTrustedVaults, getVaultKey, type TrustedVault } from '@/constants/vaults/known_vaults'; import { useLocalStorage } from '@/hooks/useLocalStorage'; @@ -32,14 +32,14 @@ import { storageKeys } from '@/utils/storageKeys'; import type { ERC20Token, UnknownERC20Token } from '@/utils/tokens'; import type { Market } from '@/utils/types'; -import AdvancedSearchBar, { ShortcutType } from './AdvancedSearchBar'; -import AssetFilter from './AssetFilter'; -import { DEFAULT_COLUMN_VISIBILITY, type ColumnVisibility } from './columnVisibility'; -import { SortColumn } from './constants'; -import MarketSettingsModal from './MarketSettingsModal'; -import MarketsTable from './marketsTable'; -import NetworkFilter from './NetworkFilter'; -import OracleFilter from './OracleFilter'; +import AdvancedSearchBar, { ShortcutType } from './components/advanced-search-bar'; +import AssetFilter from './components/filters/asset-filter'; +import { DEFAULT_COLUMN_VISIBILITY, type ColumnVisibility } from './components/column-visibility'; +import { SortColumn } from './components/constants'; +import MarketSettingsModal from './components/market-settings-modal'; +import MarketsTable from './components/table/markets-table'; +import NetworkFilter from './components/filters/network-filter'; +import OracleFilter from './components/filters/oracle-filter'; type MarketContentProps = { initialNetwork: SupportedNetworks | null; diff --git a/app/positions/report/components/AssetSelector.tsx b/src/features/positions-report/components/asset-selector.tsx similarity index 97% rename from app/positions/report/components/AssetSelector.tsx rename to src/features/positions-report/components/asset-selector.tsx index a6709acf..a17b5ae1 100644 --- a/app/positions/report/components/AssetSelector.tsx +++ b/src/features/positions-report/components/asset-selector.tsx @@ -1,8 +1,8 @@ import { useRef, useState, useEffect } from 'react'; import { ChevronDownIcon } from '@radix-ui/react-icons'; import type { Address } from 'viem'; -import { NetworkIcon } from '@/components/common/NetworkIcon'; -import { TokenIcon } from '@/components/TokenIcon'; +import { NetworkIcon } from '@/components/shared/network-icon'; +import { TokenIcon } from '@/components/shared/token-icon'; import { getNetworkName } from '@/utils/networks'; export type AssetKey = { diff --git a/app/positions/report/components/ReportTable.tsx b/src/features/positions-report/components/report-table.tsx similarity index 98% rename from app/positions/report/components/ReportTable.tsx rename to src/features/positions-report/components/report-table.tsx index 12e2921f..70bc00f2 100644 --- a/app/positions/report/components/ReportTable.tsx +++ b/src/features/positions-report/components/report-table.tsx @@ -9,10 +9,10 @@ import { useDateFormatter } from '@react-aria/i18n'; import moment from 'moment'; import Link from 'next/link'; import { formatUnits } from 'viem'; -import { Badge } from '@/components/common/Badge'; -import { NetworkIcon } from '@/components/common/NetworkIcon'; -import OracleVendorBadge from '@/components/OracleVendorBadge'; -import { TokenIcon } from '@/components/TokenIcon'; +import { Badge } from '@/components/ui/badge'; +import { NetworkIcon } from '@/components/shared/network-icon'; +import OracleVendorBadge from '@/features/markets/components/oracle-vendor-badge'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMarkets } from '@/hooks/useMarkets'; import type { ReportSummary } from '@/hooks/usePositionReport'; import { useRateLabel } from '@/hooks/useRateLabel'; diff --git a/app/positions/report/components/ReportContent.tsx b/src/features/positions-report/positions-report-view.tsx similarity index 96% rename from app/positions/report/components/ReportContent.tsx rename to src/features/positions-report/positions-report-view.tsx index 39d166ee..9b40acb4 100644 --- a/app/positions/report/components/ReportContent.tsx +++ b/src/features/positions-report/positions-report-view.tsx @@ -6,16 +6,16 @@ import { parseDate, getLocalTimeZone, today, parseAbsoluteToLocal, type ZonedDat import { useDateFormatter } from '@react-aria/i18n'; import type { Address } from 'viem'; import { Button } from '@/components/ui/button'; -import DatePicker from '@/components/common/DatePicker'; -import { Spinner } from '@/components/common/Spinner'; +import DatePicker from '@/components/shared/date-picker'; +import { Spinner } from '@/components/ui/spinner'; import Header from '@/components/layout/header/Header'; -import LoadingScreen from '@/components/Status/LoadingScreen'; +import LoadingScreen from '@/components/status/loading-screen'; import { usePositionReport } from '@/hooks/usePositionReport'; import type { ReportSummary } from '@/hooks/usePositionReport'; import useUserPositions from '@/hooks/useUserPositions'; import { getMorphoGenesisDate } from '@/utils/morpho'; -import { AssetSelector, type AssetKey } from './AssetSelector'; -import { ReportTable } from './ReportTable'; +import { AssetSelector, type AssetKey } from './components/asset-selector'; +import { ReportTable } from './components/report-table'; type ReportState = { asset: AssetKey; diff --git a/app/positions/components/FromMarketsTable.tsx b/src/features/positions/components/from-markets-table.tsx similarity index 98% rename from app/positions/components/FromMarketsTable.tsx rename to src/features/positions/components/from-markets-table.tsx index 118e2f9c..ec41e8f3 100644 --- a/app/positions/components/FromMarketsTable.tsx +++ b/src/features/positions/components/from-markets-table.tsx @@ -1,8 +1,8 @@ import { useState } from 'react'; import { Button } from '@/components/ui/button'; -import { TablePagination } from '@/components/common/TablePagination'; +import { TablePagination } from '@/components/shared/table-pagination'; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'; -import { MarketIdentity, MarketIdentityMode, MarketIdentityFocus } from '@/components/MarketIdentity'; +import { MarketIdentity, MarketIdentityMode, MarketIdentityFocus } from '@/features/markets/components/market-identity'; import { useMarkets } from '@/hooks/useMarkets'; import { useRateLabel } from '@/hooks/useRateLabel'; import { formatReadable } from '@/utils/balance'; diff --git a/app/positions/components/MarketBadge.tsx b/src/features/positions/components/market-badge.tsx similarity index 100% rename from app/positions/components/MarketBadge.tsx rename to src/features/positions/components/market-badge.tsx diff --git a/app/positions/components/onboarding/AssetSelection.tsx b/src/features/positions/components/onboarding/asset-selection.tsx similarity index 98% rename from app/positions/components/onboarding/AssetSelection.tsx rename to src/features/positions/components/onboarding/asset-selection.tsx index 0edd58c1..e7cb6d3a 100644 --- a/app/positions/components/onboarding/AssetSelection.tsx +++ b/src/features/positions/components/onboarding/asset-selection.tsx @@ -4,13 +4,13 @@ import Image from 'next/image'; import Link from 'next/link'; import { formatUnits } from 'viem'; import { Button } from '@/components/ui/button'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useMarkets } from '@/hooks/useMarkets'; import { useUserBalancesAllNetworks } from '@/hooks/useUserBalances'; import { formatReadable } from '@/utils/balance'; import { getNetworkImg, getNetworkName } from '@/utils/networks'; import { findToken } from '@/utils/tokens'; -import { useOnboarding } from './OnboardingContext'; +import { useOnboarding } from './onboarding-context'; import type { TokenWithMarkets } from './types'; function NetworkIcon({ networkId }: { networkId: number }) { diff --git a/app/positions/components/onboarding/MarketSelectionOnboarding.tsx b/src/features/positions/components/onboarding/market-selection-onboarding.tsx similarity index 92% rename from app/positions/components/onboarding/MarketSelectionOnboarding.tsx rename to src/features/positions/components/onboarding/market-selection-onboarding.tsx index 08629a6c..dcff1960 100644 --- a/app/positions/components/onboarding/MarketSelectionOnboarding.tsx +++ b/src/features/positions/components/onboarding/market-selection-onboarding.tsx @@ -1,9 +1,9 @@ import { useMemo } from 'react'; import { Button } from '@/components/ui/button'; -import { MarketsTableWithSameLoanAsset } from '@/components/common/MarketsTableWithSameLoanAsset'; -import type { MarketWithSelection } from '@/components/common/MarketsTableWithSameLoanAsset'; +import { MarketsTableWithSameLoanAsset } from '@/features/markets/components/markets-table-same-loan'; +import type { MarketWithSelection } from '@/features/markets/components/markets-table-same-loan'; import { useTokens } from '@/components/providers/TokenProvider'; -import { useOnboarding } from './OnboardingContext'; +import { useOnboarding } from './onboarding-context'; export function MarketSelectionOnboarding() { const { selectedToken, selectedMarkets, setSelectedMarkets, canGoNext, goToNextStep, goToPrevStep } = useOnboarding(); diff --git a/app/positions/components/onboarding/OnboardingContext.tsx b/src/features/positions/components/onboarding/onboarding-context.tsx similarity index 100% rename from app/positions/components/onboarding/OnboardingContext.tsx rename to src/features/positions/components/onboarding/onboarding-context.tsx diff --git a/app/positions/components/onboarding/OnboardingModal.tsx b/src/features/positions/components/onboarding/onboarding-modal.tsx similarity index 89% rename from app/positions/components/onboarding/OnboardingModal.tsx rename to src/features/positions/components/onboarding/onboarding-modal.tsx index 6bef03b2..efd22f8d 100644 --- a/app/positions/components/onboarding/OnboardingModal.tsx +++ b/src/features/positions/components/onboarding/onboarding-modal.tsx @@ -1,12 +1,11 @@ import { motion, AnimatePresence } from 'framer-motion'; import { FaCompass } from 'react-icons/fa'; import { Modal, ModalBody, ModalFooter, ModalHeader } from '@/components/common/Modal'; -import { AssetSelection } from './AssetSelection'; -import { MarketSelectionOnboarding } from './MarketSelectionOnboarding'; -import { useOnboarding } from './OnboardingContext'; -import { ONBOARDING_STEPS } from './OnboardingContext'; -import { SetupPositions } from './SetupPositions'; -import { SuccessPage } from './SuccessPage'; +import { AssetSelection } from './asset-selection'; +import { MarketSelectionOnboarding } from './market-selection-onboarding'; +import { useOnboarding, ONBOARDING_STEPS } from './onboarding-context'; +import { SetupPositions } from './setup-positions'; +import { SuccessPage } from './success-page'; const StepComponents = { 'asset-selection': AssetSelection, diff --git a/app/positions/components/onboarding/SetupPositions.tsx b/src/features/positions/components/onboarding/setup-positions.tsx similarity index 98% rename from app/positions/components/onboarding/SetupPositions.tsx rename to src/features/positions/components/onboarding/setup-positions.tsx index 41e8a45a..c91a4645 100644 --- a/app/positions/components/onboarding/SetupPositions.tsx +++ b/src/features/positions/components/onboarding/setup-positions.tsx @@ -7,16 +7,16 @@ import { Button } from '@/components/ui/button'; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'; import { ExecuteTransactionButton } from '@/components/ui/ExecuteTransactionButton'; import Input from '@/components/Input/Input'; -import { MarketIdentity, MarketIdentityMode, MarketIdentityFocus } from '@/components/MarketIdentity'; -import { SupplyProcessModal } from '@/components/SupplyProcessModal'; +import { MarketIdentity, MarketIdentityMode, MarketIdentityFocus } from '@/features/markets/components/market-identity'; +import { SupplyProcessModal } from '@/modals/supply/supply-process-modal'; import { useLocalStorage } from '@/hooks/useLocalStorage'; import { useMultiMarketSupply } from '@/hooks/useMultiMarketSupply'; import { useRateLabel } from '@/hooks/useRateLabel'; import { useStyledToast } from '@/hooks/useStyledToast'; import { formatBalance } from '@/utils/balance'; import { SupportedNetworks } from '@/utils/networks'; -import { APYCell } from 'app/markets/components/APYBreakdownTooltip'; -import { useOnboarding } from './OnboardingContext'; +import { APYCell } from '@/features/markets/components/apy-breakdown-tooltip'; +import { useOnboarding } from './onboarding-context'; export function SetupPositions() { const toast = useStyledToast(); diff --git a/app/positions/components/onboarding/SuccessPage.tsx b/src/features/positions/components/onboarding/success-page.tsx similarity index 95% rename from app/positions/components/onboarding/SuccessPage.tsx rename to src/features/positions/components/onboarding/success-page.tsx index 43f2a842..fd950a9b 100644 --- a/app/positions/components/onboarding/SuccessPage.tsx +++ b/src/features/positions/components/onboarding/success-page.tsx @@ -1,6 +1,6 @@ import { FaCheckCircle } from 'react-icons/fa'; import { Button } from '@/components/ui/button'; -import { useOnboarding } from './OnboardingContext'; +import { useOnboarding } from './onboarding-context'; export function SuccessPage({ onClose }: { onClose: () => void }) { const { selectedToken, resetOnboarding } = useOnboarding(); diff --git a/app/positions/components/onboarding/types.ts b/src/features/positions/components/onboarding/types.ts similarity index 100% rename from app/positions/components/onboarding/types.ts rename to src/features/positions/components/onboarding/types.ts diff --git a/app/positions/components/PositionsSummaryTable.tsx b/src/features/positions/components/positions-summary-table.tsx similarity index 98% rename from app/positions/components/PositionsSummaryTable.tsx rename to src/features/positions/components/positions-summary-table.tsx index df3474fe..7591358b 100644 --- a/app/positions/components/PositionsSummaryTable.tsx +++ b/src/features/positions/components/positions-summary-table.tsx @@ -12,8 +12,8 @@ import { PulseLoader } from 'react-spinners'; import { useConnection } from 'wagmi'; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'; import { Button } from '@/components/ui/button'; -import { TokenIcon } from '@/components/TokenIcon'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { useLocalStorage } from '@/hooks/useLocalStorage'; import { useMarkets } from '@/hooks/useMarkets'; import { computeMarketWarnings } from '@/hooks/useMarketWarnings'; @@ -32,9 +32,9 @@ import { type WarningWithDetail, WarningCategory, } from '@/utils/types'; -import { RiskIndicator } from 'app/markets/components/RiskIndicator'; -import { RebalanceModal } from './RebalanceModal'; -import { SuppliedMarketsDetail } from './SuppliedMarketsDetail'; +import { RiskIndicator } from '@/features/markets/components/risk-indicator'; +import { RebalanceModal } from './rebalance/rebalance-modal'; +import { SuppliedMarketsDetail } from './supplied-markets-detail'; // Component to compute and display aggregated risk indicators for a group of positions function AggregatedRiskIndicators({ groupedPosition }: { groupedPosition: GroupedPosition }) { diff --git a/app/positions/components/ApyPreview.tsx b/src/features/positions/components/preview/apy-preview.tsx similarity index 90% rename from app/positions/components/ApyPreview.tsx rename to src/features/positions/components/preview/apy-preview.tsx index ec911e30..e1aa162f 100644 --- a/app/positions/components/ApyPreview.tsx +++ b/src/features/positions/components/preview/apy-preview.tsx @@ -1,5 +1,5 @@ import { useRateLabel } from '@/hooks/useRateLabel'; -import { MetricPreview } from './MetricPreview'; +import { MetricPreview } from './metric-preview'; type ApyPreviewProps = { currentApy: number; diff --git a/app/positions/components/MetricPreview.tsx b/src/features/positions/components/preview/metric-preview.tsx similarity index 95% rename from app/positions/components/MetricPreview.tsx rename to src/features/positions/components/preview/metric-preview.tsx index 4890ba19..6ccb86b3 100644 --- a/app/positions/components/MetricPreview.tsx +++ b/src/features/positions/components/preview/metric-preview.tsx @@ -1,5 +1,5 @@ import { Tooltip } from '@heroui/react'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { formatReadable } from '@/utils/balance'; type MetricPreviewProps = { diff --git a/app/positions/components/UtilizationPreview.tsx b/src/features/positions/components/preview/utilization-preview.tsx similarity index 90% rename from app/positions/components/UtilizationPreview.tsx rename to src/features/positions/components/preview/utilization-preview.tsx index 27e26028..5b24c85b 100644 --- a/app/positions/components/UtilizationPreview.tsx +++ b/src/features/positions/components/preview/utilization-preview.tsx @@ -1,4 +1,4 @@ -import { MetricPreview } from './MetricPreview'; +import { MetricPreview } from './metric-preview'; type UtilizationPreviewProps = { currentUtilization: number; diff --git a/app/positions/components/RebalanceActionInput.tsx b/src/features/positions/components/rebalance/rebalance-action-input.tsx similarity index 96% rename from app/positions/components/RebalanceActionInput.tsx rename to src/features/positions/components/rebalance/rebalance-action-input.tsx index e39ba44a..0f77b3f5 100644 --- a/app/positions/components/RebalanceActionInput.tsx +++ b/src/features/positions/components/rebalance/rebalance-action-input.tsx @@ -1,5 +1,5 @@ import type { GroupedPosition, Market } from '@/utils/types'; -import { RebalanceActionRow } from './RebalanceActionRow'; +import { RebalanceActionRow } from './rebalance-action-row'; type RebalanceActionInputProps = { amount: string; diff --git a/app/positions/components/RebalanceActionRow.tsx b/src/features/positions/components/rebalance/rebalance-action-row.tsx similarity index 96% rename from app/positions/components/RebalanceActionRow.tsx rename to src/features/positions/components/rebalance/rebalance-action-row.tsx index 15cde6c3..ed4abb2d 100644 --- a/app/positions/components/RebalanceActionRow.tsx +++ b/src/features/positions/components/rebalance/rebalance-action-row.tsx @@ -2,13 +2,13 @@ import { useMemo } from 'react'; import { ArrowRightIcon, Cross2Icon, TrashIcon } from '@radix-ui/react-icons'; import { formatUnits, parseUnits } from 'viem'; import { Button } from '@/components/ui/button'; -import { MarketIdentity, MarketIdentityMode } from '@/components/MarketIdentity'; -import { TokenIcon } from '@/components/TokenIcon'; +import { MarketIdentity, MarketIdentityMode } from '@/features/markets/components/market-identity'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useRateLabel } from '@/hooks/useRateLabel'; import { previewMarketState } from '@/utils/morpho'; import type { GroupedPosition, Market } from '@/utils/types'; -import { ApyPreview } from './ApyPreview'; -import { UtilizationPreview } from './UtilizationPreview'; +import { ApyPreview } from '../preview/apy-preview'; +import { UtilizationPreview } from '../preview/utilization-preview'; type RebalanceActionRowMode = 'input' | 'display'; diff --git a/app/positions/components/RebalanceCart.tsx b/src/features/positions/components/rebalance/rebalance-cart.tsx similarity index 96% rename from app/positions/components/RebalanceCart.tsx rename to src/features/positions/components/rebalance/rebalance-cart.tsx index 61c891ac..2a50def5 100644 --- a/app/positions/components/RebalanceCart.tsx +++ b/src/features/positions/components/rebalance/rebalance-cart.tsx @@ -1,6 +1,6 @@ import type { Market } from '@/utils/types'; import type { GroupedPosition, RebalanceAction } from '@/utils/types'; -import { RebalanceActionRow } from './RebalanceActionRow'; +import { RebalanceActionRow } from './rebalance-action-row'; type RebalanceCartProps = { rebalanceActions: RebalanceAction[]; diff --git a/app/positions/components/RebalanceModal.tsx b/src/features/positions/components/rebalance/rebalance-modal.tsx similarity index 96% rename from app/positions/components/RebalanceModal.tsx rename to src/features/positions/components/rebalance/rebalance-modal.tsx index add6b8eb..91a0e551 100644 --- a/app/positions/components/RebalanceModal.tsx +++ b/src/features/positions/components/rebalance/rebalance-modal.tsx @@ -2,10 +2,10 @@ import { useState, useMemo, useCallback } from 'react'; import { ReloadIcon } from '@radix-ui/react-icons'; import { parseUnits, formatUnits } from 'viem'; import { Button } from '@/components/ui/button'; -import { MarketSelectionModal } from '@/components/common/MarketSelectionModal'; +import { MarketSelectionModal } from '@/features/markets/components/market-selection-modal'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '@/components/common/Modal'; -import { Spinner } from '@/components/common/Spinner'; -import { TokenIcon } from '@/components/TokenIcon'; +import { Spinner } from '@/components/ui/spinner'; +import { TokenIcon } from '@/components/shared/token-icon'; import { ExecuteTransactionButton } from '@/components/ui/ExecuteTransactionButton'; import { useLocalStorage } from '@/hooks/useLocalStorage'; import { useMarkets } from '@/hooks/useMarkets'; @@ -13,10 +13,10 @@ import { useRebalance } from '@/hooks/useRebalance'; import { useStyledToast } from '@/hooks/useStyledToast'; import type { Market } from '@/utils/types'; import type { GroupedPosition, RebalanceAction } from '@/utils/types'; -import { FromMarketsTable } from './FromMarketsTable'; -import { RebalanceActionInput } from './RebalanceActionInput'; -import { RebalanceCart } from './RebalanceCart'; -import { RebalanceProcessModal } from './RebalanceProcessModal'; +import { FromMarketsTable } from '../from-markets-table'; +import { RebalanceActionInput } from './rebalance-action-input'; +import { RebalanceCart } from './rebalance-cart'; +import { RebalanceProcessModal } from './rebalance-process-modal'; type RebalanceModalProps = { groupedPosition: GroupedPosition; diff --git a/app/positions/components/RebalanceProcessModal.tsx b/src/features/positions/components/rebalance/rebalance-process-modal.tsx similarity index 100% rename from app/positions/components/RebalanceProcessModal.tsx rename to src/features/positions/components/rebalance/rebalance-process-modal.tsx diff --git a/src/components/common/SuppliedAssetFilterCompactSwitch.tsx b/src/features/positions/components/supplied-asset-filter-compact-switch.tsx similarity index 97% rename from src/components/common/SuppliedAssetFilterCompactSwitch.tsx rename to src/features/positions/components/supplied-asset-filter-compact-switch.tsx index 3d9111cc..af3b33a9 100644 --- a/src/components/common/SuppliedAssetFilterCompactSwitch.tsx +++ b/src/features/positions/components/supplied-asset-filter-compact-switch.tsx @@ -4,10 +4,10 @@ import { useMemo } from 'react'; import { Divider, Tooltip, useDisclosure } from '@heroui/react'; import { FiFilter } from 'react-icons/fi'; import { Button } from '@/components/ui/button'; -import { FilterRow, FilterSection } from '@/components/common/FilterComponents'; -import { IconSwitch } from '@/components/common/IconSwitch'; +import { FilterRow, FilterSection } from '@/components/ui/filter-components'; +import { IconSwitch } from '@/components/ui/icon-switch'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '@/components/common/Modal'; -import { TooltipContent } from '@/components/TooltipContent'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { MONARCH_PRIMARY } from '@/constants/chartColors'; import { formatReadable } from '@/utils/balance'; diff --git a/app/positions/components/SuppliedMarketsDetail.tsx b/src/features/positions/components/supplied-markets-detail.tsx similarity index 95% rename from app/positions/components/SuppliedMarketsDetail.tsx rename to src/features/positions/components/supplied-markets-detail.tsx index d70a7090..a898eb22 100644 --- a/app/positions/components/SuppliedMarketsDetail.tsx +++ b/src/features/positions/components/supplied-markets-detail.tsx @@ -1,14 +1,14 @@ import { motion } from 'framer-motion'; import { Button } from '@/components/ui/button'; import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'; -import { RateFormatted } from '@/components/common/RateFormatted'; -import { MarketIdBadge } from '@/components/MarketIdBadge'; -import { MarketIdentity, MarketIdentityFocus, MarketIdentityMode } from '@/components/MarketIdentity'; -import { MarketIndicators } from '@/components/MarketIndicators'; +import { RateFormatted } from '@/components/shared/rate-formatted'; +import { MarketIdBadge } from '@/features/markets/components/market-id-badge'; +import { MarketIdentity, MarketIdentityFocus, MarketIdentityMode } from '@/features/markets/components/market-identity'; +import { MarketIndicators } from '@/features/markets/components/market-indicators'; import { useRateLabel } from '@/hooks/useRateLabel'; import { formatReadable, formatBalance } from '@/utils/balance'; import type { MarketPosition, GroupedPosition } from '@/utils/types'; -import { getCollateralColor } from '../utils/colors'; +import { getCollateralColor } from '@/features/positions/utils/colors'; type SuppliedMarketsDetailProps = { groupedPosition: GroupedPosition; setShowWithdrawModal: (show: boolean) => void; diff --git a/app/positions/components/PositionsContent.tsx b/src/features/positions/positions-view.tsx similarity index 93% rename from app/positions/components/PositionsContent.tsx rename to src/features/positions/positions-view.tsx index 600d1fe7..9f5d99a7 100644 --- a/app/positions/components/PositionsContent.tsx +++ b/src/features/positions/positions-view.tsx @@ -10,18 +10,18 @@ import { TbReport } from 'react-icons/tb'; import { toast } from 'react-toastify'; import type { Address } from 'viem'; import { useConnection } from 'wagmi'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; +import { AccountIdentity } from '@/components/shared/account-identity'; import { Button } from '@/components/ui/button'; import Header from '@/components/layout/header/Header'; -import EmptyScreen from '@/components/Status/EmptyScreen'; -import LoadingScreen from '@/components/Status/LoadingScreen'; -import { SupplyModalV2 } from '@/components/SupplyModalV2'; -import { TooltipContent } from '@/components/TooltipContent'; +import EmptyScreen from '@/components/status/empty-screen'; +import LoadingScreen from '@/components/status/loading-screen'; +import { SupplyModalV2 } from '@/modals/supply/supply-modal'; +import { TooltipContent } from '@/components/shared/tooltip-content'; import { useMarkets } from '@/hooks/useMarkets'; import useUserPositionsSummaryData, { type EarningsPeriod } from '@/hooks/useUserPositionsSummaryData'; import type { MarketPosition } from '@/utils/types'; -import { OnboardingModal } from './onboarding/OnboardingModal'; -import { PositionsSummaryTable } from './PositionsSummaryTable'; +import { OnboardingModal } from './components/onboarding/onboarding-modal'; +import { PositionsSummaryTable } from './components/positions-summary-table'; export default function Positions() { const [showSupplyModal, setShowSupplyModal] = useState(false); diff --git a/app/positions/utils/colors.ts b/src/features/positions/utils/colors.ts similarity index 100% rename from app/positions/utils/colors.ts rename to src/features/positions/utils/colors.ts diff --git a/app/rewards/components/InfoCard.tsx b/src/features/rewards/components/info-card.tsx similarity index 96% rename from app/rewards/components/InfoCard.tsx rename to src/features/rewards/components/info-card.tsx index a1e06a3d..6985bc34 100644 --- a/app/rewards/components/InfoCard.tsx +++ b/src/features/rewards/components/info-card.tsx @@ -1,8 +1,8 @@ import type { ReactNode } from 'react'; import { Tooltip } from '@heroui/react'; import { BsQuestionCircle } from 'react-icons/bs'; -import { Badge } from '@/components/common/Badge'; -import { TooltipContent } from '@/components/TooltipContent'; +import { Badge } from '@/components/ui/badge'; +import { TooltipContent } from '@/components/shared/tooltip-content'; type TooltipInfo = { title: string; diff --git a/app/rewards/components/RewardTable.tsx b/src/features/rewards/components/reward-table.tsx similarity index 99% rename from app/rewards/components/RewardTable.tsx rename to src/features/rewards/components/reward-table.tsx index a05c8f57..dc94e105 100644 --- a/app/rewards/components/RewardTable.tsx +++ b/src/features/rewards/components/reward-table.tsx @@ -8,7 +8,7 @@ import Link from 'next/link'; import type { Address } from 'viem'; import { useConnection, useChainId, useSwitchChain } from 'wagmi'; import { Button } from '@/components/ui/button'; -import { TokenIcon } from '@/components/TokenIcon'; +import { TokenIcon } from '@/components/shared/token-icon'; import { useMerklCampaigns } from '@/contexts/MerklCampaignsContext'; import type { DistributionResponseType, MerklRewardWithProofs } from '@/hooks/useRewards'; import { useClaimMerklRewards } from '@/hooks/useClaimMerklRewards'; diff --git a/app/rewards/components/RewardContent.tsx b/src/features/rewards/rewards-view.tsx similarity index 95% rename from app/rewards/components/RewardContent.tsx rename to src/features/rewards/rewards-view.tsx index 02cfe49d..e534ec50 100644 --- a/app/rewards/components/RewardContent.tsx +++ b/src/features/rewards/rewards-view.tsx @@ -7,13 +7,13 @@ import { BsQuestionCircle } from 'react-icons/bs'; import type { Address } from 'viem'; import { useReadContract } from 'wagmi'; import { erc20Abi } from 'viem'; -import { AccountIdentity } from '@/components/common/AccountIdentity'; +import { AccountIdentity } from '@/components/shared/account-identity'; import Header from '@/components/layout/header/Header'; -import EmptyScreen from '@/components/Status/EmptyScreen'; -import LoadingScreen from '@/components/Status/LoadingScreen'; -import { TokenIcon } from '@/components/TokenIcon'; -import { TooltipContent } from '@/components/TooltipContent'; -import { WrapProcessModal } from '@/components/WrapProcessModal'; +import EmptyScreen from '@/components/status/empty-screen'; +import LoadingScreen from '@/components/status/loading-screen'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { TooltipContent } from '@/components/shared/tooltip-content'; +import { WrapProcessModal } from '@/modals/wrap-process-modal'; import useUserRewards from '@/hooks/useRewards'; import { useWrapLegacyMorpho } from '@/hooks/useWrapLegacyMorpho'; @@ -21,8 +21,8 @@ import { formatBalance, formatSimple } from '@/utils/balance'; import { SupportedNetworks } from '@/utils/networks'; import { MORPHO_LEGACY, MORPHO_TOKEN_BASE, MORPHO_TOKEN_MAINNET } from '@/utils/tokens'; import type { MarketRewardType, RewardAmount, AggregatedRewardType } from '@/utils/types'; -import InfoCard from './InfoCard'; -import RewardTable from './RewardTable'; +import InfoCard from './components/info-card'; +import RewardTable from './components/reward-table'; export default function Rewards() { const { account } = useParams<{ account: string }>(); diff --git a/src/hooks/useMultiMarketSupply.ts b/src/hooks/useMultiMarketSupply.ts index 7a932c51..95b3863e 100644 --- a/src/hooks/useMultiMarketSupply.ts +++ b/src/hooks/useMultiMarketSupply.ts @@ -9,7 +9,7 @@ import { formatBalance } from '@/utils/balance'; import { getBundlerV2, MONARCH_TX_IDENTIFIER } from '@/utils/morpho'; import { SupportedNetworks } from '@/utils/networks'; import type { Market } from '@/utils/types'; -import { GAS_COSTS, GAS_MULTIPLIER } from 'app/markets/components/constants'; +import { GAS_COSTS, GAS_MULTIPLIER } from '@/features/markets/components/constants'; import { useERC20Approval } from './useERC20Approval'; import { useStyledToast } from './useStyledToast'; import { useUserMarketsCache } from './useUserMarketsCache'; diff --git a/src/hooks/useRebalance.ts b/src/hooks/useRebalance.ts index f4a90c34..a00e8096 100644 --- a/src/hooks/useRebalance.ts +++ b/src/hooks/useRebalance.ts @@ -5,7 +5,7 @@ import morphoBundlerAbi from '@/abis/bundlerV2'; import { useTransactionWithToast } from '@/hooks/useTransactionWithToast'; import { getBundlerV2, MONARCH_TX_IDENTIFIER } from '@/utils/morpho'; import type { GroupedPosition, RebalanceAction } from '@/utils/types'; -import { GAS_COSTS, GAS_MULTIPLIER } from 'app/markets/components/constants'; +import { GAS_COSTS, GAS_MULTIPLIER } from '@/features/markets/components/constants'; import { useERC20Approval } from './useERC20Approval'; import { useLocalStorage } from './useLocalStorage'; import { useMorphoAuthorization } from './useMorphoAuthorization'; diff --git a/src/hooks/useStyledToast.tsx b/src/hooks/useStyledToast.tsx index 3a0f4df4..dc3f509d 100644 --- a/src/hooks/useStyledToast.tsx +++ b/src/hooks/useStyledToast.tsx @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { toast, type ToastOptions } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; -import { StyledToast } from '../components/common/StyledToast'; +import { StyledToast } from '../components/ui/styled-toast'; export function useStyledToast() { const success = useCallback((title: string, message?: string, options?: ToastOptions) => { diff --git a/src/hooks/useSupplyMarket.ts b/src/hooks/useSupplyMarket.ts index ce5a1dc6..4c226599 100644 --- a/src/hooks/useSupplyMarket.ts +++ b/src/hooks/useSupplyMarket.ts @@ -11,7 +11,7 @@ import { useUserMarketsCache } from '@/hooks/useUserMarketsCache'; import { formatBalance } from '@/utils/balance'; import { getBundlerV2, MONARCH_TX_IDENTIFIER } from '@/utils/morpho'; import type { Market } from '@/utils/types'; -import { GAS_COSTS, GAS_MULTIPLIER } from 'app/markets/components/constants'; +import { GAS_COSTS, GAS_MULTIPLIER } from '@/features/markets/components/constants'; export type SupplyStepType = 'approve' | 'signing' | 'supplying'; diff --git a/src/hooks/useTransactionWithToast.tsx b/src/hooks/useTransactionWithToast.tsx index 5b9b6b0d..b49f48d9 100644 --- a/src/hooks/useTransactionWithToast.tsx +++ b/src/hooks/useTransactionWithToast.tsx @@ -2,7 +2,7 @@ import { useCallback, useEffect } from 'react'; import { toast } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import { useSendTransaction, useWaitForTransactionReceipt } from 'wagmi'; -import { StyledToast, TransactionToast } from '@/components/common/StyledToast'; +import { StyledToast, TransactionToast } from '@/components/ui/styled-toast'; import { getExplorerTxURL } from '../utils/external'; import type { SupportedNetworks } from '../utils/networks'; diff --git a/src/hooks/useVaultV2Deposit.ts b/src/hooks/useVaultV2Deposit.ts index a4d1e0e5..4da4dbfd 100644 --- a/src/hooks/useVaultV2Deposit.ts +++ b/src/hooks/useVaultV2Deposit.ts @@ -9,7 +9,7 @@ import { useStyledToast } from '@/hooks/useStyledToast'; import { useTransactionWithToast } from '@/hooks/useTransactionWithToast'; import { formatBalance } from '@/utils/balance'; import { getBundlerV2, MONARCH_TX_IDENTIFIER } from '@/utils/morpho'; -import { GAS_COSTS, GAS_MULTIPLIER } from 'app/markets/components/constants'; +import { GAS_COSTS, GAS_MULTIPLIER } from '@/features/markets/components/constants'; export type VaultDepositStepType = 'approve' | 'signing' | 'depositing'; diff --git a/src/components/BorrowModal.tsx b/src/modals/borrow/borrow-modal.tsx similarity index 94% rename from src/components/BorrowModal.tsx rename to src/modals/borrow/borrow-modal.tsx index 829beadb..cfa7d566 100644 --- a/src/components/BorrowModal.tsx +++ b/src/modals/borrow/borrow-modal.tsx @@ -5,9 +5,9 @@ import { erc20Abi } from 'viem'; import { Button } from '@/components/ui/button'; import { Modal, ModalHeader, ModalBody } from '@/components/common/Modal'; import type { Market, MarketPosition } from '@/utils/types'; -import { AddCollateralAndBorrow } from './Borrow/AddCollateralAndBorrow'; -import { WithdrawCollateralAndRepay } from './Borrow/WithdrawCollateralAndRepay'; -import { TokenIcon } from './TokenIcon'; +import { AddCollateralAndBorrow } from './components/add-collateral-and-borrow'; +import { WithdrawCollateralAndRepay } from './components/withdraw-collateral-and-repay'; +import { TokenIcon } from '@/components/shared/token-icon'; type BorrowModalProps = { market: Market; diff --git a/src/components/BorrowProcessModal.tsx b/src/modals/borrow/borrow-process-modal.tsx similarity index 98% rename from src/components/BorrowProcessModal.tsx rename to src/modals/borrow/borrow-process-modal.tsx index 112b7f6e..f1bbc627 100644 --- a/src/components/BorrowProcessModal.tsx +++ b/src/modals/borrow/borrow-process-modal.tsx @@ -4,7 +4,7 @@ import { FiArrowDownCircle } from 'react-icons/fi'; import { Modal, ModalBody, ModalHeader } from '@/components/common/Modal'; import type { BorrowStepType } from '@/hooks/useBorrowTransaction'; import type { Market } from '@/utils/types'; -import { MarketInfoBlock } from './common/MarketInfoBlock'; +import { MarketInfoBlock } from '@/features/markets/components/market-info-block'; type MarketBorrow = { market: Market; diff --git a/src/components/Borrow/AddCollateralAndBorrow.tsx b/src/modals/borrow/components/add-collateral-and-borrow.tsx similarity index 98% rename from src/components/Borrow/AddCollateralAndBorrow.tsx rename to src/modals/borrow/components/add-collateral-and-borrow.tsx index 82c90c1f..d3b9d384 100644 --- a/src/components/Borrow/AddCollateralAndBorrow.tsx +++ b/src/modals/borrow/components/add-collateral-and-borrow.tsx @@ -1,8 +1,8 @@ import { useState, useEffect, useCallback } from 'react'; import { Switch } from '@heroui/react'; import { ReloadIcon } from '@radix-ui/react-icons'; -import { LTVWarning } from '@/components/common/LTVWarning'; -import { MarketDetailsBlock } from '@/components/common/MarketDetailsBlock'; +import { LTVWarning } from '@/components/shared/ltv-warning'; +import { MarketDetailsBlock } from '@/features/markets/components/market-details-block'; import Input from '@/components/Input/Input'; import { useBorrowTransaction } from '@/hooks/useBorrowTransaction'; import { useLocalStorage } from '@/hooks/useLocalStorage'; @@ -10,8 +10,8 @@ import { formatBalance, formatReadable } from '@/utils/balance'; import { getNativeTokenSymbol } from '@/utils/networks'; import { isWrappedNativeToken } from '@/utils/tokens'; import type { Market, MarketPosition } from '@/utils/types'; -import { BorrowProcessModal } from '../BorrowProcessModal'; -import { TokenIcon } from '../TokenIcon'; +import { BorrowProcessModal } from '../borrow-process-modal'; +import { TokenIcon } from '@/components/shared/token-icon'; import { ExecuteTransactionButton } from '@/components/ui/ExecuteTransactionButton'; import { getLTVColor, getLTVProgressColor } from './helpers'; diff --git a/src/components/Borrow/helpers.ts b/src/modals/borrow/components/helpers.ts similarity index 100% rename from src/components/Borrow/helpers.ts rename to src/modals/borrow/components/helpers.ts diff --git a/src/components/Borrow/WithdrawCollateralAndRepay.tsx b/src/modals/borrow/components/withdraw-collateral-and-repay.tsx similarity index 97% rename from src/components/Borrow/WithdrawCollateralAndRepay.tsx rename to src/modals/borrow/components/withdraw-collateral-and-repay.tsx index 1e265496..d9cc9f0f 100644 --- a/src/components/Borrow/WithdrawCollateralAndRepay.tsx +++ b/src/modals/borrow/components/withdraw-collateral-and-repay.tsx @@ -1,13 +1,13 @@ import { useMemo, useState, useEffect, useCallback } from 'react'; import { ReloadIcon } from '@radix-ui/react-icons'; -import { LTVWarning } from '@/components/common/LTVWarning'; +import { LTVWarning } from '@/components/shared/ltv-warning'; import Input from '@/components/Input/Input'; -import { RepayProcessModal } from '@/components/RepayProcessModal'; +import { RepayProcessModal } from '@/modals/borrow/repay-process-modal'; import { useRepayTransaction } from '@/hooks/useRepayTransaction'; import { formatBalance } from '@/utils/balance'; import type { Market, MarketPosition } from '@/utils/types'; -import { MarketDetailsBlock } from '../common/MarketDetailsBlock'; -import { TokenIcon } from '../TokenIcon'; +import { MarketDetailsBlock } from '@/features/markets/components/market-details-block'; +import { TokenIcon } from '@/components/shared/token-icon'; import { ExecuteTransactionButton } from '@/components/ui/ExecuteTransactionButton'; import { getLTVColor, getLTVProgressColor } from './helpers'; diff --git a/src/components/RepayProcessModal.tsx b/src/modals/borrow/repay-process-modal.tsx similarity index 97% rename from src/components/RepayProcessModal.tsx rename to src/modals/borrow/repay-process-modal.tsx index a92e010d..ff83dff5 100644 --- a/src/components/RepayProcessModal.tsx +++ b/src/modals/borrow/repay-process-modal.tsx @@ -3,7 +3,7 @@ import { FaCheckCircle, FaCircle } from 'react-icons/fa'; import { FiRepeat } from 'react-icons/fi'; import { Modal, ModalBody, ModalHeader } from '@/components/common/Modal'; import type { Market } from '@/utils/types'; -import { MarketInfoBlock } from './common/MarketInfoBlock'; +import { MarketInfoBlock } from '@/features/markets/components/market-info-block'; type RepayProcessModalProps = { market: Market; diff --git a/src/components/RiskNotificationModal.tsx b/src/modals/risk-notification-modal.tsx similarity index 100% rename from src/components/RiskNotificationModal.tsx rename to src/modals/risk-notification-modal.tsx diff --git a/src/components/settings/BlacklistedMarketsModal.tsx b/src/modals/settings/blacklisted-markets-modal.tsx similarity index 99% rename from src/components/settings/BlacklistedMarketsModal.tsx rename to src/modals/settings/blacklisted-markets-modal.tsx index c30add26..4a118587 100644 --- a/src/components/settings/BlacklistedMarketsModal.tsx +++ b/src/modals/settings/blacklisted-markets-modal.tsx @@ -6,7 +6,7 @@ import { FiPlus, FiX } from 'react-icons/fi'; import { MdBlockFlipped } from 'react-icons/md'; import { Button } from '@/components/ui/button'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '@/components/common/Modal'; -import { MarketIdentity, MarketIdentityMode, MarketIdentityFocus } from '@/components/MarketIdentity'; +import { MarketIdentity, MarketIdentityMode, MarketIdentityFocus } from '@/features/markets/components/market-identity'; import { useMarkets } from '@/contexts/MarketsContext'; import type { Market } from '@/utils/types'; diff --git a/src/components/settings/CustomRpcSettings.tsx b/src/modals/settings/custom-rpc-settings.tsx similarity index 98% rename from src/components/settings/CustomRpcSettings.tsx rename to src/modals/settings/custom-rpc-settings.tsx index e54f99dc..ea8288cc 100644 --- a/src/components/settings/CustomRpcSettings.tsx +++ b/src/modals/settings/custom-rpc-settings.tsx @@ -4,10 +4,10 @@ import { useState } from 'react'; import Image from 'next/image'; import { Button } from '@/components/ui/button'; import { Modal, ModalBody, ModalHeader } from '@/components/common/Modal'; -import { Spinner } from '@/components/common/Spinner'; +import { Spinner } from '@/components/ui/spinner'; import { useStyledToast } from '@/hooks/useStyledToast'; import { type SupportedNetworks, networks } from '@/utils/networks'; -import { useCustomRpcContext } from '../providers/CustomRpcProvider'; +import { useCustomRpcContext } from '@/components/providers/CustomRpcProvider'; // Helper function to get expected chain ID for each network const getExpectedChainId = (network: SupportedNetworks): number => { diff --git a/src/components/settings/TrustedVaultsModal.tsx b/src/modals/settings/trusted-vaults-modal.tsx similarity index 98% rename from src/components/settings/TrustedVaultsModal.tsx rename to src/modals/settings/trusted-vaults-modal.tsx index af8612e9..53a766f1 100644 --- a/src/components/settings/TrustedVaultsModal.tsx +++ b/src/modals/settings/trusted-vaults-modal.tsx @@ -6,10 +6,10 @@ import { FiChevronDown, FiChevronUp } from 'react-icons/fi'; import { GoShield, GoShieldCheck } from 'react-icons/go'; import { IoWarningOutline } from 'react-icons/io5'; import { Button } from '@/components/ui/button'; -import { IconSwitch } from '@/components/common/IconSwitch'; +import { IconSwitch } from '@/components/ui/icon-switch'; import { Modal, ModalHeader, ModalBody, ModalFooter } from '@/components/common/Modal'; -import { NetworkIcon } from '@/components/common/NetworkIcon'; -import { VaultIdentity } from '@/components/vaults/VaultIdentity'; +import { NetworkIcon } from '@/components/shared/network-icon'; +import { VaultIdentity } from '@/features/autovault/components/vault-identity'; import { known_vaults, type KnownVault, type TrustedVault } from '@/constants/vaults/known_vaults'; import { useAllMorphoVaults } from '@/hooks/useAllMorphoVaults'; diff --git a/src/components/SupplyModalContent.tsx b/src/modals/supply/supply-modal-content.tsx similarity index 98% rename from src/components/SupplyModalContent.tsx rename to src/modals/supply/supply-modal-content.tsx index f989f78e..f8225b9d 100644 --- a/src/components/SupplyModalContent.tsx +++ b/src/modals/supply/supply-modal-content.tsx @@ -9,7 +9,7 @@ import { getNativeTokenSymbol } from '@/utils/networks'; import { isWrappedNativeToken } from '@/utils/tokens'; import type { Market } from '@/utils/types'; import { ExecuteTransactionButton } from '@/components/ui/ExecuteTransactionButton'; -import { SupplyProcessModal } from './SupplyProcessModal'; +import { SupplyProcessModal } from './supply-process-modal'; type SupplyModalContentProps = { market: Market; diff --git a/src/components/SupplyModalV2.tsx b/src/modals/supply/supply-modal.tsx similarity index 94% rename from src/components/SupplyModalV2.tsx rename to src/modals/supply/supply-modal.tsx index 0f36e96b..07b42b06 100644 --- a/src/components/SupplyModalV2.tsx +++ b/src/modals/supply/supply-modal.tsx @@ -3,10 +3,10 @@ import { LuArrowRightLeft } from 'react-icons/lu'; import { Modal, ModalBody, ModalHeader } from '@/components/common/Modal'; import { useFreshMarketsState } from '@/hooks/useFreshMarketsState'; import type { Market, MarketPosition } from '@/utils/types'; -import { MarketDetailsBlock } from './common/MarketDetailsBlock'; -import { SupplyModalContent } from './SupplyModalContent'; -import { TokenIcon } from './TokenIcon'; -import { WithdrawModalContent } from './WithdrawModalContent'; +import { MarketDetailsBlock } from '@/features/markets/components/market-details-block'; +import { SupplyModalContent } from './supply-modal-content'; +import { TokenIcon } from '@/components/shared/token-icon'; +import { WithdrawModalContent } from './withdraw-modal-content'; type SupplyModalV2Props = { market: Market; position?: MarketPosition | null; diff --git a/src/components/SupplyProcessModal.tsx b/src/modals/supply/supply-process-modal.tsx similarity index 98% rename from src/components/SupplyProcessModal.tsx rename to src/modals/supply/supply-process-modal.tsx index 0e11ea82..84af0c04 100644 --- a/src/components/SupplyProcessModal.tsx +++ b/src/modals/supply/supply-process-modal.tsx @@ -3,7 +3,7 @@ import { FaCheckCircle, FaCircle } from 'react-icons/fa'; import { FiUpload } from 'react-icons/fi'; import { Modal, ModalBody, ModalHeader } from '@/components/common/Modal'; import type { Market } from '@/utils/types'; -import { MarketInfoBlock } from './common/MarketInfoBlock'; +import { MarketInfoBlock } from '@/features/markets/components/market-info-block'; type MarketSupply = { market: Market; diff --git a/src/components/WithdrawModalContent.tsx b/src/modals/supply/withdraw-modal-content.tsx similarity index 100% rename from src/components/WithdrawModalContent.tsx rename to src/modals/supply/withdraw-modal-content.tsx diff --git a/src/components/WrapProcessModal.tsx b/src/modals/wrap-process-modal.tsx similarity index 100% rename from src/components/WrapProcessModal.tsx rename to src/modals/wrap-process-modal.tsx