import type { IconifyIcon } from '@iconify/types'; import type { IconifyJSON } from '@iconify/types'; import { IconifyTransformations } from '@iconify/types'; import type { JSX as JSX_2 } from 'react'; import type { ReactNode } from 'react'; import type { SVGProps } from 'react'; /** * Add collection to storage, allowing to call icons by name * * @param data Icon set * @param prefix Optional prefix to add to icon names, true (default) if prefix from icon set should be used. */ export declare function addCollection(data: IconifyJSON, prefix?: string | boolean): void; /** * Add icon to storage, allowing to call it by name * * @param name * @param data */ export declare function addIcon(name: string, data: IconifyIcon): void; /** * Block icon * * @param props - Component properties */ export declare const Icon: IconComponentType; declare type IconComponentType = (props: IconProps) => JSX_2.Element; /** * React component properties: generic element for Icon component, SVG for generated component */ declare type IconifyElementProps = SVGProps; export { IconifyIcon } /** * Icon customisation properties * * Extends the base Iconify icon customisations with React-specific options. * These properties control the appearance and behavior of the icon. */ export declare type IconifyIconCustomisations = IconifyIconCustomisations_2 & { /** * Rotation angle for the icon * * Can be specified as: * - String with units: "90deg", "0.5turn", "1.5708rad" * - Number representing quarter-turns: 0=0°, 1=90°, 2=180°, 3=270° * * @example * ```tsx * // No rotation * // 90° clockwise * // 180° rotation * // 180° rotation * ``` * * @see https://iconify.design/docs/icon-components/react/transform.html#rotation */ rotate?: string | number; /** * Display mode for the icon * * When `true`, the icon is displayed as an inline element with baseline * vertical alignment. When `false`, it's displayed as a block element * with middle vertical alignment. * * @default false * * @example * ```tsx * // Aligns with text baseline * // Centers vertically * ``` * * @see https://iconify.design/docs/icon-components/react/inline.html */ inline?: boolean; }; /** * Icon customisations */ declare interface IconifyIconCustomisations_2 extends IconifyTransformations, IconifyIconSizeCustomisations {} /** * Callback function invoked when icon data has been loaded from the API * * @param name - The name of the icon that was loaded (e.g., "mdi:home") */ declare type IconifyIconOnLoad = (name: string) => void; /** * Icon properties */ export declare interface IconifyIconProps extends IconifyIconCustomisations { /** * The icon to render * * Can be either: * - An icon object (IconifyIcon) containing SVG data * - A string with icon name in format "prefix:name" (must be loaded first) * * @see https://iconify.design/docs/icon-components/react/#icon */ icon: IconifyIcon | string; /** * Rendering mode for the icon * @see {@link IconifyRenderMode} */ mode?: IconifyRenderMode; /** * Icon color (for monotone icons only) * * Only affects monotone icons. Icons with hardcoded palettes (like emoji) * cannot be recolored. Accepts any valid CSS color value. * * @see https://iconify.design/docs/icon-components/react/color.html */ color?: string; /** * Flip transformation shorthand * * Convenient way to flip icons horizontally and/or vertically. * * @example * flip="horizontal" * flip="vertical" * flip="horizontal,vertical" * * @see https://iconify.design/docs/icon-components/react/transform.html#flip */ flip?: string; /** * Unique identifier for the icon * * Used as base for generating unique IDs for SVG elements and shapes. * Ensures consistent IDs for server-side rendering and accessibility. */ id?: string; /** * Server-side rendering mode * * When `true`, icon renders immediately without waiting for component * to mount. Useful for server-side rendering to prevent hydration issues. */ ssr?: boolean; /** * Fallback content while icon is loading or failed to load * * Displayed before the icon is loaded and rendered. If not provided, * an empty span will be rendered as placeholder. */ fallback?: ReactNode; /** * Callback fired when icon data is loaded * * Only triggered for icons loaded from the Iconify API. Not called * for icons that are already available or provided as objects. */ onLoad?: IconifyIconOnLoad; } /** * Icon size */ export declare type IconifyIconSize = null | string | number; /** * Dimensions */ declare interface IconifyIconSizeCustomisations { width?: IconifyIconSize; height?: IconifyIconSize; } export { IconifyJSON } /** * Icon rendering mode * * Defines how the icon should be rendered in the DOM. * * - `'svg'` - Render as SVG element (recommended, best compatibility) * - `'style'` - Auto-detect between 'bg' or 'mask' based on icon content * - `'bg'` - Render as `` with `background-image` CSS property * - `'mask'` - Render as `` with `mask-image` CSS property * * @see https://iconify.design/docs/icon-components/react/render-modes.html */ export declare type IconifyRenderMode = 'style' | 'bg' | 'mask' | 'svg'; /** * Mix of icon properties and SVGSVGElement properties */ export declare type IconProps = IconifyElementProps & IconifyIconProps; /** * Inline icon (has negative verticalAlign that makes it behave like icon font) * * @param props - Component properties */ export declare const InlineIcon: IconComponentType; export { }