ngx-dev-toolbar 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/components/button/button.component.d.ts +12 -0
  2. package/components/card/card.component.d.ts +8 -0
  3. package/components/clickable-card/clickable-card.component.d.ts +11 -0
  4. package/components/icons/angular-icon.component.d.ts +5 -0
  5. package/components/icons/bug-icon.component.d.ts +6 -0
  6. package/components/icons/code-icon.component.d.ts +6 -0
  7. package/components/icons/database-icon.component.d.ts +6 -0
  8. package/components/icons/discord-icon.component.d.ts +6 -0
  9. package/components/icons/docs-icon.component.d.ts +6 -0
  10. package/components/icons/export-icon.component.d.ts +6 -0
  11. package/components/icons/gauge-icon.component.d.ts +6 -0
  12. package/components/icons/gear-icon.component.d.ts +6 -0
  13. package/components/icons/git-branch-icon.component.d.ts +6 -0
  14. package/components/icons/icon.component.d.ts +9 -0
  15. package/components/icons/icon.models.d.ts +1 -0
  16. package/components/icons/import-icon.component.d.ts +6 -0
  17. package/components/icons/layout-icon.component.d.ts +6 -0
  18. package/components/icons/lightbulb-icon.component.d.ts +6 -0
  19. package/components/icons/lighting-icon.component.d.ts +6 -0
  20. package/components/icons/moon-icon.component.d.ts +6 -0
  21. package/components/icons/network-icon.component.d.ts +6 -0
  22. package/components/icons/puzzle-icon.component.d.ts +6 -0
  23. package/components/icons/refresh-icon.component.d.ts +6 -0
  24. package/components/icons/star-icon.component.d.ts +6 -0
  25. package/components/icons/sun-icon.component.d.ts +6 -0
  26. package/components/icons/terminal-icon.component.d.ts +6 -0
  27. package/components/icons/toggle-left-icon.component.d.ts +6 -0
  28. package/components/icons/translate-icon.component.d.ts +6 -0
  29. package/components/icons/trash-icon.component.d.ts +6 -0
  30. package/components/icons/users-icon.component.d.ts +6 -0
  31. package/components/input/input.component.d.ts +10 -0
  32. package/components/link-button/link-button.component.d.ts +8 -0
  33. package/components/select/select.component.d.ts +25 -0
  34. package/components/tool-button/tool-button.component.d.ts +23 -0
  35. package/components/toolbar-tool/toolbar-tool.component.d.ts +30 -0
  36. package/components/toolbar-tool/toolbar-tool.models.d.ts +25 -0
  37. package/components/window/window.component.d.ts +16 -0
  38. package/dev-toolbar-state.service.d.ts +21 -0
  39. package/dev-toolbar.component.d.ts +18 -0
  40. package/fesm2022/ngx-dev-toolbar.mjs +3039 -0
  41. package/fesm2022/ngx-dev-toolbar.mjs.map +1 -0
  42. package/models/dev-tools.interface.d.ts +17 -0
  43. package/package.json +32 -9
  44. package/tools/feature-flags-tool/feature-flags-internal.service.d.ts +21 -0
  45. package/tools/feature-flags-tool/feature-flags-tool.component.d.ts +27 -0
  46. package/tools/feature-flags-tool/feature-flags.models.d.ts +9 -0
  47. package/tools/feature-flags-tool/feature-flags.service.d.ts +19 -0
  48. package/tools/home-tool/home-tool.component.d.ts +38 -0
  49. package/{src/tools/home-tool/settings.models.ts → tools/home-tool/settings.models.d.ts} +1 -1
  50. package/tools/home-tool/settings.service.d.ts +10 -0
  51. package/tools/language-tool/language-internal.service.d.ts +19 -0
  52. package/tools/language-tool/language-tool.component.d.ts +14 -0
  53. package/tools/language-tool/language.models.d.ts +4 -0
  54. package/tools/language-tool/language.service.d.ts +19 -0
  55. package/utils/storage.service.d.ts +18 -0
  56. package/eslint.config.cjs +0 -47
  57. package/ng-package.json +0 -7
  58. package/project.json +0 -37
  59. package/src/components/button/button.component.scss +0 -49
  60. package/src/components/button/button.component.ts +0 -36
  61. package/src/components/card/card.component.scss +0 -18
  62. package/src/components/card/card.component.ts +0 -30
  63. package/src/components/clickable-card/clickable-card.component.scss +0 -39
  64. package/src/components/clickable-card/clickable-card.component.ts +0 -34
  65. package/src/components/icons/angular-icon.component.ts +0 -35
  66. package/src/components/icons/bug-icon.component.ts +0 -23
  67. package/src/components/icons/code-icon.component.ts +0 -24
  68. package/src/components/icons/database-icon.component.ts +0 -27
  69. package/src/components/icons/discord-icon.component.ts +0 -23
  70. package/src/components/icons/docs-icon.component.ts +0 -23
  71. package/src/components/icons/export-icon.component.ts +0 -23
  72. package/src/components/icons/gauge-icon.component.ts +0 -27
  73. package/src/components/icons/gear-icon.component.ts +0 -27
  74. package/src/components/icons/git-branch-icon.component.ts +0 -27
  75. package/src/components/icons/icon.component.ts +0 -129
  76. package/src/components/icons/icon.models.ts +0 -27
  77. package/src/components/icons/import-icon.component.ts +0 -23
  78. package/src/components/icons/layout-icon.component.ts +0 -24
  79. package/src/components/icons/lightbulb-icon.component.ts +0 -23
  80. package/src/components/icons/lighting-icon.component.ts +0 -24
  81. package/src/components/icons/moon-icon.component.ts +0 -27
  82. package/src/components/icons/network-icon.component.ts +0 -27
  83. package/src/components/icons/puzzle-icon.component.ts +0 -27
  84. package/src/components/icons/refresh-icon.component.ts +0 -27
  85. package/src/components/icons/star-icon.component.ts +0 -27
  86. package/src/components/icons/sun-icon.component.ts +0 -27
  87. package/src/components/icons/terminal-icon.component.ts +0 -27
  88. package/src/components/icons/toggle-left-icon.component.ts +0 -27
  89. package/src/components/icons/translate-icon.component.ts +0 -23
  90. package/src/components/icons/trash-icon.component.ts +0 -23
  91. package/src/components/icons/users-icon.component.ts +0 -27
  92. package/src/components/input/input.component.ts +0 -67
  93. package/src/components/link-button/link-button.component.scss +0 -36
  94. package/src/components/link-button/link-button.component.ts +0 -29
  95. package/src/components/select/select.component.scss +0 -162
  96. package/src/components/select/select.component.ts +0 -127
  97. package/src/components/tool-button/tool-button.component.scss +0 -67
  98. package/src/components/tool-button/tool-button.component.ts +0 -126
  99. package/src/components/toolbar-tool/toolbar-tool.component.scss +0 -9
  100. package/src/components/toolbar-tool/toolbar-tool.component.ts +0 -169
  101. package/src/components/toolbar-tool/toolbar-tool.models.ts +0 -33
  102. package/src/components/window/window.component.scss +0 -95
  103. package/src/components/window/window.component.ts +0 -69
  104. package/src/dev-toolbar-state.service.ts +0 -89
  105. package/src/dev-toolbar.component.scss +0 -22
  106. package/src/dev-toolbar.component.ts +0 -105
  107. package/src/models/dev-tools.interface.ts +0 -19
  108. package/src/styles.scss +0 -342
  109. package/src/test-setup.ts +0 -12
  110. package/src/tools/feature-flags-tool/feature-flags-internal.service.ts +0 -96
  111. package/src/tools/feature-flags-tool/feature-flags-tool.component.ts +0 -261
  112. package/src/tools/feature-flags-tool/feature-flags.models.ts +0 -10
  113. package/src/tools/feature-flags-tool/feature-flags.service.ts +0 -28
  114. package/src/tools/home-tool/home-tool.component.scss +0 -67
  115. package/src/tools/home-tool/home-tool.component.ts +0 -197
  116. package/src/tools/home-tool/settings.service.spec.ts +0 -59
  117. package/src/tools/home-tool/settings.service.ts +0 -21
  118. package/src/tools/language-tool/language-internal.service.ts +0 -51
  119. package/src/tools/language-tool/language-tool.component.scss +0 -7
  120. package/src/tools/language-tool/language-tool.component.ts +0 -71
  121. package/src/tools/language-tool/language.models.ts +0 -4
  122. package/src/tools/language-tool/language.service.ts +0 -26
  123. package/src/utils/storage.service.spec.ts +0 -179
  124. package/src/utils/storage.service.ts +0 -80
  125. package/tsconfig.json +0 -28
  126. package/tsconfig.lib.json +0 -28
  127. package/tsconfig.lib.prod.json +0 -9
  128. package/tsconfig.spec.json +0 -29
  129. package/vite.config.mts +0 -27
  130. /package/{src/index.ts → index.d.ts} +0 -0
