--- import Book from '@assets/icons/book.svg'; import External from '@assets/icons/external.svg'; import { getLocaleFromUrl, useTranslations } from '@i18n'; import type { ImageMetadata } from 'astro'; import { Image } from 'astro:assets'; import Button from './Button.astro'; interface Props { key: string; date: 'tba' | (string & {}); contract: | 'freelance' | 'internship' | 'full-time' | 'college-project' | 'personal-project' | 'volunteering' | (string & {}); baseHue: number; chromaOverride?: number; projectUrl?: string; articleUrl?: string; icon: ImageMetadata; image?: ImageMetadata & { alt: string }; } const { key, date, contract, baseHue, projectUrl, articleUrl, icon, image, chromaOverride } = Astro.props; const lang = getLocaleFromUrl(Astro.url); const t = useTranslations(lang); const styles = [`--base-hue: ${baseHue}`]; if (chromaOverride !== undefined) { styles.push(`--chroma: ${chromaOverride}`); } ---
{ icon && ( ) }

{t(`projects.${key}.title`)}

{date === 'tba' ? t('tba') : date} • {t(contract)}
{t('about')}
{t(`projects.${key}.about`)}
{t('roles')}
{t(`projects.${key}.roles`)}
{ !!articleUrl && ( ) } { !!projectUrl && ( ) }
{ image && ( ) }