Files
supabase/apps/studio/components/interfaces/ConnectSheet/ConnectionIcon.tsx
2026-04-01 10:22:37 +02:00

42 lines
1.1 KiB
TypeScript

import { useTheme } from 'next-themes'
import Image from 'next/image'
import { BASE_PATH } from '@/lib/constants'
interface ConnectionIconProps {
icon: string
iconFolder?: string
supportsDarkMode?: boolean
size?: number
className?: string
}
export const ConnectionIcon = ({
icon,
iconFolder,
supportsDarkMode,
size = 14,
className,
}: ConnectionIconProps) => {
const { resolvedTheme } = useTheme()
const imageFolder =
iconFolder || (['ionic-angular'].includes(icon) ? 'icons/frameworks' : 'libraries')
const imageExtension = imageFolder === 'icons/frameworks' ? '' : '-icon'
const shouldUseDarkMode =
supportsDarkMode ||
['expo', 'nextjs', 'prisma', 'drizzle', 'astro', 'remix', 'refine'].includes(icon.toLowerCase())
const iconImgSrc = icon.startsWith('http')
? icon
: `${BASE_PATH}/img/${imageFolder}/${icon.toLowerCase()}${
shouldUseDarkMode && resolvedTheme?.includes('dark') ? '-dark' : ''
}${imageExtension}.svg`
return (
<Image className={className} src={iconImgSrc} alt={`${icon} logo`} width={size} height={size} />
)
}