import React from 'react'; import clsx from 'clsx'; /** * Color variants for the TextCard component * Maps to Figma design tokens: * - green: Primary/Green/300 (#21E46B) → $green-300 * - neutral-light: Neutral/200 (#E6EAF0) → $gray-200 * - neutral-dark: Neutral/300 (#CAD4DF) → $gray-300 * - lilac: Primary/Lilac/200 (#D9CAFF) → $lilac-200 */ export type TextCardColor = 'green' | 'neutral-light' | 'neutral-dark' | 'lilac'; export interface TextCardProps extends React.ComponentPropsWithoutRef<'article'> { /** Card title text (heading-lg typography) */ title: React.ReactNode; /** Card description text (body-l typography) */ description?: React.ReactNode; /** Optional link URL - makes the card clickable */ href?: string; /** Background color variant */ color?: TextCardColor; } /** * TextCard Component * * A card component with a title at the top and description at the bottom. * Used within the CardsTwoColumn pattern to display content in a 2x2 grid. * * Features: * - 4 color variants: green, neutral-light, neutral-dark, lilac * - Responsive typography and spacing * - Title uses heading-lg typography (Tobias Light) * - Description uses body-l typography (Booton Light) * * Responsive behavior: * - Desktop: 604px × 340px, 24px padding * - Tablet: Full width × 309px, 20px padding * - Mobile: Full width × 274px, 16px padding * * @example * ```tsx * * ``` */ export const TextCard = React.forwardRef( (props, ref) => { const { title, description, href, color = 'neutral-light', className, ...rest } = props; const rootClasses = clsx( 'bds-text-card', `bds-text-card--${color}`, className ); const CardWrapper = href ? 'a' : 'article'; const wrapperProps = href ? { href, className: rootClasses, ref: ref as React.Ref } : { className: rootClasses, ref }; return ( {/* Title at top */}

{title}

{/* Description at bottom */} {description && (

{description}

)}
); } ); TextCard.displayName = 'TextCard'; export default TextCard;