import * as i0 from '@angular/core';
import { isDevMode, InjectionToken, SecurityContext, Injectable, Optional, Inject, Directive, Input, NgModule } from '@angular/core';
import { generate } from '@ant-design/colors';
import { DOCUMENT } from '@angular/common';
import * as i1 from '@angular/common/http';
import { HttpClient } from '@angular/common/http';
import { Subject, of, Observable } from 'rxjs';
import { map, tap, finalize, catchError, share, filter, take } from 'rxjs/operators';
import * as i2 from '@angular/platform-browser';

const ANT_ICON_ANGULAR_CONSOLE_PREFIX = '[@ant-design/icons-angular]:';
function error(message) {
    console.error(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX} ${message}.`);
}
function warn(message) {
    if (isDevMode()) {
        console.warn(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX} ${message}.`);
    }
}
function getSecondaryColor(primaryColor) {
    return generate(primaryColor)[0];
}
function withSuffix(name, theme) {
    switch (theme) {
        case 'fill': return `${name}-fill`;
        case 'outline': return `${name}-o`;
        case 'twotone': return `${name}-twotone`;
        case undefined: return name;
        default: throw new Error(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX}Theme "${theme}" is not a recognized theme!`);
    }
}
function withSuffixAndColor(name, theme, pri, sec) {
    return `${withSuffix(name, theme)}-${pri}-${sec}`;
}
function mapAbbrToTheme(abbr) {
    return abbr === 'o' ? 'outline' : abbr;
}
function alreadyHasAThemeSuffix(name) {
    return name.endsWith('-fill') || name.endsWith('-o') || name.endsWith('-twotone');
}
function isIconDefinition(target) {
    return (typeof target === 'object' &&
        typeof target.name === 'string' &&
        (typeof target.theme === 'string' || target.theme === undefined) &&
        typeof target.icon === 'string');
}
/**
 * Get an `IconDefinition` object from abbreviation type, like `account-book-fill`.
 * @param str
 */
function getIconDefinitionFromAbbr(str) {
    const arr = str.split('-');
    const theme = mapAbbrToTheme(arr.splice(arr.length - 1, 1)[0]);
    const name = arr.join('-');
    return {
        name,
        theme,
        icon: ''
    };
}
function cloneSVG(svg) {
    return svg.cloneNode(true);
}
/**
 * Parse inline SVG string and replace colors with placeholders. For twotone icons only.
 */
function replaceFillColor(raw) {
    return raw
        .replace(/['"]#333['"]/g, '"primaryColor"')
        .replace(/['"]#E6E6E6['"]/g, '"secondaryColor"')
        .replace(/['"]#D9D9D9['"]/g, '"secondaryColor"')
        .replace(/['"]#D8D8D8['"]/g, '"secondaryColor"');
}
/**
 * Split a name with namespace in it into a tuple like [ name, namespace ].
 */
function getNameAndNamespace(type) {
    const split = type.split(':');
    switch (split.length) {
        case 1: return [type, ''];
        case 2: return [split[1], split[0]];
        default: throw new Error(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX}The icon type ${type} is not valid!`);
    }
}
function hasNamespace(type) {
    return getNameAndNamespace(type)[1] !== '';
}

function NameSpaceIsNotSpecifyError() {
    return new Error(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX}Type should have a namespace. Try "namespace:${name}".`);
}
function IconNotFoundError(icon) {
    return new Error(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX}the icon ${icon} does not exist or is not registered.`);
}
function HttpModuleNotImport() {
    error(`you need to import "HttpClientModule" to use dynamic importing.`);
    return null;
}
function UrlNotSafeError(url) {
    return new Error(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX}The url "${url}" is unsafe.`);
}
function SVGTagNotFoundError() {
    return new Error(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX}<svg> tag not found.`);
}
function DynamicLoadingTimeoutError() {
    return new Error(`${ANT_ICON_ANGULAR_CONSOLE_PREFIX}Importing timeout error.`);
}

