Thin wrapper around `useOgPlaceholderUrl` that resolves the correct OG placeholder URL for entity cards, allowing an explicit `placeholderUrl` prop to override the runtime-derived value. ## Key Components ### `UseEntityCardPlaceholderArgs` Interface defining hook inputs: - `title` — entity title used as the placeholder label - `placeholderUrl` — explicit override; when provided (including `null`), skips runtime derivation - `siteName` — optional site name displayed under the title - `aspect` — output aspect ratio: `'wide'` (default, catalog cards) or `'square'` (compact chat-inline cards) ### `useEntityCardPlaceholder` Hook that delegates URL construction to `useOgPlaceholderUrl` but applies a priority rule: an explicitly passed `placeholderUrl` (even `null`) always wins over the derived value. Only `undefined` falls through to the runtime default. ## Usage Example ```typescript // Catalog card — derive URL from title at runtime const placeholderSrc = useEntityCardPlaceholder({ title: 'Microsoft 365 Business Premium', siteName: 'Flamingo', aspect: 'wide', }) // Chat-inline card — caller pre-resolves and passes explicit URL const placeholderSrc = useEntityCardPlaceholder({ title: 'Entity Name', placeholderUrl: 'https://cdn.example.com/placeholder.png', aspect: 'square', }) // Suppress placeholder entirely (e.g. real OG image already loaded) const placeholderSrc = useEntityCardPlaceholder({ title: 'Entity Name', placeholderUrl: null, // returns null; runtime default skipped }) ``` ## Priority Logic ```text placeholderUrl !== undefined → return placeholderUrl (string or null) placeholderUrl === undefined → return derived URL from useOgPlaceholderUrl ``` **Source:** [`use-entity-card-placeholder.ts`](https://github.com/flamingo-stack/openframe-oss-lib/blob/main/use-entity-card-placeholder.ts)