diff --git a/frontend/app/globals.css b/frontend/app/globals.css index 456a425..338b150 100644 --- a/frontend/app/globals.css +++ b/frontend/app/globals.css @@ -63,6 +63,7 @@ from { opacity: 0; } + to { opacity: 1; } @@ -73,6 +74,7 @@ opacity: 0; transform: translateY(20px); } + to { opacity: 1; transform: translateY(0); @@ -84,6 +86,7 @@ opacity: 0; transform: translateY(-8px); } + to { opacity: 1; transform: translateY(0); @@ -91,20 +94,24 @@ } @keyframes pulse-slow { + 0%, 100% { opacity: 0.1; } + 50% { opacity: 0.3; } } @keyframes float { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-10px); } @@ -206,11 +213,9 @@ body { .wallet-card { border-radius: 1rem; border: 1px solid rgba(19, 38, 61, 0.12); - background: linear-gradient( - 165deg, - rgba(255, 255, 255, 0.9), - rgba(239, 247, 255, 0.62) - ); + background: linear-gradient(165deg, + rgba(255, 255, 255, 0.9), + rgba(239, 247, 255, 0.62)); padding: 1rem; display: flex; flex-direction: column; @@ -258,11 +263,9 @@ body { border: 0; border-radius: 0.75rem; height: 2.65rem; - background: linear-gradient( - 90deg, - var(--accent-strong), - var(--wallet-accent) - ); + background: linear-gradient(90deg, + var(--accent-strong), + var(--wallet-accent)); color: #ffffff; font-size: 0.95rem; font-weight: 600; @@ -504,11 +507,9 @@ body { .dashboard-stat-card { border-radius: 0.9rem; border: 1px solid rgba(19, 38, 61, 0.12); - background: linear-gradient( - 160deg, - rgba(255, 255, 255, 0.88), - rgba(242, 250, 255, 0.76) - ); + background: linear-gradient(160deg, + rgba(255, 255, 255, 0.88), + rgba(242, 250, 255, 0.76)); padding: 0.9rem; } @@ -550,20 +551,16 @@ body { .dashboard-analytics-card { border-radius: 0.9rem; border: 1px solid rgba(19, 38, 61, 0.11); - background: linear-gradient( - 165deg, - rgba(250, 255, 255, 0.92), - rgba(236, 247, 252, 0.74) - ); + background: linear-gradient(165deg, + rgba(250, 255, 255, 0.92), + rgba(236, 247, 252, 0.74)); padding: 0.85rem; } .dashboard-analytics-card[data-unavailable="true"] { - background: linear-gradient( - 165deg, - rgba(247, 250, 253, 0.88), - rgba(236, 242, 249, 0.75) - ); + background: linear-gradient(165deg, + rgba(247, 250, 253, 0.88), + rgba(236, 242, 249, 0.75)); } .dashboard-analytics-card p { @@ -1074,6 +1071,7 @@ body { opacity: 0; transform: translateY(16px); } + to { opacity: 1; transform: translateY(0); @@ -1085,6 +1083,7 @@ body { opacity: 0; transform: translateY(8px); } + to { opacity: 1; transform: translateY(0); @@ -1102,6 +1101,7 @@ body { opacity: 0.84; transform: scale(0.88); } + to { opacity: 1; transform: scale(1.04); @@ -1129,12 +1129,10 @@ body { left: 0; right: 0; height: 1px; - background: linear-gradient( - 90deg, - transparent, - var(--glass-highlight), - transparent - ); + background: linear-gradient(90deg, + transparent, + var(--glass-highlight), + transparent); z-index: 1; } @@ -1273,13 +1271,13 @@ body { .stepper__label { font-size: 0.625rem; } - + .stepper__circle { width: 2rem; height: 2rem; font-size: 0.75rem; } - + .stepper__line { top: 1rem; } diff --git a/frontend/components/IncomingStreams.tsx b/frontend/components/IncomingStreams.tsx index 8b66900..603beae 100644 --- a/frontend/components/IncomingStreams.tsx +++ b/frontend/components/IncomingStreams.tsx @@ -33,28 +33,31 @@ const IncomingStreams: React.FC = ({ streams }) => { }; return ( -
-
-

Incoming Streams

-
- +
+
+
+

Incoming Payment Streams

+

Manage and withdraw from your active incoming streams

+
+
+
-
- - +
+
+ @@ -81,8 +84,12 @@ const IncomingStreams: React.FC = ({ streams }) => {
Sender Token @@ -91,12 +98,13 @@ const IncomingStreams: React.FC = ({ streams }) => { ))}
- {filteredStreams.length === 0 && ( -
- No {filter !== 'All' ? filter.toLowerCase() : ''} streams found. -
- )}
+ + {filteredStreams.length === 0 && ( +
+

No incoming streams found matching the filter.

+
+ )}
); }; diff --git a/frontend/lib/dashboard.ts b/frontend/lib/dashboard.ts index f491c8c..ea0e356 100644 --- a/frontend/lib/dashboard.ts +++ b/frontend/lib/dashboard.ts @@ -14,7 +14,7 @@ export interface Stream { recipient: string; amount: number; token: string; - status: "Active" | "Completed" | "Cancelled"; + status: "Active" | "Completed" | "Paused"; deposited: number; withdrawn: number; date: string; @@ -146,34 +146,34 @@ export function getDashboardAnalytics( { id: "total-volume-30d", label: "Total Volume (30D)", - detail: "All incoming and outgoing activity in the last 30 days", + detail: "Total throughput in the last 30 days", format: "currency", value: null, - unavailableText: "No recent activity data", + unavailableText: "Insufficient historical data", }, { id: "net-flow-30d", label: "Net Flow (30D)", - detail: "Incoming minus outgoing activity over the same period", + detail: "Net capital flow over the last 30 days", format: "currency", value: null, - unavailableText: "No recent activity data", + unavailableText: "Insufficient historical data", }, { id: "avg-value-per-stream", - label: "Avg Locked Value / Active Stream", - detail: "Current TVL divided by active stream count", + label: "Avg Value / Stream", + detail: "Mean capital locked across active streams", format: "currency", value: null, - unavailableText: "No active stream data", + unavailableText: "No active streams", }, { id: "stream-utilization", label: "Stream Utilization", - detail: "Total withdrawn as a share of total deposited funds", + detail: "Share of total capital already withdrawn", format: "percent", value: null, - unavailableText: "No stream funding data", + unavailableText: "No withdrawal data", }, ]; } @@ -215,23 +215,23 @@ export function getDashboardAnalytics( { id: "total-volume-30d", label: "Total Volume (30D)", - detail: "All incoming and outgoing activity in the last 30 days", + detail: "Total throughput in the last 30 days", format: "currency", - value: recentActivity.length > 0 ? totalVolume30d : null, - unavailableText: "No activity in the last 30 days", + value: totalVolume30d, + unavailableText: "Insufficient historical data", }, { id: "net-flow-30d", label: "Net Flow (30D)", - detail: "Incoming minus outgoing activity over the same period", + detail: "Net capital flow over the last 30 days", format: "currency", - value: recentActivity.length > 0 ? netFlow30d : null, - unavailableText: "No activity in the last 30 days", + value: netFlow30d, + unavailableText: "Insufficient historical data", }, { id: "avg-value-per-stream", - label: "Avg Locked Value / Active Stream", - detail: "Current TVL divided by active stream count", + label: "Avg Value / Stream", + detail: "Mean capital locked across active streams", format: "currency", value: avgValuePerStream, unavailableText: "No active streams", @@ -239,10 +239,10 @@ export function getDashboardAnalytics( { id: "stream-utilization", label: "Stream Utilization", - detail: "Total withdrawn as a share of total deposited funds", + detail: "Share of total capital already withdrawn", format: "percent", value: utilization, - unavailableText: "No deposited funds yet", + unavailableText: "No withdrawal data", }, ]; }