11'use client'
22
3- import { ArrowLeftRight, Pointer, Send } from 'lucide-react'
43import { useState } from 'react'
5- import { LiveBadge } from '@/components/common /live-badge '
4+ import { LiveDot } from '@/components/ui /live-dot '
65import { SectionHeader } from '@/components/ui/section-header'
76import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'
87import { useSwapEvents } from '@/hooks/use-swap-events'
98import { useTransferEvents } from '@/hooks/use-transfer-events'
10- import { cn } from '@/lib/utils'
9+ import { HoverPauseFooter } from '../common/hover-pause-footer'
10+ import { PauseResumeControl } from '../common/pause-resume-control'
1111import { Swaps } from './swaps'
1212import { Transfers } from './transfers'
1313
14- const TAB_TRIGGER_CLASS = cn(
15- 'mx-1 w-36 flex items-center justify-center gap-2 px-4 py-3',
16- 'rounded-none border-0 bg-transparent cursor-pointer transition-colors',
17- 'text-zinc-400 data-[state=active]:text-tracker-active',
18- 'relative after:absolute after:bottom-0 after:left-0 after:right-0 after:h-0.5',
19- 'after:bg-transparent data-[state=active]:after:bg-tracker-active',
20- 'data-[state=active]:bg-transparent data-[state=active]:shadow-none',
21- )
22-
2314export function SwapTransferTracker() {
2415 const { allSwaps, isConnected: isSwapConnected } = useSwapEvents()
2516 const {
@@ -33,27 +24,26 @@ export function SwapTransferTracker() {
3324 <div className="w-full flex flex-col">
3425 <SectionHeader
3526 title="Live Transaction Log"
27+ titleAdornment={isSwapConnected && isTransferConnected && <LiveDot />}
3628 description="Real-time swaps and transfers observed directly from execution events."
3729 />
3830
3931 <div className="flex flex-col border-b border-zinc-800 overflow-hidden">
4032 <Tabs defaultValue="transfers" className="w-full">
4133 <div className="flex flex-col">
42- <div className="overflow-x-auto scrollbar-none">
43- <TabsList className="w-fit h-auto py-1 px-4 gap-2 bg-transparent rounded-none">
44- <TabsTrigger value="transfers" className={TAB_TRIGGER_CLASS}>
45- <Send className="size-4" />
46- <span className="text-sm font-medium">Transfers</span>
47- <LiveBadge isConnected={isTransferConnected} />
48- </TabsTrigger>
49- <TabsTrigger value="swaps" className={TAB_TRIGGER_CLASS}>
50- <ArrowLeftRight className="size-4" />
51- <span className="text-sm font-medium">Swaps</span>
52- <LiveBadge isConnected={isSwapConnected} />
53- </TabsTrigger>
34+ <div className="flex items-center justify-between overflow-x-auto scrollbar-none">
35+ <TabsList className="mx-6 my-4 sm:mx-10 sm:my-6">
36+ <TabsTrigger value="transfers">Transfers</TabsTrigger>
37+ <TabsTrigger value="swaps">Swaps</TabsTrigger>
5438 </TabsList>
5539 </div>
56- <div className="w-full h-px bg-zinc-800" />
40+ {/* Mobile: Pause/Resume button */}
41+ <div className="md:hidden pl-6 pb-6">
42+ <PauseResumeControl
43+ isFollowingChain={isFollowingData}
44+ onToggle={() => setIsFollowingData(!isFollowingData)}
45+ />
46+ </div>
5747 </div>
5848
5949 <TabsContent value="transfers" className="mt-0">
@@ -74,30 +64,7 @@ export function SwapTransferTracker() {
7464 </TabsContent>
7565 </Tabs>
7666
77- {/* Footer with hover pause info */}
78- <div className="flex items-center gap-4 px-6 sm:px-10 py-2.5 border-t border-zinc-800">
79- {/* Mobile pause/resume button */}
80- <button
81- type="button"
82- onClick={() => setIsFollowingData(!isFollowingData)}
83- className={cn(
84- 'md:hidden h-9 px-4 py-2 rounded-md font-mono text-sm text-white uppercase cursor-pointer transition-all duration-200',
85- isFollowingData
86- ? 'bg-[radial-gradient(ellipse_50%_50%_at_50%_50%,rgba(23,23,23,0.2)_0%,rgba(163,163,163,0.16)_100%),#0A0A0A] shadow-[0_0_0_1px_rgba(0,0,0,0.8)]'
87- : 'bg-[radial-gradient(ellipse_50%_50%_at_50%_50%,rgba(110,84,255,0)_0%,rgba(255,255,255,0.12)_100%),#6E54FF] shadow-[0_0_0_1px_rgba(79,71,235,0.9)]',
88- )}
89- >
90- {isFollowingData ? 'Pause' : 'Resume'}
91- </button>
92-
93- {/* Desktop hover pause info */}
94- <div className="hidden md:flex items-center gap-4">
95- <Pointer className="w-5 h-5 text-[#52525E]" />
96- <span className="text-base text-[#52525E]">
97- Hovering on the data stream pauses the update.
98- </span>
99- </div>
100- </div>
67+ <HoverPauseFooter label="Hovering on the tables pauses the update." />
10168 </div>
10269 </div>
10370 )
0 commit comments