/**
 * TyIcon Web Component
 * PORTED FROM: clj/ty/components/icon.cljs
 * SVG icon component with size variants and animations
 */
import type { IconSize, IconTempo, TyIconElement } from '../types/common.js';
import * as IconRegistry from '../utils/icon-registry.js';
/**
 * Ty Icon Component
 *
 * @example
 * ```html
 * <ty-icon name="check"></ty-icon>
 * <ty-icon name="spinner" spin></ty-icon>
 * <ty-icon name="heart" size="xl"></ty-icon>
 * ```
 */
export declare class TyIcon extends HTMLElement implements TyIconElement {
    private _name;
    private _size;
    private _spin;
    private _pulse;
    private _tempo;
    private _watchId;
    /** Track currently rendered SVG to avoid unnecessary re-renders */
    private _currentSvg;
    constructor();
    static get observedAttributes(): string[];
    connectedCallback(): void;
    disconnectedCallback(): void;
    attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
    get name(): string;
    set name(value: string);
    get size(): IconSize | undefined;
    set size(value: IconSize | undefined);
    get spin(): boolean;
    set spin(value: boolean);
    get pulse(): boolean;
    set pulse(value: boolean);
    get tempo(): IconTempo | undefined;
    set tempo(value: IconTempo | undefined);
    /** Build CSS classes for the host element */
    private buildClasses;
    /** Update host element classes */
    private updateClasses;
    /**
     * Render the icon SVG
     * Smart rendering strategy:
     * 1. Check memory registry (instant)
     * 2. If found in memory → render immediately
     * 3. If not in memory → show NOT_FOUND_ICON immediately (prevents empty state)
     * 4. Then check cache asynchronously and replace if found
     * 5. Only re-render if SVG actually changed
     */
    private render;
    /**
     * Actually render SVG to shadow DOM
     * Only updates if content changed to prevent unnecessary reflows
     */
    private renderSvg;
}
export { IconRegistry };
//# sourceMappingURL=icon.d.ts.map