import * as React from "react"; export type { IconGlyphProp, IconGlyphProp as IconProps, } from "../../props/components/general.prop.js"; /** * Icon — a glyph on the `--icon-size-*` scale, and the only supported way to draw a standalone one. * * WHY THIS EXISTS (gh#712). A lucide component ships `width="24" height="24"`, and exactly four * rules in this library ever override that: `.ui-button svg`, `.ui-dropdown-menu-item > svg`, * `.ui-topbar-item > svg` and `[data-slot="list-row-leading"] > svg`. Anywhere else — in a `Text`, * in a table cell, in an `` — the glyph draws at 24px beside 14px type, 1.71× the text it * annotates. A consumer cannot fix that themselves: `size-4` and `w-[16px]` are what * docs/CONSUMER-RULES.md §3/§8 forbid, and `size={16}` hard-codes a number the theme owns. One * consumer measured 38 such glyphs in a single app. * * RENDERS ONTO THE GLYPH, NOT AROUND IT. `as={Lock}` is invoked with the class, the size and the * a11y wiring, so the element that carries the metric IS the ``. A wrapper `` would add * a box to every flex row that holds an icon, and would break `Button`'s own `svg` rule by putting * an element between the two. * * DECORATIVE BY DEFAULT. Without `label` the glyph is `aria-hidden` — a glyph beside a visible * label is decoration, and announcing it twice is the usual defect (WCAG 2.2 SC 1.1.1). Pass * `label` only when the glyph is the ONLY thing saying what it says; it then renders as * `role="img"` + that name, which is how a graphic gets a name in WAI-ARIA 1.2. The string is the * consumer's to localize — the library ships no copy for it. */ export declare const Icon: React.ForwardRefExoticComponent, "children" | "ref"> & { as: React.ComponentType & React.RefAttributes>; size?: import("../../props/index.js").IconSizeProp; tone?: import("../../props/index.js").TextToneProp; label?: string; className?: import("../../props/index.js").ClassNameProp; } & React.RefAttributes>;