UNPKG

@fortawesome/angular-fontawesome

Version:
151 lines 18.6 kB
import { Component, HostBinding, Input, Optional } from '@angular/core'; import { icon, parse, } from '@fortawesome/fontawesome-svg-core'; import { faWarnIfIconDefinitionMissing } from '../shared/errors/warn-if-icon-html-missing'; import { faWarnIfIconSpecMissing } from '../shared/errors/warn-if-icon-spec-missing'; import { faClassList } from '../shared/utils/classlist.util'; import { faNormalizeIconSpec } from '../shared/utils/normalize-icon-spec.util'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "../config"; import * as i3 from "../icon-library"; import * as i4 from "../stack/stack-item-size.directive"; import * as i5 from "../stack/stack.component"; export class FaIconComponent { constructor(sanitizer, config, iconLibrary, stackItem, stack) { this.sanitizer = sanitizer; this.config = config; this.iconLibrary = iconLibrary; this.stackItem = stackItem; this.classes = []; if (stack != null && stackItem == null) { console.error('FontAwesome: fa-icon and fa-duotone-icon elements must specify stackItemSize attribute when wrapped into ' + 'fa-stack. Example: <fa-icon stackItemSize="2x"></fa-icon>.'); } } ngOnChanges(changes) { if (this.icon == null && this.config.fallbackIcon == null) { return faWarnIfIconSpecMissing(); } let iconToBeRendered = null; if (this.icon == null) { iconToBeRendered = this.config.fallbackIcon; } else { iconToBeRendered = this.icon; } if (changes) { const iconDefinition = this.findIconDefinition(iconToBeRendered); if (iconDefinition != null) { const params = this.buildParams(); this.renderIcon(iconDefinition, params); } } } /** * Programmatically trigger rendering of the icon. * * This method is useful, when creating {@link FaIconComponent} dynamically or * changing its inputs programmatically as in these cases icon won't be * re-rendered automatically. */ render() { this.ngOnChanges({}); } findIconDefinition(i) { const lookup = faNormalizeIconSpec(i, this.config.defaultPrefix); if ('icon' in lookup) { return lookup; } const definition = this.iconLibrary.getIconDefinition(lookup.prefix, lookup.iconName); if (definition != null) { return definition; } faWarnIfIconDefinitionMissing(lookup); return null; } buildParams() { const classOpts = { flip: this.flip, spin: this.spin, pulse: this.pulse, border: this.border, inverse: this.inverse, size: this.size || null, pull: this.pull || null, rotate: this.rotate || null, fixedWidth: typeof this.fixedWidth === 'boolean' ? this.fixedWidth : this.config.fixedWidth, stackItemSize: this.stackItem != null ? this.stackItem.stackItemSize : null, }; const parsedTransform = typeof this.transform === 'string' ? parse.transform(this.transform) : this.transform; return { title: this.title, transform: parsedTransform, classes: [...faClassList(classOpts), ...this.classes], mask: this.mask != null ? this.findIconDefinition(this.mask) : null, styles: this.styles != null ? this.styles : {}, symbol: this.symbol, attributes: { role: this.a11yRole, }, }; } renderIcon(definition, params) { const renderedIcon = icon(definition, params); this.renderedIconHTML = this.sanitizer.bypassSecurityTrustHtml(renderedIcon.html.join('\n')); } } FaIconComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FaIconComponent, deps: [{ token: i1.DomSanitizer }, { token: i2.FaConfig }, { token: i3.FaIconLibrary }, { token: i4.FaStackItemSizeDirective, optional: true }, { token: i5.FaStackComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component }); FaIconComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.0", type: FaIconComponent, selector: "fa-icon", inputs: { icon: "icon", title: "title", spin: "spin", pulse: "pulse", mask: "mask", styles: "styles", flip: "flip", size: "size", pull: "pull", border: "border", inverse: "inverse", symbol: "symbol", rotate: "rotate", fixedWidth: "fixedWidth", classes: "classes", transform: "transform", a11yRole: "a11yRole" }, host: { properties: { "attr.title": "title", "innerHTML": "this.renderedIconHTML" }, classAttribute: "ng-fa-icon" }, usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: FaIconComponent, decorators: [{ type: Component, args: [{ selector: 'fa-icon', template: ``, host: { class: 'ng-fa-icon', '[attr.title]': 'title', }, }] }], ctorParameters: function () { return [{ type: i1.DomSanitizer }, { type: i2.FaConfig }, { type: i3.FaIconLibrary }, { type: i4.FaStackItemSizeDirective, decorators: [{ type: Optional }] }, { type: i5.FaStackComponent, decorators: [{ type: Optional }] }]; }, propDecorators: { icon: [{ type: Input }], title: [{ type: Input }], spin: [{ type: Input }], pulse: [{ type: Input }], mask: [{ type: Input }], styles: [{ type: Input }], flip: [{ type: Input }], size: [{ type: Input }], pull: [{ type: Input }], border: [{ type: Input }], inverse: [{ type: Input }], symbol: [{ type: Input }], rotate: [{ type: Input }], fixedWidth: [{ type: Input }], classes: [{ type: Input }], transform: [{ type: Input }], a11yRole: [{ type: Input }], renderedIconHTML: [{ type: HostBinding, args: ['innerHTML'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2ljb24vaWNvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFbEcsT0FBTyxFQUlMLElBQUksRUFJSixLQUFLLEdBTU4sTUFBTSxtQ0FBbUMsQ0FBQztBQUczQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMENBQTBDLENBQUM7Ozs7Ozs7QUFZL0UsTUFBTSxPQUFPLGVBQWU7SUFpQzFCLFlBQ1UsU0FBdUIsRUFDdkIsTUFBZ0IsRUFDaEIsV0FBMEIsRUFDZCxTQUFtQyxFQUMzQyxLQUF1QjtRQUozQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLFdBQU0sR0FBTixNQUFNLENBQVU7UUFDaEIsZ0JBQVcsR0FBWCxXQUFXLENBQWU7UUFDZCxjQUFTLEdBQVQsU0FBUyxDQUEwQjtRQWhCaEQsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQW1CL0IsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDdEMsT0FBTyxDQUFDLEtBQUssQ0FDWCwyR0FBMkc7Z0JBQ3pHLDREQUE0RCxDQUMvRCxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO1lBQ3pELE9BQU8s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ZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csUUFBUTtzQkFBaEIsS0FBSztnQkFFb0IsZ0JBQWdCO3NCQUF6QyxXQUFXO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPcHRpb25hbCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtcbiAgRmFTeW1ib2wsXG4gIGZpbmRJY29uRGVmaW5pdGlvbixcbiAgRmxpcFByb3AsXG4gIGljb24sXG4gIEljb25EZWZpbml0aW9uLFxuICBJY29uUGFyYW1zLFxuICBJY29uUHJvcCxcbiAgcGFyc2UsXG4gIFB1bGxQcm9wLFxuICBSb3RhdGVQcm9wLFxuICBTaXplUHJvcCxcbiAgU3R5bGVzLFxuICBUcmFuc2Zvcm0sXG59IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XG5pbXBvcnQgeyBGYUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBGYUljb25MaWJyYXJ5IH0gZnJvbSAnLi4vaWNvbi1saWJyYXJ5JztcbmltcG9ydCB7IGZhV2FybklmSWNvbkRlZmluaXRpb25NaXNzaW5nIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9ycy93YXJuLWlmLWljb24taHRtbC1taXNzaW5nJztcbmltcG9ydCB7IGZhV2FybklmSWNvblNwZWNNaXNzaW5nIH0gZnJvbSAnLi4vc2hhcmVkL2Vycm9ycy93YXJuLWlmLWljb24tc3BlYy1taXNzaW5nJztcbmltcG9ydCB7IEZhUHJvcHMgfSBmcm9tICcuLi9zaGFyZWQvbW9kZWxzL3Byb3BzLm1vZGVsJztcbmltcG9ydCB7IGZhQ2xhc3NMaXN0IH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzL2NsYXNzbGlzdC51dGlsJztcbmltcG9ydCB7IGZhTm9ybWFsaXplSWNvblNwZWMgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMvbm9ybWFsaXplLWljb24tc3BlYy51dGlsJztcbmltcG9ydCB7IEZhU3RhY2tJdGVtU2l6ZURpcmVjdGl2ZSB9IGZyb20gJy4uL3N0YWNrL3N0YWNrLWl0ZW0tc2l6ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmFTdGFja0NvbXBvbmVudCB9IGZyb20gJy4uL3N0YWNrL3N0YWNrLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZhLWljb24nLFxuICB0ZW1wbGF0ZTogYGAsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ25nLWZhLWljb24nLFxuICAgICdbYXR0ci50aXRsZV0nOiAndGl0bGUnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBGYUljb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBpY29uOiBJY29uUHJvcDtcblxuICAvKipcbiAgICogU3BlY2lmeSBhIHRpdGxlIGZvciB0aGUgaWNvbi5cbiAgICogVGhpcyB0ZXh0IHdpbGwgYmUgZGlzcGxheWVkIGluIGEgdG9vbHRpcCBvbiBob3ZlciBhbmQgcHJlc2VudGVkIHRvIHRoZVxuICAgKiBzY3JlZW4gcmVhZGVycy5cbiAgICovXG4gIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xuICBASW5wdXQoKSBzcGluPzogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVsc2U/OiBib29sZWFuO1xuICBASW5wdXQoKSBtYXNrPzogSWNvblByb3A7XG4gIEBJbnB1dCgpIHN0eWxlcz86IFN0eWxlcztcbiAgQElucHV0KCkgZmxpcD86IEZsaXBQcm9wO1xuICBASW5wdXQoKSBzaXplPzogU2l6ZVByb3A7XG4gIEBJbnB1dCgpIHB1bGw/OiBQdWxsUHJvcDtcbiAgQElucHV0KCkgYm9yZGVyPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaW52ZXJzZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHN5bWJvbD86IEZhU3ltYm9sO1xuICBASW5wdXQoKSByb3RhdGU/OiBSb3RhdGVQcm9wO1xuICBASW5wdXQoKSBmaXhlZFdpZHRoPzogYm9vbGVhbjtcbiAgQElucHV0KCkgY2xhc3Nlcz86IHN0cmluZ1tdID0gW107XG4gIEBJbnB1dCgpIHRyYW5zZm9ybT86IHN0cmluZyB8IFRyYW5zZm9ybTtcblxuICAvKipcbiAgICogU3BlY2lmeSB0aGUgYHJvbGVgIGF0dHJpYnV0ZSBmb3IgdGhlIHJlbmRlcmVkIDxzdmc+IGVsZW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdpbWcnXG4gICAqL1xuICBASW5wdXQoKSBhMTF5Um9sZTogc3RyaW5nO1xuXG4gIEBIb3N0QmluZGluZygnaW5uZXJIVE1MJykgcmVuZGVyZWRJY29uSFRNTDogU2FmZUh0bWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGNvbmZpZzogRmFDb25maWcsXG4gICAgcHJpdmF0ZSBpY29uTGlicmFyeTogRmFJY29uTGlicmFyeSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHN0YWNrSXRlbTogRmFTdGFja0l0ZW1TaXplRGlyZWN0aXZlLFxuICAgIEBPcHRpb25hbCgpIHN0YWNrOiBGYVN0YWNrQ29tcG9uZW50LFxuICApIHtcbiAgICBpZiAoc3RhY2sgIT0gbnVsbCAmJiBzdGFja0l0ZW0gPT0gbnVsbCkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0ZvbnRBd2Vzb21lOiBmYS1pY29uIGFuZCBmYS1kdW90b25lLWljb24gZWxlbWVudHMgbXVzdCBzcGVjaWZ5IHN0YWNrSXRlbVNpemUgYXR0cmlidXRlIHdoZW4gd3JhcHBlZCBpbnRvICcgK1xuICAgICAgICAgICdmYS1zdGFjay4gRXhhbXBsZTogPGZhLWljb24gc3RhY2tJdGVtU2l6ZT1cIjJ4XCI+PC9mYS1pY29uPi4nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuaWNvbiA9PSBudWxsICYmIHRoaXMuY29uZmlnLmZhbGxiYWNrSWNvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFXYXJuSWZJY29uU3BlY01pc3NpbmcoKTtcbiAgICB9XG5cbiAgICBsZXQgaWNvblRvQmVSZW5kZXJlZDogSWNvblByb3AgPSBudWxsO1xuICAgIGlmICh0aGlzLmljb24gPT0gbnVsbCkge1xuICAgICAgaWNvblRvQmVSZW5kZXJlZCA9IHRoaXMuY29uZmlnLmZhbGxiYWNrSWNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvblRvQmVSZW5kZXJlZCA9IHRoaXMuaWNvbjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcykge1xuICAgICAgY29uc3QgaWNvbkRlZmluaXRpb24gPSB0aGlzLmZpbmRJY29uRGVmaW5pdGlvbihpY29uVG9CZVJlbmRlcmVkKTtcbiAgICAgIGlmIChpY29uRGVmaW5pdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuYnVpbGRQYXJhbXMoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJJY29uKGljb25EZWZpbml0aW9uLCBwYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9ncmFtbWF0aWNhbGx5IHRyaWdnZXIgcmVuZGVyaW5nIG9mIHRoZSBpY29uLlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwsIHdoZW4gY3JlYXRpbmcge0BsaW5rIEZhSWNvbkNvbXBvbmVudH0gZHluYW1pY2FsbHkgb3JcbiAgICogY2hhbmdpbmcgaXRzIGlucHV0cyBwcm9ncmFtbWF0aWNhbGx5IGFzIGluIHRoZXNlIGNhc2VzIGljb24gd29uJ3QgYmVcbiAgICogcmUtcmVuZGVyZWQgYXV0b21hdGljYWxseS5cbiAgICovXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLm5nT25DaGFuZ2VzKHt9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmaW5kSWNvbkRlZmluaXRpb24oaTogSWNvblByb3AgfCBJY29uRGVmaW5pdGlvbik6IEljb25EZWZpbml0aW9uIHwgbnVsbCB7XG4gICAgY29uc3QgbG9va3VwID0gZmFOb3JtYWxpemVJY29uU3BlYyhpLCB0aGlzLmNvbmZpZy5kZWZhdWx0UHJlZml4KTtcbiAgICBpZiAoJ2ljb24nIGluIGxvb2t1cCkge1xuICAgICAgcmV0dXJuIGxvb2t1cDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5pY29uTGlicmFyeS5nZXRJY29uRGVmaW5pdGlvbihsb29rdXAucHJlZml4LCBsb29rdXAuaWNvbk5hbWUpO1xuICAgIGlmIChkZWZpbml0aW9uICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH1cblxuICAgIGZhV2FybklmSWNvbkRlZmluaXRpb25NaXNzaW5nKGxvb2t1cCk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRQYXJhbXMoKSB7XG4gICAgY29uc3QgY2xhc3NPcHRzOiBGYVByb3BzID0ge1xuICAgICAgZmxpcDogdGhpcy5mbGlwLFxuICAgICAgc3BpbjogdGhpcy5zcGluLFxuICAgICAgcHVsc2U6IHRoaXMucHVsc2UsXG4gICAgICBib3JkZXI6IHRoaXMuYm9yZGVyLFxuICAgICAgaW52ZXJzZTogdGhpcy5pbnZlcnNlLFxuICAgICAgc2l6ZTogdGhpcy5zaXplIHx8IG51bGwsXG4gICAgICBwdWxsOiB0aGlzLnB1bGwgfHwgbnVsbCxcbiAgICAgIHJvdGF0ZTogdGhpcy5yb3RhdGUgfHwgbnVsbCxcbiAgICAgIGZpeGVkV2lkdGg6IHR5cGVvZiB0aGlzLmZpeGVkV2lkdGggPT09ICdib29sZWFuJyA/IHRoaXMuZml4ZWRXaWR0aCA6IHRoaXMuY29uZmlnLmZpeGVkV2lkdGgsXG4gICAgICBzdGFja0l0ZW1TaXplOiB0aGlzLnN0YWNrSXRlbSAhPSBudWxsID8gdGhpcy5zdGFja0l0ZW0uc3RhY2tJdGVtU2l6ZSA6IG51bGwsXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcnNlZFRyYW5zZm9ybSA9IHR5cGVvZiB0aGlzLnRyYW5zZm9ybSA9PT0gJ3N0cmluZycgPyBwYXJzZS50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm0pIDogdGhpcy50cmFuc2Zvcm07XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6IHRoaXMudGl0bGUsXG4gICAgICB0cmFuc2Zvcm06IHBhcnNlZFRyYW5zZm9ybSxcbiAgICAgIGNsYXNzZXM6IFsuLi5mYUNsYXNzTGlzdChjbGFzc09wdHMpLCAuLi50aGlzLmNsYXNzZXNdLFxuICAgICAgbWFzazogdGhpcy5tYXNrICE9IG51bGwgPyB0aGlzLmZpbmRJY29uRGVmaW5pdGlvbih0aGlzLm1hc2spIDogbnVsbCxcbiAgICAgIHN0eWxlczogdGhpcy5zdHlsZXMgIT0gbnVsbCA/IHRoaXMuc3R5bGVzIDoge30sXG4gICAgICBzeW1ib2w6IHRoaXMuc3ltYm9sLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICByb2xlOiB0aGlzLmExMXlSb2xlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJJY29uKGRlZmluaXRpb246IEljb25EZWZpbml0aW9uLCBwYXJhbXM6IEljb25QYXJhbXMpIHtcbiAgICBjb25zdCByZW5kZXJlZEljb24gPSBpY29uKGRlZmluaXRpb24sIHBhcmFtcyk7XG4gICAgdGhpcy5yZW5kZXJlZEljb25IVE1MID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwocmVuZGVyZWRJY29uLmh0bWwuam9pbignXFxuJykpO1xuICB9XG59XG4iXX0=