Skip to content

Commit 271e3ab

Browse files
authored
Merge pull request #251 from jessicanath/feat/issue-169-precision-mode-tooltip
feat: add creator metrics tooltip for precision mode toggle
2 parents 71d323b + cd011e1 commit 271e3ab

2 files changed

Lines changed: 83 additions & 1 deletion

File tree

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import { cn } from '@/lib/utils';
2+
import { Tooltip } from '@/components/ui/tooltip';
3+
4+
export type PrecisionMode = 'compact' | 'full';
5+
6+
interface PrecisionModeToggleProps {
7+
mode: PrecisionMode;
8+
onChange: (mode: PrecisionMode) => void;
9+
className?: string;
10+
}
11+
12+
const PRECISION_TOOLTIP =
13+
'Compact shows abbreviated values (e.g. 1.2K). Full shows exact numbers.';
14+
15+
/**
16+
* Toggle between compact and full precision display for creator metrics.
17+
* Includes an accessible tooltip explaining the difference between modes.
18+
*/
19+
const PrecisionModeToggle: React.FC<PrecisionModeToggleProps> = ({
20+
mode,
21+
onChange,
22+
className,
23+
}) => {
24+
return (
25+
<Tooltip content={PRECISION_TOOLTIP}>
26+
<div
27+
role="group"
28+
aria-label="Metrics display precision"
29+
className={cn(
30+
'inline-flex items-center rounded-lg border border-white/10 bg-white/[0.05] p-0.5',
31+
className
32+
)}
33+
>
34+
<button
35+
type="button"
36+
role="radio"
37+
aria-checked={mode === 'compact'}
38+
onClick={() => onChange('compact')}
39+
className={cn(
40+
'rounded-md px-3 py-1 text-xs font-semibold uppercase tracking-[0.14em] transition-colors',
41+
mode === 'compact'
42+
? 'bg-amber-400/20 text-amber-300'
43+
: 'text-white/45 hover:text-white/70'
44+
)}
45+
>
46+
Compact
47+
</button>
48+
<button
49+
type="button"
50+
role="radio"
51+
aria-checked={mode === 'full'}
52+
onClick={() => onChange('full')}
53+
className={cn(
54+
'rounded-md px-3 py-1 text-xs font-semibold uppercase tracking-[0.14em] transition-colors',
55+
mode === 'full'
56+
? 'bg-amber-400/20 text-amber-300'
57+
: 'text-white/45 hover:text-white/70'
58+
)}
59+
>
60+
Full
61+
</button>
62+
</div>
63+
</Tooltip>
64+
);
65+
};
66+
67+
export default PrecisionModeToggle;

‎src/pages/LandingPage.tsx‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import NetworkMismatchBanner from '@/components/common/NetworkMismatchBanner';
2626
import { useNetworkMismatch } from '@/hooks/useNetworkMismatch';
2727
import showToast from '@/utils/toast.util';
2828
import { formatCompactNumber, formatNumber } from '@/utils/numberFormat.utils';
29+
import PrecisionModeToggle, { type PrecisionMode } from '@/components/common/PrecisionModeToggle';
2930

3031
const FEATURED_CREATOR_FACTS = [
3132
{ label: 'Membership', value: 'Collectors Circle' },
@@ -143,6 +144,7 @@ function LandingPage() {
143144
return PROFILE_TABS.includes(hash) ? hash : 'overview';
144145
});
145146
const [featuredHoldings, setFeaturedHoldings] = useState(3);
147+
const [precisionMode, setPrecisionMode] = useState<PrecisionMode>('compact');
146148
const [tradeSide, setTradeSide] = useState<TradeSide>('buy');
147149
const [tradeDialogOpen, setTradeDialogOpen] = useState(false);
148150
const [tradeSubmitting, setTradeSubmitting] = useState(false);
@@ -602,9 +604,22 @@ function LandingPage() {
602604
},
603605
]}
604606
/>
607+
<div className="flex items-center justify-between gap-2">
608+
<span className="text-[0.65rem] font-bold uppercase tracking-[0.22em] text-white/40">
609+
Metrics display
610+
</span>
611+
<PrecisionModeToggle
612+
mode={precisionMode}
613+
onChange={setPrecisionMode}
614+
/>
615+
</div>
605616
<CreatorLabeledStatRow
606617
label="Creator Share Supply"
607-
value={`${formatCompactNumber(250)} shares available`}
618+
value={
619+
precisionMode === 'compact'
620+
? `${formatCompactNumber(250)} shares available`
621+
: `${formatNumber(250)} shares available`
622+
}
608623
/>
609624
{isNetworkMismatch && <NetworkMismatchBanner />}
610625
<div className="hidden md:flex items-center gap-3">

0 commit comments

Comments
 (0)