UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

85 lines 10.1 kB
import { Directive, Renderer2, Input, ElementRef } from '@angular/core'; import * as i0 from "@angular/core"; /** * Allows to set a icon. Switches between c8y default icons * and font awesome icons. * ```html * <i [c8yIcon]="'clock'"> * ``` */ export class IconDirective { set c8yIcon(icon) { this.updateIcon(icon); } constructor(el, renderer) { this.el = el; this.renderer = renderer; this.c8yMatch = /^c8y-/; this.dltC8yMatch = /^dlt-c8y-/; this.currentClasses = ''; } isC8y(icon) { return this.c8yMatch.test(icon); } isDltC8y(icon) { return this.dltC8yMatch.test(icon); } getClasses(icon) { let classes = ''; if (typeof icon === 'object' && icon?.class) { icon.class = this.mapFontAwesomeToDelightIcons(icon.class); classes = `${this.isC8y(icon.class) ? `${icon.class.replace(this.c8yMatch, 'c8y-icon c8y-icon-')}` : this.isDltC8y(icon.class) ? '' : `c8y-icon dlt-c8y-icon-${icon.class}`} c8y-icon-duocolor`; return classes; } if (icon && typeof icon === 'string') { const _icon = icon.trim(); const isC8y = this.isC8y(_icon); const iconClass = isC8y ? _icon.replace(this.c8yMatch, 'c8y-icon-') : `c8y-icon dlt-c8y-icon-${_icon}`; classes = `${isC8y ? 'c8y-icon' : ''} ${iconClass}`; } return classes; } updateIcon(icon) { const newClasses = this.getClasses(icon); if (newClasses !== this.currentClasses) { this.currentClasses .split(/\s/) .filter(c => c) .forEach(klass => { this.renderer.removeClass(this.el.nativeElement, klass); }); newClasses .split(/\s/) .filter(c => c) .forEach(klass => { this.renderer.addClass(this.el.nativeElement, klass); }); this.currentClasses = newClasses; } } mapFontAwesomeToDelightIcons(iconClasses) { if (!iconClasses) { return; } const regex = /fa-/gi; return iconClasses.replace(regex, 'dlt-c8y-icon-'); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IconDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: IconDirective, isStandalone: true, selector: "[c8yIcon]", inputs: { c8yIcon: "c8yIcon" }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IconDirective, decorators: [{ type: Directive, args: [{ selector: '[c8yIcon]', standalone: true }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { c8yIcon: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2NvbW1vbi9pY29uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd4RTs7Ozs7O0dBTUc7QUFLSCxNQUFNLE9BQU8sYUFBYTtJQUN4QixJQUNJLE9BQU8sQ0FBQyxJQUFtRDtRQUM3RCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFLRCxZQUNVLEVBQWMsRUFDZCxRQUFtQjtRQURuQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQU5yQixhQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ25CLGdCQUFXLEdBQUcsV0FBVyxDQUFDO1FBQzFCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO0lBS3pCLENBQUM7SUFFSSxLQUFLLENBQUMsSUFBWTtRQUN4QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxRQUFRLENBQUMsSUFBWTtRQUMzQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBbUQ7UUFDcEUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsT0FBTyxHQUFHLEdBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNwQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG9CQUFvQixDQUFDLEVBQUU7Z0JBQzlELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ3pCLENBQUMsQ0FBQyxFQUFFO29CQUNKLENBQUMsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLEtBQUssRUFDM0Msb0JBQW9CLENBQUM7WUFDckIsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sU0FBUyxHQUFHLEtBQUs7Z0JBQ3JCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO2dCQUMzQyxDQUFDLENBQUMseUJBQXlCLEtBQUssRUFBRSxDQUFDO1lBQ3JDLE9BQU8sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFLENBQUM7UUFDdEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxVQUFVLENBQUMsSUFBbUQ7UUFDcEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLGNBQWM7aUJBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ1gsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRCxDQUFDLENBQUMsQ0FBQztZQUNMLFVBQVU7aUJBQ1AsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDWCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxXQUFtQjtRQUN0RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUM7UUFDdEIsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQztJQUNyRCxDQUFDOytHQXZFVSxhQUFhO21HQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBSnpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt1R0FHSyxPQUFPO3NCQURWLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIFJlbmRlcmVyMiwgSW5wdXQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgU3VwcG9ydGVkSWNvbnNTdWdnZXN0aW9ucyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvaWNvbi1zZWxlY3Rvci9pY29ucyc7XG5cbi8qKlxuICogQWxsb3dzIHRvIHNldCBhIGljb24uIFN3aXRjaGVzIGJldHdlZW4gYzh5IGRlZmF1bHQgaWNvbnNcbiAqIGFuZCBmb250IGF3ZXNvbWUgaWNvbnMuXG4gKiBgYGBodG1sXG4gKiA8aSBbYzh5SWNvbl09XCInY2xvY2snXCI+XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2M4eUljb25dJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJY29uRGlyZWN0aXZlIHtcbiAgQElucHV0KClcbiAgc2V0IGM4eUljb24oaWNvbjogU3VwcG9ydGVkSWNvbnNTdWdnZXN0aW9ucyB8IHsgY2xhc3M6IHN0cmluZyB9KSB7XG4gICAgdGhpcy51cGRhdGVJY29uKGljb24pO1xuICB9XG4gIHByaXZhdGUgYzh5TWF0Y2ggPSAvXmM4eS0vO1xuICBwcml2YXRlIGRsdEM4eU1hdGNoID0gL15kbHQtYzh5LS87XG4gIHByaXZhdGUgY3VycmVudENsYXNzZXMgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgcHJpdmF0ZSBpc0M4eShpY29uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jOHlNYXRjaC50ZXN0KGljb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RsdEM4eShpY29uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kbHRDOHlNYXRjaC50ZXN0KGljb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc2VzKGljb246IFN1cHBvcnRlZEljb25zU3VnZ2VzdGlvbnMgfCB7IGNsYXNzOiBzdHJpbmcgfSk6IHN0cmluZyB7XG4gICAgbGV0IGNsYXNzZXMgPSAnJztcbiAgICBpZiAodHlwZW9mIGljb24gPT09ICdvYmplY3QnICYmIGljb24/LmNsYXNzKSB7XG4gICAgICBpY29uLmNsYXNzID0gdGhpcy5tYXBGb250QXdlc29tZVRvRGVsaWdodEljb25zKGljb24uY2xhc3MpO1xuICAgICAgY2xhc3NlcyA9IGAke1xuICAgICAgICB0aGlzLmlzQzh5KGljb24uY2xhc3MpXG4gICAgICAgICAgPyBgJHtpY29uLmNsYXNzLnJlcGxhY2UodGhpcy5jOHlNYXRjaCwgJ2M4eS1pY29uIGM4eS1pY29uLScpfWBcbiAgICAgICAgICA6IHRoaXMuaXNEbHRDOHkoaWNvbi5jbGFzcylcbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogYGM4eS1pY29uIGRsdC1jOHktaWNvbi0ke2ljb24uY2xhc3N9YFxuICAgICAgfSBjOHktaWNvbi1kdW9jb2xvcmA7XG4gICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG4gICAgaWYgKGljb24gJiYgdHlwZW9mIGljb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBfaWNvbiA9IGljb24udHJpbSgpO1xuICAgICAgY29uc3QgaXNDOHkgPSB0aGlzLmlzQzh5KF9pY29uKTtcbiAgICAgIGNvbnN0IGljb25DbGFzcyA9IGlzQzh5XG4gICAgICAgID8gX2ljb24ucmVwbGFjZSh0aGlzLmM4eU1hdGNoLCAnYzh5LWljb24tJylcbiAgICAgICAgOiBgYzh5LWljb24gZGx0LWM4eS1pY29uLSR7X2ljb259YDtcbiAgICAgIGNsYXNzZXMgPSBgJHtpc0M4eSA/ICdjOHktaWNvbicgOiAnJ30gJHtpY29uQ2xhc3N9YDtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUljb24oaWNvbjogU3VwcG9ydGVkSWNvbnNTdWdnZXN0aW9ucyB8IHsgY2xhc3M6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgY29uc3QgbmV3Q2xhc3NlcyA9IHRoaXMuZ2V0Q2xhc3NlcyhpY29uKTtcbiAgICBpZiAobmV3Q2xhc3NlcyAhPT0gdGhpcy5jdXJyZW50Q2xhc3Nlcykge1xuICAgICAgdGhpcy5jdXJyZW50Q2xhc3Nlc1xuICAgICAgICAuc3BsaXQoL1xccy8pXG4gICAgICAgIC5maWx0ZXIoYyA9PiBjKVxuICAgICAgICAuZm9yRWFjaChrbGFzcyA9PiB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGtsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgICBuZXdDbGFzc2VzXG4gICAgICAgIC5zcGxpdCgvXFxzLylcbiAgICAgICAgLmZpbHRlcihjID0+IGMpXG4gICAgICAgIC5mb3JFYWNoKGtsYXNzID0+IHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwga2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgIHRoaXMuY3VycmVudENsYXNzZXMgPSBuZXdDbGFzc2VzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwRm9udEF3ZXNvbWVUb0RlbGlnaHRJY29ucyhpY29uQ2xhc3Nlczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWljb25DbGFzc2VzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlZ2V4ID0gL2ZhLS9naTtcbiAgICByZXR1cm4gaWNvbkNsYXNzZXMucmVwbGFjZShyZWdleCwgJ2RsdC1jOHktaWNvbi0nKTtcbiAgfVxufVxuIl19