@loyalty-cloud/ui-icons 1.1.128 → 1.1.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/fesm2022/loyalty-cloud-ui-icons.mjs +4 -20
  2. package/fesm2022/loyalty-cloud-ui-icons.mjs.map +1 -1
  3. package/package.json +1 -1
  4. package/src/assets/icons/lt-flag.svg +0 -5
  5. /package/src/assets/icons/{bg-flag.svg → BG-flag.svg} +0 -0
  6. /package/src/assets/icons/{cs-flag.svg → CS-flag.svg} +0 -0
  7. /package/src/assets/icons/{da-flag.svg → DA-flag.svg} +0 -0
  8. /package/src/assets/icons/{de-flag.svg → DE-flag.svg} +0 -0
  9. /package/src/assets/icons/{es-flag.svg → ES-flag.svg} +0 -0
  10. /package/src/assets/icons/{et-flag.svg → ET-flag.svg} +0 -0
  11. /package/src/assets/icons/{fi-flag.svg → FI-flag.svg} +0 -0
  12. /package/src/assets/icons/{fr-flag.svg → FR-flag.svg} +0 -0
  13. /package/src/assets/icons/{hr-flag.svg → HR-flag.svg} +0 -0
  14. /package/src/assets/icons/{hu-flag.svg → HU-flag.svg} +0 -0
  15. /package/src/assets/icons/{is-flag.svg → IS-flag.svg} +0 -0
  16. /package/src/assets/icons/{it-flag.svg → IT-flag.svg} +0 -0
  17. /package/src/assets/icons/{lv-flag.svg → LV-flag.svg} +0 -0
  18. /package/src/assets/icons/{mk-flag.svg → MK-flag.svg} +0 -0
  19. /package/src/assets/icons/{mt-flag.svg → MT-flag.svg} +0 -0
  20. /package/src/assets/icons/{nl-flag.svg → NL-flag.svg} +0 -0
  21. /package/src/assets/icons/{pl-flag.svg → PL-flag.svg} +0 -0
  22. /package/src/assets/icons/{pt-flag.svg → PT-flag.svg} +0 -0
  23. /package/src/assets/icons/{ro-flag.svg → RO-flag.svg} +0 -0
  24. /package/src/assets/icons/{ru-flag.svg → RU-flag.svg} +0 -0
  25. /package/src/assets/icons/{sk-flag.svg → SK-flag.svg} +0 -0
  26. /package/src/assets/icons/{sl-flag.svg → SL-flag.svg} +0 -0
  27. /package/src/assets/icons/{sq-flag.svg → SQ-flag.svg} +0 -0
  28. /package/src/assets/icons/{sv-flag.svg → SV-flag.svg} +0 -0
  29. /package/src/assets/icons/{uk-flag.svg → UK-flag.svg} +0 -0
@@ -87,26 +87,10 @@ class LcIconComponent {
87
87
  this.svgIcon = null;
88
88
  return;
89
89
  }
90
- // const iconPath = this.category
91
- // ? `../assets/icons/${this.category}/${this.name}.svg`
92
- // : `../assets/icons/${this.name}.svg`;
93
- // this.tryLoadIcon(this.name, iconPath, true);
94
- const original = this.name;
95
- const lower = this.name.toLowerCase();
96
- const upper = this.name.toUpperCase();
97
- const buildPath = (n) => this.category
98
- ? `../assets/icons/${this.category}/${n}.svg`
99
- : `../assets/icons/${n}.svg`;
100
- // 1️⃣ Existing production behavior
101
- this.tryLoadIcon(original, buildPath(original), true);
102
- // 2️⃣ Lowercase fallback (no placeholder fallback)
103
- if (lower !== original) {
104
- this.tryLoadIcon(lower, buildPath(lower), false);
105
- }
106
- // 3️⃣ Uppercase fallback (no placeholder fallback)
107
- if (upper !== original && upper !== lower) {
108
- this.tryLoadIcon(upper, buildPath(upper), false);
109
- }
90
+ const iconPath = this.category
91
+ ? `../assets/icons/${this.category}/${this.name}.svg`
92
+ : `../assets/icons/${this.name}.svg`;
93
+ this.tryLoadIcon(this.name, iconPath, true);
110
94
  }
