mirror of
https://github.com/ruvnet/RuVector.git
synced 2026-05-29 11:13:33 +00:00
Major additions: - Complete Next.js studio application with 1600+ components - Docker support (Dockerfile.combined, docker-compose.yml) - GCP deployment documentation and benchmarks - SQL benchmark scripts for performance testing - Sentry integration for monitoring - Comprehensive test suite and mocks Studio features: - Dashboard and admin interfaces - Data visualization components - Authentication and user management - API integration with RuVector backend - Static data and public assets 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
29 lines
1,004 B
TypeScript
29 lines
1,004 B
TypeScript
import MotionNumber from '@number-flow/react'
|
|
|
|
interface CountdownTimerSpanProps {
|
|
seconds: number
|
|
}
|
|
|
|
const CountdownTimerSpan = ({ seconds }: CountdownTimerSpanProps) => {
|
|
const hours = Math.floor(seconds / 3600)
|
|
const minutes = Math.floor((seconds % 3600) / 60)
|
|
const remainingSeconds = seconds % 60
|
|
|
|
const formatConfig = { minimumIntegerDigits: 2 }
|
|
const formatValue = (value: number) => value.toString().padStart(2, '0')
|
|
|
|
return (
|
|
<span className="inline-flex gap-2">
|
|
<span className="text-foreground-lighter text-sm p-0">Time remaining: </span>
|
|
<span className="text-foreground text-sm font-mono flex items-center gap-0">
|
|
<MotionNumber format={formatConfig} value={Number(formatValue(hours))} />
|
|
hr
|
|
<MotionNumber format={formatConfig} value={Number(formatValue(minutes))} />
|
|
m
|
|
<MotionNumber format={formatConfig} value={Number(formatValue(remainingSeconds))} />
|
|
</span>
|
|
</span>
|
|
)
|
|
}
|
|
|
|
export default CountdownTimerSpan
|