Renders a unified icon across all app surfaces (announcement bar, chat quick actions, AI-agent identity) using a consistent three-step resolution strategy. ## Key Components ### `EntityIconValue` (interface) Shared icon descriptor used throughout the app. Accepts one of: - `name` — library glyph name resolved via `resolveIcon` - `url` — uploaded image URL (takes priority over `name`) - `props` — additional props spread onto the resolved glyph (e.g. `{ color }`) ### `EntityIcon` (component) The single icon-rendering path for the whole app. Resolution order: 1. `url` → renders an `` tag with `objectFit: contain` 2. `name` ∈ `{fae, mingo}` → renders the packaged `AgentMark` brand component 3. `name` → resolves a library glyph via `resolveIcon` and spreads `props` Falls back to an empty glyph when no `icon` is provided. **Props:** | Prop | Type | Default | Description | |---|---|---|---| | `icon` | `EntityIconValue \| null` | — | Icon descriptor | | `size` | `number` | `20` | Pixel size (width/height) | | `className` | `string` | — | Tailwind/CSS classes; enables responsive sizing | > **Sizing note:** When `className` is provided, sizing is controlled entirely by CSS (e.g. `w-6 md:w-8`). The `size` prop is only applied as an inline style when no `className` is given, preventing class overrides. ## Usage Example ```typescript import { EntityIcon, type EntityIconValue } from './icon-display' // Uploaded image const imageIcon: EntityIconValue = { url: 'https://cdn.example.com/logo.png' } // Brand agent mark const agentIcon: EntityIconValue = { name: 'mingo' } // Library glyph with custom color const glyphIcon: EntityIconValue = { name: 'shield', props: { color: '#FF5733' } } // Fixed size // Responsive via Tailwind ``` ## Source [`icon-display.tsx`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/icon-display.tsx)