@skyux/icon 11.8.0 → 11.10.0

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 (43) hide show
  1. package/documentation.json +966 -101
  2. package/esm2022/index.mjs +4 -4
  3. package/esm2022/lib/modules/icon/icon-class-list.pipe.mjs +35 -0
  4. package/esm2022/lib/modules/icon/icon-resolver.service.mjs +79 -0
  5. package/esm2022/lib/modules/icon/icon-stack-item.mjs +2 -0
  6. package/esm2022/lib/{icon → modules/icon}/icon-stack.component.mjs +4 -4
  7. package/esm2022/lib/modules/icon/icon-svg-resolver.service.mjs +85 -0
  8. package/esm2022/lib/{icon → modules/icon}/icon-svg.component.mjs +4 -4
  9. package/esm2022/lib/modules/icon/icon.component.mjs +30 -0
  10. package/esm2022/lib/modules/icon/icon.module.mjs +21 -0
  11. package/esm2022/lib/modules/icon/types/icon-resolved.mjs +2 -0
  12. package/esm2022/lib/modules/icon/types/icon-type.mjs +2 -0
  13. package/esm2022/lib/modules/icon/types/icon-variant-type.mjs +2 -0
  14. package/esm2022/testing/public-api.mjs +2 -0
  15. package/esm2022/testing/skyux-icon-testing.mjs +2 -2
  16. package/fesm2022/skyux-icon-testing.mjs.map +1 -1
  17. package/fesm2022/skyux-icon.mjs +22 -22
  18. package/fesm2022/skyux-icon.mjs.map +1 -1
  19. package/index.d.ts +6 -6
  20. package/package.json +6 -6
  21. package/testing/index.d.ts +5 -2
  22. package/testing/public-api.d.ts +2 -0
  23. package/esm2022/lib/icon/icon-class-list.pipe.mjs +0 -35
  24. package/esm2022/lib/icon/icon-resolver.service.mjs +0 -79
  25. package/esm2022/lib/icon/icon-stack-item.mjs +0 -2
  26. package/esm2022/lib/icon/icon-svg-resolver.service.mjs +0 -85
  27. package/esm2022/lib/icon/icon.component.mjs +0 -30
  28. package/esm2022/lib/icon/icon.module.mjs +0 -21
  29. package/esm2022/lib/icon/types/icon-resolved.mjs +0 -2
  30. package/esm2022/lib/icon/types/icon-type.mjs +0 -2
  31. package/esm2022/lib/icon/types/icon-variant-type.mjs +0 -2
  32. package/esm2022/testing/index.mjs +0 -2
  33. /package/lib/{icon → modules/icon}/icon-class-list.pipe.d.ts +0 -0
  34. /package/lib/{icon → modules/icon}/icon-resolver.service.d.ts +0 -0
  35. /package/lib/{icon → modules/icon}/icon-stack-item.d.ts +0 -0
  36. /package/lib/{icon → modules/icon}/icon-stack.component.d.ts +0 -0
  37. /package/lib/{icon → modules/icon}/icon-svg-resolver.service.d.ts +0 -0
  38. /package/lib/{icon → modules/icon}/icon-svg.component.d.ts +0 -0
  39. /package/lib/{icon → modules/icon}/icon.component.d.ts +0 -0
  40. /package/lib/{icon → modules/icon}/icon.module.d.ts +0 -0
  41. /package/lib/{icon → modules/icon}/types/icon-resolved.d.ts +0 -0
  42. /package/lib/{icon → modules/icon}/types/icon-type.d.ts +0 -0
  43. /package/lib/{icon → modules/icon}/types/icon-variant-type.d.ts +0 -0
@@ -72,10 +72,10 @@ class SkyIconResolverService {
72
72
  iconType,
73
73
  };
74
74
  }
