{"version":3,"file":"verben-ng-ui-src-lib-components-svg.mjs","sources":["../../../projects/verben-ng-ui/src/lib/components/svg/svg.component.ts","../../../projects/verben-ng-ui/src/lib/components/svg/svg.module.ts","../../../projects/verben-ng-ui/src/lib/components/svg/verben-ng-ui-src-lib-components-svg.ts"],"sourcesContent":["import {\n  Component,\n  Input,\n  OnInit,\n  ElementRef,\n  ViewChild,\n  OnChanges,\n} from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Component({\n  selector: 'verben-svg',\n  template: '<span #svgContainer></span>',\n  styleUrls: ['./svg.component.css'],\n})\nexport class SvgComponent implements OnInit, OnChanges {\n  @Input() icon: string = '';\n  @Input() width: number = 24;\n  @Input() height: number = 24;\n  color: string = '';\n  @Input() fill: string = '';\n  @Input() stroke: string = '';\n  @Input() type: 'default' | 'outline' | 'solid' = 'default';\n\n  @Input() size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl';\n\n  @ViewChild('svgContainer', { static: true }) svgContainer!: ElementRef;\n\n  constructor(private http: HttpClient, private sanitizer: DomSanitizer) {}\n\n  ngOnInit(): void {\n    this.color = this.fill.length > 0 ? this.fill : this.stroke;\n    this.loadSvgIcon(this.icon);\n  }\n\n  ngOnChanges(): void {\n    this.color = this.fill.length > 0 ? this.fill : this.stroke;\n    this.loadSvgIcon(this.icon);\n  }\n\n  private getIconDimensions(): { width: number; height: number } {\n    let width = this.width;\n    let height = this.height;\n\n    if (this.size) {\n      switch (this.size) {\n        case 'sm':\n          width = height = 16;\n          break;\n        case 'md':\n          width = height = 24;\n          break;\n        case 'lg':\n          width = height = 32;\n          break;\n        case 'xl':\n          width = height = 48;\n          break;\n        case '2xl':\n          width = height = 52;\n          break;\n        case '3xl':\n          width = height = 64;\n          break;\n        case '4xl':\n          width = height = 80;\n          break;\n        default:\n          width = height = 16;\n          break;\n      }\n    }\n\n    return { width, height };\n  }\n\n  loadSvgIcon(iconName: string): void {\n    this.http\n      .get(`assets/lib-icons/${this.type}/${iconName}.svg`, {\n        responseType: 'text',\n      })\n      .subscribe(\n        (svgContent: string | null) => {\n          if (svgContent && svgContent.includes('<svg')) {\n            try {\n              this.updateSvg(svgContent);\n            } catch (err: any) {\n              // console.log({ Error: err });\n            }\n          } else {\n            // If response is not a valid SVG, try loading from project assets\n            this.fallbackLoad(iconName);\n          }\n        },\n        (error) => {\n          this.fallbackLoad(iconName);\n        }\n      );\n  }\n\n  private fallbackLoad(iconName: string): void {\n    this.http\n      .get(`assets/icons/${iconName}.svg`, { responseType: 'text' })\n      .subscribe(\n        (svgContent: string | null) => {\n          if (svgContent && svgContent.includes('<svg')) {\n            try {\n              this.updateSvg(svgContent);\n            } catch (err: any) {\n              // console.log({ Error: err });\n            }\n          } else {\n            //console.error(`Invalid SVG response for ${iconName}`);\n          }\n        },\n        (error) => {\n          // console.error(`Error loading SVG icon: ${error}`);\n        }\n      );\n  }\n\n  // loadSvgIcon(iconName: string): void {\n  //   this.http\n  //     .get(`assets/lib-icons/${this.type}/${iconName}.svg`, {\n  //       responseType: 'text',\n  //     })\n  //     .subscribe(\n  //       (svgContent: string | null) => {\n  //         //console.log({SvgContent: svgContent});\n  //         if (svgContent) {\n  //           try {\n  //             this.updateSvg(svgContent);\n  //           } catch (err: any) {\n  //             console.log({ Error: err });\n  //           }\n  //         }\n  //       },\n  //       (error) => {\n  //         this.http\n  //           .get(`assets/icons/${iconName}.svg`, { responseType: 'text' })\n  //           .subscribe(\n  //             (svgContent: string | null) => {\n  //               //console.log({SvgContent: svgContent});\n  //               if (svgContent) {\n  //                 try {\n  //                   this.updateSvg(svgContent);\n  //                 } catch (err: any) {\n  //                   console.log({ Error: err });\n  //                 }\n  //               }\n  //             },\n  //             (error) => {\n  //               console.error(`Error loading SVG icon: ${error}`);\n  //             }\n  //           );\n  //       }\n  //     );\n  // }\n\n  private updateSvg(svgContent: string): void {\n    const parser = new DOMParser();\n    const svgDoc = parser.parseFromString(svgContent, 'image/svg+xml');\n    const svgElement = svgDoc.documentElement;\n\n    const { width, height } = this.getIconDimensions();\n\n    svgElement.setAttribute('width', width.toString());\n    svgElement.setAttribute('height', height.toString());\n\n    const elementsToUpdate = [\n      'path',\n      'circle',\n      'line',\n      'rect',\n      'polygon',\n      'polyline',\n      'ellipse',\n    ];\n\n    elementsToUpdate.forEach((tag) => {\n      const elements = svgElement.querySelectorAll(tag);\n      elements.forEach((element) => {\n        const hasStroke =\n          element.hasAttribute('stroke') &&\n          element.getAttribute('stroke') !== 'none';\n        const hasFill =\n          element.hasAttribute('fill') &&\n          element.getAttribute('fill') !== 'none';\n\n        //  if (this.icon == 'academic-cap') {\n        //     console.log({\n        //       Element: element,\n        //       hasStroke: hasStroke,\n        //       hasFill: hasFill,\n        //       Stroke: element.getAttribute('stroke'),\n        //       Fill: element.getAttribute('fill'),\n        //     });\n        //   }\n        if (this.color && hasFill) {\n          element.setAttribute('fill', this.color);\n        }\n        if (this.color && hasStroke) {\n          element.setAttribute('stroke', this.color);\n        }\n      });\n    });\n\n    const masks = svgElement.querySelectorAll('mask');\n    masks.forEach((mask, index) => {\n      const newMaskId = `mask_${this.icon}_${index}`;\n      mask.setAttribute('id', newMaskId);\n\n      const maskReferences = svgElement.querySelectorAll(\n        `[mask=\"url(#${mask.id})\"]`\n      );\n      maskReferences.forEach((ref) => {\n        ref.setAttribute('mask', `url(#${newMaskId})`);\n      });\n    });\n\n    const svgContainerEl = this.svgContainer.nativeElement;\n    svgContainerEl.innerHTML = '';\n    svgContainerEl.appendChild(svgElement);\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { SvgComponent } from './svg.component';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n  declarations: [SvgComponent],\n  imports: [CommonModule], \n  exports: [SvgComponent]\n})\nexport class SvgModule {}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}