/** * Icon with optional parameters that are provided by API and affect only search */ declare interface APIIconAttributes { // True if icon is hidden. // Used in icon sets to keep icons that no longer exist, but should still be accessible // from API, preventing websites from breaking when icon is removed by developer. hidden?: boolean; } declare interface ExtendedIconifyAlias extends IconifyAlias, APIIconAttributes {} declare interface ExtendedIconifyIcon extends IconifyIcon, APIIconAttributes {} /** * Global variable */ declare const Iconify: IconifyGlobal; export default Iconify; /** * Alias. */ declare interface IconifyAlias extends IconifyOptional { // Parent icon index without prefix, required. parent: string; // IconifyOptional properties. // Alias should have only properties that it overrides. // Transformations are merged, not overridden. See IconifyTransformations comments. } /** * "aliases" field of JSON file. */ declare interface IconifyAliases { // Index is name of icon, without prefix. Value is ExtendedIconifyAlias object. [index: string]: ExtendedIconifyAlias; } /** * Interface for exported builder functions */ export declare interface IconifyBuilderFunctions { replaceIDs: (body: string, prefix?: string | (() => string)) => string; calculateSize: (size: string | number, ratio: number, precision?: number) => string | number; buildIcon: (icon: IconifyIcon, customisations: IconifyIconCustomisations) => IconifyIconBuildResult; } /** * Icon categories */ declare interface IconifyCategories { // Index is category title, such as "Weather". // Value is array of icons that belong to that category. // Each icon can belong to multiple categories or no categories. [index: string]: string[]; } /** * Characters used in font. */ declare interface IconifyChars { // Index is character, such as "f000". // Value is icon name. [index: string]: string; } /** * Iconify interface */ declare interface IconifyCommonFunctions { /** * Get version */ getVersion: () => string; /** * Render icons */ renderSVG: (name: string, customisations: IconifyIconCustomisations) => SVGElement | null; renderHTML: (name: string, customisations: IconifyIconCustomisations) => string | null; /** * Get icon data */ renderIcon: (name: string, customisations: IconifyIconCustomisations) => IconifyIconBuildResult | null; /** * Scan DOM */ scan: (root?: HTMLElement) => void; /** * Add root node */ observe: (root: HTMLElement) => void; /** * Remove root node */ stopObserving: (root: HTMLElement) => void; /** * Pause observer */ pauseObserver: (root?: HTMLElement) => void; /** * Resume observer */ resumeObserver: (root?: HTMLElement) => void; } /** * Icon dimensions. * * Used in: * icon (as is) * alias (overwrite icon's properties) * root of JSON file (default values) */ declare interface IconifyDimenisons { // Left position of viewBox. // Defaults to 0. left?: number; // Top position of viewBox. // Defaults to 0. top?: number; // Width of viewBox. // Defaults to 16. width?: number; // Height of viewBox. // Defaults to 16. height?: number; } /** * Iconify interface */ declare interface IconifyGlobal extends IconifyStorageFunctions, IconifyBuilderFunctions, IconifyCommonFunctions { } export { IconifyGlobal } export { IconifyGlobal as IconifyGlobalCommon } /** * Icon alignment */ export declare type IconifyHorizontalIconAlignment = 'left' | 'center' | 'right'; /** * Icon. */ export declare interface IconifyIcon extends IconifyOptional { // Icon body: , required. body: string; // IconifyOptional properties. // If property is missing in JSON file, look in root object for default value. } /** * Interface for getSVGData() result */ export declare interface IconifyIconBuildResult { attributes: { width: string; height: string; preserveAspectRatio: string; viewBox: string; }; body: string; inline?: boolean; } /** * Icon customisations */ export declare interface IconifyIconCustomisations { inline?: boolean; width?: IconifyIconSize; height?: IconifyIconSize; hAlign?: IconifyHorizontalIconAlignment; vAlign?: IconifyVerticalIconAlignment; slice?: boolean; hFlip?: boolean; vFlip?: boolean; rotate?: number; } /** * Icon name */ export declare interface IconifyIconName { readonly provider: string; readonly prefix: string; readonly name: string; } /** * "icons" field of JSON file. */ declare interface IconifyIcons { // Index is name of icon, without prefix. Value is ExtendedIconifyIcon object. [index: string]: ExtendedIconifyIcon; } /** * Icon size */ export declare type IconifyIconSize = null | string | number; /** * Icon set information block. */ declare interface IconifyInfo { // Icon set name. name: string; // Total number of icons. total?: number; // Version string. version?: string; // Author information. author: { // Author name. name: string; // Link to author's website or icon set website. url?: string; }; // License license: { // Human readable license. title: string; // SPDX license identifier. spdx?: string; // License URL. url?: string; }; // Array of icons that should be used for samples in icon sets list. samples: string[]; // Icon grid: number or array of numbers. height?: number | number[]; // Display height for samples: 16 - 24 displayHeight?: number; // Category on Iconify collections list. category?: string; // Palette status. True if icons have predefined color scheme, false if icons use currentColor. // Icon set should not mix icons with and without palette to simplify search. palette: boolean; } /** * JSON structure. * * All optional values can exist in root of JSON file, used as defaults. */ export declare interface IconifyJSON extends IconifyOptional, IconifyMetaData { // Prefix for icons in JSON file, required. prefix: string; // API provider, optional. provider?: string; // List of icons, required. icons: IconifyIcons; // Optional aliases. aliases?: IconifyAliases; // Optional list of missing icons. Returned by Iconify API when querying for icons that do not exist. not_found?: string[]; // IconifyOptional properties that are used as default values for icons when icon is missing value. // If property exists in both icon and root, use value from icon. // This is used to reduce duplication. } /** * Meta data stored in JSON file, used for browsing icon set. */ declare interface IconifyMetaData { // Icon set information block. Used for public icon sets, can be skipped for private icon sets. info?: IconifyInfo; // Characters used in font. Used for searching by character for icon sets imported from font, exporting icon set to font. chars?: IconifyChars; // Categories. Used for filtering icons. categories?: IconifyCategories; // Optional themes (old format). themes?: LegacyIconifyThemes; // Optional themes (new format). Key is prefix or suffix, value is title. prefixes?: Record; suffixes?: Record; } /** * Combination of dimensions and transformations. */ declare interface IconifyOptional extends IconifyDimenisons, IconifyTransformations { // } /** * Interface for exported storage functions */ export declare interface IconifyStorageFunctions { /** * Check if icon exists */ iconExists: (name: string) => boolean; /** * Get icon data with all properties */ getIcon: (name: string) => Required | null; /** * List all available icons */ listIcons: (provider?: string, prefix?: string) => string[]; /** * Add icon to storage */ addIcon: (name: string, data: IconifyIcon) => boolean; /** * Add icon set to storage */ addCollection: (data: IconifyJSON, provider?: string) => boolean; } /** * Icon transformations. * * Used in: * icon (as is) * alias (merged with icon's properties) * root of JSON file (default values) */ declare interface IconifyTransformations { // Number of 90 degrees rotations. // 0 = 0, 1 = 90deg and so on. // Defaults to 0. // When merged (such as alias + icon), result is icon.rotation + alias.rotation. rotate?: number; // Horizontal flip. // Defaults to false. // When merged, result is icon.hFlip !== alias.hFlip hFlip?: boolean; // Vertical flip. (see hFlip comments) vFlip?: boolean; } export declare type IconifyVerticalIconAlignment = 'top' | 'middle' | 'bottom'; /** * Optional themes, old format. * * Deprecated because format is unnecessary complicated. Key is meaningless, suffixes and prefixes are mixed together. */ declare interface LegacyIconifyThemes { // Key is unique string. [index: string]: { // Theme title. title: string; // Icon prefix or suffix, including dash. All icons that start with prefix and end with suffix belong to theme. prefix?: string; // Example: 'baseline-' suffix?: string; // Example: '-filled' }; } export { }