@animateicons/angular 0.0.0-stage → 0.1.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/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ # @animateicons/angular
2
+
3
+ ## 0.1.0
4
+
5
+ - First release. The standalone `AnimateIcons` component with signal inputs, and 1170 animated icons (669 Lucide and 501 Huge) as data from the `lucide` and `huge` subpaths.
6
+ - Supports Angular 20, 21 and 22, zoneless apps and zone.js apps, and renders the icon at rest on the server. Plays the same animations as `@animateicons/react`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Avijit Dey
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,75 @@
1
- # Temporary Holding Version
1
+ # @animateicons/angular
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 1170 animated SVG icons for Angular. One standalone component with signal inputs, server rendering and zoneless support. The same motion as [`@animateicons/react`](https://www.npmjs.com/package/@animateicons/react).
4
+
5
+ [![npm](https://img.shields.io/npm/v/@animateicons/angular?color=f45b48)](https://www.npmjs.com/package/@animateicons/angular)
6
+ [![license](https://img.shields.io/npm/l/@animateicons/angular?color=f45b48)](./LICENSE)
7
+
8
+ Docs: [animateicons.in/icons/docs/angular](https://animateicons.in/icons/docs/angular). Browse every icon at [animateicons.in](https://animateicons.in).
9
+
10
+ ## Installation
11
+
12
+ ```bash
13
+ npm i @animateicons/angular
14
+ ```
15
+
16
+ Works with Angular 20, 21 and 22, with or without zone.js.
17
+
18
+ ## Usage
19
+
20
+ ```ts
21
+ import { Component } from "@angular/core";
22
+ import { AnimateIcons } from "@animateicons/angular";
23
+ import { BellRing } from "@animateicons/angular/lucide";
24
+
25
+ @Component({
26
+ selector: "app-example",
27
+ imports: [AnimateIcons],
28
+ template: `<animate-icons [icon]="bellRing" [size]="32" color="tomato" />`,
29
+ })
30
+ export class Example {
31
+ bellRing = BellRing;
32
+ }
33
+ ```
34
+
35
+ Icons are data, named after the icon in PascalCase (`bell-ring` is `BellRing`), and come from the `lucide` or `huge` subpath. The icon animates on hover. Server rendering outputs the whole icon at rest.
36
+
37
+ ## Playing it yourself
38
+
39
+ ```ts
40
+ import { Component, viewChild } from "@angular/core";
41
+ import { AnimateIcons } from "@animateicons/angular";
42
+ import { Bell } from "@animateicons/angular/lucide";
43
+
44
+ @Component({
45
+ selector: "app-bell-button",
46
+ imports: [AnimateIcons],
47
+ template: `
48
+ <button (click)="icon()?.startAnimation()">
49
+ <animate-icons [icon]="bell" [isAnimated]="false" />
50
+ </button>
51
+ `,
52
+ })
53
+ export class BellButton {
54
+ bell = Bell;
55
+ icon = viewChild(AnimateIcons);
56
+ }
57
+ ```
58
+
59
+ `[isAnimated]="false"` turns hover off so the icon only plays when you call `startAnimation()`. The animation runs outside Angular's change detection, so hovering never re-checks your page.
60
+
61
+ ## Inputs
62
+
63
+ | Input | Type | Default |
64
+ | ------------ | ---------- | -------------- |
65
+ | `icon` | `IconData` | required |
66
+ | `size` | `number` | `24` |
67
+ | `color` | `string` | `currentColor` |
68
+ | `duration` | `number` | `1` |
69
+ | `isAnimated` | `boolean` | `true` |
70
+
71
+ `duration` multiplies every duration and delay. With reduced motion turned on, hover does nothing and `startAnimation()` keeps the icon at rest.
72
+
73
+ ## License
74
+
75
+ MIT. The icon shapes come from Lucide and Huge Icons, see [THIRD_PARTY_NOTICES.md](./THIRD_PARTY_NOTICES.md).
@@ -0,0 +1,81 @@
1
+ # Third-party notices
2
+
3
+ AnimateIcons icons are based on icon shapes from the projects below. Their licenses say the copyright notice must stay with copies of the icons, so the notices are included here.
4
+
5
+ ## Lucide
6
+
7
+ Source: https://github.com/lucide-icons/lucide
8
+
9
+ ```
10
+ ISC License
11
+
12
+ Copyright (c) 2026 Lucide Icons and Contributors
13
+
14
+ Permission to use, copy, modify, and/or distribute this software for any
15
+ purpose with or without fee is hereby granted, provided that the above
16
+ copyright notice and this permission notice appear in all copies.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
19
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
20
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
21
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
22
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
23
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
24
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25
+ ```
26
+
27
+ ### Feather
28
+
29
+ Some Lucide icons are derived from Feather (https://github.com/feathericons/feather). Lucide lists them in its license file: https://github.com/lucide-icons/lucide/blob/main/LICENSE
30
+
31
+ ```
32
+ The MIT License (MIT)
33
+
34
+ Copyright (c) 2013-present Cole Bemis
35
+
36
+ Permission is hereby granted, free of charge, to any person obtaining a copy
37
+ of this software and associated documentation files (the "Software"), to deal
38
+ in the Software without restriction, including without limitation the rights
39
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
40
+ copies of the Software, and to permit persons to whom the Software is
41
+ furnished to do so, subject to the following conditions:
42
+
43
+ The above copyright notice and this permission notice shall be included in all
44
+ copies or substantial portions of the Software.
45
+
46
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
47
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
48
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
49
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
50
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
51
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
52
+ SOFTWARE.
53
+ ```
54
+
55
+ ## Hugeicons
56
+
57
+ Source: https://github.com/hugeicons/hugeicons (the free `@hugeicons/core-free-icons` set)
58
+
59
+ ```
60
+ MIT License
61
+
62
+ Copyright (c) 2025 Hugeicons
63
+
64
+ Permission is hereby granted, free of charge, to any person obtaining a copy
65
+ of this software and associated documentation files (the "Software"), to deal
66
+ in the Software without restriction, including without limitation the rights
67
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
68
+ copies of the Software, and to permit persons to whom the Software is
69
+ furnished to do so, subject to the following conditions:
70
+
71
+ The above copyright notice and this permission notice shall be included in all
72
+ copies or substantial portions of the Software.
73
+
74
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
75
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
76
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
77
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
78
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
79
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
80
+ SOFTWARE.
81
+ ```
@@ -0,0 +1 @@
1
+ export * from "@animateicons/vanilla/huge";
@@ -0,0 +1 @@
1
+ export * from "@animateicons/vanilla/lucide";
@@ -0,0 +1,183 @@
1
+ import * as i0 from "@angular/core";
2
+ import { ChangeDetectionStrategy, Component, DOCUMENT, ElementRef, NgZone, afterRenderEffect, booleanAttribute, effect, inject, input, numberAttribute, signal } from "@angular/core";
3
+ import { attachIcon, renderIcon } from "@animateicons/vanilla";
4
+ var AnimateIcons = class AnimateIcons {
5
+ icon = input.required(...ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []);
6
+ size = input(24, {
7
+ ...ngDevMode ? { debugName: "size" } : /* istanbul ignore next */ {},
8
+ transform: numberAttribute
9
+ });
10
+ color = input(...ngDevMode ? [void 0, { debugName: "color" }] : /* istanbul ignore next */ []);
11
+ duration = input(1, {
12
+ ...ngDevMode ? { debugName: "duration" } : /* istanbul ignore next */ {},
13
+ transform: numberAttribute
14
+ });
15
+ isAnimated = input(true, {
16
+ ...ngDevMode ? { debugName: "isAnimated" } : /* istanbul ignore next */ {},
17
+ transform: booleanAttribute
18
+ });
19
+ host = inject(ElementRef).nativeElement;
20
+ document = inject(DOCUMENT);
21
+ zone = inject(NgZone);
22
+ svg = signal(void 0, ...ngDevMode ? [{ debugName: "svg" }] : /* istanbul ignore next */ []);
23
+ mounted;
24
+ constructor() {
25
+ effect(() => {
26
+ const svg = renderIcon(this.icon(), this.size(), this.document);
27
+ while (this.host.firstChild) this.host.removeChild(this.host.firstChild);
28
+ this.host.appendChild(svg);
29
+ this.svg.set(svg);
30
+ });
31
+ afterRenderEffect((onCleanup) => {
32
+ const svg = this.svg();
33
+ if (!svg) return;
34
+ const icon = this.icon();
35
+ const options = {
36
+ duration: this.duration(),
37
+ isAnimated: this.isAnimated()
38
+ };
39
+ const mounted = this.zone.runOutsideAngular(() => attachIcon(this.host, svg, icon, options));
40
+ this.mounted = mounted;
41
+ onCleanup(() => {
42
+ mounted.destroy();
43
+ if (this.mounted === mounted) this.mounted = void 0;
44
+ });
45
+ });
46
+ }
47
+ startAnimation() {
48
+ this.zone.runOutsideAngular(() => this.mounted?.startAnimation());
49
+ }
50
+ stopAnimation() {
51
+ this.zone.runOutsideAngular(() => this.mounted?.stopAnimation());
52
+ }
53
+ static ɵfac = i0.ɵɵngDeclareFactory({
54
+ minVersion: "12.0.0",
55
+ version: "22.2.3",
56
+ ngImport: i0,
57
+ type: AnimateIcons,
58
+ deps: [],
59
+ target: i0.ɵɵFactoryTarget.Component
60
+ });
61
+ static ɵcmp = i0.ɵɵngDeclareComponent({
62
+ minVersion: "17.1.0",
63
+ version: "22.2.3",
64
+ type: AnimateIcons,
65
+ isStandalone: true,
66
+ selector: "animate-icons",
67
+ inputs: {
68
+ icon: {
69
+ classPropertyName: "icon",
70
+ publicName: "icon",
71
+ isSignal: true,
72
+ isRequired: true,
73
+ transformFunction: null
74
+ },
75
+ size: {
76
+ classPropertyName: "size",
77
+ publicName: "size",
78
+ isSignal: true,
79
+ isRequired: false,
80
+ transformFunction: null
81
+ },
82
+ color: {
83
+ classPropertyName: "color",
84
+ publicName: "color",
85
+ isSignal: true,
86
+ isRequired: false,
87
+ transformFunction: null
88
+ },
89
+ duration: {
90
+ classPropertyName: "duration",
91
+ publicName: "duration",
92
+ isSignal: true,
93
+ isRequired: false,
94
+ transformFunction: null
95
+ },
96
+ isAnimated: {
97
+ classPropertyName: "isAnimated",
98
+ publicName: "isAnimated",
99
+ isSignal: true,
100
+ isRequired: false,
101
+ transformFunction: null
102
+ }
103
+ },
104
+ host: {
105
+ attributes: { "ngSkipHydration": "true" },
106
+ properties: {
107
+ "style.position": "'relative'",
108
+ "style.display": "'inline-flex'",
109
+ "style.color": "color()"
110
+ }
111
+ },
112
+ ngImport: i0,
113
+ template: "",
114
+ isInline: true,
115
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
116
+ });
117
+ };
118
+ i0.ɵɵngDeclareClassMetadata({
119
+ minVersion: "12.0.0",
120
+ version: "22.2.3",
121
+ ngImport: i0,
122
+ type: AnimateIcons,
123
+ decorators: [{
124
+ type: Component,
125
+ args: [{
126
+ selector: "animate-icons",
127
+ template: "",
128
+ changeDetection: ChangeDetectionStrategy.OnPush,
129
+ host: {
130
+ ngSkipHydration: "true",
131
+ "[style.position]": "'relative'",
132
+ "[style.display]": "'inline-flex'",
133
+ "[style.color]": "color()"
134
+ }
135
+ }]
136
+ }],
137
+ ctorParameters: () => [],
138
+ propDecorators: {
139
+ icon: [{
140
+ type: i0.Input,
141
+ args: [{
142
+ isSignal: true,
143
+ alias: "icon",
144
+ required: true
145
+ }]
146
+ }],
147
+ size: [{
148
+ type: i0.Input,
149
+ args: [{
150
+ isSignal: true,
151
+ alias: "size",
152
+ required: false
153
+ }]
154
+ }],
155
+ color: [{
156
+ type: i0.Input,
157
+ args: [{
158
+ isSignal: true,
159
+ alias: "color",
160
+ required: false
161
+ }]
162
+ }],
163
+ duration: [{
164
+ type: i0.Input,
165
+ args: [{
166
+ isSignal: true,
167
+ alias: "duration",
168
+ required: false
169
+ }]
170
+ }],
171
+ isAnimated: [{
172
+ type: i0.Input,
173
+ args: [{
174
+ isSignal: true,
175
+ alias: "isAnimated",
176
+ required: false
177
+ }]
178
+ }]
179
+ }
180
+ });
181
+ export { AnimateIcons };
182
+
183
+ //# sourceMappingURL=animateicons-angular.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animateicons-angular.mjs","names":[],"sources":["../../src/animate-icons.ts"],"sourcesContent":["import {\n\tafterRenderEffect,\n\tbooleanAttribute,\n\tChangeDetectionStrategy,\n\tComponent,\n\tDOCUMENT,\n\teffect,\n\tElementRef,\n\tinject,\n\tinput,\n\tNgZone,\n\tnumberAttribute,\n\tsignal,\n} from \"@angular/core\";\nimport {\n\tattachIcon,\n\trenderIcon,\n\ttype IconControls,\n\ttype IconData,\n\ttype MountedIcon,\n} from \"@animateicons/vanilla\";\n\n@Component({\n\tselector: \"animate-icons\",\n\ttemplate: \"\",\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\thost: {\n\t\tngSkipHydration: \"true\",\n\t\t\"[style.position]\": \"'relative'\",\n\t\t\"[style.display]\": \"'inline-flex'\",\n\t\t\"[style.color]\": \"color()\",\n\t},\n})\nexport class AnimateIcons implements IconControls {\n\treadonly icon = input.required<IconData>();\n\treadonly size = input(24, { transform: numberAttribute });\n\treadonly color = input<string>();\n\treadonly duration = input(1, { transform: numberAttribute });\n\treadonly isAnimated = input(true, { transform: booleanAttribute });\n\n\tprivate readonly host: HTMLElement = inject(ElementRef).nativeElement;\n\tprivate readonly document = inject(DOCUMENT);\n\tprivate readonly zone = inject(NgZone);\n\tprivate readonly svg = signal<SVGSVGElement | undefined>(undefined);\n\tprivate mounted: MountedIcon | undefined;\n\n\tconstructor() {\n\t\teffect(() => {\n\t\t\tconst svg = renderIcon(this.icon(), this.size(), this.document);\n\t\t\twhile (this.host.firstChild) this.host.removeChild(this.host.firstChild);\n\t\t\tthis.host.appendChild(svg);\n\t\t\tthis.svg.set(svg);\n\t\t});\n\n\t\tafterRenderEffect((onCleanup) => {\n\t\t\tconst svg = this.svg();\n\t\t\tif (!svg) return;\n\t\t\tconst icon = this.icon();\n\t\t\tconst options = {\n\t\t\t\tduration: this.duration(),\n\t\t\t\tisAnimated: this.isAnimated(),\n\t\t\t};\n\t\t\tconst mounted = this.zone.runOutsideAngular(() =>\n\t\t\t\tattachIcon(this.host, svg, icon, options),\n\t\t\t);\n\t\t\tthis.mounted = mounted;\n\t\t\tonCleanup(() => {\n\t\t\t\tmounted.destroy();\n\t\t\t\tif (this.mounted === mounted) this.mounted = undefined;\n\t\t\t});\n\t\t});\n\t}\n\n\tstartAnimation() {\n\t\tthis.zone.runOutsideAngular(() => this.mounted?.startAnimation());\n\t}\n\n\tstopAnimation() {\n\t\tthis.zone.runOutsideAngular(() => this.mounted?.stopAnimation());\n\t}\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,57 @@
1
1
  {
2
- "name": "@animateicons/angular",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
2
+ "name": "@animateicons/angular",
3
+ "version": "0.1.0",
4
+ "description": "Animated SVG icons for Angular. One standalone component with signal inputs, server rendering and zoneless support, with the same motion as @animateicons/react.",
5
+ "license": "MIT",
6
+ "author": "Avijit Dey",
7
+ "homepage": "https://animateicons.in",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/Avijit07x/animateicons.git",
11
+ "directory": "angular"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/Avijit07x/animateicons/issues"
15
+ },
16
+ "keywords": [
17
+ "icons",
18
+ "animated icons",
19
+ "animated svg",
20
+ "angular icons",
21
+ "angular",
22
+ "standalone component",
23
+ "motion icons",
24
+ "svg icons",
25
+ "lucide animated",
26
+ "huge animated",
27
+ "free animated icons"
28
+ ],
29
+ "sideEffects": false,
30
+ "peerDependencies": {
31
+ "@angular/core": "^20.0.0 || ^21.0.0 || ^22.0.0"
32
+ },
33
+ "dependencies": {
34
+ "@animateicons/vanilla": "^0.1.0",
35
+ "tslib": "^2.8.1"
36
+ },
37
+ "module": "fesm2022/animateicons-angular.mjs",
38
+ "typings": "types/animateicons-angular.d.ts",
39
+ "exports": {
40
+ "./package.json": {
41
+ "default": "./package.json"
42
+ },
43
+ ".": {
44
+ "types": "./types/animateicons-angular.d.ts",
45
+ "default": "./fesm2022/animateicons-angular.mjs"
46
+ },
47
+ "./huge": {
48
+ "types": "./types/animateicons-angular-huge.d.ts",
49
+ "default": "./fesm2022/animateicons-angular-huge.mjs"
50
+ },
51
+ "./lucide": {
52
+ "types": "./types/animateicons-angular-lucide.d.ts",
53
+ "default": "./fesm2022/animateicons-angular-lucide.mjs"
54
+ }
55
+ },
56
+ "type": "module"
57
+ }
@@ -0,0 +1 @@
1
+ export * from "@animateicons/vanilla/huge";
@@ -0,0 +1 @@
1
+ export * from "@animateicons/vanilla/lucide";
@@ -0,0 +1,46 @@
1
+ import { IconControls, IconControls as IconControls$1, IconData, IconData as IconData$1, IconLibrary, IconOptions } from "@animateicons/vanilla";
2
+ import * as i0 from "@angular/core";
3
+ export declare class AnimateIcons implements IconControls$1 {
4
+ readonly icon: import("@angular/core").InputSignal<IconData$1>;
5
+ readonly size: import("@angular/core").InputSignalWithTransform<number, unknown>;
6
+ readonly color: import("@angular/core").InputSignal<string | undefined>;
7
+ readonly duration: import("@angular/core").InputSignalWithTransform<number, unknown>;
8
+ readonly isAnimated: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
+ private readonly host;
10
+ private readonly document;
11
+ private readonly zone;
12
+ private readonly svg;
13
+ private mounted;
14
+ constructor();
15
+ startAnimation(): void;
16
+ stopAnimation(): void;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnimateIcons, never>;
18
+ static ɵcmp: i0.ɵɵComponentDeclaration<AnimateIcons, "animate-icons", never, {
19
+ "icon": {
20
+ "alias": "icon";
21
+ "required": true;
22
+ "isSignal": true;
23
+ };
24
+ "size": {
25
+ "alias": "size";
26
+ "required": false;
27
+ "isSignal": true;
28
+ };
29
+ "color": {
30
+ "alias": "color";
31
+ "required": false;
32
+ "isSignal": true;
33
+ };
34
+ "duration": {
35
+ "alias": "duration";
36
+ "required": false;
37
+ "isSignal": true;
38
+ };
39
+ "isAnimated": {
40
+ "alias": "isAnimated";
41
+ "required": false;
42
+ "isSignal": true;
43
+ };
44
+ }, {}, never, never, true, never>;
45
+ }
46
+ export type { IconControls, IconData, IconLibrary, IconOptions };