import { cn, StatusIcon } from 'ui' import { DestinationIcon } from './DestinationIcon' import type { DestinationType } from './DestinationPanel/DestinationPanel.types' import { BASE_PATH } from '@/lib/constants' // Destinations with a brand mark. Anything absent falls back to the line icon in the same frame, // so a new destination type never renders an empty square. const BRAND_MARK_BY_TYPE: Partial> = { BigQuery: `${BASE_PATH}/img/icons/bigquery-icon.svg`, ClickHouse: `${BASE_PATH}/img/icons/clickhouse-icon.svg`, DuckLake: `${BASE_PATH}/img/icons/ducklake-icon.svg`, Snowflake: `${BASE_PATH}/img/icons/snowflake-icon.svg`, } const SIZE_CLASS_NAME = { small: { frame: 'h-8 w-8 rounded-md', mark: 'h-4 w-4', icon: 16 }, large: { frame: 'h-14 w-14 rounded-lg', mark: 'h-8 w-8', icon: 32 }, } as const interface DestinationLogoProps { type: DestinationType size?: keyof typeof SIZE_CLASS_NAME className?: string /** Destructive badge on the bottom-right corner (e.g. table replication errors). */ hasErrors?: boolean } /** * A destination's brand mark in a square app-icon frame, used wherever a destination is the * subject: the list rows, the pipeline header, and the replication diagram. */ export const DestinationLogo = ({ type, size = 'small', className, hasErrors = false, }: DestinationLogoProps) => { const sizing = SIZE_CLASS_NAME[size] const brandMark = BRAND_MARK_BY_TYPE[type] return ( {brandMark === undefined ? ( ) : ( )} {hasErrors && ( )} ) }