import React, { ReactNode } from "react";
/**
 * Tag component props
 */
export interface TagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "onRemove" | "onDrag" | "onDragEnd" | "onDragStart" | "onAnimationStart"> {
    /** The content of the tag */
    children: React.ReactNode;
    /** The size of the tag */
    size?: TagSize;
    /** Whether to show the remove button (default: true) */
    removable?: boolean;
    /** Callback when the remove button is clicked */
    onRemove?: () => void;
    /**
     * Avatar configuration — renders a sized avatar to the left of the label.
     * The component controls avatar sizing and styling internally.
     * Takes precedence over startContent.
     */
    avatar?: {
        src?: string;
        name: string;
        fallback?: ReactNode;
        initialsCount?: number;
    };
    /**
     * Generic content to display at the start (before the label).
     * Use for icons, emojis, or any custom ReactNode.
     * Ignored when avatar is provided.
     */
    startContent?: ReactNode;
    /** Whether the tag is disabled */
    disabled?: boolean;
    /** Additional class name for the tag */
    className?: string;
    /** Theme overrides */
    theme?: TagThemeOverrides;
}
export type TagSize = "sm" | "md";
export interface TagTheme {
    /** Base styles for the tag container */
    baseStyle: string;
    /** Size-specific styles */
    sizes: Record<TagSize, string>;
    /** Avatar sizes for each tag size */
    avatarSizes: Record<TagSize, string>;
    /** Start content sizes for each tag size */
    startContentSizes: Record<TagSize, string>;
    /** Disabled state style */
    disabledStyle: string;
    /** Remove button style */
    removeButtonStyle: string;
    /** Remove icon sizes for each tag size */
    removeIconSizes: Record<TagSize, string>;
}
export interface TagThemeOverrides {
    baseStyle?: string;
    sizes?: Partial<Record<TagSize, string>>;
    avatarSizes?: Partial<Record<TagSize, string>>;
    startContentSizes?: Partial<Record<TagSize, string>>;
    disabledStyle?: string;
    removeButtonStyle?: string;
    removeIconSizes?: Partial<Record<TagSize, string>>;
}