const JSONP_HANDLER_NAME = '__ant_icon_load';
const ANT_ICONS = new InjectionToken('ant_icons');
class IconService {
    set twoToneColor({ primaryColor, secondaryColor }) {
        this._twoToneColorPalette.primaryColor = primaryColor;
        this._twoToneColorPalette.secondaryColor =
            secondaryColor || getSecondaryColor(primaryColor);
    }
    get twoToneColor() {
        // Make a copy to avoid unexpected changes.
        return { ...this._twoToneColorPalette };
    }
    /**
     * Disable dynamic loading (support static loading only).
     */
    get _disableDynamicLoading() {
        return false;
    }
    constructor(_rendererFactory, _handler, _document, sanitizer, _antIcons) {
        this._rendererFactory = _rendererFactory;
        this._handler = _handler;
        this._document = _document;
        this.sanitizer = sanitizer;
        this._antIcons = _antIcons;
        this.defaultTheme = 'outline';
        /**
         * All icon definitions would be registered here.
         */
        this._svgDefinitions = new Map();
        /**
         * Cache all rendered icons. Icons are identified by name, theme,
         * and for twotone icons, primary color and secondary color.
         */
        this._svgRenderedDefinitions = new Map();
        this._inProgressFetches = new Map();
        /**
         * Url prefix for fetching inline SVG by dynamic importing.
         */
        this._assetsUrlRoot = '';
        this._twoToneColorPalette = {
            primaryColor: '#333333',
            secondaryColor: '#E6E6E6'
        };
        /** A flag indicates whether jsonp loading is enabled. */
        this._enableJsonpLoading = false;
        this._jsonpIconLoad$ = new Subject();
        this._renderer = this._rendererFactory.createRenderer(null, null);
        if (this._handler) {
            this._http = new HttpClient(this._handler);
        }
        if (this._antIcons) {
            this.addIcon(...this._antIcons);
        }
    }
    /**
     * Call this method to switch to jsonp like loading.
     */
    useJsonpLoading() {
        if (!this._enableJsonpLoading) {
            this._enableJsonpLoading = true;
            window[JSONP_HANDLER_NAME] = (icon) => {
                this._jsonpIconLoad$.next(icon);
            };
        }
        else {
            warn('You are already using jsonp loading.');
        }
    }
    /**
     * Change the prefix of the inline svg resources, so they could be deployed elsewhere, like CDN.
     * @param prefix
     */
    changeAssetsSource(prefix) {
        this._assetsUrlRoot = prefix.endsWith('/') ? prefix : prefix + '/';
    }
    /**
     * Add icons provided by ant design.
     * @param icons
     */
    addIcon(...icons) {
        icons.forEach(icon => {
            this._svgDefinitions.set(withSuffix(icon.name, icon.theme), icon);
        });
    }
    /**
     * Register an icon. Namespace is required.
     * @param type
     * @param literal
     */
    addIconLiteral(type, literal) {
        const [_, namespace] = getNameAndNamespace(type);
        if (!namespace) {
            throw NameSpaceIsNotSpecifyError();
        }
        this.addIcon({ name: type, icon: literal });
    }
    /**
     * Remove all cache.
     */
    clear() {
        this._svgDefinitions.clear();
        this._svgRenderedDefinitions.clear();
    }
    /**
     * Get a rendered `SVGElement`.
     * @param icon
     * @param twoToneColor
     */
    getRenderedContent(icon, twoToneColor) {
        // If `icon` is a `IconDefinition`, go to the next step. If not, try to fetch it from cache.
        const definition = isIconDefinition(icon)
            ? icon
            : this._svgDefinitions.get(icon) || null;
        if (!definition && this._disableDynamicLoading) {
            throw IconNotFoundError(icon);
        }
        // If `icon` is a `IconDefinition` of successfully fetch, wrap it in an `Observable`.
        // Otherwise try to fetch it from remote.
        const $iconDefinition = definition
            ? of(definition)
            : this._loadIconDynamically(icon);
        // If finally get an `IconDefinition`, render and return it. Otherwise throw an error.
        return $iconDefinition.pipe(map(i => {
            if (!i) {
                throw IconNotFoundError(icon);
            }
            return this._loadSVGFromCacheOrCreateNew(i, twoToneColor);
        }));
    }
    getCachedIcons() {
        return this._svgDefinitions;
    }
    /**
     * Get raw svg and assemble a `IconDefinition` object.
     * @param type
     */
    _loadIconDynamically(type) {
        // If developer doesn't provide HTTP module nor enable jsonp loading, just throw an error.
        if (!this._http && !this._enableJsonpLoading) {
            return of(HttpModuleNotImport());
        }
        // If multi directive ask for the same icon at the same time,
        // request should only be fired once.
        let inProgress = this._inProgressFetches.get(type);
        if (!inProgress) {
            const [name, namespace] = getNameAndNamespace(type);
            // If the string has a namespace within, create a simple `IconDefinition`.
            const icon = namespace
                ? { name: type, icon: '' }
                : getIconDefinitionFromAbbr(name);
            const suffix = this._enableJsonpLoading ? '.js' : '.svg';
            const url = (namespace
                ? `${this._assetsUrlRoot}assets/${namespace}/${name}`
                : `${this._assetsUrlRoot}assets/${icon.theme}/${icon.name}`) + suffix;
            const safeUrl = this.sanitizer.sanitize(SecurityContext.URL, url);
            if (!safeUrl) {
                throw UrlNotSafeError(url);
            }
            const source = !this._enableJsonpLoading
                ? this._http
                    .get(safeUrl, { responseType: 'text' })
                    .pipe(map(literal => ({ ...icon, icon: literal })))
                : this._loadIconDynamicallyWithJsonp(icon, safeUrl);
            inProgress = source.pipe(tap(definition => this.addIcon(definition)), finalize(() => this._inProgressFetches.delete(type)), catchError(() => of(null)), share());
            this._inProgressFetches.set(type, inProgress);
        }
        return inProgress;
    }
    _loadIconDynamicallyWithJsonp(icon, url) {
        return new Observable(subscriber => {
            const loader = this._document.createElement('script');
            const timer = setTimeout(() => {
                clean();
                subscriber.error(DynamicLoadingTimeoutError());
            }, 6000);
            loader.src = url;
            function clean() {
                loader.parentNode.removeChild(loader);
                clearTimeout(timer);
            }
            this._document.body.appendChild(loader);
            this._jsonpIconLoad$
                .pipe(filter(i => i.name === icon.name && i.theme === icon.theme), take(1))
                .subscribe(i => {
                subscriber.next(i);
                clean();
            });
        });
    }
    /**
     * Render a new `SVGElement` for a given `IconDefinition`, or make a copy from cache.
     * @param icon
     * @param twoToneColor
     */
    _loadSVGFromCacheOrCreateNew(icon, twoToneColor) {
        let svg;
        const pri = twoToneColor || this._twoToneColorPalette.primaryColor;
        const sec = getSecondaryColor(pri) || this._twoToneColorPalette.secondaryColor;
        const key = icon.theme === 'twotone'
            ? withSuffixAndColor(icon.name, icon.theme, pri, sec)
            : icon.theme === undefined
                ? icon.name
                : withSuffix(icon.name, icon.theme);
        // Try to make a copy from cache.
        const cached = this._svgRenderedDefinitions.get(key);
        if (cached) {
            svg = cached.icon;
        }
        else {
            svg = this._setSVGAttribute(this._colorizeSVGIcon(
            // Icons provided by ant design should be refined to remove preset colors.
            this._createSVGElementFromString(hasNamespace(icon.name) ? icon.icon : replaceFillColor(icon.icon)), icon.theme === 'twotone', pri, sec));
            // Cache it.
            this._svgRenderedDefinitions.set(key, {
                ...icon,
                icon: svg
            });
        }
        return cloneSVG(svg);
    }
    _createSVGElementFromString(str) {
        const div = this._document.createElement('div');
        div.innerHTML = str;
        const svg = div.querySelector('svg');
        if (!svg) {
            throw SVGTagNotFoundError;
        }
        return svg;
    }
    _setSVGAttribute(svg) {
        this._renderer.setAttribute(svg, 'width', '1em');
        this._renderer.setAttribute(svg, 'height', '1em');
        return svg;
    }
    _colorizeSVGIcon(svg, twotone, pri, sec) {
        if (twotone) {
            const children = svg.childNodes;
            const length = children.length;
            for (let i = 0; i < length; i++) {
                const child = children[i];
                if (child.getAttribute('fill') === 'secondaryColor') {
                    this._renderer.setAttribute(child, 'fill', sec);
                }
                else {
                    this._renderer.setAttribute(child, 'fill', pri);
                }
            }
        }
        this._renderer.setAttribute(svg, 'fill', 'currentColor');
        return svg;
    }
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: IconService, deps: [{ token: i0.RendererFactory2 }, { token: i1.HttpBackend, optional: true }, { token: DOCUMENT, optional: true }, { token: i2.DomSanitizer }, { token: ANT_ICONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
    static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: IconService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: IconService, decorators: [{
            type: Injectable
        }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: i1.HttpBackend, decorators: [{
                    type: Optional
                }] }, { type: undefined, decorators: [{
                    type: Optional
                }, {
                    type: Inject,
                    args: [DOCUMENT]
                }] }, { type: i2.DomSanitizer }, { type: undefined, decorators: [{
                    type: Optional
                }, {
                    type: Inject,
                    args: [ANT_ICONS]
                }] }]; } });

