A React client component that renders a clickable vendor button with logo and title, supporting two visual variants (`default` and `compact`) and two navigation modes (external URL or callback). ## Key Components ### `VendorDisplayButtonProps` | Prop | Type | Description | |------|------|-------------| | `vendor` | `VendorWithMedia` | Vendor data including slug, title, and media | | `onClick` | `(vendorSlug: string) => void` | Callback invoked with the vendor slug (used when no `externalUrl`) | | `variant` | `'default' \| 'compact'` | Visual size variant; defaults to `'default'` | | `externalUrl` | `string` | Caller-resolved platform base URL; opens `{externalUrl}/vendor/{slug}` in a new tab | ### `VendorDisplayButton` Exported named component. Renders either: - **`compact`** — pill-shaped button (`rounded-full`) with a 20×20px logo, suited for inline teaser contexts. - **`default`** — card-style button (`rounded-lg`) with a 24×24px logo in an 8×8 container, suited for list or grid layouts. Both variants fall back to an uppercase initial letter when no logo is available, and route clicks through a shared `handleClick` that prefers `externalUrl` over the `onClick` callback. ## Usage Example ```typescript // External URL navigation (opens OpenMSP vendor page in new tab) // Compact variant with local callback router.push(`/vendors/${slug}`)} /> ``` > **Note:** `externalUrl` should be a fully-qualified, scheme-normalized URL (e.g. `https://openmsp.ai`) — not a scheme-less string — to avoid the relative `window.open()` bug that existed with the removed `NEXT_PUBLIC_OPENMSP_URL` environment variable.