@ng-icons/core 27.0.0 → 27.2.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.
- package/README.md +41 -2
- package/esm2022/index.mjs +3 -1
- package/esm2022/lib/components/icon/icon.component.mjs +17 -5
- package/esm2022/lib/providers/features/csp.mjs +37 -0
- package/esm2022/lib/providers/features/features.mjs +7 -0
- package/esm2022/lib/providers/features/logger.mjs +43 -0
- package/esm2022/lib/providers/icon-config.provider.mjs +9 -6
- package/fesm2022/ng-icons-core.mjs +106 -10
- package/fesm2022/ng-icons-core.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/lib/components/icon/icon.component.d.ts +7 -0
- package/lib/providers/features/csp.d.ts +12 -0
- package/lib/providers/features/features.d.ts +22 -0
- package/lib/providers/features/logger.d.ts +30 -0
- package/lib/providers/icon-config.provider.d.ts +2 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
<img width="600" alt="logo" src="https://github.com/ng-icons/ng-icons/assets/20795331/8781b0a9-2c8a-4a7f-9afd-13e47d14cffe">
|
|
2
2
|
|
|
3
|
+
<div style="margin-top: 1rem;">
|
|
4
|
+
<img alt="NPM Downloads" src="https://img.shields.io/npm/dt/%40ng-icons%2Fcore">
|
|
5
|
+
<img alt="NPM Version" src="https://img.shields.io/npm/v/%40ng-icons%2Fcore">
|
|
6
|
+
<img alt="GitHub Sponsors" src="https://img.shields.io/github/sponsors/ashley-hunter">
|
|
7
|
+
</div>
|
|
8
|
+
|
|
3
9
|
# Ng Icons
|
|
4
10
|
|
|
5
11
|
The all-in-one icon library for Angular. This allows you to use icons from multiple icon sets with a single icon component.
|
|
6
|
-
Containing over
|
|
12
|
+
Containing over 37,700 icons for you to use in your projects.
|
|
7
13
|
|
|
8
14
|
Currently, we support the following libraries:
|
|
9
15
|
|
|
@@ -32,6 +38,12 @@ Currently, we support the following libraries:
|
|
|
32
38
|
|
|
33
39
|
Got suggestions for additional iconsets? Create an issue and we can consider adding them!
|
|
34
40
|
|
|
41
|
+
## Supporting Ng Icons
|
|
42
|
+
|
|
43
|
+
Ng Icons is an MIT-licensed open source project with its ongoing development made possible by contributors and sponsors.
|
|
44
|
+
|
|
45
|
+
[Become a Sponsor!](https://github.com/sponsors/ashley-hunter).
|
|
46
|
+
|
|
35
47
|
## Supported Versions
|
|
36
48
|
|
|
37
49
|
| Angular Version | Ng Icon Version |
|
|
@@ -42,7 +54,7 @@ Got suggestions for additional iconsets? Create an issue and we can consider add
|
|
|
42
54
|
| 14.x.x | 17.x.x - 22.x.x |
|
|
43
55
|
| 15.x.x | 23.x.x - 24.x.x |
|
|
44
56
|
| 16.x.x | 25.x.x |
|
|
45
|
-
| 17.x.x | 26.x.x
|
|
57
|
+
| 17.x.x | 26.x.x - 27.x.x |
|
|
46
58
|
|
|
47
59
|
> **Note**: Ng Icons relies on modern browser features and is designed to work on evergreen browsers. We do not support older browsers such as IE11.
|
|
48
60
|
|
|
@@ -208,6 +220,33 @@ bootstrapApplication(AppComponent, {
|
|
|
208
220
|
});
|
|
209
221
|
```
|
|
210
222
|
|
|
223
|
+
### Content Security Policy
|
|
224
|
+
|
|
225
|
+
If your application has a strict Content Security Policy (CSP) you may need to add the following to your global configuration to ensure you do not get any errors.
|
|
226
|
+
|
|
227
|
+
```ts
|
|
228
|
+
import { NgIconComponent, provideIcons, provideNgIconsConfig, withContentSecurityPolicy } from '@ng-icons/core';
|
|
229
|
+
|
|
230
|
+
bootstrapApplication(AppComponent, {
|
|
231
|
+
providers: [provideNgIconsConfig({}, withContentSecurityPolicy())],
|
|
232
|
+
});
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Logging
|
|
236
|
+
|
|
237
|
+
By default Ng Icons will log warnings or errors to the console - notably if you try to use an icon that has not been registered.
|
|
238
|
+
Should you want stricter checks you can enable the `ExceptionLogger` which will throw an error if you try to use an icon that has not been registered.
|
|
239
|
+
|
|
240
|
+
You can enable this by providing the `withExceptionLogger` function to the `provideNgIconsConfig` function.
|
|
241
|
+
|
|
242
|
+
```ts
|
|
243
|
+
import { NgIconComponent, provideIcons, provideNgIconsConfig, withExceptionLogger } from '@ng-icons/core';
|
|
244
|
+
|
|
245
|
+
bootstrapApplication(AppComponent, {
|
|
246
|
+
providers: [provideNgIconsConfig({}, withExceptionLogger())],
|
|
247
|
+
});
|
|
248
|
+
```
|
|
249
|
+
|
|
211
250
|
### Dynamically Loading Icons
|
|
212
251
|
|
|
213
252
|
The most common way to load icons is simply by registering them individually, however you may want to load icons lazily from a URL, or generate an SVG programatically on the fly. This can be achived using an icon loader. Icon loaders are a function that receives the name of the requested icon, and can return an `Observable<string>`, `Promise<string>` or a `string` containing the SVG to render. Within this function you can do whatever you need to retrieve an icon.
|
package/esm2022/index.mjs
CHANGED
|
@@ -7,6 +7,8 @@ export { provideNgGlyphs, } from './lib/providers/glyph.provider';
|
|
|
7
7
|
export * from './lib/providers/icon-config.provider';
|
|
8
8
|
export * from './lib/providers/icon-loader.provider';
|
|
9
9
|
export * from './lib/providers/icon.provider';
|
|
10
|
+
export { withContentSecurityPolicy } from './lib/providers/features/csp';
|
|
11
|
+
export { withExceptionLogger } from './lib/providers/features/logger';
|
|
10
12
|
// re-export the component as NgIconComponent to prevent breaking changes
|
|
11
13
|
export { NgIcon as NgIconComponent } from './lib/components/icon/icon.component';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsT0FBTyxFQUdMLGVBQWUsR0FDaEIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RSx5RUFBeUU7QUFDekUsT0FBTyxFQUFFLE1BQU0sSUFBSSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZ2x5cGgvZ2x5cGguY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaWNvbi9pY29uLW5hbWUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pY29uL2ljb24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ljb24ubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb3ZpZGVycy9nbHlwaC1jb25maWcucHJvdmlkZXInO1xuZXhwb3J0IHtcbiAgTmdHbHlwaHMsXG4gIE5nR2x5cGhzZXQsXG4gIHByb3ZpZGVOZ0dseXBocyxcbn0gZnJvbSAnLi9saWIvcHJvdmlkZXJzL2dseXBoLnByb3ZpZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3Byb3ZpZGVycy9pY29uLWNvbmZpZy5wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9wcm92aWRlcnMvaWNvbi1sb2FkZXIucHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvdmlkZXJzL2ljb24ucHJvdmlkZXInO1xuZXhwb3J0IHsgd2l0aENvbnRlbnRTZWN1cml0eVBvbGljeSB9IGZyb20gJy4vbGliL3Byb3ZpZGVycy9mZWF0dXJlcy9jc3AnO1xuZXhwb3J0IHsgd2l0aEV4Y2VwdGlvbkxvZ2dlciB9IGZyb20gJy4vbGliL3Byb3ZpZGVycy9mZWF0dXJlcy9sb2dnZXInO1xuXG4vLyByZS1leHBvcnQgdGhlIGNvbXBvbmVudCBhcyBOZ0ljb25Db21wb25lbnQgdG8gcHJldmVudCBicmVha2luZyBjaGFuZ2VzXG5leHBvcnQgeyBOZ0ljb24gYXMgTmdJY29uQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9pY29uL2ljb24uY29tcG9uZW50JztcbiJdfQ==
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, ElementRef, inject, Injector, Input, runInInjectionContext, } from '@angular/core';
|
|
2
|
+
import { injectNgIconPostProcessor, injectNgIconPreProcessor, } from '../../providers/features/csp';
|
|
2
3
|
import { injectNgIconConfig } from '../../providers/icon-config.provider';
|
|
3
4
|
import { injectNgIconLoader, injectNgIconLoaderCache, } from '../../providers/icon-loader.provider';
|
|
4
5
|
import { injectNgIcons } from '../../providers/icon.provider';
|
|
5
6
|
import { coerceLoaderResult } from '../../utils/async';
|
|
6
7
|
import { coerceCssPixelValue } from '../../utils/coercion';
|
|
7
8
|
import { toPropertyName } from '../../utils/format';
|
|
9
|
+
import { injectLogger } from '../../providers/features/logger';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
export class NgIcon {
|
|
10
12
|
constructor() {
|
|
@@ -16,10 +18,16 @@ export class NgIcon {
|
|
|
16
18
|
this.loader = injectNgIconLoader();
|
|
17
19
|
/** Access the icon cache if defined */
|
|
18
20
|
this.cache = injectNgIconLoaderCache();
|
|
21
|
+
/** Access the pre-processor */
|
|
22
|
+
this.preProcessor = injectNgIconPreProcessor();
|
|
23
|
+
/** Access the post-processor */
|
|
24
|
+
this.postProcessor = injectNgIconPostProcessor();
|
|
19
25
|
/** Access the injector */
|
|
20
26
|
this.injector = inject(Injector);
|
|
21
27
|
/** Access the element ref */
|
|
22
28
|
this.elementRef = inject(ElementRef);
|
|
29
|
+
/** Access the logger */
|
|
30
|
+
this.logger = injectLogger();
|
|
23
31
|
/** Define the size of the icon */
|
|
24
32
|
this.size = this.config.size;
|
|
25
33
|
/** Define the color of the icon */
|
|
@@ -31,7 +39,7 @@ export class NgIcon {
|
|
|
31
39
|
}
|
|
32
40
|
/** Define the svg of the icon to display */
|
|
33
41
|
set svg(svg) {
|
|
34
|
-
this.
|
|
42
|
+
this.setSvg(svg);
|
|
35
43
|
}
|
|
36
44
|
ngOnChanges(changes) {
|
|
37
45
|
if (changes.size) {
|
|
@@ -74,6 +82,10 @@ export class NgIcon {
|
|
|
74
82
|
this.setIconSize();
|
|
75
83
|
this.setIconStrokeWidth();
|
|
76
84
|
}
|
|
85
|
+
setSvg(svg) {
|
|
86
|
+
this.elementRef.nativeElement.innerHTML = this.preProcessor(svg);
|
|
87
|
+
this.postProcessor(this.elementRef.nativeElement);
|
|
88
|
+
}
|
|
77
89
|
/**
|
|
78
90
|
* Load the icon with the given name and insert it into the template.
|
|
79
91
|
* @param name The name of the icon to load.
|
|
@@ -83,7 +95,7 @@ export class NgIcon {
|
|
|
83
95
|
for (const icons of [...this.icons].reverse()) {
|
|
84
96
|
if (icons[propertyName]) {
|
|
85
97
|
// insert the SVG into the template
|
|
86
|
-
this.
|
|
98
|
+
this.setSvg(icons[propertyName]);
|
|
87
99
|
return;
|
|
88
100
|
}
|
|
89
101
|
}
|
|
@@ -92,12 +104,12 @@ export class NgIcon {
|
|
|
92
104
|
const result = await this.requestIconFromLoader(name);
|
|
93
105
|
// if the result is a string, insert the SVG into the template
|
|
94
106
|
if (result !== null) {
|
|
95
|
-
this.
|
|
107
|
+
this.setSvg(result);
|
|
96
108
|
return;
|
|
97
109
|
}
|
|
98
110
|
}
|
|
99
111
|
// if there is no icon with this name warn the user as they probably forgot to import it
|
|
100
|
-
|
|
112
|
+
this.logger.warn(`No icon named ${name} was found. You may need to import it using the withIcons function.`);
|
|
101
113
|
}
|
|
102
114
|
/**
|
|
103
115
|
* Request the icon from the loader.
|
|
@@ -151,4 +163,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
151
163
|
}], color: [{
|
|
152
164
|
type: Input
|
|
153
165
|
}] } });
|
|
154
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvY29tcG9uZW50cy9pY29uL2ljb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxxQkFBcUIsR0FFdEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUNMLGtCQUFrQixFQUNsQix1QkFBdUIsR0FDeEIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQWFwRCxNQUFNLE9BQU8sTUFBTTtJQVBuQjtRQVFFLG9DQUFvQztRQUNuQixXQUFNLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUUvQyx1QkFBdUI7UUFDTixVQUFLLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFFekMsd0NBQXdDO1FBQ3ZCLFdBQU0sR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1FBRS9DLHVDQUF1QztRQUN0QixVQUFLLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztRQUVuRCwwQkFBMEI7UUFDVCxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTdDLDZCQUE2QjtRQUNaLGVBQVUsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO1FBWTFFLGtDQUFrQztRQUVsQyxTQUFJLEdBQXFC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QUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFFdkQsNkdBQTZHO2dCQUM3RyxxREFBcUQ7Z0JBQ3JELElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFL0Isa0NBQWtDO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQztnQkFFN0IsdUNBQXVDO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRTlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0ExS1UsTUFBTTtrR0FBTixNQUFNLHNHQThCRyxtQkFBbUIsOEZBbkM3QixFQUFFOzsyRkFLRCxNQUFNO2tCQVBsQixTQUFTOytCQUNFLFNBQVMsWUFDVCxFQUFFLGNBQ0EsSUFBSSxtQkFFQyx1QkFBdUIsQ0FBQyxNQUFNOzhCQXNCbEMsSUFBSTtzQkFBaEIsS0FBSztnQkFLTyxHQUFHO3NCQUFmLEtBQUs7Z0JBTU4sSUFBSTtzQkFESCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFO2dCQUt6QyxXQUFXO3NCQURWLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBJY29uTmFtZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaWNvbi9pY29uLW5hbWUnO1xuaW1wb3J0IHsgaW5qZWN0TmdJY29uQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL2ljb24tY29uZmlnLnByb3ZpZGVyJztcbmltcG9ydCB7XG4gIGluamVjdE5nSWNvbkxvYWRlcixcbiAgaW5qZWN0TmdJY29uTG9hZGVyQ2FjaGUsXG59IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9pY29uLWxvYWRlci5wcm92aWRlcic7XG5pbXBvcnQgeyBpbmplY3ROZ0ljb25zIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL2ljb24ucHJvdmlkZXInO1xuaW1wb3J0IHsgY29lcmNlTG9hZGVyUmVzdWx0IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXN5bmMnO1xuaW1wb3J0IHsgY29lcmNlQ3NzUGl4ZWxWYWx1ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvZXJjaW9uJztcbmltcG9ydCB7IHRvUHJvcGVydHlOYW1lIH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0JztcblxuLy8gVGhpcyBpcyBhIHR5cGVzY3JpcHQgdHlwZSB0byBwcmV2ZW50IGluZmVyZW5jZSBmcm9tIGNvbGxhcHNpbmcgdGhlIHVuaW9uIHR5cGUgdG8gYSBzdHJpbmcgdG8gaW1wcm92ZSB0eXBlIHNhZmV0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCB0eXBlIEljb25UeXBlID0gSWNvbk5hbWUgfCAoc3RyaW5nICYge30pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1pY29uJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzdHlsZVVybHM6IFsnLi9pY29uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0ljb24gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBBY2Nlc3MgdGhlIGdsb2JhbCBpY29uIGNvbmZpZyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdE5nSWNvbkNvbmZpZygpO1xuXG4gIC8qKiBBY2Nlc3MgdGhlIGljb25zICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaWNvbnMgPSBpbmplY3ROZ0ljb25zKCk7XG5cbiAgLyoqIEFjY2VzcyB0aGUgaWNvbiBsb2FkZXIgaWYgZGVmaW5lZCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlciA9IGluamVjdE5nSWNvbkxvYWRlcigpO1xuXG4gIC8qKiBBY2Nlc3MgdGhlIGljb24gY2FjaGUgaWYgZGVmaW5lZCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gaW5qZWN0TmdJY29uTG9hZGVyQ2FjaGUoKTtcblxuICAvKiogQWNjZXNzIHRoZSBpbmplY3RvciAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAvKiogQWNjZXNzIHRoZSBlbGVtZW50IHJlZiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuXG4gIC8qKiBEZWZpbmUgdGhlIG5hbWUgb2YgdGhlIGljb24gdG8gZGlzcGxheSAqL1xuICBASW5wdXQoKSBzZXQgbmFtZShuYW1lOiBJY29uVHlwZSkge1xuICAgIHRoaXMuc2V0SWNvbihuYW1lKTtcbiAgfVxuXG4gIC8qKiBEZWZpbmUgdGhlIHN2ZyBvZiB0aGUgaWNvbiB0byBkaXNwbGF5ICovXG4gIEBJbnB1dCgpIHNldCBzdmcoc3ZnOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBzdmc7XG4gIH1cblxuICAvKiogRGVmaW5lIHRoZSBzaXplIG9mIHRoZSBpY29uICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQ3NzUGl4ZWxWYWx1ZSB9KVxuICBzaXplPzogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5jb25maWcuc2l6ZTtcblxuICAvKiogRGVmaW5lIHRoZSBzdHJva2Utd2lkdGggb2YgdGhlIGljb24gKi9cbiAgQElucHV0KClcbiAgc3Ryb2tlV2lkdGg/OiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLyoqIERlZmluZSB0aGUgY29sb3Igb2YgdGhlIGljb24gKi9cbiAgQElucHV0KClcbiAgY29sb3I/OiBzdHJpbmcgPSB0aGlzLmNvbmZpZy5jb2xvcjtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuc2l6ZSkge1xuICAgICAgdGhpcy5zZXRJY29uU2l6ZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5jb2xvcikge1xuICAgICAgdGhpcy5zZXRJY29uQ29sb3IoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuc3Ryb2tlV2lkdGgpIHtcbiAgICAgIHRoaXMuc2V0SWNvblN0cm9rZVdpZHRoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJY29uU3R5bGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEljb25Db2xvcigpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnY29sb3InKTtcblxuICAgIGlmICh0aGlzLmNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdjb2xvcicsIHRoaXMuY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SWNvblNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tbmctaWNvbl9fc2l6ZScpO1xuXG4gICAgaWYgKHRoaXMuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tbmctaWNvbl9fc2l6ZScsXG4gICAgICAgIHRoaXMuc2l6ZS50b1N0cmluZygpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEljb25TdHJva2VXaWR0aCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcbiAgICAgICctLW5nLWljb25fX3N0cm9rZS13aWR0aCcsXG4gICAgKTtcbiAgICBpZiAodGhpcy5zdHJva2VXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tbmctaWNvbl9fc3Ryb2tlLXdpZHRoJyxcbiAgICAgICAgdGhpcy5zdHJva2VXaWR0aC50b1N0cmluZygpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdHlsZXMgZm9yIHRoZSBpY29uLiBXZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5IHRvIHNldCB0aGUgc3R5bGVzXG4gICAqIHJhdGhlciB0aGFuIHRoZSBob3N0IGJpbmRpbmcgYXMgaXQgd29ya3Mgd2l0aCBDU1AuXG4gICAqL1xuICBwcml2YXRlIHNldEljb25TdHlsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJY29uQ29sb3IoKTtcbiAgICB0aGlzLnNldEljb25TaXplKCk7XG4gICAgdGhpcy5zZXRJY29uU3Ryb2tlV2lkdGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkIHRoZSBpY29uIHdpdGggdGhlIGdpdmVuIG5hbWUgYW5kIGluc2VydCBpdCBpbnRvIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGljb24gdG8gbG9hZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2V0SWNvbihuYW1lOiBJY29uVHlwZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IHRvUHJvcGVydHlOYW1lKG5hbWUpO1xuXG4gICAgZm9yIChjb25zdCBpY29ucyBvZiBbLi4udGhpcy5pY29uc10ucmV2ZXJzZSgpKSB7XG4gICAgICBpZiAoaWNvbnNbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICAvLyBpbnNlcnQgdGhlIFNWRyBpbnRvIHRoZSB0ZW1wbGF0ZVxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBpY29uc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBsb2FkZXIgZGVmaW5lZCwgdXNlIGl0IHRvIGxvYWQgdGhlIGljb25cbiAgICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdEljb25Gcm9tTG9hZGVyKG5hbWUpO1xuXG4gICAgICAvLyBpZiB0aGUgcmVzdWx0IGlzIGEgc3RyaW5nLCBpbnNlcnQgdGhlIFNWRyBpbnRvIHRoZSB0ZW1wbGF0ZVxuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSByZXN1bHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiB0aGVyZSBpcyBubyBpY29uIHdpdGggdGhpcyBuYW1lIHdhcm4gdGhlIHVzZXIgYXMgdGhleSBwcm9iYWJseSBmb3Jnb3QgdG8gaW1wb3J0IGl0XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYE5vIGljb24gbmFtZWQgJHtuYW1lfSB3YXMgZm91bmQuIFlvdSBtYXkgbmVlZCB0byBpbXBvcnQgaXQgdXNpbmcgdGhlIHdpdGhJY29ucyBmdW5jdGlvbi5gLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0aGUgaWNvbiBmcm9tIHRoZSBsb2FkZXIuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBpY29uIHRvIGxvYWQuXG4gICAqIEByZXR1cm5zIFRoZSBTVkcgY29udGVudCBmb3IgYSBnaXZlbiBpY29uIG5hbWUuXG4gICAqL1xuICBwcml2YXRlIHJlcXVlc3RJY29uRnJvbUxvYWRlcihuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dCh0aGlzLmluamVjdG9yLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBjYWNoZSwgY2hlY2sgaWYgdGhlIGljb24gaXMgYWxyZWFkeSBsb2FkZWQgKGkuZSwgaXQgaXMgYSBzdHJpbmcpXG4gICAgICAgIGlmICh0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gdGhpcy5jYWNoZS5nZXQobmFtZSk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGNhY2hlZFJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJlc29sdmUoY2FjaGVkUmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBpdCBtYXkgYmUgYSBwcm9taXNlLCBzbyB3ZSBuZWVkIHRvIGF3YWl0IGl0XG4gICAgICAgICAgaWYgKGNhY2hlZFJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhY2hlZFJlc3VsdDtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9taXNlID0gY29lcmNlTG9hZGVyUmVzdWx0KHRoaXMubG9hZGVyIShuYW1lKSk7XG5cbiAgICAgICAgLy8gc3RvcmUgdGhlIHByb21pc2UgaW4gdGhlIGNhY2hlIHNvIGlmIHdlIGdldCByZXBlYXRlZCBjYWxscyAoZS5nLiBpbiBhIGxvb3ApIGJlZm9yZSB0aGUgbG9hZGVyIGhhcyByZXNvbHZlZFxuICAgICAgICAvLyB0aGVuIGRvbid0IGNhbGwgdGhlIGxvYWRlciBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lc1xuICAgICAgICB0aGlzLmNhY2hlPy5zZXQobmFtZSwgcHJvbWlzZSk7XG5cbiAgICAgICAgLy8gYXdhaXQgdGhlIHJlc3VsdCBvZiB0aGUgcHJvbWlzZVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBjYWNoZSwgc3RvcmUgdGhlIHJlc3VsdFxuICAgICAgICB0aGlzLmNhY2hlPy5zZXQobmFtZSwgcmVzdWx0KTtcblxuICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvY29tcG9uZW50cy9pY29uL2ljb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxxQkFBcUIsR0FFdEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qix3QkFBd0IsR0FDekIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHVCQUF1QixHQUN4QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDOztBQWEvRCxNQUFNLE9BQU8sTUFBTTtJQVBuQjtRQVFFLG9DQUFvQztRQUNuQixXQUFNLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQztRQUUvQyx1QkFBdUI7UUFDTixVQUFLLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFFekMsd0NBQXdDO1FBQ3ZCLFdBQU0sR0FBRyxrQkFBa0IsRUFBRSxDQUFDO1FBRS9DLHVDQUF1QztRQUN0QixVQUFLLEdBQUcsdUJBQXVCLEVBQUUsQ0FBQztRQUVuRCwrQkFBK0I7UUFDZCxpQkFBWSxHQUFHLHdCQUF3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LEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFO2dCQUt6QyxXQUFXO3NCQURWLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBydW5JbkluamVjdGlvbkNvbnRleHQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBJY29uTmFtZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvaWNvbi9pY29uLW5hbWUnO1xuaW1wb3J0IHtcbiAgaW5qZWN0TmdJY29uUG9zdFByb2Nlc3NvcixcbiAgaW5qZWN0TmdJY29uUHJlUHJvY2Vzc29yLFxufSBmcm9tICcuLi8uLi9wcm92aWRlcnMvZmVhdHVyZXMvY3NwJztcbmltcG9ydCB7IGluamVjdE5nSWNvbkNvbmZpZyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9pY29uLWNvbmZpZy5wcm92aWRlcic7XG5pbXBvcnQge1xuICBpbmplY3ROZ0ljb25Mb2FkZXIsXG4gIGluamVjdE5nSWNvbkxvYWRlckNhY2hlLFxufSBmcm9tICcuLi8uLi9wcm92aWRlcnMvaWNvbi1sb2FkZXIucHJvdmlkZXInO1xuaW1wb3J0IHsgaW5qZWN0TmdJY29ucyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9pY29uLnByb3ZpZGVyJztcbmltcG9ydCB7IGNvZXJjZUxvYWRlclJlc3VsdCB9IGZyb20gJy4uLy4uL3V0aWxzL2FzeW5jJztcbmltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICcuLi8uLi91dGlscy9jb2VyY2lvbic7XG5pbXBvcnQgeyB0b1Byb3BlcnR5TmFtZSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdCc7XG5pbXBvcnQgeyBpbmplY3RMb2dnZXIgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvZmVhdHVyZXMvbG9nZ2VyJztcblxuLy8gVGhpcyBpcyBhIHR5cGVzY3JpcHQgdHlwZSB0byBwcmV2ZW50IGluZmVyZW5jZSBmcm9tIGNvbGxhcHNpbmcgdGhlIHVuaW9uIHR5cGUgdG8gYSBzdHJpbmcgdG8gaW1wcm92ZSB0eXBlIHNhZmV0eVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCB0eXBlIEljb25UeXBlID0gSWNvbk5hbWUgfCAoc3RyaW5nICYge30pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1pY29uJyxcbiAgdGVtcGxhdGU6ICcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzdHlsZVVybHM6IFsnLi9pY29uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0ljb24gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBBY2Nlc3MgdGhlIGdsb2JhbCBpY29uIGNvbmZpZyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdE5nSWNvbkNvbmZpZygpO1xuXG4gIC8qKiBBY2Nlc3MgdGhlIGljb25zICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaWNvbnMgPSBpbmplY3ROZ0ljb25zKCk7XG5cbiAgLyoqIEFjY2VzcyB0aGUgaWNvbiBsb2FkZXIgaWYgZGVmaW5lZCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlciA9IGluamVjdE5nSWNvbkxvYWRlcigpO1xuXG4gIC8qKiBBY2Nlc3MgdGhlIGljb24gY2FjaGUgaWYgZGVmaW5lZCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gaW5qZWN0TmdJY29uTG9hZGVyQ2FjaGUoKTtcblxuICAvKiogQWNjZXNzIHRoZSBwcmUtcHJvY2Vzc29yICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlUHJvY2Vzc29yID0gaW5qZWN0TmdJY29uUHJlUHJvY2Vzc29yKCk7XG5cbiAgLyoqIEFjY2VzcyB0aGUgcG9zdC1wcm9jZXNzb3IgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwb3N0UHJvY2Vzc29yID0gaW5qZWN0TmdJY29uUG9zdFByb2Nlc3NvcigpO1xuXG4gIC8qKiBBY2Nlc3MgdGhlIGluamVjdG9yICovXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIC8qKiBBY2Nlc3MgdGhlIGVsZW1lbnQgcmVmICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG5cbiAgLyoqIEFjY2VzcyB0aGUgbG9nZ2VyICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0TG9nZ2VyKCk7XG5cbiAgLyoqIERlZmluZSB0aGUgbmFtZSBvZiB0aGUgaWNvbiB0byBkaXNwbGF5ICovXG4gIEBJbnB1dCgpIHNldCBuYW1lKG5hbWU6IEljb25UeXBlKSB7XG4gICAgdGhpcy5zZXRJY29uKG5hbWUpO1xuICB9XG5cbiAgLyoqIERlZmluZSB0aGUgc3ZnIG9mIHRoZSBpY29uIHRvIGRpc3BsYXkgKi9cbiAgQElucHV0KCkgc2V0IHN2Zyhzdmc6IHN0cmluZykge1xuICAgIHRoaXMuc2V0U3ZnKHN2Zyk7XG4gIH1cblxuICAvKiogRGVmaW5lIHRoZSBzaXplIG9mIHRoZSBpY29uICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogY29lcmNlQ3NzUGl4ZWxWYWx1ZSB9KVxuICBzaXplPzogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5jb25maWcuc2l6ZTtcblxuICAvKiogRGVmaW5lIHRoZSBzdHJva2Utd2lkdGggb2YgdGhlIGljb24gKi9cbiAgQElucHV0KClcbiAgc3Ryb2tlV2lkdGg/OiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgLyoqIERlZmluZSB0aGUgY29sb3Igb2YgdGhlIGljb24gKi9cbiAgQElucHV0KClcbiAgY29sb3I/OiBzdHJpbmcgPSB0aGlzLmNvbmZpZy5jb2xvcjtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuc2l6ZSkge1xuICAgICAgdGhpcy5zZXRJY29uU2l6ZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5jb2xvcikge1xuICAgICAgdGhpcy5zZXRJY29uQ29sb3IoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuc3Ryb2tlV2lkdGgpIHtcbiAgICAgIHRoaXMuc2V0SWNvblN0cm9rZVdpZHRoKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJY29uU3R5bGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldEljb25Db2xvcigpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnY29sb3InKTtcblxuICAgIGlmICh0aGlzLmNvbG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCdjb2xvcicsIHRoaXMuY29sb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SWNvblNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tbmctaWNvbl9fc2l6ZScpO1xuXG4gICAgaWYgKHRoaXMuc2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tbmctaWNvbl9fc2l6ZScsXG4gICAgICAgIHRoaXMuc2l6ZS50b1N0cmluZygpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEljb25TdHJva2VXaWR0aCgpOiB2b2lkIHtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcbiAgICAgICctLW5nLWljb25fX3N0cm9rZS13aWR0aCcsXG4gICAgKTtcbiAgICBpZiAodGhpcy5zdHJva2VXaWR0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tbmctaWNvbl9fc3Ryb2tlLXdpZHRoJyxcbiAgICAgICAgdGhpcy5zdHJva2VXaWR0aC50b1N0cmluZygpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdHlsZXMgZm9yIHRoZSBpY29uLiBXZSB1c2UgdGhlIHN0eWxlIHByb3BlcnR5IHRvIHNldCB0aGUgc3R5bGVzXG4gICAqIHJhdGhlciB0aGFuIHRoZSBob3N0IGJpbmRpbmcgYXMgaXQgd29ya3Mgd2l0aCBDU1AuXG4gICAqL1xuICBwcml2YXRlIHNldEljb25TdHlsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRJY29uQ29sb3IoKTtcbiAgICB0aGlzLnNldEljb25TaXplKCk7XG4gICAgdGhpcy5zZXRJY29uU3Ryb2tlV2lkdGgoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3ZnKHN2Zzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wcmVQcm9jZXNzb3Ioc3ZnKTtcbiAgICB0aGlzLnBvc3RQcm9jZXNzb3IodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIGljb24gd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgaW5zZXJ0IGl0IGludG8gdGhlIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaWNvbiB0byBsb2FkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzZXRJY29uKG5hbWU6IEljb25UeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJvcGVydHlOYW1lID0gdG9Qcm9wZXJ0eU5hbWUobmFtZSk7XG5cbiAgICBmb3IgKGNvbnN0IGljb25zIG9mIFsuLi50aGlzLmljb25zXS5yZXZlcnNlKCkpIHtcbiAgICAgIGlmIChpY29uc1twcm9wZXJ0eU5hbWVdKSB7XG4gICAgICAgIC8vIGluc2VydCB0aGUgU1ZHIGludG8gdGhlIHRlbXBsYXRlXG4gICAgICAgIHRoaXMuc2V0U3ZnKGljb25zW3Byb3BlcnR5TmFtZV0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgYSBsb2FkZXIgZGVmaW5lZCwgdXNlIGl0IHRvIGxvYWQgdGhlIGljb25cbiAgICBpZiAodGhpcy5sb2FkZXIpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdEljb25Gcm9tTG9hZGVyKG5hbWUpO1xuXG4gICAgICAvLyBpZiB0aGUgcmVzdWx0IGlzIGEgc3RyaW5nLCBpbnNlcnQgdGhlIFNWRyBpbnRvIHRoZSB0ZW1wbGF0ZVxuICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNldFN2ZyhyZXN1bHQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlcmUgaXMgbm8gaWNvbiB3aXRoIHRoaXMgbmFtZSB3YXJuIHRoZSB1c2VyIGFzIHRoZXkgcHJvYmFibHkgZm9yZ290IHRvIGltcG9ydCBpdFxuICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICBgTm8gaWNvbiBuYW1lZCAke25hbWV9IHdhcyBmb3VuZC4gWW91IG1heSBuZWVkIHRvIGltcG9ydCBpdCB1c2luZyB0aGUgd2l0aEljb25zIGZ1bmN0aW9uLmAsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSBpY29uIGZyb20gdGhlIGxvYWRlci5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGljb24gdG8gbG9hZC5cbiAgICogQHJldHVybnMgVGhlIFNWRyBjb250ZW50IGZvciBhIGdpdmVuIGljb24gbmFtZS5cbiAgICovXG4gIHByaXZhdGUgcmVxdWVzdEljb25Gcm9tTG9hZGVyKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsIGFzeW5jICgpID0+IHtcbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIGNhY2hlLCBjaGVjayBpZiB0aGUgaWNvbiBpcyBhbHJlYWR5IGxvYWRlZCAoaS5lLCBpdCBpcyBhIHN0cmluZylcbiAgICAgICAgaWYgKHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSB0aGlzLmNhY2hlLmdldChuYW1lKTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgY2FjaGVkUmVzdWx0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmVzb2x2ZShjYWNoZWRSZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGl0IG1heSBiZSBhIHByb21pc2UsIHNvIHdlIG5lZWQgdG8gYXdhaXQgaXRcbiAgICAgICAgICBpZiAoY2FjaGVkUmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2FjaGVkUmVzdWx0O1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjb2VyY2VMb2FkZXJSZXN1bHQodGhpcy5sb2FkZXIhKG5hbWUpKTtcblxuICAgICAgICAvLyBzdG9yZSB0aGUgcHJvbWlzZSBpbiB0aGUgY2FjaGUgc28gaWYgd2UgZ2V0IHJlcGVhdGVkIGNhbGxzIChlLmcuIGluIGEgbG9vcCkgYmVmb3JlIHRoZSBsb2FkZXIgaGFzIHJlc29sdmVkXG4gICAgICAgIC8vIHRoZW4gZG9uJ3QgY2FsbCB0aGUgbG9hZGVyIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIHRoaXMuY2FjaGU/LnNldChuYW1lLCBwcm9taXNlKTtcblxuICAgICAgICAvLyBhd2FpdCB0aGUgcmVzdWx0IG9mIHRoZSBwcm9taXNlXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIGNhY2hlLCBzdG9yZSB0aGUgcmVzdWx0XG4gICAgICAgIHRoaXMuY2FjaGU/LnNldChuYW1lLCByZXN1bHQpO1xuXG4gICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
2
|
+
import { createFeature, } from './features';
|
|
3
|
+
export const NgIconPreProcessorToken = new InjectionToken('Ng Icon Pre Processor');
|
|
4
|
+
export const NgIconPostProcessorToken = new InjectionToken('Ng Icon Post Processor');
|
|
5
|
+
export function injectNgIconPreProcessor() {
|
|
6
|
+
return inject(NgIconPreProcessorToken, { optional: true }) ?? (icon => icon);
|
|
7
|
+
}
|
|
8
|
+
export function injectNgIconPostProcessor() {
|
|
9
|
+
return inject(NgIconPostProcessorToken, { optional: true }) ?? (() => { });
|
|
10
|
+
}
|
|
11
|
+
function preprocessIcon(icon) {
|
|
12
|
+
// rename all style attributes to data-style to avoid being blocked by the CSP
|
|
13
|
+
return icon.replace(/style\s*=/g, 'data-style=');
|
|
14
|
+
}
|
|
15
|
+
function postprocessIcon(element) {
|
|
16
|
+
// find all elements with a data-style attribute and get the styles from it
|
|
17
|
+
// and apply them to the element using the style property and remove the data-style attribute
|
|
18
|
+
const elements = element.querySelectorAll('[data-style]');
|
|
19
|
+
for (const element of Array.from(elements)) {
|
|
20
|
+
const styles = element.getAttribute('data-style');
|
|
21
|
+
styles?.split(';').forEach(style => {
|
|
22
|
+
const [property, value] = style.split(':');
|
|
23
|
+
element.style[property.trim()] = value.trim();
|
|
24
|
+
});
|
|
25
|
+
element.removeAttribute('data-style');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Process icons in a way that is compliant with the content security policy
|
|
30
|
+
*/
|
|
31
|
+
export function withContentSecurityPolicy() {
|
|
32
|
+
return createFeature(0 /* NgIconFeatureKind.ContentSecurityPolicyFeature */, [
|
|
33
|
+
{ provide: NgIconPreProcessorToken, useValue: preprocessIcon },
|
|
34
|
+
{ provide: NgIconPostProcessorToken, useValue: postprocessIcon },
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3Byb3ZpZGVycy9mZWF0dXJlcy9jc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLFlBQVksQ0FBQztBQUtwQixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLGNBQWMsQ0FDdkQsdUJBQXVCLENBQ3hCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLGNBQWMsQ0FDeEQsd0JBQXdCLENBQ3pCLENBQUM7QUFFRixNQUFNLFVBQVUsd0JBQXdCO0lBQ3RDLE9BQU8sTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9FLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU8sTUFBTSxDQUFDLHdCQUF3QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsSUFBWTtJQUNsQyw4RUFBOEU7SUFDOUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsT0FBb0I7SUFDM0MsMkVBQTJFO0lBQzNFLDZGQUE2RjtJQUM3RixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQWMsY0FBYyxDQUFDLENBQUM7SUFFdkUsS0FBSyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDM0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVsRCxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE9BQU8sYUFBYSx5REFBaUQ7UUFDbkUsRUFBRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtRQUM5RCxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO0tBQ2pFLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb250ZW50U2VjdXJpdHlQb2xpY3lGZWF0dXJlLFxuICBOZ0ljb25GZWF0dXJlS2luZCxcbiAgY3JlYXRlRmVhdHVyZSxcbn0gZnJvbSAnLi9mZWF0dXJlcyc7XG5cbmV4cG9ydCB0eXBlIE5nSWNvblByZVByb2Nlc3NvciA9IChpY29uOiBzdHJpbmcpID0+IHN0cmluZztcbmV4cG9ydCB0eXBlIE5nSWNvblBvc3RQcm9jZXNzb3IgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHZvaWQ7XG5cbmV4cG9ydCBjb25zdCBOZ0ljb25QcmVQcm9jZXNzb3JUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ0ljb25QcmVQcm9jZXNzb3I+KFxuICAnTmcgSWNvbiBQcmUgUHJvY2Vzc29yJyxcbik7XG5cbmV4cG9ydCBjb25zdCBOZ0ljb25Qb3N0UHJvY2Vzc29yVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TmdJY29uUG9zdFByb2Nlc3Nvcj4oXG4gICdOZyBJY29uIFBvc3QgUHJvY2Vzc29yJyxcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ0ljb25QcmVQcm9jZXNzb3IoKTogTmdJY29uUHJlUHJvY2Vzc29yIHtcbiAgcmV0dXJuIGluamVjdChOZ0ljb25QcmVQcm9jZXNzb3JUb2tlbiwgeyBvcHRpb25hbDogdHJ1ZSB9KSA/PyAoaWNvbiA9PiBpY29uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5nSWNvblBvc3RQcm9jZXNzb3IoKTogTmdJY29uUG9zdFByb2Nlc3NvciB7XG4gIHJldHVybiBpbmplY3QoTmdJY29uUG9zdFByb2Nlc3NvclRva2VuLCB7IG9wdGlvbmFsOiB0cnVlIH0pID8/ICgoKSA9PiB7fSk7XG59XG5cbmZ1bmN0aW9uIHByZXByb2Nlc3NJY29uKGljb246IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIHJlbmFtZSBhbGwgc3R5bGUgYXR0cmlidXRlcyB0byBkYXRhLXN0eWxlIHRvIGF2b2lkIGJlaW5nIGJsb2NrZWQgYnkgdGhlIENTUFxuICByZXR1cm4gaWNvbi5yZXBsYWNlKC9zdHlsZVxccyo9L2csICdkYXRhLXN0eWxlPScpO1xufVxuXG5mdW5jdGlvbiBwb3N0cHJvY2Vzc0ljb24oZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgLy8gZmluZCBhbGwgZWxlbWVudHMgd2l0aCBhIGRhdGEtc3R5bGUgYXR0cmlidXRlIGFuZCBnZXQgdGhlIHN0eWxlcyBmcm9tIGl0XG4gIC8vIGFuZCBhcHBseSB0aGVtIHRvIHRoZSBlbGVtZW50IHVzaW5nIHRoZSBzdHlsZSBwcm9wZXJ0eSBhbmQgcmVtb3ZlIHRoZSBkYXRhLXN0eWxlIGF0dHJpYnV0ZVxuICBjb25zdCBlbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJ1tkYXRhLXN0eWxlXScpO1xuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBBcnJheS5mcm9tKGVsZW1lbnRzKSkge1xuICAgIGNvbnN0IHN0eWxlcyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXN0eWxlJyk7XG5cbiAgICBzdHlsZXM/LnNwbGl0KCc7JykuZm9yRWFjaChzdHlsZSA9PiB7XG4gICAgICBjb25zdCBbcHJvcGVydHksIHZhbHVlXSA9IHN0eWxlLnNwbGl0KCc6Jyk7XG4gICAgICBlbGVtZW50LnN0eWxlW3Byb3BlcnR5LnRyaW0oKSBhcyBhbnldID0gdmFsdWUudHJpbSgpO1xuICAgIH0pO1xuXG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc3R5bGUnKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb2Nlc3MgaWNvbnMgaW4gYSB3YXkgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgY29udGVudCBzZWN1cml0eSBwb2xpY3lcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDb250ZW50U2VjdXJpdHlQb2xpY3koKTogQ29udGVudFNlY3VyaXR5UG9saWN5RmVhdHVyZSB7XG4gIHJldHVybiBjcmVhdGVGZWF0dXJlKE5nSWNvbkZlYXR1cmVLaW5kLkNvbnRlbnRTZWN1cml0eVBvbGljeUZlYXR1cmUsIFtcbiAgICB7IHByb3ZpZGU6IE5nSWNvblByZVByb2Nlc3NvclRva2VuLCB1c2VWYWx1ZTogcHJlcHJvY2Vzc0ljb24gfSxcbiAgICB7IHByb3ZpZGU6IE5nSWNvblBvc3RQcm9jZXNzb3JUb2tlbiwgdXNlVmFsdWU6IHBvc3Rwcm9jZXNzSWNvbiB9LFxuICBdKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper function to create an object that represents a feature.
|
|
3
|
+
*/
|
|
4
|
+
export function createFeature(kind, providers) {
|
|
5
|
+
return { ɵkind: kind, ɵproviders: providers };
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvcHJvdmlkZXJzL2ZlYXR1cmVzL2ZlYXR1cmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRCQTs7R0FFRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLElBQWlCLEVBQ2pCLFNBQXFCO0lBRXJCLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNoRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgQ29udGVudFNlY3VyaXR5UG9saWN5RmVhdHVyZSA9XG4gIE5nSWNvbkZlYXR1cmU8TmdJY29uRmVhdHVyZUtpbmQuQ29udGVudFNlY3VyaXR5UG9saWN5RmVhdHVyZT47XG5cbmV4cG9ydCB0eXBlIEV4Y2VwdGlvbkxvZ2dlckZlYXR1cmUgPVxuICBOZ0ljb25GZWF0dXJlPE5nSWNvbkZlYXR1cmVLaW5kLkV4Y2VwdGlvbkxvZ2dlckZlYXR1cmU+O1xuXG5leHBvcnQgdHlwZSBOZ0ljb25GZWF0dXJlcyA9XG4gIHwgQ29udGVudFNlY3VyaXR5UG9saWN5RmVhdHVyZVxuICB8IEV4Y2VwdGlvbkxvZ2dlckZlYXR1cmU7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2YgZmVhdHVyZXMgYXMgYW4gZW51bSB0byB1bmlxdWVseSB0eXBlIGVhY2ggZmVhdHVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gTmdJY29uRmVhdHVyZUtpbmQge1xuICBDb250ZW50U2VjdXJpdHlQb2xpY3lGZWF0dXJlLFxuICBFeGNlcHRpb25Mb2dnZXJGZWF0dXJlLFxufVxuXG4vKipcbiAqIEhlbHBlciB0eXBlIHRvIHJlcHJlc2VudCBhIGZlYXR1cmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdJY29uRmVhdHVyZTxGZWF0dXJlS2luZCBleHRlbmRzIE5nSWNvbkZlYXR1cmVLaW5kPiB7XG4gIMm1a2luZDogRmVhdHVyZUtpbmQ7XG4gIMm1cHJvdmlkZXJzOiBQcm92aWRlcltdO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIGZlYXR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGZWF0dXJlPEZlYXR1cmVLaW5kIGV4dGVuZHMgTmdJY29uRmVhdHVyZUtpbmQ+KFxuICBraW5kOiBGZWF0dXJlS2luZCxcbiAgcHJvdmlkZXJzOiBQcm92aWRlcltdLFxuKTogTmdJY29uRmVhdHVyZTxGZWF0dXJlS2luZD4ge1xuICByZXR1cm4geyDJtWtpbmQ6IGtpbmQsIMm1cHJvdmlkZXJzOiBwcm92aWRlcnMgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { InjectionToken, inject } from '@angular/core';
|
|
2
|
+
import { createFeature, } from './features';
|
|
3
|
+
export const LoggerToken = new InjectionToken('Ng Icon Logger');
|
|
4
|
+
/**
|
|
5
|
+
* The default logger implementation that logs to the console
|
|
6
|
+
*/
|
|
7
|
+
export class DefaultLogger {
|
|
8
|
+
log(message) {
|
|
9
|
+
console.log(message);
|
|
10
|
+
}
|
|
11
|
+
warn(message) {
|
|
12
|
+
console.warn(message);
|
|
13
|
+
}
|
|
14
|
+
error(message) {
|
|
15
|
+
console.error(message);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A logger implementation that throws an error on warnings and errors
|
|
20
|
+
*/
|
|
21
|
+
export class ExceptionLogger {
|
|
22
|
+
log(message) {
|
|
23
|
+
console.log(message);
|
|
24
|
+
}
|
|
25
|
+
warn(message) {
|
|
26
|
+
throw new Error(message);
|
|
27
|
+
}
|
|
28
|
+
error(message) {
|
|
29
|
+
throw new Error(message);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function injectLogger() {
|
|
33
|
+
return inject(LoggerToken, { optional: true }) ?? new DefaultLogger();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Throw exceptions on warnings and errors
|
|
37
|
+
*/
|
|
38
|
+
export function withExceptionLogger() {
|
|
39
|
+
return createFeature(1 /* NgIconFeatureKind.ExceptionLoggerFeature */, [
|
|
40
|
+
{ provide: LoggerToken, useClass: ExceptionLogger },
|
|
41
|
+
]);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvbGliL3Byb3ZpZGVycy9mZWF0dXJlcy9sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLFlBQVksQ0FBQztBQVFwQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQVMsZ0JBQWdCLENBQUMsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3hCLEdBQUcsQ0FBQyxPQUFlO1FBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFlO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFlO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUMxQixHQUFHLENBQUMsT0FBZTtRQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBZTtRQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBZTtRQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSxZQUFZO0lBQzFCLE9BQU8sTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxPQUFPLGFBQWEsbURBQTJDO1FBQzdELEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFO0tBQ3BELENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFeGNlcHRpb25Mb2dnZXJGZWF0dXJlLFxuICBOZ0ljb25GZWF0dXJlS2luZCxcbiAgY3JlYXRlRmVhdHVyZSxcbn0gZnJvbSAnLi9mZWF0dXJlcyc7XG5cbmludGVyZmFjZSBMb2dnZXIge1xuICBsb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZDtcbiAgd2FybihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTG9nZ2VyVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48TG9nZ2VyPignTmcgSWNvbiBMb2dnZXInKTtcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBsb2dnZXIgaW1wbGVtZW50YXRpb24gdGhhdCBsb2dzIHRvIHRoZSBjb25zb2xlXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZhdWx0TG9nZ2VyIGltcGxlbWVudHMgTG9nZ2VyIHtcbiAgbG9nKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICB9XG4gIHdhcm4obWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICB9XG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGxvZ2dlciBpbXBsZW1lbnRhdGlvbiB0aGF0IHRocm93cyBhbiBlcnJvciBvbiB3YXJuaW5ncyBhbmQgZXJyb3JzXG4gKi9cbmV4cG9ydCBjbGFzcyBFeGNlcHRpb25Mb2dnZXIgaW1wbGVtZW50cyBMb2dnZXIge1xuICBsb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2cobWVzc2FnZSk7XG4gIH1cblxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxuXG4gIGVycm9yKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0TG9nZ2VyKCk6IExvZ2dlciB7XG4gIHJldHVybiBpbmplY3QoTG9nZ2VyVG9rZW4sIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8gbmV3IERlZmF1bHRMb2dnZXIoKTtcbn1cblxuLyoqXG4gKiBUaHJvdyBleGNlcHRpb25zIG9uIHdhcm5pbmdzIGFuZCBlcnJvcnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhFeGNlcHRpb25Mb2dnZXIoKTogRXhjZXB0aW9uTG9nZ2VyRmVhdHVyZSB7XG4gIHJldHVybiBjcmVhdGVGZWF0dXJlKE5nSWNvbkZlYXR1cmVLaW5kLkV4Y2VwdGlvbkxvZ2dlckZlYXR1cmUsIFtcbiAgICB7IHByb3ZpZGU6IExvZ2dlclRva2VuLCB1c2VDbGFzczogRXhjZXB0aW9uTG9nZ2VyIH0sXG4gIF0pO1xufVxuIl19
|
|
@@ -7,11 +7,14 @@ const defaultConfig = {
|
|
|
7
7
|
* Provide the configuration for the icons
|
|
8
8
|
* @param config The configuration to use
|
|
9
9
|
*/
|
|
10
|
-
export function provideNgIconsConfig(config) {
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
export function provideNgIconsConfig(config, ...features) {
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
provide: NgIconConfigToken,
|
|
14
|
+
useValue: { ...defaultConfig, ...config },
|
|
15
|
+
},
|
|
16
|
+
features.map(feature => feature.ɵproviders),
|
|
17
|
+
];
|
|
15
18
|
}
|
|
16
19
|
/**
|
|
17
20
|
* Inject the configuration for the icons
|
|
@@ -21,4 +24,4 @@ export function provideNgIconsConfig(config) {
|
|
|
21
24
|
export function injectNgIconConfig() {
|
|
22
25
|
return inject(NgIconConfigToken, { optional: true }) ?? defaultConfig;
|
|
23
26
|
}
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi1jb25maWcucHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvcHJvdmlkZXJzL2ljb24tY29uZmlnLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBVWpFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUNqRCxnQkFBZ0IsQ0FDakIsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFpQjtJQUNsQyxJQUFJLEVBQUUsS0FBSztDQUNaLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE1BQTZCLEVBQzdCLEdBQUcsUUFBMEI7SUFFN0IsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixRQUFRLEVBQUUsRUFBRSxHQUFHLGFBQWEsRUFBRSxHQUFHLE1BQU0sRUFBRTtTQUMxQztRQUNELFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO0tBQzVDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUM7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBQcm92aWRlciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0ljb25GZWF0dXJlcyB9IGZyb20gJy4vZmVhdHVyZXMvZmVhdHVyZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5nSWNvbkNvbmZpZyB7XG4gIC8qKiBEZWZpbmUgdGhlIGRlZmF1bHQgc2l6ZSBvZiBpY29ucyAqL1xuICBzaXplOiBzdHJpbmc7XG4gIC8qKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29sb3Igb2YgaWNvbnMgKi9cbiAgY29sb3I/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBOZ0ljb25Db25maWdUb2tlbiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ0ljb25Db25maWc+KFxuICAnTmcgSWNvbiBDb25maWcnLFxuKTtcblxuY29uc3QgZGVmYXVsdENvbmZpZzogTmdJY29uQ29uZmlnID0ge1xuICBzaXplOiAnMWVtJyxcbn07XG5cbi8qKlxuICogUHJvdmlkZSB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGljb25zXG4gKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIHRvIHVzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZU5nSWNvbnNDb25maWcoXG4gIGNvbmZpZzogUGFydGlhbDxOZ0ljb25Db25maWc+LFxuICAuLi5mZWF0dXJlczogTmdJY29uRmVhdHVyZXNbXVxuKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTmdJY29uQ29uZmlnVG9rZW4sXG4gICAgICB1c2VWYWx1ZTogeyAuLi5kZWZhdWx0Q29uZmlnLCAuLi5jb25maWcgfSxcbiAgICB9LFxuICAgIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IGZlYXR1cmUuybVwcm92aWRlcnMpLFxuICBdO1xufVxuXG4vKipcbiAqIEluamVjdCB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIGljb25zXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiB0byB1c2VcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0TmdJY29uQ29uZmlnKCk6IE5nSWNvbkNvbmZpZyB7XG4gIHJldHVybiBpbmplY3QoTmdJY29uQ29uZmlnVG9rZW4sIHsgb3B0aW9uYWw6IHRydWUgfSkgPz8gZGVmYXVsdENvbmZpZztcbn1cbiJdfQ==
|
|
@@ -154,6 +154,48 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
|
|
|
154
154
|
args: ['style.font-variation-settings']
|
|
155
155
|
}] } });
|
|
156
156
|
|
|
157
|
+
/**
|
|
158
|
+
* Helper function to create an object that represents a feature.
|
|
159
|
+
*/
|
|
160
|
+
function createFeature(kind, providers) {
|
|
161
|
+
return { ɵkind: kind, ɵproviders: providers };
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const NgIconPreProcessorToken = new InjectionToken('Ng Icon Pre Processor');
|
|
165
|
+
const NgIconPostProcessorToken = new InjectionToken('Ng Icon Post Processor');
|
|
166
|
+
function injectNgIconPreProcessor() {
|
|
167
|
+
return inject(NgIconPreProcessorToken, { optional: true }) ?? (icon => icon);
|
|
168
|
+
}
|
|
169
|
+
function injectNgIconPostProcessor() {
|
|
170
|
+
return inject(NgIconPostProcessorToken, { optional: true }) ?? (() => { });
|
|
171
|
+
}
|
|
172
|
+
function preprocessIcon(icon) {
|
|
173
|
+
// rename all style attributes to data-style to avoid being blocked by the CSP
|
|
174
|
+
return icon.replace(/style\s*=/g, 'data-style=');
|
|
175
|
+
}
|
|
176
|
+
function postprocessIcon(element) {
|
|
177
|
+
// find all elements with a data-style attribute and get the styles from it
|
|
178
|
+
// and apply them to the element using the style property and remove the data-style attribute
|
|
179
|
+
const elements = element.querySelectorAll('[data-style]');
|
|
180
|
+
for (const element of Array.from(elements)) {
|
|
181
|
+
const styles = element.getAttribute('data-style');
|
|
182
|
+
styles?.split(';').forEach(style => {
|
|
183
|
+
const [property, value] = style.split(':');
|
|
184
|
+
element.style[property.trim()] = value.trim();
|
|
185
|
+
});
|
|
186
|
+
element.removeAttribute('data-style');
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Process icons in a way that is compliant with the content security policy
|
|
191
|
+
*/
|
|
192
|
+
function withContentSecurityPolicy() {
|
|
193
|
+
return createFeature(0 /* NgIconFeatureKind.ContentSecurityPolicyFeature */, [
|
|
194
|
+
{ provide: NgIconPreProcessorToken, useValue: preprocessIcon },
|
|
195
|
+
{ provide: NgIconPostProcessorToken, useValue: postprocessIcon },
|
|
196
|
+
]);
|
|
197
|
+
}
|
|
198
|
+
|
|
157
199
|
const NgIconConfigToken = new InjectionToken('Ng Icon Config');
|
|
158
200
|
const defaultConfig = {
|
|
159
201
|
size: '1em',
|
|
@@ -162,11 +204,14 @@ const defaultConfig = {
|
|
|
162
204
|
* Provide the configuration for the icons
|
|
163
205
|
* @param config The configuration to use
|
|
164
206
|
*/
|
|
165
|
-
function provideNgIconsConfig(config) {
|
|
166
|
-
return
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
207
|
+
function provideNgIconsConfig(config, ...features) {
|
|
208
|
+
return [
|
|
209
|
+
{
|
|
210
|
+
provide: NgIconConfigToken,
|
|
211
|
+
useValue: { ...defaultConfig, ...config },
|
|
212
|
+
},
|
|
213
|
+
features.map(feature => feature.ɵproviders),
|
|
214
|
+
];
|
|
170
215
|
}
|
|
171
216
|
/**
|
|
172
217
|
* Inject the configuration for the icons
|
|
@@ -269,6 +314,47 @@ function toPropertyName(str) {
|
|
|
269
314
|
.replace(/^([A-Z])/, m => m.toLowerCase());
|
|
270
315
|
}
|
|
271
316
|
|
|
317
|
+
const LoggerToken = new InjectionToken('Ng Icon Logger');
|
|
318
|
+
/**
|
|
319
|
+
* The default logger implementation that logs to the console
|
|
320
|
+
*/
|
|
321
|
+
class DefaultLogger {
|
|
322
|
+
log(message) {
|
|
323
|
+
console.log(message);
|
|
324
|
+
}
|
|
325
|
+
warn(message) {
|
|
326
|
+
console.warn(message);
|
|
327
|
+
}
|
|
328
|
+
error(message) {
|
|
329
|
+
console.error(message);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* A logger implementation that throws an error on warnings and errors
|
|
334
|
+
*/
|
|
335
|
+
class ExceptionLogger {
|
|
336
|
+
log(message) {
|
|
337
|
+
console.log(message);
|
|
338
|
+
}
|
|
339
|
+
warn(message) {
|
|
340
|
+
throw new Error(message);
|
|
341
|
+
}
|
|
342
|
+
error(message) {
|
|
343
|
+
throw new Error(message);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
function injectLogger() {
|
|
347
|
+
return inject(LoggerToken, { optional: true }) ?? new DefaultLogger();
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Throw exceptions on warnings and errors
|
|
351
|
+
*/
|
|
352
|
+
function withExceptionLogger() {
|
|
353
|
+
return createFeature(1 /* NgIconFeatureKind.ExceptionLoggerFeature */, [
|
|
354
|
+
{ provide: LoggerToken, useClass: ExceptionLogger },
|
|
355
|
+
]);
|
|
356
|
+
}
|
|
357
|
+
|
|
272
358
|
class NgIcon {
|
|
273
359
|
constructor() {
|
|
274
360
|
/** Access the global icon config */
|
|
@@ -279,10 +365,16 @@ class NgIcon {
|
|
|
279
365
|
this.loader = injectNgIconLoader();
|
|
280
366
|
/** Access the icon cache if defined */
|
|
281
367
|
this.cache = injectNgIconLoaderCache();
|
|
368
|
+
/** Access the pre-processor */
|
|
369
|
+
this.preProcessor = injectNgIconPreProcessor();
|
|
370
|
+
/** Access the post-processor */
|
|
371
|
+
this.postProcessor = injectNgIconPostProcessor();
|
|
282
372
|
/** Access the injector */
|
|
283
373
|
this.injector = inject(Injector);
|
|
284
374
|
/** Access the element ref */
|
|
285
375
|
this.elementRef = inject(ElementRef);
|
|
376
|
+
/** Access the logger */
|
|
377
|
+
this.logger = injectLogger();
|
|
286
378
|
/** Define the size of the icon */
|
|
287
379
|
this.size = this.config.size;
|
|
288
380
|
/** Define the color of the icon */
|
|
@@ -294,7 +386,7 @@ class NgIcon {
|
|
|
294
386
|
}
|
|
295
387
|
/** Define the svg of the icon to display */
|
|
296
388
|
set svg(svg) {
|
|
297
|
-
this.
|
|
389
|
+
this.setSvg(svg);
|
|
298
390
|
}
|
|
299
391
|
ngOnChanges(changes) {
|
|
300
392
|
if (changes.size) {
|
|
@@ -337,6 +429,10 @@ class NgIcon {
|
|
|
337
429
|
this.setIconSize();
|
|
338
430
|
this.setIconStrokeWidth();
|
|
339
431
|
}
|
|
432
|
+
setSvg(svg) {
|
|
433
|
+
this.elementRef.nativeElement.innerHTML = this.preProcessor(svg);
|
|
434
|
+
this.postProcessor(this.elementRef.nativeElement);
|
|
435
|
+
}
|
|
340
436
|
/**
|
|
341
437
|
* Load the icon with the given name and insert it into the template.
|
|
342
438
|
* @param name The name of the icon to load.
|
|
@@ -346,7 +442,7 @@ class NgIcon {
|
|
|
346
442
|
for (const icons of [...this.icons].reverse()) {
|
|
347
443
|
if (icons[propertyName]) {
|
|
348
444
|
// insert the SVG into the template
|
|
349
|
-
this.
|
|
445
|
+
this.setSvg(icons[propertyName]);
|
|
350
446
|
return;
|
|
351
447
|
}
|
|
352
448
|
}
|
|
@@ -355,12 +451,12 @@ class NgIcon {
|
|
|
355
451
|
const result = await this.requestIconFromLoader(name);
|
|
356
452
|
// if the result is a string, insert the SVG into the template
|
|
357
453
|
if (result !== null) {
|
|
358
|
-
this.
|
|
454
|
+
this.setSvg(result);
|
|
359
455
|
return;
|
|
360
456
|
}
|
|
361
457
|
}
|
|
362
458
|
// if there is no icon with this name warn the user as they probably forgot to import it
|
|
363
|
-
|
|
459
|
+
this.logger.warn(`No icon named ${name} was found. You may need to import it using the withIcons function.`);
|
|
364
460
|
}
|
|
365
461
|
/**
|
|
366
462
|
* Request the icon from the loader.
|
|
@@ -449,5 +545,5 @@ const NG_ICON_DIRECTIVES = [NgIcon];
|
|
|
449
545
|
* Generated bundle index. Do not edit.
|
|
450
546
|
*/
|
|
451
547
|
|
|
452
|
-
export { NG_ICON_DIRECTIVES, NgGlyph, NgGlyphConfigToken, NgIcon, NgIconCacheToken, NgIcon as NgIconComponent, NgIconConfigToken, NgIconLoaderToken, NgIconsModule, NgIconsToken, injectNgGlyphsConfig, injectNgIconConfig, injectNgIconLoader, injectNgIconLoaderCache, injectNgIcons, provideIcons, provideNgGlyphs, provideNgGlyphsConfig, provideNgIconLoader, provideNgIconsConfig, withCaching };
|
|
548
|
+
export { NG_ICON_DIRECTIVES, NgGlyph, NgGlyphConfigToken, NgIcon, NgIconCacheToken, NgIcon as NgIconComponent, NgIconConfigToken, NgIconLoaderToken, NgIconsModule, NgIconsToken, injectNgGlyphsConfig, injectNgIconConfig, injectNgIconLoader, injectNgIconLoaderCache, injectNgIcons, provideIcons, provideNgGlyphs, provideNgGlyphsConfig, provideNgIconLoader, provideNgIconsConfig, withCaching, withContentSecurityPolicy, withExceptionLogger };
|
|
453
549
|
//# sourceMappingURL=ng-icons-core.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-icons-core.mjs","sources":["../../../../packages/core/src/lib/providers/glyph-config.provider.ts","../../../../packages/core/src/lib/providers/glyph.provider.ts","../../../../packages/core/src/lib/utils/coercion.ts","../../../../packages/core/src/lib/components/glyph/glyph.component.ts","../../../../packages/core/src/lib/providers/icon-config.provider.ts","../../../../packages/core/src/lib/providers/icon-loader.provider.ts","../../../../packages/core/src/lib/providers/icon.provider.ts","../../../../packages/core/src/lib/utils/async.ts","../../../../packages/core/src/lib/utils/format.ts","../../../../packages/core/src/lib/components/icon/icon.component.ts","../../../../packages/core/src/lib/icon.module.ts","../../../../packages/core/src/ng-icons-core.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\n\nexport interface NgGlyphConfig {\n /** Define the default size of glyph */\n size: string | number;\n /** Define the optical size of the glyph */\n opticalSize?: number;\n /** Define the default color of glyph */\n color?: string;\n /** Define the default weight of glyph */\n weight?: number;\n /** Define the default grade of glyph */\n grade?: number;\n /** Define the default fill of glyph */\n fill?: boolean;\n}\n\nexport const NgGlyphConfigToken = new InjectionToken<Required<NgGlyphConfig>>(\n 'Ng Glyph Config',\n);\n\nconst defaultConfig: NgGlyphConfig = {\n size: '1em',\n opticalSize: 20,\n weight: 400,\n grade: 0,\n fill: false,\n};\n\n/**\n * Provide the configuration for the glyph\n * @param config The configuration to use\n */\nexport function provideNgGlyphsConfig(\n config: Partial<NgGlyphConfig>,\n): Provider {\n return {\n provide: NgGlyphConfigToken,\n useValue: { ...defaultConfig, ...config },\n };\n}\n\n/**\n * Inject the configuration for the glyphs\n * @returns The configuration to use\n * @internal\n */\nexport function injectNgGlyphsConfig(): Required<NgGlyphConfig> {\n return (inject(NgGlyphConfigToken, { optional: true }) ??\n defaultConfig) as Required<NgGlyphConfig>;\n}\n","import {\n EnvironmentProviders,\n InjectionToken,\n inject,\n makeEnvironmentProviders,\n} from '@angular/core';\n\nexport const NgGlyphsToken = new InjectionToken<NgGlyphs>('NgGlyphsToken');\n\nexport function provideNgGlyphs(\n ...glyphsets: NgGlyphset[]\n): EnvironmentProviders {\n // if there are no glyphsets, throw an error\n if (!glyphsets.length) {\n throw new Error('Please provide at least one glyphset.');\n }\n\n // the default glyphset is the first one\n const defaultGlyphset = glyphsets[0].name;\n\n return makeEnvironmentProviders([\n { provide: NgGlyphsToken, useValue: { defaultGlyphset, glyphsets } },\n ]);\n}\n\nexport function injectNgGlyphs(): NgGlyphs {\n const glyphs = inject(NgGlyphsToken, { optional: true });\n\n if (!glyphs) {\n throw new Error(\n 'Please provide the glyphs using the provideNgGlyphs() function.',\n );\n }\n\n return glyphs;\n}\n\nexport interface NgGlyphset {\n name: string;\n baseClass: string;\n}\n\nexport interface NgGlyphs {\n defaultGlyphset: string;\n glyphsets: NgGlyphset[];\n}\n","export function coerceCssPixelValue(value: string): string {\n return value == null ? '' : /^\\d+$/.test(value) ? `${value}px` : value;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n booleanAttribute,\n numberAttribute,\n} from '@angular/core';\nimport { injectNgGlyphsConfig } from '../../providers/glyph-config.provider';\nimport { injectNgGlyphs } from '../../providers/glyph.provider';\nimport { coerceCssPixelValue } from '../../utils/coercion';\n\n@Component({\n selector: 'ng-glyph',\n standalone: true,\n template: ``,\n styleUrl: './glyph.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgGlyph {\n /**\n * Access the available glyphsets\n */\n private readonly glyphsets = injectNgGlyphs();\n\n /**\n * Access the default configuration\n */\n private readonly config = injectNgGlyphsConfig();\n\n /**\n * Define the name of the glyph to display\n */\n @HostBinding('textContent')\n @Input({ required: true })\n name!: string;\n\n /**\n * Define the glyphset to use\n */\n @Input()\n glyphset: string = this.glyphsets.defaultGlyphset;\n\n /**\n * Define the optical size of the glyph\n */\n @Input({ transform: numberAttribute }) opticalSize: number =\n this.config.opticalSize;\n\n /**\n * Define the weight of the glyph\n */\n @Input({ transform: numberAttribute }) weight: number = this.config.weight;\n\n /**\n * Define the grade of the glyph\n */\n @Input({ transform: numberAttribute }) grade: number = this.config.grade;\n\n /**\n * Define the fill of the glyph\n */\n @Input({ transform: booleanAttribute }) fill: boolean = this.config.fill;\n\n /**\n * Define the size of the glyph\n */\n @HostBinding('style.--ng-glyph__size')\n @Input({ transform: coerceCssPixelValue })\n size?: string | number = this.config.size;\n\n /**\n * Define the color of the glyph\n */\n @HostBinding('style.color')\n @Input()\n color?: string = this.config.color;\n\n /**\n * Derive the glyphset class from the glyphset name\n */\n @HostBinding('class')\n get glyphsetClass(): string {\n const glyphset = this.glyphsets.glyphsets.find(\n glyphset => glyphset.name === this.glyphset,\n );\n\n if (!glyphset) {\n throw new Error(\n `The glyphset \"${this.glyphset}\" does not exist. Please provide a valid glyphset.`,\n );\n }\n\n return glyphset.baseClass;\n }\n\n /**\n * Define the font variation settings of the glyph\n */\n @HostBinding('style.font-variation-settings')\n get fontVariationSettings(): string {\n return `'FILL' ${this.fill ? 1 : 0}, 'wght' ${this.weight}, 'GRAD' ${\n this.grade\n }, 'opsz' ${this.opticalSize}`;\n }\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\n\nexport interface NgIconConfig {\n /** Define the default size of icons */\n size: string;\n /** Define the default color of icons */\n color?: string;\n}\n\nexport const NgIconConfigToken = new InjectionToken<NgIconConfig>(\n 'Ng Icon Config',\n);\n\nconst defaultConfig: NgIconConfig = {\n size: '1em',\n};\n\n/**\n * Provide the configuration for the icons\n * @param config The configuration to use\n */\nexport function provideNgIconsConfig(config: Partial<NgIconConfig>): Provider {\n return {\n provide: NgIconConfigToken,\n useValue: { ...defaultConfig, ...config },\n };\n}\n\n/**\n * Inject the configuration for the icons\n * @returns The configuration to use\n * @internal\n */\nexport function injectNgIconConfig(): NgIconConfig {\n return inject(NgIconConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import { inject, InjectionToken, Provider } from '@angular/core';\nimport type { Observable } from 'rxjs';\n\nexport type NgIconLoader = (\n name: string,\n) => Promise<string> | Observable<string> | string;\n\nexport const NgIconLoaderToken = new InjectionToken<NgIconLoader>(\n 'Ng Icon Loader Token',\n);\n\n/**\n * The list of features as an enum to uniquely type each feature.\n */\nconst enum NgIconLoaderFeatureKind {\n CachingFeature,\n}\n\ninterface NgIconLoaderFeature<FeatureKind extends NgIconLoaderFeatureKind> {\n kind: FeatureKind;\n providers: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Loader feature.\n */\nfunction loaderFeature<FeatureKind extends NgIconLoaderFeatureKind>(\n kind: FeatureKind,\n providers: Provider[],\n): NgIconLoaderFeature<FeatureKind> {\n return { kind: kind, providers: providers };\n}\n\ntype CachingFeature =\n NgIconLoaderFeature<NgIconLoaderFeatureKind.CachingFeature>;\n\ntype NgIconLoaderFeatures = CachingFeature;\n\nexport type NgIconLoaderCache = Map<string, string | Promise<string>>;\n\nexport const NgIconCacheToken = new InjectionToken<NgIconLoaderCache>(\n 'Ng Icon Cache Token',\n);\n\n/**\n * Add caching to the loader. This will prevent the loader from being called multiple times for the same icon name.\n */\nexport function withCaching(): CachingFeature {\n return loaderFeature(NgIconLoaderFeatureKind.CachingFeature, [\n { provide: NgIconCacheToken, useValue: new Map<string, string>() },\n ]);\n}\n\n/**\n * Provide a function that will return the SVG content for a given icon name.\n * @param loader The function that will return the SVG content for a given icon name.\n * @param features The list of features to apply to the loader.\n * @returns The SVG content for a given icon name.\n */\nexport function provideNgIconLoader(\n loader: NgIconLoader,\n ...features: NgIconLoaderFeatures[]\n) {\n return [\n { provide: NgIconLoaderToken, useValue: loader },\n features.map(feature => feature.providers),\n ];\n}\n\n/**\n * Inject the function that will return the SVG content for a given icon name.\n */\nexport function injectNgIconLoader(): NgIconLoader | null {\n return inject(NgIconLoaderToken, { optional: true });\n}\n\n/**\n * Inject the cache that will store the SVG content for a given icon name.\n */\nexport function injectNgIconLoaderCache(): NgIconLoaderCache | null {\n return inject(NgIconCacheToken, { optional: true });\n}\n","import {\n InjectionToken,\n Optional,\n Provider,\n SkipSelf,\n inject,\n} from '@angular/core';\n\n/**\n * Define the icons to use\n * @param icons The icons to provide\n */\nexport function provideIcons(icons: Record<string, string>): Provider[] {\n return [\n {\n provide: NgIconsToken,\n useFactory: (parentIcons?: Record<string, string>[]) => ({\n ...parentIcons?.reduce((acc, icons) => ({ ...acc, ...icons }), {}),\n ...icons,\n }),\n deps: [[NgIconsToken, new Optional(), new SkipSelf()]],\n multi: true,\n },\n ];\n}\n\nexport const NgIconsToken = new InjectionToken<Record<string, string>[]>(\n 'Icons Token',\n);\n\n/**\n * Inject the icons to use\n * @returns The icons to use\n * @internal\n */\nexport function injectNgIcons(): Record<string, string>[] {\n return inject(NgIconsToken, { optional: true }) ?? [];\n}\n","import { Observable, firstValueFrom, isObservable } from 'rxjs';\n\n/**\n * A loader may return a promise, an observable or a string. This function will coerce the result into a promise.\n * @returns\n */\nexport function coerceLoaderResult(\n result: Promise<string> | Observable<string> | string,\n): Promise<string> {\n if (typeof result === 'string') {\n return Promise.resolve(result);\n }\n\n if (isObservable(result)) {\n return firstValueFrom(result);\n }\n\n return result;\n}\n","/**\n * Hyphenated to lowerCamelCase\n */\nexport function toPropertyName(str: string): string {\n return str\n .replace(/([^a-zA-Z0-9])+(.)?/g, (_, __, chr) =>\n chr ? chr.toUpperCase() : '',\n )\n .replace(/[^a-zA-Z\\d]/g, '')\n .replace(/^([A-Z])/, m => m.toLowerCase());\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n Injector,\n Input,\n OnChanges,\n OnInit,\n runInInjectionContext,\n SimpleChanges,\n} from '@angular/core';\nimport type { IconName } from '../../components/icon/icon-name';\nimport { injectNgIconConfig } from '../../providers/icon-config.provider';\nimport {\n injectNgIconLoader,\n injectNgIconLoaderCache,\n} from '../../providers/icon-loader.provider';\nimport { injectNgIcons } from '../../providers/icon.provider';\nimport { coerceLoaderResult } from '../../utils/async';\nimport { coerceCssPixelValue } from '../../utils/coercion';\nimport { toPropertyName } from '../../utils/format';\n\n// This is a typescript type to prevent inference from collapsing the union type to a string to improve type safety\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type IconType = IconName | (string & {});\n\n@Component({\n selector: 'ng-icon',\n template: '',\n standalone: true,\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgIcon implements OnInit, OnChanges {\n /** Access the global icon config */\n private readonly config = injectNgIconConfig();\n\n /** Access the icons */\n private readonly icons = injectNgIcons();\n\n /** Access the icon loader if defined */\n private readonly loader = injectNgIconLoader();\n\n /** Access the icon cache if defined */\n private readonly cache = injectNgIconLoaderCache();\n\n /** Access the injector */\n private readonly injector = inject(Injector);\n\n /** Access the element ref */\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Define the name of the icon to display */\n @Input() set name(name: IconType) {\n this.setIcon(name);\n }\n\n /** Define the svg of the icon to display */\n @Input() set svg(svg: string) {\n this.elementRef.nativeElement.innerHTML = svg;\n }\n\n /** Define the size of the icon */\n @Input({ transform: coerceCssPixelValue })\n size?: string | number = this.config.size;\n\n /** Define the stroke-width of the icon */\n @Input()\n strokeWidth?: string | number;\n\n /** Define the color of the icon */\n @Input()\n color?: string = this.config.color;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.size) {\n this.setIconSize();\n }\n if (changes.color) {\n this.setIconColor();\n }\n if (changes.strokeWidth) {\n this.setIconStrokeWidth();\n }\n }\n\n ngOnInit(): void {\n this.setIconStyles();\n }\n\n private setIconColor(): void {\n this.elementRef.nativeElement.style.removeProperty('color');\n\n if (this.color !== undefined) {\n this.elementRef.nativeElement.style.setProperty('color', this.color);\n }\n }\n\n private setIconSize(): void {\n this.elementRef.nativeElement.style.removeProperty('--ng-icon__size');\n\n if (this.size !== undefined) {\n this.elementRef.nativeElement.style.setProperty(\n '--ng-icon__size',\n this.size.toString(),\n );\n }\n }\n\n private setIconStrokeWidth(): void {\n this.elementRef.nativeElement.style.removeProperty(\n '--ng-icon__stroke-width',\n );\n if (this.strokeWidth !== undefined) {\n this.elementRef.nativeElement.style.setProperty(\n '--ng-icon__stroke-width',\n this.strokeWidth.toString(),\n );\n }\n }\n\n /**\n * Set the styles for the icon. We use the style property to set the styles\n * rather than the host binding as it works with CSP.\n */\n private setIconStyles(): void {\n this.setIconColor();\n this.setIconSize();\n this.setIconStrokeWidth();\n }\n\n /**\n * Load the icon with the given name and insert it into the template.\n * @param name The name of the icon to load.\n */\n private async setIcon(name: IconType): Promise<void> {\n const propertyName = toPropertyName(name);\n\n for (const icons of [...this.icons].reverse()) {\n if (icons[propertyName]) {\n // insert the SVG into the template\n this.elementRef.nativeElement.innerHTML = icons[propertyName];\n return;\n }\n }\n\n // if there is a loader defined, use it to load the icon\n if (this.loader) {\n const result = await this.requestIconFromLoader(name);\n\n // if the result is a string, insert the SVG into the template\n if (result !== null) {\n this.elementRef.nativeElement.innerHTML = result;\n return;\n }\n }\n\n // if there is no icon with this name warn the user as they probably forgot to import it\n console.warn(\n `No icon named ${name} was found. You may need to import it using the withIcons function.`,\n );\n }\n\n /**\n * Request the icon from the loader.\n * @param name The name of the icon to load.\n * @returns The SVG content for a given icon name.\n */\n private requestIconFromLoader(name: string): Promise<string> {\n return new Promise(resolve => {\n runInInjectionContext(this.injector, async () => {\n // if we have a cache, check if the icon is already loaded (i.e, it is a string)\n if (this.cache) {\n const cachedResult = this.cache.get(name);\n\n if (typeof cachedResult === 'string') {\n resolve(cachedResult);\n return;\n }\n\n // it may be a promise, so we need to await it\n if (cachedResult instanceof Promise) {\n const result = await cachedResult;\n resolve(result);\n return;\n }\n }\n\n const promise = coerceLoaderResult(this.loader!(name));\n\n // store the promise in the cache so if we get repeated calls (e.g. in a loop) before the loader has resolved\n // then don't call the loader function multiple times\n this.cache?.set(name, promise);\n\n // await the result of the promise\n const result = await promise;\n\n // if we have a cache, store the result\n this.cache?.set(name, result);\n\n resolve(result);\n });\n });\n }\n}\n","import { Inject, ModuleWithProviders, NgModule } from '@angular/core';\nimport { NgIcon } from './components/icon/icon.component';\nimport { NgIconsToken, provideIcons } from './providers/icon.provider';\n\n@NgModule({\n imports: [NgIcon],\n exports: [NgIcon],\n})\nexport class NgIconsModule {\n constructor(@Inject(NgIconsToken) icons: Record<string, string>) {\n if (Object.keys(icons).length === 0) {\n throw new Error(\n 'No icons have been provided. Ensure to include some icons by importing them using NgIconsModule.withIcons({ ... }).',\n );\n }\n }\n\n /**\n * Define the icons that will be included in the application. This allows unused icons to\n * be tree-shaken away to reduce bundle size\n * @param icons The object containing the required icons\n */\n static withIcons(\n icons: Record<string, string>,\n ): ModuleWithProviders<NgIconsModule> {\n return { ngModule: NgIconsModule, providers: provideIcons(icons) };\n }\n}\n\nexport const NG_ICON_DIRECTIVES = [NgIcon] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultConfig"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-icons-core.mjs","sources":["../../../../packages/core/src/lib/providers/glyph-config.provider.ts","../../../../packages/core/src/lib/providers/glyph.provider.ts","../../../../packages/core/src/lib/utils/coercion.ts","../../../../packages/core/src/lib/components/glyph/glyph.component.ts","../../../../packages/core/src/lib/providers/features/features.ts","../../../../packages/core/src/lib/providers/features/csp.ts","../../../../packages/core/src/lib/providers/icon-config.provider.ts","../../../../packages/core/src/lib/providers/icon-loader.provider.ts","../../../../packages/core/src/lib/providers/icon.provider.ts","../../../../packages/core/src/lib/utils/async.ts","../../../../packages/core/src/lib/utils/format.ts","../../../../packages/core/src/lib/providers/features/logger.ts","../../../../packages/core/src/lib/components/icon/icon.component.ts","../../../../packages/core/src/lib/icon.module.ts","../../../../packages/core/src/ng-icons-core.ts"],"sourcesContent":["import { InjectionToken, Provider, inject } from '@angular/core';\n\nexport interface NgGlyphConfig {\n /** Define the default size of glyph */\n size: string | number;\n /** Define the optical size of the glyph */\n opticalSize?: number;\n /** Define the default color of glyph */\n color?: string;\n /** Define the default weight of glyph */\n weight?: number;\n /** Define the default grade of glyph */\n grade?: number;\n /** Define the default fill of glyph */\n fill?: boolean;\n}\n\nexport const NgGlyphConfigToken = new InjectionToken<Required<NgGlyphConfig>>(\n 'Ng Glyph Config',\n);\n\nconst defaultConfig: NgGlyphConfig = {\n size: '1em',\n opticalSize: 20,\n weight: 400,\n grade: 0,\n fill: false,\n};\n\n/**\n * Provide the configuration for the glyph\n * @param config The configuration to use\n */\nexport function provideNgGlyphsConfig(\n config: Partial<NgGlyphConfig>,\n): Provider {\n return {\n provide: NgGlyphConfigToken,\n useValue: { ...defaultConfig, ...config },\n };\n}\n\n/**\n * Inject the configuration for the glyphs\n * @returns The configuration to use\n * @internal\n */\nexport function injectNgGlyphsConfig(): Required<NgGlyphConfig> {\n return (inject(NgGlyphConfigToken, { optional: true }) ??\n defaultConfig) as Required<NgGlyphConfig>;\n}\n","import {\n EnvironmentProviders,\n InjectionToken,\n inject,\n makeEnvironmentProviders,\n} from '@angular/core';\n\nexport const NgGlyphsToken = new InjectionToken<NgGlyphs>('NgGlyphsToken');\n\nexport function provideNgGlyphs(\n ...glyphsets: NgGlyphset[]\n): EnvironmentProviders {\n // if there are no glyphsets, throw an error\n if (!glyphsets.length) {\n throw new Error('Please provide at least one glyphset.');\n }\n\n // the default glyphset is the first one\n const defaultGlyphset = glyphsets[0].name;\n\n return makeEnvironmentProviders([\n { provide: NgGlyphsToken, useValue: { defaultGlyphset, glyphsets } },\n ]);\n}\n\nexport function injectNgGlyphs(): NgGlyphs {\n const glyphs = inject(NgGlyphsToken, { optional: true });\n\n if (!glyphs) {\n throw new Error(\n 'Please provide the glyphs using the provideNgGlyphs() function.',\n );\n }\n\n return glyphs;\n}\n\nexport interface NgGlyphset {\n name: string;\n baseClass: string;\n}\n\nexport interface NgGlyphs {\n defaultGlyphset: string;\n glyphsets: NgGlyphset[];\n}\n","export function coerceCssPixelValue(value: string): string {\n return value == null ? '' : /^\\d+$/.test(value) ? `${value}px` : value;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n HostBinding,\n Input,\n booleanAttribute,\n numberAttribute,\n} from '@angular/core';\nimport { injectNgGlyphsConfig } from '../../providers/glyph-config.provider';\nimport { injectNgGlyphs } from '../../providers/glyph.provider';\nimport { coerceCssPixelValue } from '../../utils/coercion';\n\n@Component({\n selector: 'ng-glyph',\n standalone: true,\n template: ``,\n styleUrl: './glyph.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgGlyph {\n /**\n * Access the available glyphsets\n */\n private readonly glyphsets = injectNgGlyphs();\n\n /**\n * Access the default configuration\n */\n private readonly config = injectNgGlyphsConfig();\n\n /**\n * Define the name of the glyph to display\n */\n @HostBinding('textContent')\n @Input({ required: true })\n name!: string;\n\n /**\n * Define the glyphset to use\n */\n @Input()\n glyphset: string = this.glyphsets.defaultGlyphset;\n\n /**\n * Define the optical size of the glyph\n */\n @Input({ transform: numberAttribute }) opticalSize: number =\n this.config.opticalSize;\n\n /**\n * Define the weight of the glyph\n */\n @Input({ transform: numberAttribute }) weight: number = this.config.weight;\n\n /**\n * Define the grade of the glyph\n */\n @Input({ transform: numberAttribute }) grade: number = this.config.grade;\n\n /**\n * Define the fill of the glyph\n */\n @Input({ transform: booleanAttribute }) fill: boolean = this.config.fill;\n\n /**\n * Define the size of the glyph\n */\n @HostBinding('style.--ng-glyph__size')\n @Input({ transform: coerceCssPixelValue })\n size?: string | number = this.config.size;\n\n /**\n * Define the color of the glyph\n */\n @HostBinding('style.color')\n @Input()\n color?: string = this.config.color;\n\n /**\n * Derive the glyphset class from the glyphset name\n */\n @HostBinding('class')\n get glyphsetClass(): string {\n const glyphset = this.glyphsets.glyphsets.find(\n glyphset => glyphset.name === this.glyphset,\n );\n\n if (!glyphset) {\n throw new Error(\n `The glyphset \"${this.glyphset}\" does not exist. Please provide a valid glyphset.`,\n );\n }\n\n return glyphset.baseClass;\n }\n\n /**\n * Define the font variation settings of the glyph\n */\n @HostBinding('style.font-variation-settings')\n get fontVariationSettings(): string {\n return `'FILL' ${this.fill ? 1 : 0}, 'wght' ${this.weight}, 'GRAD' ${\n this.grade\n }, 'opsz' ${this.opticalSize}`;\n }\n}\n","import { Provider } from '@angular/core';\n\nexport type ContentSecurityPolicyFeature =\n NgIconFeature<NgIconFeatureKind.ContentSecurityPolicyFeature>;\n\nexport type ExceptionLoggerFeature =\n NgIconFeature<NgIconFeatureKind.ExceptionLoggerFeature>;\n\nexport type NgIconFeatures =\n | ContentSecurityPolicyFeature\n | ExceptionLoggerFeature;\n\n/**\n * The list of features as an enum to uniquely type each feature.\n */\nexport const enum NgIconFeatureKind {\n ContentSecurityPolicyFeature,\n ExceptionLoggerFeature,\n}\n\n/**\n * Helper type to represent a feature.\n */\nexport interface NgIconFeature<FeatureKind extends NgIconFeatureKind> {\n ɵkind: FeatureKind;\n ɵproviders: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a feature.\n */\nexport function createFeature<FeatureKind extends NgIconFeatureKind>(\n kind: FeatureKind,\n providers: Provider[],\n): NgIconFeature<FeatureKind> {\n return { ɵkind: kind, ɵproviders: providers };\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport {\n ContentSecurityPolicyFeature,\n NgIconFeatureKind,\n createFeature,\n} from './features';\n\nexport type NgIconPreProcessor = (icon: string) => string;\nexport type NgIconPostProcessor = (element: HTMLElement) => void;\n\nexport const NgIconPreProcessorToken = new InjectionToken<NgIconPreProcessor>(\n 'Ng Icon Pre Processor',\n);\n\nexport const NgIconPostProcessorToken = new InjectionToken<NgIconPostProcessor>(\n 'Ng Icon Post Processor',\n);\n\nexport function injectNgIconPreProcessor(): NgIconPreProcessor {\n return inject(NgIconPreProcessorToken, { optional: true }) ?? (icon => icon);\n}\n\nexport function injectNgIconPostProcessor(): NgIconPostProcessor {\n return inject(NgIconPostProcessorToken, { optional: true }) ?? (() => {});\n}\n\nfunction preprocessIcon(icon: string): string {\n // rename all style attributes to data-style to avoid being blocked by the CSP\n return icon.replace(/style\\s*=/g, 'data-style=');\n}\n\nfunction postprocessIcon(element: HTMLElement): void {\n // find all elements with a data-style attribute and get the styles from it\n // and apply them to the element using the style property and remove the data-style attribute\n const elements = element.querySelectorAll<HTMLElement>('[data-style]');\n\n for (const element of Array.from(elements)) {\n const styles = element.getAttribute('data-style');\n\n styles?.split(';').forEach(style => {\n const [property, value] = style.split(':');\n element.style[property.trim() as any] = value.trim();\n });\n\n element.removeAttribute('data-style');\n }\n}\n\n/**\n * Process icons in a way that is compliant with the content security policy\n */\nexport function withContentSecurityPolicy(): ContentSecurityPolicyFeature {\n return createFeature(NgIconFeatureKind.ContentSecurityPolicyFeature, [\n { provide: NgIconPreProcessorToken, useValue: preprocessIcon },\n { provide: NgIconPostProcessorToken, useValue: postprocessIcon },\n ]);\n}\n","import { InjectionToken, Provider, inject } from '@angular/core';\nimport { NgIconFeatures } from './features/features';\n\nexport interface NgIconConfig {\n /** Define the default size of icons */\n size: string;\n /** Define the default color of icons */\n color?: string;\n}\n\nexport const NgIconConfigToken = new InjectionToken<NgIconConfig>(\n 'Ng Icon Config',\n);\n\nconst defaultConfig: NgIconConfig = {\n size: '1em',\n};\n\n/**\n * Provide the configuration for the icons\n * @param config The configuration to use\n */\nexport function provideNgIconsConfig(\n config: Partial<NgIconConfig>,\n ...features: NgIconFeatures[]\n): Provider[] {\n return [\n {\n provide: NgIconConfigToken,\n useValue: { ...defaultConfig, ...config },\n },\n features.map(feature => feature.ɵproviders),\n ];\n}\n\n/**\n * Inject the configuration for the icons\n * @returns The configuration to use\n * @internal\n */\nexport function injectNgIconConfig(): NgIconConfig {\n return inject(NgIconConfigToken, { optional: true }) ?? defaultConfig;\n}\n","import { inject, InjectionToken, Provider } from '@angular/core';\nimport type { Observable } from 'rxjs';\n\nexport type NgIconLoader = (\n name: string,\n) => Promise<string> | Observable<string> | string;\n\nexport const NgIconLoaderToken = new InjectionToken<NgIconLoader>(\n 'Ng Icon Loader Token',\n);\n\n/**\n * The list of features as an enum to uniquely type each feature.\n */\nconst enum NgIconLoaderFeatureKind {\n CachingFeature,\n}\n\ninterface NgIconLoaderFeature<FeatureKind extends NgIconLoaderFeatureKind> {\n kind: FeatureKind;\n providers: Provider[];\n}\n\n/**\n * Helper function to create an object that represents a Loader feature.\n */\nfunction loaderFeature<FeatureKind extends NgIconLoaderFeatureKind>(\n kind: FeatureKind,\n providers: Provider[],\n): NgIconLoaderFeature<FeatureKind> {\n return { kind: kind, providers: providers };\n}\n\ntype CachingFeature =\n NgIconLoaderFeature<NgIconLoaderFeatureKind.CachingFeature>;\n\ntype NgIconLoaderFeatures = CachingFeature;\n\nexport type NgIconLoaderCache = Map<string, string | Promise<string>>;\n\nexport const NgIconCacheToken = new InjectionToken<NgIconLoaderCache>(\n 'Ng Icon Cache Token',\n);\n\n/**\n * Add caching to the loader. This will prevent the loader from being called multiple times for the same icon name.\n */\nexport function withCaching(): CachingFeature {\n return loaderFeature(NgIconLoaderFeatureKind.CachingFeature, [\n { provide: NgIconCacheToken, useValue: new Map<string, string>() },\n ]);\n}\n\n/**\n * Provide a function that will return the SVG content for a given icon name.\n * @param loader The function that will return the SVG content for a given icon name.\n * @param features The list of features to apply to the loader.\n * @returns The SVG content for a given icon name.\n */\nexport function provideNgIconLoader(\n loader: NgIconLoader,\n ...features: NgIconLoaderFeatures[]\n) {\n return [\n { provide: NgIconLoaderToken, useValue: loader },\n features.map(feature => feature.providers),\n ];\n}\n\n/**\n * Inject the function that will return the SVG content for a given icon name.\n */\nexport function injectNgIconLoader(): NgIconLoader | null {\n return inject(NgIconLoaderToken, { optional: true });\n}\n\n/**\n * Inject the cache that will store the SVG content for a given icon name.\n */\nexport function injectNgIconLoaderCache(): NgIconLoaderCache | null {\n return inject(NgIconCacheToken, { optional: true });\n}\n","import {\n InjectionToken,\n Optional,\n Provider,\n SkipSelf,\n inject,\n} from '@angular/core';\n\n/**\n * Define the icons to use\n * @param icons The icons to provide\n */\nexport function provideIcons(icons: Record<string, string>): Provider[] {\n return [\n {\n provide: NgIconsToken,\n useFactory: (parentIcons?: Record<string, string>[]) => ({\n ...parentIcons?.reduce((acc, icons) => ({ ...acc, ...icons }), {}),\n ...icons,\n }),\n deps: [[NgIconsToken, new Optional(), new SkipSelf()]],\n multi: true,\n },\n ];\n}\n\nexport const NgIconsToken = new InjectionToken<Record<string, string>[]>(\n 'Icons Token',\n);\n\n/**\n * Inject the icons to use\n * @returns The icons to use\n * @internal\n */\nexport function injectNgIcons(): Record<string, string>[] {\n return inject(NgIconsToken, { optional: true }) ?? [];\n}\n","import { Observable, firstValueFrom, isObservable } from 'rxjs';\n\n/**\n * A loader may return a promise, an observable or a string. This function will coerce the result into a promise.\n * @returns\n */\nexport function coerceLoaderResult(\n result: Promise<string> | Observable<string> | string,\n): Promise<string> {\n if (typeof result === 'string') {\n return Promise.resolve(result);\n }\n\n if (isObservable(result)) {\n return firstValueFrom(result);\n }\n\n return result;\n}\n","/**\n * Hyphenated to lowerCamelCase\n */\nexport function toPropertyName(str: string): string {\n return str\n .replace(/([^a-zA-Z0-9])+(.)?/g, (_, __, chr) =>\n chr ? chr.toUpperCase() : '',\n )\n .replace(/[^a-zA-Z\\d]/g, '')\n .replace(/^([A-Z])/, m => m.toLowerCase());\n}\n","import { InjectionToken, inject } from '@angular/core';\nimport {\n ExceptionLoggerFeature,\n NgIconFeatureKind,\n createFeature,\n} from './features';\n\ninterface Logger {\n log(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n\nexport const LoggerToken = new InjectionToken<Logger>('Ng Icon Logger');\n\n/**\n * The default logger implementation that logs to the console\n */\nexport class DefaultLogger implements Logger {\n log(message: string): void {\n console.log(message);\n }\n warn(message: string): void {\n console.warn(message);\n }\n error(message: string): void {\n console.error(message);\n }\n}\n\n/**\n * A logger implementation that throws an error on warnings and errors\n */\nexport class ExceptionLogger implements Logger {\n log(message: string): void {\n console.log(message);\n }\n\n warn(message: string): void {\n throw new Error(message);\n }\n\n error(message: string): void {\n throw new Error(message);\n }\n}\n\nexport function injectLogger(): Logger {\n return inject(LoggerToken, { optional: true }) ?? new DefaultLogger();\n}\n\n/**\n * Throw exceptions on warnings and errors\n */\nexport function withExceptionLogger(): ExceptionLoggerFeature {\n return createFeature(NgIconFeatureKind.ExceptionLoggerFeature, [\n { provide: LoggerToken, useClass: ExceptionLogger },\n ]);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n Injector,\n Input,\n OnChanges,\n OnInit,\n runInInjectionContext,\n SimpleChanges,\n} from '@angular/core';\nimport type { IconName } from '../../components/icon/icon-name';\nimport {\n injectNgIconPostProcessor,\n injectNgIconPreProcessor,\n} from '../../providers/features/csp';\nimport { injectNgIconConfig } from '../../providers/icon-config.provider';\nimport {\n injectNgIconLoader,\n injectNgIconLoaderCache,\n} from '../../providers/icon-loader.provider';\nimport { injectNgIcons } from '../../providers/icon.provider';\nimport { coerceLoaderResult } from '../../utils/async';\nimport { coerceCssPixelValue } from '../../utils/coercion';\nimport { toPropertyName } from '../../utils/format';\nimport { injectLogger } from '../../providers/features/logger';\n\n// This is a typescript type to prevent inference from collapsing the union type to a string to improve type safety\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport type IconType = IconName | (string & {});\n\n@Component({\n selector: 'ng-icon',\n template: '',\n standalone: true,\n styleUrls: ['./icon.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgIcon implements OnInit, OnChanges {\n /** Access the global icon config */\n private readonly config = injectNgIconConfig();\n\n /** Access the icons */\n private readonly icons = injectNgIcons();\n\n /** Access the icon loader if defined */\n private readonly loader = injectNgIconLoader();\n\n /** Access the icon cache if defined */\n private readonly cache = injectNgIconLoaderCache();\n\n /** Access the pre-processor */\n private readonly preProcessor = injectNgIconPreProcessor();\n\n /** Access the post-processor */\n private readonly postProcessor = injectNgIconPostProcessor();\n\n /** Access the injector */\n private readonly injector = inject(Injector);\n\n /** Access the element ref */\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Access the logger */\n private readonly logger = injectLogger();\n\n /** Define the name of the icon to display */\n @Input() set name(name: IconType) {\n this.setIcon(name);\n }\n\n /** Define the svg of the icon to display */\n @Input() set svg(svg: string) {\n this.setSvg(svg);\n }\n\n /** Define the size of the icon */\n @Input({ transform: coerceCssPixelValue })\n size?: string | number = this.config.size;\n\n /** Define the stroke-width of the icon */\n @Input()\n strokeWidth?: string | number;\n\n /** Define the color of the icon */\n @Input()\n color?: string = this.config.color;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.size) {\n this.setIconSize();\n }\n if (changes.color) {\n this.setIconColor();\n }\n if (changes.strokeWidth) {\n this.setIconStrokeWidth();\n }\n }\n\n ngOnInit(): void {\n this.setIconStyles();\n }\n\n private setIconColor(): void {\n this.elementRef.nativeElement.style.removeProperty('color');\n\n if (this.color !== undefined) {\n this.elementRef.nativeElement.style.setProperty('color', this.color);\n }\n }\n\n private setIconSize(): void {\n this.elementRef.nativeElement.style.removeProperty('--ng-icon__size');\n\n if (this.size !== undefined) {\n this.elementRef.nativeElement.style.setProperty(\n '--ng-icon__size',\n this.size.toString(),\n );\n }\n }\n\n private setIconStrokeWidth(): void {\n this.elementRef.nativeElement.style.removeProperty(\n '--ng-icon__stroke-width',\n );\n if (this.strokeWidth !== undefined) {\n this.elementRef.nativeElement.style.setProperty(\n '--ng-icon__stroke-width',\n this.strokeWidth.toString(),\n );\n }\n }\n\n /**\n * Set the styles for the icon. We use the style property to set the styles\n * rather than the host binding as it works with CSP.\n */\n private setIconStyles(): void {\n this.setIconColor();\n this.setIconSize();\n this.setIconStrokeWidth();\n }\n\n private setSvg(svg: string): void {\n this.elementRef.nativeElement.innerHTML = this.preProcessor(svg);\n this.postProcessor(this.elementRef.nativeElement);\n }\n\n /**\n * Load the icon with the given name and insert it into the template.\n * @param name The name of the icon to load.\n */\n private async setIcon(name: IconType): Promise<void> {\n const propertyName = toPropertyName(name);\n\n for (const icons of [...this.icons].reverse()) {\n if (icons[propertyName]) {\n // insert the SVG into the template\n this.setSvg(icons[propertyName]);\n return;\n }\n }\n\n // if there is a loader defined, use it to load the icon\n if (this.loader) {\n const result = await this.requestIconFromLoader(name);\n\n // if the result is a string, insert the SVG into the template\n if (result !== null) {\n this.setSvg(result);\n return;\n }\n }\n\n // if there is no icon with this name warn the user as they probably forgot to import it\n this.logger.warn(\n `No icon named ${name} was found. You may need to import it using the withIcons function.`,\n );\n }\n\n /**\n * Request the icon from the loader.\n * @param name The name of the icon to load.\n * @returns The SVG content for a given icon name.\n */\n private requestIconFromLoader(name: string): Promise<string> {\n return new Promise(resolve => {\n runInInjectionContext(this.injector, async () => {\n // if we have a cache, check if the icon is already loaded (i.e, it is a string)\n if (this.cache) {\n const cachedResult = this.cache.get(name);\n\n if (typeof cachedResult === 'string') {\n resolve(cachedResult);\n return;\n }\n\n // it may be a promise, so we need to await it\n if (cachedResult instanceof Promise) {\n const result = await cachedResult;\n resolve(result);\n return;\n }\n }\n\n const promise = coerceLoaderResult(this.loader!(name));\n\n // store the promise in the cache so if we get repeated calls (e.g. in a loop) before the loader has resolved\n // then don't call the loader function multiple times\n this.cache?.set(name, promise);\n\n // await the result of the promise\n const result = await promise;\n\n // if we have a cache, store the result\n this.cache?.set(name, result);\n\n resolve(result);\n });\n });\n }\n}\n","import { Inject, ModuleWithProviders, NgModule } from '@angular/core';\nimport { NgIcon } from './components/icon/icon.component';\nimport { NgIconsToken, provideIcons } from './providers/icon.provider';\n\n@NgModule({\n imports: [NgIcon],\n exports: [NgIcon],\n})\nexport class NgIconsModule {\n constructor(@Inject(NgIconsToken) icons: Record<string, string>) {\n if (Object.keys(icons).length === 0) {\n throw new Error(\n 'No icons have been provided. Ensure to include some icons by importing them using NgIconsModule.withIcons({ ... }).',\n );\n }\n }\n\n /**\n * Define the icons that will be included in the application. This allows unused icons to\n * be tree-shaken away to reduce bundle size\n * @param icons The object containing the required icons\n */\n static withIcons(\n icons: Record<string, string>,\n ): ModuleWithProviders<NgIconsModule> {\n return { ngModule: NgIconsModule, providers: provideIcons(icons) };\n }\n}\n\nexport const NG_ICON_DIRECTIVES = [NgIcon] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["defaultConfig"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -7,4 +7,6 @@ export { NgGlyphs, NgGlyphset, provideNgGlyphs, } from './lib/providers/glyph.pr
|
|
|
7
7
|
export * from './lib/providers/icon-config.provider';
|
|
8
8
|
export * from './lib/providers/icon-loader.provider';
|
|
9
9
|
export * from './lib/providers/icon.provider';
|
|
10
|
+
export { withContentSecurityPolicy } from './lib/providers/features/csp';
|
|
11
|
+
export { withExceptionLogger } from './lib/providers/features/logger';
|
|
10
12
|
export { NgIcon as NgIconComponent } from './lib/components/icon/icon.component';
|
|
@@ -11,10 +11,16 @@ export declare class NgIcon implements OnInit, OnChanges {
|
|
|
11
11
|
private readonly loader;
|
|
12
12
|
/** Access the icon cache if defined */
|
|
13
13
|
private readonly cache;
|
|
14
|
+
/** Access the pre-processor */
|
|
15
|
+
private readonly preProcessor;
|
|
16
|
+
/** Access the post-processor */
|
|
17
|
+
private readonly postProcessor;
|
|
14
18
|
/** Access the injector */
|
|
15
19
|
private readonly injector;
|
|
16
20
|
/** Access the element ref */
|
|
17
21
|
private readonly elementRef;
|
|
22
|
+
/** Access the logger */
|
|
23
|
+
private readonly logger;
|
|
18
24
|
/** Define the name of the icon to display */
|
|
19
25
|
set name(name: IconType);
|
|
20
26
|
/** Define the svg of the icon to display */
|
|
@@ -35,6 +41,7 @@ export declare class NgIcon implements OnInit, OnChanges {
|
|
|
35
41
|
* rather than the host binding as it works with CSP.
|
|
36
42
|
*/
|
|
37
43
|
private setIconStyles;
|
|
44
|
+
private setSvg;
|
|
38
45
|
/**
|
|
39
46
|
* Load the icon with the given name and insert it into the template.
|
|
40
47
|
* @param name The name of the icon to load.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { ContentSecurityPolicyFeature } from './features';
|
|
3
|
+
export type NgIconPreProcessor = (icon: string) => string;
|
|
4
|
+
export type NgIconPostProcessor = (element: HTMLElement) => void;
|
|
5
|
+
export declare const NgIconPreProcessorToken: InjectionToken<NgIconPreProcessor>;
|
|
6
|
+
export declare const NgIconPostProcessorToken: InjectionToken<NgIconPostProcessor>;
|
|
7
|
+
export declare function injectNgIconPreProcessor(): NgIconPreProcessor;
|
|
8
|
+
export declare function injectNgIconPostProcessor(): NgIconPostProcessor;
|
|
9
|
+
/**
|
|
10
|
+
* Process icons in a way that is compliant with the content security policy
|
|
11
|
+
*/
|
|
12
|
+
export declare function withContentSecurityPolicy(): ContentSecurityPolicyFeature;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Provider } from '@angular/core';
|
|
2
|
+
export type ContentSecurityPolicyFeature = NgIconFeature<NgIconFeatureKind.ContentSecurityPolicyFeature>;
|
|
3
|
+
export type ExceptionLoggerFeature = NgIconFeature<NgIconFeatureKind.ExceptionLoggerFeature>;
|
|
4
|
+
export type NgIconFeatures = ContentSecurityPolicyFeature | ExceptionLoggerFeature;
|
|
5
|
+
/**
|
|
6
|
+
* The list of features as an enum to uniquely type each feature.
|
|
7
|
+
*/
|
|
8
|
+
export declare const enum NgIconFeatureKind {
|
|
9
|
+
ContentSecurityPolicyFeature = 0,
|
|
10
|
+
ExceptionLoggerFeature = 1
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Helper type to represent a feature.
|
|
14
|
+
*/
|
|
15
|
+
export interface NgIconFeature<FeatureKind extends NgIconFeatureKind> {
|
|
16
|
+
ɵkind: FeatureKind;
|
|
17
|
+
ɵproviders: Provider[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Helper function to create an object that represents a feature.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createFeature<FeatureKind extends NgIconFeatureKind>(kind: FeatureKind, providers: Provider[]): NgIconFeature<FeatureKind>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { ExceptionLoggerFeature } from './features';
|
|
3
|
+
interface Logger {
|
|
4
|
+
log(message: string): void;
|
|
5
|
+
warn(message: string): void;
|
|
6
|
+
error(message: string): void;
|
|
7
|
+
}
|
|
8
|
+
export declare const LoggerToken: InjectionToken<Logger>;
|
|
9
|
+
/**
|
|
10
|
+
* The default logger implementation that logs to the console
|
|
11
|
+
*/
|
|
12
|
+
export declare class DefaultLogger implements Logger {
|
|
13
|
+
log(message: string): void;
|
|
14
|
+
warn(message: string): void;
|
|
15
|
+
error(message: string): void;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* A logger implementation that throws an error on warnings and errors
|
|
19
|
+
*/
|
|
20
|
+
export declare class ExceptionLogger implements Logger {
|
|
21
|
+
log(message: string): void;
|
|
22
|
+
warn(message: string): void;
|
|
23
|
+
error(message: string): void;
|
|
24
|
+
}
|
|
25
|
+
export declare function injectLogger(): Logger;
|
|
26
|
+
/**
|
|
27
|
+
* Throw exceptions on warnings and errors
|
|
28
|
+
*/
|
|
29
|
+
export declare function withExceptionLogger(): ExceptionLoggerFeature;
|
|
30
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { InjectionToken, Provider } from '@angular/core';
|
|
2
|
+
import { NgIconFeatures } from './features/features';
|
|
2
3
|
export interface NgIconConfig {
|
|
3
4
|
/** Define the default size of icons */
|
|
4
5
|
size: string;
|
|
@@ -10,7 +11,7 @@ export declare const NgIconConfigToken: InjectionToken<NgIconConfig>;
|
|
|
10
11
|
* Provide the configuration for the icons
|
|
11
12
|
* @param config The configuration to use
|
|
12
13
|
*/
|
|
13
|
-
export declare function provideNgIconsConfig(config: Partial<NgIconConfig
|
|
14
|
+
export declare function provideNgIconsConfig(config: Partial<NgIconConfig>, ...features: NgIconFeatures[]): Provider[];
|
|
14
15
|
/**
|
|
15
16
|
* Inject the configuration for the icons
|
|
16
17
|
* @returns The configuration to use
|