UNPKG

carbon-components-angular

Version:
129 lines 15 kB
import { Directive, Input } from "@angular/core"; import { getAttributes } from "@carbon/icon-helpers"; import * as i0 from "@angular/core"; import * as i1 from "./icon.service"; /** * A directive for populating a svg element based on the provided carbon icon name. * * Get started with importing the module: * * ```typescript * import { IconModule } from 'carbon-components-angular'; * ``` * * [See demo](../../?path=/story/components-icon--basic) */ export class IconDirective { constructor(elementRef, iconService) { this.elementRef = elementRef; this.iconService = iconService; this.cdsIcon = ""; this.size = "16"; this.title = ""; this.ariaLabel = ""; this.ariaLabelledBy = ""; this.ariaHidden = ""; this.isFocusable = false; } /** * @deprecated since v5 - Use `cdsIcon` input property instead */ set ibmIcon(iconName) { this.cdsIcon = iconName; } renderIcon(iconName) { const root = this.elementRef.nativeElement; let icon; try { icon = this.iconService.get(iconName, this.size.toString()); } catch (error) { console.warn(error); // bail out return; } const domParser = new DOMParser(); const rawSVG = icon.svg; const svgElement = domParser.parseFromString(rawSVG, "image/svg+xml").documentElement; let node = root.tagName.toUpperCase() !== "SVG" ? svgElement : svgElement.firstChild; root.innerHTML = ""; // Clear root element while (node) { // importNode makes a clone of the node // this ensures we keep looping over the nodes in the parsed document root.appendChild(root.ownerDocument.importNode(node, true)); // type the node because the angular compiler freaks out if it // ends up thinking it's a `Node` instead of a `ChildNode` node = node.nextSibling; } const svg = root.tagName.toUpperCase() !== "SVG" ? svgElement : root; const xmlns = "http://www.w3.org/2000/svg"; svg.setAttribute("xmlns", xmlns); const attributes = getAttributes({ width: icon.attrs.width, height: icon.attrs.height, viewBox: icon.attrs.viewBox, title: this.title, "aria-label": this.ariaLabel, "aria-labelledby": this.ariaLabelledBy, "aria-hidden": this.ariaHidden, focusable: this.isFocusable.toString(), fill: icon.attrs.fill }); const attrKeys = Object.keys(attributes); for (let i = 0; i < attrKeys.length; i++) { const key = attrKeys[i]; const value = attributes[key]; if (key === "title") { continue; } if (value) { svg.setAttribute(key, value); } } if (attributes["title"]) { const title = document.createElementNS(xmlns, "title"); title.textContent = attributes.title; IconDirective.titleIdCounter++; title.setAttribute("id", `${icon.name}-title-${IconDirective.titleIdCounter}`); // title must be first for screen readers svg.insertBefore(title, svg.firstElementChild); svg.setAttribute("aria-labelledby", `${icon.name}-title-${IconDirective.titleIdCounter}`); } } ngAfterViewInit() { this.renderIcon(this.cdsIcon); } ngOnChanges({ cdsIcon }) { // We want to ignore first change to let the icon register // and add only after view has been initialized if (cdsIcon && !cdsIcon.isFirstChange()) { this.renderIcon(this.cdsIcon); } } } IconDirective.titleIdCounter = 0; IconDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IconDirective, deps: [{ token: i0.ElementRef }, { token: i1.IconService }], target: i0.ɵɵFactoryTarget.Directive }); IconDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: { ibmIcon: "ibmIcon", cdsIcon: "cdsIcon", size: "size", title: "title", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", ariaHidden: "ariaHidden", isFocusable: "isFocusable" }, usesOnChanges: true, ngImport: i0 }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: IconDirective, decorators: [{ type: Directive, args: [{ selector: "[cdsIcon], [ibmIcon]" }] }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.IconService }]; }, propDecorators: { ibmIcon: [{ type: Input }], cdsIcon: [{ type: Input }], size: [{ type: Input }], title: [{ type: Input }], ariaLabel: [{ type: Input }], ariaLabelledBy: [{ type: Input }], ariaHidden: [{ type: Input }], isFocusable: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaWNvbi9pY29uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRU4sU0FBUyxFQUVULEtBQUssRUFHTCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7OztBQUVyRDs7Ozs7Ozs7OztHQVVHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUF5QnpCLFlBQ1csVUFBc0IsRUFDdEIsV0FBd0I7UUFEeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWhCMUIsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUViLFNBQUksR0FBRyxJQUFJLENBQUM7UUFFWixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRVgsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXBCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFLMUIsQ0FBQztJQTFCSjs7T0FFRztJQUNILElBQWEsT0FBTyxDQUFDLFFBQWdCO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUF1QkQsVUFBVSxDQUFDLFFBQWdCO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBNEIsQ0FBQztRQUUxRCxJQUFJLElBQUksQ0FBQztRQUNULElBQUk7WUFDSCxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUM1RDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixXQUFX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aUIsQ0FBQyxDQUFDO1lBQy9DLEdBQUcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxVQUFVLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1NBQzFGO0lBQ0YsQ0FBQztJQUVELGVBQWU7UUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQUUsT0FBTyxFQUFpQjtRQUNyQywwREFBMEQ7UUFDMUQsK0NBQStDO1FBQy9DLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzlCO0lBQ0YsQ0FBQzs7QUFuR00sNEJBQWMsR0FBRyxDQUFDLENBQUM7MEdBVGQsYUFBYTs4RkFBYixhQUFhOzJGQUFiLGFBQWE7a0JBSHpCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNCQUFzQjtpQkFDaEM7MkhBTWEsT0FBTztzQkFBbkIsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0QWZ0ZXJWaWV3SW5pdCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJY29uU2VydmljZSB9IGZyb20gXCIuL2ljb24uc2VydmljZVwiO1xuaW1wb3J0IHsgZ2V0QXR0cmlidXRlcyB9IGZyb20gXCJAY2FyYm9uL2ljb24taGVscGVyc1wiO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIGZvciBwb3B1bGF0aW5nIGEgc3ZnIGVsZW1lbnQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNhcmJvbiBpY29uIG5hbWUuXG4gKlxuICogR2V0IHN0YXJ0ZWQgd2l0aCBpbXBvcnRpbmcgdGhlIG1vZHVsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBJY29uTW9kdWxlIH0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG4gKiBgYGBcbiAqXG4gKiBbU2VlIGRlbW9dKC4uLy4uLz9wYXRoPS9zdG9yeS9jb21wb25lbnRzLWljb24tLWJhc2ljKVxuICovXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6IFwiW2Nkc0ljb25dLCBbaWJtSWNvbl1cIlxufSlcbmV4cG9ydCBjbGFzcyBJY29uRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcblxuXHQvKipcblx0ICogQGRlcHJlY2F0ZWQgc2luY2UgdjUgLSBVc2UgYGNkc0ljb25gIGlucHV0IHByb3BlcnR5IGluc3RlYWRcblx0ICovXG5cdEBJbnB1dCgpIHNldCBpYm1JY29uKGljb25OYW1lOiBzdHJpbmcpIHtcblx0XHR0aGlzLmNkc0ljb24gPSBpY29uTmFtZTtcblx0fVxuXG5cdHN0YXRpYyB0aXRsZUlkQ291bnRlciA9IDA7XG5cblx0QElucHV0KCkgY2RzSWNvbiA9IFwiXCI7XG5cblx0QElucHV0KCkgc2l6ZSA9IFwiMTZcIjtcblxuXHRASW5wdXQoKSB0aXRsZSA9IFwiXCI7XG5cblx0QElucHV0KCkgYXJpYUxhYmVsID0gXCJcIjtcblxuXHRASW5wdXQoKSBhcmlhTGFiZWxsZWRCeSA9IFwiXCI7XG5cblx0QElucHV0KCkgYXJpYUhpZGRlbiA9IFwiXCI7XG5cblx0QElucHV0KCkgaXNGb2N1c2FibGUgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZixcblx0XHRwcm90ZWN0ZWQgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlXG5cdCkge31cblxuXHRyZW5kZXJJY29uKGljb25OYW1lOiBzdHJpbmcpIHtcblx0XHRjb25zdCByb290ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG5cblx0XHRsZXQgaWNvbjtcblx0XHR0cnkge1xuXHRcdFx0aWNvbiA9IHRoaXMuaWNvblNlcnZpY2UuZ2V0KGljb25OYW1lLCB0aGlzLnNpemUudG9TdHJpbmcoKSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGNvbnNvbGUud2FybihlcnJvcik7XG5cdFx0XHQvLyBiYWlsIG91dFxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGRvbVBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcblx0XHRjb25zdCByYXdTVkcgPSBpY29uLnN2Zztcblx0XHRjb25zdCBzdmdFbGVtZW50ID0gZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyhyYXdTVkcsIFwiaW1hZ2Uvc3ZnK3htbFwiKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRsZXQgbm9kZTogQ2hpbGROb2RlID0gcm9vdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09IFwiU1ZHXCIgPyBzdmdFbGVtZW50IDogc3ZnRWxlbWVudC5maXJzdENoaWxkO1xuXHRcdHJvb3QuaW5uZXJIVE1MID0gXCJcIjsgLy8gQ2xlYXIgcm9vdCBlbGVtZW50XG5cdFx0d2hpbGUgKG5vZGUpIHtcblx0XHRcdC8vIGltcG9ydE5vZGUgbWFrZXMgYSBjbG9uZSBvZiB0aGUgbm9kZVxuXHRcdFx0Ly8gdGhpcyBlbnN1cmVzIHdlIGtlZXAgbG9vcGluZyBvdmVyIHRoZSBub2RlcyBpbiB0aGUgcGFyc2VkIGRvY3VtZW50XG5cdFx0XHRyb290LmFwcGVuZENoaWxkKHJvb3Qub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKG5vZGUsIHRydWUpKTtcblx0XHRcdC8vIHR5cGUgdGhlIG5vZGUgYmVjYXVzZSB0aGUgYW5ndWxhciBjb21waWxlciBmcmVha3Mgb3V0IGlmIGl0XG5cdFx0XHQvLyBlbmRzIHVwIHRoaW5raW5nIGl0J3MgYSBgTm9kZWAgaW5zdGVhZCBvZiBhIGBDaGlsZE5vZGVgXG5cdFx0XHRub2RlID0gbm9kZS5uZXh0U2libGluZyBhcyBDaGlsZE5vZGU7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3ZnID0gcm9vdC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09IFwiU1ZHXCIgPyBzdmdFbGVtZW50IDogcm9vdDtcblx0XHRjb25zdCB4bWxucyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcblx0XHRzdmcuc2V0QXR0cmlidXRlKFwieG1sbnNcIiwgeG1sbnMpO1xuXG5cdFx0Y29uc3QgYXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZXMoe1xuXHRcdFx0d2lkdGg6IGljb24uYXR0cnMud2lkdGgsXG5cdFx0XHRoZWlnaHQ6IGljb24uYXR0cnMuaGVpZ2h0LFxuXHRcdFx0dmlld0JveDogaWNvbi5hdHRycy52aWV3Qm94LFxuXHRcdFx0dGl0bGU6IHRoaXMudGl0bGUsXG5cdFx0XHRcImFyaWEtbGFiZWxcIjogdGhpcy5hcmlhTGFiZWwsXG5cdFx0XHRcImFyaWEtbGFiZWxsZWRieVwiOiB0aGlzLmFyaWFMYWJlbGxlZEJ5LFxuXHRcdFx0XCJhcmlhLWhpZGRlblwiOiB0aGlzLmFyaWFIaWRkZW4sXG5cdFx0XHRmb2N1c2FibGU6IHRoaXMuaXNGb2N1c2FibGUudG9TdHJpbmcoKSxcblx0XHRcdGZpbGw6IGljb24uYXR0cnMuZmlsbFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgYXR0cktleXMgPSBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJLZXlzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBrZXkgPSBhdHRyS2V5c1tpXTtcblx0XHRcdGNvbnN0IHZhbHVlID0gYXR0cmlidXRlc1trZXldO1xuXG5cdFx0XHRpZiAoa2V5ID09PSBcInRpdGxlXCIpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWx1ZSkge1xuXHRcdFx0XHRzdmcuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhdHRyaWJ1dGVzW1widGl0bGVcIl0pIHtcblx0XHRcdGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhtbG5zLCBcInRpdGxlXCIpO1xuXHRcdFx0dGl0bGUudGV4dENvbnRlbnQgPSBhdHRyaWJ1dGVzLnRpdGxlO1xuXHRcdFx0SWNvbkRpcmVjdGl2ZS50aXRsZUlkQ291bnRlcisrO1xuXHRcdFx0dGl0bGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgYCR7aWNvbi5uYW1lfS10aXRsZS0ke0ljb25EaXJlY3RpdmUudGl0bGVJZENvdW50ZXJ9YCk7XG5cdFx0XHQvLyB0aXRsZSBtdXN0IGJlIGZpcnN0IGZvciBzY3JlZW4gcmVhZGVyc1xuXHRcdFx0c3ZnLmluc2VydEJlZm9yZSh0aXRsZSwgc3ZnLmZpcnN0RWxlbWVudENoaWxkKTtcblx0XHRcdHN2Zy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsbGVkYnlcIiwgYCR7aWNvbi5uYW1lfS10aXRsZS0ke0ljb25EaXJlY3RpdmUudGl0bGVJZENvdW50ZXJ9YCk7XG5cdFx0fVxuXHR9XG5cblx0bmdBZnRlclZpZXdJbml0KCkge1xuXHRcdHRoaXMucmVuZGVySWNvbih0aGlzLmNkc0ljb24pO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoeyBjZHNJY29uIH06IFNpbXBsZUNoYW5nZXMpIHtcblx0XHQvLyBXZSB3YW50IHRvIGlnbm9yZSBmaXJzdCBjaGFuZ2UgdG8gbGV0IHRoZSBpY29uIHJlZ2lzdGVyXG5cdFx0Ly8gYW5kIGFkZCBvbmx5IGFmdGVyIHZpZXcgaGFzIGJlZW4gaW5pdGlhbGl6ZWRcblx0XHRpZiAoY2RzSWNvbiAmJiAhY2RzSWNvbi5pc0ZpcnN0Q2hhbmdlKCkpIHtcblx0XHRcdHRoaXMucmVuZGVySWNvbih0aGlzLmNkc0ljb24pO1xuXHRcdH1cblx0fVxufVxuIl19