e.preventDefault()}>
@@ -544,74 +599,46 @@ export default function AgentStoreClient({
- {shouldVirtualizeAllAgents ? (
- // Virtualized All Agents
+ {/* Infinite Scroll Grid */}
+
- {allAgentsVirtualizer.getVirtualItems().map((virtualItem) => {
- const agents = getAgentsForRow(virtualItem.index)
- return (
-
allAgentsVirtualizer.measureElement(node)}
- data-index={virtualItem.index}
- style={{
- position: 'absolute',
- top: 0,
- left: 0,
- width: '100%',
- transform: `translateY(${virtualItem.start}px)`,
- // Include padding/margin in measured element
- paddingBottom: '24px',
- }}
- >
-
- {agents?.map((agent) => (
- // No motion for virtualized items - use CSS transitions instead
-
- ))}
-
-
- )
- })}
-
- ) : (
- // Non-virtualized All Agents
-
diff --git a/web/src/components/ui/relative-time.tsx b/web/src/components/ui/relative-time.tsx
new file mode 100644
index 0000000000..8712596b74
--- /dev/null
+++ b/web/src/components/ui/relative-time.tsx
@@ -0,0 +1,32 @@
+'use client'
+
+import { useState, useEffect } from 'react'
+import { formatRelativeTime } from '@/lib/date-utils'
+
+interface RelativeTimeProps {
+ date: string
+}
+
+export function RelativeTime({ date }: RelativeTimeProps) {
+ const [isClient, setIsClient] = useState(false)
+ const [relativeTime, setRelativeTime] = useState('')
+
+ useEffect(() => {
+ setIsClient(true)
+ setRelativeTime(formatRelativeTime(date))
+
+ // Update every minute to keep relative time fresh
+ const interval = setInterval(() => {
+ setRelativeTime(formatRelativeTime(date))
+ }, 60000)
+
+ return () => clearInterval(interval)
+ }, [date])
+
+ // Show absolute date on server, relative time on client
+ if (!isClient) {
+ return <>{new Date(date).toLocaleDateString()}>
+ }
+
+ return <>{relativeTime}>
+}