75
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
76
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconResolverService, providedIn: 'root' }); }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
76
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconResolverService, providedIn: 'root' }); }
77
77
  }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconResolverService, decorators: [{
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconResolverService, decorators: [{
79
79
  type: Injectable,
80
80
  args: [{
81
81
  providedIn: 'root',
@@ -104,10 +104,10 @@ class SkyIconClassListPipe {
104
104
  }
105
105
  return classList;
106
106
  }
107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconClassListPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
108
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: SkyIconClassListPipe, name: "skyIconClassList" }); }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconClassListPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
108
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: SkyIconClassListPipe, name: "skyIconClassList" }); }
109
109
  }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconClassListPipe, decorators: [{
110
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconClassListPipe, decorators: [{
111
111
  type: Pipe,
112
112
  args: [{
113
113
  name: 'skyIconClassList',
@@ -121,10 +121,10 @@ class SkyIconStackComponent {
121
121
  constructor() {
122
122
  this.themeSvc = inject(SkyThemeService, { optional: true });
123
123
  }
124
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
125
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.5", type: SkyIconStackComponent, selector: "sky-icon-stack", inputs: { size: "size", baseIcon: "baseIcon", topIcon: "topIcon" }, ngImport: i0, template: "<span\n aria-hidden=\"true\"\n class=\"sky-icon-stack fa-stack\"\n [ngClass]=\"size ? 'fa-' + size + ' sky-icon-stack-size-' + size : ''\"\n>\n <i\n *ngIf=\"baseIcon\"\n class=\"sky-icon fa-stack-2x\"\n [ngClass]=\"\n baseIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n <i\n *ngIf=\"topIcon\"\n class=\"sky-icon fa-stack-1x fa-inverse sky-icon-inverse\"\n [ngClass]=\"\n topIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n</span>\n", styles: [":host{display:inline-block;vertical-align:bottom}.sky-icon-stack-size-xs.fa-stack{width:1.25em;height:1.25em;line-height:1.25em}.sky-icon-stack-size-xs .fa-stack-2x{font-size:1.25em}.sky-icon-stack-size-xs .fa-stack-1x{font-size:.625em}.fa-stack-1x.sky-i-check:before{position:relative;top:.5px}.fa-stack-1x.sky-i-exclamation:before{position:relative;top:1.5px}.sky-icon-inverse{color:var(--sky-icon-stack-top-icon-color-override, #ffffff)}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-icon-inverse{color:#121212}.sky-theme-modern.sky-theme-mode-dark .sky-icon-inverse{color:#121212}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: SkyIconClassListPipe, name: "skyIconClassList" }] }); }
124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
125
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: SkyIconStackComponent, selector: "sky-icon-stack", inputs: { size: "size", baseIcon: "baseIcon", topIcon: "topIcon" }, ngImport: i0, template: "<span\n aria-hidden=\"true\"\n class=\"sky-icon-stack fa-stack\"\n [ngClass]=\"size ? 'fa-' + size + ' sky-icon-stack-size-' + size : ''\"\n>\n <i\n *ngIf=\"baseIcon\"\n class=\"sky-icon fa-stack-2x\"\n [ngClass]=\"\n baseIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n <i\n *ngIf=\"topIcon\"\n class=\"sky-icon fa-stack-1x fa-inverse sky-icon-inverse\"\n [ngClass]=\"\n topIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n</span>\n", styles: [":host{display:inline-block;vertical-align:bottom}.sky-icon-stack-size-xs.fa-stack{width:1.25em;height:1.25em;line-height:1.25em}.sky-icon-stack-size-xs .fa-stack-2x{font-size:1.25em}.sky-icon-stack-size-xs .fa-stack-1x{font-size:.625em}.fa-stack-1x.sky-i-check:before{position:relative;top:.5px}.fa-stack-1x.sky-i-exclamation:before{position:relative;top:1.5px}.sky-icon-inverse{color:var(--sky-icon-stack-top-icon-color-override, #ffffff)}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-icon-inverse{color:#121212}.sky-theme-modern.sky-theme-mode-dark .sky-icon-inverse{color:#121212}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: SkyIconClassListPipe, name: "skyIconClassList" }] }); }
126
126
  }
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconStackComponent, decorators: [{
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconStackComponent, decorators: [{
128
128
  type: Component,
129
129
  args: [{ selector: 'sky-icon-stack', template: "<span\n aria-hidden=\"true\"\n class=\"sky-icon-stack fa-stack\"\n [ngClass]=\"size ? 'fa-' + size + ' sky-icon-stack-size-' + size : ''\"\n>\n <i\n *ngIf=\"baseIcon\"\n class=\"sky-icon fa-stack-2x\"\n [ngClass]=\"\n baseIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n <i\n *ngIf=\"topIcon\"\n class=\"sky-icon fa-stack-1x fa-inverse sky-icon-inverse\"\n [ngClass]=\"\n topIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n</span>\n", styles: [":host{display:inline-block;vertical-align:bottom}.sky-icon-stack-size-xs.fa-stack{width:1.25em;height:1.25em;line-height:1.25em}.sky-icon-stack-size-xs .fa-stack-2x{font-size:1.25em}.sky-icon-stack-size-xs .fa-stack-1x{font-size:.625em}.fa-stack-1x.sky-i-check:before{position:relative;top:.5px}.fa-stack-1x.sky-i-exclamation:before{position:relative;top:1.5px}.sky-icon-inverse{color:var(--sky-icon-stack-top-icon-color-override, #ffffff)}:host-context(.sky-theme-modern.sky-theme-mode-dark) .sky-icon-inverse{color:#121212}.sky-theme-modern.sky-theme-mode-dark .sky-icon-inverse{color:#121212}\n"] }]
130
130
  }], propDecorators: { size: [{
@@ -208,10 +208,10 @@ class SkyIconSvgResolverService {
208
208
  href = `${href}-${nearestSize}-${variant}`;
209
209
  return href;
210
210
  }
211
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconSvgResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
212
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconSvgResolverService, providedIn: 'root' }); }
211
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconSvgResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
212
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconSvgResolverService, providedIn: 'root' }); }
213
213
  }
214
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconSvgResolverService, decorators: [{
214
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconSvgResolverService, decorators: [{
215
215
  type: Injectable,
216
216
  args: [{
217
217
  providedIn: 'root',
@@ -247,10 +247,10 @@ class SkyIconSvgComponent {
247
247
  }
248
248
  #resolverSvc;
249
249
  #iconInfo;
250
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconSvgComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
251
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.5", type: SkyIconSvgComponent, isStandalone: true, selector: "sky-icon-svg", inputs: { iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: true, isRequired: true, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, iconVariant: { classPropertyName: "iconVariant", publicName: "iconVariant", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<svg\n aria-hidden=\"true\"\n class=\"sky-icon-svg-img\"\n [ngClass]=\"iconSize() && 'sky-icon-svg-img-' + iconSize()\"\n>\n <use [attr.xlink:href]=\"iconHref()\"></use>\n</svg>\n", styles: [":host{display:inline-block;--sky-icon-svg-img-size: 1em;--sky-icon-svg-img-top: .15em}.sky-icon-svg-img{display:inline-block;fill:var(--sky-icon-svg-color-input, currentColor);height:var(--sky-icon-svg-img-size);width:var(--sky-icon-svg-img-size);text-align:center;position:relative;top:var(--sky-icon-svg-img-top)}.sky-icon-svg-img-lg{--sky-icon-svg-img-size: 1.333em;--sky-icon-svg-img-top: .2em}.sky-icon-svg-img-2x{--sky-icon-svg-img-size: 2em;--sky-icon-svg-img-top: .3em}.sky-icon-svg-img-3x{--sky-icon-svg-img-size: 3em;--sky-icon-svg-img-top: .45em}.sky-icon-svg-img-4x{--sky-icon-svg-img-size: 4em;--sky-icon-svg-img-top: .6em}.sky-icon-svg-img-5x{--sky-icon-svg-img-size: 5em;--sky-icon-svg-img-top: .75em}\n", ":host{display:inline-block;--sky-icon-svg-img-size: 1em;--sky-icon-svg-img-top: .15em}.sky-icon-svg-img{display:inline-block;fill:var(--sky-icon-svg-color-input, currentColor);height:var(--sky-icon-svg-img-size);width:var(--sky-icon-svg-img-size);text-align:center;position:relative;top:var(--sky-icon-svg-img-top)}.sky-icon-svg-img-lg{--sky-icon-svg-img-size: 1.333em;--sky-icon-svg-img-top: .2em}.sky-icon-svg-img-2x{--sky-icon-svg-img-size: 2em;--sky-icon-svg-img-top: .3em}.sky-icon-svg-img-3x{--sky-icon-svg-img-size: 3em;--sky-icon-svg-img-top: .45em}.sky-icon-svg-img-4x{--sky-icon-svg-img-size: 4em;--sky-icon-svg-img-top: .6em}.sky-icon-svg-img-5x{--sky-icon-svg-img-size: 5em;--sky-icon-svg-img-top: .75em}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
250
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconSvgComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
251
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.8", type: SkyIconSvgComponent, isStandalone: true, selector: "sky-icon-svg", inputs: { iconName: { classPropertyName: "iconName", publicName: "iconName", isSignal: true, isRequired: true, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, iconVariant: { classPropertyName: "iconVariant", publicName: "iconVariant", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<svg\n aria-hidden=\"true\"\n class=\"sky-icon-svg-img\"\n [ngClass]=\"iconSize() && 'sky-icon-svg-img-' + iconSize()\"\n>\n <use [attr.xlink:href]=\"iconHref()\"></use>\n</svg>\n", styles: [":host{display:inline-block;--sky-icon-svg-img-size: 1em;--sky-icon-svg-img-top: .15em}.sky-icon-svg-img{display:inline-block;fill:var(--sky-icon-svg-color-input, currentColor);height:var(--sky-icon-svg-img-size);width:var(--sky-icon-svg-img-size);text-align:center;position:relative;top:var(--sky-icon-svg-img-top)}.sky-icon-svg-img-lg{--sky-icon-svg-img-size: 1.333em;--sky-icon-svg-img-top: .2em}.sky-icon-svg-img-2x{--sky-icon-svg-img-size: 2em;--sky-icon-svg-img-top: .3em}.sky-icon-svg-img-3x{--sky-icon-svg-img-size: 3em;--sky-icon-svg-img-top: .45em}.sky-icon-svg-img-4x{--sky-icon-svg-img-size: 4em;--sky-icon-svg-img-top: .6em}.sky-icon-svg-img-5x{--sky-icon-svg-img-size: 5em;--sky-icon-svg-img-top: .75em}\n", ":host{display:inline-block;--sky-icon-svg-img-size: 1em;--sky-icon-svg-img-top: .15em}.sky-icon-svg-img{display:inline-block;fill:var(--sky-icon-svg-color-input, currentColor);height:var(--sky-icon-svg-img-size);width:var(--sky-icon-svg-img-size);text-align:center;position:relative;top:var(--sky-icon-svg-img-top)}.sky-icon-svg-img-lg{--sky-icon-svg-img-size: 1.333em;--sky-icon-svg-img-top: .2em}.sky-icon-svg-img-2x{--sky-icon-svg-img-size: 2em;--sky-icon-svg-img-top: .3em}.sky-icon-svg-img-3x{--sky-icon-svg-img-size: 3em;--sky-icon-svg-img-top: .45em}.sky-icon-svg-img-4x{--sky-icon-svg-img-size: 4em;--sky-icon-svg-img-top: .6em}.sky-icon-svg-img-5x{--sky-icon-svg-img-size: 5em;--sky-icon-svg-img-top: .75em}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
252
252
  }
253
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconSvgComponent, decorators: [{
253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconSvgComponent, decorators: [{
254
254
  type: Component,
255
255
  args: [{ selector: 'sky-icon-svg', standalone: true, imports: [NgClass, NgStyle], template: "<svg\n aria-hidden=\"true\"\n class=\"sky-icon-svg-img\"\n [ngClass]=\"iconSize() && 'sky-icon-svg-img-' + iconSize()\"\n>\n <use [attr.xlink:href]=\"iconHref()\"></use>\n</svg>\n", styles: [":host{display:inline-block;--sky-icon-svg-img-size: 1em;--sky-icon-svg-img-top: .15em}.sky-icon-svg-img{display:inline-block;fill:var(--sky-icon-svg-color-input, currentColor);height:var(--sky-icon-svg-img-size);width:var(--sky-icon-svg-img-size);text-align:center;position:relative;top:var(--sky-icon-svg-img-top)}.sky-icon-svg-img-lg{--sky-icon-svg-img-size: 1.333em;--sky-icon-svg-img-top: .2em}.sky-icon-svg-img-2x{--sky-icon-svg-img-size: 2em;--sky-icon-svg-img-top: .3em}.sky-icon-svg-img-3x{--sky-icon-svg-img-size: 3em;--sky-icon-svg-img-top: .45em}.sky-icon-svg-img-4x{--sky-icon-svg-img-size: 4em;--sky-icon-svg-img-top: .6em}.sky-icon-svg-img-5x{--sky-icon-svg-img-size: 5em;--sky-icon-svg-img-top: .75em}\n", ":host{display:inline-block;--sky-icon-svg-img-size: 1em;--sky-icon-svg-img-top: .15em}.sky-icon-svg-img{display:inline-block;fill:var(--sky-icon-svg-color-input, currentColor);height:var(--sky-icon-svg-img-size);width:var(--sky-icon-svg-img-size);text-align:center;position:relative;top:var(--sky-icon-svg-img-top)}.sky-icon-svg-img-lg{--sky-icon-svg-img-size: 1.333em;--sky-icon-svg-img-top: .2em}.sky-icon-svg-img-2x{--sky-icon-svg-img-size: 2em;--sky-icon-svg-img-top: .3em}.sky-icon-svg-img-3x{--sky-icon-svg-img-size: 3em;--sky-icon-svg-img-top: .45em}.sky-icon-svg-img-4x{--sky-icon-svg-img-size: 4em;--sky-icon-svg-img-top: .6em}.sky-icon-svg-img-5x{--sky-icon-svg-img-size: 5em;--sky-icon-svg-img-top: .75em}\n"] }]
256
256
  }] });
@@ -259,10 +259,10 @@ class SkyIconComponent {
259
259
  constructor() {
260
260
  this.themeSvc = inject(SkyThemeService, { optional: true });
261
261
  }
262
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
263
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: SkyIconComponent, selector: "sky-icon", inputs: { icon: "icon", iconName: "iconName", iconType: "iconType", size: "size", fixedWidth: "fixedWidth", variant: "variant" }, ngImport: i0, template: "@if (iconName) {\n <sky-icon-svg\n [iconName]=\"iconName\"\n [iconSize]=\"size\"\n [iconVariant]=\"variant\"\n />\n} @else {\n <i\n *ngIf=\"icon\"\n aria-hidden=\"true\"\n class=\"sky-icon\"\n [attr.data-sky-icon]=\"icon\"\n [attr.data-sky-icon-type]=\"iconType\"\n [attr.data-sky-icon-variant]=\"variant\"\n [ngClass]=\"\n icon\n | skyIconClassList\n : (themeSvc?.settingsChange | async)?.currentSettings\n : size\n : fixedWidth\n : variant\n \"\n ></i>\n}\n", styles: [":host{display:inline-block}i{display:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SkyIconSvgComponent, selector: "sky-icon-svg", inputs: ["iconName", "iconSize", "iconVariant"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: SkyIconClassListPipe, name: "skyIconClassList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
262
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
263
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: SkyIconComponent, selector: "sky-icon", inputs: { icon: "icon", iconName: "iconName", iconType: "iconType", size: "size", fixedWidth: "fixedWidth", variant: "variant" }, ngImport: i0, template: "@if (iconName) {\n <sky-icon-svg\n [iconName]=\"iconName\"\n [iconSize]=\"size\"\n [iconVariant]=\"variant\"\n />\n} @else {\n <i\n *ngIf=\"icon\"\n aria-hidden=\"true\"\n class=\"sky-icon\"\n [attr.data-sky-icon]=\"icon\"\n [attr.data-sky-icon-type]=\"iconType\"\n [attr.data-sky-icon-variant]=\"variant\"\n [ngClass]=\"\n icon\n | skyIconClassList\n : (themeSvc?.settingsChange | async)?.currentSettings\n : size\n : fixedWidth\n : variant\n \"\n ></i>\n}\n", styles: [":host{display:inline-block}i{display:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SkyIconSvgComponent, selector: "sky-icon-svg", inputs: ["iconName", "iconSize", "iconVariant"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: SkyIconClassListPipe, name: "skyIconClassList" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
264
264
  }
265
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconComponent, decorators: [{
265
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconComponent, decorators: [{
266
266
  type: Component,
267
267
  args: [{ selector: 'sky-icon', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (iconName) {\n <sky-icon-svg\n [iconName]=\"iconName\"\n [iconSize]=\"size\"\n [iconVariant]=\"variant\"\n />\n} @else {\n <i\n *ngIf=\"icon\"\n aria-hidden=\"true\"\n class=\"sky-icon\"\n [attr.data-sky-icon]=\"icon\"\n [attr.data-sky-icon-type]=\"iconType\"\n [attr.data-sky-icon-variant]=\"variant\"\n [ngClass]=\"\n icon\n | skyIconClassList\n : (themeSvc?.settingsChange | async)?.currentSettings\n : size\n : fixedWidth\n : variant\n \"\n ></i>\n}\n", styles: [":host{display:inline-block}i{display:inherit}\n"] }]
268
268
  }], propDecorators: { icon: [{
@@ -280,11 +280,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
280
280
  }] } });
281
281
 
282
282
  class SkyIconModule {
283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
284
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: SkyIconModule, declarations: [SkyIconClassListPipe, SkyIconComponent, SkyIconStackComponent], imports: [CommonModule, SkyIconSvgComponent], exports: [SkyIconComponent, SkyIconStackComponent] }); }
285
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconModule, imports: [CommonModule] }); }
283
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
284
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.8", ngImport: i0, type: SkyIconModule, declarations: [SkyIconClassListPipe, SkyIconComponent, SkyIconStackComponent], imports: [CommonModule, SkyIconSvgComponent], exports: [SkyIconComponent, SkyIconStackComponent] }); }
285
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconModule, imports: [CommonModule] }); }
286
286
  }
287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconModule, decorators: [{
287
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: SkyIconModule, decorators: [{
288
288
  type: NgModule,
289
289
  args: [{
290
290
  declarations: [SkyIconClassListPipe, SkyIconComponent, SkyIconStackComponent],
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-icon.mjs","sources":["../../../../../libs/components/icon/src/lib/icon/icon-resolver.service.ts","../../../../../libs/components/icon/src/lib/icon/icon-class-list.pipe.ts","../../../../../libs/components/icon/src/lib/icon/icon-stack.component.ts","../../../../../libs/components/icon/src/lib/icon/icon-stack.component.html","../../../../../libs/components/icon/src/lib/icon/icon-svg-resolver.service.ts","../../../../../libs/components/icon/src/lib/icon/icon-svg.component.ts","../../../../../libs/components/icon/src/lib/icon/icon-svg.component.html","../../../../../libs/components/icon/src/lib/icon/icon.component.ts","../../../../../libs/components/icon/src/lib/icon/icon.component.html","../../../../../libs/components/icon/src/lib/icon/icon.module.ts","../../../../../libs/components/icon/src/skyux-icon.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport {\n SkyThemeIconManifestGlyph,\n SkyThemeIconManifestService,\n SkyThemeSettings,\n} from '@skyux/theme';\n\nimport { SkyIconResolved } from './types/icon-resolved';\nimport type { SkyIconVariantType } from './types/icon-variant-type';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyIconResolverService {\n #glyphMap = new Map<string, SkyThemeIconManifestGlyph>();\n\n #manifestSvc = inject(SkyThemeIconManifestService);\n\n constructor() {\n // Map the icons by name for more efficient lookup.\n for (const glyph of this.#manifestSvc.getManifest().glyphs) {\n // TODO: keep this until `faName` is removed just in case any icons get added with the wrong shape\n if (glyph.faName && !glyph.faNames) {\n glyph.faNames = [glyph.faName];\n }\n this.#glyphMap.set(glyph.name, glyph);\n }\n }\n\n public resolveIcon(\n icon: string,\n variant?: SkyIconVariantType,\n themeSettings?: SkyThemeSettings,\n ): SkyIconResolved {\n let iconType = 'fa';\n const variantIcon = variant && `${icon}-${variant}`;\n const lineIcon = `${icon}-line`;\n\n // Get the specified variant, or fall back to the icon name.\n // If the pure icon name doesn't exist, try the line variant.\n let glyph =\n this.#glyphMap.get(variantIcon as string) ??\n this.#glyphMap.get(icon) ??\n this.#glyphMap.get(lineIcon) ??\n Array.from(this.#glyphMap.values()).find(\n (glyph) =>\n glyph.aliases?.includes(variantIcon as string) ||\n glyph.aliases?.includes(lineIcon) ||\n glyph.aliases?.includes(icon),\n );\n\n // If still no icon is found, search through the icons that match the FA name.\n if (!glyph) {\n let glyphs = Array.from(this.#glyphMap.values()).filter((g) =>\n g.faNames?.includes(icon),\n );\n if (glyphs.length) {\n if (glyphs.length > 1) {\n // If multiples are found, make sure we select the correct variant, if requested.\n // The icons are ordered such that the \"default\" variant will be the first one.\n if (variant) {\n const variantGlyph = glyphs.find((g) => g.name.endsWith(variant));\n if (variantGlyph) {\n glyphs = [variantGlyph];\n }\n }\n }\n glyph = glyphs[0];\n }\n // If none of the above works, no matching icon was found\n }\n\n if (glyph) {\n // If a glyph is found, use it for modern theme or if no FA fallback exists.\n if (themeSettings?.theme.name === 'modern' || !glyph.faNames?.length) {\n icon = glyph.name;\n iconType = 'skyux';\n } else {\n // For default theme, use a known FA fallback.\n // If the icon name requested is already a FA icon, just use it. Otherwise use the first one.\n if (!glyph.faNames?.includes(icon)) {\n icon = glyph.faNames[0];\n }\n }\n }\n\n // If no SKY UX glyph is found, assume icon is part of FA and pass it along.\n return {\n icon,\n iconType,\n };\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { SkyThemeSettings } from '@skyux/theme';\n\nimport { SkyIconResolverService } from './icon-resolver.service';\nimport { SkyIconVariantType } from './types/icon-variant-type';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skyIconClassList',\n})\nexport class SkyIconClassListPipe implements PipeTransform {\n #resolver = inject(SkyIconResolverService);\n\n public transform(\n icon: string,\n themeSettings?: SkyThemeSettings,\n size?: string,\n fixedWidth?: boolean,\n variant?: SkyIconVariantType,\n ): string[] {\n let classList: string[];\n\n const { icon: resolvedIcon, iconType: resolvedIconType } =\n this.#resolver.resolveIcon(icon, variant, themeSettings);\n\n if (resolvedIconType === 'skyux') {\n classList = ['sky-i-' + resolvedIcon];\n } else {\n classList = ['fa', 'fa-' + resolvedIcon];\n }\n\n if (size) {\n classList.push('fa-' + size);\n }\n\n if (fixedWidth) {\n classList.push('fa-fw');\n }\n\n return classList;\n }\n}\n","import { Component, Input, inject } from '@angular/core';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { SkyIconStackItem } from './icon-stack-item';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-icon-stack',\n templateUrl: './icon-stack.component.html',\n styleUrls: ['./icon-stack.component.scss'],\n})\nexport class SkyIconStackComponent {\n /**\n * The size of the icon using\n * [Font Awesome sizes](https://fontawesome.com/v4/examples/).\n */\n @Input()\n public size: string | undefined;\n\n /**\n * The icon to display at the bottom of the stack.\n */\n @Input()\n public baseIcon: SkyIconStackItem | undefined;\n\n /**\n * The icon to display at the top of the stack.\n */\n @Input()\n public topIcon: SkyIconStackItem | undefined;\n\n protected themeSvc = inject(SkyThemeService, { optional: true });\n}\n","<span\n aria-hidden=\"true\"\n class=\"sky-icon-stack fa-stack\"\n [ngClass]=\"size ? 'fa-' + size + ' sky-icon-stack-size-' + size : ''\"\n>\n <i\n *ngIf=\"baseIcon\"\n class=\"sky-icon fa-stack-2x\"\n [ngClass]=\"\n baseIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n <i\n *ngIf=\"topIcon\"\n class=\"sky-icon fa-stack-1x fa-inverse sky-icon-inverse\"\n [ngClass]=\"\n topIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n</span>\n","import { Injectable } from '@angular/core';\n\nimport { SkyIconVariantType } from './types/icon-variant-type';\n\nasync function getIconMap(): Promise<Map<string, number[]>> {\n const response = await fetch(\n `https://sky.blackbaudcdn.net/static/skyux-icons/7/assets/svg/skyux-icons.svg`,\n );\n\n if (!response.ok) {\n throw new Error('Icon sprite could not be loaded.');\n }\n\n const markup = await response.text();\n\n document.body.insertAdjacentHTML('afterbegin', markup);\n\n const iconMap = Array.from<SVGSymbolElement>(\n document.querySelectorAll('#sky-icon-svg-sprite symbol'),\n ).reduce((map, el) => {\n const idParts = el.id.split('-');\n\n // Construct the icon name by removing `sky-i-` from the beginning\n // and `-<size>-<variant>` from the end.\n const name = idParts.slice(2, idParts.length - 2).join('-');\n\n let sizes = map.get(name);\n\n if (!sizes) {\n sizes = [];\n map.set(name, sizes);\n }\n\n // The penultimate segment is the size for which the icon has\n // been optimized.\n sizes.push(+idParts[idParts.length - 2]);\n\n return map;\n }, new Map<string, number[]>());\n\n // Sort all the sizes for later comparison.\n for (const id of iconMap.keys()) {\n // Dedupe and sort the icon sizes.\n iconMap.set(id, [...new Set(iconMap.get(id))].sort());\n }\n\n return iconMap;\n}\n\nfunction getNearestSize(\n iconMap: Map<string, number[]>,\n name: string,\n pixelSize: number,\n): number | undefined {\n const sizes = iconMap.get(name);\n\n if (sizes) {\n let nearestSizeUnder = -Infinity;\n let nearestSizeOver = Infinity;\n\n for (const availableSize of sizes) {\n if (availableSize === pixelSize) {\n return pixelSize;\n } else if (availableSize < pixelSize) {\n nearestSizeUnder = availableSize;\n } else {\n nearestSizeOver = availableSize;\n break;\n }\n }\n\n const underDiff = Math.abs(pixelSize - nearestSizeUnder);\n const overDiff = Math.abs(pixelSize - nearestSizeOver);\n\n return isNaN(overDiff) || underDiff < overDiff\n ? nearestSizeUnder\n : nearestSizeOver;\n }\n\n return undefined;\n}\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyIconSvgResolverService {\n #iconMapPromise: Promise<Map<string, number[]>> | undefined;\n\n public async resolveHref(\n name: string,\n pixelSize = 16,\n variant: SkyIconVariantType = 'line',\n ): Promise<string> {\n if (!this.#iconMapPromise) {\n this.#iconMapPromise = getIconMap();\n }\n\n const iconMap = await this.#iconMapPromise;\n\n let href = `#sky-i-${name}`;\n\n // Find the icon with the optimal size nearest to the requested size.\n const nearestSize = getNearestSize(iconMap, name, pixelSize);\n\n if (!nearestSize) {\n throw new Error(`Icon with name '${name}' was not found.`);\n }\n\n href = `${href}-${nearestSize}-${variant}`;\n\n return href;\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { Component, computed, inject, input } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\n\nimport { catchError, of, switchMap } from 'rxjs';\n\nimport { SkyIconSvgResolverService } from './icon-svg-resolver.service';\nimport { SkyIconVariantType } from './types/icon-variant-type';\n\nconst SIZE_BASE = 16;\n\nconst SIZES = new Map([\n ['', SIZE_BASE],\n ['lg', 21.333 /* SIZE_BASE * (4/3) */],\n ['2x', 32 /* SIZE_BASE * 2 */],\n ['3x', 48 /* SIZE_BASE * 3 */],\n ['4x', 64 /* SIZE_BASE * 4 */],\n ['5x', 80 /* SIZE_BASE * 5 */],\n]);\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-icon-svg',\n standalone: true,\n imports: [NgClass, NgStyle],\n templateUrl: './icon-svg.component.html',\n styleUrls: [\n './icon-svg.default.component.scss',\n './icon-svg.modern.component.scss',\n ],\n})\nexport class SkyIconSvgComponent {\n readonly #resolverSvc = inject(SkyIconSvgResolverService);\n\n public readonly iconName = input.required<string>();\n public readonly iconSize = input<string>();\n public readonly iconVariant = input<SkyIconVariantType>();\n\n readonly #iconInfo = computed(() => {\n return {\n src: this.iconName(),\n size: this.iconSize(),\n variant: this.iconVariant(),\n };\n });\n\n protected readonly iconHref = toSignal(\n toObservable(this.#iconInfo).pipe(\n switchMap((info) =>\n this.#resolverSvc.resolveHref(\n info.src,\n SIZES.get(info.size ?? ''),\n info.variant,\n ),\n ),\n catchError(() => of('')),\n ),\n );\n}\n","<svg\n aria-hidden=\"true\"\n class=\"sky-icon-svg-img\"\n [ngClass]=\"iconSize() && 'sky-icon-svg-img-' + iconSize()\"\n>\n <use [attr.xlink:href]=\"iconHref()\"></use>\n</svg>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n inject,\n} from '@angular/core';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { SkyIconType } from './types/icon-type';\nimport { SkyIconVariantType } from './types/icon-variant-type';\n\n@Component({\n selector: 'sky-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyIconComponent {\n /**\n * The name of\n * [the Font Awesome 4.7 icon](https://fontawesome.com/v4.7/icons/) or the SKY UX icon to\n * display. When specifying a Font Awesome icon, do not prefix the name with `fa-`.\n * @required\n */\n @Input()\n public icon: string | undefined;\n\n /**\n * The name of the Blackbaud SVG icon to display. For internal use only.\n * @internal\n */\n @Input()\n public iconName: string | undefined;\n\n /**\n * The type of icon to display. Specifying `\"fa\"` displays a Font Awesome icon,\n * while specifying `\"skyux\"` displays an icon from the custom SKY UX icon font. Note that\n * the custom SKY UX icon font is currently in beta.\n * @default \"fa\"\n * @deprecated The icon component now automatically infers which type of icon to use based on the current theme. This input will be removed in a future version.\n */\n @Input()\n public iconType: SkyIconType | undefined;\n\n /**\n * The size of the icon using\n * [Font Awesome sizes](https://fontawesome.com/v4/examples/). Do not prefix the size with `fa-`.\n */\n @Input()\n public size: string | undefined;\n\n /**\n * Whether to enforce a fixed width based on icon size. By default, icons of a specified size share a\n * consistent height, but their widths vary and can throw off vertical alignment. Use a fixed width when\n * you stack icons vertically, such as in lists.\n * @default false\n */\n @Input()\n public fixedWidth: boolean | undefined;\n\n /**\n * The icon variant. If the variant doesn't exist for the\n * specified icon, the normal icon is displayed. This property only applies when using SKY UX icons.\n */\n @Input()\n public variant: SkyIconVariantType | undefined;\n\n protected themeSvc = inject(SkyThemeService, { optional: true });\n}\n","@if (iconName) {\n <sky-icon-svg\n [iconName]=\"iconName\"\n [iconSize]=\"size\"\n [iconVariant]=\"variant\"\n />\n} @else {\n <i\n *ngIf=\"icon\"\n aria-hidden=\"true\"\n class=\"sky-icon\"\n [attr.data-sky-icon]=\"icon\"\n [attr.data-sky-icon-type]=\"iconType\"\n [attr.data-sky-icon-variant]=\"variant\"\n [ngClass]=\"\n icon\n | skyIconClassList\n : (themeSvc?.settingsChange | async)?.currentSettings\n : size\n : fixedWidth\n : variant\n \"\n ></i>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SkyIconClassListPipe } from './icon-class-list.pipe';\nimport { SkyIconStackComponent } from './icon-stack.component';\nimport { SkyIconSvgComponent } from './icon-svg.component';\nimport { SkyIconComponent } from './icon.component';\n\n@NgModule({\n declarations: [SkyIconClassListPipe, SkyIconComponent, SkyIconStackComponent],\n imports: [CommonModule, SkyIconSvgComponent],\n exports: [SkyIconComponent, SkyIconStackComponent],\n})\nexport class SkyIconModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.SkyIconClassListPipe","i2.SkyIconSvgComponent","i3.SkyIconClassListPipe"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-icon.mjs","sources":["../../../../../libs/components/icon/src/lib/modules/icon/icon-resolver.service.ts","../../../../../libs/components/icon/src/lib/modules/icon/icon-class-list.pipe.ts","../../../../../libs/components/icon/src/lib/modules/icon/icon-stack.component.ts","../../../../../libs/components/icon/src/lib/modules/icon/icon-stack.component.html","../../../../../libs/components/icon/src/lib/modules/icon/icon-svg-resolver.service.ts","../../../../../libs/components/icon/src/lib/modules/icon/icon-svg.component.ts","../../../../../libs/components/icon/src/lib/modules/icon/icon-svg.component.html","../../../../../libs/components/icon/src/lib/modules/icon/icon.component.ts","../../../../../libs/components/icon/src/lib/modules/icon/icon.component.html","../../../../../libs/components/icon/src/lib/modules/icon/icon.module.ts","../../../../../libs/components/icon/src/skyux-icon.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport {\n SkyThemeIconManifestGlyph,\n SkyThemeIconManifestService,\n SkyThemeSettings,\n} from '@skyux/theme';\n\nimport { SkyIconResolved } from './types/icon-resolved';\nimport type { SkyIconVariantType } from './types/icon-variant-type';\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyIconResolverService {\n #glyphMap = new Map<string, SkyThemeIconManifestGlyph>();\n\n #manifestSvc = inject(SkyThemeIconManifestService);\n\n constructor() {\n // Map the icons by name for more efficient lookup.\n for (const glyph of this.#manifestSvc.getManifest().glyphs) {\n // TODO: keep this until `faName` is removed just in case any icons get added with the wrong shape\n if (glyph.faName && !glyph.faNames) {\n glyph.faNames = [glyph.faName];\n }\n this.#glyphMap.set(glyph.name, glyph);\n }\n }\n\n public resolveIcon(\n icon: string,\n variant?: SkyIconVariantType,\n themeSettings?: SkyThemeSettings,\n ): SkyIconResolved {\n let iconType = 'fa';\n const variantIcon = variant && `${icon}-${variant}`;\n const lineIcon = `${icon}-line`;\n\n // Get the specified variant, or fall back to the icon name.\n // If the pure icon name doesn't exist, try the line variant.\n let glyph =\n this.#glyphMap.get(variantIcon as string) ??\n this.#glyphMap.get(icon) ??\n this.#glyphMap.get(lineIcon) ??\n Array.from(this.#glyphMap.values()).find(\n (glyph) =>\n glyph.aliases?.includes(variantIcon as string) ||\n glyph.aliases?.includes(lineIcon) ||\n glyph.aliases?.includes(icon),\n );\n\n // If still no icon is found, search through the icons that match the FA name.\n if (!glyph) {\n let glyphs = Array.from(this.#glyphMap.values()).filter((g) =>\n g.faNames?.includes(icon),\n );\n if (glyphs.length) {\n if (glyphs.length > 1) {\n // If multiples are found, make sure we select the correct variant, if requested.\n // The icons are ordered such that the \"default\" variant will be the first one.\n if (variant) {\n const variantGlyph = glyphs.find((g) => g.name.endsWith(variant));\n if (variantGlyph) {\n glyphs = [variantGlyph];\n }\n }\n }\n glyph = glyphs[0];\n }\n // If none of the above works, no matching icon was found\n }\n\n if (glyph) {\n // If a glyph is found, use it for modern theme or if no FA fallback exists.\n if (themeSettings?.theme.name === 'modern' || !glyph.faNames?.length) {\n icon = glyph.name;\n iconType = 'skyux';\n } else {\n // For default theme, use a known FA fallback.\n // If the icon name requested is already a FA icon, just use it. Otherwise use the first one.\n if (!glyph.faNames?.includes(icon)) {\n icon = glyph.faNames[0];\n }\n }\n }\n\n // If no SKY UX glyph is found, assume icon is part of FA and pass it along.\n return {\n icon,\n iconType,\n };\n }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { SkyThemeSettings } from '@skyux/theme';\n\nimport { SkyIconResolverService } from './icon-resolver.service';\nimport { SkyIconVariantType } from './types/icon-variant-type';\n\n/**\n * @internal\n */\n@Pipe({\n name: 'skyIconClassList',\n})\nexport class SkyIconClassListPipe implements PipeTransform {\n #resolver = inject(SkyIconResolverService);\n\n public transform(\n icon: string,\n themeSettings?: SkyThemeSettings,\n size?: string,\n fixedWidth?: boolean,\n variant?: SkyIconVariantType,\n ): string[] {\n let classList: string[];\n\n const { icon: resolvedIcon, iconType: resolvedIconType } =\n this.#resolver.resolveIcon(icon, variant, themeSettings);\n\n if (resolvedIconType === 'skyux') {\n classList = ['sky-i-' + resolvedIcon];\n } else {\n classList = ['fa', 'fa-' + resolvedIcon];\n }\n\n if (size) {\n classList.push('fa-' + size);\n }\n\n if (fixedWidth) {\n classList.push('fa-fw');\n }\n\n return classList;\n }\n}\n","import { Component, Input, inject } from '@angular/core';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { SkyIconStackItem } from './icon-stack-item';\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-icon-stack',\n templateUrl: './icon-stack.component.html',\n styleUrls: ['./icon-stack.component.scss'],\n})\nexport class SkyIconStackComponent {\n /**\n * The size of the icon using\n * [Font Awesome sizes](https://fontawesome.com/v4/examples/).\n */\n @Input()\n public size: string | undefined;\n\n /**\n * The icon to display at the bottom of the stack.\n */\n @Input()\n public baseIcon: SkyIconStackItem | undefined;\n\n /**\n * The icon to display at the top of the stack.\n */\n @Input()\n public topIcon: SkyIconStackItem | undefined;\n\n protected themeSvc = inject(SkyThemeService, { optional: true });\n}\n","<span\n aria-hidden=\"true\"\n class=\"sky-icon-stack fa-stack\"\n [ngClass]=\"size ? 'fa-' + size + ' sky-icon-stack-size-' + size : ''\"\n>\n <i\n *ngIf=\"baseIcon\"\n class=\"sky-icon fa-stack-2x\"\n [ngClass]=\"\n baseIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n <i\n *ngIf=\"topIcon\"\n class=\"sky-icon fa-stack-1x fa-inverse sky-icon-inverse\"\n [ngClass]=\"\n topIcon.icon\n | skyIconClassList: (themeSvc?.settingsChange | async)?.currentSettings\n \"\n ></i>\n</span>\n","import { Injectable } from '@angular/core';\n\nimport { SkyIconVariantType } from './types/icon-variant-type';\n\nasync function getIconMap(): Promise<Map<string, number[]>> {\n const response = await fetch(\n `https://sky.blackbaudcdn.net/static/skyux-icons/7/assets/svg/skyux-icons.svg`,\n );\n\n if (!response.ok) {\n throw new Error('Icon sprite could not be loaded.');\n }\n\n const markup = await response.text();\n\n document.body.insertAdjacentHTML('afterbegin', markup);\n\n const iconMap = Array.from<SVGSymbolElement>(\n document.querySelectorAll('#sky-icon-svg-sprite symbol'),\n ).reduce((map, el) => {\n const idParts = el.id.split('-');\n\n // Construct the icon name by removing `sky-i-` from the beginning\n // and `-<size>-<variant>` from the end.\n const name = idParts.slice(2, idParts.length - 2).join('-');\n\n let sizes = map.get(name);\n\n if (!sizes) {\n sizes = [];\n map.set(name, sizes);\n }\n\n // The penultimate segment is the size for which the icon has\n // been optimized.\n sizes.push(+idParts[idParts.length - 2]);\n\n return map;\n }, new Map<string, number[]>());\n\n // Sort all the sizes for later comparison.\n for (const id of iconMap.keys()) {\n // Dedupe and sort the icon sizes.\n iconMap.set(id, [...new Set(iconMap.get(id))].sort());\n }\n\n return iconMap;\n}\n\nfunction getNearestSize(\n iconMap: Map<string, number[]>,\n name: string,\n pixelSize: number,\n): number | undefined {\n const sizes = iconMap.get(name);\n\n if (sizes) {\n let nearestSizeUnder = -Infinity;\n let nearestSizeOver = Infinity;\n\n for (const availableSize of sizes) {\n if (availableSize === pixelSize) {\n return pixelSize;\n } else if (availableSize < pixelSize) {\n nearestSizeUnder = availableSize;\n } else {\n nearestSizeOver = availableSize;\n break;\n }\n }\n\n const underDiff = Math.abs(pixelSize - nearestSizeUnder);\n const overDiff = Math.abs(pixelSize - nearestSizeOver);\n\n return isNaN(overDiff) || underDiff < overDiff\n ? nearestSizeUnder\n : nearestSizeOver;\n }\n\n return undefined;\n}\n\n/**\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyIconSvgResolverService {\n #iconMapPromise: Promise<Map<string, number[]>> | undefined;\n\n public async resolveHref(\n name: string,\n pixelSize = 16,\n variant: SkyIconVariantType = 'line',\n ): Promise<string> {\n if (!this.#iconMapPromise) {\n this.#iconMapPromise = getIconMap();\n }\n\n const iconMap = await this.#iconMapPromise;\n\n let href = `#sky-i-${name}`;\n\n // Find the icon with the optimal size nearest to the requested size.\n const nearestSize = getNearestSize(iconMap, name, pixelSize);\n\n if (!nearestSize) {\n throw new Error(`Icon with name '${name}' was not found.`);\n }\n\n href = `${href}-${nearestSize}-${variant}`;\n\n return href;\n }\n}\n","import { NgClass, NgStyle } from '@angular/common';\nimport { Component, computed, inject, input } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\n\nimport { catchError, of, switchMap } from 'rxjs';\n\nimport { SkyIconSvgResolverService } from './icon-svg-resolver.service';\nimport { SkyIconVariantType } from './types/icon-variant-type';\n\nconst SIZE_BASE = 16;\n\nconst SIZES = new Map([\n ['', SIZE_BASE],\n ['lg', 21.333 /* SIZE_BASE * (4/3) */],\n ['2x', 32 /* SIZE_BASE * 2 */],\n ['3x', 48 /* SIZE_BASE * 3 */],\n ['4x', 64 /* SIZE_BASE * 4 */],\n ['5x', 80 /* SIZE_BASE * 5 */],\n]);\n\n/**\n * @internal\n */\n@Component({\n selector: 'sky-icon-svg',\n standalone: true,\n imports: [NgClass, NgStyle],\n templateUrl: './icon-svg.component.html',\n styleUrls: [\n './icon-svg.default.component.scss',\n './icon-svg.modern.component.scss',\n ],\n})\nexport class SkyIconSvgComponent {\n readonly #resolverSvc = inject(SkyIconSvgResolverService);\n\n public readonly iconName = input.required<string>();\n public readonly iconSize = input<string>();\n public readonly iconVariant = input<SkyIconVariantType>();\n\n readonly #iconInfo = computed(() => {\n return {\n src: this.iconName(),\n size: this.iconSize(),\n variant: this.iconVariant(),\n };\n });\n\n protected readonly iconHref = toSignal(\n toObservable(this.#iconInfo).pipe(\n switchMap((info) =>\n this.#resolverSvc.resolveHref(\n info.src,\n SIZES.get(info.size ?? ''),\n info.variant,\n ),\n ),\n catchError(() => of('')),\n ),\n );\n}\n","<svg\n aria-hidden=\"true\"\n class=\"sky-icon-svg-img\"\n [ngClass]=\"iconSize() && 'sky-icon-svg-img-' + iconSize()\"\n>\n <use [attr.xlink:href]=\"iconHref()\"></use>\n</svg>\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n inject,\n} from '@angular/core';\nimport { SkyThemeService } from '@skyux/theme';\n\nimport { SkyIconType } from './types/icon-type';\nimport { SkyIconVariantType } from './types/icon-variant-type';\n\n@Component({\n selector: 'sky-icon',\n templateUrl: './icon.component.html',\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SkyIconComponent {\n /**\n * The name of\n * [the Font Awesome 4.7 icon](https://fontawesome.com/v4.7/icons/) or the SKY UX icon to\n * display. When specifying a Font Awesome icon, do not prefix the name with `fa-`.\n * @required\n */\n @Input()\n public icon: string | undefined;\n\n /**\n * The name of the Blackbaud SVG icon to display. For internal use only.\n * @internal\n */\n @Input()\n public iconName: string | undefined;\n\n /**\n * The type of icon to display. Specifying `\"fa\"` displays a Font Awesome icon,\n * while specifying `\"skyux\"` displays an icon from the custom SKY UX icon font. Note that\n * the custom SKY UX icon font is currently in beta.\n * @default \"fa\"\n * @deprecated The icon component now automatically infers which type of icon to use based on the current theme. This input will be removed in a future version.\n */\n @Input()\n public iconType: SkyIconType | undefined;\n\n /**\n * The size of the icon using\n * [Font Awesome sizes](https://fontawesome.com/v4/examples/). Do not prefix the size with `fa-`.\n */\n @Input()\n public size: string | undefined;\n\n /**\n * Whether to enforce a fixed width based on icon size. By default, icons of a specified size share a\n * consistent height, but their widths vary and can throw off vertical alignment. Use a fixed width when\n * you stack icons vertically, such as in lists.\n * @default false\n */\n @Input()\n public fixedWidth: boolean | undefined;\n\n /**\n * The icon variant. If the variant doesn't exist for the\n * specified icon, the normal icon is displayed. This property only applies when using SKY UX icons.\n */\n @Input()\n public variant: SkyIconVariantType | undefined;\n\n protected themeSvc = inject(SkyThemeService, { optional: true });\n}\n","@if (iconName) {\n <sky-icon-svg\n [iconName]=\"iconName\"\n [iconSize]=\"size\"\n [iconVariant]=\"variant\"\n />\n} @else {\n <i\n *ngIf=\"icon\"\n aria-hidden=\"true\"\n class=\"sky-icon\"\n [attr.data-sky-icon]=\"icon\"\n [attr.data-sky-icon-type]=\"iconType\"\n [attr.data-sky-icon-variant]=\"variant\"\n [ngClass]=\"\n icon\n | skyIconClassList\n : (themeSvc?.settingsChange | async)?.currentSettings\n : size\n : fixedWidth\n : variant\n \"\n ></i>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { SkyIconClassListPipe } from './icon-class-list.pipe';\nimport { SkyIconStackComponent } from './icon-stack.component';\nimport { SkyIconSvgComponent } from './icon-svg.component';\nimport { SkyIconComponent } from './icon.component';\n\n@NgModule({\n declarations: [SkyIconClassListPipe, SkyIconComponent, SkyIconStackComponent],\n imports: [CommonModule, SkyIconSvgComponent],\n exports: [SkyIconComponent, SkyIconStackComponent],\n})\nexport class SkyIconModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2.SkyIconClassListPipe","i2.SkyIconSvgComponent","i3.SkyIconClassListPipe"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { SkyIconStackItem } from './lib/icon/icon-stack-item';
2
- export { SkyIconModule } from './lib/icon/icon.module';
3
- export { SkyIconType } from './lib/icon/types/icon-type';
4
- export { SkyIconVariantType } from './lib/icon/types/icon-variant-type';
5
- export { SkyIconComponent as λ1 } from './lib/icon/icon.component';
6
- export { SkyIconStackComponent as λ2 } from './lib/icon/icon-stack.component';
1
+ export { SkyIconStackItem } from './lib/modules/icon/icon-stack-item';
2
+ export { SkyIconModule } from './lib/modules/icon/icon.module';
3
+ export { SkyIconType } from './lib/modules/icon/types/icon-type';
4
+ export { SkyIconVariantType } from './lib/modules/icon/types/icon-variant-type';
5
+ export { SkyIconComponent as λ1 } from './lib/modules/icon/icon.component';
6
+ export { SkyIconStackComponent as λ2 } from './lib/modules/icon/icon-stack.component';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyux/icon",
3
- "version": "11.8.0",
3
+ "version": "11.10.0",
4
4
  "author": "Blackbaud, Inc.",
5
5
  "keywords": [
6
6
  "blackbaud",
@@ -36,11 +36,11 @@
36
36
  }
37
37
  },
38
38
  "peerDependencies": {
39
- "@angular/cdk": "^18.2.4",
40
- "@angular/common": "^18.2.5",
41
- "@angular/core": "^18.2.5",
42
- "@skyux/core": "11.8.0",
43
- "@skyux/theme": "11.8.0"
39
+ "@angular/cdk": "^18.2.8",
40
+ "@angular/common": "^18.2.8",
41
+ "@angular/core": "^18.2.8",
42
+ "@skyux/core": "11.10.0",
43
+ "@skyux/theme": "11.10.0"
44
44
  },
45
45
  "dependencies": {
46
46
  "tslib": "^2.6.3"
@@ -1,2 +1,5 @@
1
- export { SkyIconHarness } from './icon/icon-harness';
2
- export { SkyIconHarnessFilters } from './icon/icon-harness-filters';
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@skyux/icon/testing" />
5
+ export * from './public-api';
@@ -0,0 +1,2 @@
1
+ export { SkyIconHarness } from './icon/icon-harness';
2
+ export { SkyIconHarnessFilters } from './icon/icon-harness-filters';
@@ -1,35 +0,0 @@
1
- import { Pipe, inject } from '@angular/core';
2
- import { SkyIconResolverService } from './icon-resolver.service';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * @internal
6
- */
7
- export class SkyIconClassListPipe {
8
- #resolver = inject(SkyIconResolverService);
9
- transform(icon, themeSettings, size, fixedWidth, variant) {
10
- let classList;
11
- const { icon: resolvedIcon, iconType: resolvedIconType } = this.#resolver.resolveIcon(icon, variant, themeSettings);
12
- if (resolvedIconType === 'skyux') {
13
- classList = ['sky-i-' + resolvedIcon];
14
- }
15
- else {
16
- classList = ['fa', 'fa-' + resolvedIcon];
17
- }
18
- if (size) {
19
- classList.push('fa-' + size);
20
- }
21
- if (fixedWidth) {
22
- classList.push('fa-fw');
23
- }
24
- return classList;
25
- }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconClassListPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
27
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.5", ngImport: i0, type: SkyIconClassListPipe, name: "skyIconClassList" }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconClassListPipe, decorators: [{
30
- type: Pipe,
31
- args: [{
32
- name: 'skyIconClassList',
33
- }]
34
- }] });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1jbGFzcy1saXN0LnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvaWNvbi9zcmMvbGliL2ljb24vaWNvbi1jbGFzcy1saXN0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzVELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdqRTs7R0FFRztBQUlILE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRXBDLFNBQVMsQ0FDZCxJQUFZLEVBQ1osYUFBZ0MsRUFDaEMsSUFBYSxFQUNiLFVBQW9CLEVBQ3BCLE9BQTRCO1FBRTVCLElBQUksU0FBbUIsQ0FBQztRQUV4QixNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsR0FDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUzRCxJQUFJLGdCQUFnQixLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLFNBQVMsR0FBRyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7OEdBOUJVLG9CQUFvQjs0R0FBcEIsb0JBQW9COzsyRkFBcEIsb0JBQW9CO2tCQUhoQyxJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxrQkFBa0I7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTa3lUaGVtZVNldHRpbmdzIH0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0IHsgU2t5SWNvblJlc29sdmVyU2VydmljZSB9IGZyb20gJy4vaWNvbi1yZXNvbHZlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNreUljb25WYXJpYW50VHlwZSB9IGZyb20gJy4vdHlwZXMvaWNvbi12YXJpYW50LXR5cGUnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5AUGlwZSh7XG4gIG5hbWU6ICdza3lJY29uQ2xhc3NMaXN0Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5SWNvbkNsYXNzTGlzdFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgI3Jlc29sdmVyID0gaW5qZWN0KFNreUljb25SZXNvbHZlclNlcnZpY2UpO1xuXG4gIHB1YmxpYyB0cmFuc2Zvcm0oXG4gICAgaWNvbjogc3RyaW5nLFxuICAgIHRoZW1lU2V0dGluZ3M/OiBTa3lUaGVtZVNldHRpbmdzLFxuICAgIHNpemU/OiBzdHJpbmcsXG4gICAgZml4ZWRXaWR0aD86IGJvb2xlYW4sXG4gICAgdmFyaWFudD86IFNreUljb25WYXJpYW50VHlwZSxcbiAgKTogc3RyaW5nW10ge1xuICAgIGxldCBjbGFzc0xpc3Q6IHN0cmluZ1tdO1xuXG4gICAgY29uc3QgeyBpY29uOiByZXNvbHZlZEljb24sIGljb25UeXBlOiByZXNvbHZlZEljb25UeXBlIH0gPVxuICAgICAgdGhpcy4jcmVzb2x2ZXIucmVzb2x2ZUljb24oaWNvbiwgdmFyaWFudCwgdGhlbWVTZXR0aW5ncyk7XG5cbiAgICBpZiAocmVzb2x2ZWRJY29uVHlwZSA9PT0gJ3NreXV4Jykge1xuICAgICAgY2xhc3NMaXN0ID0gWydza3ktaS0nICsgcmVzb2x2ZWRJY29uXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2xhc3NMaXN0ID0gWydmYScsICdmYS0nICsgcmVzb2x2ZWRJY29uXTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZSkge1xuICAgICAgY2xhc3NMaXN0LnB1c2goJ2ZhLScgKyBzaXplKTtcbiAgICB9XG5cbiAgICBpZiAoZml4ZWRXaWR0aCkge1xuICAgICAgY2xhc3NMaXN0LnB1c2goJ2ZhLWZ3Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzTGlzdDtcbiAgfVxufVxuIl19
@@ -1,79 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { SkyThemeIconManifestService, } from '@skyux/theme';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * @internal
6
- */
7
- export class SkyIconResolverService {
8
- #glyphMap = new Map();
9
- #manifestSvc = inject(SkyThemeIconManifestService);
10
- constructor() {
11
- // Map the icons by name for more efficient lookup.
12
- for (const glyph of this.#manifestSvc.getManifest().glyphs) {
13
- // TODO: keep this until `faName` is removed just in case any icons get added with the wrong shape
14
- if (glyph.faName && !glyph.faNames) {
15
- glyph.faNames = [glyph.faName];
16
- }
17
- this.#glyphMap.set(glyph.name, glyph);
18
- }
19
- }
20
- resolveIcon(icon, variant, themeSettings) {
21
- let iconType = 'fa';
22
- const variantIcon = variant && `${icon}-${variant}`;
23
- const lineIcon = `${icon}-line`;
24
- // Get the specified variant, or fall back to the icon name.
25
- // If the pure icon name doesn't exist, try the line variant.
26
- let glyph = this.#glyphMap.get(variantIcon) ??
27
- this.#glyphMap.get(icon) ??
28
- this.#glyphMap.get(lineIcon) ??
29
- Array.from(this.#glyphMap.values()).find((glyph) => glyph.aliases?.includes(variantIcon) ||
30
- glyph.aliases?.includes(lineIcon) ||
31
- glyph.aliases?.includes(icon));
32
- // If still no icon is found, search through the icons that match the FA name.
33
- if (!glyph) {
34
- let glyphs = Array.from(this.#glyphMap.values()).filter((g) => g.faNames?.includes(icon));
35
- if (glyphs.length) {
36
- if (glyphs.length > 1) {
37
- // If multiples are found, make sure we select the correct variant, if requested.
38
- // The icons are ordered such that the "default" variant will be the first one.
39
- if (variant) {
40
- const variantGlyph = glyphs.find((g) => g.name.endsWith(variant));
41
- if (variantGlyph) {
42
- glyphs = [variantGlyph];
43
- }
44
- }
45
- }
46
- glyph = glyphs[0];
47
- }
48
- // If none of the above works, no matching icon was found
49
- }
50
- if (glyph) {
51
- // If a glyph is found, use it for modern theme or if no FA fallback exists.
52
- if (themeSettings?.theme.name === 'modern' || !glyph.faNames?.length) {
53
- icon = glyph.name;
54
- iconType = 'skyux';
55
- }
56
- else {
57
- // For default theme, use a known FA fallback.
58
- // If the icon name requested is already a FA icon, just use it. Otherwise use the first one.
59
- if (!glyph.faNames?.includes(icon)) {
60
- icon = glyph.faNames[0];
61
- }
62
- }
63
- }
64
- // If no SKY UX glyph is found, assume icon is part of FA and pass it along.
65
- return {
66
- icon,
67
- iconType,
68
- };
69
- }
70
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
71
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconResolverService, providedIn: 'root' }); }
72
- }
73
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconResolverService, decorators: [{
74
- type: Injectable,
75
- args: [{
76
- providedIn: 'root',
77
- }]
78
- }], ctorParameters: () => [] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1yZXNvbHZlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2ljb24vc3JjL2xpYi9pY29uL2ljb24tcmVzb2x2ZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBRUwsMkJBQTJCLEdBRTVCLE1BQU0sY0FBYyxDQUFDOztBQUt0Qjs7R0FFRztBQUlILE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFxQyxDQUFDO0lBRXpELFlBQVksR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUVuRDtRQUNFLG1EQUFtRDtRQUNuRCxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDM0Qsa0dBQWtHO1lBQ2xHLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbkMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FDaEIsSUFBWSxFQUNaLE9BQTRCLEVBQzVCLGFBQWdDO1FBRWhDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUNwQixNQUFNLFdBQVcsR0FBRyxPQUFPLElBQUksR0FBRyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQztRQUVoQyw0REFBNEQ7UUFDNUQsNkRBQTZEO1FBQzdELElBQUksS0FBSyxHQUNQLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQXFCLENBQUM7WUFDekMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM1QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3RDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDUixLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxXQUFxQixDQUFDO2dCQUM5QyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUNoQyxDQUFDO1FBRUosOEVBQThFO1FBQzlFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNYLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzVELENBQUMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUMxQixDQUFDO1lBQ0YsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDdEIsaUZBQWlGO29CQUNqRiwrRUFBK0U7b0JBQy9FLElBQUksT0FBTyxFQUFFLENBQUM7d0JBQ1osTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxZQUFZLEVBQUUsQ0FBQzs0QkFDakIsTUFBTSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQzFCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsQ0FBQztZQUNELHlEQUF5RDtRQUMzRCxDQUFDO1FBRUQsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLDRFQUE0RTtZQUM1RSxJQUFJLGFBQWEsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3JFLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNsQixRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3JCLENBQUM7aUJBQU0sQ0FBQztnQkFDTiw4Q0FBOEM7Z0JBQzlDLDZGQUE2RjtnQkFDN0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ25DLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCw0RUFBNEU7UUFDNUUsT0FBTztZQUNMLElBQUk7WUFDSixRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUM7OEdBOUVVLHNCQUFzQjtrSEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzJGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNreVRoZW1lSWNvbk1hbmlmZXN0R2x5cGgsXG4gIFNreVRoZW1lSWNvbk1hbmlmZXN0U2VydmljZSxcbiAgU2t5VGhlbWVTZXR0aW5ncyxcbn0gZnJvbSAnQHNreXV4L3RoZW1lJztcblxuaW1wb3J0IHsgU2t5SWNvblJlc29sdmVkIH0gZnJvbSAnLi90eXBlcy9pY29uLXJlc29sdmVkJztcbmltcG9ydCB0eXBlIHsgU2t5SWNvblZhcmlhbnRUeXBlIH0gZnJvbSAnLi90eXBlcy9pY29uLXZhcmlhbnQtdHlwZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lJY29uUmVzb2x2ZXJTZXJ2aWNlIHtcbiAgI2dseXBoTWFwID0gbmV3IE1hcDxzdHJpbmcsIFNreVRoZW1lSWNvbk1hbmlmZXN0R2x5cGg+KCk7XG5cbiAgI21hbmlmZXN0U3ZjID0gaW5qZWN0KFNreVRoZW1lSWNvbk1hbmlmZXN0U2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gTWFwIHRoZSBpY29ucyBieSBuYW1lIGZvciBtb3JlIGVmZmljaWVudCBsb29rdXAuXG4gICAgZm9yIChjb25zdCBnbHlwaCBvZiB0aGlzLiNtYW5pZmVzdFN2Yy5nZXRNYW5pZmVzdCgpLmdseXBocykge1xuICAgICAgLy8gVE9ETzoga2VlcCB0aGlzIHVudGlsIGBmYU5hbWVgIGlzIHJlbW92ZWQganVzdCBpbiBjYXNlIGFueSBpY29ucyBnZXQgYWRkZWQgd2l0aCB0aGUgd3Jvbmcgc2hhcGVcbiAgICAgIGlmIChnbHlwaC5mYU5hbWUgJiYgIWdseXBoLmZhTmFtZXMpIHtcbiAgICAgICAgZ2x5cGguZmFOYW1lcyA9IFtnbHlwaC5mYU5hbWVdO1xuICAgICAgfVxuICAgICAgdGhpcy4jZ2x5cGhNYXAuc2V0KGdseXBoLm5hbWUsIGdseXBoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZUljb24oXG4gICAgaWNvbjogc3RyaW5nLFxuICAgIHZhcmlhbnQ/OiBTa3lJY29uVmFyaWFudFR5cGUsXG4gICAgdGhlbWVTZXR0aW5ncz86IFNreVRoZW1lU2V0dGluZ3MsXG4gICk6IFNreUljb25SZXNvbHZlZCB7XG4gICAgbGV0IGljb25UeXBlID0gJ2ZhJztcbiAgICBjb25zdCB2YXJpYW50SWNvbiA9IHZhcmlhbnQgJiYgYCR7aWNvbn0tJHt2YXJpYW50fWA7XG4gICAgY29uc3QgbGluZUljb24gPSBgJHtpY29ufS1saW5lYDtcblxuICAgIC8vIEdldCB0aGUgc3BlY2lmaWVkIHZhcmlhbnQsIG9yIGZhbGwgYmFjayB0byB0aGUgaWNvbiBuYW1lLlxuICAgIC8vIElmIHRoZSBwdXJlIGljb24gbmFtZSBkb2Vzbid0IGV4aXN0LCB0cnkgdGhlIGxpbmUgdmFyaWFudC5cbiAgICBsZXQgZ2x5cGggPVxuICAgICAgdGhpcy4jZ2x5cGhNYXAuZ2V0KHZhcmlhbnRJY29uIGFzIHN0cmluZykgPz9cbiAgICAgIHRoaXMuI2dseXBoTWFwLmdldChpY29uKSA/P1xuICAgICAgdGhpcy4jZ2x5cGhNYXAuZ2V0KGxpbmVJY29uKSA/P1xuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNnbHlwaE1hcC52YWx1ZXMoKSkuZmluZChcbiAgICAgICAgKGdseXBoKSA9PlxuICAgICAgICAgIGdseXBoLmFsaWFzZXM/LmluY2x1ZGVzKHZhcmlhbnRJY29uIGFzIHN0cmluZykgfHxcbiAgICAgICAgICBnbHlwaC5hbGlhc2VzPy5pbmNsdWRlcyhsaW5lSWNvbikgfHxcbiAgICAgICAgICBnbHlwaC5hbGlhc2VzPy5pbmNsdWRlcyhpY29uKSxcbiAgICAgICk7XG5cbiAgICAvLyBJZiBzdGlsbCBubyBpY29uIGlzIGZvdW5kLCBzZWFyY2ggdGhyb3VnaCB0aGUgaWNvbnMgdGhhdCBtYXRjaCB0aGUgRkEgbmFtZS5cbiAgICBpZiAoIWdseXBoKSB7XG4gICAgICBsZXQgZ2x5cGhzID0gQXJyYXkuZnJvbSh0aGlzLiNnbHlwaE1hcC52YWx1ZXMoKSkuZmlsdGVyKChnKSA9PlxuICAgICAgICBnLmZhTmFtZXM/LmluY2x1ZGVzKGljb24pLFxuICAgICAgKTtcbiAgICAgIGlmIChnbHlwaHMubGVuZ3RoKSB7XG4gICAgICAgIGlmIChnbHlwaHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIC8vIElmIG11bHRpcGxlcyBhcmUgZm91bmQsIG1ha2Ugc3VyZSB3ZSBzZWxlY3QgdGhlIGNvcnJlY3QgdmFyaWFudCwgaWYgcmVxdWVzdGVkLlxuICAgICAgICAgIC8vIFRoZSBpY29ucyBhcmUgb3JkZXJlZCBzdWNoIHRoYXQgdGhlIFwiZGVmYXVsdFwiIHZhcmlhbnQgd2lsbCBiZSB0aGUgZmlyc3Qgb25lLlxuICAgICAgICAgIGlmICh2YXJpYW50KSB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYW50R2x5cGggPSBnbHlwaHMuZmluZCgoZykgPT4gZy5uYW1lLmVuZHNXaXRoKHZhcmlhbnQpKTtcbiAgICAgICAgICAgIGlmICh2YXJpYW50R2x5cGgpIHtcbiAgICAgICAgICAgICAgZ2x5cGhzID0gW3ZhcmlhbnRHbHlwaF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdseXBoID0gZ2x5cGhzWzBdO1xuICAgICAgfVxuICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgYWJvdmUgd29ya3MsIG5vIG1hdGNoaW5nIGljb24gd2FzIGZvdW5kXG4gICAgfVxuXG4gICAgaWYgKGdseXBoKSB7XG4gICAgICAvLyBJZiBhIGdseXBoIGlzIGZvdW5kLCB1c2UgaXQgZm9yIG1vZGVybiB0aGVtZSBvciBpZiBubyBGQSBmYWxsYmFjayBleGlzdHMuXG4gICAgICBpZiAodGhlbWVTZXR0aW5ncz8udGhlbWUubmFtZSA9PT0gJ21vZGVybicgfHwgIWdseXBoLmZhTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgICBpY29uID0gZ2x5cGgubmFtZTtcbiAgICAgICAgaWNvblR5cGUgPSAnc2t5dXgnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIGRlZmF1bHQgdGhlbWUsIHVzZSBhIGtub3duIEZBIGZhbGxiYWNrLlxuICAgICAgICAvLyBJZiB0aGUgaWNvbiBuYW1lIHJlcXVlc3RlZCBpcyBhbHJlYWR5IGEgRkEgaWNvbiwganVzdCB1c2UgaXQuIE90aGVyd2lzZSB1c2UgdGhlIGZpcnN0IG9uZS5cbiAgICAgICAgaWYgKCFnbHlwaC5mYU5hbWVzPy5pbmNsdWRlcyhpY29uKSkge1xuICAgICAgICAgIGljb24gPSBnbHlwaC5mYU5hbWVzWzBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gU0tZIFVYIGdseXBoIGlzIGZvdW5kLCBhc3N1bWUgaWNvbiBpcyBwYXJ0IG9mIEZBIGFuZCBwYXNzIGl0IGFsb25nLlxuICAgIHJldHVybiB7XG4gICAgICBpY29uLFxuICAgICAgaWNvblR5cGUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1zdGFjay1pdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2ljb24vc3JjL2xpYi9pY29uL2ljb24tc3RhY2staXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2t5SWNvblR5cGUgfSBmcm9tICcuL3R5cGVzL2ljb24tdHlwZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2t5SWNvblN0YWNrSXRlbSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZlxuICAgKiBbdGhlIEZvbnQgQXdlc29tZSA0LjcgaWNvbl0oaHR0cHM6Ly9mb250YXdlc29tZS5jb20vdjQuNy9pY29ucy8pIHRvXG4gICAqIGRpc3BsYXkuIERvIG5vdCBzcGVjaWZ5IHRoZSBgZmEgZmEtYCBjbGFzc2VzLlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIGljb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgaWNvbiB0byBkaXNwbGF5LiBTcGVjaWZ5aW5nIGBmYWAgZGlzcGxheXMgYSBGb250IEF3ZXNvbWUgaWNvbixcbiAgICogd2hpbGUgc3BlY2lmeWluZyBgc2t5dXhgIGRpc3BsYXlzIGFuIGljb24gZnJvbSB0aGUgY3VzdG9tIFNLWSBVWCBpY29uIGZvbnQuIE5vdGUgdGhhdFxuICAgKiB0aGUgY3VzdG9tIFNLWSBVWCBpY29uIGZvbnQgaXMgY3VycmVudGx5IGluIGJldGEuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBpY29uVHlwZT86IFNreUljb25UeXBlO1xufVxuIl19
@@ -1,85 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- async function getIconMap() {
4
- const response = await fetch(`https://sky.blackbaudcdn.net/static/skyux-icons/7/assets/svg/skyux-icons.svg`);
5
- if (!response.ok) {
6
- throw new Error('Icon sprite could not be loaded.');
7
- }
8
- const markup = await response.text();
9
- document.body.insertAdjacentHTML('afterbegin', markup);
10
- const iconMap = Array.from(document.querySelectorAll('#sky-icon-svg-sprite symbol')).reduce((map, el) => {
11
- const idParts = el.id.split('-');
12
- // Construct the icon name by removing `sky-i-` from the beginning
13
- // and `-<size>-<variant>` from the end.
14
- const name = idParts.slice(2, idParts.length - 2).join('-');
15
- let sizes = map.get(name);
16
- if (!sizes) {
17
- sizes = [];
18
- map.set(name, sizes);
19
- }
20
- // The penultimate segment is the size for which the icon has
21
- // been optimized.
22
- sizes.push(+idParts[idParts.length - 2]);
23
- return map;
24
- }, new Map());
25
- // Sort all the sizes for later comparison.
26
- for (const id of iconMap.keys()) {
27
- // Dedupe and sort the icon sizes.
28
- iconMap.set(id, [...new Set(iconMap.get(id))].sort());
29
- }
30
- return iconMap;
31
- }
32
- function getNearestSize(iconMap, name, pixelSize) {
33
- const sizes = iconMap.get(name);
34
- if (sizes) {
35
- let nearestSizeUnder = -Infinity;
36
- let nearestSizeOver = Infinity;
37
- for (const availableSize of sizes) {
38
- if (availableSize === pixelSize) {
39
- return pixelSize;
40
- }
41
- else if (availableSize < pixelSize) {
42
- nearestSizeUnder = availableSize;
43
- }
44
- else {
45
- nearestSizeOver = availableSize;
46
- break;
47
- }
48
- }
49
- const underDiff = Math.abs(pixelSize - nearestSizeUnder);
50
- const overDiff = Math.abs(pixelSize - nearestSizeOver);
51
- return isNaN(overDiff) || underDiff < overDiff
52
- ? nearestSizeUnder
53
- : nearestSizeOver;
54
- }
55
- return undefined;
56
- }
57
- /**
58
- * @internal
59
- */
60
- export class SkyIconSvgResolverService {
61
- #iconMapPromise;
62
- async resolveHref(name, pixelSize = 16, variant = 'line') {
63
- if (!this.#iconMapPromise) {
64
- this.#iconMapPromise = getIconMap();
65
- }
66
- const iconMap = await this.#iconMapPromise;
67
- let href = `#sky-i-${name}`;
68
- // Find the icon with the optimal size nearest to the requested size.
69
- const nearestSize = getNearestSize(iconMap, name, pixelSize);
70
- if (!nearestSize) {
71
- throw new Error(`Icon with name '${name}' was not found.`);
72
- }
73
- href = `${href}-${nearestSize}-${variant}`;
74
- return href;
75
- }
76
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconSvgResolverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
77
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconSvgResolverService, providedIn: 'root' }); }
78
- }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: SkyIconSvgResolverService, decorators: [{
80
- type: Injectable,
81
- args: [{
82
- providedIn: 'root',
83
- }]
84
- }] });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1zdmctcmVzb2x2ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9pY29uL3NyYy9saWIvaWNvbi9pY29uLXN2Zy1yZXNvbHZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNDLEtBQUssVUFBVSxVQUFVO0lBQ3ZCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUMxQiw4RUFBOEUsQ0FDL0UsQ0FBQztJQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVyQyxRQUFRLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV2RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUN4QixRQUFRLENBQUMsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsQ0FDekQsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDbkIsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFakMsa0VBQWtFO1FBQ2xFLHdDQUF3QztRQUN4QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU1RCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FB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LElBQUksQ0FBQztJQUNkLENBQUM7OEdBMUJVLHlCQUF5QjtrSEFBekIseUJBQXlCLGNBRnhCLE1BQU07OzJGQUVQLHlCQUF5QjtrQkFIckMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUljb25WYXJpYW50VHlwZSB9IGZyb20gJy4vdHlwZXMvaWNvbi12YXJpYW50LXR5cGUnO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRJY29uTWFwKCk6IFByb21pc2U8TWFwPHN0cmluZywgbnVtYmVyW10+PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgYGh0dHBzOi8vc2t5LmJsYWNrYmF1ZGNkbi5uZXQvc3RhdGljL3NreXV4LWljb25zLzcvYXNzZXRzL3N2Zy9za3l1eC1pY29ucy5zdmdgLFxuICApO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ljb24gc3ByaXRlIGNvdWxkIG5vdCBiZSBsb2FkZWQuJyk7XG4gIH1cblxuICBjb25zdCBtYXJrdXAgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG5cbiAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyYmVnaW4nLCBtYXJrdXApO1xuXG4gIGNvbnN0IGljb25NYXAgPSBBcnJheS5mcm9tPFNWR1N5bWJvbEVsZW1lbnQ+KFxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNza3ktaWNvbi1zdmctc3ByaXRlIHN5bWJvbCcpLFxuICApLnJlZHVjZSgobWFwLCBlbCkgPT4ge1xuICAgIGNvbnN0IGlkUGFydHMgPSBlbC5pZC5zcGxpdCgnLScpO1xuXG4gICAgLy8gQ29uc3RydWN0IHRoZSBpY29uIG5hbWUgYnkgcmVtb3ZpbmcgYHNreS1pLWAgZnJvbSB0aGUgYmVnaW5uaW5nXG4gICAgLy8gYW5kIGAtPHNpemU+LTx2YXJpYW50PmAgZnJvbSB0aGUgZW5kLlxuICAgIGNvbnN0IG5hbWUgPSBpZFBhcnRzLnNsaWNlKDIsIGlkUGFydHMubGVuZ3RoIC0gMikuam9pbignLScpO1xuXG4gICAgbGV0IHNpemVzID0gbWFwLmdldChuYW1lKTtcblxuICAgIGlmICghc2l6ZXMpIHtcbiAgICAgIHNpemVzID0gW107XG4gICAgICBtYXAuc2V0KG5hbWUsIHNpemVzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgcGVudWx0aW1hdGUgc2VnbWVudCBpcyB0aGUgc2l6ZSBmb3Igd2hpY2ggdGhlIGljb24gaGFzXG4gICAgLy8gYmVlbiBvcHRpbWl6ZWQuXG4gICAgc2l6ZXMucHVzaCgraWRQYXJ0c1tpZFBhcnRzLmxlbmd0aCAtIDJdKTtcblxuICAgIHJldHVybiBtYXA7XG4gIH0sIG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKSk7XG5cbiAgLy8gU29ydCBhbGwgdGhlIHNpemVzIGZvciBsYXRlciBjb21wYXJpc29uLlxuICBmb3IgKGNvbnN0IGlkIG9mIGljb25NYXAua2V5cygpKSB7XG4gICAgLy8gRGVkdXBlIGFuZCBzb3J0IHRoZSBpY29uIHNpemVzLlxuICAgIGljb25NYXAuc2V0KGlkLCBbLi4ubmV3IFNldChpY29uTWFwLmdldChpZCkpXS5zb3J0KCkpO1xuICB9XG5cbiAgcmV0dXJuIGljb25NYXA7XG59XG5cbmZ1bmN0aW9uIGdldE5lYXJlc3RTaXplKFxuICBpY29uTWFwOiBNYXA8c3RyaW5nLCBudW1iZXJbXT4sXG4gIG5hbWU6IHN0cmluZyxcbiAgcGl4ZWxTaXplOiBudW1iZXIsXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBzaXplcyA9IGljb25NYXAuZ2V0KG5hbWUpO1xuXG4gIGlmIChzaXplcykge1xuICAgIGxldCBuZWFyZXN0U2l6ZVVuZGVyID0gLUluZmluaXR5O1xuICAgIGxldCBuZWFyZXN0U2l6ZU92ZXIgPSBJbmZpbml0eTtcblxuICAgIGZvciAoY29uc3QgYXZhaWxhYmxlU2l6ZSBvZiBzaXplcykge1xuICAgICAgaWYgKGF2YWlsYWJsZVNpemUgPT09IHBpeGVsU2l6ZSkge1xuICAgICAgICByZXR1cm4gcGl4ZWxTaXplO1xuICAgICAgfSBlbHNlIGlmIChhdmFpbGFibGVTaXplIDwgcGl4ZWxTaXplKSB7XG4gICAgICAgIG5lYXJlc3RTaXplVW5kZXIgPSBhdmFpbGFibGVTaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmVhcmVzdFNpemVPdmVyID0gYXZhaWxhYmxlU2l6ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdW5kZXJEaWZmID0gTWF0aC5hYnMocGl4ZWxTaXplIC0gbmVhcmVzdFNpemVVbmRlcik7XG4gICAgY29uc3Qgb3ZlckRpZmYgPSBNYXRoLmFicyhwaXhlbFNpemUgLSBuZWFyZXN0U2l6ZU92ZXIpO1xuXG4gICAgcmV0dXJuIGlzTmFOKG92ZXJEaWZmKSB8fCB1bmRlckRpZmYgPCBvdmVyRGlmZlxuICAgICAgPyBuZWFyZXN0U2l6ZVVuZGVyXG4gICAgICA6IG5lYXJlc3RTaXplT3ZlcjtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lJY29uU3ZnUmVzb2x2ZXJTZXJ2aWNlIHtcbiAgI2ljb25NYXBQcm9taXNlOiBQcm9taXNlPE1hcDxzdHJpbmcsIG51bWJlcltdPj4gfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGFzeW5jIHJlc29sdmVIcmVmKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwaXhlbFNpemUgPSAxNixcbiAgICB2YXJpYW50OiBTa3lJY29uVmFyaWFudFR5cGUgPSAnbGluZScsXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF0aGlzLiNpY29uTWFwUHJvbWlzZSkge1xuICAgICAgdGhpcy4jaWNvbk1hcFByb21pc2UgPSBnZXRJY29uTWFwKCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWNvbk1hcCA9IGF3YWl0IHRoaXMuI2ljb25NYXBQcm9taXNlO1xuXG4gICAgbGV0IGhyZWYgPSBgI3NreS1pLSR7bmFtZX1gO1xuXG4gICAgLy8gRmluZCB0aGUgaWNvbiB3aXRoIHRoZSBvcHRpbWFsIHNpemUgbmVhcmVzdCB0byB0aGUgcmVxdWVzdGVkIHNpemUuXG4gICAgY29uc3QgbmVhcmVzdFNpemUgPSBnZXROZWFyZXN0U2l6ZShpY29uTWFwLCBuYW1lLCBwaXhlbFNpemUpO1xuXG4gICAgaWYgKCFuZWFyZXN0U2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJY29uIHdpdGggbmFtZSAnJHtuYW1lfScgd2FzIG5vdCBmb3VuZC5gKTtcbiAgICB9XG5cbiAgICBocmVmID0gYCR7aHJlZn0tJHtuZWFyZXN0U2l6ZX0tJHt2YXJpYW50fWA7XG5cbiAgICByZXR1cm4gaHJlZjtcbiAgfVxufVxuIl19