@hugeicons/angular 1.0.2 → 1.0.5

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/dist/README.md CHANGED
@@ -1,25 +1,36 @@
1
- ![31c9262e-aeea-4403-9086-3c8b88885cab](https://github.com/hugeicons/hugeicons-react/assets/130147052/ff91f2f0-095a-4c6d-8942-3af4759f9021)
1
+ ![Hugeicons Logo](https://raw.githubusercontent.com/hugeicons/react/main/assets/logo.png)
2
2
 
3
3
  # @hugeicons/angular
4
4
 
5
- > HugeIcons Pro Angular Component Library - Beautiful and customizable icons for your Angular applications
5
+ > Hugeicons Angular rendering library for fast, customizable icons with TypeScript and tree-shaking support
6
6
 
7
- ## What is HugeIcons?
7
+ ## What is Hugeicons?
8
8
 
9
- HugeIcons is a comprehensive icon library designed for modern web and mobile applications. The free package includes 4,000+ carefully crafted icons in the Stroke Rounded style, while the pro version offers over 36,000 icons across 9 unique styles.
9
+ Hugeicons is a large icon set for modern web and mobile apps. The free package includes 4,600+ Stroke Rounded icons. The Pro package provides 46,000+ icons across 10 styles.
10
+
11
+ ## How It Works
12
+
13
+ This package (`@hugeicons/angular`) is a **rendering library** - it provides the `HugeiconsIconComponent` that displays icons in your Angular app. The icons themselves come from separate icon packages:
14
+
15
+ - **Free icons**: `@hugeicons/core-free-icons` (4,600+ icons)
16
+ - **Pro icons**: `@hugeicons-pro/core-*` packages (46,000+ icons, requires license)
10
17
 
11
18
  ### Key Highlights
12
- - **4,000+ Free Icons**: Extensive collection of Stroke Rounded icons covering essential UI elements, actions, and concepts
13
- - **Pixel Perfect**: Every icon is crafted on a 24x24 pixel grid ensuring crisp, clear display at any size
19
+ - **4,600+ Free Icons**: Stroke Rounded set for unlimited personal and commercial projects
20
+ - **46,000+ Pro Icons, 10 Styles**: Stroke, Solid, Bulk, Duotone, and Twotone families for sharp, rounded, and standard needs with richer variants
21
+ - **Pixel Perfect Grid**: Built on a 24x24 grid for crisp rendering at any size
14
22
  - **Customizable**: Easily adjust colors, sizes, and styles to match your design needs
23
+ - **Tree Shaking Ready**: Named exports keep bundles lean in modern bundlers
15
24
  - **Regular Updates**: New icons added regularly to keep up with evolving design trends
16
25
 
17
- > 📚 **Looking for Pro Icons?** Check out our comprehensive documentation at [docs.hugeicons.com](https://docs.hugeicons.com) for detailed information about pro icons, styles, and advanced usage.
18
26
 
19
- ![a40aa766-1b04-4a2a-a2e6-0ec3c492b96a](https://github.com/hugeicons/hugeicons-react/assets/130147052/f82c0e0e-60ae-4617-802f-812cdc7a58da)
27
+ > **Looking for Pro Icons?** Check out our docs at [hugeicons.com/docs](https://hugeicons.com/docs) for detailed information about pro icons, styles, and advanced usage.
28
+
29
+ ![Hugeicons Icons](https://raw.githubusercontent.com/hugeicons/react/main/assets/icons.png)
20
30
 
21
31
  ## Table of Contents
22
- - [What is HugeIcons?](#what-is-hugeicons)
32
+ - [What is Hugeicons?](#what-is-hugeicons)
33
+ - [How It Works](#how-it-works)
23
34
  - [Features](#features)
24
35
  - [Installation](#installation)
25
36
  - [Usage](#usage)
@@ -27,7 +38,7 @@ HugeIcons is a comprehensive icon library designed for modern web and mobile app
27
38
  - [Examples](#examples)
28
39
  - [Basic Usage](#basic-usage)
29
40
  - [Custom Size and Color](#custom-size-and-color)
30
- - [Interactive Examples](#interactive-examples)
41
+ - [More examples and patterns](#more-examples-and-patterns)
31
42
  - [Performance](#performance)
32
43
  - [Troubleshooting](#troubleshooting)
33
44
  - [Browser Support](#browser-support)
@@ -38,12 +49,12 @@ HugeIcons is a comprehensive icon library designed for modern web and mobile app
38
49
 
39
50
  ## Features
40
51
 
41
- - 🎨 Customizable colors and sizes
42
- - 💪 TypeScript support with full type definitions
43
- - 🎯 Tree-shakeable for optimal bundle size
44
- - 📦 Multiple bundle formats (ESM, CJS, UMD)
45
- - Lightweight and optimized
46
- - 🔄 Alternate icon support for dynamic interactions
52
+ - Customizable colors, sizes, and stroke width
53
+ - TypeScript support with full type definitions
54
+ - Tree shakeable for optimal bundle size
55
+ - Standalone component (Angular 17.1+)
56
+ - Signal-based inputs for optimal performance
57
+ - Alternate icon support for dynamic interactions
47
58
 
48
59
  ## Installation
49
60
 
@@ -63,173 +74,114 @@ bun add @hugeicons/angular @hugeicons/core-free-icons
63
74
 
64
75
  ## Usage
65
76
 
66
- First, import the HugeiconsModule in your app.module.ts:
67
-
68
- ```typescript
69
- import { NgModule } from '@angular/core';
70
- import { HugeiconsModule } from '@hugeicons/angular';
71
-
72
- @NgModule({
73
- imports: [
74
- HugeiconsModule
75
- ],
76
- // ...
77
- })
78
- export class AppModule { }
79
- ```
80
-
81
- Then use it in your component:
77
+ The `HugeiconsIconComponent` is a standalone component. Import it directly in your component:
82
78
 
83
79
  ```typescript
84
- // your.component.ts
85
80
  import { Component } from '@angular/core';
81
+ import { HugeiconsIconComponent } from '@hugeicons/angular';
86
82
  import { SearchIcon } from '@hugeicons/core-free-icons';
87
83
 
88
84
  @Component({
89
- selector: 'app-your-component',
85
+ selector: 'app-example',
86
+ standalone: true,
87
+ imports: [HugeiconsIconComponent],
90
88
  template: `
91
89
  <hugeicons-icon
92
- [icon]="icon"
90
+ [icon]="SearchIcon"
93
91
  [size]="24"
94
92
  color="currentColor"
95
93
  [strokeWidth]="1.5"
96
- ></hugeicons-icon>
94
+ />
97
95
  `
98
96
  })
99
- export class YourComponent {
100
- icon = SearchIcon;
97
+ export class ExampleComponent {
98
+ SearchIcon = SearchIcon;
101
99
  }
102
100
  ```
103
101
 
102
+ ### NgModule Usage (Legacy)
103
+
104
+ If you're using NgModules, import the component in your module:
105
+
106
+ ```typescript
107
+ import { NgModule } from '@angular/core';
108
+ import { HugeiconsIconComponent } from '@hugeicons/angular';
109
+
110
+ @NgModule({
111
+ imports: [HugeiconsIconComponent],
112
+ // ...
113
+ })
114
+ export class AppModule { }
115
+ ```
116
+
104
117
  ## Inputs
105
118
 
106
119
  | Input | Type | Default | Description |
107
120
  |-------|------|---------|-------------|
108
- | `icon` | `[string, Record<string, any>][]` | Required | The main icon to display (array of SVG elements and their attributes) |
109
- | `size` | `number \| string` | `24` | Icon size in pixels. Must be a positive number. String values will be parsed to numbers |
110
- | `strokeWidth` | `number \| undefined` | `undefined` | Width of the icon strokes (works with stroke-style icons) |
111
- | `altIcon` | `[string, Record<string, any>][]` | `undefined` | Alternative icon that can be used for states, interactions, or animations |
121
+ | `icon` | `IconSvgObject` | Required | The main icon to display |
122
+ | `altIcon` | `IconSvgObject` | - | Alternative icon for states, interactions, or dynamic icon swapping |
112
123
  | `showAlt` | `boolean` | `false` | When true, displays the altIcon instead of the main icon |
124
+ | `size` | `number \| string` | `24` | Icon size in pixels |
113
125
  | `color` | `string` | `currentColor` | Icon color (CSS color value) |
114
-
115
- Note:
116
- - The component accepts all standard SVG attributes which will be passed to the root SVG element.
117
- - The `size` input accepts both numbers and strings, but strings will be parsed to numbers and must result in a positive number.
118
- - Icon arrays are tuples of `[elementName: string, attributes: Record<string, any>][]` representing SVG elements.
126
+ | `strokeWidth` | `number` | - | Width of the icon strokes |
127
+ | `absoluteStrokeWidth` | `boolean` | `false` | When true, the stroke width will be scaled relative to the icon size |
128
+ | `class` | `string` | - | CSS classes to apply to the icon |
119
129
 
120
130
  ## Examples
121
131
 
122
132
  ### Basic Usage
123
133
  ```typescript
124
- // basic.component.ts
125
134
  import { Component } from '@angular/core';
126
- import { SearchIcon } from '@hugeicons/core-free-icons';
135
+ import { HugeiconsIconComponent } from '@hugeicons/angular';
136
+ import { Video01Icon } from '@hugeicons/core-free-icons';
127
137
 
128
138
  @Component({
129
139
  selector: 'app-basic',
140
+ standalone: true,
141
+ imports: [HugeiconsIconComponent],
130
142
  template: `
131
- <hugeicons-icon [icon]="icon"></hugeicons-icon>
143
+ <hugeicons-icon [icon]="Video01Icon" />
132
144
  `
133
145
  })
134
146
  export class BasicComponent {
135
- icon = SearchIcon;
147
+ Video01Icon = Video01Icon;
136
148
  }
137
149
  ```
138
150
 
139
151
  ### Custom Size and Color
140
152
  ```typescript
141
- // custom.component.ts
142
153
  import { Component } from '@angular/core';
143
- import { NotificationIcon } from '@hugeicons/core-free-icons';
154
+ import { HugeiconsIconComponent } from '@hugeicons/angular';
155
+ import { Notification02Icon } from '@hugeicons/core-free-icons';
144
156
 
145
157
  @Component({
146
158
  selector: 'app-custom',
159
+ standalone: true,
160
+ imports: [HugeiconsIconComponent],
147
161
  template: `
148
162
  <hugeicons-icon
149
- [icon]="icon"
163
+ [icon]="Notification02Icon"
150
164
  [size]="32"
151
165
  color="#FF5733"
152
- ></hugeicons-icon>
166
+ />
153
167
  `
154
168
  })
155
169
  export class CustomComponent {
156
- icon = NotificationIcon;
157
- }
158
- ```
159
-
160
- ### Interactive Examples
161
-
162
- #### Search Bar with Clear Button
163
- ```typescript
164
- // search.component.ts
165
- import { Component } from '@angular/core';
166
- import { SearchIcon, CloseCircleIcon } from '@hugeicons/core-free-icons';
167
-
168
- @Component({
169
- selector: 'app-search',
170
- template: `
171
- <div>
172
- <input
173
- [(ngModel)]="searchValue"
174
- type="text"
175
- placeholder="Search..."
176
- />
177
- <hugeicons-icon
178
- [icon]="SearchIcon"
179
- [altIcon]="CloseCircleIcon"
180
- [showAlt]="searchValue.length > 0"
181
- (click)="clearSearch()"
182
- ></hugeicons-icon>
183
- </div>
184
- `
185
- })
186
- export class SearchComponent {
187
- searchValue = '';
188
- SearchIcon = SearchIcon;
189
- CloseCircleIcon = CloseCircleIcon;
190
-
191
- clearSearch(): void {
192
- if (this.searchValue.length > 0) {
193
- this.searchValue = '';
194
- }
195
- }
170
+ Notification02Icon = Notification02Icon;
196
171
  }
197
172
  ```
198
173
 
199
- #### Theme Toggle
200
- ```typescript
201
- // theme-toggle.component.ts
202
- import { Component } from '@angular/core';
203
- import { SunIcon, MoonIcon } from '@hugeicons/core-free-icons';
174
+ ### More examples and patterns
204
175
 
205
- @Component({
206
- selector: 'app-theme-toggle',
207
- template: `
208
- <button (click)="toggleTheme()">
209
- <hugeicons-icon
210
- [icon]="SunIcon"
211
- [altIcon]="MoonIcon"
212
- [showAlt]="isDark"
213
- ></hugeicons-icon>
214
- </button>
215
- `
216
- })
217
- export class ThemeToggleComponent {
218
- isDark = false;
219
- SunIcon = SunIcon;
220
- MoonIcon = MoonIcon;
221
-
222
- toggleTheme(): void {
223
- this.isDark = !this.isDark;
224
- }
225
- }
226
- ```
176
+ - Examples: https://hugeicons.com/docs/integrations/angular/examples
177
+ - Best practices: https://hugeicons.com/docs/integrations/angular/best-practices
227
178
 
228
179
  ## Performance
229
180
 
230
181
  - **Tree-shaking**: The package is fully tree-shakeable, ensuring only the icons you use are included in your final bundle
231
182
  - **Optimized SVGs**: All icons are optimized for size and performance
232
183
  - **Code Splitting**: Icons can be easily code-split when using dynamic imports
184
+ - **OnPush Change Detection**: Uses ChangeDetectionStrategy.OnPush for optimal performance
233
185
 
234
186
  ## Troubleshooting
235
187
 
@@ -237,12 +189,12 @@ export class ThemeToggleComponent {
237
189
 
238
190
  1. **Icons not showing up?**
239
191
  - Make sure you've installed both `@hugeicons/angular` and `@hugeicons/core-free-icons`
240
- - Check that the HugeiconsModule is properly imported in your module
192
+ - Check that `HugeiconsIconComponent` is imported in your component or module
241
193
  - Verify that icon names are correctly imported
242
194
 
243
195
  2. **TypeScript errors?**
244
196
  - Ensure your `tsconfig.json` includes the necessary type definitions
245
- - Check that you're using the latest version of the package
197
+ - Check that you're using Angular 17.1+ for signal inputs support
246
198
 
247
199
  3. **Bundle size concerns?**
248
200
  - Use named imports instead of importing the entire icon set
@@ -261,8 +213,8 @@ The library supports all modern browsers.
261
213
 
262
214
  ## Pro Version
263
215
 
264
- > 🌟 **Want access to 36,000+ icons and 9 unique styles?**
265
- > Check out our [Pro Version](https://hugeicons.com/pricing) and visit [docs.hugeicons.com](https://docs.hugeicons.com) for comprehensive documentation.
216
+ > **Want access to 46,000+ icons and 10 unique styles?**
217
+ > Check out our [Pro Version](https://hugeicons.com/pricing) and visit our [docs](https://hugeicons.com/docs) for detailed documentation.
266
218
 
267
219
  ### Available Pro Styles
268
220
  - **Stroke Styles**
@@ -276,13 +228,22 @@ The library supports all modern browsers.
276
228
  - **Special Styles**
277
229
  - Bulk Rounded (`@hugeicons-pro/core-bulk-rounded`)
278
230
  - Duotone Rounded (`@hugeicons-pro/core-duotone-rounded`)
231
+ - Duotone Standard (`@hugeicons-pro/core-duotone-standard`)
279
232
  - Twotone Rounded (`@hugeicons-pro/core-twotone-rounded`)
280
233
 
281
234
  ## License
282
235
 
283
- This project is licensed under the [MIT License](LICENSE.md).
236
+ The code in this package (`@hugeicons/angular`) is licensed under the MIT License.
237
+
238
+ This package only provides rendering utilities. It does not include or grant any rights to Hugeicons icon assets. Using Pro icon styles requires a valid Hugeicons Pro license.
239
+
240
+ Hugeicons icon packs are licensed separately:
241
+ - **Free icon packs**: use the license included with the specific free icon package you install.
242
+ - **Pro icon packs (`@hugeicons-pro/*`)**: require a paid Hugeicons Pro license and are governed by the Hugeicons Pro Terms (see [Pro License](PRO-LICENSE.md).).
243
+
284
244
 
285
245
  ## Related
286
246
 
247
+ - [Changelog](CHANGELOG.md) - Version history and release notes
287
248
  - [@hugeicons/core-free-icons](https://www.npmjs.com/package/@hugeicons/core-free-icons) - Free icon package
288
- - [HugeIcons Website](https://hugeicons.com) - Browse all available icons
249
+ - [Hugeicons Website](https://hugeicons.com) - Browse all available icons
@@ -1,24 +1,24 @@
1
- import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
2
1
  import { IconSvgObject } from '../lib/types';
3
2
  import * as i0 from "@angular/core";
4
- export declare class HugeiconsIconComponent implements OnInit, OnChanges {
5
- size: string | number;
6
- strokeWidth: number;
7
- icon: IconSvgObject;
8
- altIcon?: IconSvgObject;
9
- color: string;
10
- class: string;
11
- showAlt: boolean;
12
- paths: Array<{
13
- d: string;
14
- fill: string;
15
- opacity?: string;
16
- fillRule?: string;
17
- }>;
18
- ngOnInit(): void;
19
- ngOnChanges(changes: SimpleChanges): void;
20
- private updatePaths;
21
- trackByFn(index: number): number;
3
+ interface PathData {
4
+ d: string;
5
+ fill: string;
6
+ opacity?: string;
7
+ fillRule?: string;
8
+ stroke?: string;
9
+ strokeWidth?: number;
10
+ }
11
+ export declare class HugeiconsIconComponent {
12
+ readonly size: import("@angular/core").InputSignal<string | number>;
13
+ readonly strokeWidth: import("@angular/core").InputSignal<number>;
14
+ readonly absoluteStrokeWidth: import("@angular/core").InputSignal<boolean>;
15
+ readonly icon: import("@angular/core").InputSignal<IconSvgObject>;
16
+ readonly altIcon: import("@angular/core").InputSignal<IconSvgObject>;
17
+ readonly color: import("@angular/core").InputSignal<string>;
18
+ readonly iconClass: import("@angular/core").InputSignal<string>;
19
+ readonly showAlt: import("@angular/core").InputSignal<boolean>;
20
+ readonly paths: import("@angular/core").Signal<PathData[]>;
22
21
  static ɵfac: i0.ɵɵFactoryDeclaration<HugeiconsIconComponent, never>;
23
- static ɵcmp: i0.ɵɵComponentDeclaration<HugeiconsIconComponent, "hugeicons-icon", never, { "size": { "alias": "size"; "required": false; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "altIcon": { "alias": "altIcon"; "required": false; }; "color": { "alias": "color"; "required": false; }; "class": { "alias": "class"; "required": false; }; "showAlt": { "alias": "showAlt"; "required": false; }; }, {}, never, never, true, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<HugeiconsIconComponent, "hugeicons-icon", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "absoluteStrokeWidth": { "alias": "absoluteStrokeWidth"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": true; "isSignal": true; }; "altIcon": { "alias": "altIcon"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "iconClass": { "alias": "class"; "required": false; "isSignal": true; }; "showAlt": { "alias": "showAlt"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
24
23
  }
24
+ export {};
@@ -1,102 +1,93 @@
1
- import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
1
+ import { Component, ChangeDetectionStrategy, computed, input } from '@angular/core';
3
2
  import * as i0 from "@angular/core";
4
- import * as i1 from "@angular/common";
5
3
  export class HugeiconsIconComponent {
6
- size = 24;
7
- strokeWidth = 1.5;
8
- icon;
9
- altIcon;
10
- color = 'currentColor';
11
- class = '';
12
- showAlt = false;
13
- paths = [];
14
- ngOnInit() {
15
- this.updatePaths();
16
- }
17
- ngOnChanges(changes) {
18
- this.updatePaths();
19
- }
20
- updatePaths() {
21
- const currentIcon = this.showAlt && this.altIcon ? this.altIcon : this.icon;
4
+ // Signal inputs - modern Angular 17.1+ approach
5
+ size = input(24);
6
+ strokeWidth = input(undefined);
7
+ absoluteStrokeWidth = input(false);
8
+ icon = input.required();
9
+ altIcon = input(undefined);
10
+ color = input('currentColor');
11
+ iconClass = input('', { alias: 'class' });
12
+ showAlt = input(false);
13
+ // Computed signal for reactive path updates
14
+ paths = computed(() => {
15
+ const currentIcon = this.showAlt() && this.altIcon() ? this.altIcon() : this.icon();
22
16
  if (!currentIcon || !Array.isArray(currentIcon)) {
23
- this.paths = [];
24
- return;
17
+ return [];
25
18
  }
26
- this.paths = currentIcon.map(([_, attrs]) => ({
19
+ const strokeWidthValue = this.strokeWidth();
20
+ const calculatedStrokeWidth = strokeWidthValue !== undefined
21
+ ? (this.absoluteStrokeWidth()
22
+ ? (Number(strokeWidthValue) * 24) / Number(this.size())
23
+ : strokeWidthValue)
24
+ : undefined;
25
+ const strokeProps = calculatedStrokeWidth !== undefined
26
+ ? { strokeWidth: calculatedStrokeWidth, stroke: 'currentColor' }
27
+ : {};
28
+ return currentIcon.map(([_, attrs]) => ({
27
29
  d: attrs['d'],
28
30
  fill: attrs['fill'] || 'none',
29
31
  opacity: attrs['opacity'],
30
32
  fillRule: attrs['fillRule'],
31
- strokeWidth: attrs['strokeWidth'] || this.strokeWidth
33
+ ...strokeProps
32
34
  }));
33
- }
34
- trackByFn(index) {
35
- return index;
36
- }
35
+ });
37
36
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HugeiconsIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HugeiconsIconComponent, isStandalone: true, selector: "hugeicons-icon", inputs: { size: "size", strokeWidth: "strokeWidth", icon: "icon", altIcon: "altIcon", color: "color", class: "class", showAlt: "showAlt" }, usesOnChanges: true, ngImport: i0, template: `
37
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: HugeiconsIconComponent, isStandalone: true, selector: "hugeicons-icon", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null }, absoluteStrokeWidth: { classPropertyName: "absoluteStrokeWidth", publicName: "absoluteStrokeWidth", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: true, transformFunction: null }, altIcon: { classPropertyName: "altIcon", publicName: "altIcon", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, iconClass: { classPropertyName: "iconClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, showAlt: { classPropertyName: "showAlt", publicName: "showAlt", isSignal: true, isRequired: false, transformFunction: null } }, host: { styleAttribute: "display: inline-flex; align-items: center; justify-content: center;" }, ngImport: i0, template: `
39
38
  <svg
40
- [attr.width]="size"
41
- [attr.height]="size"
39
+ [attr.width]="size()"
40
+ [attr.height]="size()"
42
41
  viewBox="0 0 24 24"
43
42
  fill="none"
44
- [attr.color]="color"
45
- [class]="class"
43
+ [attr.color]="color()"
44
+ [class]="iconClass()"
46
45
  xmlns="http://www.w3.org/2000/svg"
47
46
  >
48
- <path
49
- *ngFor="let path of paths; trackBy: trackByFn"
50
- [attr.d]="path.d"
51
- [attr.fill]="path.fill"
52
- [attr.opacity]="path.opacity"
53
- [attr.fill-rule]="path.fillRule"
54
- [attr.stroke-width]="strokeWidth"
55
- />
47
+ @for (path of paths(); track $index) {
48
+ <path
49
+ [attr.d]="path.d"
50
+ [attr.fill]="path.fill"
51
+ [attr.opacity]="path.opacity"
52
+ [attr.fill-rule]="path.fillRule"
53
+ [attr.stroke]="path.stroke"
54
+ [attr.stroke-width]="path.strokeWidth"
55
+ />
56
+ }
56
57
  </svg>
57
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
58
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
58
59
  }
59
60
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HugeiconsIconComponent, decorators: [{
60
61
  type: Component,
61
62
  args: [{
62
63
  selector: 'hugeicons-icon',
63
64
  standalone: true,
64
- imports: [CommonModule],
65
65
  template: `
66
66
  <svg
67
- [attr.width]="size"
68
- [attr.height]="size"
67
+ [attr.width]="size()"
68
+ [attr.height]="size()"
69
69
  viewBox="0 0 24 24"
70
70
  fill="none"
71
- [attr.color]="color"
72
- [class]="class"
71
+ [attr.color]="color()"
72
+ [class]="iconClass()"
73
73
  xmlns="http://www.w3.org/2000/svg"
74
74
  >
75
- <path
76
- *ngFor="let path of paths; trackBy: trackByFn"
77
- [attr.d]="path.d"
78
- [attr.fill]="path.fill"
79
- [attr.opacity]="path.opacity"
80
- [attr.fill-rule]="path.fillRule"
81
- [attr.stroke-width]="strokeWidth"
82
- />
75
+ @for (path of paths(); track $index) {
76
+ <path
77
+ [attr.d]="path.d"
78
+ [attr.fill]="path.fill"
79
+ [attr.opacity]="path.opacity"
80
+ [attr.fill-rule]="path.fillRule"
81
+ [attr.stroke]="path.stroke"
82
+ [attr.stroke-width]="path.strokeWidth"
83
+ />
84
+ }
83
85
  </svg>
84
86
  `,
87
+ host: {
88
+ style: 'display: inline-flex; align-items: center; justify-content: center;'
89
+ },
85
90
  changeDetection: ChangeDetectionStrategy.OnPush
86
91
  }]
87
- }], propDecorators: { size: [{
88
- type: Input
89
- }], strokeWidth: [{
90
- type: Input
91
- }], icon: [{
92
- type: Input
93
- }], altIcon: [{
94
- type: Input
95
- }], color: [{
96
- type: Input
97
- }], class: [{
98
- type: Input
99
- }], showAlt: [{
100
- type: Input
101
- }] } });
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVnZWljb25zLWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvaHVnZWljb25zLWljb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQThCL0MsTUFBTSxPQUFPLHNCQUFzQjtJQUN4QixJQUFJLEdBQW9CLEVBQUUsQ0FBQztJQUMzQixXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQ2xCLElBQUksQ0FBaUI7SUFDckIsT0FBTyxDQUFpQjtJQUN4QixLQUFLLEdBQUcsY0FBYyxDQUFDO0lBQ3ZCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRXpCLEtBQUssR0FLQSxFQUFFLENBQUM7SUFFUixRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUU1RSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM1QyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNiLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTTtZQUM3QixPQUFPLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUN6QixRQUFRLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMzQixXQUFXLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXO1NBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzt3R0EzQ1Usc0JBQXNCOzRGQUF0QixzQkFBc0IsMk9BdkJ2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CVCwyREFwQlMsWUFBWTs7NEZBd0JYLHNCQUFzQjtrQkEzQmxDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFHVSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWNvblN2Z09iamVjdCB9IGZyb20gJy4uL2xpYi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2h1Z2VpY29ucy1pY29uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHN2Z1xuICAgICAgW2F0dHIud2lkdGhdPVwic2l6ZVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwic2l6ZVwiXG4gICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIFthdHRyLmNvbG9yXT1cImNvbG9yXCJcbiAgICAgIFtjbGFzc109XCJjbGFzc1wiXG4gICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICA+XG4gICAgICA8cGF0aFxuICAgICAgICAqbmdGb3I9XCJsZXQgcGF0aCBvZiBwYXRoczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgW2F0dHIuZF09XCJwYXRoLmRcIlxuICAgICAgICBbYXR0ci5maWxsXT1cInBhdGguZmlsbFwiXG4gICAgICAgIFthdHRyLm9wYWNpdHldPVwicGF0aC5vcGFjaXR5XCJcbiAgICAgICAgW2F0dHIuZmlsbC1ydWxlXT1cInBhdGguZmlsbFJ1bGVcIlxuICAgICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwic3Ryb2tlV2lkdGhcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5cbmV4cG9ydCBjbGFzcyBIdWdlaWNvbnNJY29uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBzaXplOiBzdHJpbmcgfCBudW1iZXIgPSAyNDtcbiAgQElucHV0KCkgc3Ryb2tlV2lkdGggPSAxLjU7XG4gIEBJbnB1dCgpIGljb24hOiBJY29uU3ZnT2JqZWN0O1xuICBASW5wdXQoKSBhbHRJY29uPzogSWNvblN2Z09iamVjdDtcbiAgQElucHV0KCkgY29sb3IgPSAnY3VycmVudENvbG9yJztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgc2hvd0FsdCA9IGZhbHNlO1xuXG4gIHBhdGhzOiBBcnJheTx7XG4gICAgZDogc3RyaW5nO1xuICAgIGZpbGw6IHN0cmluZztcbiAgICBvcGFjaXR5Pzogc3RyaW5nO1xuICAgIGZpbGxSdWxlPzogc3RyaW5nO1xuICB9PiA9IFtdO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlUGF0aHMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLnVwZGF0ZVBhdGhzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhdGhzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRJY29uID0gdGhpcy5zaG93QWx0ICYmIHRoaXMuYWx0SWNvbiA/IHRoaXMuYWx0SWNvbiA6IHRoaXMuaWNvbjtcblxuICAgIGlmICghY3VycmVudEljb24gfHwgIUFycmF5LmlzQXJyYXkoY3VycmVudEljb24pKSB7XG4gICAgICB0aGlzLnBhdGhzID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wYXRocyA9IGN1cnJlbnRJY29uLm1hcCgoW18sIGF0dHJzXSkgPT4gKHtcbiAgICAgIGQ6IGF0dHJzWydkJ10sXG4gICAgICBmaWxsOiBhdHRyc1snZmlsbCddIHx8ICdub25lJyxcbiAgICAgIG9wYWNpdHk6IGF0dHJzWydvcGFjaXR5J10sXG4gICAgICBmaWxsUnVsZTogYXR0cnNbJ2ZpbGxSdWxlJ10sXG4gICAgICBzdHJva2VXaWR0aDogYXR0cnNbJ3N0cm9rZVdpZHRoJ10gfHwgdGhpcy5zdHJva2VXaWR0aFxuICAgIH0pKTtcbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG59Il19
92
+ }] });
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVnZWljb25zLWljb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvaHVnZWljb25zLWljb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUEwQ3BGLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsZ0RBQWdEO0lBQ3ZDLElBQUksR0FBRyxLQUFLLENBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLFdBQVcsR0FBRyxLQUFLLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELG1CQUFtQixHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUM1QyxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBaUIsQ0FBQztJQUN2QyxPQUFPLEdBQUcsS0FBSyxDQUE0QixTQUFTLENBQUMsQ0FBQztJQUN0RCxLQUFLLEdBQUcsS0FBSyxDQUFTLGNBQWMsQ0FBQyxDQUFDO0lBQ3RDLFNBQVMsR0FBRyxLQUFLLENBQVMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbEQsT0FBTyxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUV6Qyw0Q0FBNEM7SUFDbkMsS0FBSyxHQUFHLFFBQVEsQ0FBYSxHQUFHLEVBQUU7UUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFckYsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0MsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVDLE1BQU0scUJBQXFCLEdBQUcsZ0JBQWdCLEtBQUssU0FBUztZQUMxRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3pCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN2QixDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsTUFBTSxXQUFXLEdBQUcscUJBQXFCLEtBQUssU0FBUztZQUNyRCxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRTtZQUNoRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDYixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU07WUFDN0IsT0FBTyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDekIsUUFBUSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUM7WUFDM0IsR0FBRyxXQUFXO1NBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQzt3R0FyQ1Esc0JBQXNCOzRGQUF0QixzQkFBc0IsZ3NDQTNCdkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCVDs7NEZBTVUsc0JBQXNCO2tCQTlCbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQlQ7b0JBQ0QsSUFBSSxFQUFFO3dCQUNKLEtBQUssRUFBRSxxRUFBcUU7cUJBQzdFO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIGNvbXB1dGVkLCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWNvblN2Z09iamVjdCB9IGZyb20gJy4uL2xpYi90eXBlcyc7XG5cbmludGVyZmFjZSBQYXRoRGF0YSB7XG4gIGQ6IHN0cmluZztcbiAgZmlsbDogc3RyaW5nO1xuICBvcGFjaXR5Pzogc3RyaW5nO1xuICBmaWxsUnVsZT86IHN0cmluZztcbiAgc3Ryb2tlPzogc3RyaW5nO1xuICBzdHJva2VXaWR0aD86IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaHVnZWljb25zLWljb24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxzdmdcbiAgICAgIFthdHRyLndpZHRoXT1cInNpemUoKVwiXG4gICAgICBbYXR0ci5oZWlnaHRdPVwic2l6ZSgpXCJcbiAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxuICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgW2F0dHIuY29sb3JdPVwiY29sb3IoKVwiXG4gICAgICBbY2xhc3NdPVwiaWNvbkNsYXNzKClcIlxuICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgPlxuICAgICAgQGZvciAocGF0aCBvZiBwYXRocygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBbYXR0ci5kXT1cInBhdGguZFwiXG4gICAgICAgICAgW2F0dHIuZmlsbF09XCJwYXRoLmZpbGxcIlxuICAgICAgICAgIFthdHRyLm9wYWNpdHldPVwicGF0aC5vcGFjaXR5XCJcbiAgICAgICAgICBbYXR0ci5maWxsLXJ1bGVdPVwicGF0aC5maWxsUnVsZVwiXG4gICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInBhdGguc3Ryb2tlXCJcbiAgICAgICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwicGF0aC5zdHJva2VXaWR0aFwiXG4gICAgICAgIC8+XG4gICAgICB9XG4gICAgPC9zdmc+XG4gIGAsXG4gIGhvc3Q6IHtcbiAgICBzdHlsZTogJ2Rpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsnXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEh1Z2VpY29uc0ljb25Db21wb25lbnQge1xuICAvLyBTaWduYWwgaW5wdXRzIC0gbW9kZXJuIEFuZ3VsYXIgMTcuMSsgYXBwcm9hY2hcbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PHN0cmluZyB8IG51bWJlcj4oMjQpO1xuICByZWFkb25seSBzdHJva2VXaWR0aCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgYWJzb2x1dGVTdHJva2VXaWR0aCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaWNvbiA9IGlucHV0LnJlcXVpcmVkPEljb25TdmdPYmplY3Q+KCk7XG4gIHJlYWRvbmx5IGFsdEljb24gPSBpbnB1dDxJY29uU3ZnT2JqZWN0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBjb2xvciA9IGlucHV0PHN0cmluZz4oJ2N1cnJlbnRDb2xvcicpO1xuICByZWFkb25seSBpY29uQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCcnLCB7IGFsaWFzOiAnY2xhc3MnIH0pO1xuICByZWFkb25seSBzaG93QWx0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIC8vIENvbXB1dGVkIHNpZ25hbCBmb3IgcmVhY3RpdmUgcGF0aCB1cGRhdGVzXG4gIHJlYWRvbmx5IHBhdGhzID0gY29tcHV0ZWQ8UGF0aERhdGFbXT4oKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRJY29uID0gdGhpcy5zaG93QWx0KCkgJiYgdGhpcy5hbHRJY29uKCkgPyB0aGlzLmFsdEljb24oKSEgOiB0aGlzLmljb24oKTtcblxuICAgIGlmICghY3VycmVudEljb24gfHwgIUFycmF5LmlzQXJyYXkoY3VycmVudEljb24pKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc3Ryb2tlV2lkdGhWYWx1ZSA9IHRoaXMuc3Ryb2tlV2lkdGgoKTtcbiAgICBjb25zdCBjYWxjdWxhdGVkU3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgID8gKHRoaXMuYWJzb2x1dGVTdHJva2VXaWR0aCgpIFxuICAgICAgICAgID8gKE51bWJlcihzdHJva2VXaWR0aFZhbHVlKSAqIDI0KSAvIE51bWJlcih0aGlzLnNpemUoKSkgXG4gICAgICAgICAgOiBzdHJva2VXaWR0aFZhbHVlKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzdHJva2VQcm9wcyA9IGNhbGN1bGF0ZWRTdHJva2VXaWR0aCAhPT0gdW5kZWZpbmVkIFxuICAgICAgPyB7IHN0cm9rZVdpZHRoOiBjYWxjdWxhdGVkU3Ryb2tlV2lkdGgsIHN0cm9rZTogJ2N1cnJlbnRDb2xvcicgfSBcbiAgICAgIDoge307XG5cbiAgICByZXR1cm4gY3VycmVudEljb24ubWFwKChbXywgYXR0cnNdKSA9PiAoe1xuICAgICAgZDogYXR0cnNbJ2QnXSxcbiAgICAgIGZpbGw6IGF0dHJzWydmaWxsJ10gfHwgJ25vbmUnLFxuICAgICAgb3BhY2l0eTogYXR0cnNbJ29wYWNpdHknXSxcbiAgICAgIGZpbGxSdWxlOiBhdHRyc1snZmlsbFJ1bGUnXSxcbiAgICAgIC4uLnN0cm9rZVByb3BzXG4gICAgfSkpO1xuICB9KTtcbn0iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBJY29uU3ZnT2JqZWN0ID0gcmVhZG9ubHkgKHJlYWRvbmx5IFtzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT5dKVtdO1xuXG5leHBvcnQgdHlwZSBJY29uTmFtZSA9IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBJY29uTWV0YWRhdGEge1xuICBuYW1lOiBJY29uTmFtZTtcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgdGFnczogc3RyaW5nW107XG4gIHBhY2s6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY29uRGF0YSB7XG4gIGljb246IEljb25TdmdPYmplY3Q7XG4gIG1ldGFkYXRhOiBJY29uTWV0YWRhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHVnZWljb25zUHJvcHMge1xuICBzaXplPzogc3RyaW5nIHwgbnVtYmVyO1xuICBzdHJva2VXaWR0aD86IG51bWJlcjtcbiAgaWNvbjogSWNvblN2Z09iamVjdDtcbiAgYWx0SWNvbj86IEljb25TdmdPYmplY3Q7XG4gIGNvbG9yPzogc3RyaW5nO1xuICBjbGFzcz86IHN0cmluZztcbiAgc2hvd0FsdD86IGJvb2xlYW47XG59ICJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogU1ZHIHBhdGggYXR0cmlidXRlcyAqL1xuZXhwb3J0IGludGVyZmFjZSBTdmdQYXRoQXR0cmlidXRlcyB7XG4gIGQ6IHN0cmluZztcbiAgZmlsbD86IHN0cmluZztcbiAgb3BhY2l0eT86IHN0cmluZztcbiAgZmlsbFJ1bGU/OiAnbm9uemVybycgfCAnZXZlbm9kZCc7XG4gIHN0cm9rZT86IHN0cmluZztcbiAgc3Ryb2tlV2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHN0cm9rZUxpbmVjYXA/OiAnYnV0dCcgfCAncm91bmQnIHwgJ3NxdWFyZSc7XG4gIHN0cm9rZUxpbmVqb2luPzogJ21pdGVyJyB8ICdyb3VuZCcgfCAnYmV2ZWwnO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG4vKiogSWNvbiBTVkcgb2JqZWN0IHR5cGUgLSB0dXBsZSBvZiBbZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGVzXSAqL1xuZXhwb3J0IHR5cGUgSWNvblN2Z09iamVjdCA9IHJlYWRvbmx5IChyZWFkb25seSBbc3RyaW5nLCBTdmdQYXRoQXR0cmlidXRlc10pW107XG5cbmV4cG9ydCB0eXBlIEljb25OYW1lID0gc3RyaW5nO1xuXG4vKiogSWNvbiBzdHlsZSB2YXJpYW50cyAqL1xuZXhwb3J0IHR5cGUgSWNvblN0eWxlID0gXG4gIHwgJ3N0cm9rZS1yb3VuZGVkJ1xuICB8ICdzdHJva2Utc2hhcnAnXG4gIHwgJ3N0cm9rZS1zdGFuZGFyZCdcbiAgfCAnc29saWQtcm91bmRlZCdcbiAgfCAnc29saWQtc2hhcnAnXG4gIHwgJ3NvbGlkLXN0YW5kYXJkJ1xuICB8ICdidWxrLXJvdW5kZWQnXG4gIHwgJ2R1b3RvbmUtcm91bmRlZCdcbiAgfCAnZHVvdG9uZS1zdGFuZGFyZCdcbiAgfCAndHdvdG9uZS1yb3VuZGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBJY29uTWV0YWRhdGEge1xuICBuYW1lOiBJY29uTmFtZTtcbiAgY2F0ZWdvcnk6IHN0cmluZztcbiAgdGFnczogc3RyaW5nW107XG4gIHBhY2s6IHN0cmluZztcbiAgc3R5bGU/OiBJY29uU3R5bGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNvbkRhdGEge1xuICBpY29uOiBJY29uU3ZnT2JqZWN0O1xuICBtZXRhZGF0YTogSWNvbk1ldGFkYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEh1Z2VpY29uc1Byb3BzIHtcbiAgc2l6ZT86IHN0cmluZyB8IG51bWJlcjtcbiAgc3Ryb2tlV2lkdGg/OiBudW1iZXI7XG4gIGFic29sdXRlU3Ryb2tlV2lkdGg/OiBib29sZWFuO1xuICBpY29uOiBJY29uU3ZnT2JqZWN0O1xuICBhbHRJY29uPzogSWNvblN2Z09iamVjdDtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGNsYXNzPzogc3RyaW5nO1xuICBzaG93QWx0PzogYm9vbGVhbjtcbn0gIl19