/**
 * Icon registry — string `icon_name` → React component.
 *
 * SINGLE SOURCE OF TRUTH (no, really this time) for every icon-name →
 * React-component lookup across the lib + the hub. Two DB columns feed
 * in with DIFFERENT conventions:
 *
 *   - `chat_admin_slash_commands.icon_name` — kebab-case (`'rocket'`,
 *     `'hubspot'`, `'github'`, `'dollar-sign'`).
 *   - `social_platforms.icon_name` — PascalCase component names
 *     (`'LinkedInIcon'`, `'XLogo'`, `'YouTubeIcon'`, `'Github'`).
 *
 * The registry stores entries under kebab-case keys (URL/DB-friendly,
 * shell-safe, matches `lucide-react`'s own file-naming convention).
 * The PascalCase variants come in via `normalizeIconKey()`, which maps
 * known PascalCase aliases → kebab-case before the lookup runs.
 *
 * Adding a new icon: import the component below, add a `'name': Component`
 * entry in `ICON_REGISTRY`, and (if the same icon also flows in from a DB
 * column that uses PascalCase) add a `PascalName → 'name'` row to
 * `PASCAL_TO_KEBAB_ALIASES`.
 *
 * Fallback: an unknown / null icon_name resolves to `FileText` so a chip
 * never renders without an icon.
 */
import { type ComponentType, type ReactNode } from 'react';
/**
 * Loose icon-component shape: every entry accepts `className`; `color` is
 * optional (lucide + most brand icons accept it; OpenFrameLogo doesn't,
 * but `color` is optional so passing `undefined` is a no-op). Loose enough
 * to accept both lucide's `LucideIcon` and our brand SVG components.
 */
type IconComponent = ComponentType<{
    className?: string;
    color?: string;
}>;
/**
 * The kebab-case registry. ALL lookups go through here; PascalCase
 * aliases route through `normalizeIconKey()` first.
 */
export declare const ICON_REGISTRY: Record<string, IconComponent>;
/**
 * Normalize an icon key to the registry's canonical kebab-case form.
 * Accepts PascalCase variants (from `social_platforms.icon_name`-style
 * columns) and passes kebab-case keys through unchanged.
 */
export declare function normalizeIconKey(key: string): string;
/**
 * Resolve an `icon_name` to its React component. Accepts both PascalCase
 * and kebab-case keys (normalizes PascalCase first). Unknown / null /
 * undefined names fall back to `FileText` — chips always render with
 * SOMETHING rather than a missing glyph. The fallback is intentional:
 * a typo in a new admin-authored row shouldn't crash render.
 */
export declare function getIconComponent(iconName: string | null | undefined): ComponentType<{
    className?: string;
    color?: string;
}>;
export type DynamicIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
/**
 * Render an icon by name with a size preset + optional className.
 * Replaces the old `src/utils/dynamic-icons.tsx#getDynamicIcon`. Accepts
 * both PascalCase and kebab-case keys (via `normalizeIconKey()`).
 */
export declare function getDynamicIcon(iconName: string | undefined | null, size?: DynamicIconSize, className?: string): ReactNode;
export {};
//# sourceMappingURL=icon-registry.d.ts.map