@ngaox/icons
Version:
Inline SVG icons from (src | files | your favorite icons library | ...)!
111 lines • 13.5 kB
JavaScript
import { DOCUMENT } from '@angular/common';
import { HttpClient } from '@angular/common/http';
import { Inject, Injectable, Optional } from '@angular/core';
import { of, map, shareReplay } from 'rxjs';
import { NGAOX_FALLBACK } from './models';
import { NgaoxGlobalIcons } from './icons.module';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common/http";
const defaultFallbackIcon = `
<svg viewBox="0 0 612 612" xmlns="http://www.w3.org/2000/svg" fill="currentColor">
<path d="M306 50C164.6 50 50 164.6 50 306C50 447.4 164.6 562 306 562C447.4 562 562 447.4 562 306C562 164.6 447.4 50 306 50ZM282 202C282 188.8 292.8 178 306 178C319.2 178 330 188.75 330 202V330C330 343.25 319.25 354 306 354C292.75 354 282 343.3 282 330V202ZM306 450C288.64 450 274.56 435.92 274.56 418.56C274.56 401.2 288.63 387.12 306 387.12C323.37 387.12 337.44 401.2 337.44 418.56C337.4 435.9 323.4 450 306 450Z"/>
</svg>
`;
export class IconsService {
constructor(http, document, fallbackIcon = defaultFallbackIcon, icons) {
this.http = http;
this.document = document;
this.fallbackIcon = fallbackIcon;
this.icons = new Map();
this.lazyIcons = new Map();
icons ??= [];
this.addAll(icons);
}
textToSvgElement(svg) {
const div = this.document.createElement('div');
div.innerHTML = svg;
const svgEl = div.querySelector('svg');
if (svgEl) {
svgEl.setAttribute('height', '100%');
svgEl.setAttribute('width', '100%');
}
return svgEl;
}
/**
* Get the fallback icon specified in the import of the `IconsModule.forRoot`
* Used in the `ngaox-icon` component when the icon is not found
* @see {@link https://ngaox-lab.web.app/docs/icons#fallback-icon}
*/
getFallbackIcon() {
return this.fallbackIcon;
}
/**
* get an already registered/added icon
*
* @see {@link IconsService.add}
*/
get(name) {
if (this.icons.has(name)) {
return of(this.icons.get(name));
}
else if (this.lazyIcons.has(name)) {
return this.lazyIcons.get(name) ?? of(undefined);
}
return of(undefined);
}
/**
* Add an SVG icon to the NgaoxIcons registry
*
* @param name the name of the Icon in the registry (used in `ngaox-icon` component and {@link IconsService.get})
* @param value the SVG content or {@link ILazyIcon} for lazy loaded icons
* @param override (default to true) whether or not replacing existing `svg` if `name` already exists
*
*/
add(name, value) {
if (typeof value === 'string') {
this.icons.set(name, this.textToSvgElement(value));
}
else {
this.lazyIcons.set(name, this.http.get(value.url, { responseType: 'text' }).pipe(map(svg => this.textToSvgElement(svg)), shareReplay(1)));
}
return this.get(name);
}
addAll(icons) {
icons.forEach(icon => {
this.add(icon.name, icon.data);
});
}
/**
* remove a registered icon
*/
remove(name) {
if (this.icons.has(name)) {
this.icons.delete(name);
}
if (this.lazyIcons.has(name)) {
this.lazyIcons.delete(name);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: IconsService, deps: [{ token: i1.HttpClient }, { token: DOCUMENT }, { token: NGAOX_FALLBACK, optional: true }, { token: NgaoxGlobalIcons, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: IconsService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: IconsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NGAOX_FALLBACK]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NgaoxGlobalIcons]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2ljb25zL3NyYy9saWIvaWNvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUF5QixjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUVsRCxNQUFNLG1CQUFtQixHQUFHOzs7O0NBSTNCLENBQUM7QUFLRixNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUNVLElBQWdCLEVBQ0UsUUFBa0IsRUFHcEMsZUFBdUIsbUJBQW1CLEVBQ1osS0FBb0I7UUFMbEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNFLGFBQVEsR0FBUixRQUFRLENBQVU7UUFHcEMsaUJBQVksR0FBWixZQUFZLENBQThCO1FBUjVDLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztRQUN0QyxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWtDLENBQUM7UUFVNUQsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEdBQVc7UUFDbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsR0FBRyxDQUFDLFNBQVMsR0FB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QUNSLE1BQU07MkJBQUMsY0FBYzs7MEJBRXJCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IElMYXp5SWNvbiwgSU5nYW94SWNvbiwgTkdBT1hfRkFMTEJBQ0sgfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IE5nYW94R2xvYmFsSWNvbnMgfSBmcm9tICcuL2ljb25zLm1vZHVsZSc7XHJcblxyXG5jb25zdCBkZWZhdWx0RmFsbGJhY2tJY29uID0gYFxyXG4gIDxzdmcgdmlld0JveD1cIjAgMCA2MTIgNjEyXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgIDxwYXRoIGQ9XCJNMzA2IDUwQzE2NC42IDUwIDUwIDE2NC42IDUwIDMwNkM1MCA0NDcuNCAxNjQuNiA1NjIgMzA2IDU2MkM0NDcuNCA1NjIgNTYyIDQ0Ny40IDU2MiAzMDZDNTYyIDE2NC42IDQ0Ny40IDUwIDMwNiA1MFpNMjgyIDIwMkMyODIgMTg4LjggMjkyLjggMTc4IDMwNiAxNzhDMzE5LjIgMTc4IDMzMCAxODguNzUgMzMwIDIwMlYzMzBDMzMwIDM0My4yNSAzMTkuMjUgMzU0IDMwNiAzNTRDMjkyLjc1IDM1NCAyODIgMzQzLjMgMjgyIDMzMFYyMDJaTTMwNiA0NTBDMjg4LjY0IDQ1MCAyNzQuNTYgNDM1LjkyIDI3NC41NiA0MTguNTZDMjc0LjU2IDQwMS4yIDI4OC42MyAzODcuMTIgMzA2IDM4Ny4xMkMzMjMuMzcgMzg3LjEyIDMzNy40NCA0MDEuMiAzMzcuNDQgNDE4LjU2QzMzNy40IDQzNS45IDMyMy40IDQ1MCAzMDYgNDUwWlwiLz5cclxuICA8L3N2Zz5cclxuYDtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEljb25zU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBpY29ucyA9IG5ldyBNYXA8c3RyaW5nLCBTVkdFbGVtZW50PigpO1xyXG4gIHByaXZhdGUgbGF6eUljb25zID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8U1ZHRWxlbWVudD4+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnQsXHJcbiAgICBAT3B0aW9uYWwoKVxyXG4gICAgQEluamVjdChOR0FPWF9GQUxMQkFDSylcclxuICAgIHByaXZhdGUgZmFsbGJhY2tJY29uOiBzdHJpbmcgPSBkZWZhdWx0RmFsbGJhY2tJY29uLFxyXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChOZ2FveEdsb2JhbEljb25zKSBpY29ucz86IElOZ2FveEljb25bXVxyXG4gICkge1xyXG4gICAgaWNvbnMgPz89IFtdO1xyXG4gICAgdGhpcy5hZGRBbGwoaWNvbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0ZXh0VG9TdmdFbGVtZW50KHN2Zzogc3RyaW5nKTogU1ZHRWxlbWVudCB7XHJcbiAgICBjb25zdCBkaXYgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgZGl2LmlubmVySFRNTCA9IHN2ZztcclxuICAgIGNvbnN0IHN2Z0VsID0gZGl2LnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpIGFzIFNWR0VsZW1lbnQ7XHJcbiAgICBpZiAoc3ZnRWwpIHtcclxuICAgICAgc3ZnRWwuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTAwJScpO1xyXG4gICAgICBzdmdFbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzEwMCUnKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdmdFbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZmFsbGJhY2sgaWNvbiBzcGVjaWZpZWQgaW4gdGhlIGltcG9ydCBvZiB0aGUgYEljb25zTW9kdWxlLmZvclJvb3RgXHJcbiAgICogVXNlZCBpbiB0aGUgYG5nYW94LWljb25gIGNvbXBvbmVudCB3aGVuIHRoZSBpY29uIGlzIG5vdCBmb3VuZFxyXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbmdhb3gtbGFiLndlYi5hcHAvZG9jcy9pY29ucyNmYWxsYmFjay1pY29ufVxyXG4gICAqL1xyXG4gIGdldEZhbGxiYWNrSWNvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmZhbGxiYWNrSWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQvYWRkZWQgaWNvblxyXG4gICAqXHJcbiAgICogQHNlZSAge0BsaW5rIEljb25zU2VydmljZS5hZGR9XHJcbiAgICovXHJcbiAgZ2V0KG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8U1ZHRWxlbWVudCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgaWYgKHRoaXMuaWNvbnMuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHJldHVybiBvZih0aGlzLmljb25zLmdldChuYW1lKSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMubGF6eUljb25zLmhhcyhuYW1lKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sYXp5SWNvbnMuZ2V0KG5hbWUpID8/IG9mKHVuZGVmaW5lZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZCBhbiBTVkcgaWNvbiB0byB0aGUgTmdhb3hJY29ucyByZWdpc3RyeVxyXG4gICAqXHJcbiAgICogQHBhcmFtIG5hbWUgdGhlIG5hbWUgb2YgdGhlIEljb24gaW4gdGhlIHJlZ2lzdHJ5ICh1c2VkIGluIGBuZ2FveC1pY29uYCBjb21wb25lbnQgYW5kIHtAbGluayBJY29uc1NlcnZpY2UuZ2V0fSlcclxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIFNWRyBjb250ZW50IG9yIHtAbGluayBJTGF6eUljb259IGZvciBsYXp5IGxvYWRlZCBpY29uc1xyXG4gICAqIEBwYXJhbSBvdmVycmlkZSAoZGVmYXVsdCB0byB0cnVlKSB3aGV0aGVyIG9yIG5vdCByZXBsYWNpbmcgZXhpc3RpbmcgYHN2Z2AgaWYgYG5hbWVgIGFscmVhZHkgZXhpc3RzXHJcbiAgICpcclxuICAgKi9cclxuICBhZGQoXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICB2YWx1ZTogc3RyaW5nIHwgSUxhenlJY29uXHJcbiAgKTogT2JzZXJ2YWJsZTxTVkdFbGVtZW50IHwgdW5kZWZpbmVkPiB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB0aGlzLmljb25zLnNldChuYW1lLCB0aGlzLnRleHRUb1N2Z0VsZW1lbnQodmFsdWUpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGF6eUljb25zLnNldChcclxuICAgICAgICBuYW1lLFxyXG4gICAgICAgIHRoaXMuaHR0cC5nZXQodmFsdWUudXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pLnBpcGUoXHJcbiAgICAgICAgICBtYXAoc3ZnID0+IHRoaXMudGV4dFRvU3ZnRWxlbWVudChzdmcpKSxcclxuICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZ2V0KG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgYWRkQWxsKGljb25zOiBJTmdhb3hJY29uW10pIHtcclxuICAgIGljb25zLmZvckVhY2goaWNvbiA9PiB7XHJcbiAgICAgIHRoaXMuYWRkKGljb24ubmFtZSwgaWNvbi5kYXRhKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVtb3ZlIGEgcmVnaXN0ZXJlZCBpY29uXHJcbiAgICovXHJcbiAgcmVtb3ZlKG5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuaWNvbnMuaGFzKG5hbWUpKSB7XHJcbiAgICAgIHRoaXMuaWNvbnMuZGVsZXRlKG5hbWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubGF6eUljb25zLmhhcyhuYW1lKSkge1xyXG4gICAgICB0aGlzLmxhenlJY29ucy5kZWxldGUobmFtZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==