mirror of
https://github.com/simstudioai/sim.git
synced 2026-01-10 07:27:57 -05:00
* chore: replace prettier with biome and add linting * chore: update devcontainer settings to use biome for linting and remove eslint, prettier * chore: update docker-compose to use Postgres 17-alpine and standardize quotes * chore: fixed more BUT disabled most rules due to limit * added additional rules, fixed linting & ts errors * added additional rules * rebased & linted * fixed oauth * updated biome & minor modifications --------- Co-authored-by: Aditya Tripathi <aditya@climactic.co>
49 lines
1.0 KiB
TypeScript
49 lines
1.0 KiB
TypeScript
'use client'
|
|
|
|
import { useEffect, useState } from 'react'
|
|
import Image from 'next/image'
|
|
import { useTheme } from 'next-themes'
|
|
|
|
interface ThemeImageProps {
|
|
lightSrc: string
|
|
darkSrc: string
|
|
alt: string
|
|
width?: number
|
|
height?: number
|
|
className?: string
|
|
}
|
|
|
|
export function ThemeImage({
|
|
lightSrc,
|
|
darkSrc,
|
|
alt,
|
|
width = 600,
|
|
height = 400,
|
|
className = 'rounded-lg border border-border my-6',
|
|
}: ThemeImageProps) {
|
|
const { resolvedTheme } = useTheme()
|
|
const [imageSrc, setImageSrc] = useState(lightSrc)
|
|
const [mounted, setMounted] = useState(false)
|
|
|
|
// Wait until component is mounted to avoid hydration mismatch
|
|
useEffect(() => {
|
|
setMounted(true)
|
|
}, [])
|
|
|
|
useEffect(() => {
|
|
if (mounted) {
|
|
setImageSrc(resolvedTheme === 'dark' ? darkSrc : lightSrc)
|
|
}
|
|
}, [resolvedTheme, lightSrc, darkSrc, mounted])
|
|
|
|
if (!mounted) {
|
|
return null
|
|
}
|
|
|
|
return (
|
|
<div className='flex justify-center'>
|
|
<Image src={imageSrc} alt={alt} width={width} height={height} className={className} />
|
|
</div>
|
|
)
|
|
}
|