icon.component.mjs 8.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { DOCUMENT, NgClass } from '@angular/common';
  2. import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
  3. import { icons } from './icon.constants';
  4. import * as i0 from "@angular/core";
  5. export class IconComponent {
  6. constructor(renderer, document, el) {
  7. this.renderer = renderer;
  8. this.document = document;
  9. this.el = el;
  10. this.icon = '';
  11. this.iconClass = '';
  12. this.fill = 'currentColor';
  13. this.strokeWidth = 1.5;
  14. this.strokeColor = 'currentColor';
  15. this.size = 'base';
  16. this.iconPath = '';
  17. }
  18. ngOnInit() {
  19. this.injectSVG();
  20. this.strokeColor = this.getFormattedColor(this.strokeColor);
  21. this.fill = this.getFormattedColor(this.fill);
  22. }
  23. getFormattedColor(color) {
  24. if (color.startsWith('--')) {
  25. const rgbValue = getComputedStyle(document.documentElement).getPropertyValue(color).trim();
  26. return `rgb(${rgbValue})`;
  27. }
  28. return color;
  29. }
  30. getIconPath() {
  31. return `#${this.icon}`;
  32. }
  33. injectSVG() {
  34. const svgElement = this.renderer.createElement('div');
  35. this.renderer.setProperty(svgElement, 'innerHTML', icons);
  36. this.renderer.setStyle(svgElement, 'display', 'none');
  37. this.renderer.appendChild(this.document.body, svgElement);
  38. }
  39. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: IconComponent, deps: [{ token: i0.Renderer2 }, { token: DOCUMENT }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
  40. static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.1", type: IconComponent, isStandalone: true, selector: "ct-icon", inputs: { icon: "icon", iconClass: "iconClass", fill: "fill", strokeWidth: "strokeWidth", strokeColor: "strokeColor", size: "size" }, ngImport: i0, template: "<svg\n [ngClass]=\"iconClass\"\n [attr.fill]=\"fill\"\n [attr.stroke-width]=\"strokeWidth\"\n [attr.stroke]=\"strokeColor\"\n class=\"flex\"\n [class.size-3]=\"size === 'xs'\"\n [class.size-4]=\"size === 'sm'\"\n [class.size-5]=\"size === 'base'\"\n [class.size-6]=\"size === 'lg'\"\n [class.size-8]=\"size === 'xl'\">\n <use [attr.xlink:href]=\"getIconPath()\"></use>\n</svg>\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
  41. }
  42. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.1", ngImport: i0, type: IconComponent, decorators: [{
  43. type: Component,
  44. args: [{ selector: 'ct-icon', standalone: true, imports: [NgClass], changeDetection: ChangeDetectionStrategy.OnPush, template: "<svg\n [ngClass]=\"iconClass\"\n [attr.fill]=\"fill\"\n [attr.stroke-width]=\"strokeWidth\"\n [attr.stroke]=\"strokeColor\"\n class=\"flex\"\n [class.size-3]=\"size === 'xs'\"\n [class.size-4]=\"size === 'sm'\"\n [class.size-5]=\"size === 'base'\"\n [class.size-6]=\"size === 'lg'\"\n [class.size-8]=\"size === 'xl'\">\n <use [attr.xlink:href]=\"getIconPath()\"></use>\n</svg>\n" }]
  45. }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: Document, decorators: [{
  46. type: Inject,
  47. args: [DOCUMENT]
  48. }] }, { type: i0.ElementRef }], propDecorators: { icon: [{
  49. type: Input
  50. }], iconClass: [{
  51. type: Input
  52. }], fill: [{
  53. type: Input
  54. }], strokeWidth: [{
  55. type: Input
  56. }], strokeColor: [{
  57. type: Input
  58. }], size: [{
  59. type: Input
  60. }] } });
  61. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaXJjbGV0b25lL3NyYy9saWIvY29tcG9uZW50cy9hdG9tcy9pY29uL2ljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lyY2xldG9uZS9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvaWNvbi9pY29uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBU3pDLE1BQU0sT0FBTyxhQUFhO0lBU3hCLFlBQ1UsUUFBbUIsRUFDRCxRQUFrQixFQUNwQyxFQUFjO1FBRmQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDcEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQVhmLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsU0FBSSxHQUFHLGNBQWMsQ0FBQztRQUN0QixnQkFBVyxHQUFHLEdBQUcsQ0FBQztRQUNsQixnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQUM3QixTQUFJLEdBQXVDLE1BQU0sQ0FBQztRQUMzRCxhQUFRLEdBQUcsRUFBRSxDQUFDO0lBTVgsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0YsT0FBTyxPQUFPLFFBQVEsR0FBRyxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUM1RCxDQUFDOzhHQXRDVSxhQUFhLDJDQVdkLFFBQVE7a0dBWFAsYUFBYSx5TUNYMUIsdVlBYUEsNENETlksT0FBTzs7MkZBSU4sYUFBYTtrQkFQekIsU0FBUzsrQkFDRSxTQUFTLGNBQ1AsSUFBSSxXQUNQLENBQUMsT0FBTyxDQUFDLG1CQUVELHVCQUF1QixDQUFDLE1BQU07OzBCQWE1QyxNQUFNOzJCQUFDLFFBQVE7a0VBVlQsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaWNvbnMgfSBmcm9tICcuL2ljb24uY29uc3RhbnRzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3QtaWNvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtOZ0NsYXNzXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2ljb24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgSWNvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGljb24gPSAnJztcbiAgQElucHV0KCkgaWNvbkNsYXNzID0gJyc7XG4gIEBJbnB1dCgpIGZpbGwgPSAnY3VycmVudENvbG9yJztcbiAgQElucHV0KCkgc3Ryb2tlV2lkdGggPSAxLjU7XG4gIEBJbnB1dCgpIHN0cm9rZUNvbG9yID0gJ2N1cnJlbnRDb2xvcic7XG4gIEBJbnB1dCgpIHNpemU6ICd4cycgfCAnc20nIHwgJ2Jhc2UnIHwgJ2xnJyB8ICd4bCcgPSAnYmFzZSc7XG4gIGljb25QYXRoID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5qZWN0U1ZHKCk7XG4gICAgdGhpcy5zdHJva2VDb2xvciA9IHRoaXMuZ2V0Rm9ybWF0dGVkQ29sb3IodGhpcy5zdHJva2VDb2xvcik7XG4gICAgdGhpcy5maWxsID0gdGhpcy5nZXRGb3JtYXR0ZWRDb2xvcih0aGlzLmZpbGwpO1xuICB9XG5cbiAgZ2V0Rm9ybWF0dGVkQ29sb3IoY29sb3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGNvbG9yLnN0YXJ0c1dpdGgoJy0tJykpIHtcbiAgICAgIGNvbnN0IHJnYlZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoY29sb3IpLnRyaW0oKTtcbiAgICAgIHJldHVybiBgcmdiKCR7cmdiVmFsdWV9KWA7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxuXG4gIGdldEljb25QYXRoKCkge1xuICAgIHJldHVybiBgIyR7dGhpcy5pY29ufWA7XG4gIH1cblxuICBwcml2YXRlIGluamVjdFNWRygpIHtcbiAgICBjb25zdCBzdmdFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHN2Z0VsZW1lbnQsICdpbm5lckhUTUwnLCBpY29ucyk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShzdmdFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksIHN2Z0VsZW1lbnQpO1xuICB9XG59XG4iLCI8c3ZnXG4gIFtuZ0NsYXNzXT1cImljb25DbGFzc1wiXG4gIFthdHRyLmZpbGxdPVwiZmlsbFwiXG4gIFthdHRyLnN0cm9rZS13aWR0aF09XCJzdHJva2VXaWR0aFwiXG4gIFthdHRyLnN0cm9rZV09XCJzdHJva2VDb2xvclwiXG4gIGNsYXNzPVwiZmxleFwiXG4gIFtjbGFzcy5zaXplLTNdPVwic2l6ZSA9PT0gJ3hzJ1wiXG4gIFtjbGFzcy5zaXplLTRdPVwic2l6ZSA9PT0gJ3NtJ1wiXG4gIFtjbGFzcy5zaXplLTVdPVwic2l6ZSA9PT0gJ2Jhc2UnXCJcbiAgW2NsYXNzLnNpemUtNl09XCJzaXplID09PSAnbGcnXCJcbiAgW2NsYXNzLnNpemUtOF09XCJzaXplID09PSAneGwnXCI+XG4gIDx1c2UgW2F0dHIueGxpbms6aHJlZl09XCJnZXRJY29uUGF0aCgpXCI+PC91c2U+XG48L3N2Zz5cbiJdfQ==