feat: migrate all icons to Lucide React
All checks were successful
Build & Publish / publish (push) Successful in 1m2s
All checks were successful
Build & Publish / publish (push) Successful in 1m2s
Replace unicode characters, emoji, and inline SVGs with lucide-react components across the entire design system and page layer. Update tests to assert on SVG elements instead of text content. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { useState, useMemo } from 'react'
|
||||
import React, { useState, useMemo } from 'react'
|
||||
import { useParams, useNavigate } from 'react-router-dom'
|
||||
import { TrendingUp, TrendingDown, ArrowRight, ExternalLink, AlertTriangle } from 'lucide-react'
|
||||
import styles from './Dashboard.module.css'
|
||||
|
||||
// Layout
|
||||
@@ -43,10 +44,10 @@ const ACCENT_TO_COLOR: Record<KpiMetric['accent'], string> = {
|
||||
warning: 'var(--warning)',
|
||||
}
|
||||
|
||||
const TREND_ICONS: Record<KpiMetric['trend'], string> = {
|
||||
up: '\u2191',
|
||||
down: '\u2193',
|
||||
neutral: '\u2192',
|
||||
const TREND_ICONS: Record<KpiMetric['trend'], React.ReactNode> = {
|
||||
up: <TrendingUp size={12} />,
|
||||
down: <TrendingDown size={12} />,
|
||||
neutral: <ArrowRight size={12} />,
|
||||
}
|
||||
|
||||
function sentimentToVariant(sentiment: KpiMetric['trendSentiment']): 'success' | 'error' | 'muted' {
|
||||
@@ -60,7 +61,7 @@ function sentimentToVariant(sentiment: KpiMetric['trendSentiment']): 'success' |
|
||||
const kpiItems: KpiItem[] = kpiMetrics.map((m) => ({
|
||||
label: m.label,
|
||||
value: m.unit ? `${m.value} ${m.unit}` : m.value,
|
||||
trend: { label: `${TREND_ICONS[m.trend]} ${m.trendValue}`, variant: sentimentToVariant(m.trendSentiment) },
|
||||
trend: { label: <><span style={{ display: 'inline-flex', verticalAlign: 'middle' }}>{TREND_ICONS[m.trend]}</span> {m.trendValue}</>, variant: sentimentToVariant(m.trendSentiment) },
|
||||
subtitle: m.detail,
|
||||
sparkline: m.sparkline,
|
||||
borderColor: ACCENT_TO_COLOR[m.accent],
|
||||
@@ -206,7 +207,7 @@ export function Dashboard() {
|
||||
navigate(`/exchanges/${row.id}`)
|
||||
}}
|
||||
>
|
||||
↗
|
||||
<ExternalLink size={14} />
|
||||
</button>
|
||||
),
|
||||
}
|
||||
@@ -303,7 +304,7 @@ export function Dashboard() {
|
||||
className={styles.openDetailLink}
|
||||
onClick={() => navigate(`/exchanges/${selectedExchange.id}`)}
|
||||
>
|
||||
Open full details →
|
||||
Open full details <ArrowRight size={14} style={{ verticalAlign: 'middle' }} />
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -428,7 +429,7 @@ export function Dashboard() {
|
||||
expandedContent={(row) =>
|
||||
row.errorMessage ? (
|
||||
<div className={styles.inlineError}>
|
||||
<span className={styles.inlineErrorIcon}>⚠</span>
|
||||
<span className={styles.inlineErrorIcon}><AlertTriangle size={14} /></span>
|
||||
<div>
|
||||
<div className={styles.inlineErrorText}>{row.errorMessage}</div>
|
||||
<div className={styles.inlineErrorHint}>Click to view full stack trace</div>
|
||||
|
||||
Reference in New Issue
Block a user