Stateless marketing-header launcher button for the Mingo AI chat panel. Dispatches an `ask-ai:open` CustomEvent on click, allowing the mounted `EmbeddableChat` to respond without tight coupling. ## Key Components | Export | Type | Description | |---|---|---| | `MingoAiButton` | `React.FC` | The launcher button component | | `MingoAiButtonProps` | `interface` | Extends `React.ButtonHTMLAttributes` | ### Props | Prop | Type | Default | Description | |---|---|---|---| | `source` | `string` | `undefined` | Identifies the chat panel instance; coalesced to `''` when dispatching | | `icon` | `React.ReactNode` | `undefined` | Custom identity glyph; falls back to the packaged `MingoIcon` | | `label` | `string` | `'Mingo AI'` | Wordmark text and `aria-label`; pass the server-configured assistant name | | `className` | `string` | `undefined` | Additional classes merged via `cn()` | | `onClick` | `MouseEventHandler` | `undefined` | Optional callback called after the CustomEvent is dispatched | ## Usage Example ```typescript import { MingoAiButton } from '@openframe/ui' // Basic usage — falls back to packaged MingoIcon and 'Mingo AI' label // With server-configured identity (recommended) } label={config.mingo.assistantName} /> ``` > **Note:** This component is distinct from `HeaderMingoButton` (the dashboard `AppHeader` toggle). They serve different surfaces with different layout contracts — do not merge them. The button fires `new CustomEvent('ask-ai:open', { detail: { source } })` on `window`. Any `EmbeddableChat` mounted with a matching `source` will open in response. **Source:** [`mingo-ai-button.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/mingo-ai-button.tsx)