111
95
  tryLoadIcon(name, path, allowFallback) {
112
96
  this.iconRegistry
@@ -1 +1 @@
1
- {"version":3,"file":"loyalty-cloud-ui-icons.mjs","sources":["../../../projects/loyalty-cloud-ui-icons/src/lib/svg-icon-cache.service.ts","../../../projects/loyalty-cloud-ui-icons/src/lib/lc-icon.component.ts","../../../projects/loyalty-cloud-ui-icons/src/lib/safe-html.pipe.ts","../../../projects/loyalty-cloud-ui-icons/src/lib/lc-icon.module.ts","../../../projects/loyalty-cloud-ui-icons/src/public-api.ts","../../../projects/loyalty-cloud-ui-icons/src/loyalty-cloud-ui-icons.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SvgIconCacheService {\n private iconCache = new Map<string, SafeHtml>();\n disabledColor: string = '#98A2B3';\n\n constructor(private sanitizer: DomSanitizer, private http: HttpClient) { }\n\n registerIcon(name: string, url: string, size: number, color: string, disabled: boolean = false, strokeColor:string): Observable<SafeHtml> {\n const cacheKey = `${name}-${size}-${color}-${disabled}-${strokeColor}`; // Unique cache key\n\n if (this.iconCache.has(cacheKey)) {\n return of(this.iconCache.get(cacheKey)!); // Return the cached icon\n }\n\n return this.http.get(url, { responseType: 'text' }).pipe(\n map((svg) => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, 'image/svg+xml');\n const svgElement = doc.querySelector('svg');\n\n if (svgElement) {\n // Update size attributes\n svgElement.setAttribute('width', `${size}`);\n svgElement.setAttribute('height', `${size}`);\n\n // Update color only for elements without a 'fill' attribute\n if(!strokeColor) {\n const elementsToUpdate = svgElement.querySelectorAll('path, circle, rect, polygon, ellipse');\n elementsToUpdate.forEach((el) => {\n if (!el.hasAttribute('fill')) {\n el.setAttribute('fill', disabled ? this.disabledColor : color || 'black');\n }\n });\n }\n\n // If color is NOT present but strokeColor is provided, apply it to elements with stroke\n if ((!color || color === 'currentColor') && strokeColor) {\n const elementsWithStroke = svgElement.querySelectorAll('[stroke]');\n elementsWithStroke.forEach((el) => {\n el.setAttribute('stroke', strokeColor);\n });\n }\n\n const serializedSvg = new XMLSerializer().serializeToString(svgElement);\n const sanitizedSvg = this.sanitizer.bypassSecurityTrustHtml(serializedSvg);\n this.iconCache.set(cacheKey, sanitizedSvg); // Cache using the unique key\n return sanitizedSvg;\n }\n\n throw new Error(`Invalid SVG content for icon: ${name}`);\n })\n );\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, SimpleChanges } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { SvgIconCacheService } from './svg-icon-cache.service';\n\n@Component({\n selector: 'lc-icon',\n template: `\n @if (svgIcon) {\n <div\n class=\"icon\"\n [innerHTML]=\"svgIcon\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n [style.color]=\"color\"\n >\n </div>\n }\n `,\n styleUrls: [\n 'lc-icon.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.Default,\n standalone: false\n})\nexport class LcIconComponent implements OnInit {\n @Input() name: string = '';\n @Input() category: string = '';\n @Input() size: number = 24;\n @Input() color: string = 'currentColor';\n @Input() strokeColor: string = '';\n @Input() disabled: boolean = false;\n @Input() placeholderIcon: string = '';\n\n svgIcon: SafeHtml | null | undefined = null;\n disabledColor: string = '#98A2B3';\n\n constructor(\n private iconRegistry: SvgIconCacheService,\n private cdr: ChangeDetectorRef\n ) { }\n\n ngOnChanges(changes: SimpleChanges) {\n this.loadIcon();\n }\n\n ngOnInit() {\n this.loadIcon();\n }\n\n private loadIcon() {\n if (!this.name) {\n console.warn('Icon name is required.');\n this.svgIcon = null;\n return;\n }\n\n // const iconPath = this.category\n // ? `../assets/icons/${this.category}/${this.name}.svg`\n // : `../assets/icons/${this.name}.svg`;\n\n // this.tryLoadIcon(this.name, iconPath, true);\n const original = this.name;\n const lower = this.name.toLowerCase();\n const upper = this.name.toUpperCase();\n\n const buildPath = (n: string) =>\n this.category\n ? `../assets/icons/${this.category}/${n}.svg`\n : `../assets/icons/${n}.svg`;\n\n // 1️⃣ Existing production behavior\n this.tryLoadIcon(original, buildPath(original), true);\n\n // 2️⃣ Lowercase fallback (no placeholder fallback)\n if (lower !== original) {\n this.tryLoadIcon(lower, buildPath(lower), false);\n }\n\n // 3️⃣ Uppercase fallback (no placeholder fallback)\n if (upper !== original && upper !== lower) {\n this.tryLoadIcon(upper, buildPath(upper), false);\n }\n }\n\n private tryLoadIcon(name: string, path: string, allowFallback: boolean) {\n this.iconRegistry\n .registerIcon(name, path, this.size, this.color, this.disabled, this.strokeColor)\n .subscribe(\n (icon) => {\n this.svgIcon = icon;\n this.cdr.detectChanges();\n },\n (error) => {\n // console.error(`Error loading icon \"${name}\":`, error);\n \n if (allowFallback && this.placeholderIcon && this.placeholderIcon !== name) {\n const fallbackPath = `../assets/icons/${this.placeholderIcon}.svg`;\n\n this.tryLoadIcon(this.placeholderIcon, fallbackPath, false);\n } else {\n this.svgIcon = null;\n }\n }\n );\n }\n}\n\n\n\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n standalone: false\n})\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(value: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(value);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LcIconComponent } from './lc-icon.component';\nimport { SafeHtmlPipe } from './safe-html.pipe';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\n\n\n@NgModule({ declarations: [LcIconComponent, SafeHtmlPipe],\n exports: [LcIconComponent], imports: [CommonModule], providers: [provideHttpClient(withInterceptorsFromDi())] })\nexport class LcIconModule {}\n","/*\n * Public API Surface of @loyalty-cloud/ui-icons\n */\n\nexport * from './lib/lc-icon.module';\nexport * from './lib/lc-icon.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SvgIconCacheService"],"mappings":";;;;;;;;;MASa,mBAAmB,CAAA;IAI9B,WAAA,CAAoB,SAAuB,EAAU,IAAgB,EAAA;QAAjD,IAAA,CAAA,SAAS,GAAT,SAAS;QAAwB,IAAA,CAAA,IAAI,GAAJ,IAAI;AAHjD,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAoB;QAC/C,IAAA,CAAA,aAAa,GAAW,SAAS;IAEwC;AAEzE,IAAA,YAAY,CAAC,IAAY,EAAE,GAAW,EAAE,IAAY,EAAE,KAAa,EAAE,QAAA,GAAoB,KAAK,EAAE,WAAkB,EAAA;AAChH,QAAA,MAAM,QAAQ,GAAG,CAAA,EAAG,IAAI,IAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,CAAC;QAEvE,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC,CAAC;QAC3C;QAEA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CACtD,GAAG,CAAC,CAAC,GAAG,KAAI;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC;YACxD,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC;YAE3C,IAAI,UAAU,EAAE;;gBAEd,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;gBAC3C,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;;gBAG5C,IAAG,CAAC,WAAW,EAAE;oBACf,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,sCAAsC,CAAC;AAC5F,oBAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;wBAC9B,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;AAC5B,4BAAA,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,IAAI,OAAO,CAAC;wBAC3E;AACF,oBAAA,CAAC,CAAC;gBACJ;;gBAGA,IAAI,CAAC,CAAC,KAAK,IAAI,KAAK,KAAK,cAAc,KAAK,WAAW,EAAE;oBACvD,MAAM,kBAAkB,GAAG,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC;AAClE,oBAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,EAAE,KAAI;AAChC,wBAAA,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC;AACxC,oBAAA,CAAC,CAAC;gBACJ;gBAEA,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC;gBACvE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,aAAa,CAAC;gBAC1E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC3C,gBAAA,OAAO,YAAY;YACrB;AAEA,YAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,CAAA,CAAE,CAAC;QAC1D,CAAC,CAAC,CACH;IACH;8GAnDW,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCgBY,eAAe,CAAA;IAY1B,WAAA,CACU,YAAiC,EACjC,GAAsB,EAAA;QADtB,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,GAAG,GAAH,GAAG;QAbJ,IAAA,CAAA,IAAI,GAAW,EAAE;QACjB,IAAA,CAAA,QAAQ,GAAW,EAAE;QACrB,IAAA,CAAA,IAAI,GAAW,EAAE;QACjB,IAAA,CAAA,KAAK,GAAW,cAAc;QAC9B,IAAA,CAAA,WAAW,GAAW,EAAE;QACxB,IAAA,CAAA,QAAQ,GAAY,KAAK;QACzB,IAAA,CAAA,eAAe,GAAW,EAAE;QAErC,IAAA,CAAA,OAAO,GAAgC,IAAI;QAC3C,IAAA,CAAA,aAAa,GAAW,SAAS;IAK7B;AAEJ,IAAA,WAAW,CAAC,OAAsB,EAAA;QAChC,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,QAAQ,EAAE;IACjB;IAEQ,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AACd,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACtC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACnB;QACF;;;;;AAOA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAErC,MAAM,SAAS,GAAG,CAAC,CAAS,KAC1B,IAAI,CAAC;AACH,cAAE,CAAA,gBAAA,EAAmB,IAAI,CAAC,QAAQ,CAAA,CAAA,EAAI,CAAC,CAAA,IAAA;AACvC,cAAE,CAAA,gBAAA,EAAmB,CAAC,CAAA,IAAA,CAAM;;AAGhC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;;AAGrD,QAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAClD;;QAGA,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,KAAK,EAAE;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAClD;IACF;AAEQ,IAAA,WAAW,CAAC,IAAY,EAAE,IAAY,EAAE,aAAsB,EAAA;AACpE,QAAA,IAAI,CAAC;aACF,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW;AAC/E,aAAA,SAAS,CACR,CAAC,IAAI,KAAI;AACP,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;AAC1B,QAAA,CAAC,EACD,CAAC,KAAK,KAAI;;AAGR,YAAA,IAAI,aAAa,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;AAC1E,gBAAA,MAAM,YAAY,GAAG,CAAA,gBAAA,EAAmB,IAAI,CAAC,eAAe,MAAM;gBAElE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,YAAY,EAAE,KAAK,CAAC;YAC7D;iBAAO;AACL,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI;YACrB;AACF,QAAA,CAAC,CACF;IACL;8GAhFW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlBd;;;;;;;;;;;AAWT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,iEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,OAAA,EAAA,CAAA,CAAA;;2FAOQ,eAAe,EAAA,UAAA,EAAA,CAAA;kBApB3B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAAA,QAAA,EACT;;;;;;;;;;;AAWT,IAAA,CAAA,EAAA,eAAA,EAIgB,uBAAuB,CAAC,OAAO,EAAA,UAAA,EACpC,KAAK,EAAA,MAAA,EAAA,CAAA,iEAAA,CAAA,EAAA;;sBAGlB;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;sBACA;;;MCxBU,YAAY,CAAA;AACvB,IAAA,WAAA,CAAoB,SAAuB,EAAA;QAAvB,IAAA,CAAA,SAAS,GAAT,SAAS;IAAiB;AAE9C,IAAA,SAAS,CAAC,KAAa,EAAA;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,KAAK,CAAC;IACtD;8GALW,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAZ,YAAY,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAJxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,UAAU,EAAE;AACf,iBAAA;;;MCGY,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,iBAFE,eAAe,EAAE,YAAY,CAAA,EAAA,OAAA,EAAA,CACd,YAAY,aAAxC,eAAe,CAAA,EAAA,CAAA,CAAA;+GAChB,YAAY,EAAA,SAAA,EAD2C,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAA,OAAA,EAAA,CAAvE,YAAY,CAAA,EAAA,CAAA,CAAA;;2FACzC,YAAY,EAAA,UAAA,EAAA,CAAA;kBAFxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,YAAY,EAAE,CAAC,eAAe,EAAE,YAAY,CAAC;oBACrD,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE;;;ACRnH;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"loyalty-cloud-ui-icons.mjs","sources":["../../../projects/loyalty-cloud-ui-icons/src/lib/svg-icon-cache.service.ts","../../../projects/loyalty-cloud-ui-icons/src/lib/lc-icon.component.ts","../../../projects/loyalty-cloud-ui-icons/src/lib/safe-html.pipe.ts","../../../projects/loyalty-cloud-ui-icons/src/lib/lc-icon.module.ts","../../../projects/loyalty-cloud-ui-icons/src/public-api.ts","../../../projects/loyalty-cloud-ui-icons/src/loyalty-cloud-ui-icons.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SvgIconCacheService {\n private iconCache = new Map<string, SafeHtml>();\n disabledColor: string = '#98A2B3';\n\n constructor(private sanitizer: DomSanitizer, private http: HttpClient) { }\n\n registerIcon(name: string, url: string, size: number, color: string, disabled: boolean = false, strokeColor:string): Observable<SafeHtml> {\n const cacheKey = `${name}-${size}-${color}-${disabled}-${strokeColor}`; // Unique cache key\n\n if (this.iconCache.has(cacheKey)) {\n return of(this.iconCache.get(cacheKey)!); // Return the cached icon\n }\n\n return this.http.get(url, { responseType: 'text' }).pipe(\n map((svg) => {\n const parser = new DOMParser();\n const doc = parser.parseFromString(svg, 'image/svg+xml');\n const svgElement = doc.querySelector('svg');\n\n if (svgElement) {\n // Update size attributes\n svgElement.setAttribute('width', `${size}`);\n svgElement.setAttribute('height', `${size}`);\n\n // Update color only for elements without a 'fill' attribute\n if(!strokeColor) {\n const elementsToUpdate = svgElement.querySelectorAll('path, circle, rect, polygon, ellipse');\n elementsToUpdate.forEach((el) => {\n if (!el.hasAttribute('fill')) {\n el.setAttribute('fill', disabled ? this.disabledColor : color || 'black');\n }\n });\n }\n\n // If color is NOT present but strokeColor is provided, apply it to elements with stroke\n if ((!color || color === 'currentColor') && strokeColor) {\n const elementsWithStroke = svgElement.querySelectorAll('[stroke]');\n elementsWithStroke.forEach((el) => {\n el.setAttribute('stroke', strokeColor);\n });\n }\n\n const serializedSvg = new XMLSerializer().serializeToString(svgElement);\n const sanitizedSvg = this.sanitizer.bypassSecurityTrustHtml(serializedSvg);\n this.iconCache.set(cacheKey, sanitizedSvg); // Cache using the unique key\n return sanitizedSvg;\n }\n\n throw new Error(`Invalid SVG content for icon: ${name}`);\n })\n );\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, OnInit, SimpleChanges } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { SvgIconCacheService } from './svg-icon-cache.service';\n\n@Component({\n selector: 'lc-icon',\n template: `\n @if (svgIcon) {\n <div\n class=\"icon\"\n [innerHTML]=\"svgIcon\"\n [style.width.px]=\"size\"\n [style.height.px]=\"size\"\n [style.color]=\"color\"\n >\n </div>\n }\n `,\n styleUrls: [\n 'lc-icon.component.scss'\n ],\n changeDetection: ChangeDetectionStrategy.Default,\n standalone: false\n})\nexport class LcIconComponent implements OnInit {\n @Input() name: string = '';\n @Input() category: string = '';\n @Input() size: number = 24;\n @Input() color: string = 'currentColor';\n @Input() strokeColor: string = '';\n @Input() disabled: boolean = false;\n @Input() placeholderIcon: string = '';\n\n svgIcon: SafeHtml | null | undefined = null;\n disabledColor: string = '#98A2B3';\n\n constructor(\n private iconRegistry: SvgIconCacheService,\n private cdr: ChangeDetectorRef\n ) { }\n\n ngOnChanges(changes: SimpleChanges) {\n this.loadIcon();\n }\n\n ngOnInit() {\n this.loadIcon();\n }\n\n private loadIcon() {\n if (!this.name) {\n console.warn('Icon name is required.');\n this.svgIcon = null;\n return;\n }\n\n const iconPath = this.category\n ? `../assets/icons/${this.category}/${this.name}.svg`\n : `../assets/icons/${this.name}.svg`;\n\n this.tryLoadIcon(this.name, iconPath, true);\n }\n\n private tryLoadIcon(name: string, path: string, allowFallback: boolean) {\n this.iconRegistry\n .registerIcon(name, path, this.size, this.color, this.disabled, this.strokeColor)\n .subscribe(\n (icon) => {\n this.svgIcon = icon;\n this.cdr.detectChanges();\n },\n (error) => {\n // console.error(`Error loading icon \"${name}\":`, error);\n \n if (allowFallback && this.placeholderIcon && this.placeholderIcon !== name) {\n const fallbackPath = `../assets/icons/${this.placeholderIcon}.svg`;\n\n this.tryLoadIcon(this.placeholderIcon, fallbackPath, false);\n } else {\n this.svgIcon = null;\n }\n }\n );\n }\n}\n\n\n\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n name: 'safeHtml',\n standalone: false\n})\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitizer: DomSanitizer) {}\n\n transform(value: string): SafeHtml {\n return this.sanitizer.bypassSecurityTrustHtml(value);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LcIconComponent } from './lc-icon.component';\nimport { SafeHtmlPipe } from './safe-html.pipe';\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\n\n\n@NgModule({ declarations: [LcIconComponent, SafeHtmlPipe],\n exports: [LcIconComponent], imports: [CommonModule], providers: [provideHttpClient(withInterceptorsFromDi())] })\nexport class LcIconModule {}\n","/*\n * Public API Surface of @loyalty-cloud/ui-icons\n */\n\nexport * from './lib/lc-icon.module';\nexport * from './lib/lc-icon.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.SvgIconCacheService"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loyalty-cloud/ui-icons",
3
- "version": "1.1.128",
3
+ "version": "1.1.130",
4
4
  "private": false,
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -1,5 +0,0 @@
1
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">
2
- <path fill="#6da544" d="M31.005 21.566c0.643-1.733 0.995-3.608 0.995-5.565s-0.352-3.832-0.995-5.565l-15.005-1.391-15.005 1.391c-0.643 1.733-0.995 3.608-0.995 5.565s0.352 3.832 0.995 5.565l15.005 1.391 15.005-1.391z"></path>
3
- <path fill="#ffda44" d="M31.004 10.434c-2.261-6.093-8.125-10.435-15.005-10.435s-12.744 4.342-15.005 10.435h30.010z"></path>
4
- <path fill="#d80027" d="M16.001 32.001c6.879 0 12.744-4.342 15.005-10.435h-30.010c2.261 6.093 8.125 10.435 15.005 10.435z"></path>
5
- </svg>
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes