/**
 * @file SVGIcon.tsx
 * @input SVG path data with per-element roles, variation preset, size, color
 * @output CSS-variable-driven SVG icon with role-aware rendering and mask-based gaps
 * @position Core implementation for the lab SVG icon system
 *
 * Two key concepts beyond basic CSS-var-driven icons:
 *
 * 1. Path roles — each element is either "fill" (closed shapes that switch between
 *    stroke and fill across variations) or "stroke" (lines that always stay stroked).
 *
 * 2. Mask-based gaps — in bold/filled mode, overlapping fill-role shapes get
 *    auto-generated SVG masks. Secondary fill shapes are knocked out of primary
 *    shapes with a configurable gap and corner rounding, producing clean negative
 *    space on any background.
 */
import { type SVGProps } from 'react';
export type SVGIconVariation = 'linear' | 'bold' | 'twotone' | 'bulk' | 'broken';
export type SVGIconSize = 'xsm' | 'sm' | 'md' | 'lg';
export type SVGIconColor = 'primary' | 'secondary' | 'disabled' | 'accent' | 'positive' | 'negative' | 'warning' | 'inherit';
/**
 * Role determines how an element behaves across variations.
 * - "fill": closed shapes — stroked in linear, filled in bold
 * - "stroke": lines/detail strokes — always rendered as strokes
 */
export type IconShapeRole = 'fill' | 'stroke';
/** Shape element within an icon layer */
export interface IconShape {
    /** SVG element type */
    type: 'path' | 'circle' | 'rect' | 'line' | 'polyline' | 'polygon';
    /** SVG attributes for this shape (d, cx, cy, r, points, x1, y1, etc.) */
    attrs: Record<string, string>;
    /**
     * How this element behaves across variations.
     * @default 'fill'
     */
    role?: IconShapeRole;
}
/** Definition of an SVG icon's geometry */
export interface SVGIconDef {
    /** Display name */
    name: string;
    /** ViewBox dimensions (default: "0 0 24 24") */
    viewBox?: string;
    /** Primary layer shapes (main outlines) */
    primary: IconShape[];
    /** Secondary layer shapes (detail elements) */
    secondary?: IconShape[];
}
export interface SVGIconProps extends Omit<SVGProps<SVGSVGElement>, 'color'> {
    /** The icon definition containing path data */
    icon: SVGIconDef;
    /**
     * Visual variation preset.
     * @default 'linear'
     */
    variation?: SVGIconVariation;
    /**
     * Icon size with optical stroke compensation.
     * @default 'md'
     */
    size?: SVGIconSize;
    /**
     * Semantic color.
     * @default 'primary'
     */
    color?: SVGIconColor;
    /** Override stroke width (bypasses optical compensation). */
    strokeWidth?: number;
}
/**
 * CSS-variable-driven SVG icon with role-aware rendering.
 *
 * Each shape element has a role ("fill" or "stroke") that determines how it
 * behaves across variations. In bold mode, overlapping fill-role shapes get
 * auto-generated SVG masks for clean gap subtraction.
 *
 * @example
 * ```
 * <SVGIcon icon={bellIcon} variation="twotone" size="md" color="accent" />
 * ```
 */
export declare function SVGIcon({ icon, variation, size, color, strokeWidth, style, ...props }: SVGIconProps): import("react").JSX.Element;
export declare namespace SVGIcon {
    var displayName: string;
}
//# sourceMappingURL=SVGIcon.d.ts.map