function checkMeta(prev, after) {
    return prev.type === after.type && prev.theme === after.theme && prev.twoToneColor === after.twoToneColor;
}
class IconDirective {
    constructor(_iconService, _elementRef, _renderer) {
        this._iconService = _iconService;
        this._elementRef = _elementRef;
        this._renderer = _renderer;
    }
    ngOnChanges(changes) {
        if (changes.type || changes.theme || changes.twoToneColor) {
            this._changeIcon();
        }
    }
    /**
     * Render a new icon in the current element. Remove the icon when `type` is falsy.
     */
    _changeIcon() {
        return new Promise(resolve => {
            if (!this.type) {
                this._clearSVGElement();
                resolve(null);
                return;
            }
            const beforeMeta = this._getSelfRenderMeta();
            this._iconService.getRenderedContent(this._parseIconType(this.type, this.theme), this.twoToneColor).subscribe(svg => {
                // avoid race condition
                // see https://github.com/ant-design/ant-design-icons/issues/315
                const afterMeta = this._getSelfRenderMeta();
                if (checkMeta(beforeMeta, afterMeta)) {
                    this._setSVGElement(svg);
                    resolve(svg);
                }
                else {
                    resolve(null);
                }
            });
        });
    }
    _getSelfRenderMeta() {
        return {
            type: this.type,
            theme: this.theme,
            twoToneColor: this.twoToneColor
        };
    }
    /**
     * Parse a icon to the standard form, an `IconDefinition` or a string like 'account-book-fill` (with a theme suffixed).
     * If namespace is specified, ignore theme because it meaningless for users' icons.
     *
     * @param type
     * @param theme
     */
    _parseIconType(type, theme) {
        if (isIconDefinition(type)) {
            return type;
        }
        else {
            const [name, namespace] = getNameAndNamespace(type);
            if (namespace) {
                return type;
            }
            if (alreadyHasAThemeSuffix(name)) {
                if (!!theme) {
                    warn(`'type' ${name} already gets a theme inside so 'theme' ${theme} would be ignored`);
                }
                return name;
            }
            else {
                return withSuffix(name, theme || this._iconService.defaultTheme);
            }
        }
    }
    _setSVGElement(svg) {
        this._clearSVGElement();
        this._renderer.appendChild(this._elementRef.nativeElement, svg);
    }
    _clearSVGElement() {
        const el = this._elementRef.nativeElement;
        const children = el.childNodes;
        const length = children.length;
        for (let i = length - 1; i >= 0; i--) {
            const child = children[i];
            if (child.tagName?.toLowerCase() === 'svg') {
                this._renderer.removeChild(el, child);
            }
        }
    }
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: IconDirective, deps: [{ token: IconService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.0.2", type: IconDirective, selector: "[antIcon]", inputs: { type: "type", theme: "theme", twoToneColor: "twoToneColor" }, usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: IconDirective, decorators: [{
            type: Directive,
            args: [{
                    selector: '[antIcon]'
                }]
        }], ctorParameters: function () { return [{ type: IconService }, { type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { type: [{
                type: Input
            }], theme: [{
                type: Input
            }], twoToneColor: [{
                type: Input
            }] } });

class IconModule {
    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: IconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
    static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.2", ngImport: i0, type: IconModule, declarations: [IconDirective], exports: [IconDirective] }); }
    static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: IconModule, providers: [IconService] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.2", ngImport: i0, type: IconModule, decorators: [{
            type: NgModule,
            args: [{
                    exports: [IconDirective],
                    declarations: [IconDirective],
                    providers: [IconService]
                }]
        }] });

