diff --git a/apps/tangle-cloud/src/components/RequireWallet.tsx b/apps/tangle-cloud/src/components/RequireWallet.tsx index 4982f89cf..ca182eb0b 100644 --- a/apps/tangle-cloud/src/components/RequireWallet.tsx +++ b/apps/tangle-cloud/src/components/RequireWallet.tsx @@ -32,55 +32,35 @@ const RequireWallet: FC = ({ variant="sandbox" className="w-full overflow-hidden border-border bg-card shadow-[var(--shadow-card)]" > - +
-
-
+
+

{eyebrow}

-
+
{title}
-

+

{description}

{checks.length > 0 && ( -
+
{checks.map((check) => ( -
{check} -
+ ))}
)}
-
-
- {['Account', 'Network', 'Tx', 'History'].map((label) => ( -
-

- {label} -

-

- Locked -

-
- ))} -
- -
- -
-
+
diff --git a/apps/tangle-cloud/src/components/Sidebar.tsx b/apps/tangle-cloud/src/components/Sidebar.tsx index 4eb4d649d..634d42918 100644 --- a/apps/tangle-cloud/src/components/Sidebar.tsx +++ b/apps/tangle-cloud/src/components/Sidebar.tsx @@ -115,17 +115,11 @@ const Sidebar: FC = ({ isExpandedByDefault, onExpandedChange }) => { <>
+ +
@@ -224,6 +223,10 @@ const SidebarNav = ({ ); +// Pinned to the sidebar's right edge so it's affordance-clear (matches VS +// Code / Linear / Vercel patterns) and never competes with the nav stack +// for the "what's a nav item" mental model. Floats over the border so it +// stays visible whether the sidebar is expanded (w-64) or collapsed (w-16). const SidebarCollapseButton = ({ isExpanded, onClick, @@ -233,15 +236,23 @@ const SidebarCollapseButton = ({ }) => ( ); diff --git a/apps/tangle-cloud/src/pages/earnings/page.tsx b/apps/tangle-cloud/src/pages/earnings/page.tsx index 65e75ce14..fd95f5bba 100644 --- a/apps/tangle-cloud/src/pages/earnings/page.tsx +++ b/apps/tangle-cloud/src/pages/earnings/page.tsx @@ -47,31 +47,7 @@ const EarningsPage: FC = () => { if (!isConnected) { return (
- - -
-
-
-

- Publisher earnings -

-

- Track blueprint payout totals and indexed payment events for - the connected publisher wallet. -

-
- -
- - - -
-
- - + { description="Load publisher balances, payout totals, and indexed payment events for the connected wallet." checks={['Token totals', 'Payout events', 'Explorer links']} /> -
); } return (
- - -
-
-
-

- Publisher earnings -

-

- Totals are derived from indexed on-chain payout events. -

-
- -
- - - -
-
- - + {isLoading ? : null} {!isLoading && isUnsupportedSchema && data ? ( @@ -157,85 +109,22 @@ const EarningsPage: FC = () => { export default EarningsPage; -const EarningsPreviewPanel = () => ( - - -
- - - -
- -
-
- Asset - Earned - Last payout - Status -
- {[ - ['TNT', 'Connect wallet', 'Indexed event', 'Locked'], - ['USDC', 'Connect wallet', 'Service payout', 'Locked'], - ['ETH', 'Connect wallet', 'Explorer link', 'Locked'], - ].map(([asset, earned, payout, status]) => ( -
- {asset} - {earned} - {payout} - - {status} - -
- ))} +const EarningsHero = () => ( + + +
+
+

+ Publisher earnings +

+

+ Track blueprint payout totals and indexed payment events for the + connected publisher wallet. +

); - -const PreviewItem = ({ - label, - title, - description, -}: { - label: string; - title: string; - description: string; -}) => ( -
-

- {label} -

-
- {title} -
-

- {description} -

-
-); - -const HeroMetric = ({ label, value }: { label: string; value: string }) => ( -
-

- {label} -

-

- {value} -

-
-); diff --git a/apps/tangle-cloud/src/pages/instances/AccountStatsCard.tsx b/apps/tangle-cloud/src/pages/instances/AccountStatsCard.tsx index a8fbeebd4..23dd84609 100644 --- a/apps/tangle-cloud/src/pages/instances/AccountStatsCard.tsx +++ b/apps/tangle-cloud/src/pages/instances/AccountStatsCard.tsx @@ -120,45 +120,30 @@ export const AccountStatsCard: FC = (props) => { rootProps?.className, )} > - -
+ +
TC -
+

Account

- Wallet required + Connect a wallet to load your account

Connect to load deployed services, operator registrations, and - account-scoped lifecycle events. + account-scoped lifecycle events. Public catalog and operator + registry data load below without a wallet.

-
- -
- -
- {['Services', 'Approvals', 'Jobs', 'Balances'].map((label) => ( -
-

- {label} -

-

- Locked -

-
- ))} +
+
diff --git a/apps/tangle-cloud/src/pages/instances/TotalValueLocked/index.tsx b/apps/tangle-cloud/src/pages/instances/TotalValueLocked/index.tsx index 7f6161bb4..8f520aa8c 100644 --- a/apps/tangle-cloud/src/pages/instances/TotalValueLocked/index.tsx +++ b/apps/tangle-cloud/src/pages/instances/TotalValueLocked/index.tsx @@ -4,82 +4,46 @@ import { Card, CardContent, Skeleton, - Tabs, - TabsContent, - TabsList, - TabsTrigger, } from '@tangle-network/sandbox-ui/primitives'; -import { useState } from 'react'; import { useAccount } from 'wagmi'; import { useStakingOverview } from '@tangle-network/tangle-shared-ui/data/staking'; import { formatUnits } from 'viem'; import { Link } from 'react-router'; +import ConnectWalletButton from '@tangle-network/tangle-shared-ui/components/ConnectWalletButton'; import { TangleDAppPagePath } from '../../../types'; -enum TotalValueLockedTab { - TVL = 'tvl', -} - +// Wallet-scoped deposits panel. Previously titled "Total Value Locked" which +// implied a network-wide metric — but the underlying hook (useStakingOverview) +// returns only the connected wallet's deposits. Renamed to "My Deposits" so +// the heading matches the data. export const TotalValueLockedTabs = () => { - const [selectedTab, setSelectedTab] = useState(TotalValueLockedTab.TVL); const { isConnected } = useAccount(); return ( - - setSelectedTab(tab as TotalValueLockedTab) - } - className="w-full space-y-5" - > - - - - Total Value Locked - - - - - - - {!isConnected ? : } - - - - + + +
+ + My deposits +
+ {!isConnected ? : } +
+
); }; const DisconnectedTvlState = () => ( -
-
-

- Wallet required -

-
- Connect to load locked value +
+
+
+ Connect a wallet to view your deposits
-

- Deposits, running services, and operator exposure are shown from the - connected account. +

+ Personal deposits, running services, and operator exposure load once a + wallet is connected. Public chain data on this page loads without one.

-
- {['Deposits', 'Services', 'Exposure', 'Claims'].map((label) => ( -
-

- {label} -

-

Locked

-
- ))} -
+
); diff --git a/apps/tangle-cloud/src/pages/instances/page.tsx b/apps/tangle-cloud/src/pages/instances/page.tsx index ccaed0f04..713cfbdda 100644 --- a/apps/tangle-cloud/src/pages/instances/page.tsx +++ b/apps/tangle-cloud/src/pages/instances/page.tsx @@ -16,22 +16,14 @@ const Page = () => { >
-
-
-

- Instances -

-

- Monitor service instances, operator approvals, job records, and - account balances. -

-
- -
- - - -
+
+

+ Instances +

+

+ Monitor service instances, operator approvals, job records, and + account balances. +

@@ -41,7 +33,7 @@ const Page = () => { setRefreshTrigger={setRefreshTrigger} /> -
+
@@ -51,14 +43,3 @@ const Page = () => { }; export default Page; - -const HeroMetric = ({ label, value }: { label: string; value: string }) => ( -
-

- {label} -

-

- {value} -

-
-); diff --git a/apps/tangle-cloud/src/pages/rewards/page.tsx b/apps/tangle-cloud/src/pages/rewards/page.tsx index ad1302057..ee5da966d 100644 --- a/apps/tangle-cloud/src/pages/rewards/page.tsx +++ b/apps/tangle-cloud/src/pages/rewards/page.tsx @@ -302,30 +302,7 @@ const RewardsPage: FC = () => { if (!isConnected) { return (
- - -
-
-
-

- Rewards -

-

- Claim operator and delegator rewards from the active network. -

-
- -
- - - -
-
- - + { description="Load pending balances, claimable assets, and claim history for the connected account." checks={['Pending rewards', 'Claimable assets', 'Claim history']} /> -
); } return (
- - -
-
-
-

- Rewards -

-

- Pending balances come from contract state. Claim history comes - from indexed on-chain events. -

-
- -
- - - -
-
- - + {configuredEndpoint && ( = ({ ); }; -const RewardsPreviewPanel = () => ( - - -
- - - -
- -
-
- Asset - Claimable - Action - History -
- {[ - ['TNT', 'Connect wallet', 'Claim token', 'Locked'], - ['USDC', 'Connect wallet', 'Claim selected', 'Locked'], - ['ETH', 'Connect wallet', 'Claim all', 'Locked'], - ].map(([asset, amount, action, history]) => ( -
- {asset} - {amount} - {action} - - {history} - -
- ))} +const RewardsHero = () => ( + + +
+
+

+ Rewards +

+

+ Pending balances come from contract state; claim history comes from + indexed on-chain events. +

); -const PreviewItem = ({ - label, - title, - description, -}: { - label: string; - title: string; - description: string; -}) => ( -
-

- {label} -

-
- {title} -
-

- {description} -

-
-); - -const HeroMetric = ({ label, value }: { label: string; value: string }) => ( -
-

- {label} -

-

- {value} -

-
-); - const PendingAssetCell: FC<{ token: Address; addressExplorerUrl?: string }> = ({ token, addressExplorerUrl,