import * as React from 'react'; import { CheckCircle2 } from 'lucide-react'; import { cn } from '../../shared/utils'; export interface FeatureRowProps extends React.HTMLAttributes { eyebrow?: string; title: string; description?: string; bullets?: string[]; visual: React.ReactNode; reverse?: boolean; tone?: 'default' | 'muted' | 'card'; } /** * Alternating text + visual marketing section. * * @description * A two-column "how it works" / definition row: a text block (eyebrow, * title, description, optional checklist) paired with a consumer-supplied * visual (image, illustration, or custom node). Stacks on mobile and * alternates sides on desktop via `reverse`. * * @ai-rules * 1. Chain multiple `FeatureRow`s and alternate `reverse` to build a "how it works" narrative. * 2. Pass the visual as `` or any custom `ReactNode`; this component never renders an image itself. * 3. Use `tone="muted"` on every other row to create a subtle section break instead of adding manual dividers; use `tone="card"` when a theme needs a stronger, genuinely lighter break (some themes set `--muted` equal to `--background`). */ export function FeatureRow({ eyebrow, title, description, bullets, visual, reverse = false, tone = 'default', className, ...props }: FeatureRowProps) { return (
{eyebrow && (

{eyebrow}

)}

{title}

{description && (

{description}

)} {bullets && bullets.length > 0 && (
    {bullets.map(bullet => (
  • {bullet}
  • ))}
)}
{visual}
); }