import * as _angular_core from '@angular/core';
import { Provider, InjectionToken } from '@angular/core';
import { TranslatableString } from '@siemens/element-translate-ng/translate';
import * as _siemens_element_ng_common from '@siemens/element-ng/common';
import { StatusIcon, EntityStatusType } from '@siemens/element-ng/common';

/**
 * Global configuration for icons.
 */
interface IconConfig {
    /**
     * If true, the si-icon component will always render the icon font instead of the svg.
     *
     * @defaultValue false
     */
    disableSvgIcons?: boolean;
}
/**
 * Configure how Element handles icons. Provide only once in your global configuration.
 */
declare const provideIconConfig: (config: IconConfig) => Provider;
/**
 * Component to render a font or SVG icon depending on the configuration.
 * If no SVG icon is found, the component will fall back to render the icon-font.
 * In that case, an application must ensure that the icon font is loaded.
 * This component will only attach the respective class.
 *
 * The content of this component is hidden in the a11y tree.
 * If needed, the consumer must set proper labels.
 */
declare class SiIconComponent {
    /**
     * Define which icon should be rendered.
     * Provide using:
     * - value of the icon map provided by `addIcons`
     * - (not recommended): plain string in kebab-case or camelCase
     *
     * @example
     * ```ts
     * import { elementUser } from '@siemens/element-icons';
     *
     * @Component({template: `
     *   <si-icon [icon]="icons.elementUser" />
     *   <si-icon icon="element-user" />
     *   <si-icon icon="elementUser" />
     *
     * `})
     * class MyComponent {
     *   icons = addIcons(elementUser);
     * }
     * ```
     */
    readonly icon: _angular_core.InputSignal<string>;
    private readonly config;
    private readonly iconService;
    protected readonly svgIcon: _angular_core.Signal<string | undefined>;
    /** Icon class, which is ensured to be kebab-case. */
    protected readonly fontIcon: _angular_core.Signal<string | undefined>;
    private isKebabCase;
    /**
     * Converts a camelCase string to kebab-case.
     * If the string is already in kebab-case, it returns it unchanged.
     *
     * Note: This conversion has limitations with mixed alphanumeric cases.
     * Complex number-letter combinations may not convert as expected.
     */
    private camelToKebabCase;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiIconComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiIconComponent, "si-icon", never, { "icon": { "alias": "icon"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 * @deprecated This component should no longer be used.
 * Use the {@link SiIconComponent} instead.
 * Existing usages can be replaced as follows:
 *
 * ```html
 * <!-- before -->
 * <si-icon icon="element-user" color="text-danger" />
 * <!-- after -->
 * <si-icon icon="element-user" class="icon text-danger" />
 * ```
 *
 * **Important:** Previously, the class `icon` was automatically applied. Unless not needed,
 * it must now be applied manually.
 * The icon class scales up the icon compared to its surrounding text.
 *
 * Stacked icons need to be constructed in HTML directly.
 * If applicable, the `si-status-icon` component should be used instead.
 *
 * ```html
 * <!-- before -->
 * <si-icon
 *   icon="element-circle-filled"
 *   color="status-success"
 *   stackedIcon="element-state-tick"
 *   stackedColor="status-success-contrast"
 *   alt="Success"
 * />
 *
 * <!-- after -->
 * <div class="icon-stack icon" aria-label="Success">
 *   <si-icon icon="element-circle-filled" class="status-success" />
 *   <si-icon icon="element-state-tick" class="status-success-contrast" />
 * </div>
 * ```
 */
declare class SiIconLegacyComponent {
    /** Icon token, see {@link https://element.siemens.io/icons/element} */
    readonly icon: _angular_core.InputSignal<string | undefined>;
    /** Color class, see {@link https://element.siemens.io/fundamentals/typography/#color-variants-classes} */
    readonly color: _angular_core.InputSignal<string | undefined>;
    /** Icon token, see {@link https://element.siemens.io/fundamentals/icons/} */
    readonly stackedIcon: _angular_core.InputSignal<string | undefined>;
    /** Color class, see {@link https://element.siemens.io/fundamentals/icons/} */
    readonly stackedColor: _angular_core.InputSignal<string | undefined>;
    /** Alternative name or translation key for icon. Used for A11y. */
    readonly alt: _angular_core.InputSignal<TranslatableString | undefined>;
    /**
     * Text-size class for icon size, see {@link https://element.siemens.io/fundamentals/typography/#type-styles-classes}
     *
     * @defaultValue 'icon'
     */
    readonly size: _angular_core.InputSignal<string>;
    protected readonly altText: _angular_core.Signal<string>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiIconLegacyComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiIconLegacyComponent, "si-icon-legacy", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "stackedIcon": { "alias": "stackedIcon"; "required": false; "isSignal": true; }; "stackedColor": { "alias": "stackedColor"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
}

declare class SiIconModule {
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiIconModule, never>;
    static ɵmod: _angular_core.ɵɵNgModuleDeclaration<SiIconModule, never, [typeof SiIconComponent, typeof SiIconLegacyComponent], [typeof SiIconComponent, typeof SiIconLegacyComponent]>;
    static ɵinj: _angular_core.ɵɵInjectorDeclaration<SiIconModule>;
}

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */

/**
 * The status icon configuration.
 *
 * @experimental
 */
declare const STATUS_ICON_CONFIG: InjectionToken<{
    unknown: StatusIcon;
    info: StatusIcon;
    success: StatusIcon;
    warning: StatusIcon;
    danger: StatusIcon;
    caution: StatusIcon;
    critical: StatusIcon;
    pending: StatusIcon;
    progress: StatusIcon;
}>;

/**
 * Adds the provided icons.
 * It requires an Angular InjectionContent.
 * The Icons are available until the component is destroyed.
 * Call this function only in the component which actually uses the icon.
 * Importing all icons on the global level is discouraged.
 *
 * When using a string instead of the object to use an icon,
 * use the kebab-case version of the icon name.
 *
 * @example
 * ```ts
 * import { elementIcon } from '@siemens/element-icons';
 * import { addIcons } from '@siemens/element-ng/icon';
 *
 * @Component({`<si-icon [icon]="icons.elementIcon"`})
 * class MyComponent {
 *   icons = addIcons({ elementIcon })
 * }
 * ```
 */
declare const addIcons: <T extends string>(icons: Record<T, string>) => Record<T, string>;

declare class SiStatusIconComponent {
    private readonly statusIcons;
    readonly status: _angular_core.InputSignal<EntityStatusType>;
    protected readonly statusIcon: _angular_core.Signal<_siemens_element_ng_common.StatusIcon>;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<SiStatusIconComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<SiStatusIconComponent, "si-status-icon", never, { "status": { "alias": "status"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
}

/**
 * Copyright (c) Siemens 2016 - 2026
 * SPDX-License-Identifier: MIT
 */
declare const elementCheckedImageShape = "data:image/svg+xml;base64,PHN2ZyBpZD0iSWNvbiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+CiAgPHRpdGxlPm9rPC90aXRsZT4KICA8cGF0aCBkPSJNMzc5LjUxLDE1Ni43NmwtMTczLDE3My03NC03NGExMiwxMiwwLDEsMC0xNywxN2w4Mi41LDgyLjVhMTIsMTIsMCwwLDAsMTcsMGwxODEuNS0xODEuNWExMiwxMiwwLDAsMC0xNy0xN1oiLz4KPC9zdmc+Cg==";

export { STATUS_ICON_CONFIG, SiIconComponent, SiIconLegacyComponent, SiIconModule, SiStatusIconComponent, addIcons, elementCheckedImageShape, provideIconConfig };
export type { IconConfig };
