/** * Resolve the empty-state onboarding-card icon from a backend * `SlashCommandSummary.iconName`. * * Primary keys match the production `/api/docs/commands` contract * (multi-platform-hub) — short, source-system-style identifiers: * * - `clickup` → ClickUp brand glyph (mono grey) * - `slack` → Slack brand glyph (mono grey) * - `hubspot` → HubSpot brand glyph (mono grey) * - `github` → GitHub brand glyph * - `openframe` → OpenFrame logo * - `newspaper` / `rocket` / `briefcase` / `graduation-cap` * / `video` / `calendar` / `headphones` → v2 generic glyphs * mapped to the closest available icon in `icons-v2-generated` * * Figma-canonical keys (`clickup-logo-grey`, `logo-openframe`, * `rocket-02`, …) and a handful of generic v2 fall-throughs * (`search`, `ticket`, `bug`, …) are kept as aliases so the * Storybook fixtures and any older feed entries still resolve. * * Any `iconName` NOT in the curated map below is resolved generically * against the entire `icons-v2-generated` set by naming convention * (`chart-pie` → `ChartPieIcon`, `bank` → `BankIcon`, …) — see * `resolveFromLibrary`. So the full icon library is supported, and the * curated map only exists for aliases that don't map 1:1. Keys that * name no real icon (and `null`) fall back to `FileIcon` so a * misconfigured row still renders. */ import type { ComponentType } from 'react'; /** Shape used by every icon registered here (matches `icons-v2-generated`). */ export type IconComponent = ComponentType<{ size?: number; className?: string; color?: string; }>; /** * Static registry — backend `iconName` → React component. Brand-grey * logos live in `icons-v2-generated/brand-logos/`; the rest are * monochrome v2 glyphs that inherit `currentColor` from the card slot * (`text-ods-text-secondary`). */ export declare const ICON_ALIASES: Record; /** * THE single icon-name → component resolver for the whole app. Two variants — * one entry point, no duplicated resolver machinery: * * • `'design'` (DEFAULT): the icons-v2 design set — chat chips, slash * autocomplete, announcement bar, AI-agent icons, the admin picker. * Order: curated `ICON_ALIASES` (brand-grey logos, tinted OpenFrame, * semantic aliases) → generic `icons-v2-generated` by naming convention → * `FileIcon`. * • `'brand'`: the brand/social set (lucide + brand-colored logos) via the * registry resolver `getIconComponent` (PascalCase-normalised) — social * links, source-row CTAs. * * The two glyph SETS differ on purpose (a grey design 'slack' vs a brand-color * social 'slack'); this resolver is the ONE place that owns both. `getIconComponent` * / `getDynamicIcon` remain as the brand-variant + sized-brand helpers. */ export declare function resolveIcon(iconName: string | null | undefined, opts?: { variant?: 'design' | 'brand'; }): IconComponent; /** One selectable icon in the admin slash-command picker. */ export interface IconOption { /** Stored `icon_name` value — a kebab-case `icons-v2-generated` key (or a * curated alias) that `resolveIcon` displays in the chat. */ key: string; /** Human-friendly label shown in the picker dropdown. */ label: string; } /** * Curated icon set offered by the admin slash-command icon picker * (`/admin/chat-config` → Edit slash command). * * THE PICKER AND THE CHAT SHARE ONE ICON SOURCE: every `key` here is an * `icons-v2-generated` name (or curated alias) that `resolveIcon` * renders — so whatever the admin selects always displays in the chip / * autocomplete, with no fallback-glyph drift. (The full library is far larger * and resolvable generically; this is the curated, slash-command-relevant * subset for a usable dropdown.) Keep keys kebab-case to match the DB * `chat_admin_slash_commands.icon_name` convention. */ export declare const ICON_OPTIONS: ReadonlyArray; //# sourceMappingURL=icon-library.d.ts.map