@@ -0,0 +1,3039 @@
1
+ import * as i0 from '@angular/core';
2
+ import { signal, computed, Injectable, Component, ChangeDetectionStrategy, input, inject, ElementRef, output, ViewChild, ContentChild, model, DestroyRef, isDevMode } from '@angular/core';
3
+ import { trigger, state, style, transition, animate } from '@angular/animations';
4
+ import * as i1 from '@angular/cdk/overlay';
5
+ import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
6
+ import { toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
+ import { BehaviorSubject, combineLatest, map, firstValueFrom, fromEvent } from 'rxjs';
8
+ import { filter, throttleTime } from 'rxjs/operators';
9
+ import * as i1$1 from '@angular/forms';
10
+ import { FormsModule } from '@angular/forms';
11
+ import * as i2 from '@angular/cdk/menu';
12
+ import { CdkMenuModule } from '@angular/cdk/menu';
13
+ import { CommonModule } from '@angular/common';
14
+
15
+ class DevToolbarStateService {
16
+ constructor() {
17
+ // Initial state
18
+ this.state = signal({
19
+ isHidden: true,
20
+ activeToolId: null,
21
+ delay: 3000,
22
+ error: null,
23
+ theme: 'dark',
24
+ });
25
+ // Selectors
26
+ this.isVisible = computed(() => !this.state().isHidden || this.hasActiveTool());
27
+ this.isDarkTheme = computed(() => this.state().theme === 'dark');
28
+ this.activeToolId = computed(() => this.state().activeToolId);
29
+ this.hasActiveTool = computed(() => this.state().activeToolId !== null);
30
+ this.error = computed(() => this.state().error);
31
+ this.theme = computed(() => this.state().theme);
32
+ /**
33
+ * The delay to hide the toolbar
34
+ */
35
+ this.delay = computed(() => this.state().delay);
36
+ }
37
+ // State updates
38
+ setVisibility(isVisible) {
39
+ if (isVisible) {
40
+ this.state.update((state) => ({
41
+ ...state,
42
+ isHidden: false,
43
+ }));
44
+ }
45
+ else {
46
+ if (this.activeToolId() === null) {
47
+ setTimeout(() => {
48
+ this.state.update((state) => ({
49
+ ...state,
50
+ isHidden: true,
51
+ }));
52
+ }, this.state().delay);
53
+ }
54
+ }
55
+ }
56
+ setTheme(theme) {
57
+ this.state.update((state) => ({
58
+ ...state,
59
+ theme,
60
+ }));
61
+ }
62
+ setActiveTool(toolId) {
63
+ this.state.update((state) => ({
64
+ ...state,
65
+ activeToolId: toolId,
66
+ }));
67
+ if (toolId === null) {
68
+ this.setVisibility(false);
69
+ }
70
+ else {
71
+ this.setVisibility(true);
72
+ }
73
+ }
74
+ // Public actions
75
+ toggleTool(toolId) {
76
+ const currentToolId = this.activeToolId();
77
+ this.setActiveTool(currentToolId === toolId ? null : toolId);
78
+ }
79
+ toggleVisibility() {
80
+ this.state.update((state) => ({
81
+ ...state,
82
+ isHidden: !state.isHidden,
83
+ }));
84
+ }
85
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
86
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarStateService, providedIn: 'root' }); }
87
+ }
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarStateService, decorators: [{
89
+ type: Injectable,
90
+ args: [{
91
+ providedIn: 'root',
92
+ }]
93
+ }] });
94
+
95
+ class AngularIconComponent {
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AngularIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
97
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: AngularIconComponent, isStandalone: true, selector: "ndt-angular-icon", ngImport: i0, template: `
98
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none">
99
+ <defs>
100
+ <linearGradient
101
+ id="angular-gradient"
102
+ x1="6"
103
+ x2="18"
104
+ y1="20"
105
+ y2="4"
106
+ gradientUnits="userSpaceOnUse"
107
+ >
108
+ <stop offset="0" stop-color="#E40035" />
109
+ <stop offset=".24" stop-color="#F60A48" />
110
+ <stop offset=".352" stop-color="#F20755" />
111
+ <stop offset=".494" stop-color="#DC087D" />
112
+ <stop offset=".745" stop-color="#9717E7" />
113
+ <stop offset="1" stop-color="#6C00F5" />
114
+ </linearGradient>
115
+ </defs>
116
+ <g fill="url(#angular-gradient)">
117
+ <polygon points="14.1,2.7 20.1,15.7 20.7,5.8" />
118
+ <polygon points="15.6,16.4 8.4,16.4 7.4,18.6 12,21.2 16.6,18.6" />
119
+ <polygon points="9.6,13.5 14.4,13.5 12,7.7" />
120
+ <polygon points="9.9,2.7 3.3,5.8 3.9,15.7" />
121
+ </g>
122
+ </svg>
123
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
124
+ }
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AngularIconComponent, decorators: [{
126
+ type: Component,
127
+ args: [{
128
+ selector: 'ndt-angular-icon',
129
+ standalone: true,
130
+ changeDetection: ChangeDetectionStrategy.OnPush,
131
+ template: `
132
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none">
133
+ <defs>
134
+ <linearGradient
135
+ id="angular-gradient"
136
+ x1="6"
137
+ x2="18"
138
+ y1="20"
139
+ y2="4"
140
+ gradientUnits="userSpaceOnUse"
141
+ >
142
+ <stop offset="0" stop-color="#E40035" />
143
+ <stop offset=".24" stop-color="#F60A48" />
144
+ <stop offset=".352" stop-color="#F20755" />
145
+ <stop offset=".494" stop-color="#DC087D" />
146
+ <stop offset=".745" stop-color="#9717E7" />
147
+ <stop offset="1" stop-color="#6C00F5" />
148
+ </linearGradient>
149
+ </defs>
150
+ <g fill="url(#angular-gradient)">
151
+ <polygon points="14.1,2.7 20.1,15.7 20.7,5.8" />
152
+ <polygon points="15.6,16.4 8.4,16.4 7.4,18.6 12,21.2 16.6,18.6" />
153
+ <polygon points="9.6,13.5 14.4,13.5 12,7.7" />
154
+ <polygon points="9.9,2.7 3.3,5.8 3.9,15.7" />
155
+ </g>
156
+ </svg>
157
+ `,
158
+ }]
159
+ }] });
160
+
161
+ class BugIconComponent {
162
+ constructor() {
163
+ this.fill = input('#FFFF');
164
+ }
165
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BugIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
166
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: BugIconComponent, isStandalone: true, selector: "ndt-bug-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
167
+ <svg
168
+ [attr.fill]="fill()"
169
+ xmlns="http://www.w3.org/2000/svg"
170
+ width="24"
171
+ height="24"
172
+ viewBox="0 0 256 256"
173
+ >
174
+ <path
175
+ d="M140,88a16,16,0,1,1,16,16A16,16,0,0,1,140,88ZM100,72a16,16,0,1,0,16,16A16,16,0,0,0,100,72Zm120,72a91.84,91.84,0,0,1-2.34,20.64L236.81,173a12,12,0,0,1-9.62,22l-18-7.85a92,92,0,0,1-162.46,0l-18,7.85a12,12,0,1,1-9.62-22l19.15-8.36A91.84,91.84,0,0,1,36,144v-4H16a12,12,0,0,1,0-24H36v-4a91.84,91.84,0,0,1,2.34-20.64L19.19,83a12,12,0,0,1,9.62-22l18,7.85a92,92,0,0,1,162.46,0l18-7.85a12,12,0,1,1,9.62,22l-19.15,8.36A91.84,91.84,0,0,1,220,112v4h20a12,12,0,0,1,0,24H220ZM60,116H196v-4a68,68,0,0,0-136,0Zm56,94.92V140H60v4A68.1,68.1,0,0,0,116,210.92ZM196,144v-4H140v70.92A68.1,68.1,0,0,0,196,144Z"
176
+ ></path>
177
+ </svg>
178
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
179
+ }
180
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BugIconComponent, decorators: [{
181
+ type: Component,
182
+ args: [{
183
+ selector: 'ndt-bug-icon',
184
+ standalone: true,
185
+ changeDetection: ChangeDetectionStrategy.OnPush,
186
+ template: `
187
+ <svg
188
+ [attr.fill]="fill()"
189
+ xmlns="http://www.w3.org/2000/svg"
190
+ width="24"
191
+ height="24"
192
+ viewBox="0 0 256 256"
193
+ >
194
+ <path
195
+ d="M140,88a16,16,0,1,1,16,16A16,16,0,0,1,140,88ZM100,72a16,16,0,1,0,16,16A16,16,0,0,0,100,72Zm120,72a91.84,91.84,0,0,1-2.34,20.64L236.81,173a12,12,0,0,1-9.62,22l-18-7.85a92,92,0,0,1-162.46,0l-18,7.85a12,12,0,1,1-9.62-22l19.15-8.36A91.84,91.84,0,0,1,36,144v-4H16a12,12,0,0,1,0-24H36v-4a91.84,91.84,0,0,1,2.34-20.64L19.19,83a12,12,0,0,1,9.62-22l18,7.85a92,92,0,0,1,162.46,0l18-7.85a12,12,0,1,1,9.62,22l-19.15,8.36A91.84,91.84,0,0,1,220,112v4h20a12,12,0,0,1,0,24H220ZM60,116H196v-4a68,68,0,0,0-136,0Zm56,94.92V140H60v4A68.1,68.1,0,0,0,116,210.92ZM196,144v-4H140v70.92A68.1,68.1,0,0,0,196,144Z"
196
+ ></path>
197
+ </svg>
198
+ `,
199
+ }]
200
+ }] });
201
+
202
+ class CodeIconComponent {
203
+ constructor() {
204
+ this.fill = input('#FFFF');
205
+ }
206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CodeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
207
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: CodeIconComponent, isStandalone: true, selector: "ndt-code-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
208
+ <svg
209
+ [attr.fill]="fill()"
210
+ xmlns="http://www.w3.org/2000/svg"
211
+ width="24"
212
+ height="24"
213
+ viewBox="0 0 256 256"
214
+ >
215
+ <path d="M240,128l-48,40H64L16,128,64,88H192Z" opacity="0.2"></path>
216
+ <path
217
+ d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"
218
+ ></path>
219
+ </svg>
220
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
221
+ }
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CodeIconComponent, decorators: [{
223
+ type: Component,
224
+ args: [{
225
+ selector: 'ndt-code-icon',
226
+ standalone: true,
227
+ template: `
228
+ <svg
229
+ [attr.fill]="fill()"
230
+ xmlns="http://www.w3.org/2000/svg"
231
+ width="24"
232
+ height="24"
233
+ viewBox="0 0 256 256"
234
+ >
235
+ <path d="M240,128l-48,40H64L16,128,64,88H192Z" opacity="0.2"></path>
236
+ <path
237
+ d="M69.12,94.15,28.5,128l40.62,33.85a8,8,0,1,1-10.24,12.29l-48-40a8,8,0,0,1,0-12.29l48-40a8,8,0,0,1,10.24,12.3Zm176,27.7-48-40a8,8,0,1,0-10.24,12.3L227.5,128l-40.62,33.85a8,8,0,1,0,10.24,12.29l48-40a8,8,0,0,0,0-12.29ZM162.73,32.48a8,8,0,0,0-10.25,4.79l-64,176a8,8,0,0,0,4.79,10.26A8.14,8.14,0,0,0,96,224a8,8,0,0,0,7.52-5.27l64-176A8,8,0,0,0,162.73,32.48Z"
238
+ ></path>
239
+ </svg>
240
+ `,
241
+ changeDetection: ChangeDetectionStrategy.OnPush,
242
+ }]
243
+ }] });
244
+
245
+ class DatabaseIconComponent {
246
+ constructor() {
247
+ this.fill = input('#FFFF');
248
+ }
249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DatabaseIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
250
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: DatabaseIconComponent, isStandalone: true, selector: "ndt-database-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
251
+ <svg
252
+ [attr.fill]="fill()"
253
+ xmlns="http://www.w3.org/2000/svg"
254
+ width="24"
255
+ height="24"
256
+ viewBox="0 0 256 256"
257
+ >
258
+ <path
259
+ d="M216,80c0,26.51-39.4,48-88,48S40,106.51,40,80s39.4-48,88-48S216,53.49,216,80Z"
260
+ opacity="0.2"
261
+ ></path>
262
+ <path
263
+ d="M128,24C74.17,24,32,48.6,32,80v96c0,31.4,42.17,56,96,56s96-24.6,96-56V80C224,48.6,181.83,24,128,24Zm80,104c0,9.62-7.88,19.43-21.61,26.92C170.93,163.35,150.19,168,128,168s-42.93-4.65-58.39-13.08C55.88,147.43,48,137.62,48,128V111.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64ZM69.61,53.08C85.07,44.65,105.81,40,128,40s42.93,4.65,58.39,13.08C200.12,60.57,208,70.38,208,80s-7.88,19.43-21.61,26.92C170.93,115.35,150.19,120,128,120s-42.93-4.65-58.39-13.08C55.88,99.43,48,89.62,48,80S55.88,60.57,69.61,53.08ZM186.39,202.92C170.93,211.35,150.19,216,128,216s-42.93-4.65-58.39-13.08C55.88,195.43,48,185.62,48,176V159.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64V176C208,185.62,200.12,195.43,186.39,202.92Z"
264
+ ></path>
265
+ </svg>
266
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
267
+ }
268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DatabaseIconComponent, decorators: [{
269
+ type: Component,
270
+ args: [{
271
+ selector: 'ndt-database-icon',
272
+ standalone: true,
273
+ changeDetection: ChangeDetectionStrategy.OnPush,
274
+ template: `
275
+ <svg
276
+ [attr.fill]="fill()"
277
+ xmlns="http://www.w3.org/2000/svg"
278
+ width="24"
279
+ height="24"
280
+ viewBox="0 0 256 256"
281
+ >
282
+ <path
283
+ d="M216,80c0,26.51-39.4,48-88,48S40,106.51,40,80s39.4-48,88-48S216,53.49,216,80Z"
284
+ opacity="0.2"
285
+ ></path>
286
+ <path
287
+ d="M128,24C74.17,24,32,48.6,32,80v96c0,31.4,42.17,56,96,56s96-24.6,96-56V80C224,48.6,181.83,24,128,24Zm80,104c0,9.62-7.88,19.43-21.61,26.92C170.93,163.35,150.19,168,128,168s-42.93-4.65-58.39-13.08C55.88,147.43,48,137.62,48,128V111.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64ZM69.61,53.08C85.07,44.65,105.81,40,128,40s42.93,4.65,58.39,13.08C200.12,60.57,208,70.38,208,80s-7.88,19.43-21.61,26.92C170.93,115.35,150.19,120,128,120s-42.93-4.65-58.39-13.08C55.88,99.43,48,89.62,48,80S55.88,60.57,69.61,53.08ZM186.39,202.92C170.93,211.35,150.19,216,128,216s-42.93-4.65-58.39-13.08C55.88,195.43,48,185.62,48,176V159.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64V176C208,185.62,200.12,195.43,186.39,202.92Z"
288
+ ></path>
289
+ </svg>
290
+ `,
291
+ }]
292
+ }] });
293
+
294
+ class DiscordIconComponent {
295
+ constructor() {
296
+ this.fill = input('#000000');
297
+ }
298
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DiscordIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
299
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: DiscordIconComponent, isStandalone: true, selector: "ndt-discord-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
300
+ <svg
301
+ [attr.fill]="fill()"
302
+ xmlns="http://www.w3.org/2000/svg"
303
+ width="24"
304
+ height="24"
305
+ viewBox="0 0 256 256"
306
+ >
307
+ <path
308
+ d="M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.93,15.93,0,0,1-9.06-18.51L38,58A16.07,16.07,0,0,1,51,46.14l36.06-5.93a16.22,16.22,0,0,1,18.26,11.88l3.26,12.84Q118.11,64,128,64t19.4.93l3.26-12.84a16.21,16.21,0,0,1,18.26-11.88L205,46.14A16.07,16.07,0,0,1,218,58l29.53,116.38A15.93,15.93,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56s0,0-.12,0h0L53.61,61.93a.17.17,0,0,0-.09,0L24,178.33,91,208a.23.23,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z"
309
+ ></path>
310
+ </svg>
311
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
312
+ }
313
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DiscordIconComponent, decorators: [{
314
+ type: Component,
315
+ args: [{
316
+ selector: 'ndt-discord-icon',
317
+ standalone: true,
318
+ changeDetection: ChangeDetectionStrategy.OnPush,
319
+ template: `
320
+ <svg
321
+ [attr.fill]="fill()"
322
+ xmlns="http://www.w3.org/2000/svg"
323
+ width="24"
324
+ height="24"
325
+ viewBox="0 0 256 256"
326
+ >
327
+ <path
328
+ d="M104,140a12,12,0,1,1-12-12A12,12,0,0,1,104,140Zm60-12a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm74.45,64.9-67,29.71a16.17,16.17,0,0,1-21.71-9.1l-8.11-22q-6.72.45-13.63.46t-13.63-.46l-8.11,22a16.18,16.18,0,0,1-21.71,9.1l-67-29.71a15.93,15.93,0,0,1-9.06-18.51L38,58A16.07,16.07,0,0,1,51,46.14l36.06-5.93a16.22,16.22,0,0,1,18.26,11.88l3.26,12.84Q118.11,64,128,64t19.4.93l3.26-12.84a16.21,16.21,0,0,1,18.26-11.88L205,46.14A16.07,16.07,0,0,1,218,58l29.53,116.38A15.93,15.93,0,0,1,238.45,192.9ZM232,178.28,202.47,62s0,0-.08,0L166.33,56a.17.17,0,0,0-.17,0l-2.83,11.14c5,.94,10,2.06,14.83,3.42A8,8,0,0,1,176,86.31a8.09,8.09,0,0,1-2.16-.3A172.25,172.25,0,0,0,128,80a172.25,172.25,0,0,0-45.84,6,8,8,0,1,1-4.32-15.4c4.82-1.36,9.78-2.48,14.82-3.42L89.83,56s0,0-.12,0h0L53.61,61.93a.17.17,0,0,0-.09,0L24,178.33,91,208a.23.23,0,0,0,.22,0L98,189.72a173.2,173.2,0,0,1-20.14-4.32A8,8,0,0,1,82.16,170,171.85,171.85,0,0,0,128,176a171.85,171.85,0,0,0,45.84-6,8,8,0,0,1,4.32,15.41A173.2,173.2,0,0,1,158,189.72L164.75,208a.22.22,0,0,0,.21,0Z"
329
+ ></path>
330
+ </svg>
331
+ `,
332
+ }]
333
+ }] });
334
+
335
+ class DocsIconComponent {
336
+ constructor() {
337
+ this.fill = input('#FFFF');
338
+ }
339
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DocsIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
340
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: DocsIconComponent, isStandalone: true, selector: "ndt-docs-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
341
+ <svg
342
+ [attr.fill]="fill()"
343
+ xmlns="http://www.w3.org/2000/svg"
344
+ width="24"
345
+ height="24"
346
+ viewBox="0 0 256 256"
347
+ >
348
+ <path
349
+ d="M213.66,66.34l-40-40A8,8,0,0,0,168,24H88A16,16,0,0,0,72,40V56H56A16,16,0,0,0,40,72V216a16,16,0,0,0,16,16H168a16,16,0,0,0,16-16V200h16a16,16,0,0,0,16-16V72A8,8,0,0,0,213.66,66.34ZM168,216H56V72h76.69L168,107.31v84.53c0,.06,0,.11,0,.16s0,.1,0,.16V216Zm32-32H184V104a8,8,0,0,0-2.34-5.66l-40-40A8,8,0,0,0,136,56H88V40h76.69L200,75.31Zm-56-32a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h48A8,8,0,0,1,144,152Zm0,32a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h48A8,8,0,0,1,144,184Z"
350
+ ></path>
351
+ </svg>
352
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
353
+ }
354
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DocsIconComponent, decorators: [{
355
+ type: Component,
356
+ args: [{
357
+ selector: 'ndt-docs-icon',
358
+ standalone: true,
359
+ changeDetection: ChangeDetectionStrategy.OnPush,
360
+ template: `
361
+ <svg
362
+ [attr.fill]="fill()"
363
+ xmlns="http://www.w3.org/2000/svg"
364
+ width="24"
365
+ height="24"
366
+ viewBox="0 0 256 256"
367
+ >
368
+ <path
369
+ d="M213.66,66.34l-40-40A8,8,0,0,0,168,24H88A16,16,0,0,0,72,40V56H56A16,16,0,0,0,40,72V216a16,16,0,0,0,16,16H168a16,16,0,0,0,16-16V200h16a16,16,0,0,0,16-16V72A8,8,0,0,0,213.66,66.34ZM168,216H56V72h76.69L168,107.31v84.53c0,.06,0,.11,0,.16s0,.1,0,.16V216Zm32-32H184V104a8,8,0,0,0-2.34-5.66l-40-40A8,8,0,0,0,136,56H88V40h76.69L200,75.31Zm-56-32a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h48A8,8,0,0,1,144,152Zm0,32a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h48A8,8,0,0,1,144,184Z"
370
+ ></path>
371
+ </svg>
372
+ `,
373
+ }]
374
+ }] });
375
+
376
+ class ExportIconComponent {
377
+ constructor() {
378
+ this.fill = input('#FFFF');
379
+ }
380
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ExportIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
381
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ExportIconComponent, isStandalone: true, selector: "ndt-export-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
382
+ <svg
383
+ [attr.fill]="fill()"
384
+ xmlns="http://www.w3.org/2000/svg"
385
+ width="24"
386
+ height="24"
387
+ viewBox="0 0 256 256"
388
+ >
389
+ <path
390
+ d="M216,112v96a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V112A16,16,0,0,1,56,96H80a8,8,0,0,1,0,16H56v96H200V112H176a8,8,0,0,1,0-16h24A16,16,0,0,1,216,112ZM93.66,69.66,120,43.31V136a8,8,0,0,0,16,0V43.31l26.34,26.35a8,8,0,0,0,11.32-11.32l-40-40a8,8,0,0,0-11.32,0l-40,40A8,8,0,0,0,93.66,69.66Z"
391
+ ></path>
392
+ </svg>
393
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
394
+ }
395
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ExportIconComponent, decorators: [{
396
+ type: Component,
397
+ args: [{
398
+ selector: 'ndt-export-icon',
399
+ standalone: true,
400
+ changeDetection: ChangeDetectionStrategy.OnPush,
401
+ template: `
402
+ <svg
403
+ [attr.fill]="fill()"
404
+ xmlns="http://www.w3.org/2000/svg"
405
+ width="24"
406
+ height="24"
407
+ viewBox="0 0 256 256"
408
+ >
409
+ <path
410
+ d="M216,112v96a16,16,0,0,1-16,16H56a16,16,0,0,1-16-16V112A16,16,0,0,1,56,96H80a8,8,0,0,1,0,16H56v96H200V112H176a8,8,0,0,1,0-16h24A16,16,0,0,1,216,112ZM93.66,69.66,120,43.31V136a8,8,0,0,0,16,0V43.31l26.34,26.35a8,8,0,0,0,11.32-11.32l-40-40a8,8,0,0,0-11.32,0l-40,40A8,8,0,0,0,93.66,69.66Z"
411
+ ></path>
412
+ </svg>
413
+ `,
414
+ }]
415
+ }] });
416
+
417
+ class GaugeIconComponent {
418
+ constructor() {
419
+ this.fill = input('#FFFF');
420
+ }
421
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GaugeIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
422
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: GaugeIconComponent, isStandalone: true, selector: "ndt-gauge-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
423
+ <svg
424
+ [attr.fill]="fill()"
425
+ xmlns="http://www.w3.org/2000/svg"
426
+ width="24"
427
+ height="24"
428
+ viewBox="0 0 256 256"
429
+ >
430
+ <path
431
+ d="M232,152a103.93,103.93,0,0,1-5.9,34.63,8,8,0,0,1-7.57,5.37H37.46a8.05,8.05,0,0,1-7.57-5.41A104.06,104.06,0,0,1,24,151.19C24.44,94,71.73,47.49,129,48A104,104,0,0,1,232,152Z"
432
+ opacity="0.2"
433
+ ></path>
434
+ <path
435
+ d="M114.34,154.34l96-96a8,8,0,0,1,11.32,11.32l-96,96a8,8,0,0,1-11.32-11.32ZM128,88a63.9,63.9,0,0,1,20.44,3.33,8,8,0,1,0,5.11-15.16A80,80,0,0,0,48.49,160.88,8,8,0,0,0,56.43,168c.29,0,.59,0,.89-.05a8,8,0,0,0,7.07-8.83A64.92,64.92,0,0,1,64,152,64.07,64.07,0,0,1,128,88Zm99.74,13a8,8,0,0,0-14.24,7.3,96.27,96.27,0,0,1,5,75.71l-181.1-.07A96.24,96.24,0,0,1,128,56h.88a95,95,0,0,1,42.82,10.5A8,8,0,1,0,179,52.27,110.8,110.8,0,0,0,129,40h-1A112.05,112.05,0,0,0,22.35,189.25,16.07,16.07,0,0,0,37.46,200H218.53a16,16,0,0,0,15.11-10.71,112.35,112.35,0,0,0-5.9-88.3Z"
436
+ ></path>
437
+ </svg>
438
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
439
+ }
440
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GaugeIconComponent, decorators: [{
441
+ type: Component,
442
+ args: [{
443
+ selector: 'ndt-gauge-icon',
444
+ standalone: true,
445
+ changeDetection: ChangeDetectionStrategy.OnPush,
446
+ template: `
447
+ <svg
448
+ [attr.fill]="fill()"
449
+ xmlns="http://www.w3.org/2000/svg"
450
+ width="24"
451
+ height="24"
452
+ viewBox="0 0 256 256"
453
+ >
454
+ <path
455
+ d="M232,152a103.93,103.93,0,0,1-5.9,34.63,8,8,0,0,1-7.57,5.37H37.46a8.05,8.05,0,0,1-7.57-5.41A104.06,104.06,0,0,1,24,151.19C24.44,94,71.73,47.49,129,48A104,104,0,0,1,232,152Z"
456
+ opacity="0.2"
457
+ ></path>
458
+ <path
459
+ d="M114.34,154.34l96-96a8,8,0,0,1,11.32,11.32l-96,96a8,8,0,0,1-11.32-11.32ZM128,88a63.9,63.9,0,0,1,20.44,3.33,8,8,0,1,0,5.11-15.16A80,80,0,0,0,48.49,160.88,8,8,0,0,0,56.43,168c.29,0,.59,0,.89-.05a8,8,0,0,0,7.07-8.83A64.92,64.92,0,0,1,64,152,64.07,64.07,0,0,1,128,88Zm99.74,13a8,8,0,0,0-14.24,7.3,96.27,96.27,0,0,1,5,75.71l-181.1-.07A96.24,96.24,0,0,1,128,56h.88a95,95,0,0,1,42.82,10.5A8,8,0,1,0,179,52.27,110.8,110.8,0,0,0,129,40h-1A112.05,112.05,0,0,0,22.35,189.25,16.07,16.07,0,0,0,37.46,200H218.53a16,16,0,0,0,15.11-10.71,112.35,112.35,0,0,0-5.9-88.3Z"
460
+ ></path>
461
+ </svg>
462
+ `,
463
+ }]
464
+ }] });
465
+
466
+ class GearIconComponent {
467
+ constructor() {
468
+ this.fill = input('#FFFF');
469
+ }
470
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GearIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
471
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: GearIconComponent, isStandalone: true, selector: "ndt-gear-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
472
+ <svg
473
+ [attr.fill]="fill()"
474
+ xmlns="http://www.w3.org/2000/svg"
475
+ width="24"
476
+ height="24"
477
+ viewBox="0 0 256 256"
478
+ >
479
+ <path
480
+ d="M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z"
481
+ opacity="0.2"
482
+ ></path>
483
+ <path
484
+ d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"
485
+ ></path>
486
+ </svg>
487
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
488
+ }
489
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GearIconComponent, decorators: [{
490
+ type: Component,
491
+ args: [{
492
+ selector: 'ndt-gear-icon',
493
+ standalone: true,
494
+ changeDetection: ChangeDetectionStrategy.OnPush,
495
+ template: `
496
+ <svg
497
+ [attr.fill]="fill()"
498
+ xmlns="http://www.w3.org/2000/svg"
499
+ width="24"
500
+ height="24"
501
+ viewBox="0 0 256 256"
502
+ >
503
+ <path
504
+ d="M207.86,123.18l16.78-21a99.14,99.14,0,0,0-10.07-24.29l-26.7-3a81,81,0,0,0-6.81-6.81l-3-26.71a99.43,99.43,0,0,0-24.3-10l-21,16.77a81.59,81.59,0,0,0-9.64,0l-21-16.78A99.14,99.14,0,0,0,77.91,41.43l-3,26.7a81,81,0,0,0-6.81,6.81l-26.71,3a99.43,99.43,0,0,0-10,24.3l16.77,21a81.59,81.59,0,0,0,0,9.64l-16.78,21a99.14,99.14,0,0,0,10.07,24.29l26.7,3a81,81,0,0,0,6.81,6.81l3,26.71a99.43,99.43,0,0,0,24.3,10l21-16.77a81.59,81.59,0,0,0,9.64,0l21,16.78a99.14,99.14,0,0,0,24.29-10.07l3-26.7a81,81,0,0,0,6.81-6.81l26.71-3a99.43,99.43,0,0,0,10-24.3l-16.77-21A81.59,81.59,0,0,0,207.86,123.18ZM128,168a40,40,0,1,1,40-40A40,40,0,0,1,128,168Z"
505
+ opacity="0.2"
506
+ ></path>
507
+ <path
508
+ d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.6,107.6,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.29,107.29,0,0,0-26.25-10.86,8,8,0,0,0-7.06,1.48L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.6,107.6,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8.06,8.06,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8.06,8.06,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"
509
+ ></path>
510
+ </svg>
511
+ `,
512
+ }]
513
+ }] });
514
+
515
+ class GitBranchIconComponent {
516
+ constructor() {
517
+ this.fill = input('#FFFF');
518
+ }
519
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GitBranchIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
520
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: GitBranchIconComponent, isStandalone: true, selector: "ndt-git-branch-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
521
+ <svg
522
+ [attr.fill]="fill()"
523
+ xmlns="http://www.w3.org/2000/svg"
524
+ width="24"
525
+ height="24"
526
+ viewBox="0 0 256 256"
527
+ >
528
+ <path
529
+ d="M224,64a24,24,0,1,1-24-24A24,24,0,0,1,224,64Z"
530
+ opacity="0.2"
531
+ ></path>
532
+ <path
533
+ d="M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z"
534
+ ></path>
535
+ </svg>
536
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
537
+ }
538
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GitBranchIconComponent, decorators: [{
539
+ type: Component,
540
+ args: [{
541
+ selector: 'ndt-git-branch-icon',
542
+ standalone: true,
543
+ changeDetection: ChangeDetectionStrategy.OnPush,
544
+ template: `
545
+ <svg
546
+ [attr.fill]="fill()"
547
+ xmlns="http://www.w3.org/2000/svg"
548
+ width="24"
549
+ height="24"
550
+ viewBox="0 0 256 256"
551
+ >
552
+ <path
553
+ d="M224,64a24,24,0,1,1-24-24A24,24,0,0,1,224,64Z"
554
+ opacity="0.2"
555
+ ></path>
556
+ <path
557
+ d="M232,64a32,32,0,1,0-40,31v17a8,8,0,0,1-8,8H96a23.84,23.84,0,0,0-8,1.38V95a32,32,0,1,0-16,0v66a32,32,0,1,0,16,0V144a8,8,0,0,1,8-8h88a24,24,0,0,0,24-24V95A32.06,32.06,0,0,0,232,64ZM64,64A16,16,0,1,1,80,80,16,16,0,0,1,64,64ZM96,192a16,16,0,1,1-16-16A16,16,0,0,1,96,192ZM200,80a16,16,0,1,1,16-16A16,16,0,0,1,200,80Z"
558
+ ></path>
559
+ </svg>
560
+ `,
561
+ }]
562
+ }] });
563
+
564
+ class ImportIconComponent {
565
+ constructor() {
566
+ this.fill = input('#FFFF');
567
+ }
568
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ImportIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
569
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ImportIconComponent, isStandalone: true, selector: "ndt-import-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
570
+ <svg
571
+ [attr.fill]="fill()"
572
+ xmlns="http://www.w3.org/2000/svg"
573
+ width="24"
574
+ height="24"
575
+ viewBox="0 0 256 256"
576
+ >
577
+ <path
578
+ d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"
579
+ ></path>
580
+ </svg>
581
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
582
+ }
583
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ImportIconComponent, decorators: [{
584
+ type: Component,
585
+ args: [{
586
+ selector: 'ndt-import-icon',
587
+ standalone: true,
588
+ changeDetection: ChangeDetectionStrategy.OnPush,
589
+ template: `
590
+ <svg
591
+ [attr.fill]="fill()"
592
+ xmlns="http://www.w3.org/2000/svg"
593
+ width="24"
594
+ height="24"
595
+ viewBox="0 0 256 256"
596
+ >
597
+ <path
598
+ d="M224,144v64a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V144a8,8,0,0,1,16,0v56H208V144a8,8,0,0,1,16,0Zm-101.66,5.66a8,8,0,0,0,11.32,0l40-40a8,8,0,0,0-11.32-11.32L136,124.69V32a8,8,0,0,0-16,0v92.69L93.66,98.34a8,8,0,0,0-11.32,11.32Z"
599
+ ></path>
600
+ </svg>
601
+ `,
602
+ }]
603
+ }] });
604
+
605
+ class LayoutIconComponent {
606
+ constructor() {
607
+ this.fill = input('#FFFF');
608
+ }
609
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LayoutIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
610
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: LayoutIconComponent, isStandalone: true, selector: "ndt-layout-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
611
+ <svg
612
+ [attr.fill]="fill()"
613
+ xmlns="http://www.w3.org/2000/svg"
614
+ width="24"
615
+ height="24"
616
+ viewBox="0 0 256 256"
617
+ >
618
+ <path d="M104,104V208H40a8,8,0,0,1-8-8V104Z" opacity="0.2"></path>
619
+ <path
620
+ d="M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,16V96H40V56ZM40,112H96v88H40Zm176,88H112V112H216v88Z"
621
+ ></path>
622
+ </svg>
623
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
624
+ }
625
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LayoutIconComponent, decorators: [{
626
+ type: Component,
627
+ args: [{
628
+ selector: 'ndt-layout-icon',
629
+ standalone: true,
630
+ changeDetection: ChangeDetectionStrategy.OnPush,
631
+ template: `
632
+ <svg
633
+ [attr.fill]="fill()"
634
+ xmlns="http://www.w3.org/2000/svg"
635
+ width="24"
636
+ height="24"
637
+ viewBox="0 0 256 256"
638
+ >
639
+ <path d="M104,104V208H40a8,8,0,0,1-8-8V104Z" opacity="0.2"></path>
640
+ <path
641
+ d="M216,40H40A16,16,0,0,0,24,56V200a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V56A16,16,0,0,0,216,40Zm0,16V96H40V56ZM40,112H96v88H40Zm176,88H112V112H216v88Z"
642
+ ></path>
643
+ </svg>
644
+ `,
645
+ }]
646
+ }] });
647
+
648
+ class LightbulbIconComponent {
649
+ constructor() {
650
+ this.fill = input('#FFFF');
651
+ }
652
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LightbulbIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
653
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: LightbulbIconComponent, isStandalone: true, selector: "ndt-lightbulb-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
654
+ <svg
655
+ [attr.fill]="fill()"
656
+ xmlns="http://www.w3.org/2000/svg"
657
+ width="24"
658
+ height="24"
659
+ viewBox="0 0 256 256"
660
+ >
661
+ <path
662
+ d="M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.49C39.74,56.83,78.26,17.14,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.65,71.65,0,0,0,27.64,56.3A32,32,0,0,1,96,186v6h64v-6a32.15,32.15,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Zm-16.11-9.34a57.6,57.6,0,0,0-46.56-46.55,8,8,0,0,0-2.66,15.78c16.57,2.79,30.63,16.85,33.44,33.45A8,8,0,0,0,176,104a9,9,0,0,0,1.35-.11A8,8,0,0,0,183.89,94.66Z"
663
+ ></path>
664
+ </svg>
665
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
666
+ }
667
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LightbulbIconComponent, decorators: [{
668
+ type: Component,
669
+ args: [{
670
+ selector: 'ndt-lightbulb-icon',
671
+ standalone: true,
672
+ changeDetection: ChangeDetectionStrategy.OnPush,
673
+ template: `
674
+ <svg
675
+ [attr.fill]="fill()"
676
+ xmlns="http://www.w3.org/2000/svg"
677
+ width="24"
678
+ height="24"
679
+ viewBox="0 0 256 256"
680
+ >
681
+ <path
682
+ d="M176,232a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,232Zm40-128a87.55,87.55,0,0,1-33.64,69.21A16.24,16.24,0,0,0,176,186v6a16,16,0,0,1-16,16H96a16,16,0,0,1-16-16v-6a16,16,0,0,0-6.23-12.66A87.59,87.59,0,0,1,40,104.49C39.74,56.83,78.26,17.14,125.88,16A88,88,0,0,1,216,104Zm-16,0a72,72,0,0,0-73.74-72c-39,.92-70.47,33.39-70.26,72.39a71.65,71.65,0,0,0,27.64,56.3A32,32,0,0,1,96,186v6h64v-6a32.15,32.15,0,0,1,12.47-25.35A71.65,71.65,0,0,0,200,104Zm-16.11-9.34a57.6,57.6,0,0,0-46.56-46.55,8,8,0,0,0-2.66,15.78c16.57,2.79,30.63,16.85,33.44,33.45A8,8,0,0,0,176,104a9,9,0,0,0,1.35-.11A8,8,0,0,0,183.89,94.66Z"
683
+ ></path>
684
+ </svg>
685
+ `,
686
+ }]
687
+ }] });
688
+
689
+ class LightingIconComponent {
690
+ constructor() {
691
+ this.fill = input('#FFFF');
692
+ }
693
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LightingIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
694
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: LightingIconComponent, isStandalone: true, selector: "ndt-lighting-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
695
+ <svg
696
+ [attr.fill]="fill()"
697
+ xmlns="http://www.w3.org/2000/svg"
698
+ width="24"
699
+ height="24"
700
+ viewBox="0 0 256 256"
701
+ >
702
+ <path d="M96,240l16-80L48,136,160,16,144,96l64,24Z" opacity="0.2"></path>
703
+ <path
704
+ d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"
705
+ ></path>
706
+ </svg>
707
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
708
+ }
709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: LightingIconComponent, decorators: [{
710
+ type: Component,
711
+ args: [{
712
+ selector: 'ndt-lighting-icon',
713
+ standalone: true,
714
+ changeDetection: ChangeDetectionStrategy.OnPush,
715
+ template: `
716
+ <svg
717
+ [attr.fill]="fill()"
718
+ xmlns="http://www.w3.org/2000/svg"
719
+ width="24"
720
+ height="24"
721
+ viewBox="0 0 256 256"
722
+ >
723
+ <path d="M96,240l16-80L48,136,160,16,144,96l64,24Z" opacity="0.2"></path>
724
+ <path
725
+ d="M215.79,118.17a8,8,0,0,0-5-5.66L153.18,90.9l14.66-73.33a8,8,0,0,0-13.69-7l-112,120a8,8,0,0,0,3,13l57.63,21.61L88.16,238.43a8,8,0,0,0,13.69,7l112-120A8,8,0,0,0,215.79,118.17ZM109.37,214l10.47-52.38a8,8,0,0,0-5-9.06L62,132.71l84.62-90.66L136.16,94.43a8,8,0,0,0,5,9.06l52.8,19.8Z"
726
+ ></path>
727
+ </svg>
728
+ `,
729
+ }]
730
+ }] });
731
+
732
+ class MoonIconComponent {
733
+ constructor() {
734
+ this.fill = input('#FFFF');
735
+ }
736
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MoonIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
737
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: MoonIconComponent, isStandalone: true, selector: "ndt-moon-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
738
+ <svg
739
+ [attr.fill]="fill()"
740
+ xmlns="http://www.w3.org/2000/svg"
741
+ width="24"
742
+ height="24"
743
+ viewBox="0 0 256 256"
744
+ >
745
+ <path
746
+ d="M224.3,150.3a8.1,8.1,0,0,0-7.8-5.7l-2.2.4A84,84,0,0,1,111,41.6a5.7,5.7,0,0,0,.3-1.8A7.9,7.9,0,0,0,109,33a8.1,8.1,0,0,0-8.1-1.1A104,104,0,1,0,225.4,156.9,8.1,8.1,0,0,0,224.3,150.3Z"
747
+ opacity="0.2"
748
+ />
749
+ <path
750
+ d="M233.5,137.3a12.1,12.1,0,0,0-11.8-8.6,7.9,7.9,0,0,0-1.3.1,80,80,0,0,1-98.2-98.2,12,12,0,0,0-15.6-14A104.2,104.2,0,0,0,32,120c0,57.4,46.6,104,104,104A104.2,104.2,0,0,0,239.4,149.6,12,12,0,0,0,233.5,137.3ZM136,208A88,88,0,0,1,48,120a87.6,87.6,0,0,1,64.8-84.7,96,96,0,0,0,111.9,112A87.6,87.6,0,0,1,136,208Z"
751
+ />
752
+ </svg>
753
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
754
+ }
755
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MoonIconComponent, decorators: [{
756
+ type: Component,
757
+ args: [{
758
+ selector: 'ndt-moon-icon',
759
+ standalone: true,
760
+ changeDetection: ChangeDetectionStrategy.OnPush,
761
+ template: `
762
+ <svg
763
+ [attr.fill]="fill()"
764
+ xmlns="http://www.w3.org/2000/svg"
765
+ width="24"
766
+ height="24"
767
+ viewBox="0 0 256 256"
768
+ >
769
+ <path
770
+ d="M224.3,150.3a8.1,8.1,0,0,0-7.8-5.7l-2.2.4A84,84,0,0,1,111,41.6a5.7,5.7,0,0,0,.3-1.8A7.9,7.9,0,0,0,109,33a8.1,8.1,0,0,0-8.1-1.1A104,104,0,1,0,225.4,156.9,8.1,8.1,0,0,0,224.3,150.3Z"
771
+ opacity="0.2"
772
+ />
773
+ <path
774
+ d="M233.5,137.3a12.1,12.1,0,0,0-11.8-8.6,7.9,7.9,0,0,0-1.3.1,80,80,0,0,1-98.2-98.2,12,12,0,0,0-15.6-14A104.2,104.2,0,0,0,32,120c0,57.4,46.6,104,104,104A104.2,104.2,0,0,0,239.4,149.6,12,12,0,0,0,233.5,137.3ZM136,208A88,88,0,0,1,48,120a87.6,87.6,0,0,1,64.8-84.7,96,96,0,0,0,111.9,112A87.6,87.6,0,0,1,136,208Z"
775
+ />
776
+ </svg>
777
+ `,
778
+ }]
779
+ }] });
780
+
781
+ class NetworkIconComponent {
782
+ constructor() {
783
+ this.fill = input('#FFFF');
784
+ }
785
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NetworkIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
786
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: NetworkIconComponent, isStandalone: true, selector: "ndt-network-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
787
+ <svg
788
+ [attr.fill]="fill()"
789
+ xmlns="http://www.w3.org/2000/svg"
790
+ width="24"
791
+ height="24"
792
+ viewBox="0 0 256 256"
793
+ >
794
+ <path
795
+ d="M152,40V72a8,8,0,0,1-8,8H112a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h32A8,8,0,0,1,152,40ZM80,168H48a8,8,0,0,0-8,8v32a8,8,0,0,0,8,8H80a8,8,0,0,0,8-8V176A8,8,0,0,0,80,168Zm128,0H176a8,8,0,0,0-8,8v32a8,8,0,0,0,8,8h32a8,8,0,0,0,8-8V176A8,8,0,0,0,208,168Z"
796
+ opacity="0.2"
797
+ ></path>
798
+ <path
799
+ d="M232,112H136V88h8a16,16,0,0,0,16-16V40a16,16,0,0,0-16-16H112A16,16,0,0,0,96,40V72a16,16,0,0,0,16,16h8v24H24a8,8,0,0,0,0,16H56v32H48a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16H80a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16H72V128H184v32h-8a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16h-8V128h32a8,8,0,0,0,0-16ZM112,40h32V72H112ZM80,208H48V176H80Zm128,0H176V176h32Z"
800
+ ></path>
801
+ </svg>
802
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
803
+ }
804
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NetworkIconComponent, decorators: [{
805
+ type: Component,
806
+ args: [{
807
+ selector: 'ndt-network-icon',
808
+ standalone: true,
809
+ changeDetection: ChangeDetectionStrategy.OnPush,
810
+ template: `
811
+ <svg
812
+ [attr.fill]="fill()"
813
+ xmlns="http://www.w3.org/2000/svg"
814
+ width="24"
815
+ height="24"
816
+ viewBox="0 0 256 256"
817
+ >
818
+ <path
819
+ d="M152,40V72a8,8,0,0,1-8,8H112a8,8,0,0,1-8-8V40a8,8,0,0,1,8-8h32A8,8,0,0,1,152,40ZM80,168H48a8,8,0,0,0-8,8v32a8,8,0,0,0,8,8H80a8,8,0,0,0,8-8V176A8,8,0,0,0,80,168Zm128,0H176a8,8,0,0,0-8,8v32a8,8,0,0,0,8,8h32a8,8,0,0,0,8-8V176A8,8,0,0,0,208,168Z"
820
+ opacity="0.2"
821
+ ></path>
822
+ <path
823
+ d="M232,112H136V88h8a16,16,0,0,0,16-16V40a16,16,0,0,0-16-16H112A16,16,0,0,0,96,40V72a16,16,0,0,0,16,16h8v24H24a8,8,0,0,0,0,16H56v32H48a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16H80a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16H72V128H184v32h-8a16,16,0,0,0-16,16v32a16,16,0,0,0,16,16h32a16,16,0,0,0,16-16V176a16,16,0,0,0-16-16h-8V128h32a8,8,0,0,0,0-16ZM112,40h32V72H112ZM80,208H48V176H80Zm128,0H176V176h32Z"
824
+ ></path>
825
+ </svg>
826
+ `,
827
+ }]
828
+ }] });
829
+
830
+ class PuzzleIconComponent {
831
+ constructor() {
832
+ this.fill = input('#FFFF');
833
+ }
834
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PuzzleIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
835
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: PuzzleIconComponent, isStandalone: true, selector: "ndt-puzzle-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
836
+ <svg
837
+ [attr.fill]="fill()"
838
+ xmlns="http://www.w3.org/2000/svg"
839
+ width="24"
840
+ height="24"
841
+ viewBox="0 0 256 256"
842
+ >
843
+ <path
844
+ d="M204,168a28,28,0,0,0,12-2.69V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V165.31a28,28,0,1,1,0-50.62V72a8,8,0,0,1,8-8h46.69a28,28,0,1,1,50.61,0H208a8,8,0,0,1,8,8v42.69A28,28,0,1,0,204,168Z"
845
+ opacity="0.2"
846
+ ></path>
847
+ <path
848
+ d="M220.27,158.54a8,8,0,0,0-7.7-.46,20,20,0,1,1,0-36.16A8,8,0,0,0,224,114.69V72a16,16,0,0,0-16-16H171.78a35.36,35.36,0,0,0,.22-4,36.15,36.15,0,0,0-11.36-26.25,36,36,0,0,0-60.55,23.63,36.56,36.56,0,0,0,.14,6.62H64A16,16,0,0,0,48,72v32.22a35.36,35.36,0,0,0-4-.22,36.12,36.12,0,0,0-26.24,11.36,35.7,35.7,0,0,0-9.69,27,36.08,36.08,0,0,0,33.31,33.6,36.56,36.56,0,0,0,6.62-.14V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V165.31A8,8,0,0,0,220.27,158.54ZM208,208H64V165.31a8,8,0,0,0-11.43-7.23,20,20,0,1,1,0-36.16A8,8,0,0,0,64,114.69V72h46.69a8,8,0,0,0,7.23-11.43,20,20,0,1,1,36.16,0A8,8,0,0,0,161.31,72H208v32.23a35.68,35.68,0,0,0-6.62-.14A36,36,0,0,0,204,176a35.36,35.36,0,0,0,4-.22Z"
849
+ ></path>
850
+ </svg>
851
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
852
+ }
853
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PuzzleIconComponent, decorators: [{
854
+ type: Component,
855
+ args: [{
856
+ selector: 'ndt-puzzle-icon',
857
+ standalone: true,
858
+ changeDetection: ChangeDetectionStrategy.OnPush,
859
+ template: `
860
+ <svg
861
+ [attr.fill]="fill()"
862
+ xmlns="http://www.w3.org/2000/svg"
863
+ width="24"
864
+ height="24"
865
+ viewBox="0 0 256 256"
866
+ >
867
+ <path
868
+ d="M204,168a28,28,0,0,0,12-2.69V208a8,8,0,0,1-8,8H64a8,8,0,0,1-8-8V165.31a28,28,0,1,1,0-50.62V72a8,8,0,0,1,8-8h46.69a28,28,0,1,1,50.61,0H208a8,8,0,0,1,8,8v42.69A28,28,0,1,0,204,168Z"
869
+ opacity="0.2"
870
+ ></path>
871
+ <path
872
+ d="M220.27,158.54a8,8,0,0,0-7.7-.46,20,20,0,1,1,0-36.16A8,8,0,0,0,224,114.69V72a16,16,0,0,0-16-16H171.78a35.36,35.36,0,0,0,.22-4,36.15,36.15,0,0,0-11.36-26.25,36,36,0,0,0-60.55,23.63,36.56,36.56,0,0,0,.14,6.62H64A16,16,0,0,0,48,72v32.22a35.36,35.36,0,0,0-4-.22,36.12,36.12,0,0,0-26.24,11.36,35.7,35.7,0,0,0-9.69,27,36.08,36.08,0,0,0,33.31,33.6,36.56,36.56,0,0,0,6.62-.14V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V165.31A8,8,0,0,0,220.27,158.54ZM208,208H64V165.31a8,8,0,0,0-11.43-7.23,20,20,0,1,1,0-36.16A8,8,0,0,0,64,114.69V72h46.69a8,8,0,0,0,7.23-11.43,20,20,0,1,1,36.16,0A8,8,0,0,0,161.31,72H208v32.23a35.68,35.68,0,0,0-6.62-.14A36,36,0,0,0,204,176a35.36,35.36,0,0,0,4-.22Z"
873
+ ></path>
874
+ </svg>
875
+ `,
876
+ }]
877
+ }] });
878
+
879
+ class RefreshIconComponent {
880
+ constructor() {
881
+ this.fill = input('#FFFF');
882
+ }
883
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: RefreshIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
884
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: RefreshIconComponent, isStandalone: true, selector: "ndt-refresh-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
885
+ <svg
886
+ [attr.fill]="fill()"
887
+ xmlns="http://www.w3.org/2000/svg"
888
+ width="24"
889
+ height="24"
890
+ viewBox="0 0 256 256"
891
+ >
892
+ <path
893
+ d="M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z"
894
+ opacity="0.2"
895
+ ></path>
896
+ <path
897
+ d="M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1,0-16h28.69L182.06,73.37a79.56,79.56,0,0,0-56.13-23.43h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27a96,96,0,0,1,135,.79L208,76.69V48a8,8,0,0,1,16,0ZM186.41,183.29a80,80,0,0,1-112.47-.66L59.31,168H88a8,8,0,0,0,0-16H40a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V179.31l14.63,14.63A95.43,95.43,0,0,0,130,222.06h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z"
898
+ ></path>
899
+ </svg>
900
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
901
+ }
902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: RefreshIconComponent, decorators: [{
903
+ type: Component,
904
+ args: [{
905
+ selector: 'ndt-refresh-icon',
906
+ standalone: true,
907
+ changeDetection: ChangeDetectionStrategy.OnPush,
908
+ template: `
909
+ <svg
910
+ [attr.fill]="fill()"
911
+ xmlns="http://www.w3.org/2000/svg"
912
+ width="24"
913
+ height="24"
914
+ viewBox="0 0 256 256"
915
+ >
916
+ <path
917
+ d="M216,128a88,88,0,1,1-88-88A88,88,0,0,1,216,128Z"
918
+ opacity="0.2"
919
+ ></path>
920
+ <path
921
+ d="M224,48V96a8,8,0,0,1-8,8H168a8,8,0,0,1,0-16h28.69L182.06,73.37a79.56,79.56,0,0,0-56.13-23.43h-.45A79.52,79.52,0,0,0,69.59,72.71,8,8,0,0,1,58.41,61.27a96,96,0,0,1,135,.79L208,76.69V48a8,8,0,0,1,16,0ZM186.41,183.29a80,80,0,0,1-112.47-.66L59.31,168H88a8,8,0,0,0,0-16H40a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V179.31l14.63,14.63A95.43,95.43,0,0,0,130,222.06h.53a95.36,95.36,0,0,0,67.07-27.33,8,8,0,0,0-11.18-11.44Z"
922
+ ></path>
923
+ </svg>
924
+ `,
925
+ }]
926
+ }] });
927
+
928
+ class StarIconComponent {
929
+ constructor() {
930
+ this.fill = input('#FFFF');
931
+ }
932
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: StarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
933
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: StarIconComponent, isStandalone: true, selector: "ndt-star-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
934
+ <svg
935
+ [attr.fill]="fill()"
936
+ xmlns="http://www.w3.org/2000/svg"
937
+ width="24"
938
+ height="24"
939
+ viewBox="0 0 256 256"
940
+ >
941
+ <path
942
+ d="M229.06,108.79l-48.7,42,14.88,62.79a8.4,8.4,0,0,1-12.52,9.17L128,189.09,73.28,222.74a8.4,8.4,0,0,1-12.52-9.17l14.88-62.79-48.7-42A8.46,8.46,0,0,1,31.73,94L95.64,88.8l24.62-59.6a8.36,8.36,0,0,1,15.48,0l24.62,59.6L224.27,94A8.46,8.46,0,0,1,229.06,108.79Z"
943
+ opacity="0.2"
944
+ ></path>
945
+ <path
946
+ d="M239.18,97.26A16.38,16.38,0,0,0,224.92,86l-59-4.76L143.14,26.15a16.36,16.36,0,0,0-30.27,0L90.11,81.23,31.08,86a16.46,16.46,0,0,0-9.37,28.86l45,38.83L53,211.75a16.38,16.38,0,0,0,24.5,17.82L128,198.49l50.53,31.08A16.4,16.4,0,0,0,203,211.75l-13.76-58.07,45-38.83A16.43,16.43,0,0,0,239.18,97.26Zm-15.34,5.47-48.7,42a8,8,0,0,0-2.56,7.91l14.88,62.8a.37.37,0,0,1-.17.48c-.18.14-.23.11-.38,0l-54.72-33.65a8,8,0,0,0-8.38,0L69.09,215.94c-.15.09-.19.12-.38,0a.37.37,0,0,1-.17-.48l14.88-62.8a8,8,0,0,0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16A8,8,0,0,0,103,91.86l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153,91.86a8,8,0,0,0,6.75,4.92l63.92,5.16c.15,0,.24,0,.33.29S224,102.63,223.84,102.73Z"
947
+ ></path>
948
+ </svg>
949
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
950
+ }
951
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: StarIconComponent, decorators: [{
952
+ type: Component,
953
+ args: [{
954
+ selector: 'ndt-star-icon',
955
+ standalone: true,
956
+ changeDetection: ChangeDetectionStrategy.OnPush,
957
+ template: `
958
+ <svg
959
+ [attr.fill]="fill()"
960
+ xmlns="http://www.w3.org/2000/svg"
961
+ width="24"
962
+ height="24"
963
+ viewBox="0 0 256 256"
964
+ >
965
+ <path
966
+ d="M229.06,108.79l-48.7,42,14.88,62.79a8.4,8.4,0,0,1-12.52,9.17L128,189.09,73.28,222.74a8.4,8.4,0,0,1-12.52-9.17l14.88-62.79-48.7-42A8.46,8.46,0,0,1,31.73,94L95.64,88.8l24.62-59.6a8.36,8.36,0,0,1,15.48,0l24.62,59.6L224.27,94A8.46,8.46,0,0,1,229.06,108.79Z"
967
+ opacity="0.2"
968
+ ></path>
969
+ <path
970
+ d="M239.18,97.26A16.38,16.38,0,0,0,224.92,86l-59-4.76L143.14,26.15a16.36,16.36,0,0,0-30.27,0L90.11,81.23,31.08,86a16.46,16.46,0,0,0-9.37,28.86l45,38.83L53,211.75a16.38,16.38,0,0,0,24.5,17.82L128,198.49l50.53,31.08A16.4,16.4,0,0,0,203,211.75l-13.76-58.07,45-38.83A16.43,16.43,0,0,0,239.18,97.26Zm-15.34,5.47-48.7,42a8,8,0,0,0-2.56,7.91l14.88,62.8a.37.37,0,0,1-.17.48c-.18.14-.23.11-.38,0l-54.72-33.65a8,8,0,0,0-8.38,0L69.09,215.94c-.15.09-.19.12-.38,0a.37.37,0,0,1-.17-.48l14.88-62.8a8,8,0,0,0-2.56-7.91l-48.7-42c-.12-.1-.23-.19-.13-.5s.18-.27.33-.29l63.92-5.16A8,8,0,0,0,103,91.86l24.62-59.61c.08-.17.11-.25.35-.25s.27.08.35.25L153,91.86a8,8,0,0,0,6.75,4.92l63.92,5.16c.15,0,.24,0,.33.29S224,102.63,223.84,102.73Z"
971
+ ></path>
972
+ </svg>
973
+ `,
974
+ }]
975
+ }] });
976
+
977
+ class SunIconComponent {
978
+ constructor() {
979
+ this.fill = input('#FFFF');
980
+ }
981
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SunIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
982
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: SunIconComponent, isStandalone: true, selector: "ndt-sun-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
983
+ <svg
984
+ [attr.fill]="fill()"
985
+ xmlns="http://www.w3.org/2000/svg"
986
+ width="24"
987
+ height="24"
988
+ viewBox="0 0 256 256"
989
+ >
990
+ <path
991
+ d="M128,60a68,68,0,1,0,68,68A68.07,68.07,0,0,0,128,60Z"
992
+ opacity="0.2"
993
+ />
994
+ <path
995
+ d="M128,44a8,8,0,0,0,8-8V16a8,8,0,0,0-16,0V36A8,8,0,0,0,128,44ZM57.31,68.69a8,8,0,0,0,11.32-11.32L54.63,43.37A8,8,0,0,0,43.31,54.69ZM44,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H36A8,8,0,0,0,44,128Zm24.63,59.31-14,14a8,8,0,0,0,11.32,11.32l14-14a8,8,0,0,0-11.32-11.32ZM128,212a8,8,0,0,0-8,8v20a8,8,0,0,0,16,0V220A8,8,0,0,0,128,212Zm70.69-24.69a8,8,0,0,0-11.32,11.32l14,14a8,8,0,0,0,11.32-11.32ZM240,120H220a8,8,0,0,0,0,16h20a8,8,0,0,0,0-16Zm-24.69-62.63-14,14a8,8,0,0,0,11.32,11.32l14-14a8,8,0,0,0-11.32-11.32ZM128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,88a36,36,0,1,1,36-36A36,36,0,0,1,128,164Z"
996
+ />
997
+ </svg>
998
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
999
+ }
1000
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SunIconComponent, decorators: [{
1001
+ type: Component,
1002
+ args: [{
1003
+ selector: 'ndt-sun-icon',
1004
+ standalone: true,
1005
+ changeDetection: ChangeDetectionStrategy.OnPush,
1006
+ template: `
1007
+ <svg
1008
+ [attr.fill]="fill()"
1009
+ xmlns="http://www.w3.org/2000/svg"
1010
+ width="24"
1011
+ height="24"
1012
+ viewBox="0 0 256 256"
1013
+ >
1014
+ <path
1015
+ d="M128,60a68,68,0,1,0,68,68A68.07,68.07,0,0,0,128,60Z"
1016
+ opacity="0.2"
1017
+ />
1018
+ <path
1019
+ d="M128,44a8,8,0,0,0,8-8V16a8,8,0,0,0-16,0V36A8,8,0,0,0,128,44ZM57.31,68.69a8,8,0,0,0,11.32-11.32L54.63,43.37A8,8,0,0,0,43.31,54.69ZM44,128a8,8,0,0,0-8-8H16a8,8,0,0,0,0,16H36A8,8,0,0,0,44,128Zm24.63,59.31-14,14a8,8,0,0,0,11.32,11.32l14-14a8,8,0,0,0-11.32-11.32ZM128,212a8,8,0,0,0-8,8v20a8,8,0,0,0,16,0V220A8,8,0,0,0,128,212Zm70.69-24.69a8,8,0,0,0-11.32,11.32l14,14a8,8,0,0,0,11.32-11.32ZM240,120H220a8,8,0,0,0,0,16h20a8,8,0,0,0,0-16Zm-24.69-62.63-14,14a8,8,0,0,0,11.32,11.32l14-14a8,8,0,0,0-11.32-11.32ZM128,76a52,52,0,1,0,52,52A52.06,52.06,0,0,0,128,76Zm0,88a36,36,0,1,1,36-36A36,36,0,0,1,128,164Z"
1020
+ />
1021
+ </svg>
1022
+ `,
1023
+ }]
1024
+ }] });
1025
+
1026
+ class TerminalIconComponent {
1027
+ constructor() {
1028
+ this.fill = input('#FFFF');
1029
+ }
1030
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TerminalIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1031
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: TerminalIconComponent, isStandalone: true, selector: "ndt-terminal-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1032
+ <svg
1033
+ [attr.fill]="fill()"
1034
+ xmlns="http://www.w3.org/2000/svg"
1035
+ width="24"
1036
+ height="24"
1037
+ viewBox="0 0 256 256"
1038
+ >
1039
+ <path
1040
+ d="M224,56V200a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H216A8,8,0,0,1,224,56Z"
1041
+ opacity="0.2"
1042
+ ></path>
1043
+ <path
1044
+ d="M128,128a8,8,0,0,1-3,6.25l-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32A8,8,0,0,1,128,128Zm48,24H136a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm56-96V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56ZM216,200V56H40V200H216Z"
1045
+ ></path>
1046
+ </svg>
1047
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1048
+ }
1049
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TerminalIconComponent, decorators: [{
1050
+ type: Component,
1051
+ args: [{
1052
+ selector: 'ndt-terminal-icon',
1053
+ standalone: true,
1054
+ changeDetection: ChangeDetectionStrategy.OnPush,
1055
+ template: `
1056
+ <svg
1057
+ [attr.fill]="fill()"
1058
+ xmlns="http://www.w3.org/2000/svg"
1059
+ width="24"
1060
+ height="24"
1061
+ viewBox="0 0 256 256"
1062
+ >
1063
+ <path
1064
+ d="M224,56V200a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V56a8,8,0,0,1,8-8H216A8,8,0,0,1,224,56Z"
1065
+ opacity="0.2"
1066
+ ></path>
1067
+ <path
1068
+ d="M128,128a8,8,0,0,1-3,6.25l-40,32a8,8,0,1,1-10-12.5L107.19,128,75,102.25a8,8,0,1,1,10-12.5l40,32A8,8,0,0,1,128,128Zm48,24H136a8,8,0,0,0,0,16h40a8,8,0,0,0,0-16Zm56-96V200a16,16,0,0,1-16,16H40a16,16,0,0,1-16-16V56A16,16,0,0,1,40,40H216A16,16,0,0,1,232,56ZM216,200V56H40V200H216Z"
1069
+ ></path>
1070
+ </svg>
1071
+ `,
1072
+ }]
1073
+ }] });
1074
+
1075
+ class ToggleLeftIconComponent {
1076
+ constructor() {
1077
+ this.fill = input('#FFFF');
1078
+ }
1079
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ToggleLeftIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1080
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: ToggleLeftIconComponent, isStandalone: true, selector: "ndt-toggle-left-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1081
+ <svg
1082
+ [attr.fill]="fill()"
1083
+ xmlns="http://www.w3.org/2000/svg"
1084
+ width="24"
1085
+ height="24"
1086
+ viewBox="0 0 256 256"
1087
+ >
1088
+ <path
1089
+ d="M112,128A32,32,0,1,1,80,96,32,32,0,0,1,112,128Z"
1090
+ opacity="0.2"
1091
+ ></path>
1092
+ <path
1093
+ d="M176,56H80a72,72,0,0,0,0,144h96a72,72,0,0,0,0-144Zm0,128H80A56,56,0,0,1,80,72h96a56,56,0,0,1,0,112ZM80,88a40,40,0,1,0,40,40A40,40,0,0,0,80,88Zm0,64a24,24,0,1,1,24-24A24,24,0,0,1,80,152Z"
1094
+ ></path>
1095
+ </svg>
1096
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1097
+ }
1098
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ToggleLeftIconComponent, decorators: [{
1099
+ type: Component,
1100
+ args: [{
1101
+ selector: 'ndt-toggle-left-icon',
1102
+ standalone: true,
1103
+ changeDetection: ChangeDetectionStrategy.OnPush,
1104
+ template: `
1105
+ <svg
1106
+ [attr.fill]="fill()"
1107
+ xmlns="http://www.w3.org/2000/svg"
1108
+ width="24"
1109
+ height="24"
1110
+ viewBox="0 0 256 256"
1111
+ >
1112
+ <path
1113
+ d="M112,128A32,32,0,1,1,80,96,32,32,0,0,1,112,128Z"
1114
+ opacity="0.2"
1115
+ ></path>
1116
+ <path
1117
+ d="M176,56H80a72,72,0,0,0,0,144h96a72,72,0,0,0,0-144Zm0,128H80A56,56,0,0,1,80,72h96a56,56,0,0,1,0,112ZM80,88a40,40,0,1,0,40,40A40,40,0,0,0,80,88Zm0,64a24,24,0,1,1,24-24A24,24,0,0,1,80,152Z"
1118
+ ></path>
1119
+ </svg>
1120
+ `,
1121
+ }]
1122
+ }] });
1123
+
1124
+ class TranslateIconComponent {
1125
+ constructor() {
1126
+ this.fill = input('#FFFF');
1127
+ }
1128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TranslateIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: TranslateIconComponent, isStandalone: true, selector: "ndt-translate-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1130
+ <svg
1131
+ [attr.fill]="fill()"
1132
+ xmlns="http://www.w3.org/2000/svg"
1133
+ width="24"
1134
+ height="24"
1135
+ viewBox="0 0 256 256"
1136
+ >
1137
+ <path
1138
+ d="M250.73,210.63l-56-112a12,12,0,0,0-21.46,0l-20.52,41A84.2,84.2,0,0,1,114,126.22,107.48,107.48,0,0,0,139.33,68H160a12,12,0,0,0,0-24H108V32a12,12,0,0,0-24,0V44H32a12,12,0,0,0,0,24h83.13A83.69,83.69,0,0,1,96,110.35,84,84,0,0,1,83.6,91a12,12,0,1,0-21.81,10A107.55,107.55,0,0,0,78,126.24,83.54,83.54,0,0,1,32,140a12,12,0,0,0,0,24,107.47,107.47,0,0,0,64-21.07,108.4,108.4,0,0,0,45.39,19.44l-24.13,48.26a12,12,0,1,0,21.46,10.73L151.41,196h65.17l12.68,25.36a12,12,0,1,0,21.47-10.73ZM163.41,172,184,130.83,204.58,172Z"
1139
+ ></path>
1140
+ </svg>
1141
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1142
+ }
1143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TranslateIconComponent, decorators: [{
1144
+ type: Component,
1145
+ args: [{
1146
+ selector: 'ndt-translate-icon',
1147
+ standalone: true,
1148
+ changeDetection: ChangeDetectionStrategy.OnPush,
1149
+ template: `
1150
+ <svg
1151
+ [attr.fill]="fill()"
1152
+ xmlns="http://www.w3.org/2000/svg"
1153
+ width="24"
1154
+ height="24"
1155
+ viewBox="0 0 256 256"
1156
+ >
1157
+ <path
1158
+ d="M250.73,210.63l-56-112a12,12,0,0,0-21.46,0l-20.52,41A84.2,84.2,0,0,1,114,126.22,107.48,107.48,0,0,0,139.33,68H160a12,12,0,0,0,0-24H108V32a12,12,0,0,0-24,0V44H32a12,12,0,0,0,0,24h83.13A83.69,83.69,0,0,1,96,110.35,84,84,0,0,1,83.6,91a12,12,0,1,0-21.81,10A107.55,107.55,0,0,0,78,126.24,83.54,83.54,0,0,1,32,140a12,12,0,0,0,0,24,107.47,107.47,0,0,0,64-21.07,108.4,108.4,0,0,0,45.39,19.44l-24.13,48.26a12,12,0,1,0,21.46,10.73L151.41,196h65.17l12.68,25.36a12,12,0,1,0,21.47-10.73ZM163.41,172,184,130.83,204.58,172Z"
1159
+ ></path>
1160
+ </svg>
1161
+ `,
1162
+ }]
1163
+ }] });
1164
+
1165
+ class TrashIconComponent {
1166
+ constructor() {
1167
+ this.fill = input('#FFFF');
1168
+ }
1169
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TrashIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1170
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: TrashIconComponent, isStandalone: true, selector: "ndt-trash-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1171
+ <svg
1172
+ [attr.fill]="fill()"
1173
+ xmlns="http://www.w3.org/2000/svg"
1174
+ width="24"
1175
+ height="24"
1176
+ viewBox="0 0 256 256"
1177
+ >
1178
+ <path
1179
+ d="M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"
1180
+ ></path>
1181
+ </svg>
1182
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1183
+ }
1184
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TrashIconComponent, decorators: [{
1185
+ type: Component,
1186
+ args: [{
1187
+ selector: 'ndt-trash-icon',
1188
+ standalone: true,
1189
+ changeDetection: ChangeDetectionStrategy.OnPush,
1190
+ template: `
1191
+ <svg
1192
+ [attr.fill]="fill()"
1193
+ xmlns="http://www.w3.org/2000/svg"
1194
+ width="24"
1195
+ height="24"
1196
+ viewBox="0 0 256 256"
1197
+ >
1198
+ <path
1199
+ d="M216,48H176V40a24,24,0,0,0-24-24H104A24,24,0,0,0,80,40v8H40a8,8,0,0,0,0,16h8V208a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V64h8a8,8,0,0,0,0-16ZM96,40a8,8,0,0,1,8-8h48a8,8,0,0,1,8,8v8H96Zm96,168H64V64H192ZM112,104v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Zm48,0v64a8,8,0,0,1-16,0V104a8,8,0,0,1,16,0Z"
1200
+ ></path>
1201
+ </svg>
1202
+ `,
1203
+ }]
1204
+ }] });
1205
+
1206
+ class UsersIconComponent {
1207
+ constructor() {
1208
+ this.fill = input('#FFFF');
1209
+ }
1210
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: UsersIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1211
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: UsersIconComponent, isStandalone: true, selector: "ndt-users-icon", inputs: { fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
1212
+ <svg
1213
+ [attr.fill]="fill()"
1214
+ xmlns="http://www.w3.org/2000/svg"
1215
+ width="24"
1216
+ height="24"
1217
+ viewBox="0 0 256 256"
1218
+ >
1219
+ <path
1220
+ d="M224,128a95.76,95.76,0,0,1-31.8,71.37A72,72,0,0,0,128,160a40,40,0,1,0-40-40,40,40,0,0,0,40,40,72,72,0,0,0-64.2,39.37h0A96,96,0,1,1,224,128Z"
1221
+ opacity="0.2"
1222
+ ></path>
1223
+ <path
1224
+ d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM74.08,197.5a64,64,0,0,1,107.84,0,87.83,87.83,0,0,1-107.84,0ZM96,120a32,32,0,1,1,32,32A32,32,0,0,1,96,120Zm97.76,66.41a79.66,79.66,0,0,0-36.06-28.75,48,48,0,1,0-59.4,0,79.66,79.66,0,0,0-36.06,28.75,88,88,0,1,1,131.52,0Z"
1225
+ ></path>
1226
+ </svg>
1227
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1228
+ }
1229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: UsersIconComponent, decorators: [{
1230
+ type: Component,
1231
+ args: [{
1232
+ selector: 'ndt-users-icon',
1233
+ standalone: true,
1234
+ changeDetection: ChangeDetectionStrategy.OnPush,
1235
+ template: `
1236
+ <svg
1237
+ [attr.fill]="fill()"
1238
+ xmlns="http://www.w3.org/2000/svg"
1239
+ width="24"
1240
+ height="24"
1241
+ viewBox="0 0 256 256"
1242
+ >
1243
+ <path
1244
+ d="M224,128a95.76,95.76,0,0,1-31.8,71.37A72,72,0,0,0,128,160a40,40,0,1,0-40-40,40,40,0,0,0,40,40,72,72,0,0,0-64.2,39.37h0A96,96,0,1,1,224,128Z"
1245
+ opacity="0.2"
1246
+ ></path>
1247
+ <path
1248
+ d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24ZM74.08,197.5a64,64,0,0,1,107.84,0,87.83,87.83,0,0,1-107.84,0ZM96,120a32,32,0,1,1,32,32A32,32,0,0,1,96,120Zm97.76,66.41a79.66,79.66,0,0,0-36.06-28.75,48,48,0,1,0-59.4,0,79.66,79.66,0,0,0-36.06,28.75,88,88,0,1,1,131.52,0Z"
1249
+ ></path>
1250
+ </svg>
1251
+ `,
1252
+ }]
1253
+ }] });
1254
+
1255
+ class DevToolbarIconComponent {
1256
+ constructor() {
1257
+ this.stateService = inject(DevToolbarStateService);
1258
+ this.name = input.required();
1259
+ this.fill = computed(() => this.stateService.theme() === 'dark' ? '#FFFFFF' : '#000000');
1260
+ }
1261
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1262
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarIconComponent, isStandalone: true, selector: "ndt-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
1263
+ @switch (name()) { @case ('angular') {
1264
+ <ndt-angular-icon />
1265
+ } @case ('bug') {
1266
+ <ndt-bug-icon [fill]="fill()" />
1267
+ } @case ('code') {
1268
+ <ndt-code-icon [fill]="fill()" />
1269
+ } @case ('database') {
1270
+ <ndt-database-icon [fill]="fill()" />
1271
+ } @case ('docs') {
1272
+ <ndt-docs-icon [fill]="fill()" />
1273
+ } @case ('export') {
1274
+ <ndt-export-icon [fill]="fill()" />
1275
+ } @case ('gauge') {
1276
+ <ndt-gauge-icon [fill]="fill()" />
1277
+ } @case ('gear') {
1278
+ <ndt-gear-icon [fill]="fill()" />
1279
+ } @case ('git-branch') {
1280
+ <ndt-git-branch-icon [fill]="fill()" />
1281
+ } @case ('import') {
1282
+ <ndt-import-icon [fill]="fill()" />
1283
+ } @case ('layout') {
1284
+ <ndt-layout-icon [fill]="fill()" />
1285
+ } @case ('lighting') {
1286
+ <ndt-lighting-icon [fill]="fill()" />
1287
+ } @case ('lightbulb') {
1288
+ <ndt-lightbulb-icon [fill]="fill()" />
1289
+ } @case ('network') {
1290
+ <ndt-network-icon [fill]="fill()" />
1291
+ } @case ('puzzle') {
1292
+ <ndt-puzzle-icon [fill]="fill()" />
1293
+ } @case ('refresh') {
1294
+ <ndt-refresh-icon [fill]="fill()" />
1295
+ } @case ('star') {
1296
+ <ndt-star-icon [fill]="fill()" />
1297
+ } @case ('terminal') {
1298
+ <ndt-terminal-icon [fill]="fill()" />
1299
+ } @case ('toggle-left') {
1300
+ <ndt-toggle-left-icon [fill]="fill()" />
1301
+ } @case ('user') {
1302
+ <ndt-users-icon [fill]="fill()" />
1303
+ } @case ('sun') {
1304
+ <ndt-sun-icon [fill]="fill()" />
1305
+ } @case ('moon') {
1306
+ <ndt-moon-icon [fill]="fill()" />
1307
+ } @case ('translate') {
1308
+ <ndt-translate-icon [fill]="fill()" />
1309
+ } @case ('discord') {
1310
+ <ndt-discord-icon [fill]="fill()" />
1311
+ } @case ('trash') {
1312
+ <ndt-trash-icon [fill]="fill()" />
1313
+ } }
1314
+ `, isInline: true, dependencies: [{ kind: "component", type: AngularIconComponent, selector: "ndt-angular-icon" }, { kind: "component", type: BugIconComponent, selector: "ndt-bug-icon", inputs: ["fill"] }, { kind: "component", type: CodeIconComponent, selector: "ndt-code-icon", inputs: ["fill"] }, { kind: "component", type: DatabaseIconComponent, selector: "ndt-database-icon", inputs: ["fill"] }, { kind: "component", type: DocsIconComponent, selector: "ndt-docs-icon", inputs: ["fill"] }, { kind: "component", type: DiscordIconComponent, selector: "ndt-discord-icon", inputs: ["fill"] }, { kind: "component", type: ExportIconComponent, selector: "ndt-export-icon", inputs: ["fill"] }, { kind: "component", type: GaugeIconComponent, selector: "ndt-gauge-icon", inputs: ["fill"] }, { kind: "component", type: GearIconComponent, selector: "ndt-gear-icon", inputs: ["fill"] }, { kind: "component", type: GitBranchIconComponent, selector: "ndt-git-branch-icon", inputs: ["fill"] }, { kind: "component", type: ImportIconComponent, selector: "ndt-import-icon", inputs: ["fill"] }, { kind: "component", type: LayoutIconComponent, selector: "ndt-layout-icon", inputs: ["fill"] }, { kind: "component", type: LightbulbIconComponent, selector: "ndt-lightbulb-icon", inputs: ["fill"] }, { kind: "component", type: LightingIconComponent, selector: "ndt-lighting-icon", inputs: ["fill"] }, { kind: "component", type: NetworkIconComponent, selector: "ndt-network-icon", inputs: ["fill"] }, { kind: "component", type: PuzzleIconComponent, selector: "ndt-puzzle-icon", inputs: ["fill"] }, { kind: "component", type: RefreshIconComponent, selector: "ndt-refresh-icon", inputs: ["fill"] }, { kind: "component", type: StarIconComponent, selector: "ndt-star-icon", inputs: ["fill"] }, { kind: "component", type: TerminalIconComponent, selector: "ndt-terminal-icon", inputs: ["fill"] }, { kind: "component", type: ToggleLeftIconComponent, selector: "ndt-toggle-left-icon", inputs: ["fill"] }, { kind: "component", type: UsersIconComponent, selector: "ndt-users-icon", inputs: ["fill"] }, { kind: "component", type: SunIconComponent, selector: "ndt-sun-icon", inputs: ["fill"] }, { kind: "component", type: MoonIconComponent, selector: "ndt-moon-icon", inputs: ["fill"] }, { kind: "component", type: TranslateIconComponent, selector: "ndt-translate-icon", inputs: ["fill"] }, { kind: "component", type: TrashIconComponent, selector: "ndt-trash-icon", inputs: ["fill"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1315
+ }
1316
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarIconComponent, decorators: [{
1317
+ type: Component,
1318
+ args: [{
1319
+ selector: 'ndt-icon',
1320
+ standalone: true,
1321
+ imports: [
1322
+ AngularIconComponent,
1323
+ BugIconComponent,
1324
+ CodeIconComponent,
1325
+ DatabaseIconComponent,
1326
+ DocsIconComponent,
1327
+ DiscordIconComponent,
1328
+ ExportIconComponent,
1329
+ GaugeIconComponent,
1330
+ GearIconComponent,
1331
+ GitBranchIconComponent,
1332
+ ImportIconComponent,
1333
+ LayoutIconComponent,
1334
+ LightbulbIconComponent,
1335
+ LightingIconComponent,
1336
+ NetworkIconComponent,
1337
+ PuzzleIconComponent,
1338
+ RefreshIconComponent,
1339
+ StarIconComponent,
1340
+ TerminalIconComponent,
1341
+ ToggleLeftIconComponent,
1342
+ UsersIconComponent,
1343
+ SunIconComponent,
1344
+ MoonIconComponent,
1345
+ TranslateIconComponent,
1346
+ TrashIconComponent,
1347
+ ],
1348
+ changeDetection: ChangeDetectionStrategy.OnPush,
1349
+ template: `
1350
+ @switch (name()) { @case ('angular') {
1351
+ <ndt-angular-icon />
1352
+ } @case ('bug') {
1353
+ <ndt-bug-icon [fill]="fill()" />
1354
+ } @case ('code') {
1355
+ <ndt-code-icon [fill]="fill()" />
1356
+ } @case ('database') {
1357
+ <ndt-database-icon [fill]="fill()" />
1358
+ } @case ('docs') {
1359
+ <ndt-docs-icon [fill]="fill()" />
1360
+ } @case ('export') {
1361
+ <ndt-export-icon [fill]="fill()" />
1362
+ } @case ('gauge') {
1363
+ <ndt-gauge-icon [fill]="fill()" />
1364
+ } @case ('gear') {
1365
+ <ndt-gear-icon [fill]="fill()" />
1366
+ } @case ('git-branch') {
1367
+ <ndt-git-branch-icon [fill]="fill()" />
1368
+ } @case ('import') {
1369
+ <ndt-import-icon [fill]="fill()" />
1370
+ } @case ('layout') {
1371
+ <ndt-layout-icon [fill]="fill()" />
1372
+ } @case ('lighting') {
1373
+ <ndt-lighting-icon [fill]="fill()" />
1374
+ } @case ('lightbulb') {
1375
+ <ndt-lightbulb-icon [fill]="fill()" />
1376
+ } @case ('network') {
1377
+ <ndt-network-icon [fill]="fill()" />
1378
+ } @case ('puzzle') {
1379
+ <ndt-puzzle-icon [fill]="fill()" />
1380
+ } @case ('refresh') {
1381
+ <ndt-refresh-icon [fill]="fill()" />
1382
+ } @case ('star') {
1383
+ <ndt-star-icon [fill]="fill()" />
1384
+ } @case ('terminal') {
1385
+ <ndt-terminal-icon [fill]="fill()" />
1386
+ } @case ('toggle-left') {
1387
+ <ndt-toggle-left-icon [fill]="fill()" />
1388
+ } @case ('user') {
1389
+ <ndt-users-icon [fill]="fill()" />
1390
+ } @case ('sun') {
1391
+ <ndt-sun-icon [fill]="fill()" />
1392
+ } @case ('moon') {
1393
+ <ndt-moon-icon [fill]="fill()" />
1394
+ } @case ('translate') {
1395
+ <ndt-translate-icon [fill]="fill()" />
1396
+ } @case ('discord') {
1397
+ <ndt-discord-icon [fill]="fill()" />
1398
+ } @case ('trash') {
1399
+ <ndt-trash-icon [fill]="fill()" />
1400
+ } }
1401
+ `,
1402
+ }]
1403
+ }] });
1404
+
1405
+ class DevToolbarToolButtonComponent {
1406
+ constructor() {
1407
+ // Injects
1408
+ this.state = inject(DevToolbarStateService);
1409
+ this.elementRef = inject(ElementRef);
1410
+ // Inputs
1411
+ this.title = input.required();
1412
+ this.toolId = input.required();
1413
+ // Outputs
1414
+ this.open = output();
1415
+ // Signals
1416
+ this.isActive = computed(() => this.state.activeToolId() === this.toolId());
1417
+ this.isToolbarVisible = this.state.isVisible;
1418
+ this.isFocused = signal(false);
1419
+ this.tooltip = computed(() => this.elementRef.nativeElement.parentElement?.getAttribute('data-tooltip') ?? '');
1420
+ this.isTooltipVisible = computed(() => this.tooltip() && !this.isActive());
1421
+ // Properties
1422
+ this.tooltipState = false;
1423
+ this.hideDelay = 3000;
1424
+ }
1425
+ // Public methods
1426
+ onClick() {
1427
+ this.isFocused.set(false);
1428
+ this.open.emit();
1429
+ }
1430
+ onMouseEnter() {
1431
+ this.tooltipState = true;
1432
+ }
1433
+ onMouseLeave() {
1434
+ this.tooltipState = false;
1435
+ }
1436
+ onEscape() {
1437
+ this.isFocused.set(false);
1438
+ }
1439
+ onFocus() {
1440
+ this.isFocused.set(true);
1441
+ }
1442
+ onBlur() {
1443
+ this.isFocused.set(false);
1444
+ }
1445
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarToolButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1446
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarToolButtonComponent, isStandalone: true, selector: "ndt-tool-button", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, toolId: { classPropertyName: "toolId", publicName: "toolId", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { open: "open" }, ngImport: i0, template: `
1447
+ <button
1448
+ class="tool-button"
1449
+ [class.tool-button--active]="isActive()"
1450
+ [class.tool-button--focus]="isFocused()"
1451
+ (mouseenter)="onMouseEnter()"
1452
+ (focusin)="onFocus()"
1453
+ (focusout)="onBlur()"
1454
+ (mouseleave)="onMouseLeave()"
1455
+ (keydown.escape)="onEscape()"
1456
+ >
1457
+ @if (isTooltipVisible()) {
1458
+ <span
1459
+ class="tooltip"
1460
+ [@tooltipAnimation]="tooltipState ? 'visible' : 'hidden'"
1461
+ >
1462
+ {{ tooltip() }}
1463
+ </span>
1464
+ }
1465
+ <ng-content />
1466
+ </button>
1467
+ `, isInline: true, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.tool-button{display:flex;justify-content:center;align-items:center;width:44px;height:40px;border:0;background:transparent;color:var(--ndt-text-primary);transition:var(--ndt-transition-default);cursor:pointer;opacity:.5;position:relative}.tool-button--active,.tool-button:hover{background:var(--ndt-hover-bg);opacity:1}.tool-button ::ng-deep svg{width:24px;height:24px;display:block;margin:auto}.tool-button__badge{position:absolute;top:-.25rem;right:-.25rem;background-color:var(--ndt-hover-danger);color:var(--ndt-text-primary);border-radius:var(--ndt-border-radius-full);min-width:1rem;height:1rem;font-size:.75rem;display:flex;align-items:center;justify-content:center;padding:.125rem}.tooltip{position:absolute;bottom:calc(100% + 1.2rem);left:50%;transform:translate(-50%);background:var(--ndt-bg-primary);color:var(--ndt-text-primary);padding:.5rem .75rem;border-radius:var(--ndt-border-radius-medium);font-size:.75rem;white-space:nowrap;pointer-events:none;z-index:1000;box-shadow:var(--ndt-shadow-tooltip)}\n"], animations: [
1468
+ trigger('tooltipAnimation', [
1469
+ state('hidden', style({
1470
+ opacity: 0,
1471
+ transform: 'translateX(-50%) translateY(1rem)',
1472
+ })),
1473
+ state('visible', style({
1474
+ opacity: 1,
1475
+ transform: 'translateX(-50%) translateY(0)',
1476
+ })),
1477
+ transition('hidden => visible', [animate('200ms ease-out')]),
1478
+ transition('visible => hidden', [animate('150ms ease-in')]),
1479
+ ]),
1480
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1481
+ }
1482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarToolButtonComponent, decorators: [{
1483
+ type: Component,
1484
+ args: [{ selector: 'ndt-tool-button', standalone: true, template: `
1485
+ <button
1486
+ class="tool-button"
1487
+ [class.tool-button--active]="isActive()"
1488
+ [class.tool-button--focus]="isFocused()"
1489
+ (mouseenter)="onMouseEnter()"
1490
+ (focusin)="onFocus()"
1491
+ (focusout)="onBlur()"
1492
+ (mouseleave)="onMouseLeave()"
1493
+ (keydown.escape)="onEscape()"
1494
+ >
1495
+ @if (isTooltipVisible()) {
1496
+ <span
1497
+ class="tooltip"
1498
+ [@tooltipAnimation]="tooltipState ? 'visible' : 'hidden'"
1499
+ >
1500
+ {{ tooltip() }}
1501
+ </span>
1502
+ }
1503
+ <ng-content />
1504
+ </button>
1505
+ `, animations: [
1506
+ trigger('tooltipAnimation', [
1507
+ state('hidden', style({
1508
+ opacity: 0,
1509
+ transform: 'translateX(-50%) translateY(1rem)',
1510
+ })),
1511
+ state('visible', style({
1512
+ opacity: 1,
1513
+ transform: 'translateX(-50%) translateY(0)',
1514
+ })),
1515
+ transition('hidden => visible', [animate('200ms ease-out')]),
1516
+ transition('visible => hidden', [animate('150ms ease-in')]),
1517
+ ]),
1518
+ ], changeDetection: ChangeDetectionStrategy.OnPush, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.tool-button{display:flex;justify-content:center;align-items:center;width:44px;height:40px;border:0;background:transparent;color:var(--ndt-text-primary);transition:var(--ndt-transition-default);cursor:pointer;opacity:.5;position:relative}.tool-button--active,.tool-button:hover{background:var(--ndt-hover-bg);opacity:1}.tool-button ::ng-deep svg{width:24px;height:24px;display:block;margin:auto}.tool-button__badge{position:absolute;top:-.25rem;right:-.25rem;background-color:var(--ndt-hover-danger);color:var(--ndt-text-primary);border-radius:var(--ndt-border-radius-full);min-width:1rem;height:1rem;font-size:.75rem;display:flex;align-items:center;justify-content:center;padding:.125rem}.tooltip{position:absolute;bottom:calc(100% + 1.2rem);left:50%;transform:translate(-50%);background:var(--ndt-bg-primary);color:var(--ndt-text-primary);padding:.5rem .75rem;border-radius:var(--ndt-border-radius-medium);font-size:.75rem;white-space:nowrap;pointer-events:none;z-index:1000;box-shadow:var(--ndt-shadow-tooltip)}\n"] }]
1519
+ }] });
1520
+
1521
+ class DevToolbarWindowComponent {
1522
+ constructor() {
1523
+ this.devToolbarStateService = inject(DevToolbarStateService);
1524
+ this.config = input.required();
1525
+ this.close = output();
1526
+ this.maximize = output();
1527
+ this.minimize = output();
1528
+ this.theme = computed(() => this.devToolbarStateService.theme());
1529
+ }
1530
+ onClose() {
1531
+ this.close.emit();
1532
+ }
1533
+ onMaximize() {
1534
+ this.maximize.emit();
1535
+ }
1536
+ onMinimize() {
1537
+ this.minimize.emit();
1538
+ }
1539
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarWindowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1540
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarWindowComponent, isStandalone: true, selector: "ndt-window", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { close: "close", maximize: "maximize", minimize: "minimize" }, ngImport: i0, template: `
1541
+ <div class="window dev-toolbar" [attr.data-theme]="theme()">
1542
+ <div class="header">
1543
+ <div class="header__content">
1544
+ <div class="header__title">
1545
+ <h1>{{ config().title }}</h1>
1546
+ @if (config().isBeta) {
1547
+ <span class="beta-tag">BETA</span>
1548
+ }
1549
+ </div>
1550
+ <p class="header__description">{{ config().description }}</p>
1551
+ </div>
1552
+ <div class="header__controls">
1553
+ @if (config().isMinimizable) {
1554
+ <button aria-label="Minimize" class="control" (click)="onMinimize()">
1555
+
1556
+ </button>
1557
+ } @if (config().isMaximizable) {
1558
+ <button aria-label="Maximize" class="control" (click)="onMaximize()">
1559
+
1560
+ </button>
1561
+ } @if (config().isClosable) {
1562
+ <button
1563
+ aria-label="Close"
1564
+ class="control control--close"
1565
+ (click)="onClose()"
1566
+ >
1567
+ ×
1568
+ </button>
1569
+ }
1570
+ </div>
1571
+ </div>
1572
+
1573
+ <div class="divider"></div>
1574
+ <div class="content">
1575
+ <ng-content></ng-content>
1576
+ </div>
1577
+ </div>
1578
+ `, isInline: true, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}:host{display:block;width:100%}.window{box-sizing:border-box;display:flex;flex-direction:column;width:100%;height:100%;background:var(--ndt-bg-primary);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-large);padding:var(--ndt-window-padding);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";color:var(--ndt-text-secondary);z-index:999999999;box-shadow:var(--ndt-shadow-window)}.header{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-start}.header__title{display:flex;align-items:center;gap:var(--ndt-spacing-sm)}.header__title .beta-tag{font-size:var(--ndt-font-size-xxs, .65rem);background:var(--ndt-purple, #8b5cf6);color:var(--ndt-text-on-primary);padding:1px 4px;margin-left:var(--ndt-spacing-xs);border-radius:var(--ndt-border-radius-small);font-weight:500;text-transform:uppercase;letter-spacing:.5px}.header__description{font-size:var(--ndt-font-size-sm);color:var(--ndt-text-muted)}.header__content{display:flex;flex-direction:column}.header__controls{display:flex;gap:var(--ndt-spacing-sm)}.content{flex:1;overflow:auto}.divider{height:1px;background-color:var(--ndt-border-primary);margin-bottom:var(--ndt-spacing-md);margin-top:var(--ndt-spacing-md)}.control{background:none;border:none;color:var(--ndt-text-secondary);cursor:pointer;padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);border-radius:var(--ndt-border-radius-small);font-size:var(--ndt-font-size-md);line-height:1;transition:var(--ndt-transition-smooth)}.control:hover{background:var(--ndt-hover-bg);color:var(--ndt-text-primary)}.control--close:hover{background:var(--ndt-hover-danger)}\n"] }); }
1579
+ }
1580
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarWindowComponent, decorators: [{
1581
+ type: Component,
1582
+ args: [{ selector: 'ndt-window', standalone: true, template: `
1583
+ <div class="window dev-toolbar" [attr.data-theme]="theme()">
1584
+ <div class="header">
1585
+ <div class="header__content">
1586
+ <div class="header__title">
1587
+ <h1>{{ config().title }}</h1>
1588
+ @if (config().isBeta) {
1589
+ <span class="beta-tag">BETA</span>
1590
+ }
1591
+ </div>
1592
+ <p class="header__description">{{ config().description }}</p>
1593
+ </div>
1594
+ <div class="header__controls">
1595
+ @if (config().isMinimizable) {
1596
+ <button aria-label="Minimize" class="control" (click)="onMinimize()">
1597
+
1598
+ </button>
1599
+ } @if (config().isMaximizable) {
1600
+ <button aria-label="Maximize" class="control" (click)="onMaximize()">
1601
+
1602
+ </button>
1603
+ } @if (config().isClosable) {
1604
+ <button
1605
+ aria-label="Close"
1606
+ class="control control--close"
1607
+ (click)="onClose()"
1608
+ >
1609
+ ×
1610
+ </button>
1611
+ }
1612
+ </div>
1613
+ </div>
1614
+
1615
+ <div class="divider"></div>
1616
+ <div class="content">
1617
+ <ng-content></ng-content>
1618
+ </div>
1619
+ </div>
1620
+ `, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}:host{display:block;width:100%}.window{box-sizing:border-box;display:flex;flex-direction:column;width:100%;height:100%;background:var(--ndt-bg-primary);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-large);padding:var(--ndt-window-padding);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",Segoe UI Symbol,\"Noto Color Emoji\";color:var(--ndt-text-secondary);z-index:999999999;box-shadow:var(--ndt-shadow-window)}.header{display:flex;flex-direction:row;justify-content:space-between;align-items:flex-start}.header__title{display:flex;align-items:center;gap:var(--ndt-spacing-sm)}.header__title .beta-tag{font-size:var(--ndt-font-size-xxs, .65rem);background:var(--ndt-purple, #8b5cf6);color:var(--ndt-text-on-primary);padding:1px 4px;margin-left:var(--ndt-spacing-xs);border-radius:var(--ndt-border-radius-small);font-weight:500;text-transform:uppercase;letter-spacing:.5px}.header__description{font-size:var(--ndt-font-size-sm);color:var(--ndt-text-muted)}.header__content{display:flex;flex-direction:column}.header__controls{display:flex;gap:var(--ndt-spacing-sm)}.content{flex:1;overflow:auto}.divider{height:1px;background-color:var(--ndt-border-primary);margin-bottom:var(--ndt-spacing-md);margin-top:var(--ndt-spacing-md)}.control{background:none;border:none;color:var(--ndt-text-secondary);cursor:pointer;padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);border-radius:var(--ndt-border-radius-small);font-size:var(--ndt-font-size-md);line-height:1;transition:var(--ndt-transition-smooth)}.control:hover{background:var(--ndt-hover-bg);color:var(--ndt-text-primary)}.control--close:hover{background:var(--ndt-hover-danger)}\n"] }]
1621
+ }] });
1622
+
1623
+ class DevToolbarToolComponent {
1624
+ constructor() {
1625
+ this.state = inject(DevToolbarStateService);
1626
+ this.options = input.required();
1627
+ this.icon = input.required();
1628
+ this.title = input.required();
1629
+ this.isActive = computed(() => this.state.activeToolId() === this.options().id);
1630
+ this.height = computed(() => {
1631
+ switch (this.options().size) {
1632
+ case 'small':
1633
+ return 320;
1634
+ case 'medium':
1635
+ return 480;
1636
+ case 'tall':
1637
+ return 620;
1638
+ case 'large':
1639
+ return 620;
1640
+ default:
1641
+ return 480;
1642
+ }
1643
+ });
1644
+ this.width = computed(() => {
1645
+ switch (this.options().size) {
1646
+ case 'small':
1647
+ return 320;
1648
+ case 'medium':
1649
+ return 480;
1650
+ case 'tall':
1651
+ return 480;
1652
+ case 'large':
1653
+ return 620;
1654
+ default:
1655
+ return 400;
1656
+ }
1657
+ });
1658
+ this.positions = computed(() => {
1659
+ const triggerXPosition = this.getButtonContainerXPosition();
1660
+ const windowCenter = window.innerWidth / 2;
1661
+ const offsetX = windowCenter - triggerXPosition - 22;
1662
+ return [
1663
+ {
1664
+ originX: 'center',
1665
+ originY: 'center',
1666
+ overlayX: 'center',
1667
+ overlayY: 'center',
1668
+ offsetY: -(Math.ceil(this.height() / 2) + 36),
1669
+ offsetX,
1670
+ },
1671
+ ];
1672
+ });
1673
+ }
1674
+ onOpen() {
1675
+ this.state.setActiveTool(this.options().id);
1676
+ }
1677
+ onClose() {
1678
+ this.state.setActiveTool(null);
1679
+ }
1680
+ getButtonContainerXPosition() {
1681
+ const buttonContainerRect = this.buttonContainer?.nativeElement?.getBoundingClientRect();
1682
+ return buttonContainerRect?.left ?? 0;
1683
+ }
1684
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1685
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarToolComponent, isStandalone: true, selector: "ndt-toolbar-tool", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: true, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null } }, queries: [{ propertyName: "buttonComponent", first: true, predicate: DevToolbarToolButtonComponent, descendants: true }], viewQueries: [{ propertyName: "buttonContainer", first: true, predicate: ["buttonContainer"], descendants: true }], ngImport: i0, template: `
1686
+ <div #trigger="cdkOverlayOrigin" class="dev-toolbar-tool" cdkOverlayOrigin>
1687
+ <div
1688
+ class="dev-toolbar-tool__icon"
1689
+ (click)="onOpen()"
1690
+ (keydown.enter)="onOpen()"
1691
+ (keydown.space)="onOpen()"
1692
+ tabindex="0"
1693
+ >
1694
+ <div #buttonContainer [attr.data-tooltip]="title()">
1695
+ @if (icon()) {
1696
+ <ndt-tool-button [title]="title()" [toolId]="options().id">
1697
+ <ndt-icon [name]="icon()" />
1698
+ </ndt-tool-button>
1699
+ } @else {
1700
+ <ng-content select="ndt-tool-button"></ng-content>
1701
+ }
1702
+ </div>
1703
+ </div>
1704
+
1705
+ @if (isActive()) {
1706
+ <ng-template
1707
+ #contentTemplate
1708
+ [cdkConnectedOverlayOrigin]="trigger"
1709
+ [cdkConnectedOverlayOpen]="isActive()"
1710
+ [cdkConnectedOverlayPositions]="positions()"
1711
+ [cdkConnectedOverlayWidth]="width()"
1712
+ [cdkConnectedOverlayHeight]="height()"
1713
+ cdkConnectedOverlay
1714
+ >
1715
+ <ndt-window [@slideAnimation] [config]="options()" (close)="onClose()">
1716
+ <ng-content />
1717
+ </ndt-window>
1718
+ </ng-template>
1719
+ }
1720
+ </div>
1721
+ `, isInline: true, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.tool{position:relative}.trigger{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: DevToolbarWindowComponent, selector: "ndt-window", inputs: ["config"], outputs: ["close", "maximize", "minimize"] }, { kind: "component", type: DevToolbarToolButtonComponent, selector: "ndt-tool-button", inputs: ["title", "toolId"], outputs: ["open"] }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }], animations: [
1722
+ trigger('slideAnimation', [
1723
+ transition(':enter', [
1724
+ style({
1725
+ transform: 'translateY(20px)',
1726
+ opacity: 0,
1727
+ }),
1728
+ animate('400ms cubic-bezier(0.4, 0, 0.2, 1)', style({
1729
+ transform: 'translateY(0)',
1730
+ opacity: 1,
1731
+ })),
1732
+ ]),
1733
+ transition(':leave', [
1734
+ style({
1735
+ transform: 'translateY(0)',
1736
+ opacity: 1,
1737
+ }),
1738
+ animate('400ms cubic-bezier(0.4, 0, 0.2, 1)', style({
1739
+ transform: 'translateY(20px)',
1740
+ opacity: 0,
1741
+ })),
1742
+ ]),
1743
+ ]),
1744
+ ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1745
+ }
1746
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarToolComponent, decorators: [{
1747
+ type: Component,
1748
+ args: [{ selector: 'ndt-toolbar-tool', standalone: true, imports: [
1749
+ CdkConnectedOverlay,
1750
+ OverlayModule,
1751
+ DevToolbarWindowComponent,
1752
+ DevToolbarToolButtonComponent,
1753
+ DevToolbarIconComponent,
1754
+ ], template: `
1755
+ <div #trigger="cdkOverlayOrigin" class="dev-toolbar-tool" cdkOverlayOrigin>
1756
+ <div
1757
+ class="dev-toolbar-tool__icon"
1758
+ (click)="onOpen()"
1759
+ (keydown.enter)="onOpen()"
1760
+ (keydown.space)="onOpen()"
1761
+ tabindex="0"
1762
+ >
1763
+ <div #buttonContainer [attr.data-tooltip]="title()">
1764
+ @if (icon()) {
1765
+ <ndt-tool-button [title]="title()" [toolId]="options().id">
1766
+ <ndt-icon [name]="icon()" />
1767
+ </ndt-tool-button>
1768
+ } @else {
1769
+ <ng-content select="ndt-tool-button"></ng-content>
1770
+ }
1771
+ </div>
1772
+ </div>
1773
+
1774
+ @if (isActive()) {
1775
+ <ng-template
1776
+ #contentTemplate
1777
+ [cdkConnectedOverlayOrigin]="trigger"
1778
+ [cdkConnectedOverlayOpen]="isActive()"
1779
+ [cdkConnectedOverlayPositions]="positions()"
1780
+ [cdkConnectedOverlayWidth]="width()"
1781
+ [cdkConnectedOverlayHeight]="height()"
1782
+ cdkConnectedOverlay
1783
+ >
1784
+ <ndt-window [@slideAnimation] [config]="options()" (close)="onClose()">
1785
+ <ng-content />
1786
+ </ndt-window>
1787
+ </ng-template>
1788
+ }
1789
+ </div>
1790
+ `, changeDetection: ChangeDetectionStrategy.OnPush, animations: [
1791
+ trigger('slideAnimation', [
1792
+ transition(':enter', [
1793
+ style({
1794
+ transform: 'translateY(20px)',
1795
+ opacity: 0,
1796
+ }),
1797
+ animate('400ms cubic-bezier(0.4, 0, 0.2, 1)', style({
1798
+ transform: 'translateY(0)',
1799
+ opacity: 1,
1800
+ })),
1801
+ ]),
1802
+ transition(':leave', [
1803
+ style({
1804
+ transform: 'translateY(0)',
1805
+ opacity: 1,
1806
+ }),
1807
+ animate('400ms cubic-bezier(0.4, 0, 0.2, 1)', style({
1808
+ transform: 'translateY(20px)',
1809
+ opacity: 0,
1810
+ })),
1811
+ ]),
1812
+ ]),
1813
+ ], styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.tool{position:relative}.trigger{cursor:pointer}\n"] }]
1814
+ }], propDecorators: { buttonContainer: [{
1815
+ type: ViewChild,
1816
+ args: ['buttonContainer']
1817
+ }], buttonComponent: [{
1818
+ type: ContentChild,
1819
+ args: [DevToolbarToolButtonComponent]
1820
+ }] } });
1821
+
1822
+ class DevToolbarInputComponent {
1823
+ constructor() {
1824
+ this.value = model.required();
1825
+ this.type = input('text');
1826
+ this.placeholder = input('');
1827
+ this.ariaLabel = input('');
1828
+ this.inputClass = input('input');
1829
+ }
1830
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1831
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: DevToolbarInputComponent, isStandalone: true, selector: "ndt-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, inputClass: { classPropertyName: "inputClass", publicName: "inputClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0, template: `
1832
+ <input
1833
+ [attr.aria-label]="ariaLabel()"
1834
+ [type]="type()"
1835
+ [class]="inputClass()"
1836
+ [ngModel]="value()"
1837
+ [placeholder]="placeholder()"
1838
+ (ngModelChange)="value.set($event)"
1839
+ />
1840
+ `, isInline: true, styles: [":host{display:block}.input{width:100%;padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-small);background-color:var(--ndt-bg-primary);color:var(--ndt-text-primary);font-size:var(--ndt-font-size-sm);transition:var(--ndt-transition-default);box-sizing:border-box}.input::placeholder{color:var(--ndt-text-muted)}.input:focus{outline:none;border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}.input:disabled{background-color:var(--ndt-bg-secondary);cursor:not-allowed;color:var(--ndt-text-muted)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1841
+ }
1842
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInputComponent, decorators: [{
1843
+ type: Component,
1844
+ args: [{ selector: 'ndt-input', standalone: true, imports: [FormsModule], template: `
1845
+ <input
1846
+ [attr.aria-label]="ariaLabel()"
1847
+ [type]="type()"
1848
+ [class]="inputClass()"
1849
+ [ngModel]="value()"
1850
+ [placeholder]="placeholder()"
1851
+ (ngModelChange)="value.set($event)"
1852
+ />
1853
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.input{width:100%;padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-small);background-color:var(--ndt-bg-primary);color:var(--ndt-text-primary);font-size:var(--ndt-font-size-sm);transition:var(--ndt-transition-default);box-sizing:border-box}.input::placeholder{color:var(--ndt-text-muted)}.input:focus{outline:none;border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}.input:disabled{background-color:var(--ndt-bg-secondary);cursor:not-allowed;color:var(--ndt-text-muted)}\n"] }]
1854
+ }] });
1855
+
1856
+ class DevToolbarSelectComponent {
1857
+ constructor() {
1858
+ this.devToolbarStateService = inject(DevToolbarStateService);
1859
+ this.value = model();
1860
+ this.options = input.required();
1861
+ this.ariaLabel = input('');
1862
+ this.label = input('');
1863
+ this.size = input('medium');
1864
+ this.theme = computed(() => this.devToolbarStateService.theme());
1865
+ this.selectMenuId = `select-menu-${Math.random()
1866
+ .toString(36)
1867
+ .slice(2, 11)}`;
1868
+ this.isOpen = signal(false);
1869
+ this.selectedLabel = computed(() => {
1870
+ const selected = this.options()?.find((opt) => opt.value === this.value());
1871
+ return selected?.label ?? '';
1872
+ });
1873
+ this.positions = [
1874
+ {
1875
+ originX: 'end',
1876
+ originY: 'bottom',
1877
+ overlayX: 'end',
1878
+ overlayY: 'top',
1879
+ offsetY: 4,
1880
+ },
1881
+ {
1882
+ originX: 'end',
1883
+ originY: 'top',
1884
+ overlayX: 'end',
1885
+ overlayY: 'bottom',
1886
+ offsetY: -4,
1887
+ },
1888
+ ];
1889
+ }
1890
+ toggle() {
1891
+ this.isOpen.update((v) => !v);
1892
+ }
1893
+ close() {
1894
+ this.isOpen.set(false);
1895
+ }
1896
+ selectOption(option) {
1897
+ this.value.set(option.value);
1898
+ this.close();
1899
+ }
1900
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1901
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarSelectComponent, isStandalone: true, selector: "ndt-select", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0, template: `
1902
+ <div
1903
+ class="dev-toolbar select"
1904
+ [class.small]="size() === 'small'"
1905
+ [class.open]="isOpen()"
1906
+ [attr.aria-label]="ariaLabel()"
1907
+ [attr.aria-expanded]="isOpen()"
1908
+ [attr.aria-controls]="selectMenuId"
1909
+ [attr.data-theme]="theme()"
1910
+ cdkOverlayOrigin
1911
+ #trigger="cdkOverlayOrigin"
1912
+ (click)="toggle()"
1913
+ (keydown.enter)="toggle()"
1914
+ (keydown.space)="toggle()"
1915
+ tabindex="0"
1916
+ role="combobox"
1917
+ >
1918
+ <span class="select__value">{{ selectedLabel() }}</span>
1919
+ <span class="select__arrow" aria-hidden="true"></span>
1920
+ </div>
1921
+
1922
+ <ng-template
1923
+ cdkConnectedOverlay
1924
+ [cdkConnectedOverlayOrigin]="trigger"
1925
+ [cdkConnectedOverlayOpen]="isOpen()"
1926
+ [cdkConnectedOverlayPositions]="positions"
1927
+ (overlayOutsideClick)="close()"
1928
+ >
1929
+ <div
1930
+ [id]="selectMenuId"
1931
+ class="dev-toolbar select-menu"
1932
+ cdkMenu
1933
+ role="listbox"
1934
+ [attr.data-theme]="theme()"
1935
+ >
1936
+ @for (option of options(); track option.value) {
1937
+ <button
1938
+ class="select-menu-item"
1939
+ [class.selected]="option.value === value()"
1940
+ [attr.aria-selected]="option.value === value()"
1941
+ cdkMenuItem
1942
+ type="button"
1943
+ (click)="selectOption(option)"
1944
+ >
1945
+ {{ option.label }}
1946
+ </button>
1947
+ }
1948
+ </div>
1949
+ </ng-template>
1950
+ `, isInline: true, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.select{position:relative;width:100%;min-width:120px;display:flex;align-items:center;justify-content:space-between;padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-small);background-color:var(--ndt-bg-primary);color:var(--ndt-text-primary);font-size:var(--ndt-font-size-sm);cursor:pointer;-webkit-user-select:none;user-select:none;transition:var(--ndt-transition-default);outline:none;height:32px;box-sizing:border-box}.select:hover{background-color:var(--ndt-hover-bg);border-color:var(--ndt-primary)}.select:focus-visible{outline:none;border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}.select.small{padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);font-size:var(--ndt-font-size-sm);height:24px}.select.open{border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}.select.open .select__arrow{transform:rotate(180deg)}.select__value{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1;margin-right:var(--ndt-spacing-sm);min-width:0}.select__arrow{width:16px;height:16px;flex-shrink:0;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:center;background-size:contain;transition:transform .2s ease;opacity:.9}.select-menu{display:inline-flex;flex-direction:column;min-width:180px;background-color:var(--ndt-bg-primary);padding:var(--ndt-spacing-xs) 0;border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-small);box-shadow:var(--ndt-shadow-window);color:var(--ndt-text-primary);max-height:min(400px,70vh);overflow-y:auto;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.select-menu::-webkit-scrollbar{width:8px;height:8px}.select-menu::-webkit-scrollbar-track{background:transparent}.select-menu::-webkit-scrollbar-thumb{background-color:var(--ndt-border-primary);border-radius:4px;border:2px solid var(--ndt-bg-primary)}.select-menu-item{background-color:transparent;cursor:pointer;border:none;color:inherit;-webkit-user-select:none;user-select:none;min-width:64px;line-height:36px;padding:0 var(--ndt-spacing-md);display:flex;align-items:center;flex-direction:row;flex:1;font-size:var(--ndt-font-size-sm);font-family:inherit;position:relative;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.select-menu-item:hover{background-color:var(--ndt-hover-bg)}.select-menu-item:active{background-color:rgba(var(--ndt-primary-rgb),.15)}.select-menu-item.selected{color:var(--ndt-primary);background-color:rgba(var(--ndt-primary-rgb),.1);font-weight:500}.select-menu-item.selected:hover{background-color:rgba(var(--ndt-primary-rgb),.15)}.select-menu-item.selected:before{content:\"\";position:absolute;left:0;top:8px;width:3px;height:calc(100% - 16px);background-color:var(--ndt-primary);border-radius:2px}.select-menu-item:focus-visible{outline:none;background-color:var(--ndt-hover-bg)}.select-overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "ngmodule", type: CdkMenuModule }, { kind: "directive", type: i2.CdkMenu, selector: "[cdkMenu]", outputs: ["closed"], exportAs: ["cdkMenu"] }, { kind: "directive", type: i2.CdkMenuItem, selector: "[cdkMenuItem]", inputs: ["cdkMenuItemDisabled", "cdkMenuitemTypeaheadLabel"], outputs: ["cdkMenuItemTriggered"], exportAs: ["cdkMenuItem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1951
+ }
1952
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarSelectComponent, decorators: [{
1953
+ type: Component,
1954
+ args: [{ selector: 'ndt-select', standalone: true, imports: [CommonModule, FormsModule, OverlayModule, CdkMenuModule], template: `
1955
+ <div
1956
+ class="dev-toolbar select"
1957
+ [class.small]="size() === 'small'"
1958
+ [class.open]="isOpen()"
1959
+ [attr.aria-label]="ariaLabel()"
1960
+ [attr.aria-expanded]="isOpen()"
1961
+ [attr.aria-controls]="selectMenuId"
1962
+ [attr.data-theme]="theme()"
1963
+ cdkOverlayOrigin
1964
+ #trigger="cdkOverlayOrigin"
1965
+ (click)="toggle()"
1966
+ (keydown.enter)="toggle()"
1967
+ (keydown.space)="toggle()"
1968
+ tabindex="0"
1969
+ role="combobox"
1970
+ >
1971
+ <span class="select__value">{{ selectedLabel() }}</span>
1972
+ <span class="select__arrow" aria-hidden="true"></span>
1973
+ </div>
1974
+
1975
+ <ng-template
1976
+ cdkConnectedOverlay
1977
+ [cdkConnectedOverlayOrigin]="trigger"
1978
+ [cdkConnectedOverlayOpen]="isOpen()"
1979
+ [cdkConnectedOverlayPositions]="positions"
1980
+ (overlayOutsideClick)="close()"
1981
+ >
1982
+ <div
1983
+ [id]="selectMenuId"
1984
+ class="dev-toolbar select-menu"
1985
+ cdkMenu
1986
+ role="listbox"
1987
+ [attr.data-theme]="theme()"
1988
+ >
1989
+ @for (option of options(); track option.value) {
1990
+ <button
1991
+ class="select-menu-item"
1992
+ [class.selected]="option.value === value()"
1993
+ [attr.aria-selected]="option.value === value()"
1994
+ cdkMenuItem
1995
+ type="button"
1996
+ (click)="selectOption(option)"
1997
+ >
1998
+ {{ option.label }}
1999
+ </button>
2000
+ }
2001
+ </div>
2002
+ </ng-template>
2003
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.select{position:relative;width:100%;min-width:120px;display:flex;align-items:center;justify-content:space-between;padding:var(--ndt-spacing-sm) var(--ndt-spacing-md);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-small);background-color:var(--ndt-bg-primary);color:var(--ndt-text-primary);font-size:var(--ndt-font-size-sm);cursor:pointer;-webkit-user-select:none;user-select:none;transition:var(--ndt-transition-default);outline:none;height:32px;box-sizing:border-box}.select:hover{background-color:var(--ndt-hover-bg);border-color:var(--ndt-primary)}.select:focus-visible{outline:none;border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}.select.small{padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);font-size:var(--ndt-font-size-sm);height:24px}.select.open{border-color:var(--ndt-primary);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}.select.open .select__arrow{transform:rotate(180deg)}.select__value{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1;margin-right:var(--ndt-spacing-sm);min-width:0}.select__arrow{width:16px;height:16px;flex-shrink:0;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:center;background-size:contain;transition:transform .2s ease;opacity:.9}.select-menu{display:inline-flex;flex-direction:column;min-width:180px;background-color:var(--ndt-bg-primary);padding:var(--ndt-spacing-xs) 0;border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-small);box-shadow:var(--ndt-shadow-window);color:var(--ndt-text-primary);max-height:min(400px,70vh);overflow-y:auto;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.select-menu::-webkit-scrollbar{width:8px;height:8px}.select-menu::-webkit-scrollbar-track{background:transparent}.select-menu::-webkit-scrollbar-thumb{background-color:var(--ndt-border-primary);border-radius:4px;border:2px solid var(--ndt-bg-primary)}.select-menu-item{background-color:transparent;cursor:pointer;border:none;color:inherit;-webkit-user-select:none;user-select:none;min-width:64px;line-height:36px;padding:0 var(--ndt-spacing-md);display:flex;align-items:center;flex-direction:row;flex:1;font-size:var(--ndt-font-size-sm);font-family:inherit;position:relative;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.select-menu-item:hover{background-color:var(--ndt-hover-bg)}.select-menu-item:active{background-color:rgba(var(--ndt-primary-rgb),.15)}.select-menu-item.selected{color:var(--ndt-primary);background-color:rgba(var(--ndt-primary-rgb),.1);font-weight:500}.select-menu-item.selected:hover{background-color:rgba(var(--ndt-primary-rgb),.15)}.select-menu-item.selected:before{content:\"\";position:absolute;left:0;top:8px;width:3px;height:calc(100% - 16px);background-color:var(--ndt-primary);border-radius:2px}.select-menu-item:focus-visible{outline:none;background-color:var(--ndt-hover-bg)}.select-overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}\n"] }]
2004
+ }] });
2005
+
2006
+ class DevToolsStorageService {
2007
+ constructor() {
2008
+ this.PREFIX = 'AngularDevTools.';
2009
+ this.TOOLS_KEY = `${this.PREFIX}keys`;
2010
+ this.SETTINGS_KEY = `${this.PREFIX}settings`;
2011
+ }
2012
+ set(key, value) {
2013
+ const toolKey = this.getToolKey(key);
2014
+ this.addToolKey(toolKey);
2015
+ localStorage.setItem(toolKey, JSON.stringify(value));
2016
+ }
2017
+ get(key) {
2018
+ const toolKey = this.getToolKey(key);
2019
+ const item = localStorage.getItem(toolKey);
2020
+ return item ? JSON.parse(item) : null;
2021
+ }
2022
+ remove(key) {
2023
+ const toolKey = this.getToolKey(key);
2024
+ localStorage.removeItem(toolKey);
2025
+ this.removeToolKey(toolKey);
2026
+ }
2027
+ getAllSettings() {
2028
+ const settings = {};
2029
+ const keys = this.getToolKeys();
2030
+ keys.forEach((key) => {
2031
+ const value = this.get(key);
2032
+ if (value !== null) {
2033
+ settings[key] = value;
2034
+ }
2035
+ });
2036
+ return settings;
2037
+ }
2038
+ setAllSettings(settings) {
2039
+ Object.entries(settings).forEach(([key, value]) => {
2040
+ this.set(key, value);
2041
+ });
2042
+ }
2043
+ clearAllSettings() {
2044
+ const keys = this.getToolKeys();
2045
+ keys.forEach((key) => {
2046
+ this.remove(key);
2047
+ });
2048
+ }
2049
+ getToolKeys() {
2050
+ return JSON.parse(localStorage.getItem(this.TOOLS_KEY) ?? '[]');
2051
+ }
2052
+ addToolKey(key) {
2053
+ const currentKeys = this.getToolKeys();
2054
+ if (currentKeys.includes(key)) {
2055
+ return;
2056
+ }
2057
+ currentKeys.push(key);
2058
+ localStorage.setItem(this.TOOLS_KEY, JSON.stringify(currentKeys));
2059
+ }
2060
+ removeToolKey(key) {
2061
+ const currentKeys = this.getToolKeys();
2062
+ const index = currentKeys.indexOf(key);
2063
+ if (index !== -1) {
2064
+ currentKeys.splice(index, 1);
2065
+ }
2066
+ localStorage.setItem(this.TOOLS_KEY, JSON.stringify(currentKeys));
2067
+ }
2068
+ getToolKey(key) {
2069
+ return key.includes(this.PREFIX) ? key : this.PREFIX + key;
2070
+ }
2071
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolsStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2072
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolsStorageService, providedIn: 'root' }); }
2073
+ }
2074
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolsStorageService, decorators: [{
2075
+ type: Injectable,
2076
+ args: [{ providedIn: 'root' }]
2077
+ }] });
2078
+
2079
+ class DevToolbarInternalFeatureFlagService {
2080
+ constructor() {
2081
+ this.STORAGE_KEY = 'feature-flags';
2082
+ this.storageService = inject(DevToolsStorageService);
2083
+ this.appFlags$ = new BehaviorSubject([]);
2084
+ this.forcedFlagsSubject = new BehaviorSubject({
2085
+ enabled: [],
2086
+ disabled: [],
2087
+ });
2088
+ this.forcedFlags$ = this.forcedFlagsSubject.asObservable();
2089
+ this.flags$ = combineLatest([
2090
+ this.appFlags$,
2091
+ this.forcedFlags$,
2092
+ ]).pipe(map(([appFlags, { enabled, disabled }]) => {
2093
+ return appFlags.map((flag) => ({
2094
+ ...flag,
2095
+ isForced: enabled.includes(flag.id) || disabled.includes(flag.id),
2096
+ isEnabled: enabled.includes(flag.id),
2097
+ }));
2098
+ }));
2099
+ this.flags = toSignal(this.flags$, { initialValue: [] });
2100
+ this.loadForcedFlags();
2101
+ }
2102
+ setAppFlags(flags) {
2103
+ this.appFlags$.next(flags);
2104
+ }
2105
+ getAppFlags() {
2106
+ return this.appFlags$.asObservable();
2107
+ }
2108
+ getForcedFlags() {
2109
+ return this.flags$.pipe(map((flags) => flags.filter((flag) => flag.isForced)));
2110
+ }
2111
+ setFlag(flagId, isEnabled) {
2112
+ const { enabled, disabled } = this.forcedFlagsSubject.value;
2113
+ const newEnabled = enabled.filter((id) => id !== flagId);
2114
+ const newDisabled = disabled.filter((id) => id !== flagId);
2115
+ if (isEnabled) {
2116
+ newEnabled.push(flagId);
2117
+ }
2118
+ else {
2119
+ newDisabled.push(flagId);
2120
+ }
2121
+ const newState = { enabled: newEnabled, disabled: newDisabled };
2122
+ this.forcedFlagsSubject.next(newState);
2123
+ this.storageService.set(this.STORAGE_KEY, newState);
2124
+ }
2125
+ removeFlagOverride(flagId) {
2126
+ const { enabled, disabled } = this.forcedFlagsSubject.value;
2127
+ const newState = {
2128
+ enabled: enabled.filter((id) => id !== flagId),
2129
+ disabled: disabled.filter((id) => id !== flagId),
2130
+ };
2131
+ this.forcedFlagsSubject.next(newState);
2132
+ this.storageService.set(this.STORAGE_KEY, newState);
2133
+ }
2134
+ loadForcedFlags() {
2135
+ const savedFlags = this.storageService.get(this.STORAGE_KEY);
2136
+ if (savedFlags) {
2137
+ this.forcedFlagsSubject.next(savedFlags);
2138
+ }
2139
+ }
2140
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalFeatureFlagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2141
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalFeatureFlagService, providedIn: 'root' }); }
2142
+ }
2143
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalFeatureFlagService, decorators: [{
2144
+ type: Injectable,
2145
+ args: [{ providedIn: 'root' }]
2146
+ }], ctorParameters: () => [] });
2147
+
2148
+ class DevToolbarFeatureFlagsToolComponent {
2149
+ constructor() {
2150
+ // Injects
2151
+ this.featureFlags = inject(DevToolbarInternalFeatureFlagService);
2152
+ // Signals
2153
+ this.activeFilter = signal('all');
2154
+ this.searchQuery = signal('');
2155
+ this.flags = this.featureFlags.flags;
2156
+ this.hasNoFlags = computed(() => this.flags().length === 0);
2157
+ this.filteredFlags = computed(() => {
2158
+ return this.flags().filter((flag) => {
2159
+ const searchTerm = this.searchQuery().toLowerCase();
2160
+ const flagName = flag.name.toLowerCase();
2161
+ const flagDescription = flag.description?.toLowerCase() ?? '';
2162
+ const matchesSearch = !this.searchQuery() ||
2163
+ flagName.toLowerCase().includes(searchTerm.toLowerCase()) ||
2164
+ flagDescription.toLowerCase().includes(searchTerm.toLowerCase());
2165
+ const matchesFilter = this.activeFilter() === 'all' ||
2166
+ (this.activeFilter() === 'forced' && flag.isForced) ||
2167
+ (this.activeFilter() === 'enabled' && flag.isEnabled) ||
2168
+ (this.activeFilter() === 'disabled' && !flag.isEnabled);
2169
+ return matchesSearch && matchesFilter;
2170
+ });
2171
+ });
2172
+ this.hasNoFilteredFlags = computed(() => this.filteredFlags().length === 0);
2173
+ // Other properties
2174
+ this.options = {
2175
+ title: 'Feature Flags',
2176
+ description: 'Manage the feature flags for your current session',
2177
+ isClosable: true,
2178
+ size: 'tall',
2179
+ id: 'ndt-feature-flags',
2180
+ isBeta: true,
2181
+ };
2182
+ this.filterOptions = [
2183
+ { value: 'all', label: 'All Flags' },
2184
+ { value: 'forced', label: 'Forced' },
2185
+ { value: 'enabled', label: 'Enabled' },
2186
+ { value: 'disabled', label: 'Disabled' },
2187
+ ];
2188
+ this.flagValueOptions = [
2189
+ { value: 'not-forced', label: 'Not Forced' },
2190
+ { value: 'off', label: 'Forced Off' },
2191
+ { value: 'on', label: 'Forced On' },
2192
+ ];
2193
+ }
2194
+ // Public methods
2195
+ onFilterChange(value) {
2196
+ const filter = this.filterOptions.find((f) => f.value === value);
2197
+ if (filter) {
2198
+ this.activeFilter.set(filter.value);
2199
+ }
2200
+ }
2201
+ onFlagChange(flagId, value) {
2202
+ switch (value) {
2203
+ case 'not-forced':
2204
+ this.featureFlags.removeFlagOverride(flagId);
2205
+ break;
2206
+ case 'on':
2207
+ this.featureFlags.setFlag(flagId, true);
2208
+ break;
2209
+ case 'off':
2210
+ this.featureFlags.setFlag(flagId, false);
2211
+ break;
2212
+ }
2213
+ }
2214
+ onSearchChange(query) {
2215
+ this.searchQuery.set(query);
2216
+ }
2217
+ // Protected methods
2218
+ getFlagValue(flag) {
2219
+ if (!flag.isForced)
2220
+ return '';
2221
+ return flag.isEnabled ? 'on' : 'off';
2222
+ }
2223
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagsToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2224
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarFeatureFlagsToolComponent, isStandalone: true, selector: "ndt-feature-flags-tool", ngImport: i0, template: `
2225
+ <ndt-toolbar-tool
2226
+ [options]="options"
2227
+ title="Feature Flags"
2228
+ icon="toggle-left"
2229
+ >
2230
+ <div class="container">
2231
+ <div class="header">
2232
+ <ndt-input
2233
+ [value]="searchQuery()"
2234
+ (valueChange)="onSearchChange($event)"
2235
+ placeholder="Search..."
2236
+ />
2237
+ <ndt-select
2238
+ [value]="activeFilter()"
2239
+ [options]="filterOptions"
2240
+ [size]="'medium'"
2241
+ (valueChange)="onFilterChange($event)"
2242
+ />
2243
+ </div>
2244
+
2245
+ @if (hasNoFlags()) {
2246
+ <div class="empty">
2247
+ <p>No flags found</p>
2248
+ </div>
2249
+ } @else if (hasNoFilteredFlags()) {
2250
+ <div class="empty">
2251
+ <p>No flags found matching your filter</p>
2252
+ </div>
2253
+ } @else {
2254
+ <div class="flag-list">
2255
+ @for (flag of filteredFlags(); track flag.id) {
2256
+ <div class="flag">
2257
+ <div class="info">
2258
+ <h3>{{ flag.name }}</h3>
2259
+ <p>{{ flag?.description }}</p>
2260
+ </div>
2261
+
2262
+ <ndt-select
2263
+ [value]="getFlagValue(flag)"
2264
+ [options]="flagValueOptions"
2265
+ [ariaLabel]="'Set value for ' + flag.name"
2266
+ (valueChange)="onFlagChange(flag.id, $event ?? '')"
2267
+ size="small"
2268
+ />
2269
+ </div>
2270
+ }
2271
+ </div>
2272
+ }
2273
+ </div>
2274
+ </ndt-toolbar-tool>
2275
+ `, isInline: true, styles: [".container{display:flex;flex-direction:column;height:100%}.header{flex-shrink:0;display:flex;gap:var(--ndt-spacing-sm);margin-bottom:var(--ndt-spacing-md)}.header ndt-input{flex:.65}.header ndt-select{flex:.35}.empty{display:flex;flex-direction:column;gap:var(--ndt-spacing-md);flex:1;min-height:0;justify-content:center;align-items:center;border:1px solid var(--ndt-warning-border);border-radius:var(--ndt-border-radius-medium);padding:var(--ndt-spacing-md);background:var(--ndt-warning-background);color:var(--ndt-text-muted)}.flag-list{display:flex;flex-direction:column;gap:var(--ndt-spacing-md);flex:1;min-height:0;overflow-y:auto;padding-right:var(--ndt-spacing-sm);scrollbar-width:thin;scrollbar-color:var(--ndt-border-primary) var(--ndt-background-secondary)}.flag-list::-webkit-scrollbar{width:8px}.flag-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.flag-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.flag{display:flex;flex-direction:row;gap:var(--ndt-spacing-sm);background:var(--ndt-background-secondary)}.flag .info{flex:0 0 65%}.flag .info h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary)}.flag .info p{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted)}.flag ndt-select{flex:0 0 35%}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: DevToolbarToolComponent, selector: "ndt-toolbar-tool", inputs: ["options", "icon", "title"] }, { kind: "component", type: DevToolbarInputComponent, selector: "ndt-input", inputs: ["value", "type", "placeholder", "ariaLabel", "inputClass"], outputs: ["valueChange"] }, { kind: "component", type: DevToolbarSelectComponent, selector: "ndt-select", inputs: ["value", "options", "ariaLabel", "label", "size"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2276
+ }
2277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagsToolComponent, decorators: [{
2278
+ type: Component,
2279
+ args: [{ selector: 'ndt-feature-flags-tool', standalone: true, imports: [
2280
+ FormsModule,
2281
+ DevToolbarToolComponent,
2282
+ DevToolbarInputComponent,
2283
+ DevToolbarSelectComponent,
2284
+ ], template: `
2285
+ <ndt-toolbar-tool
2286
+ [options]="options"
2287
+ title="Feature Flags"
2288
+ icon="toggle-left"
2289
+ >
2290
+ <div class="container">
2291
+ <div class="header">
2292
+ <ndt-input
2293
+ [value]="searchQuery()"
2294
+ (valueChange)="onSearchChange($event)"
2295
+ placeholder="Search..."
2296
+ />
2297
+ <ndt-select
2298
+ [value]="activeFilter()"
2299
+ [options]="filterOptions"
2300
+ [size]="'medium'"
2301
+ (valueChange)="onFilterChange($event)"
2302
+ />
2303
+ </div>
2304
+
2305
+ @if (hasNoFlags()) {
2306
+ <div class="empty">
2307
+ <p>No flags found</p>
2308
+ </div>
2309
+ } @else if (hasNoFilteredFlags()) {
2310
+ <div class="empty">
2311
+ <p>No flags found matching your filter</p>
2312
+ </div>
2313
+ } @else {
2314
+ <div class="flag-list">
2315
+ @for (flag of filteredFlags(); track flag.id) {
2316
+ <div class="flag">
2317
+ <div class="info">
2318
+ <h3>{{ flag.name }}</h3>
2319
+ <p>{{ flag?.description }}</p>
2320
+ </div>
2321
+
2322
+ <ndt-select
2323
+ [value]="getFlagValue(flag)"
2324
+ [options]="flagValueOptions"
2325
+ [ariaLabel]="'Set value for ' + flag.name"
2326
+ (valueChange)="onFlagChange(flag.id, $event ?? '')"
2327
+ size="small"
2328
+ />
2329
+ </div>
2330
+ }
2331
+ </div>
2332
+ }
2333
+ </div>
2334
+ </ndt-toolbar-tool>
2335
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".container{display:flex;flex-direction:column;height:100%}.header{flex-shrink:0;display:flex;gap:var(--ndt-spacing-sm);margin-bottom:var(--ndt-spacing-md)}.header ndt-input{flex:.65}.header ndt-select{flex:.35}.empty{display:flex;flex-direction:column;gap:var(--ndt-spacing-md);flex:1;min-height:0;justify-content:center;align-items:center;border:1px solid var(--ndt-warning-border);border-radius:var(--ndt-border-radius-medium);padding:var(--ndt-spacing-md);background:var(--ndt-warning-background);color:var(--ndt-text-muted)}.flag-list{display:flex;flex-direction:column;gap:var(--ndt-spacing-md);flex:1;min-height:0;overflow-y:auto;padding-right:var(--ndt-spacing-sm);scrollbar-width:thin;scrollbar-color:var(--ndt-border-primary) var(--ndt-background-secondary)}.flag-list::-webkit-scrollbar{width:8px}.flag-list::-webkit-scrollbar-track{background:var(--ndt-background-secondary);border-radius:4px}.flag-list::-webkit-scrollbar-thumb{background:var(--ndt-border-primary);border-radius:4px}:is():hover{background:var(--ndt-hover-bg)}.flag{display:flex;flex-direction:row;gap:var(--ndt-spacing-sm);background:var(--ndt-background-secondary)}.flag .info{flex:0 0 65%}.flag .info h3{margin:0;font-size:var(--ndt-font-size-md);color:var(--ndt-text-primary)}.flag .info p{font-size:var(--ndt-font-size-xs);color:var(--ndt-text-muted)}.flag ndt-select{flex:0 0 35%}\n"] }]
2336
+ }] });
2337
+
2338
+ class DevToolbarButtonComponent {
2339
+ constructor() {
2340
+ this.type = input('button');
2341
+ this.variant = input('default');
2342
+ this.icon = input();
2343
+ this.label = input();
2344
+ this.ariaLabel = input();
2345
+ this.isActive = input(false);
2346
+ }
2347
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2348
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarButtonComponent, isStandalone: true, selector: "ndt-button", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, isActive: { classPropertyName: "isActive", publicName: "isActive", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
2349
+ <button
2350
+ class="button"
2351
+ [attr.aria-label]="ariaLabel()"
2352
+ [type]="type()"
2353
+ [class.button--active]="isActive()"
2354
+ [class.button--icon]="variant() === 'icon'"
2355
+ >
2356
+ @if (icon()) {
2357
+ <ndt-icon [name]="icon() || 'star'" />
2358
+ }
2359
+ @if (label()) {
2360
+ <span class="button__label">{{ label() }}</span>
2361
+ }
2362
+ <ng-content />
2363
+ </button>
2364
+ `, isInline: true, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.button{display:inline-flex;align-items:center;gap:var(--ndt-spacing-xs);padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-medium);background:var(--ndt-bg-primary);color:var(--ndt-text-primary);cursor:pointer;transition:var(--ndt-transition-default);outline:none;font-family:inherit}.button:hover{background:var(--ndt-hover-bg);border-color:var(--ndt-primary)}.button:focus-visible{outline:none;background:var(--ndt-hover-bg);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}.button.primary{background:var(--ndt-primary);color:var(--ndt-text-on-primary);border-color:var(--ndt-primary)}.button.primary:hover{background:var(--ndt-primary);border-color:var(--ndt-primary)}.button.icon-only{padding:var(--ndt-spacing-xs);width:32px;height:32px;justify-content:center}.button.small{font-size:var(--ndt-font-size-sm)}\n"], dependencies: [{ kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2365
+ }
2366
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarButtonComponent, decorators: [{
2367
+ type: Component,
2368
+ args: [{ selector: 'ndt-button', standalone: true, imports: [DevToolbarIconComponent], template: `
2369
+ <button
2370
+ class="button"
2371
+ [attr.aria-label]="ariaLabel()"
2372
+ [type]="type()"
2373
+ [class.button--active]="isActive()"
2374
+ [class.button--icon]="variant() === 'icon'"
2375
+ >
2376
+ @if (icon()) {
2377
+ <ndt-icon [name]="icon() || 'star'" />
2378
+ }
2379
+ @if (label()) {
2380
+ <span class="button__label">{{ label() }}</span>
2381
+ }
2382
+ <ng-content />
2383
+ </button>
2384
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.button{display:inline-flex;align-items:center;gap:var(--ndt-spacing-xs);padding:var(--ndt-spacing-xs) var(--ndt-spacing-sm);border:1px solid var(--ndt-border-primary);border-radius:var(--ndt-border-radius-medium);background:var(--ndt-bg-primary);color:var(--ndt-text-primary);cursor:pointer;transition:var(--ndt-transition-default);outline:none;font-family:inherit}.button:hover{background:var(--ndt-hover-bg);border-color:var(--ndt-primary)}.button:focus-visible{outline:none;background:var(--ndt-hover-bg);box-shadow:0 0 0 2px rgba(var(--ndt-primary-rgb),.2)}.button.primary{background:var(--ndt-primary);color:var(--ndt-text-on-primary);border-color:var(--ndt-primary)}.button.primary:hover{background:var(--ndt-primary);border-color:var(--ndt-primary)}.button.icon-only{padding:var(--ndt-spacing-xs);width:32px;height:32px;justify-content:center}.button.small{font-size:var(--ndt-font-size-sm)}\n"] }]
2385
+ }] });
2386
+
2387
+ class DevToolbarCardComponent {
2388
+ constructor() {
2389
+ this.click = signal(undefined);
2390
+ this.isHovered = signal(false);
2391
+ }
2392
+ onClick() {
2393
+ this.click.set();
2394
+ }
2395
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2396
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: DevToolbarCardComponent, isStandalone: true, selector: "ndt-card", ngImport: i0, template: `
2397
+ <div
2398
+ class="card"
2399
+ role="button"
2400
+ tabindex="0"
2401
+ (click)="onClick()"
2402
+ (keydown.enter)="onClick()"
2403
+ (keydown.space)="onClick()"
2404
+ [class.card--hover]="isHovered()"
2405
+ (mouseenter)="isHovered.set(true)"
2406
+ (mouseleave)="isHovered.set(false)"
2407
+ >
2408
+ <ng-content></ng-content>
2409
+ </div>
2410
+ `, isInline: true, styles: [".card{background:var(--ndt-bg-primary);border-radius:var(--ndt-border-radius-large);padding:var(--ndt-spacing-md);cursor:pointer;transition:var(--ndt-transition-default);border:1px solid var(--ndt-border-subtle);position:relative;flex:1;height:120px;display:flex}.card:hover{background:var(--ndt-hover-bg);border-color:var(--ndt-primary);box-shadow:0 0 0 1px rgba(var(--ndt-primary-rgb),.3)}\n"] }); }
2411
+ }
2412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarCardComponent, decorators: [{
2413
+ type: Component,
2414
+ args: [{ selector: 'ndt-card', standalone: true, template: `
2415
+ <div
2416
+ class="card"
2417
+ role="button"
2418
+ tabindex="0"
2419
+ (click)="onClick()"
2420
+ (keydown.enter)="onClick()"
2421
+ (keydown.space)="onClick()"
2422
+ [class.card--hover]="isHovered()"
2423
+ (mouseenter)="isHovered.set(true)"
2424
+ (mouseleave)="isHovered.set(false)"
2425
+ >
2426
+ <ng-content></ng-content>
2427
+ </div>
2428
+ `, styles: [".card{background:var(--ndt-bg-primary);border-radius:var(--ndt-border-radius-large);padding:var(--ndt-spacing-md);cursor:pointer;transition:var(--ndt-transition-default);border:1px solid var(--ndt-border-subtle);position:relative;flex:1;height:120px;display:flex}.card:hover{background:var(--ndt-hover-bg);border-color:var(--ndt-primary);box-shadow:0 0 0 1px rgba(var(--ndt-primary-rgb),.3)}\n"] }]
2429
+ }] });
2430
+
2431
+ class DevToolbarClickableCardComponent {
2432
+ constructor() {
2433
+ this.icon = input.required();
2434
+ this.title = input.required();
2435
+ this.subtitle = input.required();
2436
+ this.click = signal(undefined);
2437
+ }
2438
+ onClick() {
2439
+ this.click.set();
2440
+ }
2441
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarClickableCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2442
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: DevToolbarClickableCardComponent, isStandalone: true, selector: "ndt-clickable-card", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: true, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
2443
+ <ndt-card (clicked)="onClick()">
2444
+ <div class="clickable-card">
2445
+ <div class="clickable-card__icon">
2446
+ <ndt-icon [name]="icon()" />
2447
+ </div>
2448
+ <div class="clickable-card__content">
2449
+ <div class="clickable-card__title">{{ title() }}</div>
2450
+ <div class="clickable-card__subtitle">{{ subtitle() }}</div>
2451
+ </div>
2452
+ </div>
2453
+ </ndt-card>
2454
+ `, isInline: true, styles: [".clickable-card{display:flex;flex-direction:column;gap:var(--ndt-spacing-sm);height:100%}.clickable-card__icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--ndt-border-radius-medium);background:var(--ndt-hover-bg);color:var(--ndt-text-primary)}.clickable-card__content{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.clickable-card__title{color:var(--ndt-text-primary);font-size:var(--ndt-font-size-sm);font-weight:500}.clickable-card__subtitle{color:var(--ndt-text-muted);font-size:var(--ndt-font-size-xs);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}\n"], dependencies: [{ kind: "component", type: DevToolbarCardComponent, selector: "ndt-card" }, { kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }] }); }
2455
+ }
2456
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarClickableCardComponent, decorators: [{
2457
+ type: Component,
2458
+ args: [{ selector: 'ndt-clickable-card', standalone: true, imports: [DevToolbarCardComponent, DevToolbarIconComponent], template: `
2459
+ <ndt-card (clicked)="onClick()">
2460
+ <div class="clickable-card">
2461
+ <div class="clickable-card__icon">
2462
+ <ndt-icon [name]="icon()" />
2463
+ </div>
2464
+ <div class="clickable-card__content">
2465
+ <div class="clickable-card__title">{{ title() }}</div>
2466
+ <div class="clickable-card__subtitle">{{ subtitle() }}</div>
2467
+ </div>
2468
+ </div>
2469
+ </ndt-card>
2470
+ `, styles: [".clickable-card{display:flex;flex-direction:column;gap:var(--ndt-spacing-sm);height:100%}.clickable-card__icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--ndt-border-radius-medium);background:var(--ndt-hover-bg);color:var(--ndt-text-primary)}.clickable-card__content{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.clickable-card__title{color:var(--ndt-text-primary);font-size:var(--ndt-font-size-sm);font-weight:500}.clickable-card__subtitle{color:var(--ndt-text-muted);font-size:var(--ndt-font-size-xs);line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}\n"] }]
2471
+ }] });
2472
+
2473
+ class DevToolbarLinkButtonComponent {
2474
+ constructor() {
2475
+ this.url = input.required();
2476
+ this.icon = input.required();
2477
+ }
2478
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLinkButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2479
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.5", type: DevToolbarLinkButtonComponent, isStandalone: true, selector: "ndt-link-button", inputs: { url: { classPropertyName: "url", publicName: "url", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
2480
+ <a
2481
+ [href]="url()"
2482
+ target="_blank"
2483
+ rel="noopener noreferrer"
2484
+ class="link-button"
2485
+ >
2486
+ <div class="link-button__icon">
2487
+ <ndt-icon [name]="icon()" />
2488
+ </div>
2489
+ <span class="link-button__text">
2490
+ <ng-content></ng-content>
2491
+ </span>
2492
+ </a>
2493
+ `, isInline: true, styles: [".link-button{display:flex;flex-direction:column;align-items:center;gap:var(--ndt-spacing-xs);text-decoration:none;color:var(--ndt-text-muted);transition:var(--ndt-transition-default)}.link-button:hover{color:var(--ndt-text-primary)}.link-button:hover .link-button__icon{outline:2px solid var(--ndt-primary);outline-offset:2px;box-shadow:0 0 8px var(--ndt-primary)}.link-button__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--ndt-border-radius-medium);background:var(--ndt-hover-bg);transition:all .2s ease-in-out}.link-button__text{font-size:var(--ndt-font-size-xs);text-align:center;white-space:nowrap}\n"], dependencies: [{ kind: "component", type: DevToolbarIconComponent, selector: "ndt-icon", inputs: ["name"] }] }); }
2494
+ }
2495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLinkButtonComponent, decorators: [{
2496
+ type: Component,
2497
+ args: [{ selector: 'ndt-link-button', standalone: true, imports: [DevToolbarIconComponent], template: `
2498
+ <a
2499
+ [href]="url()"
2500
+ target="_blank"
2501
+ rel="noopener noreferrer"
2502
+ class="link-button"
2503
+ >
2504
+ <div class="link-button__icon">
2505
+ <ndt-icon [name]="icon()" />
2506
+ </div>
2507
+ <span class="link-button__text">
2508
+ <ng-content></ng-content>
2509
+ </span>
2510
+ </a>
2511
+ `, styles: [".link-button{display:flex;flex-direction:column;align-items:center;gap:var(--ndt-spacing-xs);text-decoration:none;color:var(--ndt-text-muted);transition:var(--ndt-transition-default)}.link-button:hover{color:var(--ndt-text-primary)}.link-button:hover .link-button__icon{outline:2px solid var(--ndt-primary);outline-offset:2px;box-shadow:0 0 8px var(--ndt-primary)}.link-button__icon{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:var(--ndt-border-radius-medium);background:var(--ndt-hover-bg);transition:all .2s ease-in-out}.link-button__text{font-size:var(--ndt-font-size-xs);text-align:center;white-space:nowrap}\n"] }]
2512
+ }] });
2513
+
2514
+ class SettingsService {
2515
+ constructor() {
2516
+ this.STORAGE_KEY = 'settings';
2517
+ this.storageService = inject(DevToolsStorageService);
2518
+ }
2519
+ getSettings() {
2520
+ return (this.storageService.get(this.STORAGE_KEY) || {
2521
+ isDarkMode: false,
2522
+ });
2523
+ }
2524
+ setSettings(settings) {
2525
+ this.storageService.set(this.STORAGE_KEY, settings);
2526
+ }
2527
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2528
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SettingsService, providedIn: 'root' }); }
2529
+ }
2530
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SettingsService, decorators: [{
2531
+ type: Injectable,
2532
+ args: [{ providedIn: 'root' }]
2533
+ }] });
2534
+
2535
+ class DevToolbarHomeToolComponent {
2536
+ constructor() {
2537
+ this.state = inject(DevToolbarStateService);
2538
+ this.settingsService = inject(SettingsService);
2539
+ this.storageService = inject(DevToolsStorageService);
2540
+ this.badge = input();
2541
+ this.title = `Angular Dev Toolbar`;
2542
+ this.options = {
2543
+ title: this.title,
2544
+ isClosable: true,
2545
+ id: 'ndt-home',
2546
+ size: 'medium',
2547
+ description: '',
2548
+ isBeta: true,
2549
+ };
2550
+ this.links = [
2551
+ {
2552
+ icon: 'bug',
2553
+ url: 'https://github.com/alfredoperez/ngx-dev-toolbar/issues',
2554
+ label: 'Bug report',
2555
+ },
2556
+ {
2557
+ icon: 'lightbulb',
2558
+ url: 'https://github.com/alfredoperez/ngx-dev-toolbar/discussions',
2559
+ label: 'Suggestions',
2560
+ },
2561
+ {
2562
+ icon: 'docs',
2563
+ url: 'https://alfredoperez.github.io/ngx-dev-toolbar/',
2564
+ label: 'Docs',
2565
+ },
2566
+ {
2567
+ icon: 'star',
2568
+ url: 'https://github.com/alfredoperez/ngx-dev-toolbar',
2569
+ label: 'Star on GitHub',
2570
+ },
2571
+ {
2572
+ icon: 'discord',
2573
+ url: 'https://discord.com/invite/angular',
2574
+ label: 'Community',
2575
+ },
2576
+ ];
2577
+ }
2578
+ onToggleTheme() {
2579
+ const newTheme = this.state.isDarkTheme() ? 'light' : 'dark';
2580
+ this.settingsService.setSettings({ isDarkMode: newTheme === 'dark' });
2581
+ this.state.setTheme(newTheme);
2582
+ }
2583
+ onExportSettings() {
2584
+ const settings = this.storageService.getAllSettings();
2585
+ const blob = new Blob([JSON.stringify(settings, null, 2)], {
2586
+ type: 'application/json',
2587
+ });
2588
+ const url = URL.createObjectURL(blob);
2589
+ const link = document.createElement('a');
2590
+ const timestamp = new Date().toISOString().split('T')[0];
2591
+ link.href = url;
2592
+ link.download = `ngx-dev-toolbar-settings-${timestamp}.json`;
2593
+ document.body.appendChild(link);
2594
+ link.click();
2595
+ document.body.removeChild(link);
2596
+ URL.revokeObjectURL(url);
2597
+ }
2598
+ onImportSettings() {
2599
+ const input = document.createElement('input');
2600
+ input.type = 'file';
2601
+ input.accept = 'application/json';
2602
+ input.onchange = (event) => {
2603
+ const file = event.target.files?.[0];
2604
+ if (file) {
2605
+ const reader = new FileReader();
2606
+ reader.onload = (e) => {
2607
+ try {
2608
+ const settings = JSON.parse(e.target?.result);
2609
+ this.storageService.setAllSettings(settings);
2610
+ window.location.reload();
2611
+ }
2612
+ catch (error) {
2613
+ console.error('Error importing settings:', error);
2614
+ }
2615
+ };
2616
+ reader.readAsText(file);
2617
+ }
2618
+ };
2619
+ input.click();
2620
+ }
2621
+ onResetSettings() {
2622
+ this.storageService.clearAllSettings();
2623
+ window.location.reload();
2624
+ }
2625
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarHomeToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2626
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarHomeToolComponent, isStandalone: true, selector: "ndt-home-tool", inputs: { badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
2627
+ <ndt-toolbar-tool [options]="options" title="Home" icon="angular">
2628
+ <section class="settings">
2629
+ <div class="instruction">
2630
+ <div class="instruction__label">
2631
+ <span class="instruction__label-text">Theme</span>
2632
+ <span class="instruction__label-description">
2633
+ Switch between light and dark mode
2634
+ </span>
2635
+ </div>
2636
+ <div class="instruction__control">
2637
+ <div class="instruction__control-button">
2638
+ <ndt-button
2639
+ [isActive]="true"
2640
+ (click)="onToggleTheme()"
2641
+ variant="icon"
2642
+ [ariaLabel]="
2643
+ state.isDarkTheme()
2644
+ ? 'Switch to light theme'
2645
+ : 'Switch to dark theme'
2646
+ "
2647
+ [icon]="state.isDarkTheme() ? 'sun' : 'moon'"
2648
+ />
2649
+ </div>
2650
+ </div>
2651
+ </div>
2652
+
2653
+ <div class="settings-container">
2654
+ <div class="instruction">
2655
+ <div class="instruction__label">
2656
+ <span class="instruction__label-text">Reset Settings</span>
2657
+ <span class="instruction__label-description">
2658
+ Reset all settings to their default values
2659
+ </span>
2660
+ </div>
2661
+ <div class="instruction__control">
2662
+ <div class="instruction__control-button">
2663
+ <ndt-button
2664
+ variant="icon"
2665
+ icon="trash"
2666
+ ariaLabel="Reset all settings"
2667
+ (click)="onResetSettings()"
2668
+ />
2669
+ </div>
2670
+ </div>
2671
+ </div>
2672
+ <div class="settings-actions">
2673
+ <ndt-clickable-card
2674
+ icon="export"
2675
+ title="Export Settings"
2676
+ subtitle="Export the current settings to share with other devs or use in your tests"
2677
+ (click)="onExportSettings()"
2678
+ />
2679
+ <ndt-clickable-card
2680
+ icon="import"
2681
+ title="Import Settings"
2682
+ subtitle="Import settings to reproduce a scenario"
2683
+ (click)="onImportSettings()"
2684
+ />
2685
+ </div>
2686
+ </div>
2687
+
2688
+ <div class="footer-links">
2689
+ @for (link of links; track link.url) {
2690
+ <ndt-link-button [icon]="link.icon" [url]="link.url">
2691
+ {{ link.label }}
2692
+ </ndt-link-button>
2693
+ }
2694
+ </div>
2695
+ </section>
2696
+ </ndt-toolbar-tool>
2697
+ `, isInline: true, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.settings{display:flex;flex-direction:column;justify-content:space-between;min-height:100%}.instruction{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--ndt-spacing-md)}.instruction__label{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.instruction__label-text{color:var(--ndt-text-primary);font-size:var(--ndt-font-size-sm);font-weight:500}.instruction__label-description{color:var(--ndt-text-muted);font-size:var(--ndt-font-size-xs)}.instruction__control{flex:1}.instruction__control-button{display:flex;gap:var(--ndt-spacing-xs);justify-content:flex-end}.settings-container{display:flex;flex-direction:column}.settings-container .settings-actions{display:flex;gap:var(--ndt-spacing-md);padding-block:var(--ndt-spacing-md)}.settings-container .settings-actions>*{width:50%;min-width:0}.footer-links{border-top:1px solid var(--ndt-border-subtle);padding-top:1em;display:flex;flex-direction:row;justify-content:space-between;gap:var(--ndt-spacing-lg)}\n"], dependencies: [{ kind: "component", type: DevToolbarToolComponent, selector: "ndt-toolbar-tool", inputs: ["options", "icon", "title"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: DevToolbarButtonComponent, selector: "ndt-button", inputs: ["type", "variant", "icon", "label", "ariaLabel", "isActive"] }, { kind: "component", type: DevToolbarClickableCardComponent, selector: "ndt-clickable-card", inputs: ["icon", "title", "subtitle"] }, { kind: "component", type: DevToolbarLinkButtonComponent, selector: "ndt-link-button", inputs: ["url", "icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2698
+ }
2699
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarHomeToolComponent, decorators: [{
2700
+ type: Component,
2701
+ args: [{ selector: 'ndt-home-tool', standalone: true, imports: [
2702
+ DevToolbarToolComponent,
2703
+ FormsModule,
2704
+ DevToolbarButtonComponent,
2705
+ DevToolbarClickableCardComponent,
2706
+ DevToolbarLinkButtonComponent,
2707
+ ], template: `
2708
+ <ndt-toolbar-tool [options]="options" title="Home" icon="angular">
2709
+ <section class="settings">
2710
+ <div class="instruction">
2711
+ <div class="instruction__label">
2712
+ <span class="instruction__label-text">Theme</span>
2713
+ <span class="instruction__label-description">
2714
+ Switch between light and dark mode
2715
+ </span>
2716
+ </div>
2717
+ <div class="instruction__control">
2718
+ <div class="instruction__control-button">
2719
+ <ndt-button
2720
+ [isActive]="true"
2721
+ (click)="onToggleTheme()"
2722
+ variant="icon"
2723
+ [ariaLabel]="
2724
+ state.isDarkTheme()
2725
+ ? 'Switch to light theme'
2726
+ : 'Switch to dark theme'
2727
+ "
2728
+ [icon]="state.isDarkTheme() ? 'sun' : 'moon'"
2729
+ />
2730
+ </div>
2731
+ </div>
2732
+ </div>
2733
+
2734
+ <div class="settings-container">
2735
+ <div class="instruction">
2736
+ <div class="instruction__label">
2737
+ <span class="instruction__label-text">Reset Settings</span>
2738
+ <span class="instruction__label-description">
2739
+ Reset all settings to their default values
2740
+ </span>
2741
+ </div>
2742
+ <div class="instruction__control">
2743
+ <div class="instruction__control-button">
2744
+ <ndt-button
2745
+ variant="icon"
2746
+ icon="trash"
2747
+ ariaLabel="Reset all settings"
2748
+ (click)="onResetSettings()"
2749
+ />
2750
+ </div>
2751
+ </div>
2752
+ </div>
2753
+ <div class="settings-actions">
2754
+ <ndt-clickable-card
2755
+ icon="export"
2756
+ title="Export Settings"
2757
+ subtitle="Export the current settings to share with other devs or use in your tests"
2758
+ (click)="onExportSettings()"
2759
+ />
2760
+ <ndt-clickable-card
2761
+ icon="import"
2762
+ title="Import Settings"
2763
+ subtitle="Import settings to reproduce a scenario"
2764
+ (click)="onImportSettings()"
2765
+ />
2766
+ </div>
2767
+ </div>
2768
+
2769
+ <div class="footer-links">
2770
+ @for (link of links; track link.url) {
2771
+ <ndt-link-button [icon]="link.icon" [url]="link.url">
2772
+ {{ link.label }}
2773
+ </ndt-link-button>
2774
+ }
2775
+ </div>
2776
+ </section>
2777
+ </ndt-toolbar-tool>
2778
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.settings{display:flex;flex-direction:column;justify-content:space-between;min-height:100%}.instruction{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--ndt-spacing-md)}.instruction__label{display:flex;flex-direction:column;gap:var(--ndt-spacing-xs)}.instruction__label-text{color:var(--ndt-text-primary);font-size:var(--ndt-font-size-sm);font-weight:500}.instruction__label-description{color:var(--ndt-text-muted);font-size:var(--ndt-font-size-xs)}.instruction__control{flex:1}.instruction__control-button{display:flex;gap:var(--ndt-spacing-xs);justify-content:flex-end}.settings-container{display:flex;flex-direction:column}.settings-container .settings-actions{display:flex;gap:var(--ndt-spacing-md);padding-block:var(--ndt-spacing-md)}.settings-container .settings-actions>*{width:50%;min-width:0}.footer-links{border-top:1px solid var(--ndt-border-subtle);padding-top:1em;display:flex;flex-direction:row;justify-content:space-between;gap:var(--ndt-spacing-lg)}\n"] }]
2779
+ }] });
2780
+
2781
+ class DevToolbarInternalLanguageService {
2782
+ constructor() {
2783
+ this.STORAGE_KEY = 'language';
2784
+ this.storageService = inject(DevToolsStorageService);
2785
+ this.languages$ = new BehaviorSubject([]);
2786
+ this.forcedLanguage$ = new BehaviorSubject(null);
2787
+ this.languages = toSignal(this.languages$, { initialValue: [] });
2788
+ this.loadForcedLanguage();
2789
+ }
2790
+ setAppLanguages(languages) {
2791
+ this.languages$.next(languages);
2792
+ }
2793
+ getAppLanguages() {
2794
+ return this.languages$.asObservable();
2795
+ }
2796
+ setForcedLanguage(language) {
2797
+ this.forcedLanguage$.next(language);
2798
+ this.storageService.set(this.STORAGE_KEY, language);
2799
+ }
2800
+ getForcedLanguage() {
2801
+ return this.forcedLanguage$.pipe(map((language) => (language ? [language] : [])));
2802
+ }
2803
+ removeForcedLanguage() {
2804
+ this.forcedLanguage$.next(null);
2805
+ this.storageService.remove(this.STORAGE_KEY);
2806
+ }
2807
+ loadForcedLanguage() {
2808
+ const savedLanguage = this.storageService.get(this.STORAGE_KEY);
2809
+ if (savedLanguage) {
2810
+ this.forcedLanguage$.next(savedLanguage);
2811
+ }
2812
+ }
2813
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalLanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2814
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalLanguageService, providedIn: 'root' }); }
2815
+ }
2816
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarInternalLanguageService, decorators: [{
2817
+ type: Injectable,
2818
+ args: [{ providedIn: 'root' }]
2819
+ }], ctorParameters: () => [] });
2820
+
2821
+ class DevToolbarLanguageToolComponent {
2822
+ constructor() {
2823
+ this.languageService = inject(DevToolbarInternalLanguageService);
2824
+ this.options = {
2825
+ title: 'Languages',
2826
+ description: 'Set the language for your current session',
2827
+ size: 'small',
2828
+ id: 'ndt-language',
2829
+ isBeta: true,
2830
+ isClosable: true,
2831
+ };
2832
+ this.activeLanguage = signal('not-forced');
2833
+ this.languageOptions = toSignal(this.languageService.getAppLanguages().pipe(map((languages) => [
2834
+ { value: 'not-forced', label: 'Not Forced' },
2835
+ ...languages.map(({ id: value, name: label }) => ({
2836
+ value,
2837
+ label,
2838
+ })),
2839
+ ])), { initialValue: [] });
2840
+ }
2841
+ async onLanguageChange(language) {
2842
+ if (language === 'not-forced' || !language) {
2843
+ this.languageService.removeForcedLanguage();
2844
+ return;
2845
+ }
2846
+ const languages = await firstValueFrom(this.languageService.getAppLanguages());
2847
+ const selectedLanguage = languages.find(({ id }) => id === language);
2848
+ if (selectedLanguage) {
2849
+ this.languageService.setForcedLanguage(selectedLanguage);
2850
+ }
2851
+ }
2852
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageToolComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2853
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: DevToolbarLanguageToolComponent, isStandalone: true, selector: "ndt-language-tool", ngImport: i0, template: `
2854
+ <ndt-toolbar-tool title="Languages" icon="translate" [options]="options">
2855
+ <div class="language-select">
2856
+ <label for="language-select">Language</label>
2857
+ <ndt-select
2858
+ id="language-select"
2859
+ [value]="activeLanguage()"
2860
+ [options]="languageOptions()"
2861
+ [size]="'medium'"
2862
+ (valueChange)="onLanguageChange($event ?? '')"
2863
+ />
2864
+ </div>
2865
+ </ndt-toolbar-tool>
2866
+ `, isInline: true, styles: [".language-select{display:flex;flex-direction:row;gap:.5rem;align-items:center;justify-content:space-between}\n"], dependencies: [{ kind: "component", type: DevToolbarToolComponent, selector: "ndt-toolbar-tool", inputs: ["options", "icon", "title"] }, { kind: "component", type: DevToolbarSelectComponent, selector: "ndt-select", inputs: ["value", "options", "ariaLabel", "label", "size"], outputs: ["valueChange"] }] }); }
2867
+ }
2868
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageToolComponent, decorators: [{
2869
+ type: Component,
2870
+ args: [{ selector: 'ndt-language-tool', standalone: true, imports: [DevToolbarToolComponent, DevToolbarSelectComponent], template: `
2871
+ <ndt-toolbar-tool title="Languages" icon="translate" [options]="options">
2872
+ <div class="language-select">
2873
+ <label for="language-select">Language</label>
2874
+ <ndt-select
2875
+ id="language-select"
2876
+ [value]="activeLanguage()"
2877
+ [options]="languageOptions()"
2878
+ [size]="'medium'"
2879
+ (valueChange)="onLanguageChange($event ?? '')"
2880
+ />
2881
+ </div>
2882
+ </ndt-toolbar-tool>
2883
+ `, styles: [".language-select{display:flex;flex-direction:row;gap:.5rem;align-items:center;justify-content:space-between}\n"] }]
2884
+ }] });
2885
+
2886
+ class DevToolbarComponent {
2887
+ constructor() {
2888
+ this.state = inject(DevToolbarStateService);
2889
+ this.destroyRef = inject(DestroyRef);
2890
+ this.settingsService = inject(SettingsService);
2891
+ this.isDevMode = isDevMode();
2892
+ this.keyboardShortcut = fromEvent(window, 'keydown')
2893
+ .pipe(filter((event) => event.ctrlKey && event.shiftKey && event.key === 'D'), takeUntilDestroyed(this.destroyRef))
2894
+ .subscribe(() => this.toggleDevTools());
2895
+ this.mouseLeave = fromEvent(document, 'mouseleave')
2896
+ .pipe(throttleTime(3000), takeUntilDestroyed(this.destroyRef))
2897
+ .subscribe(() => this.onMouseLeave());
2898
+ }
2899
+ ngOnInit() {
2900
+ const settings = this.settingsService.getSettings();
2901
+ this.state.setTheme(settings.isDarkMode ? 'dark' : 'light');
2902
+ }
2903
+ onMouseEnter() {
2904
+ this.state.setVisibility(true);
2905
+ }
2906
+ onMouseLeave() {
2907
+ setTimeout(() => this.state.setVisibility(false), this.state.delay());
2908
+ }
2909
+ toggleDevTools() {
2910
+ this.state.setVisibility(!this.state.isVisible());
2911
+ }
2912
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2913
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: DevToolbarComponent, isStandalone: true, selector: "ndt-toolbar", ngImport: i0, template: `
2914
+ @if (isDevMode) {
2915
+ <div
2916
+ aria-label="Developer tools"
2917
+ role="toolbar"
2918
+ class="dev-toolbar"
2919
+ [@toolbarState]="state.isVisible() ? 'visible' : 'hidden'"
2920
+ [attr.data-theme]="state.theme()"
2921
+ [class.dev-toolbar--active]="state.isVisible()"
2922
+ (mouseenter)="onMouseEnter()"
2923
+ >
2924
+ <ndt-home-tool />
2925
+ <ndt-language-tool />
2926
+ <ndt-feature-flags-tool />
2927
+ <ng-content />
2928
+ </div>
2929
+ }
2930
+ `, isInline: true, styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.dev-toolbar{position:fixed;bottom:0;left:50%;z-index:999999;transform:translate(-50%);display:flex;pointer-events:auto;background:var(--ndt-bg-primary);border:1px solid var(--ndt-border-primary);border-radius:9999px;box-shadow:var(--ndt-shadow-toolbar);height:40px;overflow:hidden}.dev-toolbar--active{opacity:1}\n"], dependencies: [{ kind: "component", type: DevToolbarHomeToolComponent, selector: "ndt-home-tool", inputs: ["badge"] }, { kind: "component", type: DevToolbarLanguageToolComponent, selector: "ndt-language-tool" }, { kind: "component", type: DevToolbarFeatureFlagsToolComponent, selector: "ndt-feature-flags-tool" }], animations: [
2931
+ trigger('toolbarState', [
2932
+ state('hidden', style({
2933
+ transform: 'translate(-50%, calc(100% + -1.2rem))',
2934
+ })),
2935
+ state('visible', style({
2936
+ transform: 'translate(-50%, -1rem)',
2937
+ })),
2938
+ transition('hidden <=> visible', [
2939
+ animate('300ms cubic-bezier(0.4, 0, 0.2, 1)'),
2940
+ ]),
2941
+ ]),
2942
+ ] }); }
2943
+ }
2944
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarComponent, decorators: [{
2945
+ type: Component,
2946
+ args: [{ standalone: true, selector: 'ndt-toolbar', imports: [
2947
+ DevToolbarHomeToolComponent,
2948
+ DevToolbarLanguageToolComponent,
2949
+ DevToolbarFeatureFlagsToolComponent,
2950
+ ], template: `
2951
+ @if (isDevMode) {
2952
+ <div
2953
+ aria-label="Developer tools"
2954
+ role="toolbar"
2955
+ class="dev-toolbar"
2956
+ [@toolbarState]="state.isVisible() ? 'visible' : 'hidden'"
2957
+ [attr.data-theme]="state.theme()"
2958
+ [class.dev-toolbar--active]="state.isVisible()"
2959
+ (mouseenter)="onMouseEnter()"
2960
+ >
2961
+ <ndt-home-tool />
2962
+ <ndt-language-tool />
2963
+ <ndt-feature-flags-tool />
2964
+ <ng-content />
2965
+ </div>
2966
+ }
2967
+ `, animations: [
2968
+ trigger('toolbarState', [
2969
+ state('hidden', style({
2970
+ transform: 'translate(-50%, calc(100% + -1.2rem))',
2971
+ })),
2972
+ state('visible', style({
2973
+ transform: 'translate(-50%, -1rem)',
2974
+ })),
2975
+ transition('hidden <=> visible', [
2976
+ animate('300ms cubic-bezier(0.4, 0, 0.2, 1)'),
2977
+ ]),
2978
+ ]),
2979
+ ], styles: [".dev-toolbar{--ndt-border-radius-small: 4px;--ndt-border-radius-medium: 8px;--ndt-border-radius-large: 12px;--ndt-transition-default: all .2s ease-out;--ndt-transition-smooth: all .2s ease-in-out;--ndt-bg-primary: rgb(255, 255, 255);--ndt-bg-gradient: linear-gradient(180deg, rgb(243, 244, 246) 0%, rgba(243, 244, 246, .88) 100%);--ndt-text-primary: rgb(17, 24, 39);--ndt-text-secondary: rgb(55, 65, 81);--ndt-text-muted: rgb(107, 114, 128);--ndt-border-primary: #e5e7eb;--ndt-border-subtle: rgba(17, 24, 39, .1);--ndt-hover-bg: rgba(17, 24, 39, .05);--ndt-hover-danger: rgb(239, 68, 68);--ndt-shadow-toolbar: 0 2px 8px rgba(156, 163, 175, .2);--ndt-shadow-tooltip: 0 0 0 1px rgba(17, 24, 39, .05), 0 4px 8px rgba(107, 114, 128, .15), 0 2px 4px rgba(107, 114, 128, .1);--ndt-shadow-window: 0px 0px 0px 0px rgba(156, 163, 175, .1), 0px 1px 2px 0px rgba(156, 163, 175, .12), 0px 4px 4px 0px rgba(156, 163, 175, .1), 0px 10px 6px 0px rgba(156, 163, 175, .08), 0px 17px 7px 0px rgba(156, 163, 175, .05), 0px 26px 7px 0px rgba(156, 163, 175, .02);--ndt-spacing-xs: 4px;--ndt-spacing-sm: 8px;--ndt-spacing-md: 16px;--ndt-window-padding: 24px;--ndt-font-size-xs: .75rem;--ndt-font-size-sm: .875rem;--ndt-font-size-md: 1rem;--ndt-font-size-lg: 1.25rem;--ndt-font-size-xl: 2rem;--ndt-background-secondary: var(--ndt-bg-primary);--ndt-background-hover: var(--ndt-hover-bg);--ndt-primary: #df30d4;--ndt-primary-rgb: 223, 48, 212;--ndt-text-on-primary: rgb(255, 255, 255);--ndt-border-color: var(--ndt-border-primary);--ndt-note-background: rgb(219, 234, 254);--ndt-note-border: rgba(37, 99, 235, .2);--ndt-warning-background: rgb(254, 249, 195);--ndt-warning-border: rgba(202, 138, 4, .2);--ndt-error-background: rgb(254, 226, 226);--ndt-error-border: rgba(220, 38, 38, .2)}.dev-toolbar[data-theme=dark]{--ndt-bg-primary: rgb(17, 24, 39);--ndt-bg-gradient: linear-gradient(180deg, rgb(19, 21, 26) 0%, rgba(19, 21, 26, .88) 100%);--ndt-text-primary: rgb(255, 255, 255);--ndt-text-secondary: rgb(229, 231, 235);--ndt-text-muted: rgb(156, 163, 175);--ndt-border-primary: #343841;--ndt-border-subtle: rgba(255, 255, 255, .1);--ndt-hover-bg: rgba(255, 255, 255, .12);--ndt-hover-danger: rgb(220, 38, 38);--ndt-shadow-toolbar: 0 2px 8px rgba(19, 21, 26, .3);--ndt-shadow-tooltip: 0 0 0 1px rgba(255, 255, 255, .1), 0 4px 8px rgba(0, 0, 0, .4), 0 2px 4px rgba(0, 0, 0, .3);--ndt-shadow-window: 0px 0px 0px 0px rgba(19, 21, 26, .3), 0px 1px 2px 0px rgba(19, 21, 26, .29), 0px 4px 4px 0px rgba(19, 21, 26, .26), 0px 10px 6px 0px rgba(19, 21, 26, .15), 0px 17px 7px 0px rgba(19, 21, 26, .04), 0px 26px 7px 0px rgba(19, 21, 26, .01);--ndt-note-background: rgba(37, 99, 235, .15);--ndt-note-border: rgba(37, 99, 235, .3);--ndt-warning-background: rgba(202, 138, 4, .15);--ndt-warning-border: rgba(202, 138, 4, .3);--ndt-error-background: rgba(220, 38, 38, .15);--ndt-error-border: rgba(220, 38, 38, .3)}.dev-toolbar h1,.dev-toolbar h2,.dev-toolbar h3,.dev-toolbar h4,.dev-toolbar h5{font-weight:600;color:var(--ndt-text-primary);margin:0}.dev-toolbar h1{font-size:var(--ndt-font-size-xl)}.dev-toolbar h2{font-size:var(--ndt-font-size-lg)}.dev-toolbar h3{font-size:var(--ndt-font-size-md)}.dev-toolbar h4{font-size:var(--ndt-font-size-sm)}.dev-toolbar h5{font-size:var(--ndt-font-size-xs)}.dev-toolbar hr{border:1px solid var(--ndt-border-subtle);margin:1em 0}.dev-toolbar p{line-height:1.5em;margin:0}.dev-toolbar{position:fixed;bottom:0;left:50%;z-index:999999;transform:translate(-50%);display:flex;pointer-events:auto;background:var(--ndt-bg-primary);border:1px solid var(--ndt-border-primary);border-radius:9999px;box-shadow:var(--ndt-shadow-toolbar);height:40px;overflow:hidden}.dev-toolbar--active{opacity:1}\n"] }]
2980
+ }] });
2981
+
2982
+ class DevToolbarFeatureFlagService {
2983
+ constructor() {
2984
+ this.internalService = inject(DevToolbarInternalFeatureFlagService);
2985
+ }
2986
+ /**
2987
+ * Sets the available flags that will be displayed in the tool on the dev toolbar
2988
+ * @param flags The flags to be displayed
2989
+ */
2990
+ setAvailableOptions(flags) {
2991
+ this.internalService.setAppFlags(flags);
2992
+ }
2993
+ /**
2994
+ * Gets the flags that were forced/modified through the tool on the dev toolbar
2995
+ * @returns Observable of forced flags array
2996
+ */
2997
+ getForcedValues() {
2998
+ return this.internalService.getForcedFlags();
2999
+ }
3000
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3001
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagService, providedIn: 'root' }); }
3002
+ }
3003
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarFeatureFlagService, decorators: [{
3004
+ type: Injectable,
3005
+ args: [{ providedIn: 'root' }]
3006
+ }] });
3007
+
3008
+ class DevToolbarLanguageService {
3009
+ constructor() {
3010
+ this.internalService = inject(DevToolbarInternalLanguageService);
3011
+ }
3012
+ /**
3013
+ * Sets the available languages that will be displayed in the tool on the dev toolbar
3014
+ * @param languages The languages to be displayed
3015
+ */
3016
+ setAvailableOptions(languages) {
3017
+ this.internalService.setAppLanguages(languages);
3018
+ }
3019
+ /**
3020
+ * Gets the languages that were forced/modified through the tool on the dev toolbar
3021
+ * @returns Observable of forced languages array
3022
+ */
3023
+ getForcedValues() {
3024
+ return this.internalService.getForcedLanguage();
3025
+ }
3026
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3027
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageService, providedIn: 'root' }); }
3028
+ }
3029
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: DevToolbarLanguageService, decorators: [{
3030
+ type: Injectable,
3031
+ args: [{ providedIn: 'root' }]
3032
+ }] });
3033
+
3034
+ /**
3035
+ * Generated bundle index. Do not edit.
3036
+ */
3037
+
3038
+ export { DevToolbarComponent, DevToolbarFeatureFlagService, DevToolbarIconComponent, DevToolbarLanguageService, DevToolbarToolComponent };
3039
+ //# sourceMappingURL=ngx-dev-toolbar.mjs.map