const manifest = {
    fill: [
        'account-book', 'alipay-circle', 'amazon-circle', 'aliwangwang', 'android', 'amazon-square', 'alipay-square', 'api', 'alert', 'audio', 'apple', 'appstore', 'backward', 'behance-square', 'bell', 'book', 'box-plot', 'build', 'bug', 'bulb', 'calendar', 'caret-down', 'caret-right', 'camera', 'caret-left', 'caret-up', 'car', 'check-circle', 'carry-out', 'ci-circle', 'chrome', 'check-square', 'close-circle', 'clock-circle', 'calculator', 'close-square', 'cloud', 'code', 'code-sandbox-circle', 'code-sandbox-square', 'compass', 'behance-circle', 'container', 'codepen-circle', 'control', 'copy', 'copyright-circle', 'credit-card', 'crown', 'customer-service', 'database', 'dashboard', 'diff', 'delete', 'dingtalk-circle', 'dislike', 'dingtalk-square', 'down-circle', 'down-square', 'dribbble-circle', 'dropbox-circle', 'dribbble-square', 'edit', 'dropbox-square', 'environment', 'euro-circle', 'exclamation-circle', 'experiment', 'codepen-square', 'eye-invisible', 'eye', 'contacts', 'fast-backward', 'facebook', 'fast-forward', 'file-add', 'file-exclamation', 'file-image', 'file', 'file-markdown', 'file-pdf', 'file-ppt', 'file-unknown', 'file-zip', 'file-word', 'fire', 'filter', 'flag', 'folder-add', 'folder', 'bank', 'folder-open', 'file-excel', 'format-painter', 'forward', 'frown', 'funnel-plot', 'github', 'gift', 'file-text', 'dollar-circle', 'gitlab', 'google-plus-circle', 'fund', 'google-plus-square', 'golden', 'hdd', 'google-circle', 'gold', 'google-square', 'heart', 'highlight', 'home', 'hourglass', 'html5', 'ie-circle', 'ie-square', 'instagram', 'info-circle', 'insurance', 'interaction', 'left-circle', 'left-square', 'layout', 'like', 'linkedin', 'lock', 'mail', 'mac-command', 'medicine-box', 'meh', 'medium-square', 'message', 'minus-circle', 'mobile', 'idcard', 'notification', 'pay-circle', 'money-collect', 'play-circle', 'picture', 'play-square', 'pie-chart', 'plus-square', 'plus-circle', 'pound-circle', 'phone', 'profile', 'project', 'property-safety', 'pushpin', 'qq-circle', 'qq-square', 'question-circle', 'read', 'reconciliation', 'reddit-square', 'red-envelope', 'rest', 'right-circle', 'reddit-circle', 'pause-circle', 'right-square', 'robot', 'safety-certificate', 'save', 'schedule', 'rocket', 'security-scan', 'setting', 'medium-circle', 'shop', 'shopping', 'signal', 'skin', 'sketch-square', 'skype', 'sketch-circle', 'slack-circle', 'snippets', 'minus-square', 'sliders', 'sound', 'smile', 'step-backward', 'star', 'step-forward', 'stop', 'switcher', 'printer', 'tablet', 'tag', 'tags', 'taobao-circle', 'taobao-square', 'thunderbolt', 'trophy', 'trademark-circle', 'twitter-circle', 'unlock', 'up-square', 'up-circle', 'wallet', 'video-camera', 'twitter-square', 'usb', 'slack-square', 'weibo-square', 'warning', 'weibo-circle', 'yahoo', 'yuque', 'wechat', 'zhihu-circle', 'zhihu-square', 'tool', 'youtube', 'windows'
    ],
    outline: [
        'account-book', 'align-center', 'aim', 'align-left', 'alert', 'aliwangwang', 'aliyun', 'amazon', 'android', 'alipay', 'apple', 'align-right', 'alipay-circle', 'ant-cloud', 'ant-design', 'apartment', 'arrow-down', 'appstore', 'arrow-right', 'arrow-left', 'area-chart', 'audio-muted', 'api', 'audit', 'audio', 'arrow-up', 'arrows-alt', 'appstore-add', 'behance', 'bars', 'bar-chart', 'barcode', 'bg-colors', 'backward', 'block', 'border-inner', 'book', 'border-bottom', 'border-outer', 'border-left', 'border-top', 'behance-square', 'bold', 'border-horizontal', 'border', 'border-verticle', 'bug', 'branches', 'borderless-table', 'build', 'box-plot', 'bulb', 'alibaba', 'calendar', 'calculator', 'camera', 'car', 'caret-down', 'caret-right', 'caret-up', 'carry-out', 'check-circle', 'caret-left', 'check', 'ci-circle', 'chrome', 'clear', 'ci', 'close-circle', 'cloud-download', 'cloud', 'cloud-server', 'cloud-upload', 'cloud-sync', 'code', 'close', 'close-square', 'column-height', 'codepen', 'coffee', 'codepen-circle', 'column-width', 'clock-circle', 'comment', 'compass', 'compress', 'contacts', 'console-sql', 'container', 'control', 'check-square', 'copyright-circle', 'copy', 'credit-card', 'copyright', 'crown', 'dashboard', 'dash', 'customer-service', 'database', 'cluster', 'desktop', 'delete', 'delete-row', 'delivered-procedure', 'deployment-unit', 'dingding', 'diff', 'disconnect', 'dislike', 'bell', 'dollar-circle', 'dollar', 'dot-chart', 'double-right', 'double-left', 'down-circle', 'down-square', 'down', 'delete-column', 'dribbble', 'download', 'drag', 'ellipsis', 'border-right', 'dropbox', 'edit', 'euro', 'enter', 'environment', 'exception', 'exclamation-circle', 'expand', 'euro-circle', 'experiment', 'eye-invisible', 'export', 'expand-alt', 'eye', 'facebook', 'fall', 'field-binary', 'field-string', 'fast-forward', 'field-number', 'file-add', 'fast-backward', 'file-done', 'field-time', 'dribbble-square', 'file-image', 'file-excel', 'file-exclamation', 'file-markdown', 'file-gif', 'file-jpg', 'file-ppt', 'file-pdf', 'file', 'file-protect', 'dingtalk', 'file-text', 'file-search', 'file-word', 'file-unknown', 'file-zip', 'flag', 'fire', 'folder-add', 'filter', 'exclamation', 'folder', 'folder-view', 'font-colors', 'font-size', 'format-painter', 'forward', 'form', 'frown', 'fullscreen', 'fullscreen-exit', 'fork', 'file-sync', 'function', 'fund-view', 'folder-open', 'gateway', 'gif', 'fund-projection-screen', 'gift', 'funnel-plot', 'github', 'google', 'gitlab', 'gold', 'hdd', 'global', 'group', 'heart', 'heat-map', 'history', 'highlight', 'holder', 'home', 'hourglass', 'html5', 'inbox', 'ie', 'info', 'import', 'info-circle', 'insert-row-below', 'insert-row-left', 'google-plus', 'insurance', 'instagram', 'insert-row-right', 'italic', 'interaction', 'issues-close', 'key', 'insert-row-above', 'layout', 'laptop', 'left-circle', 'fund', 'left', 'line-chart', 'line-height', 'like', 'link', 'loading', 'linkedin', 'lock', 'loading-3-quarters', 'login', 'logout', 'line', 'medicine-box', 'mail', 'mac-command', 'medium', 'meh', 'man', 'menu', 'medium-workmark', 'menu-fold', 'menu-unfold', 'message', 'merge-cells', 'left-square', 'minus-circle', 'minus-square', 'money-collect', 'mobile', 'more', 'code-sandbox', 'minus', 'node-expand', 'node-index', 'monitor', 'node-collapse', 'number', 'partition', 'one-to-one', 'paper-clip', 'pause', 'pause-circle', 'phone', 'pay-circle', 'pic-center', 'bank', 'pic-right', 'percentage', 'picture', 'notification', 'play-square', 'pie-chart', 'pic-left', 'plus', 'plus-square', 'pound', 'pound-circle', 'plus-circle', 'ordered-list', 'printer', 'project', 'profile', 'property-safety', 'pull-request', 'pushpin', 'qrcode', 'question-circle', 'qq', 'radius-upleft', 'radius-bottomright', 'question', 'radar-chart', 'radius-bottomleft', 'radius-setting', 'radius-upright', 'play-circle', 'idcard', 'reconciliation', 'reddit', 'redo', 'retweet', 'reload', 'rest', 'robot', 'red-envelope', 'rollback', 'rotate-right', 'rocket', 'safety-certificate', 'rotate-left', 'right-circle', 'scan', 'save', 'safety', 'poweroff', 'security-scan', 'scissor', 'right', 'setting', 'search', 'share-alt', 'select', 'shake', 'send', 'shopping', 'shop', 'sketch', 'shrink', 'sisternode', 'rise', 'slack', 'skype', 'skin', 'small-dash', 'sliders', 'shopping-cart', 'sort-descending', 'solution', 'sound', 'slack-square', 'split-cells', 'star', 'stock', 'stop', 'step-backward', 'step-forward', 'strikethrough', 'subnode', 'swap-left', 'swap-right', 'swap', 'switcher', 'schedule', 'table', 'snippets', 'tablet', 'right-square', 'tags', 'taobao-circle', 'taobao', 'team', 'smile', 'thunderbolt', 'tag', 'tool', 'read', 'transaction', 'trademark-circle', 'trademark', 'sync', 'sort-ascending', 'undo', 'twitter', 'underline', 'to-top', 'ungroup', 'translation', 'unordered-list', 'up-circle', 'trophy', 'up-square', 'unlock', 'up', 'upload', 'usergroup-delete', 'usb', 'usergroup-add', 'user-add', 'user-switch', 'verified', 'user-delete', 'vertical-align-top', 'vertical-align-middle', 'vertical-align-bottom', 'vertical-left', 'video-camera-add', 'video-camera', 'vertical-right', 'wallet', 'warning', 'user', 'weibo-circle', 'weibo', 'whats-app', 'weibo-square', 'woman', 'wifi', 'wechat', 'zoom-in', 'zoom-out', 'yuque', 'youtube', 'yahoo', 'windows', 'zhihu'
    ],
    twotone: [
        'account-book', 'api', 'appstore', 'audio', 'bank', 'bell', 'book', 'box-plot', 'bug', 'build', 'bulb', 'calendar', 'alert', 'camera', 'car', 'check-square', 'carry-out', 'ci', 'ci-circle', 'close-circle', 'close-square', 'cloud', 'calculator', 'clock-circle', 'code', 'contacts', 'container', 'copy', 'control', 'copyright', 'copyright-circle', 'compass', 'credit-card', 'customer-service', 'dashboard', 'crown', 'database', 'check-circle', 'delete', 'diff', 'dislike', 'dollar-circle', 'dollar', 'down-square', 'edit', 'environment', 'euro', 'euro-circle', 'exclamation-circle', 'experiment', 'eye', 'file-add', 'file-excel', 'file-exclamation', 'file-image', 'file-markdown', 'file-ppt', 'file-pdf', 'file-text', 'down-circle', 'file', 'file-unknown', 'file-word', 'file-zip', 'filter', 'fire', 'flag', 'folder', 'folder-open', 'frown', 'folder-add', 'funnel-plot', 'gift', 'gold', 'hdd', 'heart', 'highlight', 'idcard', 'home', 'hourglass', 'info-circle', 'interaction', 'left-circle', 'layout', 'left-square', 'like', 'lock', 'fund', 'insurance', 'medicine-box', 'meh', 'message', 'minus-circle', 'minus-square', 'mobile', 'eye-invisible', 'money-collect', 'notification', 'pause-circle', 'phone', 'picture', 'pie-chart', 'play-circle', 'play-square', 'plus-square', 'plus-circle', 'pound-circle', 'printer', 'profile', 'project', 'property-safety', 'pushpin', 'question-circle', 'reconciliation', 'red-envelope', 'mail', 'html5', 'right-circle', 'right-square', 'rest', 'save', 'rocket', 'schedule', 'security-scan', 'setting', 'shopping', 'skin', 'shop', 'sliders', 'smile', 'snippets', 'sound', 'star', 'stop', 'tag', 'tags', 'switcher', 'thunderbolt', 'tool', 'tablet', 'safety-certificate', 'trophy', 'up-square', 'usb', 'up-circle', 'video-camera', 'wallet', 'unlock', 'warning', 'trademark-circle'
    ]
};

/**
 * Generated bundle index. Do not edit.
 */

export { ANT_ICONS, ANT_ICON_ANGULAR_CONSOLE_PREFIX, DynamicLoadingTimeoutError, HttpModuleNotImport, IconDirective, IconModule, IconNotFoundError, IconService, NameSpaceIsNotSpecifyError, SVGTagNotFoundError, UrlNotSafeError, alreadyHasAThemeSuffix, cloneSVG, error, getIconDefinitionFromAbbr, getNameAndNamespace, getSecondaryColor, hasNamespace, isIconDefinition, manifest, mapAbbrToTheme, replaceFillColor, warn, withSuffix, withSuffixAndColor };
//# sourceMappingURL=ant-design-icons-angular.mjs.map