icon.component.mjs 8.2 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 = '6';
  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.0", 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.0", 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 size-full\">\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.0", 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 size-full\">\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaXJjbGV0b25lL3NyYy9saWIvY29tcG9uZW50cy9hdG9tcy9pY29uL2ljb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2lyY2xldG9uZS9zcmMvbGliL2NvbXBvbmVudHMvYXRvbXMvaWNvbi9pY29uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBU3pDLE1BQU0sT0FBTyxhQUFhO0lBU3hCLFlBQ1UsUUFBbUIsRUFDRCxRQUFrQixFQUNwQyxFQUFjO1FBRmQsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNELGFBQVEsR0FBUixRQUFRLENBQVU7UUFDcEMsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQVhmLFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsU0FBSSxHQUFHLGNBQWMsQ0FBQztRQUN0QixnQkFBVyxHQUFHLEdBQUcsQ0FBQztRQUNsQixnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQUM3QixTQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLGFBQVEsR0FBRyxFQUFFLENBQUM7SUFNWCxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhO1FBQzdCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMzRixPQUFPLE9BQU8sUUFBUSxHQUFHLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxTQUFTO1FBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzVELENBQUM7OEdBdENVLGFBQWEsMkNBV2QsUUFBUTtrR0FYUCxhQUFhLHlNQ1gxQiwyTkFRQSw0Q0REWSxPQUFPOzsyRkFJTixhQUFhO2tCQVB6QixTQUFTOytCQUNFLFNBQVMsY0FDUCxJQUFJLFdBQ1AsQ0FBQyxPQUFPLENBQUMsbUJBRUQsdUJBQXVCLENBQUMsTUFBTTs7MEJBYTVDLE1BQU07MkJBQUMsUUFBUTtrRUFWVCxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5ULCBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgSW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpY29ucyB9IGZyb20gJy4vaWNvbi5jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjdC1pY29uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ2xhc3NdLFxuICB0ZW1wbGF0ZVVybDogJy4vaWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBJY29uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgaWNvbiA9ICcnO1xuICBASW5wdXQoKSBpY29uQ2xhc3MgPSAnJztcbiAgQElucHV0KCkgZmlsbCA9ICdjdXJyZW50Q29sb3InO1xuICBASW5wdXQoKSBzdHJva2VXaWR0aCA9IDEuNTtcbiAgQElucHV0KCkgc3Ryb2tlQ29sb3IgPSAnY3VycmVudENvbG9yJztcbiAgQElucHV0KCkgc2l6ZSA9ICc2JztcbiAgaWNvblBhdGggPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgcHJpdmF0ZSBlbDogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbmplY3RTVkcoKTtcbiAgICB0aGlzLnN0cm9rZUNvbG9yID0gdGhpcy5nZXRGb3JtYXR0ZWRDb2xvcih0aGlzLnN0cm9rZUNvbG9yKTtcbiAgICB0aGlzLmZpbGwgPSB0aGlzLmdldEZvcm1hdHRlZENvbG9yKHRoaXMuZmlsbCk7XG4gIH1cblxuICBnZXRGb3JtYXR0ZWRDb2xvcihjb2xvcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoY29sb3Iuc3RhcnRzV2l0aCgnLS0nKSkge1xuICAgICAgY29uc3QgcmdiVmFsdWUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShjb2xvcikudHJpbSgpO1xuICAgICAgcmV0dXJuIGByZ2IoJHtyZ2JWYWx1ZX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG5cbiAgZ2V0SWNvblBhdGgoKSB7XG4gICAgcmV0dXJuIGAjJHt0aGlzLmljb259YDtcbiAgfVxuXG4gIHByaXZhdGUgaW5qZWN0U1ZHKCkge1xuICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoc3ZnRWxlbWVudCwgJ2lubmVySFRNTCcsIGljb25zKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHN2Z0VsZW1lbnQsICdkaXNwbGF5JywgJ25vbmUnKTtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSwgc3ZnRWxlbWVudCk7XG4gIH1cbn1cbiIsIjxzdmdcbiAgW25nQ2xhc3NdPVwiaWNvbkNsYXNzXCJcbiAgW2F0dHIuZmlsbF09XCJmaWxsXCJcbiAgW2F0dHIuc3Ryb2tlLXdpZHRoXT1cInN0cm9rZVdpZHRoXCJcbiAgW2F0dHIuc3Ryb2tlXT1cInN0cm9rZUNvbG9yXCJcbiAgY2xhc3M9XCJmbGV4IHNpemUtZnVsbFwiPlxuICA8dXNlIFthdHRyLnhsaW5rOmhyZWZdPVwiZ2V0SWNvblBhdGgoKVwiPjwvdXNlPlxuPC9zdmc+XG4iXX0=